存档文件(吞食天地.sav)部分地址意义:
540~57f役所物品ID580~5bf役所物品数量5c0~5ff空闲!
600~603空闲
604~607我方阵型
608~60f空闲
610~614我方5位出阵武将序号
615~61b我方7人状态(80:正常,c0:军师,其他:负伤)
61c~620对阵5人状态(80:正常,其他:负伤)
621~627我方7人武将ID
628~62c对阵5人武将ID
62d~641我方7人现存兵力
642~650对阵5人现存兵力
651~665我方7人最大兵力
666~674对阵5人最大兵力
675~67b我方7人武力
67c~680对阵5人武力
540~57f分别对应役所64件物品的种类ID,540代表第1件物品的种类,57f代表第64件物品的种类。与上述相似,580~5bf分别对应役所64件物品的数量信息,580代表第1件物品的数量,5bf代表第64件物品的数量。
每使用一次64物法,地址540~57e向上偏移1个字节,地址580~5be向上偏移2个字节。
举个例子,使用第一次64物法后,原本地址57e(第63件物品ID)的信息偏移到了57d(第62件物品ID)的位置,而原本地址580(第1件物品的数量)的信息偏移到了57e(第63件物品的ID)的位置。
换言之,现在第62件物品是原来第63件物品,现在第63件物品则是原来第1件物品的数量。
我们已经知道物品数量会向上搬移2个字节,比较好理解的是,现在第60、61件物品的数量来自于原来第62、63件物品的数量,那么原来第62、63件物品的数量来自于哪里呢?这里可以告诉你,这两个位置(57d、57e)填充的是0,也就是256件。有人可能会困惑,当使用64物法的次数”足够多”时,第63件物品会凭空消失,我们使用64物法的时候,还需要重新补充物品,这是为什么呢?
这里也可以解释一下,首先”足够多”的现象,其实是从第33次使用64物法时发生的。我们已经知道,第1次使用64物法时,原来第63件物品的数量偏移成现在第61件物品的数量。以此推算,第31次使用64物法时,最早第63件物品的数量已经偏移成现在第1件物品的数量;第32次使用64物法时,最早第63件物品的数量则会偏移成第63件物品的ID;第33次使用64物法时,先前我们第1次使用64物法时用来填充到第63件物品数量的0(256件),会偏移成现在第63件物品的ID——而0用来表示物品的种类/ID时,表示的正是”无”,因此我们会看到第63件物品”消失”。下面说一下实际应用。
首先,我们可以凭空变出一些物品,每使用一次64物法,原来第1件物品的数量,都会变成现在第63件物品的ID。具体的ID映射关系,可以百度搜索”吞食天地2金手指”之类的关键词,想把物品数量变为0(256件),可以百度搜索”吞食天地2无线复制”之类的关键词查阅,本贴不再赘述。值得一提的是,原版一共有00~7f共128个物品ID(00代表的是”无”),而物品数量则是0~255共256种情形,因此同一个物品ID可以对应两个数字,比如21号和a1表示的都是青铜剑。
其次,我们可以把一件物品变无限,每使用一次64物法,原来的第62、63件物品的数量会变为0(也就是256件)。当然,无限复制法也可以办到这件事情。凭空变出物品,还有着诸多妙用。
比如,提前变出关键道具火药,可以在第二章到达荆州后,立刻收了襄阳的铁器和孟达山洞的火焰甲;第三章火烧曹仁后,可以直奔襄阳灭掉蔡瑁、张允,然后江夏渡口坐船前往柴桑,与孙权对话即可去找庞统实施连环计。如此一来,可以跳过大量第三章的剧情,还可以避免刘表之死……再比如,提前变出关键道具青铜钥匙,可以在到达涪城后,立刻前去开水闸,然后前往落凤坡触发庞统之死,便可以坐船前往巴城,通过后方进攻成都了。这样可以跳过攻打张鲁等剧情。其他的不再一一赘述,大家自己去发现吧。接下来讲武将部分,相比物品部分的明了,武将部分要复杂一些。
使用64物法后,地址604~607会发生一些改变,理论上会改变我方的阵型,暂时还没有做过多研究。地址610~620会向上偏移2个字节,这几处数据改变的实用性不大。真正有意义的是接下来的部分:
地址621~627是我方队列武将的ID,此处的改变,直接影响我方队列的现有武将。每使用一次64物法,地址621~641会向上偏移2个字节,地址642~680会向上偏移1个字节,地址680及之后则不会发生变化。
简而言之,通过64物法造成的偏移,可以把对阵武将、各种兵力信息和武力信息转化为我方队列武将。武将ID信息,用1个字节储存,00表示刘刘……ff表示海贼,具体的映射关系,可以百度搜索”吞食天地2金手指”等关键词查阅。
兵力信息,用3个字节倒序表示,例如”b10e00″则为0xeb1,等同十进制的3761。
武力信息,也用1个字节表示,例如”f0″等同于十进制的240。现存兵力与最大兵力的区别:现存兵力为上次战斗结束后,双方剩余的兵力。如果非战斗中主动撤退,通常情况下战胜后,敌方现存兵力为0。存档复位后,我方出阵队列(地址610~614),及所有对方的武将ID、兵力、武力等信息都会被清零。查看编所武将后,对阵武将中大将的武将ID、最大兵力、武力等信息会被查看武将的信息所覆盖,对阵大将的现有兵力信息不会发生改变。
接下来是数学课时间,我们举个例子。
我方武将ID,7个字节,621~627分别为:
关平(9)
周仓(c)
孔明(8)
赵云(b)
张飞(3)
关羽(2)
伊籍(d)
对阵武将ID,5个字节,628~62c分别为:
吕布(43)
李傕(39)
郭汜(3a)
张济(3b)
李肃(3d)
我方当前兵力,21个字节,62d~641分别为:
关平兵力1588(340600)
周仓兵力1140(740400)
孔明兵力915(930300)
赵云兵力1085(3d0400)
张飞兵力1258(ea0400)
关羽兵力970(ca0300)
伊籍兵力1375(5f0500)
对方当前兵力,21个字节,642~650分别是:
吕布兵力3800(d80e00)
李傕兵力3100(1c0c00)
郭汜兵力3000(b80b00)
张济兵力3200(800c00)
李肃兵力2800(f00a00)
我们已经知道,每使用一次64物法621~641向上偏移2个字节。
第1次使用64物法后,我方武将ID地址段的关平、周仓被挤走,其余5位武将向上偏移2个字节,吕布、李傕占有了原来关羽、伊籍的位置。
第2次使用64物法后,孔明、赵云被挤走,郭汜、张济加入队列。
第3次使用64物法后,张飞、关羽被挤走,李肃、『赵范』加入队列。
第4次使用64物法后,伊籍、吕布被挤走,
『张苞』、『刘刘』加入队列。
为什么是第3次64物法后,『赵范』会加入队列呢?
地址62c是李肃的武将ID(3d),
地址62d是关平兵力信息的一部分(34),
0x34对应到武将ID中,恰好是赵范。
同理,62e、62f的0e、00,对应的武将ID分别是张苞、刘刘。
至于使用64物法后,所引发的兵力的暴涨,也可以按此楼的方法进行准确推理。
综上所述,可以通过64物法,结合我方武将现有兵力的调整,变出想要的任意武将。神秘武将、颜良、太史慈等等,都可以轻易收至麾下。接下来,我们探讨更为深入的话题:第一章如何避免64物法引起的各种卡死问题,以及第二章开始如何保留一些特殊武将。我们假定地址627~621,分别为1~7号位置。
开局之后,刘备、关羽、张飞、路昭、朱灵,分别在在1~5号位。
朱路离队后,陈登继承5号位,颜良、文丑、赵云先后继承4号位。夫人、关平先后为7号位,周仓为6号位。
多说几句,第三章卧龙出山后,孔明继承陈登的5号位,鲁肃继承刘备的1号位;第四章鲁肃离队后,1号位则由伊籍继承。以陈登入队为例,我们讲一下武将入队还是入编的问题。
陈登入队的条件:
A.1~5号位对应地址(627~623)的数据为〖0〗;
B.队列不满7人(包含刘刘和复制武将)。
这里的数据〖0〗,又有两种情况:
a.该位置为显示武将刘刘;
b.该位置不显示(空置),且没有”隐藏武将”(包括该位置为隐藏武将刘刘的情形)。
下面举几个例子:
1.朱路离队前,打败纪灵后,我们一路护身烟返回徐州使用1次64物法,朱路分别被偏移到7、6号位,因为当前队列只显示1~5号位,所以7号位的朱灵、6号位的路昭变成了”隐藏武将”。此时,1~5号位分别为”显示武将”纪灵、梁刚、刘备、关羽、张飞,等我们打败袁胤、袁术、车胄后,回到徐州是无法使陈登入队的(陈登会入编所),因为1~5号位都已经被占满了。
2.朱路离队前,打败纪灵后,我们一路护身烟返回徐州,『复位重载后』使用1次64物法。此时,1~5号位分别为”显示武将”刘刘、刘刘、刘备、关羽、张飞,等我们回到徐州是可以使陈登入队的,因为1~2号位是显示武将刘刘。陈登入队后,队列会有1个刘刘消失,同时新增2个陈登。
3.打败袁术,我们一路护身烟回到徐州,朱路离队后,使用1次64物法。此时,1~3号位分别为”显示武将”袁术、纪灵、刘备,4~5号位分别为”隐藏武将”关羽、张飞,6~7号位不显示,且没有隐藏武将(因为原本4/5号位的路昭/朱灵已经离队)。此时。打败车胄后,也不能使陈登入队,因为1~5号位都已经被占满了,尽管4、5号位是被”隐藏武将”占据。理解了陈登入队的问题后,下面的各种场景将变得容易理解。
1.徐州撤退战。撤出循环战+保证有船开往冀州的条件:队列中必须有关羽!至于张飞,则可有可无。
2.冀州颜良/文丑/杨怀可入队的条件,与陈登入队的条件相同。各种使用64物法后的具体情形,有兴趣的吧友可以自行分析。
3.正常情况下,可以用信先后收颜良、文丑、杨怀入队,按照入队顺序,三人分别占用4~2号位。2号位注意别把关羽的石刀弄丢,另外可以提前装个鳞盾,降低二爷过五关斩六将的难度。
4.剧情跳转至宛城的关羽/夫人时,如果不想被关在宛城出不了门,要求7号位地址的数据必须为〖0〗(约等于必须要在夫人的物品栏中看到『赤兔马』)。具体的数据〖0〗规则,与陈登入队楼的说明相同。
5.过五关斩六将时,如果不想被卡死在荥阳关(王植到处乱走,不再接待关羽,从而无法通过此关,导致前往冀州的渡船不会出现),剧情跳转关羽/夫人前,与袁绍对话时,队伍中必须有陈登。
6.剧情跳转至关平找刘备时,如果不想因为丢了刘备,导致关定庄陷入循环找刘备或者第二章开始队伍隐形的话,剧情跳转前,关羽与关定对话时,要求1号位地址的数据必须为〖0〗。具体的数据〖0〗规则,与陈登入队楼的说明相同。
陈登加入时,默认为5号位。
如果5号位被占用(即地址数据非〖0〗),则会向下论询,去查看4号位的状况。以此类推,如果5~1号位都被占用,则陈登入编。
如果某位置为〖0〗,且为显示武将刘刘,则刘刘消失,加入两个陈登;如果某位置为〖0〗,且无隐藏武将,则陈登正常入队。
冀州颜良/文丑/杨怀(默认4号位)的加入,跳转宛城时关羽(默认2号位)/夫人(默认7号位)的加入,跳转关平找刘备时刘备(默认1号位)/陈登(默认5号位)/关平(默认7号位)的加入,都会遵循向下论询的定律。两次剧情跳转(跳转宛城关羽/夫人,跳转关平找刘备),都会将我方队列中的显示武将清空一次。
如若队列中有多个ID相同的武将,比如跳转关平找刘备之前,我方队列有3个神秘武将,则只会清空位置号最大的一个,另外2个随剧情跳转至刘备处。至于隐藏武将,剧情的跳转不会对其造成影响。利用这两个特性,我们可以将神秘武将、夏侯惇、杨怀、曹操等武将,保留至第二章的荆州使用!说一下第二章(荆州)开始,队列刷新的问题:
1.所有的隐藏武将都会变为显示武将;
2.所有的重影武将都会变成一个;
3.所有的刘刘都会消失;
4.1~3位需要对应为刘关张三人。
如果这三个位置号存在不匹配的情况,第二章的指令将不完整:
a.如果1号位不匹配,此时队列为空,强行执行队列指令的话,会导致武将的物品/装备栏混乱,有可能出现藤甲等高级装备,也有可能出现一堆石斧。此外,不能查看我方武将状态,不能调整物品、装备,非战斗状态不能使用物品、谋略等等。同时,大地图不显示武将模型(即队列处于幽灵状态)。
b.如果1号位匹配且2号位不匹配,则只能对刘备使用上述指令,大地图只显示刘备模型。
c.如果1.2号位匹配但3号位不匹配,则只能对刘备关羽使用上述指令,大地图也只显示刘备关羽的模型。
关定庄张飞、赵云加入时,我们已经知道张飞自3号位向下论询,赵云自4号位向下论询:如果4号位被占用,1~3位只有1个空闲名额的话,张飞会优先入队,赵云则会入编;如果1~3号位被占用,4号位空闲,赵云会加入到4号位,张飞则会入编;如果1~4号位都被占用,则张飞、赵云一起入编。
关羽、周仓加入时,情况略有不同:如果1~2号位只有一个空闲位置,周仓会优先入队;如果周仓加入后,队列满7人,则关羽不会入编,导致游戏卡死。
第四章出现编所后,我们可以随意让武将入队/离队。
武将入队时,位置号的选取原则:从7号位开始向下论询,跳过所有存在武将的位置号(包括存在隐藏武将的位置号)。
武将离队时,则会判断队列长度是否等于1。当前队列长度≠1,任意武将(除去不可离队的剧情武将)都可以离队;当前队列长度=1,任何武将不能离队。
那么”队列长度”是如何计算的呢?
之前已经交代过,地址615~61b表示我方队列7人的状态——80:正常、c0:军师、00:负伤、81~ff:异常、01~7f:异常负伤。异常(负伤)状态的武将,在战斗界面中不能出场。
当然,正常通关流程中,武将不会处于异常(负伤)状态。如果连续使用多次64物法,导致其他地址段的数据(例如武将ID)偏移至地址615~61b时,才会出现这些情况。
回归正题,地址615~61b每个字节的值——如果小于80(负伤/异常负伤),则队列长度+0;如果大于/等于80(正常/异常/军师),则队列长度+1。正常通关流程中,队列长度不会出现为0的情况,但是通关64物法覆写地址615~61b的数据,我们可以轻易做到。当队列长度为0时,便可以让全部武将离队了。拓展一下”向下论询”定理。
让我们回忆一下,一开始举的陈登的例子:
徐州陈登加入时,默认5号位。当5号位被占用(显示武将或者非”刘刘”的隐藏武将均可)时,陈登会遵循向下论询定理,依次查看4~1号位是否被占用。如果有空闲位置,陈登会入队;如果都被占用,陈登则会进入编成所。
剧情进入第四章后,我们可以利用向下论询定理制造BUG。
老规矩,举个例子:
第四章新野收伊籍后,队列7~1号位分别为:关平、周仓、孔明、赵云、张飞、关羽、伊籍。
樊城挑战吕布前,我们让伊籍离队。此时队列为:关平、周仓、孔明、赵云、张飞、关羽、空置。
挑战吕布后,使用第1次64物法。此时队列为:孔明、赵云、张飞、关羽、:刘刘、吕布、[李傕](负伤武将前加:,隐藏武将加[])。
稍微做下解释,因为伊籍离队,造成了1号位的空置。本质上,此时1号位其实是一个武将状态为”00″(负伤)的隐藏武将刘刘。所以,1号位偏移到3号位变为显示武将时,呈现出来的效果就是一个负伤的刘刘。
由于1号位为隐藏武将,此时队列只有6人,还可以通过编成所加入1人。如果直接加入,按照向下论询定理,新入武将会占用3号位,同时形成重影武将。所以我们先将3号位负伤的刘刘离队,然后再加入关平占据3号位,最后加入伊籍占据1号位。这时候,神奇的事情发生了,7号位的孔明变成了”杨平”,而且伊籍失去物品/装备栏,武将属性也变得非常混乱。这是为什么呢?
可以用武将入队的向下论询定理来解释。
负伤的刘刘离队、关平入队占据3号位后,此时的队列为:孔明、赵云、张飞、关羽、关平、吕布、[李傕]。
剧情入队时,由于7~1号位均被占用,剧情武将会直接入编。而编成所入队时,由于队列未满(只有6人),是可以继续入队的。但是,由于1号位(地址627)已经被[李傕]占用,新入的伊籍不得不向下继续寻找数据为〖0〗地址。地址628~62a,分别为对阵武将郭汜、张济、李肃的武将ID使用;地址62b~62d,被使用64物法之前,原7号位关平的现有兵力(十进制1588)使用,分别是340600。地址62d的数据为〖0〗,因此被伊籍的武将ID使用。如果1号位没有隐藏武将李傕,伊籍的武将ID本应是使用地址627,伊籍的武将状态本应是使用地址61b,伊籍的武力信息本应是使用地址67b……
如今伊籍的武将ID在地址62d,
向下偏移了6个字节,因此可以推算出,伊籍的武将状态在地址61b+6=621,伊籍的武力信息在地址67b+6=681。
而地址621先前存放的正是我方7号位的武将ID,如今被伊籍的武将状态80(正常状态)所覆盖。武将ID(80)恰好是杨平,因此7号位的孔明变成了杨平。
此时,如果你将伊籍离队入编,伊籍的武将状态会变为00(离队),7号位会变成刘刘。如果你将杨平离队入编,7号位的武将ID会变为00(空置),伊籍的武将状态会变为负伤。好,我们已经了解了这个bug产生的原理。那么这个bug有什么用途呢?
【重点在于,伊籍的武将ID地址向下偏移到了62d。】
根据本贴一开始的地址介绍,我们知道62d是用来存放我方7号位现有兵力的低位数据的。OK,我们使用一次存档复位+住宿,让杨平的现有兵力恢复到初始值4300。
可以看到,此时伊籍变成了张南。原因很简单,7号位杨平的现有兵力4300,存放到地址42d~42f分别是cc1000,地址42d被覆写为cc,换算成武将ID正是张南。
出门刷几个小兵,使杨平的现有兵力发生变化,我们可以观察到杨平现有兵力的变化,紧密地关键着队列最后一位武将ID的变化。等到出现你喜欢的武将,便可以把他存入编成所。
存放编成所时,先将杨平离队,再将喜欢的武将离队。如果先将喜欢的武将离队的话,记得我们前面讲过,杨平会变成刘刘哦。上述两人离队后,重新加入两位武将:
第一位加入者会继续使用杨平的7号位;
第二位加入者的武将ID使用地址,取决于你离队入编前,最后一次战斗时对面的武将数目。
如果上次战斗对面为5人,第二位加入者将失去作用。如果想要第二位加入者,发挥一如之前伊籍跟随7号位现有兵力变换武将的作用——第一位加入者的兵力需要调整为256的倍数,通过打怪掉兵的方式调整完成后,再让第二位加入者入队;更为快捷的方式是,第一位加入者为盗贼、山贼、海贼、兵士(兵士慎用,容易卡死)等兵力为0的武将。
如果上次战斗对面为4人,第二位加入者会持续变化为每次战斗时对面的第5人。
以此类推……
如果上次战斗对面为1人,第二位加入者会持续变化为每次战斗时对面的第2人。
第二位加入者入队前,执行过一次存档复位,第二位加入者也会持续变化为每次战斗时对面的第2人。
有兴趣的话,可以根据我之前所讲的伊籍ID使用地址的”向下寻址”原则,自行分析第二位加入者的映射原理。
总之,如今我们的队列,自带强大的花样换人功能(相当于行走的64物法)。
当然,如果你不想制造此类bug,使用64物法的时候,还是乖乖把队列填满7人吧。