天幻网

 找回密码
 立即注册
搜索
热搜: 最终幻想
查看: 445|回复: 0

【超精彩图文】FF2遇敌全过程代码完全分析,易懂的汇编修...

[复制链接]

1

主题

398

帖子

1888

积分

空手家

Rank: 5Rank: 5

积分
1888
发表于 2017-2-19 05:05:31 | 显示全部楼层 |阅读模式
本帖最后由 セフィロス 于 2017-2-19 05:18 编辑

【超精彩图文】FF2遇敌全过程代码完全分析,易懂的汇编修改教学



一段不朽的英雄传说开始了,这是巨有纪念意义的一刻.按照设定,畜生的英雄,不是不是,初生的英雄要经历一次全灭的磨难.没关系,这样反而会更加激起英雄越战越勇的勇气和意志,从而最终强有力的去伸张正义,来吧!!









我擦,这和预想的劫数不一样啊.好吧,反正结果是一样的,睁一只眼闭一只眼吧.等下正式开始历练的时候认真起来,以后,哼,野猪,你等着!!











终于受罪完了,一出门果然风和日丽秋高气爽,那么开始打怪修炼吧…..等等,眼前的是什么东东,能吃吗?











哎哟我去,好奇害死猫了,怎么惹到这么个祖宗了 啊.绕开他能躲多远就多远吧












绕开绕开,再找一次,总算碰到个看上去能对胃口的小怪了,软柿子不捏还等什么时候捏,别怪我们欺负人,我就是喜欢以多欺少,有本事你也叫人来怼我们啊,哈哈.









Excuse me?发什么什么事,what the fuck!?









我勒个大艹,尼玛这鬼地方没法出英雄,这特么地狱都比这里和谐安详!!我们还是自觉滚回自家的天顶星去吧!!!







OK,正题开始了,以上小故事用到了选择出场怪物的代码.其实我一直纳闷,30年了,FF2被人里里外外翻个底朝天,各种修改代码层出不穷,EMUcheat里稀奇古怪的修改项目眼花缭乱,穿墙,瞬移,易容,操控等等应有尽有,然而,我要说然而,愣是不见一条项目:自主选择打哪个怪…



FF3及以后的系列作早就有了,FF2还不见有人说出来.不知道是有什么业内规定在限制,还是有不可描述的苦衷,咳咳,反正今天我就要说出来了


在地址7B48上锁定对应代码,就可以选怪物打了
简单介绍几个有价值的代码:
16 绿龙
17 暗影皇帝
18 拉米娅女王
19 蓝龙
1A 贝希莫斯之王
1B 红龙
1C 僵尸波肯
1D 金刚兽
1E 苍蝇王
1F 堕落天使阿斯特罗斯
94 白龙
7E 冥皇
68 铁巨人

锁定后,走哪里遇敌都是指定的怪物,你甚至可以在船上打铁巨人.



好了,看热闹的可以去开始折腾打怪了.要是你觉得以后你自己也想找出来这样的地址,而不是苦等30年等人来告诉你,那就继续往下看吧.



玩过FF2的人都了解,这游戏有很多稀奇古怪的怪物出场,有单枪匹马的,更多的是几个一组玩群殴的.虽然组团的怪物组合的花样也是不少,但是其实你仔细想想,他们其实并不是没任何限制的瞎组合在一起的.你见过拉米娅皇后和哥布林一起出场吗?你见过红衣骷髅和海鱼一起出场吗?你见过绿魔法师和软泥怪一起出场吗?你肯定见不到,因为程序员就没设定过这种组合.那反过来说,你能见到的多种怪物出现在一个战场里,其实那是程序员预先设定好的一种组合,而不是随机瞎抽取三四种怪物放到战场里让主角打.好比你去天上人间,VIP房里的招待公主是范冰冰+李冰冰.普通房里等着的是杨幂+张靓颖.重口味房里是潘迎紫+赵雅芝+林青霞.异口味房里是泰森和比利.神口味房里干脆就是一条藏獒…咳咳.



总之呢,你看到出现的怪物组合,它有编号,你可以当作这是一户怪物家庭,它有自己的门房号,如果抽到这一家门房号,全家怪物都上,不会出现甲家庭出一种乙家庭也出一种组合联合家庭模式.


实际上,全系列FF都是这样,FF3是这样,FF8也是这样.


于是现在接下来就要确定怎么查找这个门牌号.


我建议是弄两个游戏不同进度的记录,早期的进度地图上还都是小蚊子小哥布林,后期进度全是卫兵法师这样,反正吧,要碰到的怪物家庭一眼看上去就不是住在同一种小区类型的就可以了.


这么做是干什么呢,用来模糊搜索大小的,既然不一样,就有大小嘛.可以先假设甲家庭门牌号比乙家的大,反复切换着记录遇敌搜索大小,如果找不到确定结果,就假设甲比乙小再继续进行,这样通过反复遇敌查找到遇敌代码7B48,如下图就两个结果,再手动去检测一下就能确定下来是7B48了.


注意细节,一定要每次进入战斗后再模糊搜索,因为FF2编程设定大地图上是一套代码,战斗开始了同一个地址会被覆盖用另一套代码,也就是战斗代码.


当然如果有更好的搜索门牌号的方式也请不吝赐教.





(看不清楚的话请放大网页)

那么这个敌人家庭的门牌代码是平白无故从哪里送过来给写进这个地址的?所以需要在7B48下断点,这样遇敌的时候汇编软件会瞬间盯上是哪一段代码供我们分析.





这次出场的这群怪物的房号是6B,这个6B是通过地址$006A发送过来的









去看了$006A里果然是6B,可是看看这个地址附近的一堆数据,怎么看也不像是分配出现哪些怪物组合的数据库,这个006A显然也就是个小头目,只是负责转运代码的.实际上按照经验,这么靠前的地址基本都是调度中心,数据库都在内存很后面的位置,调度中心去读取怪物组合的数据出来送到7B48,然后你就看到这组怪物出现在你的战场里面了.而这个006A调度头目,它的任务不只是给你送怪物,你换装备它要去计算加攻加防,你坐船还是坐飞机,它要负责计算你的移动速度和坐标,还有显示什么交通工具在画面上.实际上给你送什么怪物让你砍只是它一堆任务里面的一项功能.这类小头目有很多个呢,像”遇敌率”在00F5,”走几步可能遇敌”在00F8,很多细节都有调度在控制转运的.



所以嘛,那就继续顺藤摸瓜,监视地址006A这个调度中心,是哪家快递把6B送过来的




(敲黑板,注意了划重点了!!)

当调度小头目006A开门收快递6B的时候一把扯住快递员:
--别走,你哪家快递的?
--我是幻想快递公司的
--没听说过,不过不关心了,是谁让你送快递给我的?
--是个叫($80),Y的人
--这特么什么破名字,开放二胎后的爹妈起名越来越神经兮兮了是闹哪样
--老板,这名字的代码是可以破译的,我给你解释一下.($80)表示在你们调度中心另一个老板0080,对,就是你($6A)的同事,你认识他吗
--擦,当然认识,这是我们调度中心副主任,我的年终奖有多少都是他说了算的
--哦好的,那么这个副主任,他现在得到一个情报,地址82D0是怪物组数据库,玩家碰到哪组怪物都是82D0+Y来决定的.如果Y是2,那么就是82D2这组怪物出场,如果是6,那就是82D6这组怪物出场.出场怪物的房号决定后,就叫我把房号数据快递给你,好让你赶紧安排怪物出场.根据我快递多年的经验啊,玩家特别喜欢吸血女妖啊拉米娅皇后这类身材喷血的敌人,颜值毕竟是第一生产力嘛
--(为什么我像是在干一个老鸨的活…)哦,明白了,原来是我的顶头上司($80)传任务给我呢,我这就去布置场景,咳咳…
--好的,那么赶紧去看看82D0到底有可能出现哪些怪物组的门房号吧








来到内存82D0附近一看,唉哟我的亲妈,简直是狼入羊圈,不是不是,简直就羊入狼圈!密密麻麻的全是怪物的门牌号,特么根本就是怪物帝国.82D0只是怪物城的一个小区号,还有其他100多个怪物小区共同组成了FF2的怪物数据库.

82D0小区里住着8户怪物人家分别是A6,E1,6B,A7,57,61,2F,A4.其中6B人家是哥布林和绿炸弹一家7口,上面有截图显示(特么这是什么家庭…).像A6家庭是大鸟怪家庭,没其他稀奇古怪的成员(这还像个家).到底哪一户人家上战场呢,就由Y来控制,Y取0-7自然82D0+0是第一户,82D0+7就是第八户怪物家庭.你在这地图上连续打仗200场,或者800场,永远都是这八户怪物家庭出来见你.那你肯定吐都吐死了,不免要暗忖,那82D8这第九户人家怎么就不出来呢.


对不住,那是另一张地图的第一户人家,你想见这户人家,请去对应的地图再连续干仗255场,绝对能见到至少一次.


分析到这里,其实你已经可以瞎折腾了,你只要把这8户人家的门牌号全部改成一样,那在这张图了你永远就只会碰到一种组合的怪物了.你要说这有啥意思啊,打谁不是打啊


哦哟,这30年来FF2这游戏被多少人瞎JB乱传说:铁巨人只会出现在某个房间的第几根柱子和第几根柱子之间,其他地方不会出的


有人立刻反喷放P,我在墙角边也碰到过,妈个鸡还没来得及出手它就逃走了!!


追了铁巨人好多年呢,还不是依旧众说纷纭,每当我看到这样的争论我就笑喷.铁巨人,可遇不可求,你能碰到它,但是你不能把握什么时候碰到它.


现在,我来掌控一下吧




铁巨人的门牌号是68,把82D0小区这八户人家的门牌号全部统一成68后,只要遇敌,无所谓出来的是第几户人家,反正都是铁巨人,该掉装备还是会掉,该逃跑的还是会逃跑,别无二致,货真价实.


我有点纳闷,为什么那么多人见到铁巨人激动的不行呢,又不是苍井空老师出现在你面前要对你进行人生的辅导.玩家说了,它掉源氏装备啊!最强装备啊!!


源氏装备是垃圾啦….谁要是供着源氏装备当宝,谁就还是FF2的门外汉完全没玩明白啊


好了,讲解到这一步,你考个211一本啥的已经没问题了,可以下课回去了





接下来的课程请立志清华北大的同学集中精神了



那就是,为什么有时候抽到的是第一户人家,有时候抽到的是第六户人家.凭什么第八户精壮人家不上战场,却要第三户孤儿寡母还要去枪林弹雨被主角们砍?


因为这是军令!!军令如山!!


也就是说,接下来要分析的是,这个Y为什么取值是0-7摇摆不定.就像刚才提到的,为什么这个Y不会选到第九户人家去?




要分析Y的取值变化原理,还是老规矩吧,先看看是谁把02数据送给Y的






根据代码可知,是$C5C8,X把数值02赋予了Y.那么$C5C8,X是什么意思呢,就是地址C5C8+X,这个X啊,其实性质上和Y是一样的,也是一个偏移量,也有人在暗地控制这X等于多少从而决定C5C8家往右数几家的邻居住的是老王.那么谁在控制X等下就会讲到.在本次战斗这一刻,X的数值是1A,于是C5C8+1A用微软自带的16进制计算器按一下就可以算出是C5E2.



我们在内存区里去看看C5C8那一带的风景怎么样,顺便看看附近的C5E2放着是不是02


由图中红框圈起来的部分可以看到一堆数字的排列,对游戏修改乱七八糟的内存数据的美观程度来说,这红框内的数字排列其实算是相当有美感的画风了,所以,你要是积累了不少修改经验的人,就会敏感的察觉到,这一块内存可能预示着重要的内容.


说句题外话啊,游戏修改这门功课,思路第一,工具第二,在此之上,还有非常重要的加成,那就是长年累月的修改经验,丰富的经验加持,好比开了挂一样,灵光一闪,一整片天空就豁然开朗在你眼前,然后就大踏步的走进了一个游戏编码的核心区.比如像修改最终幻想2这个游戏,甚至可以参考最终幻想1和3,因为这是同一家公司的人开发的作品,他们就统一设定遇敌率代码为00F5,没错,123这三作的遇敌率都是这个内存地址,这就是经验的强力辅助效果.那么经验积累怎么来呢?还能怎么来啊,经验经验,就是多折腾呗,说句不上台面的,就算是犯罪经验,那也是多干坏事也能成为犯罪高手的




关于修改游戏思路第一工具第二的说法,有个很生动的例子.那就是给你一个任务,修改麻将游戏我想怎么胡就怎么胡的命题.再精确点,我要求你上手就是一把万字牌清一色然后开局就天胡,你说怎么办吧


于是你就一脸懵逼了吧


一张麻将牌是五万,他在内存地址里的数据难道也是50000?那我问你,一条,这小鸡在内存里面二进制代码是什么?


我完全不知道这100多张麻将牌各自对应的内存代码是多少,你说你有逆天的修改工具,有什么用?你连入手点都没有头绪


这时候的思路就是,开始摸牌,摸到一张五万,我不知道代码多少表示五万这张牌,我模糊搜索,我再摸牌,等摸到另一张万字牌,九万.我还是不知道九万的代码是多少.


怎么办?


我不管五万和九万的各自代码是多少,但是我一定能确认,这两张牌的内存代码是不一样的.既然是不一样的,那肯定是有大有小的.你可以认为五万的代码比九万大,也可以认为小.按照编写这麻将游戏的生物也是人类这个角度去考虑,他也很苦逼的需要天天熬夜当码农养家,他自然不会刻意把五万的代码设定得反而比九万小,不出意外,他也想编程维护的时候顺利通过,绝大多数会设定九万比五万的代码要大,实际上根据我修改过的10多款麻将游戏的经验来看,编写麻将游戏的程序员无一不是这样,不仅所有的九万代码都比五万大,还不多不少恰好大4.多数麻将游戏01表示一万,05表示五万,09表示九万.那么小鸡一条呢,11,二条呢,12,九条呢19.那么九筒呢,29.


于是,摸到比五万大的万字牌,就模糊搜索变大,比五万小的,搜索变小,几下就能把100多张牌的代码全部理清楚了.既然连麻将牌的代码都知道了,你开局直接跑内存把起手的一把烂牌十三不靠全部强制修改成万字清一色,按下胡牌键,对面就跪了…




所以,修改思路比什么都珍贵,角度刁钻,一刀就赢!!



详细的麻将修改图文帖请看:











看来我废话啰嗦太多了,我们继续回头说红框里的这段数据.

先数一下是什么数据吧
从C5C8开始有很连贯的:
00有12个
01有12个
02有12个
03有12个
04有6个
05有6个
06有3个
07有1个

这些数据合计有64个位置,内容从00-07八种.看到这里有的道友多少有点意识到了,如果Y只能在这64个位置里面取一个数字出来,那只能是0-7范围,是不可能出现8或者更大的,这就是为什么怪物小区里不会选出第九户人家上战场的根本原因


接下来继续分析,这64个位置随机挑位置选数据,由于数值”0”有12个,那么挑出来0送给Y的概率就是12/64,意味着怪物小区第一户怪物人家上战场的概率就是12/64.同理,数值”1”也有12个,那么第二户人家也是12/64出阵.这样推算,小区前四户人家出场的概率都是12/64,第五户是6/64,第六户是6/64,第七户是3/64,第八户是1/64.


因此可见,一张地图上八户怪物人家出场也是分三六九等的,不是大家公平都是1/8,第八户人家有特权有后台,它出来干活的次数最少.这也解释了为什么铁巨人并不是玩家平均打个8场就能见到一次的感觉,实际上他的出场概率是1/64,确实是很难一睹芳容,呕….


现在已经明朗,这64个位置上的数值是用来决定推选第几户家庭上战场的,比如想碰到特权的第八户铁巨人,Y就必须是07,精确点的话应该反过来说,如果数值07送给了Y,那么特权的铁巨人也只能登台献艺了.取出哪个位置送给Y,这就由X这个 偏移变量来控制了,想要读取到07,X就要把偏移拉到63这么大,才能把红框数据区最后面位置的07读取给Y(63换成十六进制就是3F).可见上面还有人在控制X是在0-63之间取值的,否则大家请看代码区红框外,一旦取值超过07,Y就不知道要选出第几户怪物,可能是第135户,可能第254户,皇帝老子都没住在这么深的巷子里,程序直接崩溃咯…..







X具体是多少,而且必须禁止超过63是怎么控制实现的呢?命令就是上图的这几句代码

具体分析如下:
调度中心的副总工程师$00F7,他记录着你的主角又开始了的这一场恶战,到底是你玩FF2这游戏的第几场恶战了.也就是说,你每打一场怪物,副总他就默默把数据+1.这个战斗累计值,有什么用呢?


副总说,比如你准备打第0x46场战斗了,那么去地址F900+46,也就是F946,取一个数据出来,我已经在F900那里预先埋伏好了255个预设数,你去取第F946这个数,别问我这数是多少,我年纪大了记不住255个数字,反正很乱很乱,足够当作是随机数了咳咳.


那么你取来了地址F946上的这个值,一看,原来是1A

然后呢,拿1A和3F与一下


虽然你已经准备冲刺清华北大的人了自然听得懂”与”是什么概念,不过鉴于客座教授我上课生动风趣,有不少旁听生也来了,我就简单说说与的要点

1A用二进制表示是0 0 0 1 1 0 1 0
3F用二进制表示是0 0 1 1 1 1 1 1
与的结果               x x x x x x x x
与的规定就是这八个0啊1 啊,上下对齐的都是1,那个x才能是1,否则就是0


这样的话,1A和3F与出来的结果就是00011010,这是十六进制的1A


这个1A和跟3F与的1A是两个数,虽然恰好都是1A


其实与这个规则有个生动形象的比喻,那就是一个木桶一片一片木板拼起来,现在有个木桶,它就只有两片半圆的木板组成,只是两片高低不同,这木桶能装的最高水位,可以比两片木板都低,但是你如果想要多装水,也永远超不过矮的那一半木板的高度,自然更加超不过高的那一半了.


这就是为什么拿3F当作木桶的木板高度来设定了,这样一来,任何数拿来和3F与,得出来的水位永远超不过3F这块板,因为超过3F的水位溢出来可能就碰到电线引起短路火灾把FF2这老房子给烧啰!!

控制好了水位,我们去副总说的F900区域去参观参观吧,副总慈眉善目高瞻远瞩早就设定好了锦囊妙计,才让我们玩FF2有那么多惊喜啊






哎哟妈咧,这就是副总的锦囊妙计啊!!这简直狗啃过的地皮,别说副总老眼昏花说记不住是什么数据了,特么让爱因斯坦来记也是翻白眼好嘛!!简直密集恐惧症福利啊


然而仔细一看,我去,这256个数字居然真的没一个重复的,从0-FF全部都有,只是顺序完全打乱,这是人工实现随机数啊,真正的用心良苦啊!你每开始一场战斗,偏移就加1,取出来的数字去和3F与一下,整整256个不带重复的数值去和3F与,绝对绝对能实现3F这么高木桶里,所有各种高度的水位至少出现1次了,也就是说铁巨人那地图你只要肯连续晃荡打上255场,至少能碰到1次


等等,你要问,那我要是打第257场了,怎么办,会不会溢出,会不会烧老房子!


也就是说,副总那边已经帮你记账到FF场后,你再打一场,副总怎么记账?


副总那边的账目变成00,所以,F900那片狗啃过的田里,从F9FF突然跳到F900重头开始啃,哈


FF2的遇敌代码课程就这样上完了,摸代码走向我们都是反着顺藤摸瓜的,现在让晕得不行的你们理一理思路,我们已经知道遇敌是怎么个流程了,开始顺着说一次遇敌的正序进行过程


其实顺着说可简单了.主角出门开始在森林里瞎逛,存心要找怪物的茬.00F7副总在你遇敌的时候,数字自动加1,比如从8变成了9,然后去F900那片野狗满地跑的田里找到F909这块泥巴,上面写着57,好的,现在把57拿来与木桶3F与一下:
01010111 (57)
00111111 (3F)

00010111 (17)就是得到水位,你看,比57和3F都低吧


那么现在拿着17去C5C8(就是那片12个00啊,12个01啊那片地址)去顺着数第17个是什么数,很明显,是01,那么调度中心的副主任$0080就明白了,原来这次Y是01,那么就是该地图上怪物小区的第二户怪物家庭上场,这户怪物家门房号是6B,副主任让快递公司把这个6B门房号送给调度员兼宪兵队长$006A,让他带人去砸开6B家的门把全家怪物都押上战场7B48让主角砍.立刻执行,否则扣年终奖!!


主角打赢后继续走,再遇敌的时候,副总再+1,野狗地里再去翻泥巴,这样反复翻256次,什么怪物家庭能躲开宪兵队长的翻箱倒柜啊!铁巨人都要被戴着枷锁供主角调戏娱乐了啊!


弄明白了吧,下课了!

_________________________________________________________________________________________________________________________________________ [center][b]到浙大来求学的诸君,须有两个问题要问问自己:[/b][/center] [center][color=red]1.到浙大来做什么?[/color][/center] [center][color=red]2.将来要成为什么样的人?[/color][/center] [center][b][i]---竺可桢[/i][/b][/center]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|FFsky 1999~2017 ( 老子在国外备个毛案o^o^o )

GMT+8, 2017-9-24 23:41 , Processed in 0.366695 second(s), 14 queries , WinCache On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表