あなたが探している情報は、この日記には記されていない可能性が高いです。(検索で来た人用)
にらどんは一杯500円。尚、出前は承っておりません。ご了承下さい。

VC金銀 任意コード実行 まとめ

バーチャルコンソールポケットモンスター金・銀』における任意コード実行について
あらかた遊んで楽しんだので、実用性のある自作コードをまとめておきます。

任意コード実行について

まず「任意コード実行とはなんぞや?」ということから説明いたしますと
ゲームのバグを利用して外部操作なしにゲーム中で任意のプログラムを記述し実行することです。(あってるかな・・・)
ポケモン、とくにGBシリーズではバグ技がもはやゲームの一要素として認知されており、
ニンテンドー3DSバーチャルコンソールにて配信された赤緑青ピカチュウ金銀クリスタルにおいても
原作と同様のバグ技が再現できることが話題になりました。
中でも金銀での任意コード実行は導入の手間が少ないことやメールによるコーディング環境のバランスが絶妙でお手軽に楽しめるようになっています。
このようにバグ技を利用した遊び方であるため、忌避される方もいらっしゃると思いますので利用の際はそういった配慮も必要かと思います。
基本的な導入案内は参考サイト様へお願いし、ここでは実際に実行するコードの紹介を行っていきます。
これらは主に「ポケムーバー」を通して第7世代へ転送することを目的としており、
VC内での対戦等にはあまり向かない内容です。


導入まとめ
理解できなくても出来る任意コード実行解説【ポケモン金銀ver】 - nakayoshibaddi’s blog
情報元
昔のポケモンの裏技を語る【アネ゛デパミ゛】 14 [無断転載禁止]©2ch.net
昔のポケモンの裏技を語る【アネ゛デパミ゛】 15
コーディング資料
ぽけもんばぐ・りっちーず
内部コード
Gameboy (LR35902) OPCODES
Z80命令説明書
金銀用翻訳機(メール・ボックス文→ニーモニック / 機械語ニーモニック)
ポケモニック・逆アセンブラ
関連バグ
ポケムーバー 増殖バグ

コード集

種族変更
;手持ちの6番目の種族をボールポケット1番目の個数に応じて変更
;1度使うとボールポケットの1番目と2番目の個数が251になり、
;2番目が251個の状態で実行すると1番目の個数の図鑑番号に対応したポケモンに変化します。
;参考リンク内の『ハイパー技マシン』を元に作成したものです。
;@mail
;ぜ/がゆぼ5せづざはぞまづのョキ
;ゥゃれぜをがるひゼづの

000	ld l,F3
002	ld h,D5
004	ld a,FB
006	cp (hl)
007	ldd (hl),a
008	dec hl
009	jp z,CF2F
012	ldd (hl),a
013	ret
014	xor a
015	add (hl)
016	ld c,(hl)	; 改行

017	ld (DAE0),a
020	ld l,DD
022	ld h,D9
024	rrc l
026	ldd (hl),a
027	ret
経験値調整(レベル99調整・転送時の性格調整)(※コメントにてご指摘いただきコードの誤植を訂正しました。2018/08/19)
;手持ちの6番目の経験値を調整
;経験値中位下位を0xd8c9に設定
;*Lv99でなければ使うたびに経験値を65536増加
;-経験値タイプによって使用回数が異なるが低レベルからだと12〜18回で99止めにできる。
;-経験値をレベルに反映させるにはボックスに預けてすぐ引き取る。
;*Lv99なら使うたびに経験値を1増加
;-性格調整用
;@mail
;ぜ9がれョににダせぜゥぐグぼのづ
;にダづどの

000	ld l,FF
002	ld h,DA
004	xor a
005	add a,C6
007	rrca
008	cp (hl)
009	ld l,EA
011	jr z,+07
013	ld a,C9
015	ldd (hl),a
016	ld c,(hl)	; 改行

017	add a,0F
019	ldd (hl),a
020	inc (hl)
021	ret
個体値調整(色違い調整・性別調整)
;色違い用個体値調整
;手持ちの6番目の個体値を*AAAに固定し、攻撃個体値を+1し続けることで色違いと性別調整を兼ねる。
;性別比にも無関係に全ての種族に対応している代わりに色違いになったかどうかいちいち確認しなければならない。
;@mail
;ぜ0がれぼヲづにぷルにヂ0ザづの

000	ld l,F6
002	ld h,DA
004	ld a,AA
006	ldd (hl),a
007	add a,46
009	and (hl)
010	add a,10
012	or a,0A
014	ldd (hl),a
015	ret
転送用コピー(少々上級者向け)
;起動用関数
;手持ちの6匹目を現在のボックスへ30匹コピーする。
;上書きになるためその時点でボックスにいたポケモンは消滅します。
;@mail
;ョぶへマだらへザよへャだの空空空 ;空はスペース。埋まってれば別になんでもいいけどバグ避けかつ入力が楽なので
;ごデドゼつづまの

000	xor a
001	inc a
002	call 309D
005	rst 10
006	call D60A
009	call 30AD
012	ret
013	ld a,a
014	ld a,a
015	ld a,a
016	ld c,(hl)	; 改行

017	ldi a,(hl)	; ここから転写用関数
018	ld (de),a
019	inc de
020	dec c
021	jp nz,CF32
024	ret
;メイン関数
;非常に長いためわざマシンポケットで記述→パソコンの預かりアイテムへ転写するようになっています。
;呼び出し先もそこになっているので起動用とメイン関数はこのペアで使用してください。

3E 1E 11 10 AD 12
13 47 21 E0 DA 7E
12 13 05 20 FB AF 3D 12 13
06 1E 21 E0 DA 0E 20
CD 32 CF 05 20 F5
11 F0 B0 06 1E 21 2E DB 0E 06
CD 32 CF 05 20 F5
06 1E 21 52 DB 0E 06
CD 32 CF 05 20 F5 C9

000	ld a,1E
002	ld de,AD10
005	ld (de),a
006	inc de

007	ld b,a
008	ld hl,DAE0

011	ld a,(hl)
012	ld (de),a
013	inc de
014	dec b
015	jr nz,+FB

017	xor a
018	dec a
019	ld (de),a
020	inc de
021	ld b,1E

023	ld hl,DAE0
026	ld c,20
028	call CF32
031	dec b
032	jr nz,+F5

034	ld de,B0F0
037	ld b,1E

039	ld hl,DB2E
042	ld c,06
044	call CF32
047	dec b
048	jr nz,+F5

050	ld b,1E

052	ld hl,DB52
055	ld c,06
057	call CF32
060	dec b
061	jr nz,+F5

063	ret
;転写用コード
;『わざマシンALL255個』と組み合わせてわざマシンで上記メイン関数コードを記述したらこのコードで転写。
;@mail
;ゾづ
;ぜょがゆひゼ
;ヅザよ		; 必要に応じてこの部分を変更して転写先アドレスをいじる。これはパソコンのアイテムリスト先頭アドレス。
;へよだの

000	ld c,32

002	ld l,E2
004	ld h,D5
006	rrc l

008	ld de,D60A

011	call 30D6
014	ret