DQ6戦闘部分解説2

前回からの続きです。まだ初期化処理中です。

  • SR: $023474 PC側戦闘中情報セット
023474PHPPush P Flag
023475PHBPush DB
023476REP #$30m=off(A/M:16b) x=off(X/Y:16b)
023478PEA #$7E7EPush #$7E7E
02347BPLBPull DB
02347CPLBPull DB
02347DJSL $C42B1CSR: $042B1C 引数:1#$08 引数:2#$FEパーティ人数取得
023483LDY #$0000Y=#$0000
023486JSL $C42C26SR: $042C26 引数:1#$08 引数:2#$FD 引数:3#$FFキャラクターインデックス取得
02348DORA #$0100Aor=#$0100キャラクターIDに+#$0100する
023490STA $2587$2587=A
023493LDA #$0006A=#$0006グループIDをセット
023496STA $2589$2589=A
023499JSL $C2B573SR: $02B573戦闘中情報初期化
02349DINYY++
02349EDEXX–
02349FBNE #$E5if(z==off) goto $023486
0234A1PLBPull DB
0234A2PLPPull P Flag
0234A3RTLreturn

まずはPC側からの初期化です。得られたキャラクターID(主人公:1、ハッサン:2…)に+#$0100してモンスターIDと区別しています。DQ3ではここは各キャラクターの移動中のアドレスでした。モンスターをあと256体追加する場合にはここを+#$0200すればいいということになります(他も変える必要はありますが)。グループIDには6がセットされるようです。(4は召喚モンスター,5は?)

  • SR: $0234A4 モンスター側戦闘中情報セット
0234A4PHPPush P Flag
0234A5PHBPush DB
0234A6REP #$30m=off(A/M:16b) x=off(X/Y:16b)
0234A8PEA #$7E7EPush #$7E7E
0234ABPLBPull DB
0234ACPLBPull DB
0234ADLDA #$0001A=#$0001
0234B0PEA #$2517Push #$2517
0234B3PEA #$0040Push #$0040
0234B6PEA #$7E00Push #$7E00
0234B9JSL $C929B0SR: $0929B0RAM上情報変更
0234BDLDA $574EA=$574E
0234C0STA $25D5$25D5=A
0234C3LDX #$0000X=#$0000
0234C6LDY $2008,XY=$2008+X
0234C9BEQ #$2Bif(z==on) goto $0234F6
0234CBLDA $2000,XA=$2000+X
0234CEBEQ #$26if(z==on) goto $0234F6
0234D0STA $2587$2587=A
0234D3TXAA=X
0234D4LSRA>>1
0234D5STA $2589$2589=AグループIDをセット
0234D8JSL $C2B573SR: $02B573戦闘中情報初期化
0234DCJSR $3510SR: $023510デスタムーア出現時特殊処理?
0234DFPHXPush X
0234E0LDX $258BX=$258B
0234E3LDA $25D5A=$25D5
0234E6JSL $C2EF6BSR: $02EF6B 引数:1#$203A戦闘中キャラクター情報変更 インデックス:X
0234ECINC $25D5$25D5++
0234EFINC $25D5$25D5++
0234F2PLXPull X
0234F3DEYY–
0234F4BNE #$E2if(z==off) goto $0234D8
0234F6INXX++
0234F7INXX++
0234F8CPX #$0008X>=#$0008?
0234FBBCC #$C9if(c==off) goto $0234C6
0234FDLDA #$0000A=#$0000
023500PEA #$2517Push #$2517
023503PEA #$0040Push #$0040
023506PEA #$7E00Push #$7E00
023509JSL $C929B0SR: $0929B0RAM上情報変更
02350DPLBPull DB
02350EPLPPull P Flag
02350FRTLreturn

やっていることはPC側とだいたい同じです。各出現グループに応じてグループIDをセットしているくらいなのと、デスタムーア出現時に特別な処理をしているくらいです。

  • SR: $023510 デスタムーア出現時特殊処理
023510PEA #$2518Push #$2518
023513PEA #$0060Push #$0060
023516PEA #$7E00Push #$7E00
023519JSL $C92965SR: $092965RAM上情報取得
02351DBNE #$35if(z==off) goto $023554
02351FLDA $2587A=$2587
023522CMP #$00EEA==#$00EE?デスタムーア第1形態
023525BEQ #$0Fif(z==on) goto $023536
023527CMP #$00F0A==#$00F0?デスタムーア第2形態
02352ABEQ #$13if(z==on) goto $02353F
02352CCMP #$00F2A==#$00F2?デスタムーア第3形態
02352FBEQ #$13if(z==on) goto $023544
023531LDA #$0000A=#$0000
023534BRA #$11goto $023547
023536JSL $C49D30SR: $049D30デスタムーア第1形態出現時アニメーション
02353ALDA #$0001A=#$0001
02353DBRA #$08goto $023547
02353FLDA #$0002A=#$0002
023542BRA #$03goto $023547
023544LDA #$0003A=#$0003
023547PEA #$2518Push #$2518
02354APEA #$0060Push #$0060
02354DPEA #$7E00Push #$7E00
023550JSL $C929B0SR: $0929B0RAM上情報変更
023554RTSreturn

これで7E2518の4,5ビットは1:デスタムーア第1形態、2:デスタムーア第2形態、3:デスタムーア第3形態を意味している事がわかります。とはいえ、$023519でこの値が0以外ならこのSRを抜けてしまうので、第2形態以降はどこでセットするんだという感じはしますが(それぞれ前の形態を倒した時に値がリセットされるのかもしれません)。

コメント

タイトルとURLをコピーしました