[btlecity] Vs. Battle City

This forum is for posting M.A.M.E. Work In Progress "Arcade"cheats that are not quite ready for the prime time. If the cheats are buggy or the cheat descriptions are non-standard then please post them here. Help maybe given but there are no guarantees and they will only be added to the cheat file when the cheat file maintainer is happy with them.
Post Reply
jman
Posts: 843
Joined: Tue Dec 01, 2020 1:24 pm

[btlecity] Vs. Battle City

Post by jman »

Code: Select all

<cheat desc="no hit - player">
    <script state="on">
        <action>maincpu.mw@e8f3 = 2290</action> <!-- bullet -->
    </script>
    <script state="off">
        <action>maincpu.mw@e8f3 = 33a9</action>
    </script>
</cheat>

<cheat desc="no hit - headquarter">
    <script state="on">
        <action>maincpu.mb@e853 = 60</action>
    </script>
    <script state="off">
        <action>maincpu.mb@e853 = a9</action>
    </script>
</cheat>

<cheat desc="auto fire">
    <script state="on">
        <action>maincpu.mb@e1e5 = 06</action>
    </script>
    <script state="off">
        <action>maincpu.mb@e1e5 = 08</action>
    </script>
</cheat>

<cheat desc="walk through wall">
    <script state="on">
        <action>maincpu.mq@dd86 = f03830a620205aa5</action>
        <action>maincpu.mq@ddab = f01330a620205aa5</action>
        <action>maincpu.mq@a620 = 206000a903b002c9</action>
        <action>maincpu.mq@a628 = ffffff6011b1d726</action>
        <!--
        dd86 | a5 5a    : lda $5a
        dd88 | 20 20 a6 : jsr $a620
        ddab | a5 5a    : lda $5a
        ddad | 20 20 a6 : jsr $a620
        a620 | c9 02    : cmp #$02
        a622 | b0 03    : bcs $a627
        a624 | a9 00    : lda #$00
        a626 | 60       : rts
        a627 | 20 26 d7 : jsr $d726
        a62a | b1 11    : lda ($11),y
        a62c | 60       : rts
        -->
    </script>
    <script state="off">
        <action>maincpu.mq@dd86 = f0383011b1d72620</action>
        <action>maincpu.mq@ddab = f0133011b1d72620</action>
        <action>maincpu.mq@a620 = ffffffffffffffff</action>
        <action>maincpu.mq@a628 = ffffffffffffffff</action>
    </script>
</cheat>

<cheat desc="player speed">
    <parameter min="0x01" max="0x05" step="0x01" />
    <script state="on">
        <action>maincpu.md@dd58 =         18a5b020</action> <!-- y position -->
        <action>maincpu.md@dd68 =         18a5bf20</action> <!-- x position -->
        <action>maincpu.mq@a5b0 = 20e52db907b002e0</action>
        <action>maincpu.mq@a5b8 = e060e52db960a5ce</action>
        <action>maincpu.mq@a5c0 = ce20e529b907b002</action>
        <action>maincpu.mq@a5c8 = 04f060e529b960a5</action>
        <action>maincpu.mq@a5d0 = 6000a96000a90330</action>
        <!--
        a5b0 | e0 02    : cpx #$02    // y position
        a5b2 | b0 07    : bcs $a5bb
        a5b4 | b9 2d e5 : lda $e52d,y
        a5b7 | 20 ce a5 : jsr $a5ce
        a5ba | 60       : rts
        a5bb | b9 2d e5 : lda $e52d,y
        a5be | 60       : rts
        a5bf | e0 02    : cpx #$02    // x position
        a5c1 | b0 07    : bcs $a5ca
        a5c3 | b9 29 e5 : lda $e529,y
        a5c6 | 20 ce a5 : jsr $a5ce
        a5c9 | 60       : rts
        a5ca | b9 29 e5 : lda $e529,y
        a5cd | 60       : rts
        a5ce | f0 04    : beq $a5d4
        a5d0 | 30 03    : bmi $a5d5
        a5d2 | a9 xx    : lda #$xx
        a5d4 | 60       : rts
        a5d5 | a9 xx    : lda #$xx
        a5d7 | 60       : rts
        -->
    </script>
    <script state="change">
        <action>maincpu.mb@a5d3 =  param</action>
        <action>maincpu.mb@a5d6 = -param</action>
    </script>
    <script state="off">
        <action>maincpu.md@dd58 =         18e52db9</action>
        <action>maincpu.md@dd68 =         18e529b9</action>
        <action>maincpu.mq@a5b0 = ffffffffffffffff</action>
        <action>maincpu.mq@a5b8 = ffffffffffffffff</action>
        <action>maincpu.mq@a5c0 = ffffffffffffffff</action>
        <action>maincpu.mq@a5c8 = ffffffffffffffff</action>
        <action>maincpu.mq@a5d0 = ffffffffffffffff</action>
    </script>
</cheat>

<cheat desc="bullet speed">
    <parameter min="0x01" max="0x05" step="0x01" />
    <script state="on">
        <action>maincpu.md@e117 =         0aa5e020</action> <!-- x position -->
        <action>maincpu.md@e120 =         0aa5f020</action> <!-- y position -->
        <action>maincpu.mq@a5e0 = e529b907f0a60020</action>
        <action>maincpu.mq@a5e8 = 60e529b960a61620</action>
        <action>maincpu.mq@a5f0 = e52db907f0a60020</action>
        <action>maincpu.mq@a5f8 = 60e52db960a61620</action>
        <action>maincpu.mq@a600 = 0bf001e00ff000e0</action>
        <action>maincpu.mq@a608 = 03f009e007f008e0</action>
        <action>maincpu.mq@a610 = 04f06001a96000a9</action>
        <action>maincpu.mq@a618 = 6000a96000a90330</action>
        <!--
        a5e0 | 20 00 a6 : jsr $a600   // x position
        a5e3 | f0 07    : beq $a5ec
        a5e5 | b9 29 e5 : lda $e529,y
        a5e8 | 20 16 a6 : jsr $a616
        a5eb | 60       : rts
        a5ec | b9 29 e5 : lda $e529,y
        a5ef | 60       : rts
        a5f0 | 20 00 a6 : jsr $a600   // y position
        a5f3 | f0 07    : beq $a5fc
        a5f5 | b9 2d e5 : lda $e52d,y
        a5f8 | 20 16 a6 : jsr $a616
        a5fb | 60       : rts
        a5fc | b9 2d e5 : lda $e52d,y
        a5ff | 60       : rts
        a600 | e0 00    : cpx #$00
        a602 | f0 0f    : beq $a613
        a604 | e0 01    : cpx #$01
        a606 | f0 0b    : beq $a613
        a608 | e0 08    : cpx #$08
        a60a | f0 07    : beq $a613
        a60c | e0 09    : cpx #$09
        a60e | f0 03    : beq $a613
        a610 | a9 00    : lda #$00
        a612 | 60       : rts
        a613 | a9 01    : lda #$01
        a615 | 60       : rts
        a616 | f0 04    : beq $a61c
        a618 | 30 03    : bmi $a61d
        a61a | a9 xx    : lda #$xx
        a61c | 60       : rts
        a61d | a9 xx    : lda #$xx
        a61f | 60       : rts
        -->
    </script>
    <script state="change">
        <action>maincpu.mb@a61b =  param</action>
        <action>maincpu.mb@a61e = -param</action>
    </script>
    <script state="off">
        <action>maincpu.md@e117 =         0ae529b9</action>
        <action>maincpu.md@e120 =         0ae52db9</action>
        <action>maincpu.mq@a5e0 = ffffffffffffffff</action>
        <action>maincpu.mq@a5e8 = ffffffffffffffff</action>
        <action>maincpu.mq@a5f0 = ffffffffffffffff</action>
        <action>maincpu.mq@a5f8 = ffffffffffffffff</action>
        <action>maincpu.mq@a600 = ffffffffffffffff</action>
        <action>maincpu.mq@a608 = ffffffffffffffff</action>
        <action>maincpu.mq@a610 = ffffffffffffffff</action>
        <action>maincpu.mq@a618 = ffffffffffffffff</action>
    </script>
</cheat>

<cheat desc="sound test mode">
    <comment>reset the game (F3) to enter sound test mode</comment>
    <script state="on">
        <action>maincpu.mw@c0ad =             a4e0</action>
        <action>maincpu.mq@a4e0 = 82858185808500a9</action>
        <action>maincpu.mq@a4e8 = 818506a5828581a5</action>
        <action>maincpu.mq@a4f0 = 02d040c9f4f082c5</action>
        <action>maincpu.mq@a4f8 = 80e602d080c980c6</action>
        <action>maincpu.mq@a500 = a513204805d002c9</action>
        <action>maincpu.mq@a508 = ebf62003d001c968</action>
        <action>maincpu.mq@a510 = a530bc80a6a4e84c</action>
        <action>maincpu.mq@a518 = 838503a9c8a550be</action>
        <action>maincpu.mq@a520 = c8e803009da550b9</action>
        <action>maincpu.mq@a528 = ffffff60f4d083c6</action>
        <action>maincpu.mq@a530 = 1c1814100c080400</action>
        <action>maincpu.mq@a538 = 3c3834302c282420</action>
        <action>maincpu.mq@a540 = 5c5854504c484440</action>
        <action>maincpu.mq@a548 = ffffff706c686460</action>
        <action>maincpu.mq@a550 = 0101010100000100</action>
        <action>maincpu.mq@a558 = 0000010600010104</action>
        <action>maincpu.mq@a560 = 0000010800000107</action>
        <action>maincpu.mq@a568 = 0000010a00000109</action>
        <action>maincpu.mq@a570 = 0000010c0000010b</action>
        <action>maincpu.mq@a578 = 0000010e0000010d</action>
        <action>maincpu.mq@a580 = 000001100000010f</action>
        <action>maincpu.mq@a588 = 0000011200000111</action>
        <action>maincpu.mq@a590 = 0000011400000113</action>
        <action>maincpu.mq@a598 = 0000011700010115</action>
        <action>maincpu.mq@a5a0 = 0000011b01010118</action>
        <action>maincpu.mq@a5a8 = ffffffff0000011c</action>
        <!--
        c0ac | 20 e0 a4 : jsr $a4e0
        a4e0 | a9 00    : lda #$00
        a4e2 | 85 80    : sta $80
        a4e4 | 85 81    : sta $81
        a4e6 | 85 82    : sta $82
        a4e8 | a5 81    : lda $81
        a4ea | 85 82    : sta $82
        a4ec | a5 06    : lda $06     // read input
        a4ee | 85 81    : sta $81
        a4f0 | c5 82    : cmp $82
        a4f2 | f0 f4    : beq $a4e8
        a4f4 | c9 40    : cmp #$40
        a4f6 | d0 02    : bne $a4fa
        a4f8 | c6 80    : dec $80     // decrease code
        a4fa | c9 80    : cmp #$80
        a4fc | d0 02    : bne $a500
        a4fe | e6 80    : inc $80     // increase code
        a500 | c9 02    : cmp #$02
        a502 | d0 05    : bne $a509
        a504 | 48       : pha
        a505 | 20 13 a5 : jsr $a513   // play sound
        a508 | 68       : pla
        a509 | c9 01    : cmp #$01
        a50b | d0 03    : bne $a510
        a50d | 20 f6 eb : jsr $ebf6   // stop sound
        a510 | 4c e8 a4 : jmp $a4e8
        a513 | a6 80    : ldx $80     // convert sound code to address
        a515 | bc 30 a5 : ldy $a530,x
        a518 | be 50 a5 : ldx $a550,y
        a51b | c8       : iny
        a51c | a9 03    : lda #$03
        a51e | 85 83    : sta $83
        a520 | b9 50 a5 : lda $a550,y
        a523 | 9d 00 03 : sta $0300,x
        a526 | e8       : inx
        a527 | c8       : iny
        a528 | c6 83    : dec $83
        a52a | d0 f4    : bne $a520
        a52c | 60       : rts
        a530 - a540     : table 1
        a550 - a5b0     : table 2
        -->
    </script>
    <script state="run">
        <output format="----- battle city sound test mode -----" line="10" align="center" />
        <output format="left : code decrement"                   line="11" align="center" />
        <output format="right : code increment"                  line="12" align="center" />
        <output format="button 1 : play sound"                   line="13" align="center" />
        <output format="button 2 : stop sound"                   line="14" align="center" />
        <output format="----------------------------"            line="15" align="center" />
        <output format="&lt;&lt; sound code %2.2X &gt;&gt;"      line="17" align="center">
            <argument>maincpu.pb@0080</argument>
        </output>
    </script>
    <script state="off">
        <action>maincpu.mw@c0ad =             c65c</action>
        <action>maincpu.mq@a4e0 = ffffffffffffffff</action>
        <action>maincpu.mq@a4e8 = ffffffffffffffff</action>
        <action>maincpu.mq@a4f0 = ffffffffffffffff</action>
        <action>maincpu.mq@a4f8 = ffffffffffffffff</action>
        <action>maincpu.mq@a500 = ffffffffffffffff</action>
        <action>maincpu.mq@a508 = ffffffffffffffff</action>
        <action>maincpu.mq@a510 = ffffffffffffffff</action>
        <action>maincpu.mq@a518 = ffffffffffffffff</action>
        <action>maincpu.mq@a520 = ffffffffffffffff</action>
        <action>maincpu.mq@a528 = ffffffffffffffff</action>
        <action>maincpu.mq@a530 = ffffffffffffffff</action>
        <action>maincpu.mq@a538 = ffffffffffffffff</action>
        <action>maincpu.mq@a540 = ffffffffffffffff</action>
        <action>maincpu.mq@a548 = ffffffffffffffff</action>
        <action>maincpu.mq@a550 = ffffffffffffffff</action>
        <action>maincpu.mq@a558 = ffffffffffffffff</action>
        <action>maincpu.mq@a560 = ffffffffffffffff</action>
        <action>maincpu.mq@a568 = ffffffffffffffff</action>
        <action>maincpu.mq@a570 = ffffffffffffffff</action>
        <action>maincpu.mq@a578 = ffffffffffffffff</action>
        <action>maincpu.mq@a580 = ffffffffffffffff</action>
        <action>maincpu.mq@a588 = ffffffffffffffff</action>
        <action>maincpu.mq@a590 = ffffffffffffffff</action>
        <action>maincpu.mq@a598 = ffffffffffffffff</action>
        <action>maincpu.mq@a5a0 = ffffffffffffffff</action>
        <action>maincpu.mq@a5a8 = ffffffffffffffff</action>
    </script>
</cheat>
"sound test mode" is very complex because this game uses sound "address" instead of "code".
I force to convert "address" to "code" by two tables so that some sound code may be wrong (eg 0x14).
jman
Posts: 843
Joined: Tue Dec 01, 2020 1:24 pm

[btlecity] update

Post by jman »

Since 0.242, ROM code for vsnes.cpp doesn't work because of driver update.
I need to change region tag (maincpu → prg) and address. Address recalculation is very simple in this game. you subtact 0x8000 from address for original game program (eg. $e000 → $6000).

Code: Select all

<cheat desc="no hit">
    <script state="on">
        <action>prg.mw@68f3 = 2290</action> <!-- bullet ($e8f3) -->
    </script>
    <script state="off">
        <action>prg.mw@68f3 = 33a9</action>
    </script>
</cheat>

<cheat desc="no hit - headquarter">
    <script state="on">
        <action>prg.mb@6853 = 60</action> <!-- ($e853) -->
    </script>
    <script state="off">
        <action>prg.mb@6853 = a9</action>
    </script>
</cheat>

<cheat desc="auto fire">
    <script state="on">
        <action>prg.mb@61e5 = 06</action> <!-- ($e1e5) -->
    </script>
    <script state="off">
        <action>prg.mb@61e5 = 08</action>
    </script>
</cheat>
"no hit", "no hit - headquarter", "auto fire" : change tag and address.

Code: Select all

<cheat desc="walk through wall">
    <script state="on">
        <action>prg.mq@5d86 = f03830a4e0205aa5</action> <!-- ($dd86) -->
        <action>prg.mq@5dab = f01330a4e0205aa5</action> <!-- ($ddab) -->
        <action>prg.mq@24e0 = 206000a903b002c9</action>
        <action>prg.mq@24e8 = ffffff6011b1d726</action>
        <!--
        dd86 | a5 5a    : lda $5a
        dd88 | 20 e0 a4 : jsr $a4e0
        ===========================
        ddab | a5 5a    : lda $5a
        ddad | 20 e0 a4 : jsr $a4e0
        ===========================
        a4e0 | c9 02    : cmp #$02
        a4e2 | b0 03    : bcs $a4e7
        a4e4 | a9 00    : lda #$00
        a4e6 | 60       : rts
        a4e7 | 20 26 d7 : jsr $d726
        a4ea | b1 11    : lda ($11),y
        a4ec | 60       : rts
        -->
    </script>
    <script state="off">
        <action>prg.mq@5d86 = f0383011b1d72620</action>
        <action>prg.mq@5dab = f0133011b1d72620</action>
        <action>prg.mq@24e0 = ffffffffffffffff</action>
        <action>prg.mq@24e8 = ffffffffffffffff</action>
    </script>
</cheat>

<cheat desc="player speed">
    <parameter min="0x01" max="0x05" step="0x01" />
    <script state="on">
        <action>prg.md@5d58 =         18a4f020</action> <!-- y position ($dd58) -->
        <action>prg.md@5d68 =         18a4fe20</action> <!-- x position ($dd68) -->
        <action>prg.mq@24f0 = 4ce52db906b002e0</action>
        <action>prg.mq@24f8 = 02e060e52db9a50c</action>
        <action>prg.mq@2500 = a50c4ce529b906b0</action>
        <action>prg.mq@2508 = 033004f060e529b9</action>
        <action>prg.mq@2510 = ffff6000a96000a9</action>
        <!--
        a4f0 | e0 02    : cpx #$02    // y position
        a4f2 | b0 06    : bcs $a4fa
        a4f4 | b9 2d e5 : lda $e52d,y
        a4f7 | 4c 0c a5 : jmp $a50c
        a4fa | b9 2d e5 : lda $e52d,y
        a4fd | 60       : rts
        a4fe | e0 02    : cpx #$02    // x position
        a500 | b0 06    : bcs $a508
        a502 | b9 29 e5 : lda $e529,y
        a505 | 4c 0c a5 : jmp $a50c
        a508 | b9 29 e5 : lda $e529,y
        a50b | 60       : rts
        a50c | f0 04    : beq $a512
        a50e | 30 03    : bmi $a513
        a510 | a9 xx    : lda #$xx
        a512 | 60       : rts
        a513 | a9 xx    : lda #$xx
        a515 | 60       : rts
        -->
    </script>
    <script state="change">
        <action>prg.mb@2511 =  param</action>
        <action>prg.mb@2514 = -param</action>
    </script>
    <script state="off">
        <action>prg.md@5d58 =         18e52db9</action>
        <action>prg.md@5d68 =         18e529b9</action>
        <action>prg.mq@24f0 = ffffffffffffffff</action>
        <action>prg.mq@24f8 = ffffffffffffffff</action>
        <action>prg.mq@2500 = ffffffffffffffff</action>
        <action>prg.mq@2508 = ffffffffffffffff</action>
        <action>prg.mq@2510 = ffffffffffffffff</action>
    </script>
</cheat>
"walk through wall", "player speed" : change tag and address. Reallocate addresses for custom routine.

Code: Select all

<cheat desc="bullet speed">
    <parameter min="0x01" max="0x05" step="0x01" />
    <script state="on">
        <action>prg.md@6117 =         0aa52020</action> <!-- x position ($e117) -->
        <action>prg.md@6120 =         0aa53020</action> <!-- y position ($e120) -->
        <action>prg.mq@2520 = e529b907b0a54020</action>
        <action>prg.mq@2528 = 60e529b960a55420</action>
        <action>prg.mq@2530 = e52db907b0a54020</action>
        <action>prg.mq@2538 = 60e52db960a55420</action>
        <action>prg.mq@2540 = 0af001e00ef000e0</action>
        <action>prg.mq@2548 = 02f009e006f008e0</action>
        <action>prg.mq@2550 = 033004f060186038</action>
        <action>prg.mq@2558 = ffff6000a96000a9</action>
        <!--
        a520 | 20 40 a5 : jsr $a540   // x position
        a523 | b0 07    : bcs $a52c
        a525 | b9 29 e5 : lda $e529,y
        a528 | 20 54 a5 : jsr $a554
        a52b | 60       : rts
        a52c | b9 29 e5 : lda $e529,y
        a52f | 60       : rts
        a530 | 20 40 a5 : jsr $a540   // y position
        a533 | b0 07    : bcs $a53c
        a535 | b9 2d e5 : lda $e52d,y
        a538 | 20 54 a5 : jsr $a554
        a53b | 60       : rts
        a53c | b9 2d e5 : lda $e52d,y
        a53f | 60       : rts
        a540 | e0 00    : cpx #$00    // bullet check routine
        a542 | f0 0e    : beq $a552
        a544 | e0 01    : cpx #$01
        a546 | f0 0a    : beq $a552
        a548 | e0 08    : cpx #$08
        a54a | f0 06    : beq $a552
        a54c | e0 09    : cpx #$09
        a54e | f0 02    : beq $a552
        a550 | 38       : sec
        a551 | 60       : rts
        a552 | 18       : clc
        a553 | 60       : rts
        a554 | f0 04    : beq $a55a   // bullet speed routine
        a556 | 30 03    : bmi $a55b
        a558 | a9 xx    : lda #$xx
        a55a | 60       : rts
        a55b | a9 xx    : lda #$xx
        a55d | 60       : rts
        -->
    </script>
    <script state="change">
        <action>prg.mb@2559 =  param</action>
        <action>prg.mb@255c = -param</action>
    </script>
    <script state="off">
        <action>prg.md@6117 =         0ae529b9</action>
        <action>prg.md@6120 =         0ae52db9</action>
        <action>prg.mq@2520 = ffffffffffffffff</action>
        <action>prg.mq@2528 = ffffffffffffffff</action>
        <action>prg.mq@2530 = ffffffffffffffff</action>
        <action>prg.mq@2538 = ffffffffffffffff</action>
        <action>prg.mq@2540 = ffffffffffffffff</action>
        <action>prg.mq@2548 = ffffffffffffffff</action>
        <action>prg.mq@2550 = ffffffffffffffff</action>
        <action>prg.mq@2558 = ffffffffffffffff</action>
    </script>
</cheat>
"bullet speed" : change tag and address. Reallocate addresses for custom routine. Use "sec/clc" instead of "lda #$00/lda #$01".

Code: Select all

<cheat desc="short hit mark">
    <script state="on">
        <action>prg.md@6875 =         eaa56020</action> <!-- wall ($e875) -->
        <action>prg.md@6973 =         b5a56b20</action> <!-- enemy ($e973) -->
        <action>prg.mq@2560 = cc9511a902b002e0</action>
        <action>prg.mq@2568 = a902b002c06011b1</action>
        <action>prg.mq@2570 = ffffff6000cc9911</action>
        <!--
        a560 | e0 02    : cpx #$02    // wall
        a562 | b0 02    : bcs $a566
        a564 | a9 11    : lda #$11
        a566 | 95 cc    : sta $cc,x
        a568 | b1 11    : lda ($11),y
        a56a | 60       : rts
        a56b | c0 02    : cpy #$02    // enemy
        a56d | b0 02    : bcs $a571
        a57f | a9 11    : lda #$11
        a571 | 99 cc 00 : sta $00cc,y
        a574 | 60       : rts
        -->
    </script>
    <script state="off">
        <action>prg.md@6875 =         11b1cc95</action>
        <action>prg.md@6973 =         b500cc99</action>
        <action>prg.mq@2560 = ffffffffffffffff</action>
        <action>prg.mq@2568 = ffffffffffffffff</action>
        <action>prg.mq@2570 = ffffffffffffffff</action>
    </script>
</cheat>
"short hit mark" : add new.

Code: Select all

<cheat desc="sound test mode">
    <comment>reset the game (F3) to enter sound test mode</comment>
    <script state="on">
        <action>prg.mw@40ad =             a580</action> <!-- ($c0ad) -->
        <action>prg.mq@2580 = 81a58185808500a9</action>
        <action>prg.mq@2588 = 82c5818506a58285</action>
        <action>prg.mq@2590 = d040c9a880a6f4f0</action>
        <action>prg.mq@2598 = c9e801d080c9ca01</action>
        <action>prg.mq@25a0 = aa10e9388a06d020</action>
        <action>prg.mq@25a8 = 69188a06d010c998</action>
        <action>prg.mq@25b0 = d002c9808698aa10</action>
        <action>prg.mq@25b8 = 03d001c9a5c62003</action>
        <action>prg.mq@25c0 = a548a5864cebf620</action>
        <action>prg.mq@25c8 = e8a5e2bcaa0a0a80</action>
        <action>prg.mq@25d0 = 99a5e2bd838503a9</action>
        <action>prg.mq@25d8 = f4d083c6c8e80300</action>
        <action>prg.mq@25e0 = 0101000001006068</action>
        <action>prg.mq@25e8 = 0106000101040101</action>
        <action>prg.mq@25f0 = 0108000001070000</action>
        <action>prg.mq@25f8 = 010a000001090000</action>
        <action>prg.mq@2600 = 010c0000010b0000</action>
        <action>prg.mq@2608 = 010e0000010d0000</action>
        <action>prg.mq@2610 = 01100000010f0000</action>
        <action>prg.mq@2618 = 0112000001110000</action>
        <action>prg.mq@2620 = 0114000001130000</action>
        <action>prg.mq@2628 = 0118010101150000</action>
        <action>prg.mq@2630 = ffff0000011b0101</action>
        <!--
        a580 | a9 00    : lda #$00    // initialize values
        a582 | 85 80    : sta $80
        a584 | 85 81    : sta $81
        a586 | a5 81    : lda $81
        a588 | 85 82    : sta $82
        a58a | a5 06    : lda $06     // read input
        a58c | 85 81    : sta $81
        a58e | c5 82    : cmp $82
        a590 | f0 f4    : beq $a586
        a592 | a6 80    : ldx $80
        a594 | a8       : tay
        a595 | c9 40    : cmp #$40
        a597 | d0 01    : bne $a59a
        a599 | ca       : dex         // decrease code -01
        a59a | c9 80    : cmp #$80
        a59c | d0 01    : bne $a59f
        a59e | e8       : inx         // increase code +01
        a59f | c9 20    : cmp #$20
        a5a1 | d0 06    : bne $a5a9
        a5a3 | 8a       : txa         // decrease code -10
        a5a4 | 38       : sec
        a5a5 | e9 10    : sbc #$10
        a5a7 | aa       : tax
        a5a8 | 98       : tya
        a5a9 | c9 10    : cmp #$10
        a5ab | d0 06    : bne $a5b3
        a5ad | 8a       : txa         // increase code +10
        a5ae | 18       : clc
        a5af | 69 10    : adc #$10
        a5b1 | aa       : tax
        a5b2 | 98       : tya
        a5b3 | 86 80    : stx $80
        a5b5 | c9 02    : cmp #$02
        a5b7 | d0 03    : bne $a5bc
        a5b9 | 20 c6 a5 : jsr $a5c6   // play sound
        a5bc | c9 01    : cmp #$01
        a5be | d0 03    : bne $a5c3
        a5c0 | 20 f6 eb : jsr $ebf6   // stop sound
        a5c3 | 4c 86 a5 : jmp $a586
        a5c6 | 48       : pha         // sound code/address conversion routine
        a5c7 | a5 80    : lda $80
        a5c9 | 0a       : asl a
        a5ca | 0a       : asl a
        a5cb | aa       : tax
        a5cc | bc e2 a5 : ldy $a5e2,x // read index from table
        a5cf | e8       : inx
        a5d0 | a9 03    : lda #$03
        a5d2 | 85 83    : sta $83
        a5d4 | bd e2 a5 : lda $a5e2,x // read sound flag from table
        a5d7 | 99 00 03 : sta $0300,y // write sound flag into corresponded to address
        a5da | e8       : inx
        a5db | c8       : iny
        a5dc | c6 83    : dec $83
        a5de | d0 f4    : bne $a5d4
        a5e0 | 68       : pla
        a5e1 | 60       : rts
        a5e3 - a635     : sound code/address conversion table
          format : xx yy yy yy (1 data = 4 bytes, xx = index, yy = flag)
        -->
    </script>
    <script state="run">
        <output format="----- battle city sound test mode -----" line="10" align="center" />
        <output format="left : decrease code -01"                line="11" align="center" />
        <output format="right : increase code +01"               line="12" align="center" />
        <output format="down : decrease code -10"                line="13" align="center" />
        <output format="up : increase code +10"                  line="14" align="center" />
        <output format="button 1 : play sound"                   line="15" align="center" />
        <output format="button 2 : stop sound"                   line="16" align="center" />
        <output format="----------------------------"            line="17" align="center" />
        <output format="&lt;&lt; sound code %2.2X &gt;&gt;"      line="19" align="center">
            <argument>maincpu.pb@0080</argument>
        </output>
    </script>
    <script state="off">
        <action>prg.mw@40ad =             c65c</action>
        <action>prg.mq@2580 = ffffffffffffffff</action>
        <action>prg.mq@2588 = ffffffffffffffff</action>
        <action>prg.mq@2590 = ffffffffffffffff</action>
        <action>prg.mq@2598 = ffffffffffffffff</action>
        <action>prg.mq@25a0 = ffffffffffffffff</action>
        <action>prg.mq@25a8 = ffffffffffffffff</action>
        <action>prg.mq@25b0 = ffffffffffffffff</action>
        <action>prg.mq@25b8 = ffffffffffffffff</action>
        <action>prg.mq@25c0 = ffffffffffffffff</action>
        <action>prg.mq@25c8 = ffffffffffffffff</action>
        <action>prg.mq@25d0 = ffffffffffffffff</action>
        <action>prg.mq@25d8 = ffffffffffffffff</action>
        <action>prg.mq@25e0 = ffffffffffffffff</action>
        <action>prg.mq@25e8 = ffffffffffffffff</action>
        <action>prg.mq@25f0 = ffffffffffffffff</action>
        <action>prg.mq@25f8 = ffffffffffffffff</action>
        <action>prg.mq@2600 = ffffffffffffffff</action>
        <action>prg.mq@2608 = ffffffffffffffff</action>
        <action>prg.mq@2610 = ffffffffffffffff</action>
        <action>prg.mq@2618 = ffffffffffffffff</action>
        <action>prg.mq@2620 = ffffffffffffffff</action>
        <action>prg.mq@2628 = ffffffffffffffff</action>
        <action>prg.mq@2630 = ffffffffffffffff</action>
    </script>
</cheat>
"sound test mode" : change tag and address. Reallocate address for main routine. Add up/down key (code±10). Reconstruct sound code/address conversion tables.
jman
Posts: 843
Joined: Tue Dec 01, 2020 1:24 pm

[btlecity] Vs. Battle City

Post by jman »

Code: Select all

<!-- Vs. Battle City -->
<mamecheat version="1">

    <cheat desc="no hit">
        <script state="on">
            <action>prg.mw@68F3 = 2290</action> <!-- bullet ($e8f3) -->
        </script>
        <script state="off">
            <action>prg.mw@68F3 = 33A9</action>
        </script>
    </cheat>

    <cheat desc="no hit - headquarter">
        <script state="on">
            <action>prg.mb@6853 = 60</action> <!-- ($e853) -->
        </script>
        <script state="off">
            <action>prg.mb@6853 = A9</action>
        </script>
    </cheat>

    <cheat desc="auto fire">
        <script state="on">
            <action>prg.mb@61E5 = 06</action> <!-- ($e1e5) -->
        </script>
        <script state="off">
            <action>prg.mb@61E5 = 08</action>
        </script>
    </cheat>

    <cheat desc="walk through wall">
        <script state="on">
            <action>prg.mq@5D86 = F03830A4E0205AA5</action> <!-- ($dd86) -->
            <action>prg.mq@5DAB = F01330A4E0205AA5</action> <!-- ($ddab) -->
            <action>prg.mq@24E0 = 206000A903B002C9</action>
            <action>prg.mq@24E8 = FFFFFF6011B1D726</action>
            <!--
            DD86 | A5 5A    : lda $5a
            DD88 | 20 E0 A4 : jsr $a4e0
            ==============================
            DDAB | A5 5A    : lda $5a
            DDAD | 20 E0 A4 : jsr $a4e0
            ==============================
            A4E0 | C9 02    : cmp #$02
            A4E2 | B0 03    : bcs $a4e7
            A4E4 | A9 00    : lda #$00
            A4E6 | 60       : rts
            A4E7 | 20 26 D7 : jsr $d726
            A4EA | B1 11    : lda ($11), y
            A4EC | 60       : rts
            -->
        </script>
        <script state="off">
            <action>prg.mq@5D86 = F0383011B1D72620</action>
            <action>prg.mq@5DAB = F0133011B1D72620</action>
            <action>prg.mq@24E0 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@24E8 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

    <cheat desc="player speed">
        <parameter min="0x01" max="0x05" step="0x01" />
        <script state="on">
            <action>prg.md@5D58 = 18A4F020        </action> <!-- y position ($dd58) -->
            <action>prg.md@5D68 = 18A4FE20        </action> <!-- x position ($dd68) -->
            <action>prg.mq@24F0 = 4CE52DB906B002E0</action>
            <action>prg.mq@24F8 = 02E060E52DB9A50C</action>
            <action>prg.mq@2500 = A50C4CE529B906B0</action>
            <action>prg.mq@2508 = 033004F060E529B9</action>
            <action>prg.mq@2510 = FFFF6000A96000A9</action>
            <!--
            A4F0 | E0 02    : cpx #$02     // y position
            A4F2 | B0 06    : bcs $a4fa
            A4F4 | B9 2D E5 : lda $e52d, y
            A4F7 | 4C 0C A5 : jmp $a50c
            A4FA | B9 2D E5 : lda $e52d, y
            A4FD | 60       : rts
            A4FE | E0 02    : cpx #$02     // x position
            A500 | B0 06    : bcs $a508
            A502 | B9 29 E5 : lda $e529, y
            A505 | 4C 0C A5 : jmp $a50c
            A508 | B9 29 E5 : lda $e529, y
            A50B | 60       : rts
            A50C | F0 04    : beq $a512
            A50E | 30 03    : bmi $a513
            A510 | A9 xx    : lda #$xx
            A512 | 60       : rts
            A513 | A9 xx    : lda #$xx
            A515 | 60       : rts
            -->
        </script>
        <script state="change">
            <action>prg.mb@2511 =  param</action>
            <action>prg.mb@2514 = -param</action>
        </script>
        <script state="off">
            <action>prg.md@5D58 = 18E52DB9        </action>
            <action>prg.md@5D68 = 18E529B9        </action>
            <action>prg.mq@24F0 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@24F8 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2500 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2508 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2510 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

    <cheat desc="bullet speed">
        <parameter min="0x01" max="0x05" step="0x01" />
        <script state="on">
            <action>prg.md@6117 = 0AA52020        </action> <!-- x position ($e117) -->
            <action>prg.md@6120 = 0AA53020        </action> <!-- y position ($e120) -->
            <action>prg.mq@2520 = E529B907B0A54020</action>
            <action>prg.mq@2528 = 60E529B960A55420</action>
            <action>prg.mq@2530 = E52DB907B0A54020</action>
            <action>prg.mq@2538 = 60E52DB960A55420</action>
            <action>prg.mq@2540 = 0AF001E00EF000E0</action>
            <action>prg.mq@2548 = 02F009E006F008E0</action>
            <action>prg.mq@2550 = 033004F060186038</action>
            <action>prg.mq@2558 = FFFF6000A96000A9</action>
            <!--
            A520 | 20 40 A5 : jsr $a540    // x position
            A523 | B0 07    : bcs $a52c
            A525 | B9 29 E5 : lda $e529, y
            A528 | 20 54 A5 : jsr $a554
            A52B | 60       : rts
            A52C | B9 29 E5 : lda $e529, y
            A52F | 60       : rts
            A530 | 20 40 A5 : jsr $a540    // y position
            A533 | B0 07    : bcs $a53c
            A535 | B9 2D E5 : lda $e52d, y
            A538 | 20 54 A5 : jsr $a554
            A53B | 60       : rts
            A53C | B9 2D E5 : lda $e52d, y
            A53F | 60       : rts
            A540 | E0 00    : cpx #$00     // bullet check routine
            A542 | F0 0E    : beq $a552
            A544 | E0 01    : cpx #$01
            A546 | F0 0A    : beq $a552
            A548 | E0 08    : cpx #$08
            A54A | F0 06    : beq $a552
            A54C | E0 09    : cpx #$09
            A54E | F0 02    : beq $a552
            A550 | 38       : sec
            A551 | 60       : rts
            A552 | 18       : clc
            A553 | 60       : rts
            A554 | F0 04    : beq $a55a    // bullet speed routine
            A556 | 30 03    : bmi $a55b
            A558 | A9 xx    : lda #$xx
            A55A | 60       : rts
            A55B | A9 xx    : lda #$xx
            A55D | 60       : rts
            -->
        </script>
        <script state="change">
            <action>prg.mb@2559 =  param</action>
            <action>prg.mb@255c = -param</action>
        </script>
        <script state="off">
            <action>prg.md@6117 = 0AE529B9        </action>
            <action>prg.md@6120 = 0AE52DB9        </action>
            <action>prg.mq@2520 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2528 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2530 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2538 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2540 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2548 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2550 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2558 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

    <cheat desc="short hit mark">
        <script state="on">
            <action>prg.md@6875 = EAA56020        </action> <!-- wall ($e875) -->
            <action>prg.md@6973 = B5A56B20        </action> <!-- enemy ($e973) -->
            <action>prg.mq@2560 = CC9511A902B002E0</action>
            <action>prg.mq@2568 = A902B002C06011B1</action>
            <action>prg.mq@2570 = FFFFFF6000CC9911</action>
            <!--
            A560 | E0 02    : cpx #$02     // wall
            A562 | B0 02    : bcs $a566
            A564 | A9 11    : lda #$11
            A566 | 95 CC    : sta $cc, x
            A568 | B1 11    : lda ($11), y
            A56A | 60       : rts
            A56B | C0 02    : cpy #$02     // enemy
            A56D | B0 02    : bcs $a571
            A57F | A9 11    : lda #$11
            A571 | 99 CC 00 : sta $00cc, y
            A574 | 60       : rts
            -->
        </script>
        <script state="off">
            <action>prg.md@6875 =         11B1CC95</action>
            <action>prg.md@6973 =         B500CC99</action>
            <action>prg.mq@2560 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2568 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2570 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

    <cheat desc="quick enemy appearance">
        <script state="on">
            <action>maincpu.mb@5BFC = EA</action> <!-- ($dbfc) -->
        </script>
        <script state="off">
            <action>maincpu.mb@5BFC = 60</action>
        </script>
    </cheat>

    <cheat desc="sound test mode">
        <comment>reset the game (F3) to enter sound test mode</comment>
        <script state="on">
            <action>prg.mw@40AD = A580            </action> <!-- ($c0ad) -->
            <action>prg.mq@2580 = 06A48184808500A9</action>
            <action>prg.mq@2588 = 80A68184F8F081C4</action>
            <action>prg.mq@2590 = D080C0CA01D040C0</action>
            <action>prg.mq@2598 = 388A05D020C0E801</action>
            <action>prg.mq@25A0 = 8A05D010C0AA10E9</action>
            <action>prg.mq@25A8 = 02C08086AA106918</action>
            <action>prg.mq@25B0 = C081A4A5C12005D0</action>
            <action>prg.mq@25B8 = 864CEBF62003D001</action>
            <action>prg.mq@25C0 = A5DABCAA0A0A8AA5</action>
            <action>prg.mq@25C8 = A5DABD828503A9E8</action>
            <action>prg.mq@25D0 = D082C6C8E8030099</action>
            <action>prg.mq@25D8 = 01010000010060F4</action>
            <action>prg.mq@25E0 = 0106000101040101</action>
            <action>prg.mq@25E8 = 0108000001070000</action>
            <action>prg.mq@25F0 = 010A000001090000</action>
            <action>prg.mq@25F8 = 010C0000010B0000</action>
            <action>prg.mq@2600 = 010E0000010D0000</action>
            <action>prg.mq@2608 = 01100000010F0000</action>
            <action>prg.mq@2610 = 0112000001110000</action>
            <action>prg.mq@2618 = 0114000001130000</action>
            <action>prg.mq@2620 = 0118010101150000</action>
            <action>prg.mq@2628 = FFFF0000011B0101</action>
            <!--
            A580 | A9 00    : lda #$00     // initialize sound code
            A582 | 85 80    : sta $80
            A584 | 84 81    : sty $81
            A586 | A4 06    : ldy $06      // read input
            A588 | C4 81    : cpy $81
            A58A | F0 F8    : beq $a584
            A58C | 84 81    : sty $81
            A58E | A6 80    : ldx $80
            A590 | C0 40    : cpy #$40
            A592 | D0 01    : bne $a595
            A594 | CA       : dex          // decrease code -01
            A595 | C0 80    : cpy #$80
            A597 | D0 01    : bne $a59a
            A599 | E8       : inx          // increase code +01
            A59A | C0 20    : cpy #$20
            A59C | D0 05    : bne $a5a3
            A59E | 8A       : txa          // decrease code -10
            A59F | 38       : sec
            A5A0 | E9 10    : sbc #$10
            A5A2 | AA       : tax
            A5A3 | C0 10    : cpy #$10
            A5A5 | D0 05    : bne $a5ac
            A5A7 | 8A       : txa          // increase code +10
            A5A8 | 18       : clc
            A5A9 | 69 10    : adc #$10
            A5AB | AA       : tax
            A5AC | 86 80    : stx $80
            A5AE | C0 02    : cpy #$02
            A5B0 | D0 05    : bne $a5b7
            A5B2 | 20 C1 A5 : jsr $a5c1    // play sound
            A5B5 | A4 81    : ldy $81
            A5B7 | C0 01    : cpy #$01
            A5B9 | D0 03    : bne $a5be
            A5BB | 20 F6 EB : jsr $ebf6    // stop sound
            A5BE | 4C 86 A5 : jmp $a586
            A5C1 | 8A       : txa          // sound code/address conversion routine
            A5C2 | 0A       : asl a
            A5C3 | 0A       : asl a
            A5C4 | AA       : tax
            A5C5 | BC DA A5 : ldy $a5da, x // read index from table
            A5C8 | E8       : inx
            A5C9 | A9 03    : lda #$03
            A5CB | 85 82    : sta $82
            A5CD | BD DA A5 : lda $a5da, x // read sound flag from table
            A5D0 | 99 00 03 : sta $0300, y // write sound flag into corresponded to address
            A5D3 | E8       : inx
            A5D4 | C8       : iny
            A5D5 | C6 82    : dec $82
            A5D7 | D0 F4    : bne $a5cd
            A5D9 | 60       : rts
            A5DA - A625     : sound code/address conversion table
              format : xx yy yy yy (1 data = 4 bytes, xx = index, yy = flag)
            -->
        </script>
        <script state="run">
            <output format="----- battle city sound test mode -----" line="10" align="center" />
            <output format="left : decrease code -01"                line="11" align="center" />
            <output format="right : increase code +01"               line="12" align="center" />
            <output format="down : decrease code -10"                line="13" align="center" />
            <output format="up : increase code +10"                  line="14" align="center" />
            <output format="button 1 : play sound"                   line="15" align="center" />
            <output format="button 2 : stop sound"                   line="16" align="center" />
            <output format="----------------------------"            line="17" align="center" />
            <output format="&lt;&lt; sound code %02X &gt;&gt;"       line="19" align="center"  >
                <argument>maincpu.pb@0080</argument>
            </output>
        </script>
        <script state="off">
            <action>prg.mw@40AD = C65C            </action>
            <action>prg.mq@2580 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2588 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2590 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2598 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@25A0 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@25A8 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@25B0 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@25B8 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@25C0 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@25C8 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@25D0 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@25D8 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@25E0 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@25E8 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@25F0 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@25F8 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2600 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2608 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2610 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2618 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2620 = FFFFFFFFFFFFFFFF</action>
            <action>prg.mq@2628 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

</mamecheat>
  • "quick enemy appearance" : Added new.
  • "sound test mode" : Rewritten routine.
Post Reply