存檔文件(吞食天地.sav)部分地址意義:
540~57f 役所物品ID 580~5bf 役所物品數(shù)量 5c0~5ff 空閑!
600~603 空閑
604~607 我方陣型
608~60f 空閑
610~614 我方5位出陣武將序號
615~61b 我方7人狀態(tài)(80:正常,c0:軍師,其他:負(fù)傷)
61c~620 對陣5人狀態(tài)(80:正常,其他:負(fù)傷)
621~627 我方7人武將ID
628~62c 對陣5人武將ID
62d~641 我方7人現(xiàn)存兵力
642~650 對陣5人現(xiàn)存兵力
651~665 我方7人最大兵力
666~674 對陣5人最大兵力
675~67b 我方7人武力
67c~680 對陣5人武力
540~57f分別對應(yīng)役所64件物品的種類ID,540代表第1件物品的種類,57f代表第64件物品的種類。與上述相似,580~5bf分別對應(yīng)役所64件物品的數(shù)量信息,580代表第1件物品的數(shù)量,5bf代表第64件物品的數(shù)量。
每使用一次64物法,地址540~57e向上偏移1個字節(jié),地址580~5be向上偏移2個字節(jié)。
舉個例子,使用第一次64物法后,原本地址57e(第63件物品ID)的信息偏移到了57d(第62件物品ID)的位置,而原本地址580(第1件物品的數(shù)量)的信息偏移到了57e(第63件物品的ID)的位置。
換言之,現(xiàn)在第62件物品是原來第63件物品,現(xiàn)在第63件物品則是原來第1件物品的數(shù)量。
我們已經(jīng)知道物品數(shù)量會向上搬移2個字節(jié),比較好理解的是,現(xiàn)在第60、61件物品的數(shù)量來自于原來第62、63件物品的數(shù)量,那么原來第62、63件物品的數(shù)量來自于哪里呢?這里可以告訴你,這兩個位置(57d、57e)填充的是0,也就是256件。有人可能會困惑,當(dāng)使用64物法的次數(shù)”足夠多”時,第63件物品會憑空消失,我們使用64物法的時候,還需要重新補充物品,這是為什么呢?
這里也可以解釋一下,首先”足夠多”的現(xiàn)象,其實是從第33次使用64物法時發(fā)生的。我們已經(jīng)知道,第1次使用64物法時,原來第63件物品的數(shù)量偏移成現(xiàn)在第61件物品的數(shù)量。以此推算,第31次使用64物法時,最早第63件物品的數(shù)量已經(jīng)偏移成現(xiàn)在第1件物品的數(shù)量;第32次使用64物法時,最早第63件物品的數(shù)量則會偏移成第63件物品的ID;第33次使用64物法時,先前我們第1次使用64物法時用來填充到第63件物品數(shù)量的0(256件),會偏移成現(xiàn)在第63件物品的ID——而0用來表示物品的種類/ID時,表示的正是”無”,因此我們會看到第63件物品”消失”。下面說一下實際應(yīng)用。
首先,我們可以憑空變出一些物品,每使用一次64物法,原來第1件物品的數(shù)量,都會變成現(xiàn)在第63件物品的ID。具體的ID映射關(guān)系,可以百度搜索”吞食天地2 金手指”之類的關(guān)鍵詞,想把物品數(shù)量變?yōu)?(256件),可以百度搜索”吞食天地2 無線復(fù)制”之類的關(guān)鍵詞查閱,本貼不再贅述。值得一提的是,原版一共有00~7f共128個物品ID(00代表的是”無”),而物品數(shù)量則是0~255共256種情形,因此同一個物品ID可以對應(yīng)兩個數(shù)字,比如21號和a1表示的都是青銅劍。
其次,我們可以把一件物品變無限,每使用一次64物法,原來的第62、63件物品的數(shù)量會變?yōu)?(也就是256件)。當(dāng)然,無限復(fù)制法也可以辦到這件事情。憑空變出物品,還有著諸多妙用。
比如,提前變出關(guān)鍵道具火藥,可以在第二章到達(dá)荊州后,立刻收了襄陽的鐵器和孟達(dá)山洞的火焰甲;第三章火燒曹仁后,可以直奔襄陽滅掉蔡瑁、張允,然后江夏渡口坐船前往柴桑,與孫權(quán)對話即可去找龐統(tǒng)實施連環(huán)計。如此一來,可以跳過大量第三章的劇情,還可以避免劉表之死……再比如,提前變出關(guān)鍵道具青銅鑰匙,可以在到達(dá)涪城后,立刻前去開水閘,然后前往落鳳坡觸發(fā)龐統(tǒng)之死,便可以坐船前往巴城,通過后方進(jìn)攻成都了。這樣可以跳過攻打張魯?shù)葎∏椤F渌牟辉僖灰毁樖?,大家自己去發(fā)現(xiàn)吧。接下來講武將部分,相比物品部分的明了,武將部分要復(fù)雜一些。
使用64物法后,地址604~607會發(fā)生一些改變,理論上會改變我方的陣型,暫時還沒有做過多研究。地址610~620會向上偏移2個字節(jié),這幾處數(shù)據(jù)改變的實用性不大。真正有意義的是接下來的部分:
地址621~627是我方隊列武將的ID,此處的改變,直接影響我方隊列的現(xiàn)有武將。每使用一次64物法,地址621~641會向上偏移2個字節(jié),地址642~680會向上偏移1個字節(jié),地址680及之后則不會發(fā)生變化。
簡而言之,通過64物法造成的偏移,可以把對陣武將、各種兵力信息和武力信息轉(zhuǎn)化為我方隊列武將。武將ID信息,用1個字節(jié)儲存,00表示劉劉……ff表示海賊,具體的映射關(guān)系,可以百度搜索”吞食天地2 金手指”等關(guān)鍵詞查閱。
兵力信息,用3個字節(jié)倒序表示,例如”b1 0e 00″則為0xeb1,等同十進(jìn)制的3761。
武力信息,也用1個字節(jié)表示,例如”f0″等同于十進(jìn)制的240?,F(xiàn)存兵力與最大兵力的區(qū)別:現(xiàn)存兵力為上次戰(zhàn)斗結(jié)束后,雙方剩余的兵力。如果非戰(zhàn)斗中主動撤退,通常情況下戰(zhàn)勝后,敵方現(xiàn)存兵力為0。存檔復(fù)位后,我方出陣隊列(地址610~614),及所有對方的武將ID、兵力、武力等信息都會被清零。查看編所武將后,對陣武將中大將的武將ID、最大兵力、武力等信息會被查看武將的信息所覆蓋,對陣大將的現(xiàn)有兵力信息不會發(fā)生改變。
接下來是數(shù)學(xué)課時間,我們舉個例子。
我方武將ID,7個字節(jié),621~627分別為:
關(guān)平(9)
周倉(c)
孔明(8)
趙云(b)
張飛(3)
關(guān)羽(2)
伊籍(d)
對陣武將ID,5個字節(jié),628~62c分別為:
呂布(43)
李傕(39)
郭汜(3a)
張濟(jì)(3b)
李肅(3d)
我方當(dāng)前兵力,21個字節(jié),62d~641分別為:
關(guān)平兵力 1588 (34 06 00)
周倉兵力 1140 (74 04 00)
孔明兵力 915 (93 03 00)
趙云兵力 1085 (3d 04 00)
張飛兵力 1258 (ea 04 00)
關(guān)羽兵力 970 (ca 03 00)
伊籍兵力 1375 (5f 05 00)
對方當(dāng)前兵力,21個字節(jié),642~650分別是:
呂布兵力 3800 (d8 0e 00)
李傕兵力 3100 (1c 0c 00)
郭汜兵力 3000 (b8 0b 00)
張濟(jì)兵力 3200 (80 0c 00)
李肅兵力 2800 (f0 0a 00)
我們已經(jīng)知道,每使用一次64物法621~641向上偏移2個字節(jié)。
第1次使用64物法后,我方武將ID地址段的關(guān)平、周倉被擠走,其余5位武將向上偏移2個字節(jié),呂布、李傕占有了原來關(guān)羽、伊籍的位置。
第2次使用64物法后,孔明、趙云被擠走,郭汜、張濟(jì)加入隊列。
第3次使用64物法后,張飛、關(guān)羽被擠走,李肅、『趙范』加入隊列。
第4次使用64物法后,伊籍、呂布被擠走,
『張苞』、『劉劉』加入隊列。
為什么是第3次64物法后,『趙范』會加入隊列呢?
地址62c是李肅的武將ID(3d),
地址62d是關(guān)平兵力信息的一部分(34),
0x34對應(yīng)到武將ID中,恰好是趙范。
同理,62e、62f的0e、00,對應(yīng)的武將ID分別是張苞、劉劉。
至于使用64物法后,所引發(fā)的兵力的暴漲,也可以按此樓的方法進(jìn)行準(zhǔn)確推理。
綜上所述,可以通過64物法,結(jié)合我方武將現(xiàn)有兵力的調(diào)整,變出想要的任意武將。神秘武將、顏良、太史慈等等,都可以輕易收至麾下。接下來,我們探討更為深入的話題:第一章如何避免64物法引起的各種卡死問題,以及第二章開始如何保留一些特殊武將。我們假定地址627~621,分別為1~7號位置。
開局之后,劉備、關(guān)羽、張飛、路昭、朱靈,分別在在1~5號位。
朱路離隊后,陳登繼承5號位,顏良、文丑、趙云先后繼承4號位。夫人、關(guān)平先后為7號位,周倉為6號位。
多說幾句,第三章臥龍出山后,孔明繼承陳登的5號位,魯肅繼承劉備的1號位;第四章魯肅離隊后,1號位則由伊籍繼承。以陳登入隊為例,我們講一下武將入隊還是入編的問題。
陳登入隊的條件:
A. 1~5號位對應(yīng)地址(627~623)的數(shù)據(jù)為〖0〗;
B.隊列不滿7人(包含劉劉和復(fù)制武將)。
這里的數(shù)據(jù)〖0〗,又有兩種情況:
a.該位置為顯示武將劉劉;
b.該位置不顯示(空置),且沒有”隱藏武將”(包括該位置為隱藏武將劉劉的情形)。
下面舉幾個例子:
1.朱路離隊前,打敗紀(jì)靈后,我們一路護(hù)身煙返回徐州使用1次64物法,朱路分別被偏移到7、6號位,因為當(dāng)前隊列只顯示1~5號位,所以7號位的朱靈、6號位的路昭變成了”隱藏武將”。此時,1~5號位分別為”顯示武將”紀(jì)靈、梁剛、劉備、關(guān)羽、張飛,等我們打敗袁胤、袁術(shù)、車胄后,回到徐州是無法使陳登入隊的(陳登會入編所),因為1~5號位都已經(jīng)被占滿了。
2.朱路離隊前,打敗紀(jì)靈后,我們一路護(hù)身煙返回徐州,『復(fù)位重載后』使用1次64物法。此時,1~5號位分別為”顯示武將”劉劉、劉劉、劉備、關(guān)羽、張飛,等我們回到徐州是可以使陳登入隊的,因為1~2號位是顯示武將劉劉。陳登入隊后,隊列會有1個劉劉消失,同時新增2個陳登。
3.打敗袁術(shù),我們一路護(hù)身煙回到徐州,朱路離隊后,使用1次64物法。此時,1~3號位分別為”顯示武將”袁術(shù)、紀(jì)靈、劉備,4~5號位分別為”隱藏武將”關(guān)羽、張飛,6~7號位不顯示,且沒有隱藏武將(因為原本4/5號位的路昭/朱靈已經(jīng)離隊)。此時。打敗車胄后,也不能使陳登入隊,因為1~5號位都已經(jīng)被占滿了,盡管4、5號位是被”隱藏武將”占據(jù)。理解了陳登入隊的問題后,下面的各種場景將變得容易理解。
1.徐州撤退戰(zhàn)。撤出循環(huán)戰(zhàn)+保證有船開往冀州的條件:隊列中必須有關(guān)羽!至于張飛,則可有可無。
2.冀州顏良/文丑/楊懷可入隊的條件,與陳登入隊的條件相同。各種使用64物法后的具體情形,有興趣的吧友可以自行分析。
3.正常情況下,可以用信先后收顏良、文丑、楊懷入隊,按照入隊順序,三人分別占用4~2號位。2號位注意別把關(guān)羽的石刀弄丟,另外可以提前裝個鱗盾,降低二爺過五關(guān)斬六將的難度。
4.劇情跳轉(zhuǎn)至宛城的關(guān)羽/夫人時,如果不想被關(guān)在宛城出不了門,要求7號位地址的數(shù)據(jù)必須為〖0〗(約等于必須要在夫人的物品欄中看到『赤兔馬』)。具體的數(shù)據(jù)〖0〗規(guī)則,與陳登入隊樓的說明相同。
5.過五關(guān)斬六將時,如果不想被卡死在滎陽關(guān)(王植到處亂走,不再接待關(guān)羽,從而無法通過此關(guān),導(dǎo)致前往冀州的渡船不會出現(xiàn)),劇情跳轉(zhuǎn)關(guān)羽/夫人前,與袁紹對話時,隊伍中必須有陳登。
6.劇情跳轉(zhuǎn)至關(guān)平找劉備時,如果不想因為丟了劉備,導(dǎo)致關(guān)定莊陷入循環(huán)找劉備或者第二章開始隊伍隱形的話,劇情跳轉(zhuǎn)前,關(guān)羽與關(guān)定對話時,要求1號位地址的數(shù)據(jù)必須為〖0〗。具體的數(shù)據(jù)〖0〗規(guī)則,與陳登入隊樓的說明相同。
陳登加入時,默認(rèn)為5號位。
如果5號位被占用(即地址數(shù)據(jù)非〖0〗),則會向下論詢,去查看4號位的狀況。以此類推,如果5~1號位都被占用,則陳登入編。
如果某位置為〖0〗,且為顯示武將劉劉,則劉劉消失,加入兩個陳登;如果某位置為〖0〗,且無隱藏武將,則陳登正常入隊。
冀州顏良/文丑/楊懷(默認(rèn)4號位)的加入,跳轉(zhuǎn)宛城時關(guān)羽(默認(rèn)2號位)/夫人(默認(rèn)7號位)的加入,跳轉(zhuǎn)關(guān)平找劉備時劉備(默認(rèn)1號位)/陳登(默認(rèn)5號位)/關(guān)平(默認(rèn)7號位)的加入,都會遵循向下論詢的定律。兩次劇情跳轉(zhuǎn)(跳轉(zhuǎn)宛城關(guān)羽/夫人,跳轉(zhuǎn)關(guān)平找劉備),都會將我方隊列中的顯示武將清空一次。
如若隊列中有多個ID相同的武將,比如跳轉(zhuǎn)關(guān)平找劉備之前,我方隊列有3個神秘武將,則只會清空位置號最大的一個,另外2個隨劇情跳轉(zhuǎn)至劉備處。至于隱藏武將,劇情的跳轉(zhuǎn)不會對其造成影響。利用這兩個特性,我們可以將神秘武將、夏侯惇、楊懷、曹操等武將,保留至第二章的荊州使用!說一下第二章(荊州)開始,隊列刷新的問題:
1.所有的隱藏武將都會變?yōu)轱@示武將;
2.所有的重影武將都會變成一個;
3.所有的劉劉都會消失;
4.1~3位需要對應(yīng)為劉關(guān)張三人。
如果這三個位置號存在不匹配的情況,第二章的指令將不完整:
a.如果1號位不匹配,此時隊列為空,強行執(zhí)行隊列指令的話,會導(dǎo)致武將的物品/裝備欄混亂,有可能出現(xiàn)藤甲等高級裝備,也有可能出現(xiàn)一堆石斧。此外,不能查看我方武將狀態(tài),不能調(diào)整物品、裝備,非戰(zhàn)斗狀態(tài)不能使用物品、謀略等等。同時,大地圖不顯示武將模型(即隊列處于幽靈狀態(tài))。
b.如果1號位匹配且2號位不匹配,則只能對劉備使用上述指令,大地圖只顯示劉備模型。
c.如果1.2號位匹配但3號位不匹配,則只能對劉備關(guān)羽使用上述指令,大地圖也只顯示劉備關(guān)羽的模型。
關(guān)定莊張飛、趙云加入時,我們已經(jīng)知道張飛自3號位向下論詢,趙云自4號位向下論詢:如果4號位被占用,1~3位只有1個空閑名額的話,張飛會優(yōu)先入隊,趙云則會入編;如果1~3號位被占用,4號位空閑,趙云會加入到4號位,張飛則會入編;如果1~4號位都被占用,則張飛、趙云一起入編。
關(guān)羽、周倉加入時,情況略有不同:如果1~2號位只有一個空閑位置,周倉會優(yōu)先入隊;如果周倉加入后,隊列滿7人,則關(guān)羽不會入編,導(dǎo)致游戲卡死。
第四章出現(xiàn)編所后,我們可以隨意讓武將入隊/離隊。
武將入隊時,位置號的選取原則:從7號位開始向下論詢,跳過所有存在武將的位置號(包括存在隱藏武將的位置號)。
武將離隊時,則會判斷隊列長度是否等于1。當(dāng)前隊列長度≠1,任意武將(除去不可離隊的劇情武將)都可以離隊;當(dāng)前隊列長度=1,任何武將不能離隊。
那么”隊列長度”是如何計算的呢?
之前已經(jīng)交代過,地址615~61b表示我方隊列7人的狀態(tài)——80:正常、c0:軍師、00:負(fù)傷、81~ff:異常、01~7f:異常負(fù)傷。異常(負(fù)傷)狀態(tài)的武將,在戰(zhàn)斗界面中不能出場。
當(dāng)然,正常通關(guān)流程中,武將不會處于異常(負(fù)傷)狀態(tài)。如果連續(xù)使用多次64物法,導(dǎo)致其他地址段的數(shù)據(jù)(例如武將ID)偏移至地址615~61b時,才會出現(xiàn)這些情況。
回歸正題,地址615~61b每個字節(jié)的值——如果小于80(負(fù)傷/異常負(fù)傷),則隊列長度+0;如果大于/等于80(正常/異常/軍師),則隊列長度+1。正常通關(guān)流程中,隊列長度不會出現(xiàn)為0的情況,但是通關(guān)64物法覆寫地址615~61b的數(shù)據(jù),我們可以輕易做到。當(dāng)隊列長度為0時,便可以讓全部武將離隊了。拓展一下”向下論詢”定理。
讓我們回憶一下,一開始舉的陳登的例子:
徐州陳登加入時,默認(rèn)5號位。當(dāng)5號位被占用(顯示武將 或者 非”劉劉”的隱藏武將均可)時,陳登會遵循向下論詢定理,依次查看4~1號位是否被占用。如果有空閑位置,陳登會入隊;如果都被占用,陳登則會進(jìn)入編成所。
劇情進(jìn)入第四章后,我們可以利用向下論詢定理制造BUG。
老規(guī)矩,舉個例子:
第四章新野收伊籍后,隊列7~1號位分別為:關(guān)平、周倉、孔明、趙云、張飛、關(guān)羽、伊籍。
樊城挑戰(zhàn)呂布前,我們讓伊籍離隊。此時隊列為:關(guān)平、周倉、孔明、趙云、張飛、關(guān)羽、空置。
挑戰(zhàn)呂布后,使用第1次64物法。此時隊列為:孔明、趙云、張飛、關(guān)羽、:劉劉、呂布、[李傕](負(fù)傷武將前加 : ,隱藏武將加[ ])。
稍微做下解釋,因為伊籍離隊,造成了1號位的空置。本質(zhì)上,此時1號位其實是一個武將狀態(tài)為”00″(負(fù)傷)的隱藏武將劉劉。所以,1號位偏移到3號位變?yōu)轱@示武將時,呈現(xiàn)出來的效果就是一個負(fù)傷的劉劉。
由于1號位為隱藏武將,此時隊列只有6人,還可以通過編成所加入1人。如果直接加入,按照向下論詢定理,新入武將會占用3號位,同時形成重影武將。所以我們先將3號位負(fù)傷的劉劉離隊,然后再加入關(guān)平占據(jù)3號位,最后加入伊籍占據(jù)1號位。這時候,神奇的事情發(fā)生了,7號位的孔明變成了”楊平”,而且伊籍失去物品/裝備欄,武將屬性也變得非?;靵y。這是為什么呢?
可以用武將入隊的向下論詢定理來解釋。
負(fù)傷的劉劉離隊、關(guān)平入隊占據(jù)3號位后,此時的隊列為:孔明、趙云、張飛、關(guān)羽、關(guān)平、呂布、[李傕]。
劇情入隊時,由于7~1號位均被占用,劇情武將會直接入編。而編成所入隊時,由于隊列未滿(只有6人),是可以繼續(xù)入隊的。但是,由于1號位(地址627)已經(jīng)被[李傕]占用,新入的伊籍不得不向下繼續(xù)尋找數(shù)據(jù)為〖0〗地址。地址628~62a,分別為對陣武將郭汜、張濟(jì)、李肅的武將ID使用;地址62b~62d,被使用64物法之前,原7號位關(guān)平的現(xiàn)有兵力(十進(jìn)制1588)使用,分別是34 06 00。地址62d的數(shù)據(jù)為〖0〗,因此被伊籍的武將ID使用。如果1號位沒有隱藏武將李傕,伊籍的武將ID本應(yīng)是使用地址627,伊籍的武將狀態(tài)本應(yīng)是使用地址61b,伊籍的武力信息本應(yīng)是使用地址67b……
如今伊籍的武將ID在地址62d,
向下偏移了6個字節(jié),因此可以推算出,伊籍的武將狀態(tài)在地址61b+6=621,伊籍的武力信息在地址67b+6=681。
而地址621先前存放的正是我方7號位的武將ID,如今被伊籍的武將狀態(tài)80(正常狀態(tài))所覆蓋。武將ID(80)恰好是楊平,因此7號位的孔明變成了楊平。
此時,如果你將伊籍離隊入編,伊籍的武將狀態(tài)會變?yōu)?0(離隊),7號位會變成劉劉。如果你將楊平離隊入編,7號位的武將ID會變?yōu)?0(空置),伊籍的武將狀態(tài)會變?yōu)樨?fù)傷。好,我們已經(jīng)了解了這個bug產(chǎn)生的原理。那么這個bug有什么用途呢?
【重點在于,伊籍的武將ID地址向下偏移到了62d?!?/p>
根據(jù)本貼一開始的地址介紹,我們知道62d是用來存放我方7號位現(xiàn)有兵力的低位數(shù)據(jù)的。OK,我們使用一次存檔復(fù)位+住宿,讓楊平的現(xiàn)有兵力恢復(fù)到初始值4300。
可以看到,此時伊籍變成了張南。原因很簡單,7號位楊平的現(xiàn)有兵力4300,存放到地址42d~42f分別是cc 10 00,地址42d被覆寫為cc,換算成武將ID正是張南。
出門刷幾個小兵,使楊平的現(xiàn)有兵力發(fā)生變化,我們可以觀察到楊平現(xiàn)有兵力的變化,緊密地關(guān)鍵著隊列最后一位武將ID的變化。等到出現(xiàn)你喜歡的武將,便可以把他存入編成所。
存放編成所時,先將楊平離隊,再將喜歡的武將離隊。如果先將喜歡的武將離隊的話,記得我們前面講過,楊平會變成劉劉哦。上述兩人離隊后,重新加入兩位武將:
第一位加入者會繼續(xù)使用楊平的7號位;
第二位加入者的武將ID使用地址,取決于你離隊入編前,最后一次戰(zhàn)斗時對面的武將數(shù)目。
如果上次戰(zhàn)斗對面為5人,第二位加入者將失去作用。如果想要第二位加入者,發(fā)揮一如之前伊籍跟隨7號位現(xiàn)有兵力變換武將的作用——第一位加入者的兵力需要調(diào)整為256的倍數(shù),通過打怪掉兵的方式調(diào)整完成后,再讓第二位加入者入隊;更為快捷的方式是,第一位加入者為盜賊、山賊、海賊、兵士(兵士慎用,容易卡死)等兵力為0的武將。
如果上次戰(zhàn)斗對面為4人,第二位加入者會持續(xù)變化為每次戰(zhàn)斗時對面的第5人。
以此類推……
如果上次戰(zhàn)斗對面為1人,第二位加入者會持續(xù)變化為每次戰(zhàn)斗時對面的第2人。
第二位加入者入隊前,執(zhí)行過一次存檔復(fù)位,第二位加入者也會持續(xù)變化為每次戰(zhàn)斗時對面的第2人。
有興趣的話,可以根據(jù)我之前所講的伊籍ID使用地址的”向下尋址”原則,自行分析第二位加入者的映射原理。
總之,如今我們的隊列,自帶強大的花樣換人功能(相當(dāng)于行走的64物法)。
當(dāng)然,如果你不想制造此類bug,使用64物法的時候,還是乖乖把隊列填滿7人吧。
全部評論