前回からの続きです。まだ初期化処理中です。
- SR: $023474 PC側戦闘中情報セット
023474 | PHP | Push P Flag | |
---|---|---|---|
023475 | PHB | Push DB | |
023476 | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
023478 | PEA #$7E7E | Push #$7E7E | |
02347B | PLB | Pull DB | |
02347C | PLB | Pull DB | |
02347D | JSL $C42B1C | SR: $042B1C 引数:1#$08 引数:2#$FE | パーティ人数取得 |
023483 | LDY #$0000 | Y=#$0000 | |
023486 | JSL $C42C26 | SR: $042C26 引数:1#$08 引数:2#$FD 引数:3#$FF | キャラクターインデックス取得 |
02348D | ORA #$0100 | Aor=#$0100 | キャラクターIDに+#$0100する |
023490 | STA $2587 | $2587=A | |
023493 | LDA #$0006 | A=#$0006 | グループIDをセット |
023496 | STA $2589 | $2589=A | |
023499 | JSL $C2B573 | SR: $02B573 | 戦闘中情報初期化 |
02349D | INY | Y++ | |
02349E | DEX | X– | |
02349F | BNE #$E5 | if(z==off) goto $023486 | |
0234A1 | PLB | Pull DB | |
0234A2 | PLP | Pull P Flag | |
0234A3 | RTL | return |
まずはPC側からの初期化です。得られたキャラクターID(主人公:1、ハッサン:2…)に+#$0100してモンスターIDと区別しています。DQ3ではここは各キャラクターの移動中のアドレスでした。モンスターをあと256体追加する場合にはここを+#$0200すればいいということになります(他も変える必要はありますが)。グループIDには6がセットされるようです。(4は召喚モンスター,5は?)
- SR: $0234A4 モンスター側戦闘中情報セット
0234A4 | PHP | Push P Flag | |
---|---|---|---|
0234A5 | PHB | Push DB | |
0234A6 | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
0234A8 | PEA #$7E7E | Push #$7E7E | |
0234AB | PLB | Pull DB | |
0234AC | PLB | Pull DB | |
0234AD | LDA #$0001 | A=#$0001 | |
0234B0 | PEA #$2517 | Push #$2517 | |
0234B3 | PEA #$0040 | Push #$0040 | |
0234B6 | PEA #$7E00 | Push #$7E00 | |
0234B9 | JSL $C929B0 | SR: $0929B0 | RAM上情報変更 |
0234BD | LDA $574E | A=$574E | |
0234C0 | STA $25D5 | $25D5=A | |
0234C3 | LDX #$0000 | X=#$0000 | |
0234C6 | LDY $2008,X | Y=$2008+X | |
0234C9 | BEQ #$2B | if(z==on) goto $0234F6 | |
0234CB | LDA $2000,X | A=$2000+X | |
0234CE | BEQ #$26 | if(z==on) goto $0234F6 | |
0234D0 | STA $2587 | $2587=A | |
0234D3 | TXA | A=X | |
0234D4 | LSR | A>>1 | |
0234D5 | STA $2589 | $2589=A | グループIDをセット |
0234D8 | JSL $C2B573 | SR: $02B573 | 戦闘中情報初期化 |
0234DC | JSR $3510 | SR: $023510 | デスタムーア出現時特殊処理? |
0234DF | PHX | Push X | |
0234E0 | LDX $258B | X=$258B | |
0234E3 | LDA $25D5 | A=$25D5 | |
0234E6 | JSL $C2EF6B | SR: $02EF6B 引数:1#$203A | 戦闘中キャラクター情報変更 インデックス:X |
0234EC | INC $25D5 | $25D5++ | |
0234EF | INC $25D5 | $25D5++ | |
0234F2 | PLX | Pull X | |
0234F3 | DEY | Y– | |
0234F4 | BNE #$E2 | if(z==off) goto $0234D8 | |
0234F6 | INX | X++ | |
0234F7 | INX | X++ | |
0234F8 | CPX #$0008 | X>=#$0008? | |
0234FB | BCC #$C9 | if(c==off) goto $0234C6 | |
0234FD | LDA #$0000 | A=#$0000 | |
023500 | PEA #$2517 | Push #$2517 | |
023503 | PEA #$0040 | Push #$0040 | |
023506 | PEA #$7E00 | Push #$7E00 | |
023509 | JSL $C929B0 | SR: $0929B0 | RAM上情報変更 |
02350D | PLB | Pull DB | |
02350E | PLP | Pull P Flag | |
02350F | RTL | return |
やっていることはPC側とだいたい同じです。各出現グループに応じてグループIDをセットしているくらいなのと、デスタムーア出現時に特別な処理をしているくらいです。
- SR: $023510 デスタムーア出現時特殊処理
023510 | PEA #$2518 | Push #$2518 | |
---|---|---|---|
023513 | PEA #$0060 | Push #$0060 | |
023516 | PEA #$7E00 | Push #$7E00 | |
023519 | JSL $C92965 | SR: $092965 | RAM上情報取得 |
02351D | BNE #$35 | if(z==off) goto $023554 | |
02351F | LDA $2587 | A=$2587 | |
023522 | CMP #$00EE | A==#$00EE? | デスタムーア第1形態 |
023525 | BEQ #$0F | if(z==on) goto $023536 | |
023527 | CMP #$00F0 | A==#$00F0? | デスタムーア第2形態 |
02352A | BEQ #$13 | if(z==on) goto $02353F | |
02352C | CMP #$00F2 | A==#$00F2? | デスタムーア第3形態 |
02352F | BEQ #$13 | if(z==on) goto $023544 | |
023531 | LDA #$0000 | A=#$0000 | |
023534 | BRA #$11 | goto $023547 | |
023536 | JSL $C49D30 | SR: $049D30 | デスタムーア第1形態出現時アニメーション |
02353A | LDA #$0001 | A=#$0001 | |
02353D | BRA #$08 | goto $023547 | |
02353F | LDA #$0002 | A=#$0002 | |
023542 | BRA #$03 | goto $023547 | |
023544 | LDA #$0003 | A=#$0003 | |
023547 | PEA #$2518 | Push #$2518 | |
02354A | PEA #$0060 | Push #$0060 | |
02354D | PEA #$7E00 | Push #$7E00 | |
023550 | JSL $C929B0 | SR: $0929B0 | RAM上情報変更 |
023554 | RTS | return |
これで7E2518の4,5ビットは1:デスタムーア第1形態、2:デスタムーア第2形態、3:デスタムーア第3形態を意味している事がわかります。とはいえ、$023519でこの値が0以外ならこのSRを抜けてしまうので、第2形態以降はどこでセットするんだという感じはしますが(それぞれ前の形態を倒した時に値がリセットされるのかもしれません)。
コメント