IPB

Welcome Guest ( Log In | Register )

 
Reply to this topicStart new topic
> [PSP]CMF代码格式, FC 通用,转自 www.wholehk.com
猫猫草
post 2010-12-22 10:17:56, Wed
Post #1


猫猫猫
***

Group: Power Cat
Posts: 626
Joined: 2006-12-8
Member No.: 2



直接寫入碼

單字節/8 bits
0x0aa aa aa a 0x000000bb
※將aa aa aa a地址上的數値修改成bb並鎖定不變。

雙字節/16 bits
0x1aa aa aa a 0x0000bb bb
※將aa aa aa a地址上的數値修改成bb bb並鎖定不變,地址尾數必須是0、2、4、6、8、A、C或E。

四字節/32 bits
0x2aa aa aa a 0xbb bb bbbb
※將aa aa aa a地址上的數値修改成bb bb bbbb並鎖定不變,地址尾數必須是0、4、8或C。

這些就是最普通的代碼了,CM的碼也可以直接轉成這種碼。
Go to the top of the page
 
+Quote Post
猫猫草
post 2010-12-22 10:23:25, Wed
Post #2


猫猫猫
***

Group: Power Cat
Posts: 626
Joined: 2006-12-8
Member No.: 2



多行寫入碼

單字節/8 bits
0x8aa aa aa a 0xnn nncc cc
0x000000bb 0x000000dd
※從aa aa aa a地址開始連續作nn nn行的修改,每行地址間隔cc cc,第一行修改値爲bb,之後每行修改値遞增dd

雙字節/16 bits
0x8aa aa aa a 0xnn nncc cc
0x1000bb bb 0x0000dd dd
※從aa aa aa a地址開始連續作nn nn行的修改,每行地址間隔cc cc×2,第一行修改値爲bb bb,之後每行修改値遞增dd dd,地址尾數必須是0、2、4、6、8、A、C或E。

四字節/32 bits
0x4aa aa aa a0xnn nncc cc
0xbb bb bbbb 0xdd dd dd dd
※從aa aa aa a地址開始連續作nn nn行的修改,每行地址間隔cc cc×4,第一行修改値爲bb bb bb bb,之後每行修改値遞增dd dd dd dd,地址尾數必須是0、4、8或C。

這些就是俗稱的壓縮碼了,是實用度非常高的碼,可以將連續多行有規律的碼壓縮成短短的兩行。單字節和雙字節的壓縮碼的區別就以第二行的開頭是0還是1來決定。
比如
0x00320267 0x00000002
0x00320269 0x00000003
0x0032026B 0x00000004
0x0032026D 0x00000005
0x0032026F 0x00000006
可以壓縮成
0x80320267 0x00050002
0x00000002 0x00000001

又比如
0x105603BC 0x00000201
0x105603C0 0x00000403
0x105603C4 0x00000605
0x105603C8 0x00000807
0x105603CC 0x00000A09
可以壓縮成
0x805603BC 0x00050002
0x10000201 0x00000202

擧了兩例各位應該看出名堂了吧。通常遊戲中的全道具之類的碼就是壓縮碼發揮的最好地方,衹要道具代碼連續,幾百行的全道具碼也可以縮短爲二到四行。
Go to the top of the page
 
+Quote Post
猫猫草
post 2010-12-22 10:24:09, Wed
Post #3


猫猫猫
***

Group: Power Cat
Posts: 626
Joined: 2006-12-8
Member No.: 2



條件碼

單字節/8 bits
0xDaa aa aa a 0x200000bb
※當aa aa aa a地址上的數値等於bb時執行下一行代碼,否則下一行代碼不執行。

0xDaa aa aa a 0x201000bb
※當aa aa aa a地址上的數値不等於bb時執行下一行代碼,否則下一行代碼不執行。

0xDaa aa aa a 0x202000bb
※當aa a aa aa地址上的數値小於bb時執行下一行代碼,否則下一行代碼不執行。

0xDaa aa aaa 0x203000bb
※當aa aa aa a地址上的數値大於bb時執行下一行代碼,否則下一行代碼不執行。

雙字節/16 bits
0xDaa aa aaa 0x0000bb bb
※當aa aa aaa地址上的數値等於bb bb時執行下一行代碼,否則下一行代碼不執行,地址尾數必須是0、2、4、6、8、A、C或E。

0xDaa a aa aa 0x0010bb bb
※當a aa a a aa地址上的數値不等於bb bb時執行下一行代碼,否則下一行代碼不執行,地址尾數必須是0、2、4、6、8、A、C或E。

0xDaa aa aaa 0x0020bb bb
※當aa aa a aa地址上的數値小於bb bb時執行下一行代碼,否則下一行代碼不執行,地址尾數必須是0、2、4、6、8、A、C或E。

0xDaaa aa aa 0x0030bb bb
※當aa aa aaa地址上的數値大於bb bb時執行下一行代碼,否則下一行代碼不執行,地址尾數必須是0、2、4、6、8、A、C或E。

條件碼也是很常用的且必不可少的碼,它單獨存在沒有任何意義,要配合其它的碼才能發揮作用。條件碼最大的作用就是可以和PSP遊戲的按鍵地址搭配成按鍵 碼,通過按不同的鍵位(包括組合鍵)就可以啓動不同的碼而無需頻繁地呼出CW界麵來切換效果,非常的方便。另外每個PSP遊戲的按鍵地址也是各不相同的, 需要各位去搜索了。
Go to the top of the page
 
+Quote Post
猫猫草
post 2010-12-22 10:27:56, Wed
Post #4


猫猫猫
***

Group: Power Cat
Posts: 626
Joined: 2006-12-8
Member No.: 2



萬能鍵位碼

0xD00000nn 0x1bb bb bbb
※當鍵位値等於bbbbbbb執行該行代碼下的nn+1行代碼,否則跳過nn+1行代碼。

0xD00000nn 0x3bb bb bbb
※當鍵位値等於bb bb bbb跳過該行代碼下的nn+1行代碼,否則執行nn+1行代碼。

每個按鍵對應的鍵位値如下:
Button Code
SELECT 0x00000001
START 0x00000008
DPAD UP 0x00000010
DPAD RIGHT 0x00000020
DPAD DOWN 0x00000040
DPAD LEFT 0x00000080
L TRIGGER 0x00000100
R TRIGGER 0x00000200
TRIANGLE 0x00001000
CIRCLE 0x00002000
CROSS 0x00004000
SQUARE 0x00008000
HOME 0x00010000
HOLD 0x00020000
NOTE 0x00800000
SCREEN 0x00400000
VOLUME UP 0x00100000
VOLUME DOWN 0x00200000
WLAN UP 0x00040000
REMOTE HOLD 0x00080000

如果想配組合鍵的話可以將每個按鍵的値相加,最多可以將3個按鍵組合。而鍵位碼的地址不用自己尋找,CW會自動檢測到的。
雖然自己找鍵位碼的地址也不是甚麼難事,但旣然CW能自動找到地址還是能省掉不少麻煩的。
Go to the top of the page
 
+Quote Post
猫猫草
post 2010-12-22 10:28:57, Wed
Post #5


猫猫猫
***

Group: Power Cat
Posts: 626
Joined: 2006-12-8
Member No.: 2



多行條件碼

單字節/8 bits
0xE1nn00bb 0x0aaa aa aa
※當aaa aa aa地址上的數値等於bb時執行下麵nn行代碼,否則下麵nn行代碼不執行。

0xE1nn00bb 0x1aaa aa aa
※當aaa aaaa地址上的數値不等於bb時執行下麵nn行代碼,否則下麵nn行代碼不執行。

0xE1nn00bb 0x2aaa aaa a
※當aaa aaa a地址上的數値小於bb時執行下麵nn行代碼,否則下麵nn行代碼不執行。

0xE1nn00bb 0x3aaa aaa a
※當aaa aaa a地址上的數値大於bb時執行下麵nn行代碼,否則下麵nn行代碼不執行。

0xDaaa aa aa 0x4bbb bbb b
0xnnnnnnnn 0x00000000
0xYYYYYYYY 0xZZZZZZZZ (起始行)
※當aaa aaa a地址上的數値等於bbb bbb bb地址上的數値時執行從起始行開始的nnnnnnnn行代碼,否則下麵nnnnnnnn行代碼不執行。

0xDaaa aaa a 0x5bbb bbb b
0xnnnnnnnn 0x00000000
0xYYYYYYYY 0xZZZZZZZZ (起始行)
※當aaa aaa a地址上的數値不等於bbb bbb bb地址上的數値時執行從起始行開始的nnnnnnnn行代碼,否則下麵nnnnnnnn行代碼不執行。

0xDaaa aaa a 0x6bbb bbb b
0xnnnnnnnn 0x00000000
0xYYYYYYYY 0xZZZZZZZZ (起始行)
※當aaa aaa a地址上的數値小於bbb bbb bb地址上的數値時執行從起始行開始的nnnnnnnn行代碼,否則下麵nnnnnnnn行代碼不執行。

0xDaaa aaa a 0x7bbb bbb b
0xnnnnnnnn 0x00000000
0xYYYYYYYY 0xZZZZZZZZ (起始行)
※當aaa aaa a地址上的數値大於bbb bbb bb地址上的數値時執行從起始行開始的nnnnnnnn行代碼,否則下麵nnnnnnnn行代碼不執行。

雙字節/16 bits
0xE0nnbbb b 0x0aaa aaa a
※當aaa aaa a地址上的數値等於bbbb時執行下麵nn行代碼,否則下麵nn行代碼不執行,地址尾數必須是0、2、4、6、8、A、C或E。

0xE0nnbbbb 0x1aaa aaa a
※當aaa aaa a地址上的數値不等於bbbb時執行下麵nn行代碼,否則下麵nn行代碼不執行,地址尾數必須是0、2、4、6、8、A、C或E。

0xE0nnbbbb 0x2aaa aaa a
※當aaa aaa a地址上的數値小於bbbb時執行下麵nn行代碼,否則下麵nn行代碼不執行,地址尾數必須是0、2、4、6、8、A、C或E。

0xE0nnbbbb 0x3aaa aaa a
※當aaa aaa a地址上的數値大於bbbb時執行下麵nn行代碼,否則下麵nn行代碼不執行,地址尾數必須是0、2、4、6、8、A、C或E。

0xDaaa aaa a 0x4bbbbbbb
0xnnnnnnnn 0x00000001
0xYYYYYYYY 0xZZZZZZZZ (起始行)
※當aaa aaa a地址上的數値等於bbbbbbbb地址上的數値時執行從起始行開始的nnnnnnnn行代碼,否則下麵nnnnnnnn行代碼不執行,地址尾數必須是0、2、4、6、8、A、C或E。

0xDaaa aaa a 0x5bbbbbbb
0xnnnnnnnn 0x00000001
0xYYYYYYYY 0xZZZZZZZZ (起始行)
※當aaa aaa a地址上的數値不等於bbbbbbbb地址上的數値時執行從起始行開始的nnnnnnnn行代碼,否則下麵nnnnnnnn行代碼不執行,地址尾數必須是0、2、4、6、8、A、C或E。

0xDaaa aaa a 0x6bbbbbbb
0xnnnnnnnn 0x00000001
0xYYYYYYYY 0xZZZZZZZZ (起始行)
※當aaa aaa a地址上的數値小於bbbbbbbb地址上的數値時執行從起始行開始的nnnnnnnn行代碼,否則下麵nnnnnnnn行代碼不執行,地址尾數必須是0、2、4、6、8、A、C或E。

0xDaaa aaa a 0x7bbbbbbb
0xnnnnnnnn 0x00000001
0xYYYYYYYY 0xZZZZZZZZ (起始行)
※當aaa aaa a地址上的數値大於bbbbbbbb地址上的數値時執行從起始行開始的nnnnnnnn行代碼,否則下麵nnnnnnnn行代碼不執行,地址尾數必須是0、2、4、6、8、A、C或E。

四字節/32 bits
0xDaaa aaa a 0x4bbbbbbb
0xnnnnnnnn 0x00000002
0xYYYYYYYY 0xZZZZZZZZ (起始行)
※當aaa aaa a地址上的數値等於bbbbbbbb地址上的數値時執行從起始行開始的nnnnnnnn行代碼,否則下麵nnnnnnnn行代碼不執行,地址尾數必須是0、4、8或C。

0xDaaa aaa a 0x5bbbbbbb
0xnnnnnnnn 0x00000002
0xYYYYYYYY 0xZZZZZZZZ (起始行)
※當aaa aaa a地址上的數値不等於bbbbbbbb地址上的數値時執行從起始行開始的nnnnnnnn行代碼,否則下麵nnnnnnnn行代碼不執行,地址尾數必須是0、4、8或C。

0xDaaa aaa a 0x6bbbbbbb
0xnnnnnnnn 0x00000002
0xYYYYYYYY 0xZZZZZZZZ (起始行)
※當aaa aaa a地址上的數値小於bbbbbbbb地址上的數値時執行從起始行開始的nnnnnnnn行代碼,否則下麵nnnnnnnn行代碼不執行,地址尾數必須是0、4、8或C。

0xDaaa aaa a 0x7bbbbbbb
0xnnnnnnnn 0x00000002
0xYYYYYYYY 0xZZZZZZZZ (起始行)
※當aaa aaa a地址上的數値大於bbbbbbbb地址上的數値時執行從起始行開始的nnnnnnnn行代碼,否則下麵nnnnnnnn行代碼不執行,地址尾數必須是0、4、8或C。

之前介紹的條件碼衹能控製下麵一行代碼,而當多行代碼都需要同一個條件控製時,或者要控製壓縮碼這樣的不能分離的兩行碼時,又或者有兩個以上的條件碼要嵌 套使用時,就要選擇條件壓縮碼了。衹是可惜條件壓縮碼無法作單字節的比較,但兩組雙字節的條件壓縮碼嵌套使用時卻可以作四字節的比較。
比如
0xE0020A0D 0x00320ACE
0x40320B00 0x00B00001
0x00630001 0x00000001
這個就是和壓縮碼搭配的組合。

又比如
0xE002FB7F 0x002FDA9C
0xD079597E 0x0000453B
0x20795978 0x453B7FFF
這個就是兩個條件碼嵌套的組合。
Go to the top of the page
 
+Quote Post
猫猫草
post 2010-12-22 10:29:46, Wed
Post #6


猫猫猫
***

Group: Power Cat
Posts: 626
Joined: 2006-12-8
Member No.: 2



加減碼

單字節/8 bits
0x301000nn 0x0aaaa a aa
※將aaaa a aa地址上的數値每經過一幀就增加nn

0x302000nn 0x0aaaa a aa
※將aaaa a aa地址上的數値每經過一幀就減去nn

雙字節/16 bits
0x3030nnnn 0x0aaaa a aa
※將aaaa a aa地址上的數値每經過一幀就增加nnnn,地址尾數必須是0、2、4、6、8、A、C或E。

0x3040nnnn 0x0aaaa a aa
※將aaaa a aa地址上的數値每經過一幀就減去nnnn,地址尾數必須是0、2、4、6、8、A、C或E。

四字節/32 bits
0x305 00000 0x0aaaa a aa
0xnnnnnnnn 0x0000 0000
※將aaaa a aa地址上的數値每經過一幀就增加nnnnnnnn,地址尾數必須是0、4、8或C。

0x306 00000 0x0aaaa a aa
0xnnnnnnnn 0x0000 0000
※將aaa aa aa地址上的數値每經過一幀就減去nnnnnnnn,地址尾數必須是0、4、8或C。

這些碼可以把地址上的原數値作加減法運算,但是是以幀(通常遊戲1秒鐘有30~60幀)爲速度單位作運算的,所以加減的速度非常快,通常要配合條件碼使用。
Go to the top of the page
 
+Quote Post
猫猫草
post 2010-12-22 10:30:30, Wed
Post #7


猫猫猫
***

Group: Power Cat
Posts: 626
Joined: 2006-12-8
Member No.: 2



邏輯運算碼

單字節/8 bits
0x7aaaa aaa 0x000000bb
※將aaaa aaa地址上的數値作或運算,由bb決定哪些比特作比較。

0x7aaaa aaa 0x000200bb
※將aaaa aaa地址上的數値作與運算,由bb決定哪些比特作比較。

0x7aaaa aaa 0x000400bb
※將aaaa aaa地址上的數値作非運算,由bb決定哪些比特作比較。

雙字節/16 bits
0x7aaaa aaa 0x0001bbbb
※將aaaa aaa地址上的數値作或運算,由bbbb決定哪些比特作比較,地址尾數必須是0、2、4、6、8、A、C或E。

0x7aaaa aaa 0x0003bbbb
※將aaaa aaa地址上的數値作與運算,由bbbb決定哪些比特作比較,地址尾數必須是0、2、4、6、8、A、C或E。

0x7aaaa aaa 0x0005bbbb
※將aaaa aaa地址上的數値作非運算,由bbbb決定哪些比特作比較,地址尾數必須是0、2、4、6、8、A、C或E。

這些碼要著重講解一下,所謂邏輯運算就是將某字節上的若幹比特(bit)作或、與、非之類的運算。 比特是計算機中最小的單位,(1個字節可以拆分爲8個比特,方法是用函數型計算器輸入十六進製的數値然後轉成二進製)不是0就是1,所以邏輯運算碼是修改 精度最高的命令碼。(使用它可以修改某字節中某個或是數個比特而不影響其它的比特,而單字節持續寫入碼則是8個比特一起受到影響被修改)或運算用來將比特置1,與運算用來將比特清0,非運算則是取反(卽原來是0的就置1,原來是1的就清0)。
比如
0x70032095 0x00000023
最後麵的23轉成二進製就是00100011b(最後的小寫b是二進製的符號,實際運算時不用去看它)。由於是作或運算,所以就看其中1的部分,0的部分不看。從右向左數第1、2、6位是1,所以0032095地址上的原數値的這幾個位置的比特就被置1,其餘不變。

又比如
0x70032095 0x00020023
這次是作與運算,所以就看其中0的部分,1的部分不看。從右向左數第3、4、5、7、8位是0,所以0032095地址上的原數値的這幾個位置的比特就被清0,其餘不變。

再比如
0x70032095 0x00040023
這次改作非運算,所以就看其中1的部分,0的部分不看。從右向左數第1、2、6位是1,所以0032095地址上的原數値的這幾個位置的比特就取反,其餘不變。
Go to the top of the page
 
+Quote Post
猫猫草
post 2010-12-22 10:31:09, Wed
Post #8


猫猫猫
***

Group: Power Cat
Posts: 626
Joined: 2006-12-8
Member No.: 2



複製碼

0x5aaaa aaa 0xnnnnnnnn
0xbbbb bbbb 0x00000000
※從aaaa aaa地址開始連續將nnnnnnnn個字節的數値複製到bbbb bbbb地址開始的地址段中。

這個碼通常可以在RPG中用來把HP、MP之類的最大値複製成現在値,這樣就可以達到HP、MP自動補滿而不超出最大値的效果了。
Go to the top of the page
 
+Quote Post
猫猫草
post 2010-12-22 10:31:57, Wed
Post #9


猫猫猫
***

Group: Power Cat
Posts: 626
Joined: 2006-12-8
Member No.: 2



指針複製碼

0x6aaaa aaa 0xbbbb bbbb

0xqqq00002 0xccc ccc cc

0x1ssss sss 0x00000000

nnnn必須等於0002,作用是從地址A複製bbbb bbbb個字節到地址B。

地址A=aaaa aaa上的値減08800000加ccc cc ccc

地址B=(aaaa aaa+qqq×4)上的値減08800000加ssss sss



這個指針碼是專門用來解決那些動態地址的遊戲的。某些遊戲如《天地之門》、《天誅 忍大全》、《寂靜嶺
起源》中的HP地址是會隨場景或關卡的變化而變化的,但並不是完全無規律的變化,而是根據某個地址上的四字節的數値作爲基地址再進行一個固定的偏移後形成
的實際地址。衹要能找到基地址和偏移量就能用指針碼牢牢鎖定住實際地址了,不管那個地址偏移到哪都一樣。不過找基地址的難度非常大,國內會做指針碼的人
(比如我)眞的不多。

指針壓縮碼和指針複製碼是我和CW作者一起協商後設計出來的,用來實現《星之海洋FD》這樣的遊戲中的全道具和HP不減之類的修改的。
Go to the top of the page
 
+Quote Post
猫猫草
post 2010-12-22 10:32:49, Wed
Post #10


猫猫猫
***

Group: Power Cat
Posts: 626
Joined: 2006-12-8
Member No.: 2



指針碼

單字節/8 bits

0x6aaa aaaa 0x0000 00bb

0xqqq0nnnn 0xccc ccc cc

0x9sss ssss 0x0000 00dd

※從aaa aaaa地址開始讀取四字節的數値後減去0880000 0 再加上ccc ccc cc,把此數値當作實際地址,把此實際地址上的數値修改成bbaaaa aaa的尾數必須是0、4、8或C。

如果想用指針壓縮碼的話需要9 開頭的那行附加行,共壓縮nnnn組有規律的普通的指針碼,每次aaaa aaa遞增qqq×4,ccc ccc cc遞增sss ssssbb遞增dd



0x6aaaa aaa 0x0000 00bb

0xqqq3nnnn 0xccc ccc cc

0x9sss ssss 0x0000 00dd

※從aaa aaaa地址開始讀取四字節的數値後減去0880 0000再減去ccc ccc cc,把此數値當作實際地址,把此實際地址上的數値修改成bbaaaa aaa的尾數必須是0、4、8或C。

如果想用指針壓縮碼的話需要9 開頭的那行附加行,共壓縮nnnn組有規律的普通的指針碼,每次aaaa aaa遞增qqq×4,ccc ccc cc遞增sss ssssbb遞增dd



雙字節/16 bits

0x6aaaa aaa 0x0000bbbb

0xqqq1nnnn 0xccc ccc cc

0x9ssss sss 0x0000dddd

※從aaaa aaa地址開始讀取四字節的數値後減去0880000 0再加上ccc ccc cc,把此數値當作實際地址,把此實際地址上的數値修改成bbbbaaa aaaa的尾數必須是0、4、8或C。

如果想用指針壓縮碼的話需要9 開頭的那行附加行,共壓縮nnnn組有規律的普通的指針碼,每次aaa aaaa遞增qqq×4,ccc c c ccc遞增ssss sss×2,bbbb遞增dddd



0x6aaa aaaa 0x0000bbbb

0xqqq4nnnn 0xccc ccc cc

0x9ssss sss 0x0000dddd

※從aaaa aaa地址開始讀取四字節的數値後減去0880 0000再減去ccc ccc cc,把此數値當作實際地址,把此實際地址上的數値修改成bbbbaaa aaaa的尾數必須是0、4、8或C。

如果想用指針壓縮碼的話需要9 開頭的那行附加行,共壓縮nnnn組有規律的普通的指針碼,每次aaaa aaa遞增qqq×4,ccc ccc cc遞增ssss sss×2,bbbb遞增dddd



四字節/32 bits

0x6aaaa aaa 0xbbbb bbbb

0xqqq2nnnn 0xccc ccc cc

0x9ssss sss 0xdddd dddd

※從aaa aaaa地址開始讀取四字節的數値後減去088 0000 0再加上ccc ccc cc,把此數値當作實際地址,把此實際地址上的數値修改成bbbb bbbbaaaa aaa的尾數必須是0、4、8或C。

如果想用指針壓縮碼的話需要9 開頭的那行附加行,共壓縮nnnn組有規律的普通的指針碼,每次aaa aaaa遞增qqq×4,ccc ccc cc遞增ssss sss×4,bbbb bbbb遞增dddd dddd



0x6aaa aaaa 0xbbbb bbbb

0xqqq5nnnn 0xccc ccc cc

0x9ssss sss 0xdddd dddd

※從aaaa aaa地址開始讀取四字節的數値後減去088 00000再減去ccc ccc cc,把此數値當作實際地址,把此實際地址上的數値修改成bbbb bbbbaaaa aaa的尾數必須是0、4、8或C。

如果想用指針壓縮碼的話需要9 開頭的那行附加行,共壓縮nnnn組有規律的普通的指針碼,每次aaaa aaa遞增qqq×4,ccc ccc cc遞增ssss sss×4,bbbb bbbb遞增dddd dddd



舉例

0x60020000 0x0000 0063

0x00100002 0x0000 0002

0x90000 000 0x0000 0000

等於

0x60020000 0x0000 0063

0x0000 0001 0x0000 0 002

0x60020004 0x0000 0063

0x0000 0001 0x0000 0002



再舉一例

0x60020000 0x0000 0063

0x00230003 0x0000 0002

0x90000 001 0x0000 0002

等於

0x60020000 0x0000 0063

0x00030001 0x0000 0002

0x60020008 0x0000 0065

0x00030001 0x0000 0003

0x60020010 0x0000 0067

0x00030001 0x0000 0004
Go to the top of the page
 
+Quote Post
猫猫草
post 2010-12-22 10:33:40, Wed
Post #11


猫猫猫
***

Group: Power Cat
Posts: 626
Joined: 2006-12-8
Member No.: 2



多級指針碼

單字節/8 bits
0x6aaa aaaa 0x000000bb
0x0000nnnn 0xccc cc ccc
0x2ssss sss 0x3tttt ttt
……

0x6aaa aaaa 0x000000bb
0x0003nnnn 0xccc ccc cc
0x2sss ssss 0x3ttt tttt
……

雙字節/16 bits
0x6aaa aaaa 0x0000bbbb
0x0001nnnn 0xccc ccc cc
0x2ssss sss 0x3tttt ttt
……

0x6aaa aaaa 0x0000bbbb
0x0004nnnn 0xccc ccc cc
0x2ssss sss 0x3ttt tttt
……

四字節/32 bits
0x6aaa aaaa 0xbbbb bbbb
0x0002nnnn 0xccc ccc cc
0x2ssss sss 0x3ttt tttt
……

0x6aaaa aaa 0xbbbb bbbb
0x0005nnnn 0xccc ccc cc
0x2ssss sss 0x3ttt tttt
……
※多級指針碼的格式類似普通的指針碼,區別在於附加行的開頭數字是2或3,而且附加行可以有多行,這個要視nnnn部分而定。nnnn表示有多少級指針,比如3級指針就是0003;ssss ssstttt ttt分別是第1和第2級偏移値,第3、第4級偏移値就依次在後麵的省略號部分追加;附加行開頭的2表示正向偏移値,開頭的3表示逆向偏移値;ccc ccc cc則是末級偏移値,也就是最後要寫入數據bb部分時用的偏移値,正向還是逆向由前麵的粗體字部分確定。

舉例
vosman找到的《戰神》中的體力地址公式
[[[0x346B00]+0xA8]+0x68]+0x64
轉換後就是
0x60346B00 0x43480000
0x00020003 0x00000064
0x200000A8 0x20000068

dc4找到的《戰神》中的無限二段跳地址(僅GOD難度有效)
[[0x0033614C] - 0x60] + 0x2C8
轉換後就是
0x6033614C 0x00000001
0x00020002 0x000002C8
0x30000060 0x00000000
Go to the top of the page
 
+Quote Post
猫猫草
post 2010-12-22 10:34:39, Wed
Post #12


猫猫猫
***

Group: Power Cat
Posts: 626
Joined: 2006-12-8
Member No.: 2



附1:部分PS碼的格式轉換

PS的金手指分AR/GS和CB Caetla格式部分命令相同。但CB Caetla格式支持一些長度是16位的碼,而CW Cheat for
POPS則用的是AR/GS格式的碼,長度全部是12位,所以下麵將講解一下如何將CB
Caetla格式的碼轉成AR/GS格式。

CB Caetla格式

9 aaaa aaa ccc cbbbb

轉成AR/GS格式後

8aaaa aaa bbbb

8aaaa aaa+2 c ccc

※其實就是一個四字節的碼轉成兩個雙字節的碼。

比如

90028508 0098967F

轉換後

80028508 967F

8002850A 0098



CB Caetla格式

Bnnnccc c 000000dd

3aaaa aaa 00bb

轉成AR/GS格式後

5000nncc 00dd

3aaaa aaa 00bb

CB Caetla格式

Bnnnc ccc 0000dddd

8aaaa aaa bbbb

轉成AR/GS格式後

5000nncc dddd

8aaaa aaa bbbb

※其實就是壓縮碼的轉換。

比如

B0800002 00000202

8005DEFA 0100

轉換後

50008002 0202

8005DEFA 0100



CB Caetla格式

Eaaaa aaa bbbbnnnn

轉成AR/GS格式後就是nnnn行的

Daaa aaaa bbbb

※其實就是將條件壓縮碼展開,衹是展開後就無法嵌套其它壓縮碼了,但要嵌套的場合實在不多。

比如

E052DA50 24020003

8052DA52 0000

8052DA54 2463

8052DA56 0001

轉換後

D052DA50 2402

8052DA52 0000

D052DA50 2402

8052DA54 2463

D052DA50 2402

8052DA56 0001
Go to the top of the page
 
+Quote Post
猫猫草
post 2010-12-22 10:35:37, Wed
Post #13


猫猫猫
***

Group: Power Cat
Posts: 626
Joined: 2006-12-8
Member No.: 2



附2:PS碼轉換成CM Fusion用的方法

這部分教程CW用戶大可不必去看,因爲cwcheatpops.prx可以直接用AR/GS格式的PS碼。但國內用戶仍有許多喜歡使用CM Fusion的,因此有必要爲這些用戶簡單講解一下幾個常用的轉換方法。

30aaaa aa 00bb

轉換後

0x01aaaa aa 0x000 000bb



80aaaa aa bbbb

轉換後

0x11aaaa aa 0x0000bbbb



90aaaa aa bbbb bbbb

轉換後

0x21aaaa aa 0xbbbb bbbb



Bnnnc ccc 0000 00dd

30aaaa aa 00bb

轉換後

0x81aaaa aa 0x0nnnc ccc

0x000 000bb 0x000 000dd



Bnnnc ccc 0000dddd

80aaaa aa bbbb

轉換後

0x81aaaa aa 0x0nnneeee

0x1000bbbb 0x0000dddd

eeee=c ccc÷2



Bnnnc ccc dddd dddd

90aaaa aa bbbb bbbb

轉換後

0x41aaaa aa 0x0nnneeee

0xbbbb bbbb 0xdddd dddd

eeee=cc cc÷4



5000nncc 00dd

30aaaa aa 00bb

轉換後

0x81aaa aaa 0x00nn00cc

0x0000 00bb 0x0000 00dd



5000nncc dddd

80aaaa aa bbbb

轉換後

0x81aaaa aa 0x00nn00ee

0x1000bbbb 0x0000dddd

ee=cc÷2



D0aaaa aa 0000bbbb

轉換後

0xD1aaaa aa 0x0000bbbb



E0aaaa aa bbbbnnnn

轉換後

0xE0nnbbbb 0x01aaaa aa
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 



Lo-Fi Version Time is now: 2024-10-17 05:32