とあるゲームには「強くてニューゲーム」のような
クリア時のデータを引継ぎできる要素があります
もちろん、最初からシステムに組み込まれていないゲームには
この引継ぎ要素はありません。

じゃあその機能を自分で作ってしまおうというのが
「データ継承プログラム」です。

データ継承と聞くと難しそうに感じますが
多分、実際に難しいかなと思います(笑)
「継承したいデータを空きメモリにコピーして
その数値を他のセーブデータで始めたゲームにコピーし直す」
原理は簡単ですが、問題はどうプログラムで再現するかです


まず、空きメモリへの数値のコピー方法を考えます
個人的書き物で「連続書き込み再現」を書いてありますが
あの方法の逆で「連続読み込み」をして数値をレジスタにロードし
次にその数値を空きメモリへストアすれば数値のコピーが出来ます
早速これをプログラムで組んでみましょう

仮に、アイテムを継承させるとして
仮アイテムアドレスは0034AA90が最初、種類は全50種類
アイテムデータはハーフワード値で管理されているとします
まずはアイテムのアドレスと数値のコピー先(空きメモリ)
そして繰り返す回数を設定します。

000f0000 lui t0, $0034
000f0004 ori t0, t0, $AA90
000f0008 lui t1, $000f
000f000c addiu t2, zero, $0032

次に、実際に空きメモリへ数値をコピーするプログラムを組みます

000f0018 lhu t3, $0000(t0)
000f001c sh t3, $1000(t1)
000f0020 addiu t2, t2, $FFFF
000f0024 addiu t0, t0, $0002
000f0028 addiu t1, t1, $0002
000f002c nop
000f0030 bne t2, zero, $000F0018

lhuでt3にアイテムのデータを1つロード
shで空きメモリにそのデータをストア(コピー)
addiu命令で繰り返し回数から0001をマイナスしたり
アイテム、空きメモリアドレスを2hズラすなどして
繰り返し回数が0になりまでbne命令でコピーを繰り返します。
これで50種類のアイテムのデータが000F1000〜に格納されます

次に、このコピーしたデータを他のデータに書き込むプログラムですが
ただ読み込み先と書き込み先を反転させるだけで
空きメモリのデータをアイテムのアドレスに書き込むことができます

000f0048 lhu t3, $1000(t1)
000f004c sh t3, $0000(t0)
000f0050 addiu t2, t2, $FFFF
000f0054 addiu t0, t0, $0002
000f0058 addiu t1, t1, $0002
000f005c nop
000f0060 bne t2, zero, $000F0048

コピー方法、コピーデータのストア方法はこれで良いのですが
このままでは2つのプログラムを続けて処理してしまい
データ継承の機能が果たせません
そこで、プログラム間に処理を分断させる命令を追加し
さらにパッド操作でそれらが個別に動くようにして
自分の好きなタイミングで動作させるようにします。

これらを踏まえて、ここまでのプログラムを纏めます

新しくj命令が二つ追加されています
まず2つ目のj命令ですが、これは空きメモリへのコピーと
空きメモリからのコピーのそれぞれのプログラムを分断する物です
そして重要なのが1つ目のj命令、ここをパッド操作で変更し
どっちのプログラムを動かすかを指定させます

こんな感じにパッドで切り替えます


これも単なる切り替えだけではどちらか片方のプログラムが
断続的に動いてしまって正しく継承する事が出来ません
そこで、1つ目のj命令は最初は「プログラム終了」に飛ぶjにして
ただのワード書き込み(先頭を2にして暗号化)にしておけば
パッドでこの命令を切り替えてもすぐに元のプログラム終了へのjに戻るので
他のパッド操作でここを元に戻す必要が無くなり効率的です。

これを実際にコード化するとこんな感じになります
念のために言っておきますが、これは例で作ったコードなので
このコード自体は実際には存在しない架空のゲームの物です

パッド操作でアイテム継承
0CEE8756 1456B10C
1C9A8338 0C53A7A3
0CEE8756 1456B20C
1C9A8338 0C53A7B7
1C9A8390 15F6E79D
1C9A8328 204EE7D1
1C9A832C 274E7D35
1C9A8330 204DE79C
1C9A8334 384CE7D7
1C9A8338 0C53A7AF
1C9A8340 874BE7A5
1C9A8344 B72BD7A5
1C9A8348 378CB00C
1C9A834C 374EE7A7
1C9A8350 372DE7A7
1C9A8358 0796B00E
1C9A8360 0C53A7AF
1C9A8370 872BD7A5
1C9A8374 B74BE7A5
1C9A8378 378CB00C
1C9A837C 374EE7A7
1C9A8380 372DE7A7
1C9A8388 0796B00E
L2ボタンでアイテムデータのコピー
R2ボタンでコピーデータのストアになります
継承したいアイテムがあるセーブデータをロードした後にL2を押します
次にそのアイテムデータを書き込みたいセーブデータをロードし
R2ボタンを押すとアイテムを継承させる事が出来ます。


このプログラムはコピーする繰り返し回数、コピーするデータのアドレス
パッドアドレスを書き換えれば他のゲームでも流用できるので
腕に自身があったら挑戦してみると面白いと思います
アイテム継承、ステータス継承などのただの継承だけでなく
他のセーブデータからカーレース系なら友人の車データのコピー
ゲームショウなどのイベントでしか貰えない限定キャラやアイテムなども
これでキャラだけを他のデータに移植する事が可能になったりします。