チュートリアル3 -イベント制作-
参照先の変更は理解できましたか?
今回扱うのは
- セリフスクリプト
- 移動スクリプト
- フラグのオンオフ
- 分岐スクリプト
になります。
話しかけると応答するNPC、踏むと発動するイベントを扱います。
話しかけると応答するNPC、踏むと発動するイベントを扱います。
ポケモン改造研究所-そして伝説へ-で同様の内容を扱っていますが、ツールや用語を最新にして説明します。
はじめにValzHexでROMを開いておきます。
前回同様ValzHexで空き容量を探します。
FF FF FF FF……と続いているところが空き容量です。
FF FF FF FF……と続いているところが空き容量です。
まずはNPCに話しかけたらセリフを返してくれる、いわゆる村人Aのようなイベントを作りましょう。
AM(AdvanceMap)を開いていると共有違反を起こしてしまうので、AMは後ほど開きます。
AM(AdvanceMap)を開いていると共有違反を起こしてしまうので、AMは後ほど開きます。
セリフスクリプト
まずはセリフスクリプトを組みます。
これは簡単です。
空き容量に以下のように書き込みます。
0F 00 @@ @@ @@ 08 09 02 02
これは簡単です。
空き容量に以下のように書き込みます。
0F 00 @@ @@ @@ 08 09 02 02
実際には@は入力できないので、たとえば空き容量0x6D6C00に書き込むとしたら、
0F 00 10 6C 6D 08 09 02 02と、1つ下のアドレスを試しに指定してみましょう。
0F 00 10 6C 6D 08 09 02 02と、1つ下のアドレスを試しに指定してみましょう。
0x6D6C10のセリフのアドレスを指定しています。
保存したのち、PTEを開き、オフセットに6D6C10を指定します。
好きなセリフを入力したのち、保存します。
AMを開き、好きなNPCに$6D6C00を指定してみましょう。NPCはAMで新規で追加して構いません。
保存したのち、PTEを開き、オフセットに6D6C10を指定します。
好きなセリフを入力したのち、保存します。
AMを開き、好きなNPCに$6D6C00を指定してみましょう。NPCはAMで新規で追加して構いません。
移動スクリプト
こちらは人Noを把握する必要があるので、あらかじめ先にAMで作業するのが良さそうです。
AMを開いたら、動かしたいNPCを決めます。
AMを開いたら、動かしたいNPCを決めます。
流れとしては、
1.話しかけるとセリフを言う
2.移動したのち戻ってくる
1.話しかけるとセリフを言う
2.移動したのち戻ってくる
という流れにしてみましょうか。
もちろん好きなように組んでもらって構いません。
もちろん好きなように組んでもらって構いません。
あらかじめ決めた空き容量のアドレスを覚えて、
動かしたいNPCのオフセットのところに空き容量のアドレスを記述して保存しておきます。
動かしたいNPCのオフセットのところに空き容量のアドレスを記述して保存しておきます。
人Noを覚えたらAMを閉じ、ValzHexでその空き容量にセリフスクリプトを書き、その続きから記述します。
0F 00 @@ @@ @@ 08 09 02 4F 03 00 @@ @@ @@ 08 51 00 00 02
0F 00 @@ @@ @@ 08 09 02 4F 03 00 @@ @@ @@ 08 51 00 00 02
太字の03は人Noです。任意の人Noにしてください。
0Fスクリプトは先程と違い、最後の02が消えているのがポイントです。
02はスクリプト終了なので、一番最後の02を取り除き、51 00 00の一番後ろに02を付けています。
09 02となっているのは、09スクリプトで02を指定しているだけなので、スクリプト終了の02とは違います。
0Fスクリプトは先程と違い、最後の02が消えているのがポイントです。
02はスクリプト終了なので、一番最後の02を取り除き、51 00 00の一番後ろに02を付けています。
09 02となっているのは、09スクリプトで02を指定しているだけなので、スクリプト終了の02とは違います。
4Fスクリプトの@@は移動コマンドのアドレスを指定します。
資料wikiの移動コマンドのページを参照してください。
https://wikiwiki.jp/pokemonhack/%E7%A7%BB%E5%8B%95%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89
資料wikiの移動コマンドのページを参照してください。
https://wikiwiki.jp/pokemonhack/%E7%A7%BB%E5%8B%95%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89
主人公を動かしたい場合は人Noの部分をFFに指定します。
画面を動かしたい場合は資料wikiのイベントスクリプトテンプレートのページを参照してください。
https://wikiwiki.jp/pokemonhack/%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88
画面を動かしたい場合は資料wikiのイベントスクリプトテンプレートのページを参照してください。
https://wikiwiki.jp/pokemonhack/%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88
フラグのオンオフ
フラグを設定しましょう。
AMでNPCの人IDという項目に任意のフラグを設定しておくと、スクリプトでそのフラグをオフにしたときにNPCが消去されます。
また、フラグで分岐するスクリプトを組んでおき、フラグオンの場合はイベントの最後にそのフラグをオフにするといった処理を入れることで、一度しか実行できないイベントなどが行えます。
踏むと発動するスクリプトにも設定できるので、重要なスクリプトになります。
AMでNPCの人IDという項目に任意のフラグを設定しておくと、スクリプトでそのフラグをオフにしたときにNPCが消去されます。
また、フラグで分岐するスクリプトを組んでおき、フラグオンの場合はイベントの最後にそのフラグをオフにするといった処理を入れることで、一度しか実行できないイベントなどが行えます。
踏むと発動するスクリプトにも設定できるので、重要なスクリプトになります。
新規で作るポケハックなら既存のフラグ(4050以降)を潰しても良いですし、40BD以降を使用しても構いません。
下記ページをよく読み、避けておくフラグを考えてください。
https://wikiwiki.jp/pokemonhack/%E3%83%95%E3%83%A9%E3%82%B0
下記ページをよく読み、避けておくフラグを考えてください。
https://wikiwiki.jp/pokemonhack/%E3%83%95%E3%83%A9%E3%82%B0
落ちているモンスターボールのスクリプトは、既存のスクリプトをコピペしてアイテムIDやフラグのみ変更すると扱いやすいでしょう。
また、人IDが設定されているオブジェクトをイベントスクリプト 53 va va で消すと、
その人IDが自動的に消費されるということも覚えておいてください。
↑だと、ライバルの人No.が3なので、 53 03 00 によりライバルを消すことができ、その際にライバルの人IDである 0411 が消費されます。
人IDを復活させる(=消費されていない状態に変える)イベントスクリプトは 2A XX XX です。(XX XX は人ID。)人IDを復活させると、消えていたオブジェクトも再び現れます。
リヴァイアサンのブログ http://blog.livedoor.jp/maidara/archives/12710773.html より引用
人ID(NPCに設定されたフラグのこと)が関与しない場合は下記の通りです。
16 RR RR XX XX 02
RRにはフラグNo(イベント用変数とも)が入ります。
40BDの場合は、リトルエンディアンにして、BD 40です。
40BDの場合は、リトルエンディアンにして、BD 40です。
XX XX
フラグNoの値を代入します。
フラグNoの値を代入します。
40BDに0001を入れるなら、
16 BD 40 01 00 02 となります。(最後の02はイベント終了スクリプト)
16 BD 40 01 00 02 となります。(最後の02はイベント終了スクリプト)
基本的には0000になっているものだと思ってください。0001などが代入されればオフの認識で大丈夫です。
0003なども代入できます。
使い道としては同じフラグを利用してフラグの中身で分岐するときでしょうか。
1回目に話しかけたときはフラグオフの状態なのでそこに分岐、
2回目に話しかけたときはフラグオン(0001が代入)なので2回目の会話に分岐、最後に0002を代入
3回目に話しかけたときは・・・
0003なども代入できます。
使い道としては同じフラグを利用してフラグの中身で分岐するときでしょうか。
1回目に話しかけたときはフラグオフの状態なのでそこに分岐、
2回目に話しかけたときはフラグオン(0001が代入)なので2回目の会話に分岐、最後に0002を代入
3回目に話しかけたときは・・・
こういうときは加算スクリプトだとシンプルですね。
https://wikiwiki.jp/pokemonhack/%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88#me86f2bb
https://wikiwiki.jp/pokemonhack/%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88#me86f2bb
踏むと発動するスクリプトに関しては以下のページを参照してください。
http://blog.livedoor.jp/maidara/archives/13438021.html
http://blog.livedoor.jp/maidara/archives/13438021.html
また、システムフラグ(スタートメニューに図鑑やポケモンなどを表示したり、ジムバッジを入手、ランニングシューズなど)は
オンオフのみでいいので、
29スクリプトや2Aスクリプト、2Bスクリプトの分岐などを試してみてください。
https://wikiwiki.jp/pokemonhack/%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88#i5224562
オンオフのみでいいので、
29スクリプトや2Aスクリプト、2Bスクリプトの分岐などを試してみてください。
https://wikiwiki.jp/pokemonhack/%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88#i5224562
分岐スクリプト
では、1度目に話しかけたときと2度目に話しかけたときで話すセリフを変えてみましょう。
引き続き40BDを例にとってみます。その次の40BEでもいいです。
2B BD 40 06 01 @@ @@ @@ 08 0F 00 ~~ ~~ ~~ 08 09 02 02
@@ @@ @@で飛んだ先
0F 00 -- -- -- 08 09 02 2A BD 40 02
0F 00 -- -- -- 08 09 02 2A BD 40 02
2Bスクリプトはフラグが0001かを比較します。
06 01 @@ @@ @@ 08は、BD 40が06 01(一致)するときに、@@ @@ @@ 08のアドレスにジャンプする処理です。
一致しなければ、ここを素通りして08の後ろから実行します。
40BDがフラグオンであれば、@@ @@ @@で飛んだ先の処理を実行します。
2回目でセリフを変えたいので、一番最後に2A BD 40 02を入れフラグをオフにします。
単純にフラグかオンかオフで良い場合は29や2Aスクリプトを使います。
イベント変数0x8000番台(値を一次保存する場所)や
中身に格納する値によって分岐させたい時(00001以外を入れる場合)は16スクリプトを使います。
06 01 @@ @@ @@ 08は、BD 40が06 01(一致)するときに、@@ @@ @@ 08のアドレスにジャンプする処理です。
一致しなければ、ここを素通りして08の後ろから実行します。
40BDがフラグオンであれば、@@ @@ @@で飛んだ先の処理を実行します。
2回目でセリフを変えたいので、一番最後に2A BD 40 02を入れフラグをオフにします。
単純にフラグかオンかオフで良い場合は29や2Aスクリプトを使います。
イベント変数0x8000番台(値を一次保存する場所)や
中身に格納する値によって分岐させたい時(00001以外を入れる場合)は16スクリプトを使います。
説明は以上です。
- NPCにイベントを設定する
- 踏むと発動するスクリプト
- フラグのオンオフ
- 条件分岐
が理解できましたでしょうか。
理解できるまで資料wikiのイベントスクリプトのページ、イベントスクリプトテンプレートのページを熟読してください。
https://wikiwiki.jp/pokemonhack/
https://wikiwiki.jp/pokemonhack/
リヴァイアサンのブログも参考になります。
http://blog.livedoor.jp/maidara/archives/12870751.html
http://blog.livedoor.jp/maidara/archives/12870751.html
ここまでのチュートリアルができていれば、新規でマップが作れますし、トレーナーデータを設定して
次のチャートは画像導入になります。
添付ファイル