(本文章原始記錄於 2008 年 9 月 3 日並於當日 Post 於巴哈姆特)

[實際寫入]

  1. 一般碼寫入(假設搜得位址為 804F2AE4,要鎖定為 999)

    1. 第一行輸入 4A000000 80000000,表示要使用指標加上偏移量。
    2. 第二行輸入 124F2AE4 000003E7,指定第一行指標加上偏移量的位址起設定 16-bits 資料。
      (此例 804F2AE4 值為 03,804F2AE5 值為 E7 → Big Endian 排列方式之故)
    3. 指標設定碼(4A000000 80000000)一定要寫在位址寫入碼(124F2AE4 000003E7)的前面,如果不是在前面,可以利用右邊的 Move UpMove Down 按鈕來調整先後順序。
    4. 如果還有其他位址寫入碼要使用到相同的指標(4A000000 80000000),可以不用重建一行,直接將位址寫入碼加在下面即可,看起來可能會像是:

      4A000000 80000000 → 指定指標為 80000000。
      124F2AE4 000003E7 → 指定 80000000 + 4F2AE4 的位址開始,值連續為 03 E7。
      104F2AE8 00000063 → 指定 80000000 + 4F2AE8 的位址,值為 63。

    5. 於左邊所有金手指一覽中,在要開啟金手指的名稱上點滑鼠右鍵→Enable Code,就會將右邊的碼全部設定為開啟狀態(碼左方會出現「*」號),Disable Code 則是全部關閉。如果想單獨開啟或關閉某行碼,可以點一行金手指碼最左邊的框格,有「*」號則為開啟則為關閉
    6. 個別設定完開啟或關閉金手指碼之後,一定要按下名稱一覽下方 Apply Codes 鈕才會執行。只是讓「*」號出現或消失並不會真正將碼注入 Wii 中。

    一般碼寫入可參考 dexter0 第一篇固定位址金手指碼寫入範例
    http://members.cox.net/dexter0/WiiHacking/example1.shtml

  2. 指標碼寫入(假設搜得指標所指為 [806B7B40]+2AE,要鎖定為 999)

    1. 第一行輸入 48000000 806B7B40,表示要讀入 806B7B40 位址的值(假設取得值為 804F2AE4)。
    2. 第二行輸入 120002AE 000003E7,表示要在 804F2AE4 + 2AE 的位址開始,寫入值 03 E7。指標讀入碼(48000000 806B7B40)一定要寫在位址寫入碼(120002AE 000003E7)的前面,如果不是在前面,可以利用右邊的 Move UpMove Down 按鈕來調整先後順序。
    3. 基本上只要上述兩行就可以執行了,但由於用指標指定的位址資料通常在過關後會先清除,如果一直鎖定「指標所指位址+偏移量」的位址,當指標所記錄位址清除後變成 00000000 時,就會鎖定到不該鎖定的位置而當機,所以要檢查指標所指位址是否在某個範圍內。在前述兩行中間插入一行 DE000000 80008180 檢查碼,
      (檢查指標所指位址是否介於 80000000~81800000 間)
      如果 806B7B40 位址的值為 00000000 (範圍外),下一行 120002AE 000003E7 就不會執行。
    4. 為求安全,在設定完有指標的金手指碼之後,最後一行加上 E0000000 80008000 終結碼,將一般位址及指標位址都設定還原歸位,以防其他碼誤用指標。
    5. 總結上面幾行金手指碼,依序看起來可會能像是:
      48000000 806B7B40 → 讀入 806B7B40 內的位址資料。
      DE000000 80008180 → 檢查 806B7B40 的值是否在範圍內,是才繼續往下執行,否則中斷。
      120002AE 000003E7 → 將 806B7B40 內的值加上 2AE 的位址處開始,連續設定為 03 E7。
      E0000000 80008000 → 將一般位址及指標位址歸位,以防其他碼誤用。
    6. 接下來同「一般碼寫入」之步驟 56 注入執行寫好的金手指碼。
  3. 判斷碼寫入(假設 805053AA 為判別控制器按鍵的一個位址)(鎖定按住某鈕會飛,放開則落下)

    1. 先依一般碼寫入或指標碼寫入的方式,搜尋並寫入鎖定位址的金手指碼區塊。
    2. 搜尋按 A 鈕、B 鈕、C 鈕‧‧等等後哪個位址會做記錄,可能有多個位址會同時變動資料。通常假設按了 A 鈕的值為 1、按 B 鈕值為 2、按 C 鈕值為 3 ‧‧‧的話,同時按 A + B 鈕則值就會變成 1 + 2 = 3,同時按 B + C 鈕則值就會變成 2 + 3 = 5。
    3. 由於此位址記錄的資料是關連到整個遊戲,所以通常不會因為關卡變動而位址也跟著變動,所以可以使用 20 碼直接判斷固定位址。輸入 205053AA 00000100 表示判斷是否按下 A 鈕。如果做判斷是否同時按下 A 和 B 鈕,則輸入 205053AA 00000300。
      (後方也可能為 00000001 或 00000003 等等,只要 Code Type 配合正確應無大礙)
    4. 輸入完成之後,將這一行碼用 Move UpMove Down 鈕移到要執行的金手指碼區塊上方。如此一來,當按下了 A 鈕時,後方的金手指碼區塊才會執行,否則不執行。例如只按住 A 鈕(同時按了其他鈕則不行)時,主角會一直往上飄,放開鈕就會掉下來,類似如此功能的金手指碼就要用判斷式的 Code Type,而不是一直鎖定住。
    5. 如果要判斷的位址不是固定而是浮動式,例如是讀取指標 80DA23E4 裡的位址的話,可以在判斷碼前面加入指標讀取碼(48)。假設當主角血扣至 1000 以下時,會自動補血到 9999,可以先用 48000000 80DA23E4 讀入指標,再加入一行 3E000380 000003E8 判斷血量,最後再設定自動補血 12000380 0000270F。
    6. 步驟 5 整段金手指碼如果加上檢查碼可以整理如下:
      48000000 80DA23E4 → 讀入 80DA23E4 內的位址資料。
      DE000000 80008180 → 檢查目前 80DA23E4 值是否在範圍內,是才繼續執行,否則中斷。
      3E000380 000003E8 → 判斷 80DA23E4 內的值加上 380 的位址資料是否小於 1000。
      12000380 0000270F → 當前一行碼判斷式成立(該位址的值小於 1000) 時(TRUE),才將該位址的值設定成 9999。
      E0000000 80008000 → 將一般位址及指標位址歸位,以防其他碼誤用。

指標碼寫入可參考 dexter0 第二篇指標位址鎖定範例
http://members.cox.net/dexter0/WiiHacking/example2.shtml
其他指標相關搜尋、Assembly Code Injection 等可參考金手指搜尋工具 Cheat Engine
http://www.cheatengine.org/