注册 | 登陆

FC霸王的大陆计谋修改教程

首先我要说明的是我自己也不是6502的高手,对其各种指令及寻址方式等也没有理解得很透彻,所以有关FC机能及6502方面的问题请直接查找相关资料,本教程中如无必要不会做相应介绍,不过对于霸王大陆计谋的修改来说也用不着太高深的知识。

OK,废话也说了不少了,言归正传,来看看在修改之前需要准备哪些东西:

1.  FC霸王大陆ROM一个,注意是单独的ROM,不要模拟器一体的那种。我用的是原日版的ROM

2.  VirtuaNES Debugger版本一个,只有这种版本才支持反汇编调试,这也是为什么不用模拟器一体的ROM的原因。我用的是0.0.6.7版。

3.  16进制编辑器一个,修改ROM文件用。我用的是UltraEdit。或者游戏修改器一个,修改内存用。我用的是GM8

4.  耐心……

5.  耐心……

 

正式开始前还得最后再把思路理一下,应该从什么地方下手呢?有一点很确定,那就是游戏是根据智力、等级以及特殊人物这三个因素来确定人物拥有哪些计谋的,那么我们就要从其中的一个来入手。我们再仔细的考虑一下,从一般意义上讲游戏都应该是先特殊再一般,但是根据测试显示,无论是谁在低等级且智力不同的情况下所拥有的计谋是不同的,所以我决定先找出这个最一般的对智力的判断,接下来的问题就是游戏会在什么地方进行判断了,通过在野战场景中对人物智力进行修改我最终确定了游戏是在我们选择计谋指令到计谋列表出现之间的这段时间进行的判断,于是一切就绪。

 

准备好了吗,那么就跟我来吧。よし,いくぞ。 

 

正式开始,用模拟器打开霸王大陆的ROM,重新开始游戏,随便选个君主,这里我选刘备,打开模拟器的MemoryView窗口,在6050这一行我们找到了刘备初始城(并州)的武将列表(需要耐心,具体过程略),DE,26,99(都为16进制,以下出现的内存中的数据如未特别说明都为16进制)分别是刘、关、张的人物代码,然后我们紧接着的那个字节的FF改为6D也就是诸葛亮的人物代码,这样城里面就有诸葛亮了,我们需要他来查找计谋(因为他的计谋覆盖面最广……),如图:

 

大小: 32.73 K
尺寸: 389 x 211
浏览: 51 次
点击打开新窗口浏览全图

 

回到游戏,让诸葛亮出兵随便攻打附近的一座城,进入野战场景。

再次来到MemoryView窗口,这次我们在68D0这一行末尾找到了诸葛亮的数据,排列顺序为体、武、知(俗称智力)、忠、德,于是得到智力的地址:68DE。见图:

大小: 34.34 K
尺寸: 389 x 211
浏览: 50 次
点击打开新窗口浏览全图

从现在开始就到了最需要耐心的部分了,打开Debug窗口,先点暂停,然后对刚才找到的智力的地址下断点,即在“访问XXXX内存地址时暂停”的XXXX部分填上刚才找到的地址,点击旁边的确定,然后就可以回到游戏中了,如图:

大小: 48.7 K
尺寸: 347 x 423
浏览: 45 次
点击打开新窗口浏览全图

现在我们来试着选择けいりゃく(计略)指令,很幸运的,程序在D4CE这里停下来了,接下来我们就要试着单步执行来好好研究一下了(这里我们是比较幸运的一次就找对了地方,有些时候我们下的断点有可能引起不止一次的中断,这时就要好好研究一下后面的代码以确定哪一个程序片断才是我们真正需要的,切记),见图:

大小: 46.76 K
尺寸: 347 x 423
浏览: 28 次
点击打开新窗口浏览全图

在这么详细的注释面前我想大家应该都看得懂这一小段代码吧。我只具体解释一下他们在游戏中的作用就可以了。

D4CC、D4CE这两条指令很明显是获得当前人物的智力值,而后面一连串的比较指令我想大家也都猜到了,对,就是用当前人物的智力值与游戏设定好的几个数值进行比较,而作用经过测试知道智力低于0x28(十进制40,下同)的武将只拥有火计和陷阱两个计策;智力在0x28到0x3C(60)之间的多出(在前一级基础上,下同)虚兵和要击两个计策;在0x3C到0x4B(75)之间的多出乱水和火箭;在0x4B到0x55(85)之间的多出伪击转杀和共杀;而高于0x55的再多出笼络和落石。可以看到到目前为止都没有进行过等级和人物代码的比较,说明这些计策是只要任意武将智力达到条件就能拥有的。 

还有一个有趣的现象不知大家注意到了没有,就是每当条件不满足即将进入下一个判断之前游戏都会把初值为0的Y寄存器自加1,然后在D4E6处使用了Y寄存器,虽然目前不能确定,但很有可能这是一个标记值,用来告诉后续的程序该人物应该拥有哪些计谋。 

大家一定奇怪讲了这么多怎么没有见到我们最关心的那些特殊人物才能拥有的计策呢,别急,刚才不是说了吗,游戏应该是会先特殊后一般的,所以可以断定那些代码应该在这之前就出现并且进行过判断了,我们接下来的任务就是找到它了。 

回到游戏,退出计谋界面,打开Debug窗口,在“注释中出现XXXX暂停”的XXXX部分填上“0x6D 比较”(不包括引号,注意有空格),程序在D4AA处中断了,往前找找看,我们终于在D404处看到了令人兴奋的东东,见图:

大小: 47.67 K
尺寸: 347 x 423
浏览: 39 次
点击打开新窗口浏览全图

废话不说,直接解释:

D404到D40C:取得当前人物等级并保存;
D40F:取得当前人物代码;
D412到D43C:与特殊人物代码比较,看是否添加连环和十面埋伏计策;
D44D到D463:与特殊人物代码比较,看是否添加水攻和连弩计策;
D47D到D487:与特殊人物代码比较,看是否添加劫火计策;
D4AA到D4AC:看此人是否诸葛亮。 

这些都很清楚了,中间地址可能有些间断,我们暂不关心。

继续单步运行,因为此时我们的人物是诸葛亮,所以进入奇门遁甲条件判断,见图:

大小: 48.54 K
尺寸: 347 x 423
浏览: 35 次
点击打开新窗口浏览全图

可以看到,刚才保存过的等级这时候被取了出来并且和6进行比较,所以只有等级大于等于7级(等级值是0为1级)时诸葛亮才会拥有奇门遁甲计策,而不满足这个条件时则会继续往下判断,6级时增加劫火,5级时增加水攻和连弩,4级时增加连环和十面埋伏。

我们的任务仍然没有结束,仅仅了解这些东西对于我们的修改来说还是不够的,看来有必要再继续跟踪下去看看。由于我们的诸葛亮现在是3级,所以上述的条件都不满足,这也给了我们机会窥到更多的东西,见图:

大小: 47.04 K
尺寸: 347 x 423
浏览: 40 次
点击打开新窗口浏览全图

可以看到,游戏将诸葛亮的等级分别与6、5、4、3比较,而我们又一次发现了那个有趣的东东:每当一个条件不满足时游戏就会将初值为8的Y寄存器自减1。想起来了吗?在我们刚才对智力下断点的地方也出现过类似的代码,然后两两中和就可以看出此时Y寄存器中的确实是一个标志值,经过测试,从0-6分别代表了游戏中的前七行的计谋(每行两个,0为第一行),而7、8则分别代表劫火和奇门遁甲,这也是为什么普通武将最多只能拥有5行计谋的原因了,普通武将判断智力的地方最多只有4个“INY”语句,也就是Y最大只能到4,当然只有5行计谋了。
 
这以后的程序大家有兴趣的也可以看看,主要是调用一个子程序以获得人物数据的偏移地址,然后就到了我们最先追到的D4CC,也就是智力判断的地方,这样两条线索就联系起来了,可以看出特殊人物如果不满足等级条件的话就会像普通人物一样去进行智力判断了,但是当满足等级条件时则不管智力多少都会出现特殊计谋。最后我又用了几个不同的人物来满足不同的条件进行测试,发现无论什么条件程序最后都会运行到D4E6这个地址,也就是说到这里为止计谋的判断就结束了。
 
至此关于游戏中计谋的判断我们可以说是已经研究得很透彻了,从这里可以看出如果想对某个武将拥有的计谋进行单独的修改几乎是不可能的,那需要把这一部分的程序全部重写,并且还得开辟新的空间来为每个武将单独保存计谋列表,这就完全不在我们的讨论范围内了,如果哪位高人有这样的技术还请不吝赐教。
 
对于这种特殊的系统,我们也只有采用一些变相的手段来达到某种程度上的对计谋的修改
 
这里我就把自己的思路简单的说说,具体的修改方法请参看附录。
 
既然我们不能对武将进行单独修改,那能不能进行成批的修改呢?答案是肯定的。我们可以在特殊人物判定的地方使用自己的一段代码来对人物的智力和等级进行判断,然后直接对Y寄存器赋予相应的数值,最后再直接跳到D4E6就可以了,这样就不用执行这一堆特殊人物和智力的判断了,自然就可以达到修改一部分武将计谋的目的了。
 
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
 
怎么样,是不是改完了?有没有发现什么问题啊?

对了!就是当战场上没有诸葛亮这个人物而使用奇门遁甲的时候,只能把对方的部队定住,但是每回合结束后他却不会损兵!这是个多么可怕的问题啊!看来我们的修改任务还差那么一点点,继续分析:

诸葛亮存在时一切正常,而不在了就会出现这个问题,说明在每回合结束时,游戏会把在战场上的人物扫描一遍,如果存在诸葛亮,那么中了奇门遁甲的部队就损失一部分兵力,否则就不会(双方都扫,我们让敌人的诸葛亮中了计策后由于他自己的存在会导致自己损兵……汗),我们接下来的目的就很明确了:找到这段代码!
 
继续回到游戏,改出一个会奇门遁甲的家伙,对敌方的一个家伙使用(要成功啊),打开Debug窗口,在“注释中出现XXXX暂停”的XXXX部分填上“0x6D 比较”(不包括引号,注意有空格),确定,回到游戏,结束本回合,然后我们就会在CF60停下来,见图:

大小: 47.96 K
尺寸: 347 x 423
浏览: 45 次
点击打开新窗口浏览全图

这里就是逐个扫描战场上的20个人物(无人的代码为FF)然后和诸葛亮的代码相比较,既然找到了就好办了,最简单的办法就是把CF62处的“LDA $0664, Y”语句改为“LDA #$6D”(代码见附录)就行了,这样无论扫描到的是谁系统都会认为存在诸葛亮这个人,这样奇门遁甲就能够损兵了!
 
我们的计谋修改之旅就到此结束了,希望这篇教程能够引领你进入高阶修改的殿堂,如果大家有什么意见、建议或者疑问的欢迎和我联系,大家共同探讨。


附录
计谋修改后的效果:

不再存在特殊人物;
智力89以下的人物的计谋无变化;
智力为90-94的等级足够时增加连环和十面埋伏;
智力为95-97的等级足够时增加水攻和连弩;
智力为98的等级足够时增加劫火;
智力为99的等级足够时增加奇门遁甲。 

下面是我自己写的一个对武将智力和等级进行判断的6502ASM程序源码:


LDY #$02        ;智力相对于人物数据起始地址的偏移送寄存器Y
LDA (#00), Y     ;将智力读取到寄存器A
LDY #$08        ;标记初始值为8 
CMP #$63        ;0x63(99)和A比较
BCS #$XX       ;若大于等于99则转到相应的等级判断,具体偏移数XX待定,下同
DEY             ;Y--,减少计谋
CMP #$62        ;0x62(98)
BCS #$XX        ;98则转
DEY
CMP #$5F        ;0x5F(95)
BCS #$XX
DEY
CMP #$5A        ;0x5A(90)
BCS #$XX
DEY
CMP #$55        ;0x55(85)
BCS #$YY        ;若为85-89则到此直接转跳转语句到D4E6,偏移值YY待定,下同
DEY
CMP #$4B        ;0x4B(75)
BCS #$YY
DEY
CMP #$3C        ;0x3C(60)
BCS #$YY
DEY
CMP #$28         ;0x28(40)
BCS #$YY
DEY
JMP ($D4E6)      ;直接跳转到D4E6
LDA $0011        ;人物等级送寄存器A
CMP #$6         ;等级判断
BCS #$ZZ        ;满足的话直接转跳转语句到D4E6,偏移值ZZ待定,下同
DEY              ;不满足的话计谋减1
LDA $0011
CMP #$5
BCS #$ZZ
DEY
LDA $0011
CMP #$4
BCS #$ZZ
DEY
LDA $0011
CMP #$3
BCS #$ZZ
DEY
JMP ($D4E6)  


具体的修改方法: 

如图,无论是直接修改ROM文件还是修改内存,只需要搜索A图中的阴影部分数据(黄色部分不是),搜索到后将这些数据改为B图中的值就完成了上面提到的计谋的修改。

大小: 17.51 K
尺寸: 380 x 116
浏览: 48 次
点击打开新窗口浏览全图
A图

大小: 17.65 K
尺寸: 380 x 115
浏览: 39 次
点击打开新窗口浏览全图
B图

下面两幅下面两幅图的修改是针对非诸葛亮发动奇门遁甲不减兵的修改,同样也是搜索A图改为B图即可。

大小: 3.87 K
尺寸: 382 x 21
浏览: 32 次
点击打开新窗口浏览全图
A图

大小: 3.95 K
尺寸: 384 x 20
浏览: 37 次
点击打开新窗口浏览全图
B图

注:由于无论是单独ROM还是一体版,都存在很多种不同的版本,上面要修改的数据在这些版本中无论是内存还是文件中的地址都是稍有不同的,所以这里不提供具体的地址,请大家自己搜索,由此造成的不便还请见谅。

 

Tags: 三国, 修改, asm

« 上一篇 | 下一篇 »

只显示10条记录相关文章

DASM破解游戏资源入门级简易教程 (浏览: 2960, 评论: 1)
以前做的几个游戏修改器 (浏览: 2995, 评论: 0)

Trackbacks

点击获得Trackback地址,Encode: UTF-8

3条记录访客评论

xinyu大大,想问下霸王大陆内存修改器v2.1中“玩家阶段1”和“玩家阶段2”是什么意思,干嘛用的?那一块的“电脑下限”又是什么回事?

Post by heero0085 on 2008, April 24, 16:44 引用此文发表评论 #1

好像是不同阶段花的钱不同?还是增加的点数不同?
电脑下限好像是低于这个值就不学习?
N年没碰这个游戏了,全忘光了。。。

Post by Xinyu on 2008, April 25, 09:37 引用此文发表评论 #2

请问,为什么修改了武将的大限修改之后不能生效的?例如,把孙策的大限由202年修改为222年,但是204年他还是死亡了。我试过把孙策的其他资料改,重启游戏后都有效,就是“大限”这一项又回到默认的202年。我用的是2.1版本的修改器。
请不吝指教。谢谢!


========== Xinyu回复 ==========
体MAX,大限等数据重启后修改无效


Post by jason on 2009, June 11, 22:48 引用此文发表评论 #3


发表评论

评论内容 (必填):