<?xml version="1.0" encoding="Shift_JIS"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>CODE SQUARE　-ゲーム改造コード-</title>
    <link rel="alternate" type="text/html" href="http://game-kaizoucode.g-poket.com/" />
    <link rel="self" type="application/atom+xml" href="http://game-kaizoucode.g-poket.com/atom.xml" />
   <id>tag:game-kaizoucode.g-poket.com,2006://9</id>
    <link rel="service.post" type="application/atom+xml" href="http://www.g-poket.com/mt/mt-atom.cgi/weblog/blog_id=9" title="CODE SQUARE　-ゲーム改造コード-" />
    <updated>2006-02-22T07:31:08Z</updated>
    <subtitle>たぶん更新しないゲーム改造コードのページ  - 改造コードの置き場 -</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type  3.21-ja</generator>
 
<entry>
    <title>デバッグモードサーチ法 メニュー型編</title>
    <link rel="alternate" type="text/html" href="http://game-kaizoucode.g-poket.com/2006/02/post_83.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.g-poket.com/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1045" title="デバッグモードサーチ法 メニュー型編" />
    <id>tag:game-kaizoucode.g-poket.com,2006://9.1045</id>
    
    <published>2006-02-22T04:42:30Z</published>
    <updated>2006-02-22T07:31:08Z</updated>
    
    <summary>　メニュー型とは、呼び名の通りゲームのメニュー項目にデバッグモードが隠されている...</summary>
    <author>
        <name>Gamo</name>
        
    </author>
            <category term="0800)Tips Documents" />
    
    <content type="html" xml:lang="ja" xml:base="http://game-kaizoucode.g-poket.com/">
        　メニュー型とは、呼び名の通りゲームのメニュー項目にデバッグモードが隠されているタイプです。たとえば、スタートメニューやステータスメュー、バトルメニューなどのメニュー項目にデバッグモードが隠されています。メニューには、どの項目が選択されているかを特定の番号で判定しています。たとえば、スタートメニューに 

　　　　はじめから 
　　　　つづきから 
　　　　設定 

と3つのメニューが表示されている場合、各項目には、上から順に「0」「1」「2」というようにメニュー番号が割り当てられています。メニュー型の場合、このメニュー番号に特定の数値をセットすることで、デバッグモードに入ることができます。 

　具体的には、メニューの選択項目を変えながら増減サーチを繰り返します。そして、メニュー番号のアドレスがサーチできたら、そこに「3」「4」など表示されているメニュー項目に割り振られている番号より大きな番号をセットして、デバッグモードに入るかを確認します。 

        
    </content>
</entry>
<entry>
    <title>デバッグモードサーチ法 マップ型編</title>
    <link rel="alternate" type="text/html" href="http://game-kaizoucode.g-poket.com/2006/02/post_82.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.g-poket.com/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1044" title="デバッグモードサーチ法 マップ型編" />
    <id>tag:game-kaizoucode.g-poket.com,2006://9.1044</id>
    
    <published>2006-02-22T04:41:45Z</published>
    <updated>2006-02-22T04:42:08Z</updated>
    
    <summary>　マップ型とは、画面を切り替えることで、デバッグモードに入ることができるタイプの...</summary>
    <author>
        <name>Gamo</name>
        
    </author>
            <category term="0800)Tips Documents" />
    
    <content type="html" xml:lang="ja" xml:base="http://game-kaizoucode.g-poket.com/">
        　マップ型とは、画面を切り替えることで、デバッグモードに入ることができるタイプのことです。一般的に「デバッグルーム」と呼ばれています。 
　ＲＰＧ系の場合、画面ごとにマップ番号(ルーム番号)が割り当てられています。たとえば、アイテム屋は「10H」、武器屋は「11H」という具合にマップ番号が割り振られています。このマップ番号をサーチすれば、デバッグルームを発見できます。 
　具体的には、画面を切替えながら(アイテム屋、武器屋などに出入りする)増減サーチなどを繰り返し行います。このとき、特定の場所を基準にするのがポイントです。そして、マップ番号のアドレスがサーチできたら、任意のデータをセットしながら、画面を切り替えデバッグルームに入れるかを見ていきます。たとえば、FF8はマップ番号「49H」、テイルズ オブ ファンタジアはマップ番号「5H」がデバッグルームになります。

        
    </content>
</entry>
<entry>
    <title>デバッグモードサーチ法 フラグ型編</title>
    <link rel="alternate" type="text/html" href="http://game-kaizoucode.g-poket.com/2006/02/post_81.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.g-poket.com/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1043" title="デバッグモードサーチ法 フラグ型編" />
    <id>tag:game-kaizoucode.g-poket.com,2006://9.1043</id>
    
    <published>2006-02-22T04:40:47Z</published>
    <updated>2006-02-22T04:41:21Z</updated>
    
    <summary>　フラグ型とは、特定のアドレスに「0」「1」とフラグを立てることで、デバッグモー...</summary>
    <author>
        <name>Gamo</name>
        
    </author>
            <category term="0800)Tips Documents" />
    
    <content type="html" xml:lang="ja" xml:base="http://game-kaizoucode.g-poket.com/">
        　フラグ型とは、特定のアドレスに「0」「1」とフラグを立てることで、デバッグモードに入るタイプです。
　フラグ型の場合、まずデバッグモードがあるか確認します。まず、文字列検索で、「デバッグ」「テスト」「セレクト」「Debug」「DEBUG」「debug」「TEST」「SELECT」といったありがちな文字列を検索します。また、メモリダンプを眺めて、通常PLAYでは表示されない文字列などを見つけます。ただし、特殊な文字コードを使用しているゲームの場合には、簡単には見つけることはできません。

　そして、文字列が見つかったら、文字列のポインタ(先頭文字のアドレス)を参照している場所をサーチします。後はプログラムを追いかけて、どのアドレスにフラグを立てるか解析していきます。


        ◆基礎知識

◇アドレスをレジスタにロードする

　Ｒ3000では、アドレスをレジスタにロードする場合、luiとaddiu(またはori)の2つ命令を使って上位、下位に分けて行います。たとえば、a0レジスタにアドレス8001DF0Hをロードする場合、次のようになります。

★addiuの場合

　lui   a0,     #$8001 #上位ハーフワードに$8001をロード
　addiu a0,a0,  #$1Df0 #下位ハーフワードに$1df0をロード

★oriの場合

　lui a0,#8001
　ori a0,a0,#$1df0

◇文字列を表示するルーチン

　プレステのゲームで文字列を表示する場合、次のような処理をしています。

　lui 　a0,#$8001
　addiu a0,a0,#$1Df0  #文字列(または配列)のポインタをレジスタにロード
　jal 　$8007ｃ200    #表示ルーチンをコール
　つまり、デバッグ用の文字列のポインタを参照(レジスタにロード)している所をサーチすれば、デバッグ用文字列の表示ルーチン、デバッグモードのルーチンを発見できる訳です。

◆サーチ手順

@メモリダンプでデバッグ用の文字列を見つけます。

A文字列のポインタ(先頭文字のアドレス)を参照しているルーチンをサーチします。

　80011de0 81 46 82 72 82 73 82 60 82 71 82 73 83 7b 83 5e ：ＳＴＡＲＴボタ
　80011df0 83 93 00 00 44 45 42 55 47 00 00 00 00 00 00 00 ン･･DEBUG･・・
　たとえば、上の場合、「DEBUG」という文字列の先頭文字「D」のアドレスは、「80011DF4」になります。

　さきほど基礎知識の説明したように、レジスタへのアドレスのロードは、上位、下位ハーフワードに分けて行われます。このため、ポインタの下位アドレス(2バイト)から、ポインタを参照しているところをサーチします。

　上の場合、ポインタの下位は「1DF4」になるので、この値をサーチします。

　具体的には、ExSTANDの場合、数値サーチで「M1DF4H」と入力してサーチを実行します。PsParの場合、データ長を2バイトにして、[値を探す(S)]で「1DF4H」を指定してサーチを実行します。

Bサーチ結果のアドレス周辺を逆アセンブルして、プログラムを解析します。

　　Aのサーチ結果、いくつかの候補がサーチできます。サーチされた各アドレスの周辺を逆アセンブルすると、次のようなルーチン(基礎知識参照)が見つかります。そこが「DEBUG」という文字列を表示するためのサブルーチンということになります。

 lui a0,#$8001
 addiu a0,a0,#$1Df4
 jal $8007ｃ200

　後は、このルーチンを起点にして、プログラムを解析していき、デバッグルーチンに入るための具体的な条件を解析していきます。

    </content>
</entry>
<entry>
    <title>符号拡張</title>
    <link rel="alternate" type="text/html" href="http://game-kaizoucode.g-poket.com/2006/02/post_80.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.g-poket.com/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1042" title="符号拡張" />
    <id>tag:game-kaizoucode.g-poket.com,2006://9.1042</id>
    
    <published>2006-02-22T04:39:05Z</published>
    <updated>2006-02-22T04:43:44Z</updated>
    
    <summary>  ポインタを参照しているアドレスを探す場合、「符号拡張」に注意する必要がありま...</summary>
    <author>
        <name>Gamo</name>
        
    </author>
            <category term="0800)Tips Documents" />
    
    <content type="html" xml:lang="ja" xml:base="http://game-kaizoucode.g-poket.com/">
          ポインタを参照しているアドレスを探す場合、「符号拡張」に注意する必要があります。
　たとえば、「ときメモ」の場合、デバッグ文字列は、次のようにテーブルに配置されています。

　8013e740 00 00 00 00 14 cd 13 80 1c cd 13 80 24 cd 13 80 ･････ﾍ･?･ﾍ･?$ﾍ･?
　8013e750 28 cd 13 80 30 cd 13 80 34 cd 13 80 3c cd 13 80 (ﾍ･?0ﾍ･?4ﾍ･?&lt;ﾍ･?
　8013e760 40 cd 13 80 44 cd 13 80 4c cd 13 80 54 cd 13 80 @ﾍ･?Dﾍ･?Lﾍ･?Tﾍ･?
　8013e770 58 cd 13 80 60 cd 13 80 68 cd 13 80 74 cd 13 80 Xﾍ･?`ﾍ･?hﾍ･?tﾍ･?
　8013e780 7c cd 13 80 ac cd 13 80 b8 cd 13 80 c0 cd 13 80 |ﾍ･?ｬﾍ･?ｸﾍ･?ﾀﾍ･?

　このテーブルのポインタを参照しているところをサーチみると、次のルーチンがサーチできます。


        　8013a824 or a0,zero,zero
　8013a828 lui s2,#$8014
　8013a82c addiu s2,s2,#$e744
　8013a830 addiu s1,zero,#$ffa0
　8013a834 lw a0,$0000(s2)
　8013a838 addiu a1,zero,#$ffe0
　8013a83c jal $8004b338

　逆アセンブルのソースを見ると、ポインタのアドレスは「8014e777」になります。

　メモリダンプのポインタのアドレスとは、「+10000H」のズレがあるので、違うルーチンであると判断しがちですが、実際には、このルーチンがポインタのロードしているルーチンです。

　さて、なぜ「+1000H」のズレがあるかというと、下位16ビットの値が「負」(8000h以上)になっているためです。

　16ビットの値は、内部的に32ビット値として扱われます。addiuなどの命令では、演算時に「符号拡張」がという処理が行われます。

　たとえば、「addiu s2,s2,#$e744」という命令の場合、演算時に「e744H」は符号拡張されるので、内部的には「s2=s2+ffffe74h(-6332)」と処理されます。結果、S2は「8013e744h」となるわけです。

　単純に、下位16ビットが負になった場合、上位16ビットに1を加えて、上位アドレスを「補正」すると覚えると良いでしょう。

※「符号拡張」の詳しい内容については、「mips RISCアーキテクチャ-R2000/R3000-」(共立出版)を参照してください。

    </content>
</entry>
<entry>
    <title>ジャンプテーブルを使った分岐</title>
    <link rel="alternate" type="text/html" href="http://game-kaizoucode.g-poket.com/2006/02/post_79.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.g-poket.com/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1041" title="ジャンプテーブルを使った分岐" />
    <id>tag:game-kaizoucode.g-poket.com,2006://9.1041</id>
    
    <published>2006-02-22T04:38:08Z</published>
    <updated>2006-02-22T04:38:41Z</updated>
    
    <summary>　プログラムの分岐方法には、「ジャンプテーブル」と呼ばれるテーブルを使った分岐方...</summary>
    <author>
        <name>Gamo</name>
        
    </author>
            <category term="0800)Tips Documents" />
    
    <content type="html" xml:lang="ja" xml:base="http://game-kaizoucode.g-poket.com/">
        　プログラムの分岐方法には、「ジャンプテーブル」と呼ばれるテーブルを使った分岐方法があります。ジャンプテーブルは、次のようなアドレスの配列になります。
　80010900 fc e0 01 80 0c e1 01 80 18 e1 01 80 34 e1 01 80

　プログラムでは、このジャンプテーブルを使って、次のような分岐処理を行います。

　8001e0c0 lui v0,#$8001
　8001e0c4 addiu s5,v0,#$0900     //s5=#$80010900:ジャンプテーブルのポインタをロード
　8001e0c8 lui s1,#$8009
　8001e0cc addiu s1,s1,#$0000     //s1=#$80097000 
　8001e0d0 lw v1,$7bb0(s1)        //ジャンプ先を決定する基準値をロード
　8001e0d4 nop 
　8001e0d8 sltiu v0,v1,#$0003
　8001e0dc beq v0,zero,$8001e12dc //v1&gt;3より大きかったら$8001e12dcにジャンプ 
　8001e0e0 nop
　8001e0e4 sll v0,v1,#02          //v1×4:オフセットの計算
　8001e0e8 addu v0,v0,s5          //v0=v0+s5:ジャンプテーブルのポインタ+オフセット
　8001e0ec lw v0,$0000(v0)        //ジャンプアドレスをロード
　8001e0f0 nop
　8001e0f4 jr v0                  //v0番地にジャンプ
　8001e0f8 nop
　8001e0fc lw v0,$7bb0(s1)
　8001e100 sw s4,$7bb0(s1)
　8001e104 j $8001e214
　8001e108 sw s3,$0008(s0)
　8001e10c addiu a0,zero,#$0028
　8001e110 j $8001e240
　8001e114 addu a1,zero,zero
　8001e118 addiu a0,zero,#$001c
　8001e11c jal $800288d4
　8001e120 addu a1,zero,zero
　8001e124 lw v0,$7bb0(s1)
　8001e128 sw s2,$7bb0(s1)
　8001e12c j $8001e214
　8001e130 sw s3,$0008(s0)
　8001e134 lw v0,$7bb4(s1)
　上のソースの場合、レジスタｖ１にって次のように分岐します・

　v1=0のとき、8001e0fcにジャンプ
　v1=1のとき、8001e10cにジャンプ
　v1=2のとき、8001e118にジャンプ
　v1=3のとき、8001e134にジャンプ


        もう少し詳しくみてみましょう。

　v1=1(アドレス80097bb0の値)のとき、オフセット(sll命令の結果)が「0」になり、8001e0fcに分岐します。

　8001e0e4 sll v0,v1,#02 　//v1=0のとき「0」
　8001e0e8 addu v0,v0,s5 　//v0=0+80010900
　8001e0ec lw v0,$0000(v0) //v0=8001e0fc(80010900番地からワード値をロード)
　8001e0f0 nop
　8001e0f4 jr v0           //8001e0fcにジャンプ

　v1=2(アドレス80097bb0の値)のときは、オフセット(sll命令の結果)が「4」になり、8001e0fcに分岐します。

　8001e0e4 sll v0,v1,#02   //v1=1のとき「4」
　8001e0e8 addu v0,v0,s5   //v0=4+80010900
　8001e0ec lw v0,$0000(v0) //v0=8001e10c(80010904番地からワード値をロード)
　8001e0f0 nop
　8001e0f4 jr v0           //8001e10cにジャンプ

　同様に、v1=3の時はオフセットが「8」、v1=4の時はオフセットが「c」となり、「ジャンプテーブルのポインタ(先頭アドレス)+オフセット」番地のワード値のアドレスに分岐します。

　このv1にロードされる値を制御すれば、ジャンプテーブルに定義されている任意のアドレスにジャンプすることができます。

    </content>
</entry>
<entry>
    <title>コントローラの判定処理</title>
    <link rel="alternate" type="text/html" href="http://game-kaizoucode.g-poket.com/2006/02/post_78.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.g-poket.com/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1040" title="コントローラの判定処理" />
    <id>tag:game-kaizoucode.g-poket.com,2006://9.1040</id>
    
    <published>2006-02-22T04:36:23Z</published>
    <updated>2006-02-22T04:37:44Z</updated>
    
    <summary>　一般的にコントローラのボタン(キー)を押したとき判定処理は、次のようになってい...</summary>
    <author>
        <name>Gamo</name>
        
    </author>
            <category term="0800)Tips Documents" />
    
    <content type="html" xml:lang="ja" xml:base="http://game-kaizoucode.g-poket.com/">
        　一般的にコントローラのボタン(キー)を押したとき判定処理は、次のようになっています。
　lui  v0,#$8010
　lhu  v0,$0000 　　　　　 //v0レジスタにキーコードを格納
　nop
　andi v0,v0,#0020
　bne  v0,zero,$800CD000  //キーコード判定して分岐処理※

　※キーコードが20Hだったら次の行へ、でなかったら8000CD000へジャンプ

　フラグ型のデバッグモードでは、SELECT+L1でデバッグモードONといったのがほとんどなので、この判定処理を覚えておくと良いでしょう。


        　ちなみにPSの場合、コントローラのキーコードは次のようになっています(+判定の場合)。

0001 : L2
0002 : R2
0004 : L1
0008 : R2
0010 : △
0020 : ○
0040 : ×
0080 : □
0100 : SELECT
0800 : START
1000 : 上
2000 : 右
4000 : 下
8000 : 左


    </content>
</entry>
<entry>
    <title>GBA　PARマスターコードのサーチ方法(暫定版)</title>
    <link rel="alternate" type="text/html" href="http://game-kaizoucode.g-poket.com/2006/02/gbapar.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.g-poket.com/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1039" title="GBA　PARマスターコードのサーチ方法(暫定版)" />
    <id>tag:game-kaizoucode.g-poket.com,2006://9.1039</id>
    
    <published>2006-02-22T04:29:41Z</published>
    <updated>2006-02-22T04:32:53Z</updated>
    
    <summary>[Top]  GBA　PARマスターコードのサーチ方法(暫定版)  ■用意するも...</summary>
    <author>
        <name>Gamo</name>
        
    </author>
            <category term="0800)Tips Documents" />
    
    <content type="html" xml:lang="ja" xml:base="http://game-kaizoucode.g-poket.com/">
        <![CDATA[[Top] 
GBA　PARマスターコードのサーチ方法(暫定版) 
■用意するもの

　・バイナリエディタ(SFXなど)
　・デバッガ付きエミュレータ(batgbaがお勧めかな・・）

 
■サーチ手順

　まず、バイナリエディタで、ROMファイルを開いて、0x04000130という数値を検索します。
　SFXなら「ｌ04000130h」で検索すればOKです。

　いくつかの候補が見つかりますが、とりあえず一番最初のオフセットアドレスに注目してください。
　以下の例では0000680Hになります。
 
     <IMG src="http://homepage1.nifty.com/~gamo/doc/Image1.gif" width="370" height="260" border="0">
]]>
        <![CDATA[　次に、このオセットアドレスに+8000000hした値(8000680)近辺を逆アセンブル(※)で確認すると、先ほど検索した4000130Hをロードしている命令(ｌ以下の例では「lｄｒ　r1, =#0x4000130])を見つけることができます。
たいていの場合、この命令の直後にあるadd命令のアドレスをフックすればOKのようです。add命令がなければ、4000130Hをロードしている命令以降の適当なＡＬＵ関連の命令(ｌｄとかｏｒとか)を狙ってやればよい感じです。


※ARM CPUには、ARM命令セットとTUMB命令セットの2種類があるので逆アセンブル際には注意してください。GBAのゲームの場合、大抵はTUMB命令セットです。batgbaで命令セットを切り替えるには、CPUウィンドウを表示([Debug]→[View]→[CPU]）して、codeのとなりのボタンをクリックします。

<IMG src="http://homepage1.nifty.com/~gamo/doc/Image2.gif" width="236" height="256" border="0">

　なお、ゲームによっては、上の例のように一発でフックアドレスを特定できない場合もあります。その場合は、次の4000130Hをロードしている命令近辺を狙ってみるなどします。。


 
■コード化
　上の例では、8000620にフックすれば良いことになるので、マスターコードは

　F8000620 00000101

　となります。後はこれを暗号化すればOKです。

　ゲームコードの部分を付加した場合は、次のようになります。
　
　F8000620 00000101
　4A4F5441 001DC0DE 
]]>
    </content>
</entry>
<entry>
    <title>GBAゲーム改造の手引き</title>
    <link rel="alternate" type="text/html" href="http://game-kaizoucode.g-poket.com/2006/02/gba_1.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.g-poket.com/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1038" title="GBAゲーム改造の手引き" />
    <id>tag:game-kaizoucode.g-poket.com,2006://9.1038</id>
    
    <published>2006-02-22T04:24:49Z</published>
    <updated>2006-02-22T04:36:00Z</updated>
    
    <summary>■GBAのPARコード生成ツール-----ダウンロード 　GBA用のPARが発売...</summary>
    <author>
        <name>Gamo</name>
        
    </author>
            <category term="0800)Tips Documents" />
    
    <content type="html" xml:lang="ja" xml:base="http://game-kaizoucode.g-poket.com/">
        <![CDATA[■GBAのPARコード生成ツール-----<a href="http://homepage1.nifty.com/~gamo/file/gbacode.zip" target="_blank">ダウンロード</a>

　GBA用のPARが発売されたはいいが、あいかわらず暗号化されている・・(--;)
　ということで、コードの暗号化･複合化を行うプログラムを作成してみました。
　このツールを使うと、VisualBoy Advance(以下VBA)でサーチしたコードをPAR用のコードに変換することができます。(あいかわらずDOS窓用です・・・)

　とりあえず、参考になるとは思いますので、ソースも置いておきます。
　誰かGUIなツールを作成してください。(^^;)

　　　<a href="http://homepage1.nifty.com/~gamo/file/gbacode_s.zip" target="_blank">GBAのPARコード生成ツールソース</a>


　なお、適当に作成しましたので、正常に変換できない場合もあるかもしれません。

 
]]>
        <![CDATA[■注意点

　PARの場合、データ部の長さを明示的に指定する必要があります
　
　・PARの改造コードの形式(単純書き込み)
　　0xxxxxxx 000000yy バイト書き込み((8bit)
　　1xxxxxxx 0000yyyy　ハーフワード書き込み(16bit)
　　2xxxxxxx yyyyyyyy　ワード書き込み(32bit)


　VBAのチートコードはデータ部の長さに関係なくアドレス部を指定していますので、変換する際には、データ部の長さを指定するコードを付加する必要があります。

　たとえば、VBA用のコードが

　02000D78　03E7

　をPAR用のコードに変化する際には、アドレス部を

　12000D78

　として変換する必要があります。

　 
■マスターコード・・・現状でわかっていること
　マスタコードの形式は

　Faaaaaaa
　bbbbbbbb
　ccccccc
　dddddddd


　aaaaaaa フックアドレス
　bbbbbbb　不明････00000101が汎用的に使用されている
　cccccccc　<a href="http://homepage1.nifty.com/~gamo/doc/GBAROMH.gif" target="_blank">ゲームコード</a>
　dddddddd　不明・・・・001dc0deが汎用的に使用されている

　となっているようです。

　3,4行目は、PARに登録されている改造コードの中から、挿入しているタイトルのゲームの改造コードを自動選択するのに使われるだけなので、なくとも良いです。


※ゲームコードはゲームごとに異なるコードが使われています。たとえば、ブレスオブファイアは「4142464A」(ABFJ)、タクティクスオウガ外伝は「41544FAA」（ATOJ）となっています。なお、変換する際には上位と下位バイトを入れ替えて、入力する必要があります。たとえば、ブレスオブファイアの場合「4A464241」と入力します。


　　　　　　<a href="http://game-kaizoucode.g-poket.com/2006/02/gbapar.html" target="_blank">マスターコードサーチ方法(暫定版)</a>

 
■コードの種類 

　コードの種類については「かぢゃぽんのお部屋」のほうで詳しく解析および解説されています。マスタコードをサーチするツールも作成されていますので是非訪問してみましょう！
 
]]>
    </content>
</entry>
<entry>
    <title>PS2ゲーム解析の手引き</title>
    <link rel="alternate" type="text/html" href="http://game-kaizoucode.g-poket.com/2006/02/ps2.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.g-poket.com/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1037" title="PS2ゲーム解析の手引き" />
    <id>tag:game-kaizoucode.g-poket.com,2006://9.1037</id>
    
    <published>2006-02-22T04:17:04Z</published>
    <updated>2006-02-22T04:24:05Z</updated>
    
    <summary>PS2のプログラム改造がなんとかできるような環境が整ってきたので、プログラム改造...</summary>
    <author>
        <name>Gamo</name>
        
    </author>
            <category term="0800)Tips Documents" />
    
    <content type="html" xml:lang="ja" xml:base="http://game-kaizoucode.g-poket.com/">
        <![CDATA[PS2のプログラム改造がなんとかできるような環境が整ってきたので、プログラム改造方法についてのHowToを公開します。

まず、以下のHPから、PS2の逆アセンブラ「PS2DIS」と「改造支援ツール」を入手してください。

<a href="http://www.geocities.co.jp/SiliconValley-Oakland/7128/" target="_blank">　ここは PS2 Linux 関係の日本語ページ</a>

PS2DISは非常に便利です。逆参照でサブルーチン、ポインタを追いかけることができるので、比較的容易にプログラムを解析できます。
]]>
        <![CDATA[■解析

例：ときめきメモリアル３の解析

　PS2のプログラムのカーネル?、ブートプログラム？・・まぁなんでもいいのですが、(＾＾；)常にメモリに常駐するプログラムは、S***_***.**というファイルです。これをPS2DISで逆アセンブルして、解析を行います。
とりあえず、今回は、各パラメータ(文系、理系などなど)のLVアップルーチンを探してみました。
ときめも３の場合、学習系の各パラメータのLV99がMAXなので、PS2DISの数値検索で99(63H)を、地道に検索し、それらしき処理を行っている箇所を探します。

検索結果、以下のあたりがそれらしい処理を行っているようです。(＾＾；)

<IMG src="http://homepage1.nifty.com/~gamo/doc/Image3.gif" width="340" height="300" border="0">

002597b8あたりを解析すると、以下のような処理をおこなっていると予測できます。
ですので、002597C0の分岐処理を潰せば、LVアップすると予測できます。

        lw              v1, $0000(a1)                
        slt             v0, s4, v1                  
        beq             v0, zero, $00259828 //一定値(s4)以上だったらLVUp処理       
        addu            t0, a2, s2                 
        lui             v0, $ffff                   
        addu            v0, v1, v0                  
        sw              v0, $0000(a1)               
        sw              zero, $0040(t0)             
        lw              v0, $0000(a3)              
　      addiu           a0, v0, $0001        //1LV UP       
        slti            v0, v0, $0063                
        beql            v0, zero, $00259888  //LV99だったらジャンプ      
        addiu           s0, s0, $0001                
        sw              a0, $0000(a3)               
        sllv            a0, s3, s0                   
        addu            a1, s0, s2                   
        addiu           v1, zero, $0001             
        lbu             a2, $0007(s5)               
        sb              v1, $0050(a1)               
        lbu             v0, $62aa(s1)                
        or              v0, v0, a0                  
        bne             a2, zero, $00259884         
        sb              v0, $62aa(s1)                
        lw              a1, $0000(a3)               

--------------------------------------------------------------------------------
 
■コード化
　分岐処理を潰すには、002597C0 00000001とすれば良いので、これを「改造支援ツール」で暗号化してコードを作ります。

　　結果、以下がコードになります。

　　　すくすくLVアップ
　　　3CB418E8 1456E7A6

　ちなみにマスターコードは必要です。他所で公開されているマスターコードを入れてください。

 

--------------------------------------------------------------------------------
以上、簡単ですが、PS2のプログラム改造は可能です。

　チェックサム解除、デバッグモードなどなら、以上の解析方法でなんとかなるでしょう。
　これでPS2の改造にも少しは拍車が掛かれば幸いなのですが・・・・


--------------------------------------------------------------------------------
■2002/01/10 追記・・・・

　久しぶりに改造関連のページを巡り、情報を収集(^^;)。へぇ・・マスターコードの探し方もでてたのね・・と関心しつつ(^^;)
　なにやら　Aコードを使うと、マスターコードが不要とのこと。んで、試してみる・・・
　すくすくLVアップをAコードで書くと・・・A02597C0 10400001
　これを暗号化して、　9CB418E8 0496E7A6　と入力。

　おー!?ちゃんと動くじゃないかと感動・・(^^;)
　
　ワード書き込みというのが、ちょっと不満ですが、私の場合、プログラム改造が主なので、これがあれば充分かな。
]]>
    </content>
</entry>
<entry>
    <title>ブラックマトリクス　ゼロ</title>
    <link rel="alternate" type="text/html" href="http://game-kaizoucode.g-poket.com/2006/02/post_77.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.g-poket.com/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1036" title="ブラックマトリクス　ゼロ" />
    <id>tag:www.g-poket.com,2006:/game-kaizoucode//9.1036</id>
    
    <published>2006-02-22T03:41:53Z</published>
    <updated>2006-02-22T03:44:30Z</updated>
    
    <summary>{m} 485d47f2 cf7b35a3 adf58d86 d755a94f ...</summary>
    <author>
        <name>Gamo</name>
        
    </author>
            <category term="0400)GB ADVANCE" />
    
    <content type="html" xml:lang="ja" xml:base="http://game-kaizoucode.g-poket.com/">
        <![CDATA[{m}<br>
485d47f2<br>
cf7b35a3<br>
adf58d86<br>
d755a94f<br>
<br><br>
BP 999999<br>
d6b8d995<br>
212aed22<br>
<br><br>
EXP 999999<br>
2614794c<br>
b80ad1c9<br>
<br><br>
MONEY 999999
f2e3835e
e2bff496
]]>
        <![CDATA[アイテム(非暗号化コード)<br><br>

1個目 020036c0 xx<br>
2個目 020036c2 xx<br>

以降+2hごと<br><br>
.
100個目　02003786　xx<br><br>

    xx<BR>
      <TABLE border="1">
        <TBODY>
          <TR>
            <TD nowrap valign="top">01　ショートソード<BR>
            02　カトラス<BR>
            03　ファルシオン<BR>
            04　ブロードソード<BR>
            05　バラッシュ<BR>
            06　ダマスカス<BR>
            07　カツバルゲル<BR>
            08　ツバイハンダー<BR>
            09　ダルシーソード<BR>
            0a　ルーンソード<BR>
            0b　クロルソード<BR>
            0c　カタナ<BR>
            0d　漆黒の剣<BR>
            0e　覇王の剣<BR>
            0f　ダガー<BR>
            10　マーシーナイフ<BR>
            11　ダーマナイフ<BR>
            12　ジョギリ<BR>
            13　スピア<BR>
            14　グレイブル<BR>
            15　パルチザン<BR>
            16　トライデント<BR>
            17　スコーピオン<BR>
            18　ルーンスピア<BR>
            19　スルバースピア<BR>
            1a　冥王の戦槍<BR>
            1b　レイピア<BR>
            1c　フルーレ<BR>
            1d　エストック<BR>
            1e　コリシュマルド<BR>
            1f　ショートボウ<BR>
            20　ロングボウ<BR>
            21　コルルボウ<BR>
            22　蛇鱗の戦弓<BR>
            23　インドラクロス<BR>
            24　ルーンボウ<BR>
            25　シルバーボウ<BR>
            26　龍鱗の戦弓<BR>
            27　魔帝の戦弓<BR>
            28　ウィップ<BR>
            29　ローズウィップ<BR>
            2a　血染めの戦鞭<BR>
            2b　蛇腹の戦鞭<BR>
            2c　月桂樹の戦鞭<BR>
            2d　黒革の戦鞭<BR>
            2e　ルーンウィップ<BR>
            2f　冥姫の戦鞭<BR>
            30　妖紀の戦鞭<BR>
            31　アクス<BR>
            32　バトルアクス<BR>
            33　ヘッドアクス<BR>
            34　カリンガ<BR>
            35　ルーンアクス<BR>
            36　シルバーアクス<BR>
            37　ミトラアクス<BR>
            38　狂皇の戦斧<BR>
            39　杖<BR>
            3a　ジュエルロッド<BR>
            3b　ウィングロッド<BR>
            3c　蛇鱗の杖<BR>
            3d　フレイル<BR>
            3e　スリーテイルズ<BR>
            3f　パイバーテイル<BR>
            40　レノスフレイル</TD>
            <TD nowrap valign="top">60　革の服<BR>
            61　ローブ<BR>
            62　ハードレザー<BR>
            63　チェインメイル<BR>
            64　神官のローブ<BR>
            65　ラメルアーマー<BR>
            66　ボゴデルの鎧<BR>
            67　逢魔のローブ<BR>
            68　鉄の胸当て<BR>
            69　カタリの鎧<BR>
            6a　鮮血のローブ<BR>
            6b　スペロニの鎧<BR>
            6c　神座のローブ<BR>
            6d　フミリアティ<BR>
            6e　ヨアキムの鎧<BR>
            6f　審判のローブ<BR>
            70　黄金の胸当て<BR>
            71　アモリの鎧<BR>
            72　万礼節のローブ<BR>
            73　銀の胸当て<BR>
            74　悠久のローブ<BR>
            75　エックハルト<BR>
            76　黒革のローブ<BR>
            77　アヴィラの鎧<BR>
            </TD>
            <TD nowrap valign="top">80　トビトの石<BR>
            81　ユディトの石<BR>
            82　マカバイの石<BR>
            83　ヱステルの石<BR>
            84　愚者の黄金<BR>
            85　トビトの指輪<BR>
            86　ユディトの指輪<BR>
            87　マカバイの指輪<BR>
            88　エステルの指輪<BR>
            89　シラの指輪<BR>
            8a　バルクの指輪<BR>
            8b　トビテの腕輪<BR>
            8c　ユディトの腕輪<BR>
            8d　マカバイの腕輪<BR>
            8e　エステルの腕輪<BR>
            8f　シラの腕輪<BR>
            90　バルクの腕輪<BR>
            91　蒼のメダル<BR>
            92　紅のメダル<BR>
            93　翠のメダル<BR>
            94　褐のメダル<BR>
            95　藍のメダル<BR>
            96　紫のメダル<BR>
            97　金のメダル<BR>
            98　銀のメダル<BR>
            99　盟約証<BR>
            9a　値の盟約証<BR>
            9b　冥血の盟約証<BR>
            9c　天証<BR>
            9d　大天証<BR>
            9e　座天証<BR>
            9f　蒼魔境<BR>
            A0　紅魔境<BR>
            A1　翠魔境<BR>
            </TD>
            <TD nowrap valign="top">c0　ポーション<BR>
            c1　ハイポーション<BR>
            c2　エリクサー<BR>
            c3　ブルーキュア<BR>
            c4　イエローキュア<BR>
            c5　レンボウキュア<BR>
            c6　血のボトル<BR>
            c7　冥血のボトル<BR>
            c8　力の酒<BR>
            c9　知識の水<BR>
            ca　疾風の実<BR>
            cb　粘り気ある豆<BR>
            cc　BP100<BR>
            cd　BP500<BR>
            ce　BP1000<BR>
            cf　BP2500<BR>
            d0　BP5000<BR>
            </TD>
          </TR>
        </TBODY>
      </TABLE>
      <BR>
      </BLOCKQUOTE>
      </BLOCKQUOTE>
      </TD>
    </tr>
</table>]]>
    </content>
</entry>
<entry>
    <title>黄金の太陽　失われし時代</title>
    <link rel="alternate" type="text/html" href="http://game-kaizoucode.g-poket.com/2006/02/post_76.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.g-poket.com/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1035" title="黄金の太陽　失われし時代" />
    <id>tag:www.g-poket.com,2006:/game-kaizoucode//9.1035</id>
    
    <published>2006-02-22T03:41:02Z</published>
    <updated>2006-02-22T03:41:37Z</updated>
    
    <summary>{m} 235CDAB9 AC9B3AA6 247F6AD4 3001CF75 ...</summary>
    <author>
        <name>Gamo</name>
        
    </author>
            <category term="0400)GB ADVANCE" />
    
    <content type="html" xml:lang="ja" xml:base="http://game-kaizoucode.g-poket.com/">
        {m}
235CDAB9
AC9B3AA6
247F6AD4
3001CF75

コイン9999999
BDAE27BE
741DA168


ジャスミンEXP9999999
6738E4BF
47C6A84A

        以降、非暗号化コード

コイン
22000250　0098967F

ジャスミン
MAX HP
12000BD0　03E7　
現在HP
12000BD4　03E7
MAX EP
12000BD2 03E7
現在EP
12000BD6　03E7
攻撃
12000BD8　03E7
防御
12000BDA　03E7
運
02000BDE　FF
地パワー
12000BE4　03E7
地耐性
12000BE6　03E7
水パワー
12000BE8　03E7
水耐性
12000BEA　03E7
火パワー1
2000BEC　03E7
火耐性
12000BEE　03E7
風パワー
12000BF0　03E7
風耐性
12000BF2　03E7
EXP
22000CC0　98967F


各キャラのMAX HPのアドレス(+14CHごと)
ロビン
12000554
ジェラルド
120006A0
イワン
120007EC
メアリィ
12000938
ガルシア
12000A84
ジャスミン
12000BD0
シバ
12000D1C
ピカード
12000E68

    </content>
</entry>
<entry>
    <title>GBA汎用コード</title>
    <link rel="alternate" type="text/html" href="http://game-kaizoucode.g-poket.com/2006/02/gba.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.g-poket.com/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1034" title="GBA汎用コード" />
    <id>tag:www.g-poket.com,2006:/game-kaizoucode//9.1034</id>
    
    <published>2006-02-22T03:40:10Z</published>
    <updated>2006-02-22T03:40:44Z</updated>
    
    <summary>※マスターコードを確認する際にでも使ってください   サウンドカット 24000...</summary>
    <author>
        <name>Gamo</name>
        
    </author>
            <category term="0400)GB ADVANCE" />
    
    <content type="html" xml:lang="ja" xml:base="http://game-kaizoucode.g-poket.com/">
        ※マスターコードを確認する際にでも使ってください
 

サウンドカット

24000084
00000000


PAR用コード
3B56C358
D8570F8E 

 

        
    </content>
</entry>
<entry>
    <title>水夏〜SUIKA〜</title>
    <link rel="alternate" type="text/html" href="http://game-kaizoucode.g-poket.com/2006/02/suika.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.g-poket.com/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1033" title="水夏〜SUIKA〜" />
    <id>tag:www.g-poket.com,2006:/game-kaizoucode//9.1033</id>
    
    <published>2006-02-22T03:38:59Z</published>
    <updated>2006-02-22T03:39:49Z</updated>
    
    <summary>CG＆シナリオ　ALL ON #NEXUS用 #SFX_CODE_TEXT #対...</summary>
    <author>
        <name>Gamo</name>
        
    </author>
            <category term="0300)DreameCast" />
    
    <content type="html" xml:lang="ja" xml:base="http://game-kaizoucode.g-poket.com/">
        <![CDATA[CG＆シナリオ　ALL ON


#NEXUS用
#SFX_CODE_TEXT
#対象ファイル= "SUIKA___.SYS"

2a0>303-ff



#カラット用
#SFX_CODE_TEXT
#対象ファイル= "SUIKA___.SYS"

2a4>307-ff



※セーブデータ編集後、<a href="http://homepage1.nifty.com/~gamo/file/sumsk.zip" target="_blank">ツール</a>を使って、チェックサムを書き換えてください。
]]>
        
    </content>
</entry>
<entry>
    <title>サクラ大戦２</title>
    <link rel="alternate" type="text/html" href="http://game-kaizoucode.g-poket.com/2006/02/post_75.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.g-poket.com/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1032" title="サクラ大戦２" />
    <id>tag:www.g-poket.com,2006:/game-kaizoucode//9.1032</id>
    
    <published>2006-02-22T03:38:01Z</published>
    <updated>2006-02-22T03:38:40Z</updated>
    
    <summary>デバッグモード 1F8451B6 00000001 START+Lでデバッグメニ...</summary>
    <author>
        <name>Gamo</name>
        
    </author>
            <category term="0300)DreameCast" />
    
    <content type="html" xml:lang="ja" xml:base="http://game-kaizoucode.g-poket.com/">
        デバッグモード

1F8451B6
00000001


START+Lでデバッグメニュー
L、Rでメニュー切り替え
STARTで通常モード

詳しい使い方は各自で探ってください

        
    </content>
</entry>
<entry>
    <title>夢のつばさ</title>
    <link rel="alternate" type="text/html" href="http://game-kaizoucode.g-poket.com/2006/02/post_74.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.g-poket.com/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1031" title="夢のつばさ" />
    <id>tag:www.g-poket.com,2006:/game-kaizoucode//9.1031</id>
    
    <published>2006-02-22T03:37:22Z</published>
    <updated>2006-02-22T03:37:40Z</updated>
    
    <summary>D017B792 7EFF 30082B55 0004 [使い方] メニューを開...</summary>
    <author>
        <name>Gamo</name>
        
    </author>
            <category term="0200)PlayStation" />
    
    <content type="html" xml:lang="ja" xml:base="http://game-kaizoucode.g-poket.com/">
        D017B792 7EFF
30082B55 0004

[使い方]
メニューを開いて、L2と□の同時押し

        
    </content>
</entry>

</feed> 

