FC上原版的吞食天地2 64物法
声明:必须队伍满(一般为7人)才能使用64物!!且第二章最多只能用两次64物!否则……会出现BUG,要么卡死,要么武将位置出问题!!!64物法有好多效果,这里只讨论64物变身的情况!
★64物法变武将
1、队中满7人,去役所拿第64个物品,队中会有2人变身成上一次战斗中敌方前2位武将
以鲁城曹操之战为例:
最初敌军阵容是曹操、许褚、典韦、庞德、荀彧。
故意战败,去役所拿第64个道具,队中会有人变成曹操和许褚。
当然,如果把曹许二人踢入编所再招出的话,鲁城就只剩典韦、庞德、荀彧三人了。
2、连续使用64物法:队中满7人,去役所拿第64个物品,队中会有2人变身成上一次战斗中敌方前2位武将,之后再去拿第64个物品(先要填满…),又会有人变身成上一次战斗中敌方3、4位的武将,接着是对方第5位和一个随机变出来的武将,之后再用64物变出的都是随机武将……可能就会出现一些奇怪的武将,像“刘封、诸葛瑾、李恢……”,或者出现任何其他武将…… (武将列表中的所有武将,包括头像和名字都混乱的绝世美男子E7兄)————用这招值得注意的是:刘刘大犯滥时,也有可能令武将位置出问题(不过,这种情况……我是没出现过!但,有没有出问题是一目了然的,你只要看看队里的7人的状态就行了,如果7人都不同,那就没出问题!!如果其中两人完全一样——人物、物品等都相同,走出去战斗还会自动变身,那么……大侠,这个存档还是不要了吧~~),所以……有太多刘刘时,最好把他替掉……
——连用64物的话,前5个变身位置是上一次战斗中敌方的5人,对方不足5人就会以刘刘顶足,且每次读档后立即使用64物的话,变出来的前5个就是刘刘……!第六个位置以后是随机的!!这种连用3次以上64物得到随机武将的方法就是通常所谓之“随机64物”!
注:随机64物不得不提的是,用随机64物变出来的武将不能直接在战斗中登场,让他出场的方法按人物性质不同有:
1、把他踢入编所再招出来;
2、如果是那些不能踢入编所的剧情人物(如关索),就去自杀一次,全员阵亡后,这些人物的自动复活机制就启动了,就能在战斗中出场了;
3、如果像姜维那样不能踢掉,也不能自动复活的特殊情况,只能通过某些特殊剧情让他登场了——如第五章入川前的系统重整队伍,又或者是通过和制好连弩后的天水孔明对话把他踢入编所……
★我方武将复制
1、去编所查看某人(如A)的能力,再去役所拿第64项道具。此时队中会有人变身成这人(A)和刚才一战中排位第二的武将!!——这是Aowsai前辈复制我方武将的方法!
2、把要复制的武将从编所里招出,再使用一次64物!队中会有人变身成这人和刚才一战中排位第二的武将!!——如果反复把多人踢入编所后招出,会复制出最后招出的武将和第二个敌人!这招主要用于攻下某座城时,想用64复制对方武将,但又不想自己队里那些喜欢的武将变身,就把他们都踢掉,换成一些垃圾进队,从而进行笼络对方武将大法!——比如说长沙一战,对方有韩玄、黄忠、魏延等人,把队里的人换好后(假设最后换入队的是金旋),那么连续用两次64物后,队里就复制出多一个金旋,外加黄忠、魏延等人……
注意:用过64物后,会出现兵力暴增的情况(此外还有攻击力异常的情况,每次只有几点伤害),我最常用的兵力恢复方法是:
1. 去役所存档——读档——睡觉~!
2. 把其中一个踢入编所再招出——睡觉!
如果只想其中某几个人的兵力恢复正常,那就把想恢复正常的人踢入编所再招出!
64物法所产生的Bug原理
64物法是多么神奇的秘技,在其它奇妙的秘技配合之下,它不仅可以使你的兵力在一瞬间暴增,又可以让你复制到你想要的三国中的顶级武将,还可以让你得到游戏中几乎不可能得到的终极装备和有价值的剧情道具,以及用它让你想要的道具变得狂多……更可以用它刷新隐藏物品,可能还有剧情……
那究竟为什么会这样呢?是设计者有意精心设计,还是的道的超级bug呢?这一切还是留给广大玩家去评论吧!
现在就正式进入主题。让我们一起详细分解!
我决定先从“64法调武器”说起,这样可以解释后面的问题。后面所说的,应该都是受其影响。
我们知道,要想调一个物品,必须知道所调物品的代码,并且设法把另外一个任意物品的数量变成和所调物品代码相等的数量,而且这个物品一定要放在寄存所的首页首行,然后寄存63个物品,取其最后一个,就可以调出想要物品。那问题来了,为什么非要是这样的一个过程,而不能将其改变……下面我们就细说。
纵看内存,竟然发现,所能寄存的64个物品的位置其实是与其各自所对应的物品数量相连的,比如模拟器自带型内存地址6540-65b0行,前4行(6540-6570)是所能寄存的64个物品的位置,后四行(6580-65b0)是与其各自所对应的物品数量。这又和我们现在所谈的主题有何关,那我可要告诉你关系大了,如果不是这样安排,可能就不会有和64法相关的一切bug了。为什么这样说呢,那我们再细细说来。
在寄存63个物品的情况下,为什么无论取哪个,都造成不了这样的现象。原因是程序执行了这样的命令,“取完一个物品后,后一个物品自动向前移一格,其对应的数量也要相应的移动一格(这是我自己的话,也是正常情况下。注:取第63个(最后一个)的时候,由于后面无物品,两个代码(物品和其对应数量)都是00,移之后就是00)”。因此在取前63个物品时是不会发生错误的。但如果取了第64个物品,那程序继续执行了这样的一个命令--取走后的物品的后面的物品向前移一个…… 因为是最后一个物品,因此最后一个物品的后面物品就循环到第一个物品以及它后面的物品,因此它们都向前移了一格,而第一个物品再向前移一格就消失了(注:这里所说的向前移一格是说其自身地址向它前一个地址移了一个,比如65800移到6570f),它并没有移到6530f,原因是这部分不可以写入(要是可以一直写入的话,游戏迟早会错乱!),因此此数据是硬挤出内存,消失了,并没有移到任何地方(我已经看过会变化的部分,没有位置留给它。)。虽说它的肉身已经消失了,但它的魂(所对应的数量)还在,那它的魂又会飘向哪里呢?问的太好了,那我们继续说吧!不管怎么样,先下结论!它的魂向前飘了两格子,它身后的精灵也紧追不舍。至于为什么是两个格子而不是一个格子原因据推测验证后,得到的是这样的一个答案--如果第一个魂只向前移一格子,那它会停在第64个物品的位置上,而第63个物品的位置上会显示“00”,那么,这就是一个错误的写入(这样它只会显示62个物品,因为第63个是空栏,因此程序判断到第63个位置就会停止了,不信的,自己试试就可以知道了);(其实,如果真的是写在那里,那也会因程序默认而变成0。)所以为了凑对格式保证不少物品(有时候会突然少两个物品,这个待会再作说明。), 就整体向前移了两格,第64个物品栏由于此时默认为0,所以原来第二个物品的魂,就灰飞湮灭了(变成了00)。以上只是我立足现实的个人推测(排除设计者做了其它指令的基础上)!可能想的有点复杂,其实事实可能很简单,设计者在这样的情况下,做了另一个指令:当取第64个物品时,……对应物品数量向前移动一个地址增加到两个地址(其实不止是物品数量地址移位了……这里只是针对“调物品”而说的)。我个人更相信这个说法,但还是有点疑问(这样秘籍只有神仙才能想出来、做出来),但是也很可能是我所推测的原因……但不管怎样,结论是不变的,数量整体上移两个地址,第64个物品位置代码刷为0。
上面说了那么多,现在已不难发现为什么要把另外一个任意物品的数量变成和所调物品代码相等的数量以及一定要把这个物品放在第一个且要取第64个物品而且所调物品只会出现在第63个物品位置而不是放入的第一个位置或其它位置的原因了吧。很简单,就是因为,只有在取第64个物品时,这个第一个位置上的物品的数量代码才会上移两个地址到达第63个物品代码所存放的位置。大家以后千万别再问什么物品该舍弃多少次了,对照物品代码,动下脑筋不就知道了吗?
看了上面的就不难发现怎样改变物品数量以及其变化规律了。
由于用了64物法后,物品数量整体上移两个地址,且又因物品整体只上移了一个地址,而第一个又被顶掉,所以现有的前61个物品的数量依次是其后一个物品的原先数量;而第62和第63位置上的物品数量则变成了zero(256)。不要奇怪,原因很简单,由于第64个物品取走后,其数量当然是0,而由于原先62、63位置上的物品数量向前移了两个地址,所以这里数值初始化刷新为0,也就变成了256个(补充一个,如果只是数量地址有值的话,而所对应的物品位置无值,那么这个数量地址的值是无效的,显示为空栏。)。
补充说明
是不是有朋友遇见过这样的情况呢,就是“取了第64个物品后,只剩下62个物品了。”
我是遇见过,而且还郁闷了好一阵子,因为当时我要看看到底能变出何许人物,而这样一次补充两个很费时,且耗物品,不一会儿就要去补充!现在有朋友可以告诉我这是怎么一回事了嘛!如果你不告诉我,那我就解释给你听吧!
造成这样的情况,原因真的很简单,就是因为你用了太多的64物法,以至物品数量数以零计的向前推移。这样,当第一、第二个物品的数量变成零时,你再用一次64物法,那么第63个物品的代码也就变成了零,零就是空栏,那当然只有62个物品了。
写到这里,终于快过一半了,鼓励一下大家的眼睛和脑袋!也自己鼓励自己256下!
下面就谈谈为什么兵力会暴增……有了上面的基础,那就简单多了!
还是先谈谈设计者留给我们的基础吧。如过兵力只用2字节来表示的话,那么最大兵力只有65535(2的16次方减1),而游戏正常进行是不可能达到这么多的,就算255级也达不到这个数,更何况,如果不通过修改,基本上是无法突破“级(、)限”的,用经验升级是升不到255级的就很好的说明了这点。说这些话,并不是向大家介绍什么,而是想说明一个问题,就是设计者完全没必要把兵力数设置成3字节,两字节就远远足够了,况且三字节的最大数字是16777215(2的24次方减1),从何要这么大的一个数字,因此从而更好的说明了一点,这完全是为了配合“六四物法”。
知道了这个基础条件(兵力存放信息是用三字节表示的),我们就来谈事实原因吧!兵力数量通常是不超过两字节的,在游戏中是“xx xx 00”的形式(在游戏内存中数是反过来表示的,实际数应是“00 xx xx”的形式),那在使用过64物法后,到底程序做了什么,这里发生了怎样的变化呢。问得好,那我就快捷的作出回答吧!6610-6630行这里的所有数值都向前移了两个单位(注:6630e和6630f的值由66400和66401的值补充),为什么是两个单位了,原因可能就是上面所说的而引起的吧(64物法的杰作,无关紧要不用理睬为什么……程序就是这样运行的。)。同样,由于6600行这里不准写入,66100和66101的值就不能写入6600e和6600f了,因此被顶掉了。而6640-6670行,则是这样执行命令的--这里值整体向前移动一个地址(66400的值被顶掉不写入6630f,因为这里已经有值来补充过了,就是前面所提到的……同样,这里的最后一个地址6670f的值是由66800的值来补充,而6680行和后面的都是正常运行,不移动的。要是什么地方都不疼不痒的动一下,那恐怕你刚拿完第64个物品,就听见叮当一声--死机了!)。知道了这么多,现在答案应该一目了然了吧!就是因为地址位移而使“xx xx 00”的“00”位置上有了值,所以兵力就突然猛增到百千万,当然也会一下变成零(全是位移惹的祸!)。
由此,我们可以总结出兵力在一段时间内的变化规律。
(这里说的是分子上的兵力数量,范围是6620d-66401,每个人的兵力数量是不间隔的,且这部分是在6610-6630行之间,根据上面介绍,因此这部分是整体前移两个位置。)在经过第一次64物法后,假设原先第一个人兵力位置上的代码是a、b、c,它后面一个人的代码是d、e、f,第三个人的代码是g、h、i,其后面的人的代码依次顺用字母表示……那么变化后,第一个人的兵力代码就是c、d、e,第二个人就是f、g、h,第三个人就是i、j、k,第四个……由此可见,每个人变化后的兵力数就是其原先兵力数代码的第三个位置上的数与它后面人的兵力数代码第一、二个位置上的数所组合成的一个数(这是内存中的数,要求值的话,不要忘了把位置反过来再算!)(注意:由于最后一个人其代码后的地址值一开始都是00,所以它是由它本身的第三个位置上的数与两个“00”组合成的,但如果用了许多次64物法后,则两个“00”会是由后面顶上来的有值或无值的数构成的。)。同样,再用第二次64物法时,是再第一次的基础上,照旧实行这个原则的,再用第三次……是第二次的基础上……(特别注意:这里的人物顺序,不是大家经过自己排列后的队列顺序,而是依次加入的顺序,程序会保留这方面的信息。)
为什么我要把分子上的兵力数量和分母上的兵力数量分开说呢?你一定感到很奇怪。但你又有没有对这个现象感到奇怪过--在分子和分母数量相等的情况下使用64物法,兵力是增多了,但分子和分母的变化是不一样的。原因就是分母的范围是66501-66605。在这个范围里每个人的兵力分母也是依次相连的,且这个范围是在6640-6670行,根据上面介绍,就可知道,这部分是整体移动一个位置的。分子移动两个位置,分母移动一个位置,那变化当然不同了!依照上面的推理方法,我们也可知道分母的变化规律--每个人变化后的兵力分母数量是由原先此代码第二、三个位置上的数与后一个人的此代码第一个位置上的数构成的(注:说明分子的“注”照样用来说明“这个”)。
“兵力暴增”这个主题到此快结束了,下面再给点误区提示,就了了这节内容吧!
误区提示
是不是有人曾经以为过,用了64物法后,有时兵力就可以无限了……我曾经就是这样认为的,是因为当时还在TV上玩,对这个半窍不通,看到我的兵力从几百,被打了一下后,突然又变到九十几万,那我当然会以为是无限了,我想当时玩的许多人都有过这样的想法吧。可现在我要告诉大家了,兵力还是有限的,只是因为显示的原因,不能把完全数字全部显示(我想,这可能是设计者有意捣的鬼,就是要让我们误认为是兵力无限了……何况当时那个年代有几家有电脑,对这方面很了解的又有几个,什么是修改器都不知道,这个不知道当然就不奇怪了。反而我们敢猜敢想的行为更为赞扬!)(注:最大兵力是16777215--三字节的原故!)。
快到最后了,再谈倒数第二个主题吧--人物的变化。
我们都知道用过64物法后,人物会发生变化,为什么会变化呢?恐怕现在已不用我解答多少了--就是这部分的值也发生了位移。但在这里,我不想重点说这个,而是另外的……
我们都知道,用过64物法后,所变的人物是刚才战斗中遇见的(如果未战斗,那就是00-刘刘!),那这又是为什么呢?我们打开内存,竟然发现我方人物代码后,紧跟的就是刚才战斗中所遇人物的信息。这里的我方人物代码排列顺序是按照人物依次加入队伍的顺序排列的,并不是你在屏幕上看到的队列顺序(这样保留信息,可能是设计者不想让玩家轻易发现人物变化规律,从而让玩家轻易找出bug的原因。同时,毕竟又有多少人知道屏幕中的队列顺序并不是内存中的队列顺序呢!这样用过64物法后,人物所做出的位置变化看起来就像是没有规律的,这当然是设计者所打的如意算盘咯!)。这部分的内存地址是66201-66207,而66208-6620c就是刚才战斗中人物的代码。比较这两个地址段就不难发现,一移位,我方人物就变成敌方人物了。我想这样安排这两个地址段,完全是设计者预谋好的,不然它完全没必要保留战斗中人物的代码信息,或者就刷新为0就行了(大多游戏都是这样,唯吞2独特)。这种做法完全是为了配合64物法,如果不这样做,还不知道游戏中特殊人物哪年才能复制好哩……
(特别注意,这部分有错误,请看最后修正补疑)谈完了上面的,那我们就说说,人物的位置变化规律吧!我们发现66201-6620c这段地址是在6610-6630行的范围内,还是根据前面的介绍,我们就可知,这里的值是整体前移两个位置的。那我们不难总结出这样的规律:每使用一次64物法后,我方前两个人消失(这里和下面所说的顺序都是内存中的顺序,也就是我们按顺序依次所加入人物的顺序。),由后面的人补充上来,因此此时原先3-7位置上的我方武将补充上来,就占据了我方1-5的位置,也是新的队列顺序,而第6、第7的位置,则由刚才战斗中的前两个敌将补充。因此调武将时,最多适宜用三次64物法得到你所需的武将,因为敌将最多只会出现5个,而移了第三次,已经向前进了六个位置了,后面将出现什么,你不看内存你就不知道了,所以就这样说了。第二次、第三次,都一样,自己依照这个方法向前推就行了。(注:第一次使用后,我方队列是由原来我方后五个武将加上战斗中所遇的前两位敌将组成的;第二次使用后,我方队列是由原来我方后三位武将加上战斗中所遇的前4位敌将组成的;第三次使用后,我方队列是由原来我方最后一个武将加上战斗中所遇的五位敌将再加上地址6620d的代码所表示的武将(这里如果是游戏进行后第一次使用64物法,那么这个代码就是“00”)组成的。--以上所述队列顺序都是内存中的顺序,也就是我们按顺序依次所加入人物的顺序。)
终于到了最后一个主题了,那就是为什么会刷新隐藏物品。
我认为就是因为一些我们不知道的地址也发生了偏移,然后,那部分地址重新刷新复位所造成的。(这个话题够短了吧)
到此,所需介绍说明的已经都完成了。下面我还想对“这是秘技还是bug”发表一下自己的看法!
我想举这几个例子来表明我的看法。
① 寄存所物品位置地址与其对应的数量地址,是连起来的,且是可以由后者写入前者的,并没有用符号隔开,不准写入。
② 数据并不是可以无限向前推移的,而是到了一定的行就不准写入,使数据硬挤出内存,这样使游戏不至于崩溃。
③ 兵力数在正常情况下是完全够表示的,不至于用3字节表示。
④ 战斗中的信息完全就没必要保留,也不必特意与我方人物代码位置相连,且内存中我方人物实际排列顺序倒置--这样做就是为了方面我们调人。
……
⑩还有一些例子,前面的文章中就有,那里已经很好的表明了我的态度了。我不想再多写了,因为我真的很累,脑袋疼死了。
我百分之八十的相信,这是设计者预谋好的,但有些可能真的是bug……除了64物法本身外,在一些特定条件下使用了64物法而使游戏不能再继续下去,就是一个十分遗憾的bug!还有其它,等等!
但不管它们是什么,他们都给我们带来了无穷无尽的乐趣,所以我们不要在这个问题上多多讨论了,只管尽情享受它吧!
最后最后,对总的主题做一个总结。
64物法所产生的Bug原理就是“一些地址范围内所有地址上的代码整体向前推移”。但具体到个别,则是推移程度上的不同,有向前迈进一个位置的,也有大步跨两个格子的。
这些“bug”都是因这个基本原理所产生的,所以要重做这个游戏的朋友,一定要依照这个原理做bug哟!不要把它给修正了哟!
陈虎(星月秋悠)
2005年5月18日20时完成
修正补疑
以下是说明总结“用过64物法后,人物所做出的变化规律”。
我们都知道64物法最适合在满七人的情况下最多使用三次,那我们就先在七人的情况下做一个具体的总结。
(注:下面所说的人物加入后实际所排列的顺序都是内存地址66201-66207从左往右的顺序,这个顺序在游戏中是这样安排的--以例说明!假如我方有七人,设此七人依次是a-g,且在游戏中(内存66207-66201)是按照a、b、c、d、e、f、g这样的顺序排的,那么假如第一个人“a”移走了,而从编成所或新加入一个人“h”,那么“h”会占据原先“a”所在内存地址的位置(66207),因此他所属的队列顺序,就是“a”的队列顺序--第一位,而并非是其他人的顺序向前进一位后“h”排到最后一位第七位。同理,其它位置上也移一个加一个,都是这样进行排位的。那假如一次移走多个人,再加入添满后的顺序又是怎样呢,让我们继续举例直观说明。假如我们一次移走b、d、f这三个人(先移哪个无所谓,和移动的先后顺序无关),然后依次加入i、j、k这三个人,那加如后,此三人的顺序又是怎样呢!让他们一个一个加入来分析。加入“i”后,他会占据此时已空出的最后一个空位(原先“f”的位置,取代他原先所属的顺序,内存地址是66202。);加入“j”后,他会占据现在所空出的最后一个位置,就是原来“d”的位置(内存地址:66204),以取代它的顺序;加入“k”后,他当然是取代原先b的顺序了(内存地址:66202)。由此我们发现,后来所加入的原则是这样的--依次补充“此时”所空出的所属最靠后的空位的位置。不管你按什么先后顺序,移了多少人,都是按照这个原则来补充缺位的,从而确定在队伍中的人物顺序。不信的就自己一个一个的试吧!)
懂得了上面“注”中的排列顺序,那我们就开始说“人物所做出的变化规律”吧。
第一次使用64物法后,原来所属我方顺序位置最靠后的两位武将消失(第六、第七位),由我方顺序前五位的武将(66207-66203)加上刚才战斗中的前两位敌将(66208=66209)组成。此时队中人物的顺序发生了如下变化--我方的前五人位置顺序都上升两位(比如原来第一位的,现在是第三位……),而第一、第二个位置则是由刚才战斗中的第二个、第一个敌将占据。
第二次使用64物法后,队伍将会由原先所属我方队列顺序的前三位加上刚才战斗中的前四位敌将组成。此时队中人物的顺序发生了如下变化--原来队伍顺序中的我方前三位武将位置顺序都上升4位,前4位的位置将由刚才战斗中的第四到第一位敌将分别所取代。
第三次使用64物法后,队伍将由原来我方第一位武将加上刚才战斗中所遇的五位敌将加上地址6620d的代码所表示的武将(这里如果是游戏进行后第一次使用64物法,那么这个代码就是“00”)组成的。此时队中人物的顺序发生了如下变化--我方原来第一个人物的队列顺序位置已经变成了最后一位第七位,而第二至六位,则是由刚才战斗中的第五到第一位敌将所取代,第一位将由地址6620d的代码所表示的武将所代替。