Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

關於魔島大富翁遊戲資訊及一些bug #3

Closed
danny0838 opened this issue Oct 17, 2023 · 162 comments
Closed

關於魔島大富翁遊戲資訊及一些bug #3

danny0838 opened this issue Oct 17, 2023 · 162 comments

Comments

@danny0838
Copy link

danny0838 commented Oct 17, 2023

感謝大神修正長年bug及提供許多遊戲資訊。幾個問題想請教:

實際傷害公式附註字面意思似乎是說程式本來想寫成 0.8~1.2 倍卻誤植為除以 0.8~1.2(換算為 0.83...~1.25 倍),但公式的地方卻寫成 100/(80~139) (換算為 0.72~1.25 倍),二者不一致。不曉得何者才是正確數據?

命中率不曉得是否有上下限設定,或是 HIT-EV 值為 100 以上就必定命中,0 以下就必定失誤?

戰鬥選單破圖,應該是圖檔附檔名全大寫的關係。

種族相性表的「回復」照字面意思似乎是不但不會受傷害還會回復生命?但實測那些情況(例如對地獄犬用火)似乎仍是-1HP,不知是否為bug?

法術列表暫時加倍的法術不曉得是持續多久?我實際測試似乎是持續到戰鬥結束?不確定是否只是我測試的回合數不夠多。

轉移和點石成金術都是20%死亡,不曉得有沒有其他實質差異?XD

關於神恩術的bug,文中提到是和其他法術共用數據,不曉得能否進一步反查出神恩術程式調用法術數據的入口,將之改成調用另一法術數據?(不過也要能找到原設計者本來想使用的數據就是……)

關於防禦重置bug,據我實測防禦重置時不只忽略裝備,也會移除鐵壁等法術的影響,這bug會導致鐵壁變廢技(第一位敵人攻擊之後就失效),對遊戲平衡有重大影響,建議補充上去。

您修正此bug的方式似乎是讓程式不再做任何防禦重置,也因此衍生每防禦一次便增加50%防禦力的問題。如果改成確實在每回合重置有困難,不曉得是否能至少修改防禦的程式使之不會疊加(加上偵測防禦flag之類)?

虛幻、神力、隱身等法術會讓部隊完全看不到,導致無法看到生命值,變成玩家必須記憶剩餘血量,操作上甚為不便。不曉得有沒有可能改成半透明(例如80~90%透明度)?

@chiuinan
Copy link
Owner

chiuinan commented Oct 17, 2023 via email

@danny0838
Copy link
Author

danny0838 commented Oct 17, 2023

1.我打錯字了, 80-119. 也就是原本想寫成原傷害的80%~119%, 但分母100放到分子去了...

原來如此,不過所謂 80%~119% 是否其實是 [0.8, 1.2) 的實數區間,最後算出來的傷害再取整數?

4.傷害計算公式確實是以回復計算, 但最後有一個檢驗就是, 傷害至少1點. 所以原本負傷害(補血), 又被設成1. 這個部份我沒去變動. (不知以那個為準較好)

看起來應該算遊戲BUG,加個附註說明就好。

如果有可能把負相性造成的負傷害獨立出來處理,或許可以做為一個獨立的 MOD(放程式修改讓使用者決定是否使用);如果不能,允許負傷害豈不表示 AP < DP 時攻擊會變成幫對方補血?這個恐怕是不能被接受的。XD

5.暫時加倍意思是只作用在該戰鬥中, 戰鬥結束後效果就會消失

個人是覺得看到「暫時」無法理解為持續到戰鬥結束。或許可以加個註或調整成更明確的說法。

6.所有公式裡, 最高的就是龍神斬的20+LV*8, 但這樣修改, 回復與神恩也只差2而已, 並沒什麼差異. 另一種解法是回復和神恩的公式對調, 但這樣的話, 回復和醫療的公式數值又太相近. 所以最後決定保留不改...

我的想法是如果當初遊戲設計者確有意圖給神恩術更高的回復值,只是在指定公式時設錯,也許可以在某處找到那個應該給神恩術使用的公式本體。如果各技能公式都放在差不多的地方,或許可以在那一區前後找找看?

7.鐵壁之類的加倍效果一直都在, 它是在傷害計算時才拿出來算. 而防禦重置後, 防禦值已經變成沒有裝備的了, 此時再加倍, 也還是沒有裝備的數值.

我用未修正防禦重置bug的版本,實測 LV90 雪莉(DP 284,不含裝 278)上神力給 LV200 吸血鬼(AP 1007)攻擊,第一下傷害大約 3xx-5xx,第二下傷害大約 1xxx。我不認為裝備差的 6 點 DP 可以解釋這個結果……。

註:照您提供的公式計算最大傷害是 (1007-278)/0.8 = 911.25,也無法解釋為何可以有 1xxx 的傷害,不曉得是否有哪裡算錯?

關於隱身看不到的問題, 簡單的修正法, 就是不讓它消失 (一律都顯現). 這點比較容易修正 (就是不讓該部份程式執行即可), 至於半透明就難了...

原來如此,如果可以簡單做到,或許也可以提供當一個獨立的 MOD。雖然完全沒變化有點怪,不過倍力、鐵壁等buff也是如此,應該不算完全不能接受?XD

@danny0838
Copy link
Author

法術攻擊的公式提到「若有倍力狀態者,該人員的攻擊力加倍」。

這裡應該是法術傷害加倍?我實測使用倍力後按LV計算傷害的法術(e.g. 狂雷擊)也會加倍。

@chiuinan
Copy link
Owner

原來如此,不過所謂 80%~119% 是否其實是 [0.8, 1.2) 的實數區間,最後算出來的傷害再取整數?

原本用做分子的值是: 80+亂數%40, 然後原傷害*分子/分母, 都是整數乖除, 只不過分子和分母的值弄反了...

我的想法是如果當初遊戲設計者確有意圖給神恩術更高的回復值,只是在指定公式時設錯,也許可以在某處找到那個應該給神恩術使用的公式本體。如果各技能公式都放在差不多的地方,或許可以在那一區前後找找看?

原程式一開始就誤寫了, 附近的程式碼我都看過了, 所有公式全都用上了, 沒有其他可用的公式. 最快的方式是新創公式, 但前面提過, 沒有空間可以放置新的程式碼, 除非取消並蓋掉一些原本的程式碼 (容易有副作用,不建議).

我用未修正防禦重置bug的版本,實測 LV90 雪莉(DP 284,不含裝 278)上神力給 LV200 吸血鬼(AP 1007)攻擊,第一下傷害大約 3xx-5xx,第二下傷害大約 1xxx。我不認為裝備差的 6 點 DP 可以解釋這個結果……。
註:照您提供的公式計算最大傷害是 (1007-278)/0.8 = 911.25,也無法解釋為何可以有 1xxx 的傷害,不曉得是否有哪裡算錯?

這個我再找時間測試追蹤一下...

@danny0838
Copy link
Author

danny0838 commented Oct 17, 2023

原來如此,不過所謂 80%~119% 是否其實是 [0.8, 1.2) 的實數區間,最後算出來的傷害再取整數?

原本用做分子的值是: 80+亂數%40, 然後原傷害*分子/分母, 都是整數乖除, 只不過分子和分母的值弄反了...

瞭解。我沒想到老遊戲用整數計算的情況XD

剛才看您已發布更新內容了。不過法術傷害和醫療的部分沒改到。

我的想法是如果當初遊戲設計者確有意圖給神恩術更高的回復值,只是在指定公式時設錯,也許可以在某處找到那個應該給神恩術使用的公式本體。如果各技能公式都放在差不多的地方,或許可以在那一區前後找找看?

原程式一開始就誤寫了, 附近的程式碼我都看過了, 所有公式全都用上了, 沒有其他可用的公式. 最快的方式是新創公式, 但前面提過, 沒有空間可以放置新的程式碼, 除非取消並蓋掉一些原本的程式碼 (容易有副作用,不建議).

原來如此。那還真是一個很謎的bug。專門設計來坑人的?XD

我用未修正防禦重置bug的版本,實測 LV90 雪莉(DP 284,不含裝 278)上神力給 LV200 吸血鬼(AP 1007)攻擊,第一下傷害大約 3xx-5xx,第二下傷害大約 1xxx。我不認為裝備差的 6 點 DP 可以解釋這個結果……。
註:照您提供的公式計算最大傷害是 (1007-278)/0.8 = 911.25,也無法解釋為何可以有 1xxx 的傷害,不曉得是否有哪裡算錯?

這個我再找時間測試追蹤一下...

我用 GameMaster 嘗試追蹤記憶體,發現當 LV90 雪莉含裝 DP 290 時,第一敵人攻擊後數值會被重置為 9。

有沒有放神力數值都是 290 / 9,的確如您所說應該是計算傷害時才考慮該 flag。

LV90 雪莉含裝 DP 284 時,重置後也是 9。

另一次測試 LV34 凱麗裸 DP 92、含裝 DP 115 時,重置後為 8。

看來重置後的值不是單純的無裝備值,不曉得具體是怎麼算的,但防禦力幾乎歸零也太離譜。我們以前玩的都是這樣錯誤的數據嗎orz

@danny0838
Copy link
Author

danny0838 commented Oct 17, 2023

法術列表中有個上色的「解毒」,但所有主角及怪物都沒有這個法術,不曉得是怎麼回事。

懷疑雪莉的解麻是否為解毒的誤植,因為全遊戲只有精靈的迷魂琴音有麻痹效果,而且只持續幾回合;相對地附帶中毒效果的技能很多,而且可以持續到戰鬥結束,解毒明顯比解麻更具實用性。

不過實測解毒(修改存檔加進去的),無法解除尾刺造成的每回合扣血;解麻也一樣無法解除迷魂琴音的麻痹,似乎是有bug。

鬼魂的毒蛛攻擊沒附帶機率中毒,不曉得是不是bug?

再突發奇想:有沒有可能神恩本來的設計是全體恢復加解毒及解麻,因此回復值沒有那麼高?

那麼或許可以考慮改成原恢復值+解毒+解麻,或者龍神斬的恢復值+解毒+解麻。不曉得這樣會不會太難做到?

@chiuinan
Copy link
Owner

1.防禦力重置問題, 發現它在重新計算時, 取錯值了. 應該要取AP值除以2, 結果取到附近的值, 所以最後結果都很低. 攻略已加上正確計算的修正碼.
2.解毒和解麻我沒去實測, 因為用到的機率真的很低 (懶得除錯了).
3.毒蛛看起來應該是要附帶中毒機率, 但實際追蹤結果就是沒有. 不過如果不是嚴重bug, 基本上還是維持跟原版一樣, 不要亂改比較好.
4.要改變法術的功效, 等同新創公式, 這是沒法達成的. 變更成其他法術的功效則可以 (換個指標), 所以毒蛛攻擊可以改成和屍蟲攻擊一樣有中毒效果 (傷害公式一樣).
5.倍力狀態的傷害或恢復一樣倍增 (因為計算公式結果是放在攻方AP資訊, 守方DP設為0, 最後會因為倍力再加倍)
6.隱身/虛幻消失問題已解決, 請參見修改碼

@danny0838
Copy link
Author

danny0838 commented Oct 18, 2023

2.解毒和解麻我沒去實測, 因為用到的機率真的很低 (懶得除錯了).

我測起來是無效。同意它是相對不重要的bug,可以有閒暇再看要不要處理XD

3.毒蛛看起來應該是要附帶中毒機率, 但實際追蹤結果就是沒有. 不過如果不是嚴重bug, 基本上還是維持跟原版一樣, 不要亂改比較好.
4.要改變法術的功效, 等同新創公式, 這是沒法達成的. 變更成其他法術的功效則可以 (換個指標), 所以毒蛛攻擊可以改成和屍蟲攻擊一樣有中毒效果 (傷害公式一樣).

本來是想說也許調用公式的程式碼或許會有空間可以在前後加一兩個調用另一公式的指令。不過沒實際試過也無法確定。

毒蛛真的要改應該滿麻煩的,理論上中毒機率大概要比屍蟲攻擊高一點才合理,但這樣大概就是要增加新公式了。這樣重新組譯/編譯出來的執行檔可能有大規模的bytes變動吧?

不曉得您一般是用什麼工具修改的?如果有合適的反組譯/組譯器或反編譯/編譯器,或許我也可以試試看XD

6.隱身/虛幻消失問題已解決, 請參見修改碼

大感謝!實際效果比預想的還要好。操作時可見,實際攻擊動畫演示時也保有若隱若現的效果XD

@danny0838
Copy link
Author

danny0838 commented Oct 18, 2023

又發現新BUG:

實測必中/虛幻似乎沒有準確度/閃避力加倍的效果:

測試 LV 31 雪莉(含裝備 EV 116)上虛幻給 LV 30 的龍(HIT 171)攻擊。若使用虛幻後 EV 加倍為 232,應該是 100% 失誤,但實際上命中率大約一半,似乎計算時 EV 根本沒有增加。

註:另外測試把雪莉的 EV 修改成 232 給同隻龍攻擊,確實是 100% 失誤。

再實測 LV 53 巨蛇(HIT 136)上必中後攻擊 LV 50 鬥士(EV 203)。若使用必中後 HIT 加倍為 272,應該有約 2/3 命中率,但實際上 100% 失誤,似乎計算時 HIT 也是根本沒有增加。

查程式碼(1EFD1C 附近)看起來真的有寫錯,計算準確度與閃避力差值的步驟被誤放到計算必中、虛幻之前。要修正似乎除了把整段程式順序重寫別無它法,以下嘗試修改:

-- -- -- -- -- -- -- -- -- -- -- -- 8B 45 EC 2B
-- -- -- -- -- -- -- -- -- -- -- -- 83 7D F4 00

45 F0 89 45 F8 83 7D F8 64 7E 09 C7 45 F8 64 00
7C 3C 8B -- 14 80 B8 A6 00 00 00 00 74 03 D1 65

00 00 EB 0D 83 7D F8 00 7D 07 C7 45 F8 00 00 00
E4 8B 45 14 80 B8 A9 -- 00 00 00 74 03 D1 65 EC

00 83 7D F4 00 7C 3C 8B 45 14 80 B8 A6 00 00 00
8B 45 18 80 B8 A7 00 00 00 00 74 03 D1 65 E8 8B

00 74 03 D1 65 E4 8B 45 14 80 B8 A9 00 00 00 00
45 18 80 B8 A8 00 00 00 00 74 03 D1 65 F0 8B 45

74 03 D1 65 EC 8B 45 18 80 B8 A7 00 00 00 00 74
EC 2B 45 F0 89 45 F8 83 7D F8 64 7E 09 C7 45 F8

03 D1 65 E8 8B 45 18 80 B8 A8 00 00 00 00 74 03
64 00 00 00 EB 0D 83 7D F8 00 7D 07 C7 45 F8 00

D1 65 F0 -- -- -- -- -- -- -- -- -- -- -- -- --
00 00 00 -- -- -- -- -- -- -- -- -- -- -- -- --

使用破壞卡選擇目標時按 ESC 無法正常取消(卡片被消耗,並顯示不正常的訊息)

使用轉移卡選擇目標時按 ESC 無法正常取消(會轉移至原地)

使用任意步卡選擇步數時無法按 ESC 取消

註:更改轉移卡/任意步卡可能導致小丑卡變成二者時可以取消使用並得到卡片。如果認為二者開始使用即不可取消是feature而非bug可能也合理,但此種情況應該讓轉移卡像任意步卡一樣不能按 ESC 比較合理(強制使用者選擇,而非誤以為能取消而被迫選擇錯誤的目標)。


吹跑卡、詛咒卡、封印卡、腐朽卡、天罰卡、機運卡、平均卡在沒有對手時仍可使用,此時無法正常運作且可能造成遊戲當掉。

小丑卡在無對手時可能變成這些卡,而造成問題。若要解決可能得把這些卡設成無對手時強制使用失敗,不曉得能否做到?不能的話可能只能加個附註了XD
(破壞卡、瘟疫卡、淨化卡、叛亂卡、流星卡、交換卡等有類似限制條件的可能也要檢查)


使用英雄卡進入卡片店(或使用外賣卡)時,只有第一次進入購買選單會打五折,離開購買選單後再進入就沒效了。

若是進入裝備店,重新進入購買選單也會打五折。這看起來比較正常,但是會衍生一個漏洞:玩家可以重複買物品後賣出(原價70%),使金錢無限增長。

二者不一致是顯然的,程式修改攻略應該可以放上把前者修成後者及把後者修成前者二種處理方式。至於主程式要改成何者或不改,似乎各有好壞,就看您考慮了。

或許可以另外提供修改販賣物品所得%數的方法(把販賣物品改成50%也是避開無限加錢的方法)。


第三章攻打沙漠神殿時,即使在第一戰敗北,也能進入第二戰。


單挑擂台賽選「離開」仍會進入單挑。


攻城前顯示的守軍資訊常會誤植,例如在 A 城顯示 B 城的守軍:

圖片

圖片


換裝備時數值顯示錯誤,例如顯示 AP 553=>576,但實際 AP 是換裝前 558,換裝後 581:

圖片

圖片

圖片


裝備店賣裝備時資訊有時會顯示異常,例如生命水顯示 MP+200、月光草顯示 HP+30。

(不確定重現條件,但一般買幾個裝備後進入出售選單幾乎都能看到幾個異常)

圖片


技能列表有時會顯示錯誤的項目。例如 Lv12 的希洛沒有「治癒」。

圖片


龍人施放狂龍擊時不會顯示傷害值。


關於隱身/虛幻消失的問題,目前的做法已經很好了,但改了動畫看久了還是稍有違和感。XD

另外是當對方的忍者隱形,我方操作時看不到其生命值。

不曉得有沒有辦法做到只讓血條不消失,動畫完全照原樣,這樣也許會更好一點?

(update: 修正方案


敵方可以攻擊二下的角色,有時候會只攻擊一下(似乎較常發生在我方只有主角一人時)。

(update: 修正方案


關於防禦bug,因為實際上防禦不太會有人用。以下提供把防禦改為不加防(即實際上只是待機)的修改,可避免取消防禦重置後無限加防bug被濫用:

-- -- -- -- 6B 43 5E 03 99 2B C2 D1 F8 89 43 5E
-- -- -- -- -- -- -- -- -- -- -- -- -- 90 90 90

詛咒卡可疊加似乎有破壞平衡之虞(卡片多的玩家可以無限阻止其他玩家行動),而且除此之外所有攻防類卡片都不可疊加。或許程式修改那邊可以提供一個把詛咒卡改為不可疊加(像封印卡那樣)的MOD?

@chiuinan
Copy link
Owner

chiuinan commented Oct 18, 2023

毒蛛真的要改應該滿麻煩的,理論上中毒機率大概要比屍蟲攻擊高一點才合理,但這樣大概就是要增加新公式了。這樣重新組譯/編譯出來的執行檔可能有大規模的bytes變動吧?
不曉得您一般是用什麼工具修改的?如果有合適的反組譯/組譯器或反編譯/編譯器,或許我也可以試試看XD

我是直接用UltraEdit改的. 如果反組譯過, 重寫程式後, 再編譯, 那就是重製了, 雖然可以完全解決所有的問題, 但基本上我不太想這樣做. 儘可能在最大限度內, 直接修改原有程式碼來得到想要的結果, 這才是我想要的方式. 亦即只要有原版遊戲, 就可以透過修改碼來得到想要解決的bug或新增的功能.

其他的bug要解決需要一些時間, 我過幾天再來處理 (先忙一下其他事). 你如果有測到其他bug可以持續提出來, 到時我一併處理.

@danny0838
Copy link
Author

danny0838 commented Oct 18, 2023

毒蛛真的要改應該滿麻煩的,理論上中毒機率大概要比屍蟲攻擊高一點才合理,但這樣大概就是要增加新公式了。這樣重新組譯/編譯出來的執行檔可能有大規模的bytes變動吧?
不曉得您一般是用什麼工具修改的?如果有合適的反組譯/組譯器或反編譯/編譯器,或許我也可以試試看XD

我是直接用UltraEdit改的. 如果反組譯過, 重寫程式後, 再編譯, 那就是重製了, 雖然可以完全解決所有的問題, 但基本上我不太想這樣做. 儘可能在最大限度內, 直接修改原有程式碼來得到想要的結果, 這才是我想要的方式. 亦即只要有原版遊戲, 就可以透過修改碼來得到想要解決的bug或新增的功能.

我知道 UltraEdit 或其他 Hex editor 可以改二進制程式碼,我的問題是不知道如何從二進制碼中讀出程式邏輯,以及哪個位置的碼代表什麼意思,遑論修改。不曉得您是否有用什麼工具輔助讀取程式內容?

@chiuinan
Copy link
Owner

chiuinan commented Oct 18, 2023

Dos遊戲: DosBox Debugger, 在自製工具軟體區有一個我自己修改的版本
Windows遊戲: OllyICE
首要條件是要會組合語言
Dos遊戲的話, 包括各類型硬體岔斷與IO Port, 軟體服務岔斷, DOS各種固定資料區等等都要熟, 不然會看不懂
Windows遊戲則要懂視窗訊息的各種處理, 各式API的呼叫方式等等

基本上, 反向追蹤比寫程式還要難上很多, 如果不懂程式設計的話, 可能很難上手.

@danny0838
Copy link
Author

danny0838 commented Oct 19, 2023

關於攻略內容:


新手提示實測有倍力狀態時,治療量不會加倍。我認為治療不加倍應該是合理的,應該是攻略敘述要改。

根據查到的程式碼,由於程式有瑕疵,命中率應該是 (HIT - EV + 1)%,最終範圍為 1~100%。

1EFD83 附近
程式把 0~99 的整數亂數 ≤ 命中率 (HIT - EV) 視為命中
因此命中率為 0 時,亂數為 0 會視為命中,即 1%
命中率為 n 時,亂數為 1~n 或 0 共 n+1 數皆視為命中,即 (n+1)%

這問題改了會影響遊戲平衡,可能要考慮一下。不改的話攻略還是可以說明問題,並提供改法給有興趣的玩家使用:

3B 55 F8 7E 10 8B 45 0C -- -- -- -- -- -- -- --
-- -- -- 7C -- -- -- -- -- -- -- -- -- -- -- --

傷害波動範圍的BUG同理,以下修正為 *(80~120)/100 的改法可直接改或提供給有興趣的玩家使用:

-- -- -- -- -- -- -- -- -- -- -- -- -- E8 2C D6
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

00 00 BB 28 00 00 00 99 F7 FB 8B 45 10 6B 00 64
-- -- 99 8D 5A 29 F7 FB 8D 5A 50 8B 4D 10 8B 01

8D 5A 50 99 F7 FB 8B 55 10 89 02 8B 45 10 -- --
F7 EB 99 8D 5A 64 F7 FB 89 01 90 -- -- -- -- --


-- -- -- -- -- -- E8 63 D0 00 00 BB 28 00 00 00
-- -- -- -- -- -- -- -- -- -- -- 99 8D 5A 29 F7

99 F7 FB 8B 45 10 6B 00 64 8D 5A 50 99 F7 FB 8B  
FB 8D 5A 50 8B 4D 10 8B 01 F7 EB 99 8D 5A 64 F7

55 10 89 02 8B 45 10 -- -- -- -- -- -- -- -- --
FB 89 01 90 -- -- -- -- -- -- -- -- -- -- -- --

戰鬥選單關於防禦重置bug的註未更新。

程式修改:目前防禦重置修正(2)的修改方式應該是把防禦力重置為攻擊力(含裝備)的一半。


山中廢墟到精靈族或矮人族的任一領地都可以接委託。


怪物列表說龍的法術「大部份的獸族、龍族和不死族都免疫」有明顯語病,因為獸族和不死族(屍)都沒免疫還加成,相較之下免疫的只佔獸族、不死族中較小比例。


法術列表已查程式確認解麻、解毒確實沒有效果。實際上是除了初始回復值為0以外完全沒有相關程式碼,要修正恐怕不容易,不過至少攻略可先加上說明。


卡片列表平均卡描述「若有人擁有防禦卡時無效」,但實測即使有人使用了防禦卡,平均卡仍能生效(且防禦卡的效果不會被消除)。


程式修改變更人物最高等級的部分,因每個等級數值都是 unsigned 32-bit int,似乎應該記為 X1 X1 X1 X1 X2 X2 X2 X2 ... 比較正確。

@chiuinan
Copy link
Owner

chiuinan commented Nov 2, 2023

感謝做了那麼多的測試, 同時也提供部份的修改碼. 所列問題我已抄錄下來, 後續會慢慢逐一解決. 如果您有新的發現或修改, 請另開新的一則, 免得我沒看到. 謝謝了... ^^

@danny0838
Copy link
Author

danny0838 commented Nov 3, 2023

關於虛幻特效的問題,目前查到 1EED3A (call 001EDE80) 是人物渲染的關鍵,把它繞過即可達成人物隱形仍顯示生命值,同時也能解決之前處理方式導致虛幻無動畫的問題。

至於敵方生命值無法顯示的部分,目前看來敵方人員與生命值渲染是在寫在另一個函數,我追不太到,可能要大神出馬。不過敵方完全隱藏似乎是可以當作 feature,如果很難處理我覺得先不處理也可以。XD

以下解法用到 push 保存原來的 eax (後面重取值會改變),實測暫未遇到問題,另外是由於空間不足用了比較取巧的處理方式,動到的程式碼比較多,或許還有再優化的空間:

45 10 80 B8 C9 00 00 00 00 0F 85 3C 01 00 00 69
-- -- -- -- -- -- -- -- -- 50 90 90 90 90 90 --


CB 00 00 00 69 5D F8 CF 00 00 00 03 5D 10 8B 5B
-- -- -- -- -- 4D -- -- -- -- -- -- 4D -- -- 59

0D 29 C3 69 45 F8 CF 00 00 00 03 45 10 0F BF B0
-- -- -- 0F BF B1 CB -- -- -- 8D -- 94 50 E8 FF

CB 00 00 00 8D 45 94 50 E8 F5 DB 00 00 83 C4 04
DB -- -- 83 C4 04 C1 E0 03 29 C6 01 F3 89 5D FC

C1 E0 03 29 C6 01 F3 89 5D FC 69 45 F8 CF 00 00
58 80 B8 C9 00 00 00 00 75 18 -- -- -- -- -- --

@danny0838
Copy link
Author

danny0838 commented Nov 4, 2023

關於二次攻擊的敵人有時只攻擊一下的問題,我大概知道是怎麼回事了。

判斷敵方是否進行二次攻擊的程式在 1DB667:

0160:1DB667  A157652400          mov  eax,[00246557]                 //攻擊者數據指標
0160:1DB66C  83786602            cmp  dword [eax+0066],0002          //攻擊者非攻擊二下則跳過二次攻擊:
0160:1DB670  753A                jne  001DB6AC ($+3a)                
0160:1DB672  83BD92FEFFFF00      cmp  dword [ebp-0000016E],00        //非普攻則跳過二次攻擊:
0160:1DB679  7531                jne  001DB6AC ($+31)
0160:1DB67B  8B455E              mov  eax,[ebp+005E]                 //目標死亡則跳過二次攻擊:
0160:1DB67E  40                  inc  eax
                                                                     //此時 eax 應為目標站位 (0~4)
0160:1DB67F  69C0CF000000        imul eax,eax,000000CF
0160:1DB685  83BC2829F3FFFF00    cmp  dword [eax+ebp-00000CD7],00    //判斷目標生命值<=0
0160:1DB68D  7E1D                jle  001DB6AC ($+1d)                     

目前寫法在執行到 1DB67F 時,eax 總是取到錯誤的值(實測幾乎總是 1,不確定是否有特定條件可改變其值),因此總是會抓第1個隨從的生命值作為判定依據,因此當第1個隨從已死亡或不存在時,敵方總是只攻擊一下;而如果第1個隨從還活著,敵方非以第1個隨從為攻擊目標時,即使第一下攻擊已殺死目標,仍會發動第二次攻擊鞭屍。

修正方法應是改成取出正確的 eax 值,不過我一直找不到正確的值要從哪裡取,要靠大神協助了。QQ

(我方判定二次攻擊的程式在 1DA5DD,但是採用完全不同的算法,不太能用)

在有更完美的修正方法之前,臨時處理方案是把跳轉拿掉,讓敵人總是攻擊二下:

-- -- -- -- -- 83 BC 28 29 F3 FF FF 00 7E 1D 6A
-- -- -- -- -- -- -- -- -- -- -- -- -- 90 90 --

@chiuinan
Copy link
Owner

chiuinan commented Nov 5, 2023

(以下結果先po, 全部完成後再整併進html攻略裡)

修正交換卡限制條件為我方有額外領地,卻誤設為對手有額外領地的問題
修正瘟疫卡、淨化卡、流星卡在沒有對手時無法使用的問題
修正吹跑卡、詛咒卡、封印卡、腐朽卡、天罰卡、機運卡、平均卡在沒有對手時仍能使用的問題

(檢驗部份整段重寫)

  3B 45 08 74 D1 69 55 F4 7F 01 00 00 8B 45 F0
  -- -- -- 75 -- -- -- -- -- -- -- -- -- -- --
  83 7D 72 49 7C 0A 83 7D 72 4E 0F 8E 99 00 00 00 83 7D 5A 00 75 14 83 7D 72 3C 0F 84 89 00 00 00 83 7D 72 00
  8B 45 -- 83 F8 49 7C 09 83 F8 4E 0F 8E 98 -- -- 00 83 7D 5A 00 75 05 83 F8 -- 74 28 83 7D 62 -- 75 05 83 F8
  0F 84 7F 00 00 00 83 7D 62 00 75 0A 83 7D 72 62 0F 84 6F 00 00 00 83 7D 5E 00 75 18 83 7D 72 00 74 63 83 7D
  62 74 1D 83 7D 5E 00 75 23 83 F8 3C 74 12 83 F8 47 74 0D 83 F8 48 74 08 83 F8 5B 74 03 83 F8 64 -- -- -- F8
  72 00 74 5D 83 7D 72 3C 74 57 83 7D 72 00 74 51 83 7D 66 00 75 0C 83 7D 72 5F 74 45 83 7D 72 60 74 3F
  5D 7C 05 83 F8 61 7E 59 83 7D 66 00 75 14 83 F8 5F 74 4E 83 F8 60 74 49 EB 08 90 90 90 90 90 90 90 90

修正裝備畫面時顯示角色法術時,顯示到錯誤的消耗法力數值,以及漏顯示法術的問題
(中間部份程式碼跟定位表有關,不能覆寫,因此利用跳躍方式取代部份多餘的程式碼進行修正,輸入索引為[bp-8],輸出索引為bx)

  EB 06 8B 45 F8 FF 45 F8 83 7D F8 0A 0F 8D B4 00 00 00
  33 DB EB 04 43 -- -- -- -- -- -- -- -- -- -- -- -- --
  3B 90 7A A5 00 00 7F 7D
  -- -- -- -- -- -- -- BC
  69 45 08 7F 01 00 00 03 45 F8 0F B6 80 E6 A5 00 00
  -- -- -- -- -- -- -- EB 1A -- -- -- -- -- -- -- --
  6B C0 15 0F B6 80 C0 9E 00 00 50 69 45 08 7F 01 00 00
  -- -- -- -- -- 90 -- -- -- -- 52 EB 15 -- -- -- -- --
  83 C0 32 6B C0 15 05 AC 9E 00 00
  -- -- -- EB DF -- -- -- -- -- --
  6B 45 F8 1B 83 C0 47 50
  -- C3 1B 90 -- -- -- --
  E9 3C FF FF FF C9 C3
  -- 3E -- -- -- -- --

.修訂詛咒卡效果為不會累加(後者覆蓋前者)

  42 01 D0 88 83 42 A6 00 00
  -- 8B C2 -- -- -- -- -- --

完美解決防禦重置問題(回合後才重置成加裝備AP/2):

  EB 06 8B 45 EA FF 45 EA 8B 45 EA 3B 85 09 FB FF FF 7D 26
  -- 37 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  8B 40 3A 99 2B C2 D1 F8 89 43 5E
  -- -- 56 -- -- -- -- -- -- -- --
  8B 45 E6 FF 45 E6 8B 45 E6 3B 85 0D FB FF FF
  FF 45 E6 8B 45 E6 3B 85 0D FB FF FF 74 AA 90

解決二次攻擊的問題:

83 C4 08 6A 00 8B 45 5E 40 50
-- -- -- 8B F0 33 C0 50 -- --
75 31 8B 45 5E 40
-- -- -- C6 90 90

被攻擊人物的索引值是在1DB626 call 1EE351的地方回傳EAX, 但實際值已存在其他地方, 所以函數返回後, EAX就被破壞了. 因此我將EAX存在ESI中, 到真的需要時, 再從ESI搬過來. 破壞ESI值似乎沒有其他影響, 煩請再測試看看.

@danny0838
Copy link
Author

danny0838 commented Nov 5, 2023

修正交換卡限制條件為我方有額外領地,卻誤設為對手有額外領地的問題 修正瘟疫卡、淨化卡、流星卡在沒有對手時無法使用的問題 修正吹跑卡、詛咒卡、封印卡、腐朽卡、天罰卡、機運卡、平均卡在沒有對手時仍能使用的問題

(檢驗部份整段重寫)

  3B 45 08 74 D1 69 55 F4 7F 01 00 00 8B 45 F0
  -- -- -- 75 -- -- -- -- -- -- -- -- -- -- --
  83 7D 72 49 7C 0A 83 7D 72 4E 0F 8E 99 00 00 00 83 7D 5A 00 75 14 83 7D 72 3C 0F 84 89 00 00 00 83 7D 72 00
  8B 45 -- 83 F8 49 7C 09 83 F8 4E 0F 8E 98 -- -- 00 83 7D 5A 00 75 05 83 F8 -- 74 28 83 7D 62 -- 75 05 83 F8
  0F 84 7F 00 00 00 83 7D 62 00 75 0A 83 7D 72 62 0F 84 6F 00 00 00 83 7D 5E 00 75 18 83 7D 72 00 74 63 83 7D
  62 74 1D 83 7D 5E 00 75 23 83 F8 3C 74 12 83 F8 47 74 0D 83 F8 48 74 08 83 F8 5B 74 03 83 F8 64 -- -- -- F8
  72 00 74 5D 83 7D 72 3C 74 57 83 7D 72 00 74 51 83 7D 66 00 75 0C 83 7D 72 5F 74 45 83 7D 72 60 74 3F
  5D 7C 05 83 F8 61 7E 59 83 7D 66 00 75 14 83 F8 5F 74 4E 83 F8 60 74 49 EB 08 90 90 90 90 90 90 90 90

目前測試正常,不過您po的原碼似乎有些混到您修改的版本(應該是使用原版)。最後正式釋出時可能要再檢查一下。

另外小丑卡變成詛咒卡仍有異常狀態,可能要再想辦法處理。

修正裝備畫面時顯示角色法術時,顯示到錯誤的消耗法力數值,以及漏顯示法術的問題 (中間部份程式碼跟定位表有關,不能覆寫,因此利用跳躍方式取代部份多餘的程式碼進行修正,輸入索引為[bp-8],輸出索引為bx)

  EB 06 8B 45 F8 FF 45 F8 83 7D F8 0A 0F 8D B4 00 00 00
  33 DB EB 04 43 -- -- -- -- -- -- -- -- -- -- -- -- --
  3B 90 7A A5 00 00 7F 7D
  -- -- -- -- -- -- -- BC
  69 45 08 7F 01 00 00 03 45 F8 0F B6 80 E6 A5 00 00
  -- -- -- -- -- -- -- EB 1A -- -- -- -- -- -- -- --
  6B C0 15 0F B6 80 C0 9E 00 00 50 69 45 08 7F 01 00 00
  -- -- -- -- -- 90 -- -- -- -- 52 EB 15 -- -- -- -- --
  83 C0 32 6B C0 15 05 AC 9E 00 00
  -- -- -- EB DF -- -- -- -- -- --
  6B 45 F8 1B 83 C0 47 50
  -- C3 1B 90 -- -- -- --
  E9 3C FF FF FF C9 C3
  -- 3E -- -- -- -- --

目前測試未發現異常。

.修訂詛咒卡效果為不會累加(後者覆蓋前者)

  42 01 D0 88 83 42 A6 00 00
  -- 8B C2 -- -- -- -- -- --

目前看起來沒問題。

完美解決防禦重置問題(回合後才重置成加裝備AP/2):

  EB 06 8B 45 EA FF 45 EA 8B 45 EA 3B 85 09 FB FF FF 7D 26
  -- 37 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  8B 40 3A 99 2B C2 D1 F8 89 43 5E
  -- -- 56 -- -- -- -- -- -- -- --
  8B 45 E6 FF 45 E6 8B 45 E6 3B 85 0D FB FF FF
  FF 45 E6 8B 45 E6 3B 85 0D FB FF FF 74 AA 90

這個我套了就無法正常進入戰鬥畫面,會一片全黑。

解決二次攻擊的問題:

83 C4 08 6A 00 8B 45 5E 40 50
-- -- -- 8B F0 33 C0 50 -- --
75 31 8B 45 5E 40
-- -- -- C6 90 90

被攻擊人物的索引值是在1DB626 call 1EE351的地方回傳EAX, 但實際值已存在其他地方, 所以函數返回後, EAX就被破壞了. 因此我將EAX存在ESI中, 到真的需要時, 再從ESI搬過來. 破壞ESI值似乎沒有其他影響, 煩請再測試看看.

實測會看到敵方試圖施展技能(有顯示XX使出XX的訊息)之後卻變成普攻(斷點在 1DB62B),似乎是有影響。可能還是要找到確實的儲存點比較保險。

@chiuinan
Copy link
Owner

chiuinan commented Nov 5, 2023

修正交換卡限制條件為我方有額外領地,卻誤設為對手有額外領地的問題
修正瘟疫卡、淨化卡、流星卡在沒有對手時無法使用的問題
修正吹跑卡、詛咒卡、封印卡、腐朽卡、天罰卡、機運卡、平均卡在沒有對手時仍能使用的問題

小丑卡是否也改成沒有對手時無法使用? 因為變成其他卡的時候, 是取id=亂數%卡片最大張數, 程式很短, 無從修改起.

  3B 45 08 74 D1 69 55 F4 7F 01 00 00 8B 45 F0
  -- -- -- 75 -- -- -- -- -- -- -- -- -- -- --
  83 7D 72 49 7C 0A 83 7D 72 4E 0F 8E 99 00 00 00 83 7D 5A 00 75 14 83 7D 72 3C 0F 84 89 00 00 00 83 7D 72 62
  8B 45 -- 83 F8 49 7C 09 83 F8 4E 0F 8E 98 -- -- 00 83 7D 5A 00 75 05 83 F8 -- 74 28 83 7D 62 -- 75 05 83 F8
  0F 84 7F 00 00 00 83 7D 62 00 75 0A 83 7D 72 62 0F 84 6F 00 00 00 83 7D 5E 00 75 18 83 7D 72 3A 74 63 83 7D
  62 74 1D 83 7D 5E 00 75 23 83 F8 3C 74 12 83 F8 47 74 0D 83 F8 48 74 08 83 F8 5B 74 03 83 F8 64 -- -- -- F8
  72 3B 74 5D 83 7D 72 3C 74 57 83 7D 72 63 74 51 83 7D 66 00 75 0C 83 7D 72 5F 74 45 83 7D 72 60 74 3F
  5D 7C 05 83 F8 61 7E 59 83 7D 66 00 75 14 83 F8 5F 74 4E 83 F8 60 74 49 EB 08 90 90 90 90 90 90 90 90

完美修正防禦重置問題: 之前的修改碼,最後一個發現有2處,所以會改錯

  EB 06 8B 45 EA FF 45 EA 8B 45 EA 3B 85 09 FB FF FF 7D 26
  -- 37 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  8B 40 3A 99 2B C2 D1 F8 89 43 5E
  -- -- 56 -- -- -- -- -- -- -- --
  FF 8B 45 E6 FF 45 E6 8B 45 E6 3B 85 0D FB FF FF
  -- FF -- -- 8B -- -- 3B 85 0D FB FF FF 74 AA 90

修正二次攻擊的敵人,有時只攻擊一次,有時兩次攻擊不同敵人的問題:

  75 31 8B 45 5E 40
  -- -- -- C7 90 90
  00 00 8B 45 FC C9 5B C3
  -- -- -- 75 -- -- -- --

[ebp+005E]是攻擊形態,不能略過,所以我直接修改呼叫的call 1EE351回傳值, 除了eax外, 還回傳到edi (原先是回傳在esi, 經測試發現會當機, 應該其他地方也用到esi). 目前測試暫時是正常, 只不知是否有副作用. 除了此處呼叫外, 還有3處也呼叫1EE351這個函數...

@danny0838
Copy link
Author

danny0838 commented Nov 5, 2023

小丑卡是否也改成沒有對手時無法使用? 因為變成其他卡的時候, 是取id=亂數%卡片最大張數, 程式很短, 無從修改起.

我的想法是保持可使用(畢竟小丑卡可骰出其他有功能的卡),但選到詛咒卡之類時,若無對手,應強制使用失敗,而非造成靈異現象。

這個處理起來大概工程浩大,我覺得可以把優先度放後面一點,先處理其他比較重大的問題。

完美修正防禦重置問題: 之前的修改碼,最後一個發現有2處,所以會改錯

  EB 06 8B 45 EA FF 45 EA 8B 45 EA 3B 85 09 FB FF FF 7D 26
  -- 37 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  8B 40 3A 99 2B C2 D1 F8 89 43 5E
  -- -- 56 -- -- -- -- -- -- -- --
  FF 8B 45 E6 FF 45 E6 8B 45 E6 3B 85 0D FB FF FF
  -- FF -- -- 8B -- -- 3B 85 0D FB FF FF 74 AA 90

看來目前成功修正為回合結束時重置了,不過重置為[含裝AP/2]等於是加AP裝備會影響重置後防禦力,而加DP的裝備不影響,仍然是不太對,不過要修正這點我想恐怕很難……。

除了主角以外,所有隨從在戰鬥開始時會把 AP1 設為該等級數值,所以原版程式才會抓 AP1。之前想過也把主角的 AP1 初始化為含裝 DP*2,這樣在戰鬥中就能正常透過 AP1 重置。但戰鬥結束後似乎又會使用這個 AP1 值重算主角屬性,導致錯誤。

如果可以把戰鬥後重算改寫,或許就可以解決問題。

另外是重置跑完後 1DB7D0 或許可以考慮改成 7D3D 跳掉一些已不需要執行的程式碼及 call 001EE3B8,不改雖然目前沒看到什麼問題,但就是以防萬一的概念?

@chiuinan
Copy link
Owner

chiuinan commented Nov 5, 2023

真正的防禦重置完美修改法:

  6B 43 5E 03 99 2B C2 D1 F8 89 43 5E
  8B -- -- 89 43 1A 90 -- -- 01 -- --
  EB 06 8B 45 EA FF 45 EA 8B 45 EA 3B 85 09 FB FF FF 7D 26
  -- 37 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3D
  8B 40 3A 99 2B C2 D1 F8 89 43 5E
  -- 43 1A 09 C0 74 04 90 -- -- --
  FF 8B 45 E6 FF 45 E6 8B 45 E6 3B 85 0D FB FF FF
  -- FF -- -- 8B -- -- 3B 85 0D FB FF FF 74 AA 90

用原來的AP資訊重算,一定會略掉裝備DP資訊. 所以我找了一個沒有用到的地方[怪物資訊+1A]來暫存原本的DP值:

1.[1A]初值均為0
2.進行防禦時, 將原本的防禦值存到[1A]裡
3.回合結束時, 讀取[1A], 若為0則略過, 否則填入[5E]裡 (防禦)

如果沒進行防禦動作, [1A]必為0, 重置時不會更動到原防禦值
如果有進行防禦動作, [1A]會儲存原始防禦值, 重置時搬回[5E], 仍為原防禦值

已確認沒有程式去存取[怪物資訊+1A]的資料, 所以不會有任何影響. 至此總算完美解決了.

@danny0838
Copy link
Author

真正的防禦重置完美修改法:

  6B 43 5E 03 99 2B C2 D1 F8 89 43 5E
  8B -- -- 89 43 1A 90 -- -- 01 -- --
  EB 06 8B 45 EA FF 45 EA 8B 45 EA 3B 85 09 FB FF FF 7D 26
  -- 37 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3D
  8B 40 3A 99 2B C2 D1 F8 89 43 5E
  -- 43 1A 09 C0 74 04 90 -- -- --
  FF 8B 45 E6 FF 45 E6 8B 45 E6 3B 85 0D FB FF FF
  -- FF -- -- 8B -- -- 3B 85 0D FB FF FF 74 AA 90

用原來的AP資訊重算,一定會略掉裝備DP資訊. 所以我找了一個沒有用到的地方[怪物資訊+1A]來暫存原本的DP值:

1.[1A]初值均為0 2.進行防禦時, 將原本的防禦值存到[1A]裡 3.回合結束時, 讀取[1A], 若為0則略過, 否則填入[5E]裡 (防禦)

如果沒進行防禦動作, [1A]必為0, 重置時不會更動到原防禦值 如果有進行防禦動作, [1A]會儲存原始防禦值, 重置時搬回[5E], 仍為原防禦值

已確認沒有程式去存取[怪物資訊+1A]的資料, 所以不會有任何影響. 至此總算完美解決了.

哦哦哦哦!普天同慶!讚歎大神!

不曉得您是用什麼方式排除其他記憶體存取的?我之前試過 BPM 設斷點追蹤,但似乎音樂或動畫播放時會把整塊記憶體搶過去用(原來放的東西似乎會先暫存至他處再搬回來?)產生大量的 break event,就放棄了orz

另外是如何排除特定條件的使用,例如如果是進入特定關卡或特殊buff會用到,沒針對這些情況做測試或許就會漏掉,導致在真的用到時出問題。(話雖如此,目前也只有想到中毒和麻痹可能用到而已,但法術公式那部分看起來二者似乎是存到其他變數,不確定後續處理是否會用到;魔王關卡似乎也另有其他變數判斷)

如果終究要借未使用的區域暫存,或許 52h 會比 1Ah 更理想一點?至少和實際 DP 的位置比較靠近……不過也許反過來說因此被其他程式用到的機率也會比較高?總之這是比較吹毛求疵了。

唉,為一個幾乎沒什麼使用的功能大費周章,真是辛苦了orz

@chiuinan
Copy link
Owner

chiuinan commented Nov 6, 2023

已確定解毒和解麻均共用相同的程式碼,只是單純將AP=DP=0(沒有傷害或醫療),並沒有做其他額外事情,因此無實質效果。而附近的程式碼沒有多餘的空間可塞入處理程式,只能放棄此一修正。例如中毒的處理為:

mov eax, dword ptr [ebp+20]
or byte ptr [eax], 02

進入處理程式時,[ebp+20]指向的就是目標人物的中毒旗標位址,解毒只需將bit 02清除即可(麻痺我就沒追下去了)。


flat mode程式應該要用bplm監控記憶體, 你是用real mode的bpm嗎?
[1a]的存取, 我是直接搜尋反組譯出來的程式碼, 確認間接存取[??+1A]前都沒有imul ??,CF的程式 (也就是怪物資料的大小)
[52]不行, 因為它的值並非都是0, [1a]我有調出MONSTER.DAT裡的值, 確認每個怪物值都是0
7f以下唯一可用的就只有[1a], 其餘都不行


二次攻擊呼叫1EE351的另三個地方在1DA083, 1DA03D, 1D9C95, 但我怎麼測試都不會進到這三個程式點... 你要測看看嗎?


在修正裝備數據不正確問題時, 發現它有重算AP,DP等值, 但與初始化數值不同:

BASE_AP = A1+A0*(等級-1)
BASE_HT = A2+A3*(等級-1)

升級或遊戲一開始時計算公式為:

BASE_AP = A1+(A0 * 等級) - 1
BASE_HT = A2+(A0 * 等級) - 1

明顯後者是個bug, 括號錯了,Base_HT也沒用到A3值. 是否要修正呢? 修正的影響很大, 會使得等級1的主角幾乎很難打怪...
攻擊力少了4~9, 等於初始武器增加AP的好幾倍了.

@danny0838
Copy link
Author

danny0838 commented Nov 6, 2023

flat mode程式應該要用bplm監控記憶體, 你是用real mode的bpm嗎?

我不曉得有這些差異...orz

但是如果使用 BPLM,如何把 segment:offset 轉為對應的 linear address?比如我想監測 0168:25d35f (25d345+1A),要怎麼下 BPLM 指令?

[1a]的存取, 我是直接搜尋反組譯出來的程式碼, 確認間接存取[??+1A]前都沒有imul ??,CF的程式 (也就是怪物資料的大小)

之前也想過把整個程式反組譯來盤查,但是 DosBox debugger 似乎沒這種功能,只能從即時 Code Overview 一次一小段慢慢看,但要搜尋就怕掛一漏萬。若要從頭到尾手工一段一段複製貼上也太厚工。不曉得是否有其他能做完整反組譯的工具?

[52]不行, 因為它的值並非都是0, [1a]我有調出MONSTER.DAT裡的值, 確認每個怪物值都是0
7f以下唯一可用的就只有[1a], 其餘都不行

瞭解,既然都查過如此就這樣吧。

修正二次攻擊的敵人,有時只攻擊一次,有時兩次攻擊不同敵人的問題:

  75 31 8B 45 5E 40
  -- -- -- C7 90 90
  00 00 8B 45 FC C9 5B C3
  -- -- -- 75 -- -- -- --

[ebp+005E]是攻擊形態,不能略過,

這個我看不太懂,從 [ebp+005E] 取出的 eax 值會被這段之後執行的程式碼用到嗎?

所以我直接修改呼叫的call 1EE351回傳值, 除了eax外, 還回傳到edi (原先是回傳在esi, 經測試發現會當機, 應該其他地方也用到esi). 目前測試暫時是正常, 只不知是否有副作用. 除了此處呼叫外, 還有3處也呼叫1EE351這個函數...

細節還要再找時間測試,不過 esi 和 edi 一般不是一起使用的嗎?有點難理解改 esi 出問題 edi 則不會的情況。

在修正裝備數據不正確問題時, 發現它有重算AP,DP等值, 但與初始化數值不同:

BASE_AP = A1+A0*(等級-1) BASE_HT = A2+A3*(等級-1)

升級或遊戲一開始時計算公式為:

BASE_AP = A1+(A0 * 等級) - 1 BASE_HT = A2+(A0 * 等級) - 1

明顯後者是個bug, 括號錯了,Base_HT也沒用到A3值. 是否要修正呢? 修正的影響很大, 會使得等級1的主角幾乎很難打怪... 攻擊力少了4~9, 等於初始武器增加AP的好幾倍了.

這裡說的 A2, A3 就是 HIT1, HIT0 吧?

我之前看攻略就覺得怪物和主角 base AP, HIT 算法不同是有 BUG了,改下去的確可能對遊戲平衡影響很大,問題是也不曉得當初負責遊戲平衡的人員是用什麼階段的版本做數據平衡的,有可能改了才是正途……。

目前初步體驗修完各種 BUG 後,的確感覺主角數值強到不太合理,尤其是明的迴避率,顯然把 AT0 當做 HIT 成長係數是太高了……。

話說回來,光是目前改的這些 BUG,其實就已經讓遊戲體感和平衡與原版大大不同了。加改這個可能也不是那麼不可接受,只是所有主角所有等級的數據都會不同的確會是很大衝擊,攻略也要分原版和修改版的數據。XD

初步想法是先提供修改碼,至少我們可以小團體玩一玩體驗看看,要不要直接改下去日後再說吧XD。

抓數據看了一下:

  • 希洛 AP1=18, AP0=7, HIT1=10, HIT0=6
  • 明 AP1=24, AP0=10, HIT1=6, HIT0=4
  • 凱麗 AP1=16, AP0=5, HIT1=8, HIT0=5
  • 雪莉 AP1=18, AP0=6, HIT1=8, HIT0=6

改下去以後衝擊最大的應該是希洛和明,尤其是 HIT/EV 成長性,明會從迴避王變成最不會迴避王,算是重大 nerf...XD

@chiuinan
Copy link
Owner

chiuinan commented Nov 6, 2023

但是如果使用 BPLM,如何把 segment:offset 轉為對應的 linear address?比如我想監測 0168:25d35f (25d345+1A),要怎麼下 BPLM 指令?

就不用segement, 直接bplm 25d35f
反組譯我是用W32Dasm, 位址需要換算一下, 也有點小bug, 例如:

:00018740 8B450C mov eax, dword ptr [ebp+0C]
:00018743 C780B80B000000000000 mov dword ptr [ebx+00000BB8], 00000000

後者實為[eax+BB8], 這已是最新版8.9的結果了... 可能還要找更好的反組譯程式.

[ebp+005E]是攻擊形態,不能略過,
這個我看不太懂,從 [ebp+005E] 取出的 eax 值會被這段之後執行的程式碼用到嗎?

我是指call 1EE351後回傳值的處理, 原始碼為:

push 00
mov eax, dword ptr [ebp+5E]
inc eax
push eax

我之前以為[ebp+5E]無用, 固定為0, 所以改成:

mov esi,eax ; 將回傳值記錄在esi
xor eax,eax
push eax
inc eax
push eax

後來你測試發現都變成普攻, 所以[ebp+5e]為0時為普攻, 其他值可能是法術攻擊等等..

@danny0838
Copy link
Author

danny0838 commented Nov 6, 2023

發現目前的防禦重置修改還有漏洞!

23d345 等資料區在戰鬥結束時不會清空,戰鬥開始時也不會初始化 001A 的值,因此會維持上一場戰鬥的數值。如果前一場的人員有防禦,而後一場同一位置的人員未防禦,就會被重置為前一場人員的防禦力。

看來戰鬥開始時有必要把該值初始化為 0。

@chiuinan
Copy link
Owner

chiuinan commented Nov 6, 2023

初始化[1a]值:

  6A 4C 69 85 86 00 00 00 7F 01 00 00 05 63 A5 00 00 83 C0 17
  -- 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 13

@danny0838
Copy link
Author

初始化[1a]值:

  6A 4C 69 85 86 00 00 00 7F 01 00 00 05 63 A5 00 00 83 C0 17
  -- 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 13

怪了,我套這個以後完全不正常,進入戰鬥中的血量、攻擊力等等都不對了。

@chiuinan
Copy link
Owner

chiuinan commented Nov 6, 2023

忘了調目標位址:

  6A 4C 69 85 86 00 00 00 7F 01 00 00 05 63 A5 00 00 83 C0 17 50 8D 85 25 F3 FF FF
  -- 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 13 -- -- -- 21 -- -- --

@danny0838
Copy link
Author

danny0838 commented Nov 6, 2023

只有凱麗會. 我以為等級前的數值都是0, 後來才發現凱麗等級前的數值是0Ch, 所以不能用搬運的方式初始化.
我再想想.

不小心按成編輯, 蓋掉你的了... sorry

另外我發現麻痺好像只有一回合, 那麼解麻不就無意義了?

@danny0838
Copy link
Author

danny0838 commented Dec 29, 2023

限制對手和限制對手額外領地是差不多的事,都是比較偏向不合理而非錯誤,而且交換卡和瘟疫等卡的條件是改同一段程式碼,所以傾向放在一起。

我的想法是先描述卡片各論(照卡片順序),再放總論;先寫比較嚴重的錯誤,再寫相對較輕的不合理。所以前面先寫瘟疫等卡和交換卡各自的錯誤。再提這些卡共有的不合理條件限制。

不過只要都有提到,這些也沒有絕對對錯,您如果覺得有更好的組織方式也OK。

不過可能所有內容都決定後,還是需要再來個順序總整理(尤其程式修正列表),為了避免造成更多修改衝突,或許可以先處理內容,最後再一起做順序優化。


其他幾個目前看到的問題:

我查程式碼,並沒看到祝福卡、平安卡類有避開命運事件的效果,也模擬過抽到中陷阱事件的情況,並沒有被祝福卡擋下(不過模擬可能有誤差就是)。可能要再確認。

之前有寫退還小丑卡嗎?我以為是若小丑卡變成瘟疫卡,結果無領地可選,就自動取消退還瘟疫卡。

@chiuinan
Copy link
Owner

我檢視了相關的程式碼, 確認平安卡,防禦卡,祝福卡都無法避開命運事件, 所以修正了說明. 其中[天罰卡]可被平安卡擋下, 似乎是個bug, 看要不要修正 (很容易).

修正各章領地資料

第四章若兩城交換, 神之城的S記號會不會消失, 原來的神奇雕像購買事件還能觸發嗎? 請確認一下...

@danny0838
Copy link
Author

danny0838 commented Dec 29, 2023

我檢視了相關的程式碼, 確認平安卡,防禦卡,祝福卡都無法避開命運事件, 所以修正了說明. 其中[天罰卡]可被平安卡擋下, 似乎是個bug, 看要不要修正 (很容易).

天罰卡明顯是bug,改吧。XD

修正各章領地資料

第四章若兩城交換, 神之城的S記號會不會消失, 原來的神奇雕像購買事件還能觸發嗎? 請確認一下...

沒問題,因為事實上沒有改動ID,只是改顯示名稱和基礎稅金、守軍型態等數值。


實測防禦卡不能阻擋吹跑卡、機運卡,防禦卡和平安卡都不能擋交換卡。這幾個的確比較不容易想到,或許可以括號加註,否則讀者可能也會懷疑是作者漏掉。XD


本來有加註當用祝福卡避開陷阱卡的陷阱時,本來該地點應該發生的事件不會發生(例如踩到領地上不會發生付費/攻城)。最近的修改似乎沒寫上。


最近的修改把第三章龍人神殿和龍人城的名稱誤改了。


(A)修正交換卡檢查我方額外領地誤設為檢查對手額外領地的問題
(B)修正瘟疫卡、淨化卡、流星卡在沒有對手時無法使用的問題
(B)修正交換卡在沒有對手額外領地時無法使用的問題
(B)修正吹跑卡、詛咒卡、封印卡、腐朽卡、天罰卡、機運卡、平均卡在沒有對手時仍能使用的問題

這一組修改其實可以拆成(A)和(B)兩修改,不過(A)可以獨立存在,但(B)依賴(A)(否則條件仍是錯的)。看有沒有打算分開。如果分開,交換卡的BUG說明可能也要適當改寫。

@chiuinan
Copy link
Owner

chiuinan commented Dec 29, 2023

天罰卡bug等整併完後再來改.
另外, 防禦卡是可以擋下吹跑卡的, 只是又因為程式誤寫, 判斷"被攻擊者"是否有防禦卡效果, 寫成"攻擊者", 所以變成無效. 這個也等到最後一起改.


修正卡片店陳列
修正裝備店陳列
我不認為這算是bug, 也許當初就是想這樣設計的, 因此改放到[變更遊戲屬性]部份.

@danny0838
Copy link
Author

danny0838 commented Dec 29, 2023

原來吹跑卡也是BUG...XD 是否也檢查過機運卡,或許也是類似的誤植BUG? (不過機運的確比較不像攻擊,內定不適用也合理)


存檔修改目前生命/最大生命誤植成二份。


怪物資料表只有第一個表有更新標題列,後面幾個沒改到。


戰鬥中主角法術清單的問題,就如原帖及commit message所述,主要是實際上有二個資料表存在,程式取錯資料表的問題,要如何簡單描述又讓讀者容易理解有點考驗功力。XD

我認為至少要讓讀者能夠想到以下異常情況:
case1: 雪莉進入戰鬥時MP 4,無法使用虛幻,吃月光草回復至34後仍無法使用。
case2: 雪莉進入戰鬥時MP 20,用到剩4後無法使用虛幻,再吃月光草回復至34後仍無法使用。
case3: 雪莉進入戰鬥時MP 20,吃月光草回復至50,接者用到MP剩34時卻無法使用虛幻(因背後的主角資料表此時MP是20-(50-34)=4)。

e0bd6d1 的寫法,我覺得讀者似乎不太容易想到case2,3的情況。


關於主角體型未初始化的問題,如原帖所述,由於還有其他檢查條件,因此誤判不是一定發生,所以原 commit 特別寫「某些條件下」, e0bd6d1 刪了這部分,不過這的確是可強調也可不強調,您再考慮看看要不要調整。

@danny0838
Copy link
Author

danny0838 commented Dec 29, 2023

卡片店我認為是bug,主要是因為原寫法是毫無道理的機率不等,而且完全無下限,有可能進卡片店只賣5種、3種,甚至最極端是0種,這是預期中的嗎?(P.S.我沒遇過0種、1種的極端狀況,搞不好按上下鍵時介面會當掉)

裝備店因為有陳列其他基本貨,而且裝備ID有規則性(低階至高階),相對比較可以接受,但跨種類仍然是不太有道理的機率不等(比如布鞋機率低於龍神甲),但因為原修改也無法完全確認最初設計意圖(16/53到底該改成多少),而且實測影響沒那麼大(30%滿低的,大概頂多抽到7~10件左右,分給8~13個位置就算不均大概算出來差異也不明顯),真的要放修改我是也可以接受,目前只是比照卡片店一起放bug而已。

@chiuinan
Copy link
Owner

chiuinan commented Dec 29, 2023

基本上我是比較尊重原遊戲的設計, 即便是再怎麼爛的演算法.

原來的卡片或裝備產生程式, 基本上沒有所謂的程式誤寫或邏輯錯誤 (除了疾走靴問題外), 只能說原先設計的演算法不好, 考慮不周全, 讓人覺得不太合理, 但不能說它是個錯誤.

對原遊戲不好的演算法加以改良, 基本上已經是MOD的範疇了. 這個部份可以另行處理.

1.修正防禦卡無法擋下吹跑卡攻擊的問題

69 45 0C 7F 01 00 00 80 B8 45 A6 00 00 00 74 4A 69 45 0C 7F 01 00 00
-- -- FC -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- FC -- -- -- --

2.修正平安卡可以擋下天罰卡攻擊的問題

69 45 F4 7F 01 00 00 80 B8 45 A6 00 00 00 74 13
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 36

@danny0838
Copy link
Author

danny0838 commented Dec 29, 2023

基本上我是比較尊重原遊戲的設計, 即便是再怎麼爛的演算法.

原來的卡片或裝備產生程式, 基本上沒有所謂的程式誤寫或邏輯錯誤 (除了疾走靴問題外), 只能說原先設計的演算法不好, 考慮不周全, 讓人覺得不太合理, 但不能說它是個錯誤.

對原遊戲不好的演算法加以改良, 基本上已經是MOD的範疇了. 這個部份可以另行處理.

本來是覺得有可能會在陳列0~1種卡片時造成介面當掉,不過實測沒問題,所以就這樣吧。

這個問題的等級大概和詛咒卡、毒蛛攻擊相似,如果還是要像之前一樣分成普通修正版和完整修訂版,應該可以加到完美修正版。


卡片店在選擇卡片時可以按左右鍵調整一次購買的數量。這點可以補充。(裝備店不行)


怪物列表,上面的文字敘述是用基礎經驗值、基礎價格,下面的表格應該也用基礎經驗值、基礎價格比較好,不過字有點多,所以當時我索性改用代號,而且剛好使得用代號的標頭都是公式中的參數,文字標頭都是固定值。不過選的代號也沒很好看XD 您可再評估看看怎麼寫比較好。總之最好是讓上面的文字和下面的表格對得上。


關於程式位址簡易說明,我認為角色資料起點之類還是要有換算範例比較容易讓人理解。至少我自己就是因為當初沒人提示所以花了很多時間才領悟 [ebp-C93]=[*+21+0*CF+66]=主角攻擊次數 這樣的概念。主角資料起點、法術資料起點也同理。

2930581 把範例改成 [eax+ebp-C93] 我覺得會讓人難以理解,尤其 eax 的值並不固定,而是是由前面的程式碼決定,放在主程式*那部分並不合適。(放在下面幾段還勉強可以解釋成該段程式中實際出現的程式碼,但我其實也不喜歡,所以後面那些能從上面這幾個起點換算來的參數都直接刪掉,除了像 [ebp+5E] 那種只是小範圍程式暫存值的有保留)

然後0000230C主要就是由0000229F呼叫。如果不增加縮排,也許在0000229F的說明中提及會call前者做主要處理?

@danny0838
Copy link
Author

[電腦玩家評估雙方戰力及判斷是否逃跑]的參數似乎誤植成[加入並初始化傭兵資料]的參數了。

@chiuinan
Copy link
Owner

chiuinan commented Dec 29, 2023

[電腦玩家評估雙方戰力及判斷是否逃跑]的參數似乎誤植成[加入並初始化傭兵資料]的參數了。

這個我是直接使用你的PR上的註解, 並沒有實際去驗證. 你看看要如何改...

程式裡, 對於17F*N, AA*N之類的, 多半都會算成eax, 然後再以[eax+bp-???]的方式去存取資料. 所以直接附上會比較容易看懂. 後面加上一堆運算式, 其實只是概念, 突然看程式時, 還要再自行轉算, 其實很麻煩. 如果可以, 我還寧可保留原先的註記方式, 因為在查看該段程式時, 就可以從中立即查到各存取位址的意義...

@danny0838
Copy link
Author

danny0838 commented Dec 29, 2023

[電腦玩家評估雙方戰力及判斷是否逃跑]的參數似乎誤植成[加入並初始化傭兵資料]的參數了。

這個我是直接使用你的PR上的註解, 並沒有實際去驗證. 你看看要如何改...

這個和PR內容不一致,明顯是對錯行了。我直接把幾個小修改提到 PR #12。您再參考看看。

程式裡, 對於17F*N, AA*N之類的, 多半都會算成eax, 然後再以[eax+bp-???]的方式去存取資料. 所以直接附上會比較容易看懂. 後面加上一堆運算式, 其實只是概念, 突然看程式時, 還要再自行轉算, 其實很麻煩. 如果可以, 我還寧可保留原先的註記方式, 因為在查看該段程式時, 就可以從中立即查到各存取位址的意義...

eax 是不固定的變數,而且可能此處是 [eax+ebp-???],下一處卻是 [edx+ebp-???],不可能窮舉所有情況。

如果要保留 [eax+ebp-???],至少可以加上更明確的 context,比如 [eax+66]=[[246557]+66]=角色普攻次數[edx+eax*4+6E]=[[246557]+[ebp+5E]*4+6E]=怪物法術編號 之類可以根據 ebp 精確定位的形式。

而這個和前面我說的換算範例也沒有衝突,保留這部分不代表一定要刪掉原來的換算範例。至少以我之前的經驗,沒有這樣的提示我一開始完全不會想到是去讀取某些已知、固定的資料表,而是一些分散、不知何處的暫存數值。XD

@chiuinan
Copy link
Owner

chiuinan commented Dec 29, 2023

1.怪物列表的標題就這樣吧. 用PR0等標示實在很難看懂, 還是直接用中文較佳.
2.程式註解就全部一起並列吧, 反正多一點更易看懂.

我做了一個2.2版, 內含3種版本, 你測看看結果如何再跟我講 (包括調整修改的事項). 確認全部ok後再對外release.

@danny0838
Copy link
Author

danny0838 commented Dec 29, 2023

版本越來越多了XD

  1. 修正虛幻特效的部分,似乎用到了舊版的修改,與目前版本攻略寫的修改不符。

  2. 我認為領地錯誤是相當明顯的BUG(至少就稅收異常而言),不是MOD,應該是放基本的修正版,就算基於感受差異比較大(?)考量,至少也該放完整修訂版。

@chiuinan
Copy link
Owner

chiuinan commented Dec 29, 2023

虛幻特效的修改, 攻略內容一直到現在都保持沒變, 也不知道你又有更新了... ><;
其實如果不是最後一個留言, 儘量不要去修改之前的留言, 寧可開新的留言, 因為很容易會被忽略掉 (不會再有通知, 無法發現內容異動了).

我想完整修改版就再加上:

傭兵每天回復法力由2點改為20%。
修正卡片店陳列各種卡片的機率不相等,且有時種類過少的問題。
修正裝備店陳列各種裝備機率不相等的問題。
修正各章領地錯誤資料(需開新遊戲才有效)。

這4項吧. MOD版就不要了.

@danny0838
Copy link
Author

danny0838 commented Dec 29, 2023

虛幻特效修改最近這波並未更動(只有調整呈現格式),應該是之前就弄錯了(之前曾經套用到舊修改,後來我留言後你可能只更新了攻略而未調整修改版的二進位碼),只是我剛才比對二進位碼才發現。

傭兵每天回復法力比較難認定,不過以遊戲性考量,我覺得原版的設定還算OK,雖然是有一些不一致。所以比較傾向不直接加,留給玩家自行MOD就好。

其實雖然有二個版本,我覺得修正版的遊戲性並不好(明會明顯過強),要推薦別人玩的話只會推完整修訂版,不過主角屬性公式更動的確改變比較大,而完整修訂版加的其他修改也的確稍微大了一點,所以是尊重這個決定。

@chiuinan
Copy link
Owner

chiuinan commented Dec 29, 2023

2.2版已重製上傳, 請測試看看.

其實攻略一直都沒修正, 我剛才才加以修正. (我做的版本, 都是依照攻略內容, 有變動都會重做).

@danny0838
Copy link
Author

danny0838 commented Dec 29, 2023

不是啦,那個就是我前面提到的只有修改格式(之前我習慣16碼一行,後來配合攻略格式改的,然後有刪掉一些不必要的參考碼),二進碼完全沒變,具體修改在PR串裡的 11ee0ce 。你後來等於是把它 undo 了 XD

@chiuinan
Copy link
Owner

結果一樣就先測吧...
我剛剛也是依照這個修改碼修改的, 但你說套用到舊版的 (奇怪?!), 所以又重新在前面的留言找出修改碼...

@danny0838
Copy link
Author

danny0838 commented Dec 29, 2023

沒事了。我之前拿我自己的版本和2.2版比對,我自己的版本是基於2.1版,而2.1版的確是套到舊版修改(所以當時就和攻略不符了,只是沒發現),現在看起來2.2版是最新版的沒錯。讀二進碼有夠累,我自己都眼花搞混了orz

不過攻略應該不用 undo 那個修改,再找時間改回來就好。

@danny0838
Copy link
Author

danny0838 commented Dec 29, 2023

修改「12.修正小丑卡轉成吹跑卡、詛咒卡等需要選擇對手的卡片,若沒有對手時自動取消,變回小丑卡」怪怪的,因為修改11.已經限定沒有對手時小丑卡不會變成這些卡片(會自動重抽),實測也是如此。

我另外測試了取消11小丑卡轉換條件修改的部分,然後模擬抽出吹跑卡,結果直接當掉。看起來即使不套用修改11,這個修改似乎也沒有發揮作用。

@danny0838
Copy link
Author

danny0838 commented Dec 29, 2023

一些雜項修改放 PR #13,請參考

(本來想試試 patch,不過看起來網頁介面 diff 效果沒很好,還是算了)

@danny0838
Copy link
Author

danny0838 commented Dec 29, 2023

「位」是尊稱,因此「一位敵人」之類的用法其實不太合適。不過這是比較講究的吹毛求疵,要改的地方不少,而且可能其他遊戲也有,看您有沒有想要處理。

可參考:
https://blog.udn.com/mrlee123/2957831

@danny0838
Copy link
Author

danny0838 commented Dec 30, 2023

遊戲中使用卡片的文字沒有區分瘟疫卡和淨化卡(都是寫守軍生命減半),據說是遊戲說明書還是攻略本才有提到區分不死魔族與非魔族。所以我不很確定應該視為BUG或是後來棄用的設定。也許考慮這個修改只放完整修訂版?

取消負相性修正後,原來說明傷害最少1點那裡一直沒加上相關說明,也許會有讀者感覺突兀?可以考慮加上一些文字說明狀況(但不加其實也非不可,看您決定)。

目前攻略混用「召募」、「招募」,遊戲中是用「召募」,查字典二者大致同義,有些人認為有一點細微差別。看要不要統一。

攻略目前多用「傭兵」,但遊戲中除了「傭兵卡」以外,大多使用「近身隨從」、「隨從」。看要不要調整。

攻略寫「命運事件」,而遊戲中說法是「突發事件」,不過的確和踩到命運時相同。也許這部分可以考慮不統一用詞(每日30%發生的事件改稱「突發事件」)?

@danny0838
Copy link
Author

danny0838 commented Dec 30, 2023

目前攻略網頁沒有針對手機設定,一般網頁會加上 <meta name="viewport" content="width=device-width, initial-scale=1.0"> (或其變形,可查查),改善手機瀏覽器的縮放效果,不過未必所有頁面用了都會比較好(有些頁面可能會變太頻繁換行,不過有可能用其他 tag 或 CSS 處理會更合理),一樣其他遊戲也有影響,可考慮看看要不要調整。

@danny0838
Copy link
Author

danny0838 commented Dec 30, 2023

修正拾獲寶物事件

69 95 8A 00 00 00 7F 01 00 00 8B 45 5A 01 82 22 A6 00 00
-- 8D -- -- -- -- -- -- -- -- -- -- -- -- 81 -- -- -- --

69 45 4E 7F 01 00 00 8B 80 0A A6 00 00
90 90 90 90 90 90 90 -- 81 -- -- -- --

原修改因8A已超過7F,會被視為負數,導致取到無法預期的值,且無法正常檢測物品總數。(該值通常是0,因此希洛的物品滿了就拿不到寶物)

未修正時,程式會抓到另一個暫存變數,但該變數的值若剛好為0~3,仍有可能獲得寶物。因此將文字敘述由不可能改為幾乎不可能。

(已加入PR)

@danny0838
Copy link
Author

danny0838 commented Dec 30, 2023

我查了程式碼,發現領地守軍每天也會回復20%法力(雖然實際上守軍的法力不會減少),對比之下隨從回魔2點應該是誤植了。目前先當作BUG修改,除非未來有看到足以翻案的更大證據(比如官方文件明說隨從每天回魔2點)。(已加入PR)

@danny0838
Copy link
Author

danny0838 commented Dec 30, 2023

默默地又出新版了XD 一些細微的調整參 PR #14。其他的如前所述,有空再慢慢弄吧。

@chiuinan
Copy link
Owner

魔島大富翁先到此告一段落, 其他若還有需要修改之處, 就另開issue並排Queue吧.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants