ゲームオーバーになるとドラクエⅡのほこらに拉致されると評判の「アタックアニマル学園」を解析する。 わりとやる気無いんで無敵からサーチ。 死んだ後に無敵時間があるので、比較サーチをすると0x030B番地が無敵時間だと判明。 on readでブレイクポイントを仕掛けると、いらんもんがドカドカ引っかかるんで、on writeでブレイクポイントを仕掛けて死んでみる。 D6A1 lda $2CD0,x [$????] D6A4 cmp #$09 D6A6 bne $D6C4 D6A8 lda #$02 D6AA sta $0601 D6AD lda $3D D6AF cmp #$05 D6B1 beq $D6F5 D6B3 cmp #$04 D6B5 bne $D6BF D6B7 inc $04E4 D6BA lda #$01 D6BC sta $0601 D6BF inc $3D D6C1 jmp $D6F5 D6C4 lda $02ED D6C7 bne $D6CC D6C9 dec $04E4 D6CC lda #$00 D6CE sta $3D D6D0 lda #$01 D6D2 sta $030B <<ここでブレイク D6D5 sta $0290 D6D8 lda #$00 D6DA sta $0280 D6DD sta $0260 D6E0 sta $0270 D6E3 jsr $C1CE D6E6 lda #$05 D6E8 sta $0602 D6EB rts D6EC inx D6ED cpx #$0C D6EF beq $D6F4 D6F1 jmp $D664 D6F4 rts D6F5 lda #$00 D6F7 sta $02C0,x [$????] D6FA rts ここで調べてみると、0x3D番地はパワーアップ数、0x04E4番地は残り人数のようなので、このまわりの処理自体を飛ばさなければならず、 また単純に0xD6A6番地の分岐を潰した場合、勝手にパワーアップしてしまうので、それも避けたい。 ということで、0xD6A6番地からの分岐先を0xD6EB番地のrts命令に変更するため"bne $D6C4"(D0 1C)を"bne $D6EB"(D0 43)に置き換える。 これで無敵化完了。 次はパワーアップをいじってみる。 さっき調べたとおり0x3D番地がパワーアップ数を表しているので、ここにon writeでブレイクポイントを仕掛けてゲームスタートすると、いきなりブレイクがかかる。 C25E lda #$00 C260 sta $3D <<ここでブレイク これは簡単、0xC25E番地を"lda #$00"(A9 00)から"lda #$05"(A9 05)にすれば、最初からフルパワーアップになる。 で、このままだと死ぬとパワーダウンしちゃうので、それも潰す。 書き換え対象は、無敵化の時に出てきた0xD6CE番地。ここを"sta $3D"(85 3D)から"lda $3D"(A5 3D)にすればいい。 さて、無敵だと少し味気ないけど、このゲーム相当難しいので、残り人数を増えやすくしてみる。 このゲームでは時間の経過で勝手に10点づつ加算されるが、これを増やしてみようと思う。 スコアは0x93〜0x99番地に上から一桁づつ格納されているので、十の位である0x99番地にon readでブレイクポイントを仕掛けるが、 関係なさそうなところにしか引っかからなかったので、on writeでブレイクポイントを仕掛ける。 DC1B lda $0100,x [$0109] DC1E sta $0090,y [$0099] <<ここでブレイク どうも0x93〜0x99番地は表示のみで、0x0103〜0x0109番地が本当の格納先のようなので、0x0109番地にon readでブレイクポイントを仕掛ける。 DBB5 clc DBB6 adc $0103,x [$0109] <<ここでブレイク 加算しているのはわかるが、つかみきれないので、トレーサで少しさかのぼる。 C7B8 ldx #$06 C7BA lda #$01 C7BC jsr $DBB5 0xC7B8番地でxレジスタにセットされている値が桁指定になるので、"ldx #$06"(A2 06)を"ldx #$05"(A2 05)にすると百点、 "ldx #$04"(A2 04)なら千点づつ加算されることになる。 ちなみに、カウンターストップするとそれ以上残り人数は増えないので、ループの心配はない。 無敵 C0D80422 最初からフルパワー F2FFED10 死んでもパワーダウンしない F18E3756 走行点100点 F269E66A 走行点1.000点 F7A862D2 走行点10.000点 EEECFDFC 走行点100.000点 EB2D7944