《軒轅劍外傳: 漢之雲》1.01補丁後戰鬥死迴圈攻略

發佈日期

由於玩的是xx版,所以1.01補丁直接打上去是不行的。一般人都是備份原先的 swdhc.exe,打完補丁再複製回去。造成的結果就是主程式仍然是 1.00版,新增劇情可以體現(但有嚴重問題,見下文),修正後的護國持天等技能也可以看到,但1.00系統的一些bug無法修正。

最嚴重的問題在於新增戰鬥死迴圈。用網上下載的新增劇情戰鬥存檔測試後可以發現,在打完路人軒、二戰黑龍後,劇情會回到打死boss之間的地方重新進行,造成死迴圈,無法繼續劇情。

本來這個問題是沒辦法修正的,除了等1.01的xx補丁。不過,前幾天看到 vbvan 大大的強帖:漢之雲指令碼研究(附帶mod製作工具) ,並且大大已經更新了1.01的原始劇情指令碼,頓時看到了希望!

經過數小時的研究,發現透過修改指令碼,可以修正死迴圈的問題。

所以,有興趣diy的可以跟著我一起修改。當然覺得麻煩的可以直接下載修改好的檔案。

研究1:新增戰鬥死迴圈解決

透過全文搜尋關鍵字,確定暴走陸的劇情全部在 10804c.lua 檔案中。判斷戰鬥前後劇情的關鍵程式碼如下:

code:
crazylu_2 = function()
   if isfon(4801) == 1 and isfon(2913) == 0 then
      crazylu_2_a()
   else
      if isfon(2913) == 1 and isfon(4803) == 0 then
         crazylu_2_b()
      end
   end
end
判斷是否與小陸子戰鬥過的flag是2913。但是整個程式碼中並無一處設定 fon(2913) 。因此,可以認為 fon(2913) 是在1.01的主程式裡直接給出,而1.00的主程式則不會,導致的結果就是 isfon(2913)永遠為0,陷入死迴圈。

修正方法就是把 fon(2913)  加到戰鬥開始之前——雖然主程式沒有設定2913這個flag,在指令碼進行過程中設定的效果也是一樣的。可以找到 crazylu_2_a() 函式的合適位置:

code:
      chatinfo(80, "少年", "喝啊啊啊啊──")
      story_music_off(0, 0)
      story_music(84, 1, 84, 1, 2, 0)
      call_fightdark(383)
      lock_player(0)
這是原先的程式碼,修改為

code:
      chatinfo(80, "少年", "喝啊啊啊啊──")
      fon(2913)
      story_music_off(0, 0)
      story_music(84, 1, 84, 1, 2, 0)
      call_fightdark(383)
      lock_player(0)
這樣就可以了。使用網上流傳的小陸子戰鬥前存檔測試,在戰勝後可以順利接下面的劇情。


新增的龍吟事件需要三次戰鬥,第一場位於葫蘆谷的戰鬥不會死迴圈。而在巫山和絕命崖的戰鬥都會死迴圈,原因和陸承軒戰鬥的道理是一樣的。

解決後兩次戰鬥死迴圈的方法也是一樣的。龍吟事件的完整程式碼在 10805c.lua 中。第二戰的flag是 2915,第三戰是 2916 。因此,只需把 fon(2915) 和 fon(2916) 分別加入到 plusevent_3_a 與 plusevent_4_a 兩段函式的程式碼當中任意位置。同樣用上述存檔測試,可以順利開展後續劇情。

  

分頁符

研究2:必須重玩才能開啟新的支線

這個問題也很好解決。其實看程式碼就可以知道,所有新增支線在開啟時都有一個判斷條件,就是 isfon(4301) == 1 。而4301這個flag是什麼時候設定的呢?就在第一章開頭,00201c.lua 檔案的第三行,過了這個村就沒這個店。

那麼要解決這個問題,只需要把 4301 這個flag設成1就行了。可愛的存檔點是最合適的位置。只需要修改 10000c.lua 中第935行開始的存檔點執行的動作即可。原先的程式碼如下:

code:
restore_motion = function()
   local mainid = get_mainrole()
   local mainname = get_rolename(mainid)
   restore_team()
   msginfo("全身籠罩一股清飈")
end
把它改為

code:
restore_motion = function()
   local mainid = get_mainrole()
   local mainname = get_rolename(mainid)
   restore_team()
   if isfon(4301) == 0 then
        fon(4301)
   end
   msginfo("全身籠罩一股清飈")
end
這樣在載入1.00的存檔後,只要找個迷宮存檔點摸一下,就具備開啟新支線的條件了。

然而(!),反覆測試後,發現domo小組強制必須重新玩才能開新劇情的決定是有道理的。我用舊存檔去觸發陸承軒的劇情,可以正常進行。但是去成都民宅觸發青冥的支線時,以及觸發龍吟事件時,都會報錯退出。而且在切換地圖時,退出的情況非常頻繁。最好玩的是把成都飛羽基地裡,把前來帶走暖暖的魂魄的“鬼王”修改成陸老頭後,就不會跳出了,可以順利得到青冥的最終武器......但讓陸老頭客串扮鬼的話,效果實在太囧,還是作罷......

暫時只能認為1.00的存檔直接“升級”1.01的存檔,是會有嚴重問題的。最後只能把程式碼改回,本研究失敗。


研究3:兩個無聊的小遊戲

我個人不喜歡縮地之術和成都劫獄這兩個小遊戲,所以順手把它們“精簡”了。

兩個小遊戲的核心程式碼在 10803c.lua 這個檔案裡。先把 kuei_talk 函式改成這樣:

code:
kuei_talk = function(roleid)
   local mainid = get_mainrole()
   local mainname = get_rolename(mainid)
   fon(3551)
   fon(3552)
   fon(3553)
   fon(3554)
   fon(3555)
   fon(3556)
   fon(3557)
   kuei_lose()
end
改完後,在遊戲中,請直接推著諸葛亮往士兵身上撞,撞一次就可以pass了。

成都大牢那裡,是修改 catchman_talk:

code:
catchman_talk = function(roleid)
   local mainid = get_mainrole()
   local mainname = get_rolename(mainid)
        foff(3516)
        fon(3501)
        fon(3502)
        fon(3503)
        fon(3504)
        fon(3505)
        fon(3506)
        fon(3507)
        fon(3508)
        fon(3509)
        fon(3510)
        fon(3511)
        fon(3512)
        fon(3513)
        fon(3514)
  catchman_lose()
end
同樣,往守衛身上撞一次就可以過。

但是牢裡還有一把太子劍,拿不到很可惜。所以找到 catchman_lose 這段程式碼,讓尚章講完話後自動得到太子劍(太子劍的代號是3015):

code:
      chatinfo(mainid, mainname, "守備真是森嚴,花了不少時間才避過耳目。")
      chatinfo(6, "尚章", "我們快去救家姊吧!")
      chatinfo(mainid, mainname, "嗯。")
      getitem(3015, 1)
總結

vbvan大人的指令碼修改工具是個非常有用的東東!再次致意!!

最後提供修改後的指令碼下載。這個rar檔案裡面的 textmain�000.c01 請放到漢之雲目錄下的 textmain 下面覆蓋,當然最好先備份原來的檔案。該檔案只適用於“不完全”打完1.01補丁的xx版。另外 save 資料夾裡有5個存檔,1-4是網上可下載到的新戰鬥前存檔,三戰龍,一戰小陸子。第5個存檔是在建業市集未觸發暴走少年支線前的存檔,載入後和陸老頭對話就可觸發。該存檔是我用1.00存檔“作弊”成1.01存檔後儲存的,可以完整做完暴走少年支線,但是到大地圖後可能會報錯退出(原因見上文)。



最新攻略