今回も改造無しで解析のみ行います。
前回の解析でキャラクターの動かし方は大体わかりましたが、「はじめはいなかったキャラクターが後からマップに登場する」やり方がまだわかりません。そういう条件に該当するイベントがないか調べてみると、「ひとさらいのアジトB2F」のイベントが思い当たりました。このイベントは、最初はマップにはいなかったカンダタ(2回目)と子分二人がグプタとタニアを牢から出した後マップに現れます。というわけでこの部分を真似ればよさそうです。
- SR: $0CCDE9 ひとさらいのアジトB2FNPC情報設定
略 | |||
---|---|---|---|
0CCE37 | LDA #$04FC | A=#$04FC | グラフィック=カンダタ |
0CCE3A | JSL $C75828 | SR: $075828 | NPC1設定 |
0CCE3E | LDA #$04FD | A=#$04FD | グラフィック=子分 |
0CCE41 | JSL $C75828 | SR: $075828 | NPC1設定 |
0CCE45 | LDA #$04FE | A=#$04FE | グラフィック=子分 |
0CCE48 | JSL $C75828 | SR: $075828 | NPC1設定 |
0CCE4C | RTL | return |
この3人の初期座標をNPC1($1A08DA-)で見てみると、#$FFになっています。さらにキャラクターグラフィックも合致しています。どうやら、最初は画面隅(右下)に配置しておいて必要になったら所定の位置に出現させるということのようです。早速これらのキャラクターのMoveSRを見てみます。
- SR: $0D486F NPC1_MoveSR_04FC
略 | |||
---|---|---|---|
0D4877 | COP | goto $00FFE4 | |
0D4878 | LDA $3555 | A=$3555 | |
0D487B | AND #$0010 | A&=#$0010 | |
0D487E | BEQ #$03 | if(z==on) goto $0D4883 | |
0D4880 | JMP $4887 ($0D4887) | goto $0D4887 | |
0D4883 | COP | goto $00FFE4 | |
0D4884 | JMP $4878 ($0D4878) | goto $0D4878 | |
0D4887 | JSL $CDAFA1 | SR: $0DAFA1 | カウンタが15000になるまで待機 |
0D488B | LDA #$002D | A=#$002D | |
0D488E | LDX #$004B | X=#$004B | |
0D4891 | JSL $C75305 | SR: $075305 | 出現座標を指定 |
0D4895 | JSL $CCD847 | SR: $0CD847 | 下を向く |
略 |
というわけでSR: $075305でAレジスタをX座標、XレジスタをY座標とした位置に出現する座標を指定し、SR: $0CD847で下を向いた状態で出現させる、という仕組みになっているようです。とりあえずこれでいろいろネタが揃ったので次回から実装に移ります。