SSブログ

メイプルのことがんばって更新します。たまに他のことも更新

ポケモンROM改造 ブログトップ
前の10件 | -

ROM改造記事まとめ [ポケモンROM改造]

nice!(0)  トラックバック(0) 
共通テーマ:ゲーム

音楽変更のキワミ ~ポケモンで流れている音楽を変更する~ [ポケモンROM改造]

音楽変更のキワミ ~ポケモンで流れている音楽を変更する~

------------------------------------------------------------------------------------------------------
これは、sappy2006とMidi2gbaを使い、ポケモンで流れている音楽を変更するためのまとめです。

※不具合が起こる可能性もあるので、音楽変更をする前に必ずROMのバックアップをとりましょう。
※本書は音楽変更の基本事項のみ記載しています。もっと専門的な事を知りたい方は、他をあたってください。
音楽変更、ループ設定などの代行は一切行いません。予めご了承ください。 by Ealgrete

------------------------------------------------------------------------------------------------------
目次

基本編
・インストール、設定
・音楽の置き換え方法

知識編
・音色の改善方法
・ゲーム内で流れている途中でおかしくなる事の改善方法
・ループ設定

応用編
・音楽枠追加方法
・追加した枠に音楽を入れる方法

・Q&A
・付録 FRのボイスオフセット一覧、SongTableに並べられているデータについて
・最後に

------------------------------------------------------------------------------------------------------
~基本編~

インストール、設定

音楽変更を行う為に、以下のものが必要になってきます。各自でご用意ください。
・sappy2006
・Midi2gba
・Midi
・ROM(バックアップ必須)
・諦めない心と日本語が理解できる力


sappy2006(以下sappy)を普通にインストールします。
sappyを少し改変しないと日本語ROMは読み込めないので、インストール後にその設定を行います。
(既に設定済みなら、省略してください)

sappyにROMを読み込ませます。
すると「The game you loaded(gamecode ****) is not known.Would you like to scan for the song table now?」
(ソングテーブルを検索するかどうか)アラートが表示されるのでOKをクリック。

しばらくすると検索が終了するので、検索されたオフセット(0x******)を何かにメモしておきます。

その後、いったんsappyを閉じて同フォルダ内にあるsappy.xmlをメモ帳等で開き、xmlを編集します。
その中に自分が読み込ませたいゲームの名前(Pokemon Fire Red等)を検索するなどして見つけ出し、
ヒットした文字列の上の行にある</rom>という部分から</playlist>までコピーし、その下に貼り付けます。
上に戻り、rom codeとsongtableを編集。
(rom codeは語尾の[E]を[J]に変える。songtableは先ほどメモした数字を入力する)
最後にxmlを上書き保存して終了です。

なお、元々sappyのxmlに含まれているデータはルビー、ファイアレッド、エメラルドだけです。
サファイアやリーフグリーンで読み込ませる場合、
サファイアはルビーのデータを、リーフグリーンはファイアレッドのデータをそれぞれ流用してください。

以上の準備ができたら、sappyで音楽を置き換えます。

------------------------------------------------------------------------------------------------------
音楽の置き換え方法

midi2gbaを解凍、その後、置き換えたいMidiファイルをMidi2GBAのフォルダ内に入れてください。
そして、mid2agbという実行ファイルにMidiをD&Dしてください。sファイルが作られます。

sappyでROMを開いた後、左メニューのAssemble songをクリックします。
表示されたダイアログで生成された.sファイルを選択、Base destination offset に
「Location」とある部分のすぐ下にあるオフセット(一番上の)を入力し、
Assemble that ugly thing! を選択してしばらく待つ。

※Base destination offsetに入力するオフセットを空き領域に指定すると、他の曲に影響が及びません。

すると「Done.Do you want to set the proper entry in the Song Table?」
と表示されるので「はい」を選択。以上で終了です。

後は実際にエミュレータで動作確認してみてください。音楽が流れていれば成功です。

------------------------------------------------------------------------------------------------------
~知識編~

音色の改善法

音楽は置き換えられるものの、音色がピコピコになってしまうという場合があります。
これは主人公が壁にぶつかったりすると途切れてしまうので、主旋律がピコピコでは話になりません。
それなら、DominoなどのMidi編集ソフトでMidiを再編集しましょう。
まず、曲をMidiファイルに保存してMidi編集ソフトで開いてください。
各パートが使っている音源がわかるはずです。

そして、実際に置き換える音楽の各パートの楽器をマサラの方で使われている楽器の音色にあわせて変更します。
最後に、編集したMidiをsファイルにして、通常通り置き換えてみてください。
ピコピコ感はなくなり、まともになっているはずです。

補足事項
インポートする際に設定可能なVoicegroupを別のオフセットに変更すると、他の曲の音源を使うことができます。
そうすれば、自由自在に音色を変更する事が可能になります。

(FRのボイスオフセットを付録としてテキストの最下部に記載しています)

------------------------------------------------------------------------------------------------------
ゲーム内で流れている途中でおかしくなる事の改善方法

エミュレータで確認していると、再生途中でフリーズしてしまう場合があります。
これは、Midiの「曲のタイムベース(分解能)の数値が高すぎる」可能性が考えられます。

タイムベースが「480」や「960」だと、
エフェクトが多い部分で処理が追いつかず、フリーズしてしまう場合があります。
Dominoでは、「ファイル」→「曲のプロパティ」でタイムベースの設定がいつでも可能です。

タイムベースの数値を低くしても曲自体の変化はあまりないので、
数値を低くしてからのインポートをオススメします。

------------------------------------------------------------------------------------------------------
ループ設定法

ゲーム内では、音楽は永遠にループしています。しかし、普通に音楽を置き換えてもループはしません。
ループをさせる場合には、sファイルの編集が必要となってきます。
そこで今回オススメするのが、「LoopMaker」というソフト。
Kaway氏が製作したソフトで、その名の通り「ループを作る」ソフトです。
ループの開始地点と終了地点のトラックをそれぞれ指定、[ループ作成]でループを作ることができます。
非常に便利なソフトなので、ぜひ活用してください。

ダウンロードはこちらから↓
ttp://www.sendspace.com/file/60jyon
(広告が出てきますが、気にしないでください)

ちなみに、ループの仕組みはこのようになっています。
まず、sファイルをメモ帳などで開くと以下のような感じになっていると思います。

@**************** Track 1 (Midi-Chn.1) ****************@
ファイル名_3:
.byte KEYSH , ファイル名_key+0
@ 000   ----------------------------------------
.byte TEMPO , 154*ファイル名_tbs/2
.byte W16
.byte VOICE , 1
.byte VOL   , 127*ファイル名_mvl/mxv
.byte PAN   , c_v+0
------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~
------------------------------------------------
@ 030   ----------------------------------------
.byte FINE

@**************** Track 2 (Midi-Chn.2) ****************@

そして、ループさせたい任意の部分に
.byte GOTO
.word ファイル名_トラック番号_loop
という風に記してください。

@**************** Track 1 (Midi-Chn.1) ****************@
ファイル名_3:
.byte KEYSH , ファイル名_key+0
@ 000   ----------------------------------------
.byte TEMPO , 154*ファイル名_tbs/2
.byte W16
.byte VOICE , 1
.byte VOL   , 127*ファイル名_mvl/mxv
.byte PAN   , c_v+0
------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~
------------------------------------------------
@ 030   ----------------------------------------
.byte GOTO
.word ファイル名_1_loop
.byte FINE

@**************** Track 2 (Midi-Chn.2) ****************@

これは「ファイル名_1_loop」という言葉がある場所に行きなさい、という命令スクリプトです。
後は入力した部分から手前のループしたいところ(★とある場所だとする)

@**************** Track 1 (Midi-Chn.1) ****************@
ファイル名_3:
.byte KEYSH , ファイル名_key+0
@ 000   ----------------------------------------

.byte TEMPO , 154*ファイル名_tbs/2
.byte W16
.byte VOICE , 1
.byte VOL   , 127*ファイル名_mvl/mxv
.byte PAN   , c_v+0
------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~
------------------------------------------------
@ 030   ----------------------------------------
.byte GOTO
.word ファイル名_1_loop
.byte FINE

@**************** Track 2 (Midi-Chn.2) ****************@

に、このように↓入力してやってください。

@**************** Track 1 (Midi-Chn.1) ****************@
ファイル名_3:
.byte KEYSH , ファイル名_key+0
@ 000   ----------------------------------------
ファイル名_1_loop:
.byte TEMPO , 154*ファイル名_tbs/2
.byte W16
.byte VOICE , 1
.byte VOL   , 127*ファイル名_mvl/mxv
.byte PAN   , c_v+0
------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~
------------------------------------------------
@ 030   ----------------------------------------
.byte GOTO
.word ファイル名_1_loop
.byte FINE

@**************** Track 2 (Midi-Chn.2) ****************@


これを他のトラックも同様に設定します。
(他のトラックの場合「ファイル名_2・・・」のように変わっていくので注意してください。)

すべてのパートの設定が終わったら、最後にsappyで置き換えて、再生してみましょう。
問題なくループしている事を確認したら、エミュレータでの確認も忘れずに。

※各パートのループ位置を統一しないと、ループした時にパートがバラバラになってしまうので注意。

------------------------------------------------------------------------------------------------------
~応用編~

音楽枠増加方法

※バイナリエディタ必須。

まず、sappy2006でROMを開く。そうしたら、音楽データの先頭オフセットにバイナリで飛ぶ。
そこに目印を付けておいて、そこから「00 00 00 00 00 00 00 00」で検索をする。
ヒットした部分の最後部にも目印を付けておく。
先ほどつけた目印から最後部の目印までのデータをコピーする。
コピーした物を適当な空き領域に貼り付ける。(下に十分余裕がある場所にしてください)
そうして、最初につけた目印のオフセットを逆順で検索。
ヒットした部分を貼り付けたデータの先頭オフセットに変えてやる(複数あるので、全て変えてください)
貼り付けたデータの最後部に32バイト分「00」を追加する。

以上です。

※sappyで読み込む際には、xmlファイルの編集が必要です。

------------------------------------------------------------------------------------------------------
音楽を追加する方法

(上記の枠増加を行っていること前提)
「おしえテレビ」の後ろ部分を選択し、Assemble songやImport tracksで入れてやるだけです。
(ヘッダーなどのオフセットは常に空き領域オフセットを指定してください)

なお、音楽番号は「おしえテレビ」が「5A01」なので、
音楽変更スクリプトなどで追加した音楽は「5B01」以降の音楽番号が自動的に振られます。

------------------------------------------------------------------------------------------------------
Q&A

Q.置き換えようとすると「not found MPlayDef.s」みたいなのが出てきて置き換えられない。
A.sファイルはMidi2GBAのフォルダ内に入れておかなければなりません。(MPlayDef.sがあるため。)
 Midi2GBAのフォルダのショートカットを作っておくと、なにかと便利かも。


Q.音楽をmidiファイルに保存できない。
A.sappy2006ではできないので、Bouche氏が作った「Sappy」(2006とは違います)で保存しましょう。
 ただし、それで保存したmidiがsファイルに変換できない場合があります。
 操作方法などは各自で調べてください。


Q.ちゃんとインポートできたのに、たまに「ブー」という音がなってしまう。
A.鳴らしている音の高さが高すぎるか低すぎるものがあります。
 高い音はC9以上。低い音はC2以下(又はC1以下)にすると、こうなります。
 1オクターブ上げたり下げたりするなどの工夫をしましょう。


Q.sappyでは流れるのに、ゲームでは流れない!
A.次のようにやってみてください。
準備するもの:ゲームでは流れない音楽が含まれているROM(Aとする)
       音楽を変えていないROM(Bとする)

まず、Aをsappyで開き、流れない曲を選択します。そして、左側にあるメニューバーから
Export tracksを選択。1の所はすべてチェックを入れておいて、2のところは『$P』か『$T』のどっちかを入力する、
と書いてあるので、どちらかを入力してそれでOKを押します。
(『$T』だとファイル名がトラックの数字になり、『$P』だとファイル名がそれぞれのトラックの開始地点の
オフセット名になります。)
するとAの入っているフォルダ内に数字のファイル($Tの場合)が生成されたはずです。

次にBをsappyで開き、置き換えたい曲を選択します。そして、今度はImport tracksを選択します。
そして、先ほど生成されたファイルすべてにチェック。(Bの入っているフォルダ内にそれらのファイルを移しましょう)
チェックしたらOKを押す。それで置き換えられるので、最後にはいを選択。以上で完了です。
できたら、エミュで確認してください。今度こそ、きちんと再生されたはずです。


Q.置き換えた曲の次の曲が変になったんだけど・・・。
A.元々あった曲より置き換えた曲のほうが長い場合に起こるようです。
 (パートの数が多いとかでも、おかしくなります)
 どうしても入れたい場合は、空き領域に書き込みましょう。


Q.ループしたら聞き覚えの無い音がした!
A.ループした部分が「音ののばしている部分」だと、誤って再生されてしまいます。
 (これはタイやスラーの部分でも同じ現象が起きるようです)
 sappy2006で再生しても確認できないので、実際のゲームで確かめてください。


Q.音が途中でずれていくんだけど
A.短い音(例えば32分音符とか)を多用すると、ずれてしまう事があるようです。


Q.ドラムが流れない!
A.先述した方法でもダメでしたら、こちらを確認してください。

・ドラムパートの最初にProgram Changeが入っていますか。これが無いと音色を設定していないので、当然流れません。
・他パート数が多すぎると、音が消えてしまうことがあります。
・ピアノ音になる場合は、ドラムのチャンネルを10にしましょう。それで大丈夫だと思います。

 なお、ドラムのどれがちゃんと鳴るかは各自で調べてください。


Q.音楽拡張したら、音が鳴らなくなったんだけど・・・
A.何処かミスがある可能性が高いです。入力ミスがないか確認してください。


Q.エメラルドの音楽をファイアレッドに移せない?
A.先述したExpoet tracksなどを使うやり方で可能です。
 楽器に関する問題は他の方が解析しているので、記載しません。


Q.インポートしたら、インポートした曲又はゲームがおかしくなった。
A.それはインポートした場所がインポートした曲との相性が悪かったからだと思われます。
なので、インポートする際は必ずバックアップを取りましょう、としか言いようがありません。


Q.テキストファイルだけじゃ意味わかんないんだけど?
A.希望があれば、html Document版も作ります。


------------------------------------------------------------------------------------------------------
付録
FRのボイスオフセット

それぞれの音楽で指定されているオフセットで使用できる楽器のまとめ。
これらはいくらでも流用する事ができるので、自由に音源を使うことができます。
数字はMSGS音源参照。

0x44F7F0 047,059,048,057,074,002,014
0x44FCB8 048,061
0x4500B4 049,057,061,002,046,034,081,083,084,05,085,091,048,018
0x4504F8 018,049,061,057,034,048,002
0x45093C 002
0x4545B4 002,003,025
0x454BB4 057,074,015,048
0x4551B4 039,049,015,079,025,018,002,030,057,031
0x4557B4 061,049,048,057,
0x455BEC 022
0x455FD0 002,030,031,039,063
0x4565D0 061,048,049,015,057,059
0x456BD0 049,018,025
0x4571D0 018,025,049,079,021,022,074,002
0x4577D0 081,082
0x457800 022,002,081,057,014,074,049
0x457E00 039,025,018
0x4581F0 002,025,018,049
0x4587F0 018,019,039,002
0x458DF0 025,018,
0x4593F0 014,025,049,002,079
0x4599F0 002,049,025
0x459DE0 040,014,059,049,015
0x45A3E0 074,049,059,047,010,057,048,061,014,015,002
0x45A83C 002,079
0x45AE3C 049,057,048,061
0x45B25C 018,025,061,048,015,049
0x45B85C 049,061,057,048,047,015,074
0x45BE5C 048,059,049,015,061
0x45C2B8 018,048,030,025,049,063,031,006,061,005,015
0x45C8B8 018,030,063,022,061,121,057,049
0x45CEB8 034,025,018,049
0x45D4B8 054,030,005,063,048,025,002,061,032,057,049,031,015
0x45DAB8 006,081,084,025,082,049,036,015,128
0x45E0B8 049,025,036,015,082,081
0x45E4D8 002,059,074,022,015,049,082,081,128,127
0x45EAD8 005,018,082,049,034,015,081,093,032
0x45EF34 002,005,006,074,025,093,082,049,081,128,127
0x45F534 005,025,049,074,006,081,047,093,082,013,018
0x45FB34 018,002,025,076,049,082,001,074
0x460134 082,081,093,036,063,032,049,025,018,128,127
0x460734 018,025,022,081,082,057,085,128,127
0x460D34 049,074,061,081,082,046,057,018
0x461334 057,018,059,036,076,084,081,083,082,128,127,074,048
0x461934 074,057,048,059,083,081,084,082,061,049,046
0x461D24 057,074,061,049,046,091,082,090,085,083,048
0x462168 049,025,074,018,081,188,082,0107,093,128,127
0x462768 081,026,025,002,018,049,084,082,093,128,127
0x462D68 002,083,081,082,031,039,093,128,127
0x4634C4 081,082,088,014,025,061,057,003,006,128,127,047,074,048,059,083
0x463DAC 081,082,025,014,061,057,088,003,006,128,127,047,074,048,059,083
0x4641CC 061,057,088,081,082,003,006,005,128,127,047,074,048,059,083
0x4645EC 002,006,005,128,127,047,081,074,057,048,059,083
0x464BEC 047,081,002,074,057,048,059,083
0x464E20 001,057,059,049,048,082,061,025
0x465240 025,036,001,128,127
0x466848 061,049,002,082,093,081,025,128,127
0x466E48 082,025,018,049,081,093,128,127
0x467448 082,025,049,083,093,001,128,127
0x465C48 088,081,032,034,082,063,108,015,058,128
0x465840 039,081,082,086,032,015
0x466248 002,082,128

若干抜けているものがあるかもしれません。
記載しているものでも正常に流れない可能性があるので、
その辺りは各自で調べてみてください。


SongTableに並べられている音楽(効果音含む)のデータについて

SongTableに並べられているデータは8バイトで一つのデータとなっています。

HH HH HH 08 ** 00 ** 00

HH HH HH:Headerのオフセット。
**
00:通常の音楽
01:技用の効果音
02:マップ上での効果音(マップ切り替えを行わない限り、鳴り続けている)

HH HH HHのオフセット先にあるデータは、こうなっています。

++ 00 -- 00 VV VV VV 08 LF LF LF 08.....

++:不明。技の効果音だと01 普通の効果音だと07 普通の音楽だと05となっている。
--:不明。効果音系は05 BGM系だと00になっている。
VV VV VV:VoiceOffset
LF LF LF:Locationの一番上のパートのデータが格納されているオフセット。
パートの数だけこれは増えていきます。

------------------------------------------------------------------------------------------------------
最後に

最初は自分で何とかしてみようと努力すること。
それと先述しましたが、本書では基本事項しか説明していません。
その他高度な技術については、他の方が執筆されたまとめをご覧ください。

貴方の作品がより良いものになる事を心より祈っております。

------------------------------------------------------------------------------------------------------
by Ealgrete

nice!(0)  トラックバック(0) 
共通テーマ:ゲーム

超適当スクリプト集~動作の保障は絶対しない~ [ポケモンROM改造]

超適当スクリプト集~動作の保障は絶対しない~

基本LGでしか動作確認していないので間違ってたりする場合は
某避難所にでも書いてくれれば直すと思う。
まあ解決できる問題なら、の話だが。
25 ** ** 02まとめの方も合わせて見ると色々できるようになるかも。
by ERROR

--------------------------------------------------------------------------
■プログラムを作った事が無い人が読むと混乱するかもしれない補足

・人IDについて
人IDは単なるフラグだと考えて良い。
Javaで言うboolean変数みたいなもの。
ようするに「オブジェクト消去」や「オブジェクト復活」は
人IDにそれぞれfalse,trueの値を代入する操作だと考えれば良い。
ここでは一応便宜上、ゲーム中の人や物などの
オブジェクトが見えている状態をON,
見えていない状態をOFFと呼ぶ事にしている。

・フラグNOについて
AdvanceMapで確認した時にフラグNOの下に不明って
書いてある所があって、その部分にも数値が入力できますよね?
フラグNOは、C言語のunsigned short型みたいなもので、
フラグNOの下の不明の数値部分がそのフラグNOに格納された値か否かで
スクリプトが発動するかどうかが決まるわけです。
つまり、下記の「踏むと発動するスクリプトの復活、消去」は
フラグNOに値を代入する操作をしていると考えてください。

--------------------------------------------------------------------------
■記号の説明

●@@ @@ @@ セリフオフセット
●SS SS SS 別のスクリプトの先頭オフセット
●IS IS IS 商品のオフセット
●MV MV MV 移動コマンドのオフセット
●ss 任意のスクリプト
●$$ $$ アイテムコード
●II 個数
●** ** ポケモンコード
●## レベル
●hn 人NO
●hh hh 人ID(逆順で入力)
●tt tt 何も処理をしない時間
●mm mm飛ばすマップ(AMのマップ番号&マップNOを16進数に変換する)
●ww ワープNo(AMのワープNOを16進数で)
	一致するものがあればワープNOの場所に、一致するものがない場合は指定した座標にワープする
●++ マップのX座標
●-- マップのY座標
●xx 画像のX座標
●yy 画像のY座標
●MM MM パレットの番号(逆順で入力)
●mo 移動可、不可の設定 00なら可、01なら不可
●YY YY YY "はい"の時実行するスクリプトの先頭オフセット
●No "いいえ"の時実行するスクリプトを入力する
●Yes "はい"の時実行するスクリプトを入力する
●gg 画面全体に対するなんらかの効果
	00 暗転 01 真っ黒 02 フラッシュ 03 真っ白
●GG バッジの値
	(FR,LG)
	1個目 20 2個目 21 3個目 22 4個目 23
	5個目 24 6個目 25 7個目 26 8個目 27
	(RS)
	1個目 07 2個目 08 3個目 09 4個目 0A
	5個目 0B 6個目 0C 7個目 0D 8個目 0E
	(E)
	1個目 67 2個目 68 3個目 69 4個目 6A
	5個目 6B 6個目 6C 7個目 6D 8個目 6E
●>> 覚えさせたい技
	(FR,LG)
	00 メガトンパンチ 01 つるぎのまい
	02 メガトンキック 03 のしかかり
	04 すてみタックル 05 カウンター
	06 ちきゅうなげ   07 ものまね
	08 ゆびをふる     09 タマゴうみ
	0A ゆめくい       0B でんじは
	0C だいばくはつ   0D いわなだれ
	0E みがわり
●<< 交換するポケモン(pokemon_Synthesisの通信交換エディターを参考にする事)
●NO NO フラグNO(AMを参考にする事)
●ST ST フラグNOの下の値(AMを参考にする事)
●SK SK 技コード
●TT TT トレーナーの番号を逆順で入力(pokemon_Synthesisを参考にする事)
●KK KK KK KK 金額を逆順で入力
●KA kA コイン
●WW 天候(AdvanceMapの天候の項目を参考に上から00,01,…)
●WA WA ファンファーレ(文書じゃわかりにくいのでhttp://www.nicovideo.jp/watch/sm1676584)
	(FR,LG)
	00 01 ポケモンセンターの回復音
	01 01 アイテムを手に入れた時や技を覚えた時の効果音
	02 01 テンテレッテッテッテッテー
	03 01 テーテーテーテレテテッテテー
	04 01 ジムバッジ貰った時の音
	05 01 テッテテテーッテッテッテッテー
	06 01 テーレテテテテ

	0C 01 テレテテーテテテテーッテッ
	0D 01 テッテテテッテテテレテレレッ
	0E 01 テレレレレレテッテッテッテッテッテッテッ
	0F 01 テッテッテッテー

	3D 01 テレテレテレテレテッレッレー
	3E 01 テンテレテンテレテンテレテンテレテー

●MU MU 曲(Advance MapのHeader viewタブの所にあるSpecify欄を参考にしながら逆順に入力。)
	前に作った超適当なまとめ持ってる奴はそれを見ながらやってもいいかもね。
●Sh 移動先
	00 クチバシティ
	01 1の島
	02 2の島
	03 3の島
	04 4の島
	05 5の島
	06 6の島
	07 7の島
	08 グレン島
	09 臍の岩
	0A 誕生の島
●BH 選択した人物
	00 オーキド	01 ナナミ	02 タケシ	03 カスミ
	04 マチス	05 エリカ	06 キョウ	07 ナツメ
	08 カツラ	09 カンナ	0A シバ		0B キクコ
	0C ワタル	0D マサキ	0E フジ		0F サカキ
●BN 噂をしてる人(00~05)
●FP 最初に貰ったポケモン
	00 フシギダネ又はまだ何も貰っていない時
	01 ゼニガメ
	02 ヒトカゲ
●PO 4の島に預けたポケモン
	00 何も預けていない
	02 一匹だけ預けた
	03 二匹預けた
●co co 数字
●wo 予約語
●mt アクション(移動タイプ) AMを参考にする事
●mn メニュー番号
●e1 縦方向の揺れ幅
●e2 横方向の揺れ幅
●t1 揺らす時間
●t2 揺れる頻度(値が小さいほど何度も揺れる)
●ts タイルセット番号
●GN 画像No
●pc 全滅時の移動場所(ポケモンセンター)
	01 マサラタウン		02 トキワシティ		03 ニビシティ		04 ハナダシティ
	05 シオンタウン		06 クチバシティ		07 タマムシシティ	08 セキチクシティ
	09 グレンじま		0A セキエイこうげん	0B ヤマブキシティ	0C 4ばんどうろ
	0D 10ばんどうろ		0E 1のしま			0F 2のしま			10 3のしま
	11 4のしま			12 5のしま			13 7のしま			14 6のしま
●ac アクションタイプ
	00から大気モーションで下下上左右下下上上の順に並んでいる。
	一周すると今度は歩きモーションで同様に下下上左右下下上上の順に並んでいる。
	それが終わると走りモーションで(ry
●on オブジェクトナンバー


--------------------------------------------------------------------------
■スクリプト

●特定のマップに入った瞬間にスクリプトを発動させる場合のやり方
01 SS SS SS 08 00 02
上記のスクリプトの先頭オフセットを
マップヘッダーの数字の列の簡易まとめを見ながら
????????の部分に逆順で入力してやる。

●特定のマップに入った瞬間にスクリプトを発動させる場合のやり方
03 SS SS SS 08 00 02
上記のスクリプトの先頭オフセットを
マップヘッダーの数字の列の簡易まとめを見ながら
????????の部分に逆順で入力してやる。
01~とは違って暗闇や天候の変化等を即時繁栄させる
動作をしたような気がする。

●別のオフセットを参照
04 SS SS SS 08 02
・参照先のスクリプトは02ではなく03で終わらせる事

●別のオフセットへジャンプ
05 SS SS SS 08 02

●会話1
0F 00 @@ @@ @@ 08 09 02 02

●踏むと発動するスクリプトの復活、消去
16 NO NO ST ST 02
・NO NO、ST STが一致するスクリプトは復活する
・NO NOが一致してST STが異なるスクリプトは消去される
・具体的にはNO NOと言う番号にST STと言う値を代入する操作である。

●見つけた数に追加
16 04 80 ** ** 25 63 01 02

●ボイスチェッカー
16 04 80 BH 00 16 05 80 BN 00 25 73 01 02
・画像無しじゃ説明が難しい・・・。BHのキャラのBN番目の項目が参照可能になる。

●地震っぽいエフェクト
16 04 80 e1 00 16 05 80 e2 00 16 06 80 t1 00 16 07 80 t2 00 25 36 01 02
・画面が揺れます。
・最後の25 36 01の後ろに27を入れると揺れが収まるまで次の操作(スクリプト)に移行しない。

●手持ちの卵が孵る1
16 04 80 nn 00 25 C2 00 02
・手持ちのnn+1番目の卵が孵る
・卵じゃなくても孵る。その場合指定されたポケモンがLV5になる

●技教え
16 05 80 >> 00 25 8D 01 27 21 0D 80 00 00 06 01 SS SS SS 08 02
・SS SS SSは技を覚えなかった時に使うスクリプトの先頭オフセットを入力する
・セリフ→技教えの流れにしたい場合は67 @@ @@ @@ 08 09 04を最初に追加する事
・覚えさせたい技を変更する場合は下のように技コードで検索してそれを各自変更すればよい。
 05 00 0E 00 19 00 22 00 ←メガトンパンチつるぎのまいメガトンキックのしかかりの技コード
・ただポケモンが技教えで技を覚えるかどうかを変更する箇所が何処かわからん

●船に乗って指定したマップへ移動
16 06 80 Sh 00 25 7B 01 02
・クチバや七島に移動する。

●ポケモンの交換
16 08 80 << 00 19 04 80 08 80 26 0D 80 FC 00 19
09 80 0D 80 25 9F 00 27 19 0A 80 04 80 21 04 80
06 00 06 04 SS SS SS 08 19 05 80 0A 80 26 0D 80
FF 00 19 0B 80 0D 80 22 0D 80 09 80 06 05 SS SS
SS 08 19 04 80 08 80 19 05 80 0A 80 25 FD 00 25
FE 00 27 02
・どんなポケモンが欲しいのかの台詞を組み込んでないので自分達で台詞のスクリプトを追加する事
・最初のSS SS SSはポケモンを選ばなかった時に使うスクリプトのオフセット
・最後のSS SS SSは相手の希望するポケモンじゃなかった時に使うスクリプトのオフセット
・このままでは何回でも交換できてしまうので人IDを消去するとかの工夫が必要

●足し算
17 NO NO nn 00 02
・指定したNO NOのST STの値nn増やす

●引き算
18 NO NO nn 00 02
・指定したNO NOのST STの値をnn減らす

●値のコピー
19 NO NO NO NO 02
・指定したNO NOに別のNO NOのST ST値をコピーする。
・最初のNO NOが指定したNO NOで、後ろのNO NOがコピーしたい物

●アイテム入手1
1A 00 80 $$ $$ 1A 01 80 II 00 09 01 02
・「~手に入れた!」って説明が表示される
・人IDを設定してる場合は人IDがOFFになる
・IIの数だけアイテムが手に入る
・手に入る個数の説明はしてくれない

●踏むと発動するスクリプトの値で条件分岐
21 NO NO ST ST 06 01 SS SS SS 08 ss 02
・ST STの値が一致していればSS SS SSのオフセットへ飛ぶ
・そうでなければssを実行

●最初に貰ったポケモンで条件分岐
21 31 40 FP 00 06 01 SS SS SS 08 ss 02
・最初に貰ったポケモンがFPならSS SS SSのアドレスへ飛ぶ
・そうでなければssを実行

●主人公の向きで条件分岐
21 0C 80 nn 00 06 01 SS SS SS 08 ss 02
・主人公の現在の向きがnnならSS SS SSのオフセットへ飛ぶ
 (nnの値が01なら下、02なら上、03なら左、04なら右)
・そうでなければssを実行
・nnの値は自分で操作しなければ変更しない。
 つまり、オブジェクトの向き変更等のスクリプトを使って
 向きを変えるだけではだめらしい。
 スクリプトで向きを変えた後に判定を行いたいのなら
 このスクリプトで判定する前に
 「16 0C 80 nn」と打ち込んで、意図的に値を操作してやる必要がある。

●色々な操作
25 ?? ?? 02
・25----02まとめ参照

●時計の設定(RSE専用)
25 9A 00 27 02

●時計の確認(RSE専用)
25 9B 00 27 02
・このスクリプトの後にスクリプトを続けて書いても動作しない。

●手持ちの卵が孵る2
25 DB 00 27 21 04 80 06 00 06 04 SS SS SS 08 25 C2 00 02
・手持ちから卵を一個指定させ、それを孵化させる
・卵じゃなくても孵る。その場合指定されたポケモンがLV5になる
・指定せずキャンセルされた場合SS SS SSのオフセットへ飛ぶ

●画面をスライドする
25 13 01 4F 7F 00 MV MV MV 08 51 00 00 25 14 01 02
・25 13 01で画面を固定した状態で移動スクリプトの人NOの部分を7Fにすると
 主人公の位置が固定されたまま画面をスライドさせる事ができる。
 スライドする方向は移動コマンドで決まるので管理人氏や初心氏の
 移動オフセットまとめを見て自分達で何とかする事。
 51 00 00の直ぐ後に色々処理を入れると様々な演出ができるはず。

●5番道路の育てやにポケモンを預けているかで条件分岐
26 0D 80 78 01 21 0D 80 01 00 06 01 SS SS SS 08 ss 02
・預けていればSS SS SSのオフセットへ飛ぶ
・そうでなければssを実行

●図鑑が全国図鑑かどうかで条件分岐
26 0D 80 93 01 21 0D 80 01 00 06 01 SS SS SS 08 ss 02
・全国図鑑ならSS SS SSのオフセットへ飛ぶ
・全国図鑑でないならssを実行

●野生戦の結果で条件分岐
26 0D 80 B4 00 21 0D 80 nn 00 06 01 SS SS SS 08 ss 02
・野生のポケモンとの戦闘するスクリプトの後に使う
・nnの値が
 01なら倒した時
 04なら逃げた時
 07なら捕まえた時 SS SS SSのオフセットに飛ぶ
・そうでなければssを実行
・複数の条件で判定したい時(例えば倒した時はAのオフセット、逃げた時ははBのオフセットへ等)は
 ssの部分に21 0D 80 nn 00 06 01 SS SS SS 08 ssをいれてやれば良い。

●4の島の育て屋にポケモンを預けているかで条件分岐
26 0D 80 B6 00 21 0D 80 PO 00 06 01 SS SS SS 08 ss 02
・値がP0ならSS SS SSのオフセットへ飛ぶ
・そうでなければssを実行

●空白時間
28 tt tt C5 02
・当然の事ながら逆順で入力
・FF FFとかにすると長すぎてひどい事になる

●オブジェクト消去2
29 hh hh 02
・一致した人IDのオブジェクトを消去する。
・画面内に対象が合ってもその場では消去されない。その場合は画面を切り替える事

●バッジ入手
29 GG 08 02
・バッジはただ単に人IDで判定してるだけなので対応した
 人IDを消去させればそのバッジを持ってる事になる。
・要するにGG 08はただの人ID

●オブジェクト復活
2A hh hh 02
・一致した人IDのオブジェクトを復活させる。
・復活するタイミングは実行中のスクリプト終了後

●バッジ紛失
2A GG 08 02
・バッジはただ単に人IDで判定してるだけなので対応した
 人IDを復活させればそのバッジを持ってる事になる。
・要するにGG 08はただの人ID

●持ってるバッジで条件分岐
2B GG 08 06 01 SS SS SS 08 ss 02
・バッジを持っていればSS SS SSのオフセットへ飛ぶ
・そうでなければssを実行

●人IDで条件分岐
2B hh hh 06 01 SS SS SS 08 ss 02
・人IDがOFFの場合はSS SS SSのオフセットへ飛ぶ
・そうでなければssを実行
・人IDはAMを参考にする事

●効果音を流す1
2F nn 00 02

●効果音を流す2
2F nn 00 30 02
・1と違って効果音が鳴り終わるまで次の処理をしない

●ファンファーレを流す1
31 WA WA 02

●ファンファーレを流す2
31 WA WA 32 02
・1と違ってファンファーレが鳴り終わるまで次の処理をしない

●曲の変更1
33 MU MU 00 02
・変更した音楽を終わらせて本来そのマップに流れてる音楽に戻したい時は任意のタイミングで35 02を使う事。

●本来そのマップに流れてる音楽を流す
35 02
・曲の変更した後、元の音楽に戻したい時使う。

●曲の変更2
36 MU MU 02
・1よりも流れ始めるタイミングが若干遅い。

●曲のフェードアウト
37 tt 00 02
・指定した時間操作不能になる
・指定した時間の終わりに曲がフェードアウトする(というか音量が0になる?)

●曲のフェードイン
38 tt 00 02

●ワープスクリプト1
39 mm mm ww ++ 00 -- 00 02
・洞窟に入る時などに使う

●ワープスクリプト2
3A mm mm ww ++ 00 -- 00 02 
・移動する時の音やアニメーションは無し

●ワープスクリプト3
3B mm mm ww ++ 00 -- 00 02 
・自動ドアの音、アニメーション

●ワープスクリプト4
3C mm mm 02
・水中から浮上or上から降ってくる
・移動前のマップで主人公がいた座標と同じ座標に移動する。教えてくれた人サンクス。

●ワープスクリプト5
3D mm mm ww 02 
・ワープタイルでワープした時のアニメーション

●手持ちの数で条件分岐
43 21 0D 80 nn 00 06 01 SS SS SS 08 ss 02
・手持ちがnn匹ならSS SS SSのオフセットへ飛ぶ
・そうでなければssを実行

●アイテム入手2
44 $$ $$ II 00 02
・1と違って「~手に入れた!」って説明は無し
・IIの数だけアイテムが手に入る

●アイテム消去
45 $$ $$ II 00 02
・アイテム所持数がIIに満たない場合は消去しない

●アイテム所持で条件分岐
47 $$ $$ II 00 21 0D 80 01 00 06 01 SS SS SS 08 ss 02
・アイテムをIIだけ持っていればSS SS SSのオフセットへ飛ぶ
・そうでなければssを実行

●オブジェクトの移動
4F hn 00 MV MV MV 08 51 00 00 02
・一致した人NOのオブジェクトが指定された動きをする。
・オブジェクトの動作内容はMV MV MVのオフセットに記述する。
・移動コマンドに関してはどっかのまとめでも見れば良いと思うよ。
・hn 00の部分を0F 80にすると移動するオブジェクトの指定が
 このスクリプトを実行中のオブジェクトになるので覚えておくと便利かも。

●オブジェクト消去4
53 hn 00 02
・画面内にいる一致した人NOのオブジェクトが強制的に消去される。
・人IDを設定してる場合は同じ人IDのものも消去対象になるが画面を切り替えるまでは残ったまま

●オブジェクト消去
53 0F 80 02
・これを実行しているオブジェクトがただちに消去される
・人IDを設定してる場合は同じ人IDのものも消去対象になるが画面を切り替えるまでは残ったまま

●オブジェクトの表示
55 hn 00 02
・画面内にいる一致した人NOのオブジェクトが強制的に表示される。
・つまり人IDがOFFでも人やアイテムボール等が見えるようになる。
・画面から外れると効果は消える。

●オブジェクトの位置変更2
57 hn 00 ++ 00 -- 00 02
・一致した人NOのオブジェクトをただちに任意の座標に移動させる
・hnをFFと指定した場合は主人公が移動するが、画面は固定されたままなのでちょっと困った事になる。
・hn 00の部分を0F 80にすると移動するオブジェクトの指定が
 このスクリプトを実行中のオブジェクトになるので覚えておくと便利かも。

●主人公が現れる
58 FF 00 00 00 02
・下の主人公が隠れるスクリプトの後にこのスクリプトを使うと
 主人公のオブジェクトが再び表示される。

●主人公が隠れる
59 FF 00 00 00 02
・主人公のオブジェクトが非表示になる。
・見えなくなるだけでオブジェクト自体はその場所にいる。

●オブジェクトがプレイヤーの方向を向く
5A 02

●オブジェクトの向き変更
5B hn 00 nn 02
・一致した人Noのオブジェクトをnnに対応した向きに変更させる。
 (nnの値が01なら下、02なら上、03なら左、04なら右を向く)

●任意のトレーナーとの戦闘に勝利してるかで条件分岐
60 TT TT 06 01 SS SS SS 08 ss 02
・戦闘に勝利していればSS SS SSのオフセットへ飛ぶ
・そうでなければssを実行

●トレーナーと既に戦闘をしていた事にする
61 TT TT 02

●トレーナーとの戦闘を無かった事にする
62 TT TT 02

●オブジェクトの位置変更1
63 hn 00 ++ 00 -- 00 02
・一致した人NOのオブジェクトを任意の座標に移動させる
・画面内に指定した人NOのオブジェクトがある場合は画面を切り替えるまでは移動しない
・hn 00の部分を0F 80にすると移動するオブジェクトの指定が
 このスクリプトを実行中のオブジェクトになるので覚えておくと便利かも。

●オブジェクトのアクション(移動タイプ)を変更
65 hn 00 mt 02
・画面内に対象のオブジェクトがいる場合は一旦画面外に出さないと繁栄されない

●買い物
66 86 IS IS IS 08 6C 02
・商品のオフセット先はアイテムコードを連続して入力し、最後に00 00 6C 02と打ち込む。
 例えばマスターボール、ハイパーボール、スーパーボールを売っている店にしたいのなら
 01 00 02 00 03 00 00 00 6C 02と打ち込んでやれば良い。
・66 86~ではなく66 87~や66 88~でも同じような動作をするけど違いがわからない。

●メニューを呼び出す
66 6F xx yy mn 00
21 0D 80 00 00 06 01 SS SS SS 08
21 0D 80 01 00 06 01 SS SS SS 08
21 0D 80 02 00 06 01 SS SS SS 08
・・・
02
・マサキ君のお気に入りリストや引換所、エレベーター等で使われてるメニューを表示する
・「21 0D 80 nn 00 06 01 SS SS SS 08」はメニューの上からnn-1番目を選択した時に
 SS SS SSのオフセットへジャンプすると言う意味。

●会話2
67 @@ @@ @@ 08 09 02 02
・0F 00~との違いは不明

●質問するスクリプト
67 @@ @@ @@ 08 09 05 21 0D 80 01 00 06 01 YY YY YY 08 No 6C 02 Yes 6C 02
・Yesの部分もNoの部分も後ろの6C 02とちゃんと繋がるよう工夫して使う事
・06 01を06 00にするとYesとNoの関係が逆転する

●プレイヤーの操作をロック1
69 02
・6Bで解除

●プレイヤーの操作をロック2
6A 02
・6Cで解除

●プレイヤーの操作のロックを解除1
6B 02
69でロックされている場合はこれで解除する

●プレイヤーの操作のロックを解除1
6C 02
6Aでロックされている場合はこれで解除する

●AかBボタンを押すまで固定
6D

●ポケモンの画像表示
75 ** ** xx yy 6D 76 6C 02
・画面外にでない値の範囲はxx:00~14、yy:00~0A
・画像を表示してる間にスクリプトを挟みたい場合はyyと6Dの間に挿入する事

●ポケモンの画像表示付きのメッセージ
75 ** ** xx yy 67 @@ @@ @@ 08 09 04 76 6B 02

●点字
78 @@ @@ @@ 08 6D 6B 02

●ポケモン入手
79 ** ** ## $$ $$ 00 00 00 00 00 00 00 00 00 02
・ポケモン入手スクリプトの超簡易版
・ただ貰うだけ
・貰った時にニックネームを付けられない
・手持ちがいっぱいだとメッセージ無しでパソコンに預けられる
・後ろに21 0D 80 nn 00 SS SS SS 08 ss 02を入れる事で分岐可能。
 nnの値がそれぞれ下の値の時はSS SS SSのオフセットへ飛ぶ。
 手持ちに追加される場合:0
 手持ちがいっぱいの場合:1
 手持ちもボックスもいっぱいの場合:2

●タマゴ入手
7A ** ** 02
・ポケモンコードに対応したポケモンのタマゴを入手する
・進化後だろうがなんだろうがLV5で生まれる
・手持ちがいっぱいの場合はメッセージ無しでパソコンに預けられる
・上記の問題は卵入手オフセットやポケモン入手スクリプト見ながら適当にごにょごにょやれば多分・・・

●技の変更
7B n1 n2 SK SK 02
・手持ちのn1番目のポケモンのn2番目の技を指定した技に変更する。

●覚えてる技で条件分岐
7C SK SK 21 0D 80 06 00 06 01 SS SS SS 08 ss 02
・パーティ内のポケモンが技を覚えていなければSS SS SSのオフセットへ飛ぶ
・そうでなければssを実行

●○○は~を使った!のアニメーション表示
7C SK SK 21 0D 80 06 00 06 01 SS SS SS 08 9D 00 0D 80 68 9C 28 00 27 02
・パーティ内のポケモンが技を覚えていなければSS SS SSのオフセットへ飛ぶ
・アニメーション表示前に別の処理を入れたければ9D 00 0D 80のすぐ後に
 表示後に入れたければ27の後ろに挿入する事。

●会話イベントの変数に指定した文字列を代入する
・このスクリプトの後ろに台詞イベントを入れる場合
台詞のFD 02,FD 03,FD 04の部分が設定した文字列に置き換わる。
(vaが00ならFD 02、01ならFD 03、02ならFD 04に指定した文字列を代入する)
・選択したポケモンの名前
7D va ** ** 02
・先頭のポケモンの名前
7E va 02
・手持ちの上からnn番目のポケモンの名前
7F va nn 00 02
・選択したアイテムの名前
80 va $$ $$ 02
・選択した技の名前
82 va SK SK 02
・選択した数値
83 va co co 02
・予め設定されている言葉(※「うつくしさ」や「クリムゾン」、「ゴールド」など)
84 va wo 00 02



●ランダム条件分岐
8F nn 00 21 0D 80 00 00 06 01 SS SS SS 08
21 0D 80 01 00 06 01 SS SS SS 08
21 0D 80 02 00 06 01 SS SS SS 08
21 0D 80 03 00 06 01 SS SS SS 08
21 0D 80 04 00 06 01 SS SS SS 08
・・・
21 0D 80 [nn-1] 00 06 01 SS SS SS 08 ss 02
・「8F nn 00」の部分で0~nn-1の範囲の実数値がランダムに入力される。
・つまり乱数を発生させると言う事。
・そのランダムの数値がnxの時、「21 0D 80 nx 00 06 01 SS SS SS 08」の
 SS SS SSのオフセットへジャンプする。

●所持金を増やす
90 KK KK KK KK 00 02

●所持金を減らす
91 KK KK KK KK 00 02

●金をいくら持ってるかで条件分岐
92 KK KK KK KK 00 21 0D 80 00 00 06 01 SS SS SS 08 ss 02
・金額に満たない場合はSS SS SSのオフセットへ飛ぶ
・そうでなければssを実行

●所持金画面を表示する
93 00 00 00 02
・このスクリプトが実行されるとその次の会話イベント発生時に同時に所持金を表示する。
・画面に所持金を表示してる状態で所持金を増減させても画面に表示されている金額は変化しない

●所持金画面の表示を止める
94 00 00 6C 02

●所持金画面を更新する
95 00 00 00 02
・画面に所持金を表示してる状態で所持金を増減させた後このスクリプトを使えば画面に表示されている金額が変化する

●画面効果
97 gg 02

●画面効果2
98 gg nn 02
・1と違ってnnの値の分徐々に変化していく

●暗闇
99 nn 00 02
・主人公周辺以外は真っ黒になって何も見えなくなる
・nnの数値が大きいほど見える範囲が狭くなる
・図鑑やポケモンメニューを開くなどして一旦画面を切り替えないと何故か繁栄されない

●光が差し込む
9A nn 02
・上の暗闇のスクリプトの後に使う
・主人公周辺の見える範囲が広くなる
・暗闇のnnより小さい値にする事
・ムロジムの仕掛け

●会話3
9B @@ @@ @@ 08 09 02 02
・67~や0F 00~との違いは不明

●アニメーション
9C nn 00 02
・nnの値が00だと主人公の上に「!」を表示
・01で居合い切り(草むら)
・02で居合い切り

●全滅時の復活場所の設定
9F pc 00 02
・目の前が真っ暗になった時pcの値に応じた場所(ポケモンセンター)へ移動します。
・他のポケモンセンターに入ると設定場所がそのポケモンセンターに変わるので注意。

●性別で条件分岐
A0 21 0D 80 00 00 06 01 SS SS SS 08 ss 02
・主人公が男の子ならSS SS SSのオフセットへ飛ぶ
・女の子ならssを実行

●ポケモンの鳴き声
A1 ** ** 02 00 02

●マップタイルの変更(カンナ倒した後に入り口が開くとかそういうやつ)
A2 ++ 00 -- 00 MM MM mo 00 02
・パレットの番号はAMのステータスバーのBlock:~を参考にする事
・マップを切り替えると変更されたタイルが元に戻る
・元々移動不可の場所を移動可能にする場合、移動エリアの設定が0になる
・元々移動できる場所を移動可能のままにする場合、移動エリアの設定を引き継ぐ

●マップで設定している天候に戻す
A3 A5 02

●天候の操作
A4 WW 00 A5 02

●タイルセットの変更
A7 ts nn 02
・そのマップで使用するタイルセットを一時的に任意の番号に変更する。
・nnが00ならタイルセット1を、01ならタイルセット2をtsに変更する。
・AMの使用するタイルセットを参照。
・例によって図鑑や手持ちのポケモン等を見て画面を切り替えなくてはいけない。

●オブジェクトの生成
AA GN on ++ 00 -- 00 00 ac 02
・現在自分のいるマップに新しく人を設置する
・GNはAMの画像Noを参考にする事
・生成した人物は背景扱いになってるっぽいので
 オブジェクトの生成とは言えないかも。
・acの値に応じて生成されたオブジェクトがアクションをするので、
 いろいろ数値を弄ってみるといいかもしれない。
・onは生成時に自分で適当に決めても良い。
 ただ、番号を重複させるとAB on ac 02の
 スクリプトを動かす時に面倒な事になるので注意。

●生成したオブジェクトのアクション変更
AB on ac 02
・オブジェクトの生成で生成されたオブジェクトのアクションを変更する。
・変更したいオブジェクトのonの値と、このスクリプトonの値は同じでなければならない。

●扉を開く1
AC ++ 00 -- 00 02
・x座標が++,y座標が--の扉のタイルをアニメーションさせて扉を開く。
・自動ドアでも手動ドアでも動作するから扉以外のものも動くかもしれないと思ったものの
 氷のタイル(割れるやつ)は動かなかったから気のせいだろう。

●扉を開く2
AC ++ 00 -- 00 AE 02
・この後ろにスクリプトを追加する場合は1と違って開く動作の
 アニメーションが終了してから次のスクリプトが動作する。

●扉を閉める1
AD ++ 00 -- 00 02
・x座標が++,y座標が--の扉のタイルをアニメーションさせて扉を閉める。

●扉を閉める2
AD ++ 00 -- 00 AE 02
・この後ろにスクリプトを追加する場合は1と違って閉じる動作の
 アニメーションが終了してから次のスクリプトが動作する。

●扉を開く3
AF ++ 00 -- 00 02
・x座標が++,y座標が--の扉のタイルを扉が開いた状態の画像に変更する。
・1、2と違ってアニメーションはしない。

●扉を閉める3
B0 ++ 00 -- 00 02
・x座標が++,y座標が--の扉のタイルを扉が閉じた状態の画像に変更する。
・1、2と違ってアニメーションはしない。

●持ってるコインの数で条件分岐
B3 0D 80 21 0D 80 KA KA 06 00 SS SS SS 08 ss 02
・コインがKA KAより少なければSS SS SSのオフセットへ飛ぶ
・そうでなければssを実行

●コインを増やす
B4 KA KA 02

●コインを減らす
B5 KA KA 02

●野生のポケモンとの戦闘
B7 02
・直前に「B6 ** ** ## $$ $$」または「16 04 80 ** ** 16 05 80 ## 00 16 06 80 $$ $$ 25 BB 01」
 と入力する事で出現するポケモンを選択する。
・通常ミュウとデオキシスは正規の方法じゃないと捕まえても言う事を聞かないが、
 「16 04 80 ** ** 16 05 80 ## 00 16 06 80 $$ $$ 25 BB 01」で出現ポケモンを選択した場合の戦闘で
 捕獲すると言う事をちゃんと聞くようになるっぽい。
・野生のポケモンが何も落とさない場合 
 (pokemon_Synthesisの野生で持っている道具の項目が無しになっている場合) 
 は何故かアイテムコードを入力しても何も持ってない状態になる。

●所持しているコインの数を画面に表示する
C0 00 00 02
・このスクリプトが実行されるとその次の会話イベント発生時に同時にコインの数を表示する。
・画面にコインを表示してる状態でコインを増減させても画面に表示されている金額は変化しない。

●コインの数の表示を止める
C1 00 00 02

●コインの数の表示を更新する
C2 00 00 02
・画面にコインの数を表示してる状態でコインを増減させた後このスクリプトを使えば画面に表示されている金額が変化する

●オブジェクト消去3
D0 hh hh 02
・29~との違いがわからん。
・もともとは空を飛ぶでいける行き先を変更する部分で使われていた。


--------------------------------------------------------------------------
■条件分岐系のスクリプトについての補足
06 01 SS SS SS 08~って所を07 01 SS SS SS 08~に変更すると
条件を満たしたときにSS SS SSのオフセットに飛ぶのではなく
条件を満たしたときにSS SS SSのオフセットを参照する風に変わる。
何が違うのかと言うと、SS SS SSのオフセットのスクリプトが02ではなく
03で終わった場合、条件分岐のスクリプトに戻ってくるので
オフセットを参照した後SS SS SS 08 ss 02のssの部分を実行できるようになる。

--------------------------------------------------------------------------
■スクリプトの複合の仕方

スクリプトの最後の02はそこで処理が終わってるよって意味の
いわば蓋のようなものなので複合させる時にはそれを取り外して
別のスクリプトとくっつけてやればおk。

例)会話の後に野生ポケモンと戦闘だ!
・会話 67 @@ @@ @@ 08 09 02 02
・野生との戦闘 B6 ** ** ## $$ $$ B7 02
この2つをくっつけると
↓
こうなる
67 @@ @@ @@ 08 09 02 B6 ** ** ## $$ $$ B7 02

nice!(0)  トラックバック(0) 
共通テーマ:ゲーム

スクリプト【ワープ】 [ポケモンROM改造]

スクリプト【ワープ】 

ワープその1
39 MB MM WW XX 00 YY 00 27 02
デフォルトのワープ

ワープその2
3A MB MM WW XX 00 YY 00 27 02
音がないワープスクリプト。イベントで使う場合はこれ。

ワープその3
3B MB MM WW XX 00 YY 00 27 02
上に一歩移動する動作が入る。

ワープその4
3C MB MM 27 02
落下ワープ。
ルビーやサファイアでのフエンジムのワープ。
ワープ先の座標はワープ前の座標と同じ。指定したワープNo.や座標へのワープはできないのでその部分は省いています。

ワープその5
3D MB MM WW XX 00 YY 00 27 02
ヤマブキジムのワープ。

MB はワープ先のマップ番号
MM はワープ先のマップ
WW はワープNo.
XX はワープ先のX座標
YY はワープ先のY座標

27
ロックするのと全く同じ処理。これを 27 か 28 以外にするとロックされない。要するに移動し始めてからのほんの一瞬ロックが外れ、プレイヤーの操作を受け付けてしまうのでそれをさせないために 27 を入れる。厳密な設定ではロックではなくウェイトであり、ウェイトスクリプトの先頭数字である 28 を入れても問題なくスクリプトは処理される。ここに入れる数字はスクリプトの処理をする判断材料として使われるため、27 であっても 28 であっても結局はどちらもウェイトスクリプトなので問題がないということです。公式で使われているのは 27 です。

数字は全て16進数に変換すること。
advancemap001.png

a.PNG



優先されるのは座標ではなくワープNo.です。ワープNo.がワープ先に存在しないときに限り、指定した座標にワープすることができます。


nice!(0)  トラックバック(0) 
共通テーマ:ゲーム

スクリプト【指定された座標のドアを開ける】 [ポケモンROM改造]

スクリプト【指定された座標のドアを開ける】 

AC XX 00 YY 00 AE 02

指定された座標にあるドアを開ける動作です。
XX にX座標、YY にY座標を指定する。

もしかしたら動作が設定されているものならドアじゃなくても作動するかもしれません。

nice!(0)  トラックバック(0) 
共通テーマ:ゲーム

スクリプト【踏むと発動するスクリプトの処理】 [ポケモンROM改造]

最初は全てのフラグが ON になっている状態です。

16 RR RR XX XX 02

RR RR にはアドバンスマップのフラグNo.をそのまま入れる。

XX XX にはフラグNo.の上の方の不明値と違う値を入れる。

20090114221349.png
上記の例の場合、フラグバリューには03 00(固定値)を入れる。フラグNo.には 4F 40 が入っています。左の4Fがこのフラグの名前のようなものです。右の値は解りませんがほとんど全てのフラグで40が入れられているのでここは40で固定して下さい。

その下の不明値は00 00(固定値)にして下さい。

その下の不明値は無視。値が入っているところを見たことがない。

この場合は
16 4F 40 01 00 02
これで作動した後にフラグが OFF となりスクリプトが消滅します。

解りやすく説明すると、4F 40 という名前のフラグには最初は 00 00 という値が入っています。これは全てのフラグで共通です。この 4F 40 のフラグに 01 00 という値を代入することによって 00 00 の値のときの命令を無視出来るということです。このフラグの発動する条件が 00 00 の値のときなのでフラグの作動時に 01 00 を代入することによって、このフラグが2回目に発動しないようにすることが出来ます。

仮に
16 4F 40 00 00 02
と入れると不明値と同じ値なのでフラグが消滅せず、踏む度に作動します。

このスクリプトを別のスクリプトと組むときは絶対に一番最後に組んで下さい。
戦闘スクリプトの前に組むと戦闘に勝っても負けてもスクリプトが消えてしまいます。

フラグNo.の値ですが作動しないNo.があります。

nice!(0)  トラックバック(0) 
共通テーマ:ゲーム

スクリプト【戦闘BGMのオフセット】 [ポケモンROM改造]

スクリプト【戦闘BGMのオフセット】 

043679 ロケットだんボス
04367D ジムリーダー
043681 ロケットだん
043685 エリートトレーナー
043689 してんのう
04368D ジェントルマン
043691 ライバル
043695 チャンピオン
043699 無音

ここに格納されているアドレス 36 04 08 ?? を変えると音楽が変わる。
??の値は↓を参照

60~63 トレーナー戦
64~6F フリーズ
70 チャンピオン戦(エラー検出)
71~9B チャンピオン戦
9C チャンピオン戦(デフォルト)
9D チャンピオン戦
9E フリーズ
9F 無音
A0~A3 ジムリーダー戦
A4 ジムリーダー戦(デフォルト)
A5 ジムリーダー戦
A6~A9 無音
AA トレーナー戦(デフォルト)
AB トレーナー戦
AC 無音
AD 無音
AE 野生戦
AF 野生戦


nice!(0)  トラックバック(0) 
共通テーマ:ゲーム

スクリプトの逆引き書 [ポケモンROM改造]

スクリプトの逆引き書 

スクリプトの逆引きです。解析をするときに役に立つと思います。

逆引き書
05 XX XX XX 08別のオフセットへジャンプする
09 XXメッセージボックスの表示
0F 00 XX XX XX 08セリフの読み込み
16 XX XX XX XXフラグNo.への値の代入
16 04 80 XX XX 25 63 01見つけた数に追加
1A ~アイテム入手
25 6F 01全国図鑑
28 XX XXウェイト
29 XX XX人IDの消去
2A XX XX人IDの復活
2B ~人IDによる条件分岐
2F XX 00効果音を鳴らす
33 XX 01 00曲を流す
35そのマップで流れている曲に戻す
39 ~ワープその1
3A ~ワープその2
3B ~ワープその3
3C ~ワープその4
3D ~ワープその5
44 XX XX XX 00イベント用アイテム増加
45 XX XX XX 00イベント用アイテム減少
46 ~イベント用アイテム増加の設定
4F XX 00 XX XX XX 08移動スクリプトの読み込み
51 00 00移動の実行
53 XX 00キャラクターを消す
5A対象をこっちに向かせる
5C 00 ~トレーナーとの戦闘
5C 04 ~トレーナーとのダブルバトル
67 ~強制スクロールのセリフ
6Aロック
6Cロックの解除
75 XX XX XX XX 0F 00 XX XX XX 08 09 04 76ポケモンの画像+セリフ
79 ~ポケモン入手
90 XX XX XX XX 00お金を増やす
91 XX XX XX XX 00お金を減らす
93 00 00 00画面にお小遣いを表示する
94 00 00 00お小遣いの表示をやめる
95 00 00 00おこづかいの増減を更新する
97 XX画面効果
9F XX 00全滅時のワープ先
A0 ~性別による条件分岐設定
A1 XX XX 00 00ポケモンの鳴き声
A4 XX 00 A5天候を変える
AC XX 00 XX 00 AE指定された座標のドアを開ける
B6 ~ B7野生ポケモンと戦闘
CA ~ CBナレーションなどのセリフ


nice!(0)  トラックバック(0) 
共通テーマ:ゲーム

セリフスクリプトのまとめ [ポケモンROM改造]

セリフスクリプトのまとめ 

※ @@ @@ @@ にはアドレスが入ります。アドレスは逆順にすること。
会話スクリプトを終了させるには 04 ではなく 02 で終わること!!

■セリフの読み込み
0F 00 @@ @@ @@ 08

■セリフの表示
09 02
人と喋るとき
周りのキャラクターは動かない。

09 03
看板を見るとき。

09 04
会話スクリプトと別の会話スクリプトを繋げるとき
※単体で使うとセリフが表示されているのに主人公が動き回れたりする。

09 06
看板には 09 03 を使うのが普通らしい。
09 06 と 09 03 の違いは他のキャラをロックするかしないかの違いだと思います。
看板のセリフが出ているときにロックしたい方は 09 03 を入れてください。

■人と喋っているときに周りをロックする。(主にイベントで使う)
6A
会話スクリプトの前に入れる。
6A 0F 00 @@ @@ @@ 08 09 02 02
↑のような使い方は普通はしない。09 02 を使っているのでロックされている。
他のスクリプトと組み合わせるときに使う。

■ロックの解除
6C
6Aでロックしたときの解除として使う。

■対象をこっちに向かせる。
5A
話しかけるとキャラクターがこっちを向く。
どういう状況で使うのかというと、人に話しかけたときに会話スクリプト以外で始まるときです。会話スクリプト以外で始まると対象がこっちを向いてくれません。

■強制スクロールのセリフ
67 @@ @@ @@ 08 66 28 WW 00 68
単体で使うスクリプトではない。
WWには止まっている時間を入れる。

■ナレーションなどのセリフの表示(12/23修正)
CA 0F 00 @@ @@ @@ 08 09 04 CB 02
メッセージボックスの枠の表示が変わる。
CA と CB でスクリプトを囲む。


nice!(0)  トラックバック(0) 
共通テーマ:ゲーム

スクリプトの組み方2 人IDと人NOについて [ポケモンROM改造]

人IDと人NOについて話す前に
まず最初に理解していただきたいのが人IDと人NOは別物ということです

ではどう違うのかというと
人IDというものがポケモンの世界全体の中でつけられた番号で
人NOというものは一つのマップの中でつけられた番号です

これから実例を用いてお話します

2fcf8e0bb98f6dbc.jpg

上の画像はオーキド博士の情報を見ています
見ていただけると分かるように人IDが002C、人NOが3ですね

●基本的なこと●
マップ上にあるイベントのことをオブジェクトと呼びますが
基本的にオブジェクトといえば人のことだと考えていただいて結構です

●人IDについて●
ファイアレッドを最初に始めた時はマップ中央にいるオーキド博士は見えないですよね?
これは人IDがオフになっているからです
基本ゲームを始めたときは人IDは全てオンの状態です
これをオフにしたりオンにしたりしてゲームに彩りを加えるわけです
※オブジェクトが見えている状態をオン,見えていない状態をオフ(人IDが消えている)と呼んでいます
※オーキド博士はマップスクリプト(これに関しては難しすぎます よほど根気がないと習得不可だと思われます)
  で人IDがあらかじめオフになっています

●人NOについて●
またファイアレッドの話になるのですが、オーキドが主人公を研究所に連れて行くシーンがありますよね?
それは一致する人NOのオブジェクトを動かすというスクリプトを使っています

このように人IDと人NOには役割の違いが見られます
これで基本的な違いは分かっていただけたと思います


では人IDや人NOを用いたスクリプトの使い方を説明します

●基本的なこと●
hh hh と書かれているところには人IDを逆順で入力します
※例えば人IDが 1503なら[15 03]→[15←→03]→03 15と入力
hnと書かれているところには人NOを16進数で入力
※例えば3なら03と入力
※新しい人IDを使いたいなら1000番台を使ってください

●オブジェクトの消去の仕方●
基本はこの 29 hh hh 02 というスクリプトを使います
このスクリプトは一致する人IDを消去するスクリプトです
ですがこのスクリプトは画面内に消したいオブジェクトがあると
一回画面を切り替えてからでないと反映されません
だからこのスクリプトは消したいオブジェクトが違うマップにいるときに使います

では画面内に消したいオブジェクトがあるときはどうするかというと
53 hn 00 02 というスクリプトを使います
このスクリプトは一致する人NOのオブジェクトを即座に消去するスクリプトです
※人IDを設定している場合は同じIDの物も消去対象になります

●オブジェクトの復活の仕方●
2A hh hh 02を使います
これは実行しているスクリプトが終わると復活します
他に55 hn 00 02 というスクリプトを使うときがあります
これは一時的に復活させるときに使います

ここまでは基本編です
これからは応用的な使い方を話そうかと思います

●オブジェクトの移動●
4F hn 00 MV MV MV 08 51 00 00 02というスクリプトを使います
MV MV MV は移動コードが書かれているオフセットを逆順に入力してください
移動コードは全部書くのは大変なので某研究所を参考にしてください
※hnをFFにすると主人公が移動します

●人IDを利用した条件分岐●
人IDは人だけにつけるものではありません
人につけていない(つけていても可能)IDをオンにしたりオフにしたりして、条件分岐ができます
2B hh hh 06 01 SS SS SS 08 ss 02 というスクリプトを使います
人IDがオンならssのスクリプトを実行してオフならSS SS SSのスクリプトを実行します
※ssには任意のスクリプトを入れてください
※SS SS SSには実行させたいスクリプトのオフセットを逆順に入力してください


スクリプトを組むにあたって
まず聞く前に使ってみてください
案ずるより生むが易しと昔の人が言っていたように
実際に使ってみないと分かる物も分かりません
色々と試行錯誤しながらがんばってください!

 

人IDは値によって効果が違うのでその解説

ID 005C これは全国図鑑の入手を指している
     ちなみに図鑑を全国図鑑にするには
     これ25 6F 01 02をつかう
     なのでこのIDを消しても全国図鑑には
     ならない
     このIDはレインボーパスの入手フラグ

ID 0034 フジ救出で消滅
ID 00AD オツキミ山~アジトロケット団共通ID
ID 0053 アジトサカキ・シルフ共通ID(初めからきえている)

ID 1000 普通のIDで未使用
~1FFF
ID 2000 ある程度歩くとランダムに復活エメラルドなどの
~2FFF  きのみに使われてる
ID 3000 しらべてない
ID 4000 レポートをで復活する
~4FFF  (その画面に復活させたIDがあっても画面を切り替えるまで復活しない)
ID 5000 画面切り替えで復活する
~5FFF  画面の切り替えのスクリプトは97 ss 02
     ssには↓の数値を
    00 暗くなった画面を元に戻す。
    01 画面を暗くする。
    02 画面がフラッシュする。
    03 画面が白くなる。
ID A000 ID C000 ID F000 レポートで復活(ID 4000と一緒)
ID 7000 ID D000 画面切り替えで復活(ID 5000と一緒)

漏れている可能性があるので要注意

4/8追記:あやめさんの言うとおりです
      ちなみにとは1000番台は全部OK
      ということです。
      すなわち、ID 1000は1FFFまで
      使えるというわけです
2/28追記:記事の一部を書き換え 

 

改造関連だぜ!

29 hh hh 02
これは人IDを消去するスクリプトです
具体的には人を消して二度と出てこないようにします
hh hhは人IDです(人IDについては今度ふれます)

これを応用すると
ランニングシューズやジムバッジの
入手ができます

ランシュ
29 2F 08 02

バッジ
20 08 グレーバッジ
21 08 ブルーバッジ
22 08 オレンジバッジ
23 08 レインボーバッジ
24 08 ピンクバッジ
25 08 ゴールドバッジ
26 08 クリムゾンバッジ
27 08 グリーンバッジ

この値をhh hhの部分にいれてください!

あ!、それとスクリプトを合体させるときは
最後の02はけしてねMA=K"からのおねがいだよ!

例.台詞+グリーンバッジ入手
0F 00 SS SS SS 08 09 02 29 27 08 02

SS SS SSは台詞のオフセットを逆順に!
ちなみに台詞単体のスクリプトは
0F 00 SS SS SS 08 09 02 02

となるから覚えておこう!


nice!(0)  トラックバック(0) 
共通テーマ:ゲーム
前の10件 | - ポケモンROM改造 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。