携帯版DQ3も発売されて結構経ったのでそろそろ偽装モードも解除できるかなあと思ったら今度はau向けにリリースされるようですね。DQ1-3はもう家庭用ゲーム機で本腰入れてリメイクするにはボリュームが足らなすぎるっていうことなんですかね。これといって追加できる新要素もないし、本家なのであまりドラスティックに変えるわけにもいかないし、まあしょうがないのでしょう。
まずは、「フラグがONになるまで竜の女王を石化させる」を実装します。竜の女王のNPCは通常の16×24のキャラクターグラフィックではなく、スプライトを使用して描画しているため、動かないようにするには1枚のスプライトを別途用意しないといけないかなーと思っていたのですが、割とさっくり実装できました。
- SR: $0CC8BC 竜の女王の城NPC情報設定
0CC8BC | JSL $CDF61C | SR: $0DF61C | 竜の女王の城NPC設定(サブ) |
---|---|---|---|
略 |
- SR: $0DF61C 竜の女王の城NPC設定(サブ)(新SR)
0DF61C | LDA $3551 | A=$3551 | |
---|---|---|---|
0DF61F | AND #$0001 | A&=#$0001 | 竜の女王が死亡している? |
0DF622 | BNE #$18 | if(z==off) goto $0DF63C | |
0DF624 | LDA $35B4 | A=$35B4 | |
0DF627 | AND #$0020 | A&=#$0020 | オルテガが竜の女王の石化の呪いを解いた |
0DF62A | BEQ #$09 | if(z==on) goto $0DF635 | |
0DF62C | LDA #$0398 | A=#$0398 | |
0DF62F | JSL $C75828 | SR: $075828 | NPC1設定 |
0DF633 | BRA #$07 | goto $0DF63C | |
0DF635 | LDA #$05A4 | A=#$05A4 | |
0DF638 | JSL $C75828 | SR: $075828 | NPC1設定 |
0DF63C | RTL | return |
- SR: $0DF5FB NPC1_TalkSR_05A4(新SR)
0DF5FB | JSL $C737BE | SR: $0737BE 引数:1#$1056 | メッセージ表示 |
---|---|---|---|
0DF601 | RTL | return |
- SR: $0DF602 NPC1_MoveSR_05A4(新SR)
0DF602 | LDA #$0093 | A=#$0093 | スプライト番号 |
---|---|---|---|
0DF605 | LDX #$0A10 | X=#$0A10 | X座標指定? |
0DF608 | LDY #$0AC8 | Y=#$0AC8 | Y座標指定? |
0DF60B | JSL $C73C42 | SR: $073C42 引数:1#$03BB | スプライト配置?(引数はパレットアクセスID) |
0DF611 | LDA #$0000 | A=#$0000 | |
0DF614 | LDX #$000A | X=#$000A | |
0DF617 | JSL $C73CED | SR: $073CED | |
0DF61B | RTL | return |
止まったまま動かない竜の女王を実装するには、基本もともとの実装SR: $0B98C4(NPC1_MoveSR_0398)を参考にすればOKです。SR: $0B98C4の先頭部分は以下のようになっています。
- SR: $0B98C4 NPC1_MoveSR_0398
0B98C4 | JSL $CCDADF | SR: $0CDADF | |
---|---|---|---|
0B98C8 | JSL $CCD784 | SR: $0CD784 | |
0B98CC | LDA #$0093 | A=#$0093 | スプライト番号 |
0B98CF | LDX #$0A10 | X=#$0A10 | X座標指定? |
0B98D2 | LDY #$0AC8 | Y=#$0AC8 | Y座標指定? |
0B98D5 | JSL $C73C42 | SR: $073C42 引数:1#$038E | スプライト配置?(引数はパレットアクセスID) |
0B98DB | LDA #$0000 | A=#$0000 | |
0B98DE | LDX #$000A | X=#$000A | |
0B98E1 | JSL $C73CED | SR: $073CED | |
0B98E5 | COP | goto $00FFE4 | |
0B98E6 | LDA $3434 | A=$3434 | |
0B98E9 | CMP #$03E8 | A>=#$03E8? | カウンタが1000以上か? |
0B98EC | BCC #$03 | if(c==off) goto $0B98F1 | |
0B98EE | JMP $98F9 ($0B98F9) | goto $0B98F9 | |
0B98F1 | JSL $C73E69 | SR: $073E69 | 次のスプライトを表示? |
0B98F5 | COP | goto $00FFE4 | |
0B98F6 | JMP $98E6 ($0B98E6) | goto $0B98E6 | |
略 |
このNPCは話し掛けるとカウンタに1000がセットされ、イベント(会話+エフェクト後消滅+卵表示など)が発生するわけですが、話し掛ける=カウンタに1000がセットされるまでは上記$0B98E6-F6の間を延々とループするわけです。この際実行されるSR: $073E69がどうやら次のスプライトを1枚表示する、と推測できます。動かないNPCにするにはこのループ部分を省けばいい、ということなのでその部分をばっさりカットすれば実装終わりです。あとは石化っぽくみせるために灰色のパレットを追加するとか、城内の他のNPCの台詞を条件に応じて変えるとかする作業があるのですが、特筆すべき点も無いので省略します。
コメント