FC2ブログ

記事一覧

Em汎用コード用サンプルコード一覧

現在、ブログでのコメントの返信は停止しております
返信を希望されるコメントについてはお手数ですがYouTubeの当方のチャンネルに投稿されている適当な動画に書き込みくださいますようお願いします

初の試みである目次の試作試験の際に「下書き保存」していたつもりが「公開」になっていたらしく、β版の記事が知らぬ間に投稿されていたようで閲覧された方々に混乱を招いたことかと思います
大変ご迷惑をおかけいたしました…


【Em汎用コード用サンプルコード一覧】

ここではEmの汎用コード用に作製した有用性の高いサンプルコードについて纏めている。
汎用コードの概説及びEm汎用コード環境の導入手順、スクリプトコードの入力方法についてはこちらを参照。

尚、字形の紛らわしい文字については、注釈がない限り以下を前提としている。

[へ],[べ],[ぺ]:平仮名
[l]:小文字L

<参考>
・文字コード
https://wikiwiki.jp/pokemonhack/文字コード
・スクリプトコード
https://wikiwiki.jp/pokemonhack/イベントスクリプト
・SPコード
https://wikiwiki.jp/pokemonhack/Specialコード

目次
【スクリプトオンリー系】
【プログラムメイン系】
【任意乱数値指定系】
【その他混合系】



【スクリプトオンリー系】
スクリプトコードのみで構成された任意コードの一覧である。


・所持金加算

<要素>
[ゾ①①①① ]

c90[ゾ]により、所持金を①①①①円増やす。
所持金は上限999999円(0x000F423F)で打ち止めされるので、所持金MAXにしたいだけならば適当な大きい値を指定すればよい。

<例>
ボックス名1:[ゾソソソソ ]
①①①①=[ソソソソ]=0x5F5F5F5F:1600085855円


・任意アイテム入手

<要素>
[べ⑴⑴⑵⑵]

c49[べ]により、パソコン内に任意のアイテム⑴⑴を任意の個数⑵⑵追加する。
⑴⑴や⑵⑵にはイベント変数を利用可能。

<例>
ボックス名1:[べお sう]
⑴⑴=[お ]=0x0005:サファリボール
⑵⑵=[sう]=0x03E7:999個

ボックス名1:[ああああに ぞ]
ボックス名2:[べで  ぞ]
⑴⑴=[で ]=0x0044:不思議な飴
⑵⑵=[ ぞ]=0x4000:イベント変数0x4000
→イベント変数0x4000=[終終]=0xFFFF:65535個

<参考>
https://wikiwiki.jp/pokemonhack/アイテムコード


・フラグオンチケット類入手

<一覧>
・夢幻のチケット
ボックス名1:[おぢネやく]
※夢幻のチケット配達員出現
ボックス名1:[るっす]

・神秘のチケット
ボックス名1:[おふXソく]

・オーロラチケット
ボックス名1:[おZVソく]

・古びた海図
ボックス名1:[あああああああお]
ボックス名2:[Yソく]

c05[お]により、ROM内に用意されたスクリプトへジャンプすることでフラグオンのチケット類をその場で入手する。
夢幻のチケットに関しては、c28[る]によりポケセン2Fに配達員を出現させるフラグを立てて、直接配達員から受け取る方法もある。


・固定シンボルポケモン復活

<一覧>
・レジロック,レジアイス,レジスチル
ボックス名1:[れAあ],[れBあ],[れCあ]

・カイオーガ,グラードン,レックウザ
ボックス名1:[れDあ],[れEあ],[れFあ]

・孤島ラティ
ボックス名1:[れOあ]

・ミュウ
ボックス名1:[れPあ]

・デオキシス
ボックス名1:[れ。あ]

・ルギア,ホウオウ
ボックス名1:[れダ ],[れヂ ]

c29[れ]により、捕獲や撃破によってオンになった各固定シンボルポケモンの消失フラグを折ることで、ポケモンを復活させる。


・孤島ラティ変更

<一覧>
・ラティアス
ボックス名1:[る…に]

・ラティオス
ボックス名1:[れ…に]

南の孤島に出現するラティの種類を決めるフラグ0x16B0[…に]を、c29[る]により立てることでラティアス、c2A[れにより折ることでラティオスに切り替える。
徘徊ラティの種類は切り替わらない。


・任意技教え

<要素>
[ロ①②③③]

c7B[ロ]により、手持ち①匹目の技②番目を任意の技③③に変更する。

<例>
ボックス名1:[ロいう5 ]
①=[い]=0x02:手持ち3匹目
②=[う]=0x03:技4番目
③③=[5 ]=0x00A6:スケッチ

ボックス名1:[ロお ]
①=[お]=0x05:手持ち6匹目
②=[ ]=0x00:技1番目
③③=[終終]=0xFFFF:全振り用の技

<参考>
https://wikiwiki.jp/pokemonhack/技コード


・出会った場所変更

<要素>
[X⑴⑴②]

cD2[X]により、手持ち⑴⑴匹目の出会った場所をマップ名ID②に変更する。
⑴⑴にはイベント変数を利用可能だが、有用性はない。

<例>
ボックス名1:[Xい び]
⑴⑴=[い ]=0x0002:手持ち3匹目
②=[び]=0x47:マボロシ島

<参考>
https://m.bulbapedia.bulbagarden.net/wiki/List_of_locations_by_index_number_(Generation_III)


・マボロシ島出現判定値変更

<要素>
[にやぞ①①]

c16[に]により、マボロシ島出現判定値であるイベント変数0x4024[やぞ]に任意の値①①を代入する。
代入した値①①と手持ちポケモンの性格値下位2バイトが一致していればマボロシ島が出現する。

<例>
ボックス名1:[にやぞ  ]
①①=[  ]=0x0000

0x0000[  ]を代入すれば、汎用コード環境用のフシギダネ2匹の性格値下位2バイトがどちらも0x0000であり一致するので、このフシギダネどちらかを手持ちに加えればマボロシ島が出現する。


・日替わりイベント開催

<一覧>
・頑張り屋半額セール
ボックス名1:[にfぱあい]

・ゲームコーナーサービスデー
ボックス名1:[にfぱいい]

・掘り出し市
ボックス名1:[にfぱうい]

・ブレンド名人
ボックス名1:[にfぱえい]

c16[に]により、イベント変数0x4BDA[fぱ]に対応する日替わりイベントの値を代入して、そのイベントを開催させる。
複数開催させる場合は、イベント変数0x4BDC[hぱ],0x4BDE[jぱ],0x4BE0[lぱ]を使用して追加する。
0x0000[  ]を代入すれば中止となる。


・改良型タマゴバグ

<一覧>
・性格値上位2バイト+0x4000
ボックス名1:[ぬぐオ ぞ]

・性格値上位2バイト−0x4000(+0xC000)
ボックス名1:[ぬぐオ F]

・裏ID+0x4000
ボックス名1:[ぬごオ ぞ]

・裏ID−0x4000(+0xC000)
ボックス名1:[ぬごオ F]

ボックス1/1番目:材料ポケモン

ボックス1の1番目に配置したポケモンの性格値上位2バイトがイベント変数0x5539[ぐオ]、裏IDが0x553B[ごオ]であり、c17[ぬ]によりこれらに0x4000[ ぞ]や0xC000[ F]を加算することで、タマゴバグにおける性格値や裏IDの破損を再現する。
従来との違いは、0x4000をXORするのではなく加算/減算することであり、より柔軟に性格値や裏IDを変化させることが可能。
組み合わせによりダブルコラプションも再現可能で、努力値全能力全振りポケモン等の生成に役立つ。
扱いは難しいが、応用で性格値下位2バイトや表IDを破損させることも出来る。


・育て屋タマゴ任意性格値指定

<要素>
[にbぺ①①ああビ]
[にcぺ②②]
+
[ぬbぺ❶❶],[ぬcぺ❷❷]

育て屋で見つかるタマゴの性格値下位2バイトがイベント変数0x4ED6[bぺ]、上位2バイトが0x4ED7[cぺ]であり、c16[に]によりこれらに任意の値①①,②②を代入することで、任意の性格値のタマゴを生成させる。
使用出来ない文字コードの値を指定する場合は、以下のようにコードを分解し、c17[ぬ]を併用して①①,②②に❶❶,❷❷を加算する形で、使用出来る文字同士を足し合わせることで対応する。

B7[円],B8[.],B9[×] = B0[…] + 07[き],08[く],09[け]
EF[▼]〜FF[終] = E0[l] + 0F[そ]〜1F[ま]

<例>
ボックス名1:[にbぺTlああビ]
ボックス名2:[にcぺ。jああビ]
ボックス名3:[ぬbぺ は]
①①=[Tl]=0xE0CE
②②=[。j]=0xDEAD
❶❶=[ は]=0x1A00
①①+❶❶=0xE0CE+0x1A00=0xFACE
→性格値:0xDEADFACE

FA[続]のように使用出来ない文字コードは、E0[l]と1A[は]に分解して、c17[ぬ]の併用により足し合わせて対応する。


・手持ちポケモン選択NN変更

<定型>
ボックス名1:[Lいす    ビ]
ボックス名2:[おネふいい]
ボックス名14:[ゆポ らゆペ ]
※[ペ]は片仮名

手持ち選択画面を開いてポケモンを選択し、その後NN変更画面に移行して、選択したポケモンのNNを強制的に変更させる。
手持ち選択時にキャンセルをするとボックス2の24番目付近のポケモンが破損するので注意が必要。


・手持ちタマゴ選択孵化

<定型>
ボックス名1:[Lいす    ビ]
ボックス名2:[おネふいい]
ボックス名14:[ゆポ らゆH ]

手持ち選択画面を開いてタマゴを選択し、その後孵化ムービー画面に移行して、選択したタマゴを強制的に孵化させる。
タマゴではないポケモンを選択すると、そのポケモンを孵化することになりLv5に再生成される。
手持ち選択時にキャンセルをするとボックス2の24番目付近のポケモンが破損するので注意が必要。





【プログラムメイン系】
ボックス名5以降に記述したプログラムコードが主体の任意コードの一覧である。
プログラムコードを実行する為に、ボックス名1には以下のようにスクリプトコード[もけぬうい]を入力していることが前提となる。

<定型>
ボックス名1:[もけぬうい]


・裏ID特定

<形式>
ボックス名5:[かぶ ノうべけギ]
ボックス名6:[アだゥぃBFC]
ボックス名7:[アアセぢいい]
ボックス名8:[アlコ う]
手持ち3匹目:裏IDを特定したいロムのポケモン

手持ち3匹目のポケモンの裏IDをトレーナーカードのID表示部に表示させることで、可視化した裏IDを確認出来る。
自己産のポケモンは勿論他人産のポケモンでも調べられるので、他ロムの裏IDの調査も可能。
ただし、仕組みとしては表IDを変化させるプログラムであるので、コード実行後にそのままレポートを書いてしまうと表IDが変更されたままになるので注意が必要。


・ID変更

<形式>
ボックス名5:[かッンNテぞけノ]
ボックス名6:[アぱゥひし l]
ボックス名7:[ゴゥぃBFC]
ボックス名8:[アlコ う]
ボックス名9:[①②③④❶❷❸❹]

①②で指定した値の表ID、③④で指定した値の裏IDに変更する。
❶❷❸❹は基本的に00[ ]を入力するが、①②③④に使用出来ない文字コードの入力が必要になった時に、その文字コードを以下のように使用出来る文字コード2つに分解し、片割れを対応する位置に入力する。

B7[円],B8[.],B9[×] = B0[…] + 07[き],08[く],09[け]
EF[▼]〜FF[終] = E0[l] + 0F[そ]〜1F[ま]

<例>
ボックス名9:[XえTl   は]
①②=[Xえ]=0x04D2
③④=[Tl]=0xE0CE
❶❷=[  ]=0x0000
❸❹=[ は]=0x1A00
①②+❶❷=0x04D2+0x0000=0x04D2:表ID01234
③④+❸❹=0xE0CE+0x1A00=0xFACE:裏ID64206


・TN変更

<形式>
ボックス名5:[かッンNけノねG]
ボックス名6:[アぃBFC]
ボックス名7:不問
ボックス名8:[アlコ う]
ボックス名9:[①②③④⑤⑥⑦]

ボックス名9に入力した文字列のTNに変更する。
指定出来る文字数は最大7文字までであり、8文字目まで入力するとトレーナーカード等にクラッシュなどの不具合を生じるようになるので注意が必要。


・主人公性別・容姿変更

<形式>
ボックス名5:[かぶ ノ@むあメ]
ボックス名6:[アぃBFC]
ボックス名7:不問
ボックス名8:[アlコ う]

@に入力した文字コードによって主人公の性別・容姿を変更する。
正規値は男主人公の0x00[ ]、女主人公の0x01[あ]の2パターンのみとなる。
それ以外の値を入力するとその他のシンボルに容姿を変更出来るが、不正値故に不具合が生じることがあるので注意が必要。

<参考>
https://plaza.rakuten.co.jp/kazanliyuu/4016/?iphone=pcpage


・任意ポロック生成

<形式>
ボックス名5:[かッンNOネくめ]
ボックス名6:[アついぶぇ l]
ボックス名7:[アねねGぃBFC]
ボックス名8:[アlコ う]
ボックス名9:[色辛渋甘苦酸滑う]

ボックス名9の各項目で指定したパラメータのポロックをポロックケース内の1番目に生成(上書き)する。
使用出来る文字コードの都合上、指定出来るパラメータの最大値は各々238(0xEE[z])となるので、コンディションMAXを狙うなら最低2個の投与が必要となる。

<例>
ボックス名9:[せzzzzz う]
色=[せ]=0x0E:金色
辛,渋,甘,苦,酸=[z]=0xEE:238
滑=[ ]=0x00:0





【任意乱数値指定系】
ボックス名5以降に任意の乱数値を指定するプログラムコードを記述し、そのプログラムと、乱数を使用するスクリプトとを併用した任意コードの一覧である。
任意乱数値指定コードは以下の通りである。

<形式>
ボックス名5:[かッンNテぞさタ]
ボックス名6:[アぃBFC]
ボックス名7:不問
ボックス名8:[アlコ う]
ボックス名9:[①②③④❶❷❸❹]

①②③④で任意の乱数値を指定する。
❶❷❸❹は基本的に00[ ]を入力するが、①②③④に使用出来ない文字コードの入力が必要になった時に、その文字コードを以下のように使用出来る文字コード2つに分解し、片割れを対応する位置に入力する。

B7[円],B8[.],B9[×] = B0[…] + 07[き],08[く],09[け]
EF[▼]〜FF[終] = E0[l] + 0F[そ]〜1F[ま]

指定する乱数値については、特定の乱数調整ツールや以下のサイトにて検索可能。
・指定初期シードの各フレームの乱数値出力
http://2style.jp/bowline/ds/tool/random/rand2sta.html
・指定個体の使用乱数値出力及び乱数値逆算
http://2style.jp/bowline/ds/tool/random/inverse.html

スクリプトコード[もけぬうい]([もけぬ終い])で上記プログラムを実行し、その直後に乱数を使用するスクリプトを実行することで、そのスクリプトに使用される乱数値を特定のものにすることが出来る。
ただし、実際に使用される乱数値は、Emの場合ボックス名9で指定した乱数値seed[n]の[n+2]となるので、目的の乱数値をスクリプトに使用させるには目的の乱数値seed[n]の[n−2]の乱数値を指定する必要がある。


・任意ポケモンエンカウント

<形式>
ボックス名1:[あああああもけぬ]
ボックス名2:[い♀①①②③③ビ]
ボックス名3:[ゆぢあ]

種族①①、レベル②、持ち物③③のポケモンを任意の乱数値で個体生成し、その個体とエンカウントする。
種族の指定にイベント変数を利用出来ないので、使用出来ない文字コードを含む種族コードのポケモンとはエンカウント出来ない。
また、個体生成は現状メソッド1のみで、他のメソッドを使用することは出来ない。

<例>
・スクリプト
ボックス名2:[い♀ャ ト  ビ]
①①=[ャ ]=0x0084:メタモン
②=[ト]=0x64:Lv100
③③=[  ]=0x0000:なし

・プログラム
ボックス名9:[にlLz ぬ  ]
①②=[にl]=0xE016
③④=[Lz]=0xEEC6
❶❷=[ ぬ]=0x1700
❸❹=[  ]=0x0000
①②+❶❷=0xE016+0x1700=0xF716
③④+❸❹=0xEEC6+0x0000=0xEEC6
→指定乱数値:0xEEC6F716
→目標乱数値:0x91A90F70

上記の指定により、乱数値0x91A90F70により生成されるLv100素直6Vメタモンとエンカウントする。

<参考>
https://m.bulbapedia.bulbagarden.net/wiki/List_of_Pokémon_by_index_number_(Generation_III)


・任意ポケモンイベント入手

<形式>
ボックス名1:[あああああもけぬ]
ボックス名2:[い ル⑴⑴②⑶⑶]

種族⑴⑴、レベル②、持ち物⑶⑶のポケモンを任意の乱数値で個体生成し、その個体をイベント入手する。
種族や持ち物の指定にイベント変数を利用出来るので、使用出来ない文字コードを含む種族コードのポケモンでもc16[に]とc17[ぬ]の併用により指定することが出来る。
こちらも個体生成は現状メソッド1のみで可能。
また、イベント入手したポケモンはモンスターボール入りで固定となるので、他のボールに入れる場合は、手持ちポケモン野生出現コードで野生出現させ、RSのボール交換バグの要領で捕獲によりボールを交換する。

<例>
・スクリプト
ボックス名1:[に ぞl   ビ]
ボックス名2:[ぬ ぞひ もけぬ]
ボックス名3:[い ル ぞお  ]
⑴⑴=[ ぞ]=0x4000:イベント変数0x4000
→イベント変数0x4000=[l ]+[ひ ]=0x00E0+0x001B=0x00FB:セレビィ
②=[お]=0x05:Lv5
⑶⑶=[  ]=0x0000:なし

・プログラム
ボックス名9:[Qトゅl   と]
①②=[Qト]=0x64CB
③④=[ゅl]=0xE035
❶❷=[  ]=0x0000
❸❹=[ と]=0x1400
①②+❶❷=0x64CB+0x0000=0x64CB
③④+❸❹=0xE035+0x1400=0xF435
→指定乱数値:0xF43564CB
→目標乱数値:0xD07CF0AD

上記の指定により、乱数値0xD07CF0ADにより生成されるLv5臆病5VA7セレビィをイベント入手する。

<参考>
https://m.bulbapedia.bulbagarden.net/wiki/List_of_Pokémon_by_index_number_(Generation_III)


・フラグ付きポケモンエンカウント

<形式>
ボックス名1:[にえィ①①  ビ]
ボックス名2:[におィ②②  ビ]
ボックス名3:[にかィ③③もけぬ]
ボックス名4:[いゆkあゆがあ]

種族①①、レベル②②、持ち物③③のフラグ付きポケモンを任意の乱数値で個体生成し、その個体とエンカウントする。
種族の指定はイベント変数0x8004[えィ]で行うので、c17[ぬ]と併用することで使用出来ない文字コードを含む種族コードのポケモンも指定することが出来る。
因みに、Emに出現するフラグ付きポケモンは、孤島ラティ,ミュウ,デオキシス,ルギア,ホウオウの以上である。

<例>
・スクリプト
ボックス名1:[にえィビ   ビ]
ボックス名2:[におィほ   ビ]
ボックス名3:[にかィジ もけぬ]
ボックス名4:[いゆkあゆがあ]
①①=[ビ ]=0x0097:ミュウ
②②=[ほ ]=0x001E:Lv30
③③=[ジ ]=0x008D:ラムの実

・プログラム
ボックス名9:[ゲィr♀    ]
①②=[ゲィ]=0x808A
③④=[r♀]=0xB6E6
❶❷=[  ]=0x0000
❸❹=[  ]=0x0000
①②+❶❷=0x808A+0x0000=0x808A
③④+❸❹=0xB6E6+0x0000=0xB6E6
→指定乱数値:0xB6E6808A
→目標乱数値:0x82B03804

上記の指定により、乱数値0x82B03804により生成されるLv30陽気5VC0ミュウ@ラムの実とエンカウントする。
戦闘BGMは自動でミュウ専用のものに切り替わる。

・スクリプト
ボックス名1:[にえィl   ビ]
ボックス名2:[ぬえィは   ビ]
ボックス名3:[におィば もけぬ]
ボックス名4:[いゆkあゆがあ]
①①=[l ]+[は ]=0x00E0+0x001A=0x00FA:ホウオウ
②②=[ば ]=0x0046:Lv70

・プログラム
ボックス名9:[っニば6    ]
①②=[っニ]=0x6650
③④=[ば6]=0xA746
❶❷=[  ]=0x0000
❸❹=[  ]=0x0000
①②+❶❷=0x6650+0x0000=0x6650
③④+❸❹=0xA746+0x0000=0xA746
→指定乱数値:0xA7466650
→目標乱数値:0x3D8A923A

上記の指定により、乱数値0x3D8A923Aにより生成されるLv70意地っ張り5VC24ホウオウとエンカウントする。
戦闘BGMは自動でカントー伝説系のものに切り替わる。

<参考>
https://m.bulbapedia.bulbagarden.net/wiki/List_of_Pokémon_by_index_number_(Generation_III)


・育て屋タマゴ受け取り

<形式>
ボックス名1:[あああああもけぬ]
ボックス名2:[いおリラゆく]

育て屋に預けたポケモンの進化系初期形態のタマゴを任意の乱数値で個体生成し、それを手持ちに加える。
事前に育て屋タマゴ任意性格値指定コードを実行していれば、指定した性格値のタマゴが受け取れる(未指定だと性格値0x00000000(頑張り屋)のタマゴとなる)。
このコードでは、育て屋にメタモン+αと預けることで、伝説ポケやメタモン(α=メタモン)などのタマゴ未発見グループのタマゴも入手可能。

<例>
・プログラム
ボックス名9:[ュWソは    ]
①②=[ュW]=0xD185
③④=[ソは]=0x1A5F
❶❷=[  ]=0x0000
❸❹=[  ]=0x0000
①②+❶❷=0xD185+0x0000=0xD185
③④+❸❹=0x1A5F+0x0000=0x1A5F
→指定乱数値:0x1A5FD185
→目標乱数値:0xBEFF6CF7

上記の指定により、乱数値0xBEFF6CF7(73781F)により生成される個体値31-後-後-31-先-31のポケモンのタマゴを入手する。
先親と後親の個体値の組み合わせにより、6Vや5VA0、めざ氷理想個体などに出来る。





【その他混合系】
スクリプトコードとプログラムコードをそれぞれ駆使して構成された任意コードの一覧である。


・手持ちポケモン野生出現

<定型>
・スクリプト
ボックス名1:[もけぬういゆぢあ]

・プログラム
ボックス名5:[けぶくべぇめさk]
ボックス名6:[アぃBFC]
ボックス名7-8:不問
ボックス名9:[tづいいクぢいい]
手持ち3匹目:野生出現させる個体

手持ち3匹目のポケモンを野生ポケモンとして出現させる。
出現させる個体が自己産のポケモンであれば、RSのボール交換バグの要領で捕獲することが出来、捕獲したポケモンを元の個体とは別に入手出来る。
捕獲した個体はボールとTN以外のデータは全て引き継がれる。


・セーブデータ複製

<定型>
・スクリプト
ボックス名1:[ぉ      ビ]
ボックス名2:[りあ もけぬうい]

・プログラム
ボックス名5:[ むえぱはギのィ]
ボックス名6:[アつぶ べうl]
ボックス名7:[ァ  い えあタ]
ボックス名8:[アあネあぐ l]
ボックス名9:[あタ るてWはィ]
ボックス名10:[アミばガば]
ボックス名14:[アosVbうい]

このコードを実行したロムのセーブデータを他のロムに複製する。
セーブデータ複製の詳細については考案者であるぼんじりさんのブログを参照していただきたい。
https://bzl.hatenablog.com/entry/2019/07/20/025151


・実機バイナリエディタ起動

<定型>
・スクリプト
ボックス名1:[あああああもけぬ]
ボックス名2:[いりぃ  もむV]
ボックス名3:[いら]

・プログラム
ボックス名5:[げッャむけいぞは]
ボックス名6:[アけべほめ l]
ボックス名7:[つあさkぃBFC]
ボックス名8-9:不問
ボックス名10:[アアアみVうい]

ぼんじりさん考案のEm用実機バイナリエディタを汎用コードを使用して起動する。
実機バイナリエディタの詳細については考案者であるぼんじりさんのブログを参照していただきたい。
https://bzl.hatenablog.com/entry/2019/09/29/182642



スポンサーサイト



コメント

コメントの投稿

非公開コメント