[atlantis]+ Battle of Atlantis

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: 873
Joined: Tue Dec 01, 2020 1:24 pm
Been thanked: 1 time

[atlantis]+ Battle of Atlantis

Post by jman »

atlantis.xml

Code: Select all

<!-- Battle of Atlantis (set 1) -->
<mamecheat version="1">

    <cheat desc="no hit">
        <script state="on">
            <action>maincpu.md@020F = CCA7013E</action> <!-- bullet -->
            <action>maincpu.md@03D1 = C2A7003E</action> <!-- background -->
            <action>maincpu.md@03E3 = C4A7003E</action> <!-- enemy -->
        </script>
        <script state="off">
            <action>maincpu.md@020F = CC059ACD</action>
            <action>maincpu.md@03D1 = C205BFCD</action>
            <action>maincpu.md@03E3 = C40515CD</action>
        </script>
    </cheat>

    <cheat desc="auto fire">
        <script state="on">
            <action>maincpu.mb@0B07 = 07</action> <!-- input -->
            <action>maincpu.mb@0B0E = CC</action> <!-- missile -->
            <action>maincpu.mb@0B14 = CC</action> <!-- shot -->
        </script>
        <script state="off">
            <action>maincpu.mb@0B07 = 14</action>
            <action>maincpu.mb@0B0E = C4</action>
            <action>maincpu.mb@0B14 = C4</action>
        </script>
    </cheat>

    <cheat desc="player speed">
        <parameter min="0x01" max="0x05" step="0x01" />
        <script state="on">
            <action>maincpu.mw@0AEB = 3000            </action> <!-- up -->
            <action>maincpu.mw@0AF2 = 3008            </action> <!-- down -->
            <action>maincpu.mw@0AF9 = 3010            </action> <!-- right -->
            <action>maincpu.mw@ B00 = 3018            </action> <!-- left -->
            <action>maincpu.mq@3000 = C9FB100BA5CD0006</action>
            <action>maincpu.mq@3008 = C9FB100B9ACD0006</action>
            <action>maincpu.mq@3010 = C9FB100BB0CD0006</action>
            <action>maincpu.mq@3018 = C9FB100BB6CD0006</action>
            <!--
            3000 | 06 xx    : ld   b,$xx // up
            3002 | CD A5 0B : call $0BA5
            3005 | 10 FB    : djnz $3002
            3007 | C9       : ret
            3008 | 06 xx    : ld   b,$xx // down
            300A | CD 9A 0B : call $0B9A
            300D | 10 FB    : djnz $300A
            300F | C9       : ret
            3010 | 06 xx    : ld   b,$xx // right
            3012 | CD B0 0B : call $0BB0
            3015 | 10 FB    : djnz $3012
            3017 | C9       : ret
            3018 | 06 xx    : ld   b,$xx // left
            301A | CD B6 0B : call $0BB6
            301D | 10 FB    : djnz $301A
            301F | C9       : ret
            -->
        </script>
        <script state="change">
            <action>maincpu.mb@3001 = param</action>
            <action>maincpu.mb@3009 = param</action>
            <action>maincpu.mb@3011 = param</action>
            <action>maincpu.mb@3019 = param</action>
        </script>
        <script state="off">
            <action>maincpu.mw@0AEB = 0BA5            </action>
            <action>maincpu.mw@0AF2 = 0B9A            </action>
            <action>maincpu.mw@0AF9 = 0BB0            </action>
            <action>maincpu.mw@ B00 = 0BB6            </action>
            <action>maincpu.mq@3000 = 0000000000000000</action>
            <action>maincpu.mq@3008 = 0000000000000000</action>
            <action>maincpu.mq@3010 = 0000000000000000</action>
            <action>maincpu.mq@3018 = 0000000000000000</action>
        </script>
    </cheat>

    <cheat desc="bullet speed">
        <parameter>
            <item value="0x02">01 (slow)</item>
            <item value="0x06">02       </item>
            <item value="0x0c">03       </item>
            <item value="0x12">04       </item>
            <item value="0x18">05 (fast)</item>
        </parameter>
        <script state="on">
            <action>maincpu.md@01EA = DD3020CD        </action>
            <action>maincpu.mq@3020 = F10220A7027EDDF5</action>
            <action>maincpu.mq@3028 = 00C9AFD010C6F1C9</action>
            <!--
            3020 | F5       : push af
            3021 | DD 7E 02 : ld   a,(ix+$02)
            3024 | A7       : and  a
            3025 | 20 02    : jr   nz,$3029
            3027 | F1       : pop  af         // enemy bullet
            3028 | C9       : ret
            3029 | F1       : pop  af
            302A | C6 xx    : add  a,$xx      // player bullet
            302C | D0       : ret  nc
            302D | AF       : xor  a
            302E | C9       : ret
            -->
        </script>
        <script state="change">
            <action>maincpu.mb@302B = param</action>
        </script>
        <script state="off">
            <action>maincpu.md@01EA = DD0286DD        </action>
            <action>maincpu.mq@3020 = 0000000000000000</action>
            <action>maincpu.mq@3028 = 0000000000000000</action>
        </script>
    </cheat>

    <cheat desc="missile speed">
        <parameter>
            <item value="0x01">01 (slow)</item>
            <item value="0x02">02       </item>
            <item value="0x04">03       </item>
            <item value="0x06">04       </item>
            <item value="0x08">05 (fast)</item>
        </parameter>
        <script state="on">
            <action>maincpu.mb@03B3 = 00</action>
        </script>
        <script state="change">
            <action>maincpu.mb@03B7 = param</action>
        </script>
        <script state="off">
            <action>maincpu.mb@03B3 = 04</action>
            <action>maincpu.mb@03B7 = 02</action>
        </script>
    </cheat>

    <cheat desc="short hit mark - missile">
        <script state="on">
            <action>maincpu.mw@0366 = 3030            </action>
            <action>maincpu.mq@3030 = B7FE0828ADFE7DDD</action>
            <action>maincpu.mq@3038 = 3B3EC90682CD0428</action>
            <action>maincpu.mq@3040 = 000000C9AF0577DD</action>
            <!--
            3030 | DD 7D    : ld   a,ixl
            3032 | FE AD    : cp   $AD        // first missile
            3034 | 28 08    : jr   z,$303E
            3036 | FE B7    : cp   $B7        // second missile
            3038 | 28 04    : jr   z,$303E
            303A | CD 82 06 : call $0682
            303D | C9       : ret
            303E | 3E 3B    : ld   a,$3B
            3040 | DD 77 05 : ld   (ix+$05),a
            3043 | AF       : xor  a
            3044 | C9       : ret
            -->
        </script>
        <script state="off">
            <action>maincpu.mw@0366 = 0682            </action>
            <action>maincpu.mq@3030 = 0000000000000000</action>
            <action>maincpu.mq@3038 = 0000000000000000</action>
            <action>maincpu.mq@3040 = 0000000000000000</action>
        </script>
    </cheat>

    <cheat desc="skip in-game rom check">
        <script state="on">
            <action>maincpu.mq@0A2F = 0FFE071840183200</action>
        </script>
        <script state="off">
            <action>maincpu.mq@0A2F = 0FFE7C2340183286</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@019C = 3050            </action>
            <action>maincpu.mq@3050 = 023A400021007BCD</action>
            <action>maincpu.mq@3058 = 3A4F070750E62F81</action>
            <action>maincpu.mq@3060 = 47B8B13AE62F8100</action>
            <action>maincpu.mq@3068 = FE35012020FEEC28</action>
            <action>maincpu.mq@3070 = 042001FE34012010</action>
            <action>maincpu.mq@3078 = 052040FE0618F03E</action>
            <action>maincpu.mq@3080 = 2008FE787786103E</action>
            <action>maincpu.mq@3088 = 042002FE05187E03</action>
            <action>maincpu.mq@3090 = 0000C0180696CDAF</action>
            <!--
            3050 | CD 7B 00 : call $007B     // erase sprites
            3053 | 21 00 40 : ld   hl,$4000  // sound code address
            3056 | 3A 02 81 : ld   a,($8102) // read up/down
            3059 | 2F       : cpl
            305A | E6 50    : and  $50
            305C | 07       : rlca
            305D | 07       : rlca
            305E | 4F       : ld   c,a
            305F | 3A 00 81 : ld   a,($8100) // read other inputs
            3062 | 2F       : cpl
            3063 | E6 3A    : and  $3A
            3065 | B1       : or   c
            3066 | B8       : cp   b
            3067 | 47       : ld   b,a
            3068 | 28 EC    : jr   z,$3056
            306A | FE 20    : cp   $20
            306C | 20 01    : jr   nz,$306F
            306E | 35       : dec  (hl)      // decrease code -01
            306F | FE 10    : cp   $10
            3071 | 20 01    : jr   nz,$3074
            3073 | 34       : inc  (hl)      // increase code +01
            3074 | FE 01    : cp   $01
            3076 | 20 04    : jr   nz,$307C
            3078 | 3E F0    : ld   a,$F0     // decrease code -10
            307A | 18 06    : jr   $3082
            307C | FE 40    : cp   $40
            307E | 20 05    : jr   nz,$3085
            3080 | 3E 10    : ld   a,$10     // increase code +10
            3082 | 86       : add  a,(hl)
            3083 | 77       : ld   (hl),a
            3084 | 78       : ld   a,b
            3085 | FE 08    : cp   $08
            3087 | 20 03    : jr   nz,$308C
            3089 | 7E       : ld   a,(hl)    // play sound
            308A | 18 05    : jr   $3091
            308C | FE 02    : cp   $02
            308E | 20 04    : jr   nz,$3094
            3090 | AF       : xor  a         // stop sound
            3091 | CD 96 06 : call $0696     // send sound code
            3094 | 18 C0    : jr   $3056
            -->
        </script>
        <script state="run">
            <output format="----- battle of atlantis 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@4000</argument>
            </output>
        </script>
        <script state="off">
            <action>maincpu.mw@019C = 0AA5            </action>
            <action>maincpu.mq@3050 = 0000000000000000</action>
            <action>maincpu.mq@3058 = 0000000000000000</action>
            <action>maincpu.mq@3060 = 0000000000000000</action>
            <action>maincpu.mq@3068 = 0000000000000000</action>
            <action>maincpu.mq@3070 = 0000000000000000</action>
            <action>maincpu.mq@3078 = 0000000000000000</action>
            <action>maincpu.mq@3080 = 0000000000000000</action>
            <action>maincpu.mq@3088 = 0000000000000000</action>
            <action>maincpu.mq@3090 = 0000000000000000</action>
        </script>
    </cheat>

</mamecheat>
atlantis2.xml

Code: Select all

<!-- Battle of Atlantis (set 2) -->
<mamecheat version="1">

    <cheat desc="no hit">
        <script state="on">
            <action>maincpu.md@0220 = CCA7013E</action> <!-- bullet -->
            <action>maincpu.md@03E2 = C2A7003E</action> <!-- background -->
            <action>maincpu.md@0402 = C4A7003E</action> <!-- enemy -->
        </script>
        <script state="off">
            <action>maincpu.md@0220 = CC05B9CD</action>
            <action>maincpu.md@03E2 = C205DECD</action>
            <action>maincpu.md@0402 = C40534CD</action>
        </script>
    </cheat>

    <cheat desc="auto fire">
        <script state="on">
            <action>maincpu.mb@0B4A = 07</action> <!-- P1 input -->
            <action>maincpu.mb@0B4F = CC</action> <!-- P1 missile -->
            <action>maincpu.mb@0B55 = CC</action> <!-- shot -->
            <action>maincpu.mb@0B5A = 08</action> <!-- P2 input -->
            <action>maincpu.mb@0B5F = CC</action> <!-- P2 missile -->
        </script>
        <script state="off">
            <action>maincpu.mb@0B4A = 15</action>
            <action>maincpu.mb@0B4F = C4</action>
            <action>maincpu.mb@0B55 = C4</action>
            <action>maincpu.mb@0B5A = 16</action>
            <action>maincpu.mb@0B5F = C4</action>
        </script>
    </cheat>

    <cheat desc="player speed">
        <parameter min="0x01" max="0x05" step="0x01" />
        <script state="on">
            <action>maincpu.mw@0B23 = 3050            </action> <!-- up -->
            <action>maincpu.mw@0B2A = 3058            </action> <!-- down -->
            <action>maincpu.mw@0B31 = 3060            </action> <!-- right -->
            <action>maincpu.mw@0B38 = 3068            </action> <!-- left -->
            <action>maincpu.mq@3050 = C9FB100BF1CD0006</action>
            <action>maincpu.mq@3058 = C9FB100BE6CD0006</action>
            <action>maincpu.mq@3060 = C9FB100BFCCD0006</action>
            <action>maincpu.mq@3068 = C9FB100C02CD0006</action>
            <!--
            3050 | 06 xx    : ld   b,$xx // up
            3052 | CD F1 0B : call $0BF1
            3055 | 10 FB    : djnz $3052
            3057 | C9       : ret
            3058 | 06 xx    : ld   b,$xx // down
            305A | CD E6 0B : call $0BE6
            305D | 10 FB    : djnz $305A
            305F | C9       : ret
            3060 | 06 xx    : ld   b,$xx // right
            3062 | CD FC 0B : call $0BFC
            3065 | 10 FB    : djnz $3062
            3067 | C9       : ret
            3068 | 06 xx    : ld   b,$xx // left
            306A | CD 02 0C : call $0C02
            306D | 10 FB    : djnz $306A
            306F | C9       : ret
            -->
        </script>
        <script state="change">
            <action>maincpu.mb@3051 = param</action>
            <action>maincpu.mb@3059 = param</action>
            <action>maincpu.mb@3061 = param</action>
            <action>maincpu.mb@3069 = param</action>
        </script>
        <script state="off">
            <action>maincpu.mw@0B23 = 0BF1            </action>
            <action>maincpu.mw@0B2A = 0BE6            </action>
            <action>maincpu.mw@0B31 = 0BFC            </action>
            <action>maincpu.mw@0B38 = 0C02            </action>
            <action>maincpu.mq@3050 = FFFFFFFFFFFFFFFF</action>
            <action>maincpu.mq@3058 = FFFFFFFFFFFFFFFF</action>
            <action>maincpu.mq@3060 = FFFFFFFFFFFFFFFF</action>
            <action>maincpu.mq@3068 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

    <cheat desc="bullet speed">
        <parameter>
            <item value="0x02">01 (slow)</item>
            <item value="0x06">02       </item>
            <item value="0x0c">03       </item>
            <item value="0x12">04       </item>
            <item value="0x18">05 (fast)</item>
        </parameter>
        <script state="on">
            <action>maincpu.md@01FB = DD3070CD        </action>
            <action>maincpu.mq@3070 = F10220A7027EDDF5</action>
            <action>maincpu.mq@3078 = FFC9AFD010C6F1C9</action>
            <!--
            3070 | F5       : push af
            3071 | DD 7E 02 : ld   a,(ix+$02)
            3074 | A7       : and  a
            3075 | 20 02    : jr   nz,$3079
            3077 | F1       : pop  af         // enemy bullet
            3078 | C9       : ret
            3079 | F1       : pop  af
            307A | C6 xx    : add  a,$xx      // player bullet
            307C | D0       : ret  nc
            307D | AF       : xor  a
            307E | C9       : ret
            -->
        </script>
        <script state="change">
            <action>maincpu.mb@307B = param</action>
        </script>
        <script state="off">
            <action>maincpu.md@01FB = DD0286DD        </action>
            <action>maincpu.mq@3070 = FFFFFFFFFFFFFFFF</action>
            <action>maincpu.mq@3078 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

    <cheat desc="missile speed">
        <parameter>
            <item value="0x01">01 (slow)</item>
            <item value="0x02">02       </item>
            <item value="0x04">03       </item>
            <item value="0x06">04       </item>
            <item value="0x08">05 (fast)</item>
        </parameter>
        <script state="on">
            <action>maincpu.mb@03C4 = 00</action>
        </script>
        <script state="change">
            <action>maincpu.mb@03C8 = param</action>
        </script>
        <script state="off">
            <action>maincpu.mb@03C4 = 04</action>
            <action>maincpu.mb@03C8 = 02</action>
        </script>
    </cheat>

    <cheat desc="short hit mark - missile">
        <script state="on">
            <action>maincpu.mw@0377 = 3080            </action>
            <action>maincpu.mq@3080 = B9FE0828AFFE7DDD</action>
            <action>maincpu.mq@3088 = 3B3EC906A1CD0428</action>
            <action>maincpu.mq@3090 = FFFFFFC9AF0577DD</action>
            <!--
            3080 | DD 7D    : ld   a,ixl
            3082 | FE AD    : cp   $AF        // first missile
            3084 | 28 08    : jr   z,$308E
            3086 | FE B7    : cp   $B9        // second missile
            3088 | 28 04    : jr   z,$308E
            308A | CD A1 06 : call $06A1
            308D | C9       : ret
            308E | 3E 3B    : ld   a,$3B
            3090 | DD 77 05 : ld   (ix+$05),a
            3093 | AF       : xor  a
            3094 | C9       : ret
            -->
        </script>
        <script state="off">
            <action>maincpu.mw@0377 = 06A1            </action>
            <action>maincpu.mq@3080 = FFFFFFFFFFFFFFFF</action>
            <action>maincpu.mq@3088 = FFFFFFFFFFFFFFFF</action>
            <action>maincpu.mq@3090 = 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@01AD = 30A0            </action>
            <action>maincpu.mq@30A0 = 023A400021007BCD</action>
            <action>maincpu.mq@30A8 = 3A4F070750E62F81</action>
            <action>maincpu.mq@30B0 = 47B8B13AE62F8100</action>
            <action>maincpu.mq@30B8 = FE35012020FEEC28</action>
            <action>maincpu.mq@30C0 = 042001FE34012010</action>
            <action>maincpu.mq@30C8 = 052040FE0618F03E</action>
            <action>maincpu.mq@30D0 = 2008FE787786103E</action>
            <action>maincpu.mq@30D8 = 042002FE05187E03</action>
            <action>maincpu.mq@30E0 = FFFFC01806B5CDAF</action>
            <!--
            30A0 | CD 7B 00 : call $007B     // erase sprites
            30A3 | 21 00 40 : ld   hl,$4000  // sound code address
            30A6 | 3A 02 81 : ld   a,($8102) // read up/down
            30A9 | 2F       : cpl
            30AA | E6 50    : and  $50
            30AC | 07       : rlca
            30AD | 07       : rlca
            30AE | 4F       : ld   c,a
            30AF | 3A 00 81 : ld   a,($8100) // read other inputs
            30B2 | 2F       : cpl
            30B3 | E6 3A    : and  $3A
            30B5 | B1       : or   c
            30B6 | B8       : cp   b
            30B7 | 47       : ld   b,a
            30B8 | 28 EC    : jr   z,$30A6
            30BA | FE 20    : cp   $20
            30BC | 20 01    : jr   nz,$30BF
            30BE | 35       : dec  (hl)      // decrease code -01
            30BF | FE 10    : cp   $10
            30C1 | 20 01    : jr   nz,$30C4
            30C3 | 34       : inc  (hl)      // increase code +01
            30C4 | FE 01    : cp   $01
            30C6 | 20 04    : jr   nz,$30CC
            30C8 | 3E F0    : ld   a,$F0     // decrease code -10
            30CA | 18 06    : jr   $30D2
            30CC | FE 40    : cp   $40
            30CE | 20 05    : jr   nz,$30D5
            30D0 | 3E 10    : ld   a,$10     // increase code +10
            30D2 | 86       : add  a,(hl)
            30D3 | 77       : ld   (hl),a
            30D4 | 78       : ld   a,b
            30D5 | FE 08    : cp   $08
            30D7 | 20 03    : jr   nz,$30DC
            30D9 | 7E       : ld   a,(hl)    // play sound
            30DA | 18 05    : jr   $30E1
            30DC | FE 02    : cp   $02
            30DE | 20 04    : jr   nz,$30E4
            30E0 | AF       : xor  a         // stop sound
            30E1 | CD B5 06 : call $06B5     // send sound code
            30E4 | 18 C0    : jr   $30A6
            -->
        </script>
        <script state="run">
            <output format="----- battle of atlantis 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@4000</argument>
            </output>
        </script>
        <script state="off">
            <action>maincpu.mw@01AD = 0AC4            </action>
            <action>maincpu.mq@30A0 = FFFFFFFFFFFFFFFF</action>
            <action>maincpu.mq@30A8 = FFFFFFFFFFFFFFFF</action>
            <action>maincpu.mq@30B0 = FFFFFFFFFFFFFFFF</action>
            <action>maincpu.mq@30B8 = FFFFFFFFFFFFFFFF</action>
            <action>maincpu.mq@30C0 = FFFFFFFFFFFFFFFF</action>
            <action>maincpu.mq@30C8 = FFFFFFFFFFFFFFFF</action>
            <action>maincpu.mq@30D0 = FFFFFFFFFFFFFFFF</action>
            <action>maincpu.mq@30D8 = FFFFFFFFFFFFFFFF</action>
            <action>maincpu.mq@30E0 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

    <cheat desc="skip in-game rom check">
        <script state="on">
            <action>maincpu.mq@0A4E = 0FFE0718401A3200</action>
        </script>
        <script state="off">
            <action>maincpu.mq@0A4E = 0FFE7C23401A3286</action>
        </script>
    </cheat>

</mamecheat>
atlantisb.xml

Code: Select all

<!-- Battle of Atlantis (bootleg) -->
<mamecheat version="1">

    <cheat desc="no hit">
        <script state="on">
            <action>maincpu.md@0231 = CCA7013E</action> <!-- bullet -->
            <action>maincpu.md@03F3 = C2A7003E</action> <!-- background -->
            <action>maincpu.md@0413 = C4A7003E</action> <!-- enemy -->
        </script>
        <script state="off">
            <action>maincpu.md@0231 = CC05CACD</action>
            <action>maincpu.md@03F3 = C205EFCD</action>
            <action>maincpu.md@0413 = C40545CD</action>
        </script>
    </cheat>

    <cheat desc="auto fire">
        <script state="on">
            <action>maincpu.mw@0B3D = 3800            </action>
            <action>maincpu.mq@3800 = 47CB402F3A400721</action>
            <action>maincpu.mq@3808 = C910E62F7E230128</action>
            <!--
            3800 | 21 07 40 : ld   hl,$4007
            3803 | 3A 2F 40 : ld   a,($402F) // P1 or P2?
            3806 | CB 47    : bit  0,a
            3808 | 28 01    : jr   z,$380B
            380A | 23       : inc  hl
            380B | 7E       : ld   a,(hl)
            380C | 2F       : cpl
            380D | E6 10    : and  $10
            380F | C9       : ret
            -->
        </script>
        <script state="off">
            <action>maincpu.mw@0B3D = 0B48            </action>
            <action>maincpu.mq@3800 = 0000000000000000</action>
            <action>maincpu.mq@3808 = 0000000000000000</action>
        </script>
    </cheat>

    <cheat desc="player speed">
        <parameter min="0x01" max="0x05" step="0x01" />
        <script state="on">
            <action>maincpu.mw@0B24 = 3810            </action> <!-- up -->
            <action>maincpu.mw@0B2A = 3818            </action> <!-- down -->
            <action>maincpu.mw@0B30 = 3820            </action> <!-- right -->
            <action>maincpu.mw@0B36 = 3828            </action> <!-- left -->
            <action>maincpu.mq@3810 = C9FB100C06CD0006</action>
            <action>maincpu.mq@3818 = C9FB100BFBCD0006</action>
            <action>maincpu.mq@3820 = C9FB100C17CD0006</action>
            <action>maincpu.mq@3828 = C9FB100C11CD0006</action>
            <!--
            3810 | 06 xx    : ld   b,$xx // up
            3812 | CD 06 0C : call $0C06
            3815 | 10 FB    : djnz $3812
            3817 | C9       : ret
            3818 | 06 xx    : ld   b,$xx // down
            381A | CD FB 0B : call $0BFB
            381D | 10 FB    : djnz $381A
            381F | C9       : ret
            3820 | 06 xx    : ld   b,$xx // right
            3822 | CD 17 0C : call $0C17
            3825 | 10 FB    : djnz $3822
            3827 | C9       : ret
            3828 | 06 xx    : ld   b,$xx // left
            382A | CD 11 0C : call $0C11
            382D | 10 FB    : djnz $382A
            382F | C9       : ret
            -->
        </script>
        <script state="change">
            <action>maincpu.mb@3811 = param</action>
            <action>maincpu.mb@3819 = param</action>
            <action>maincpu.mb@3821 = param</action>
            <action>maincpu.mb@3829 = param</action>
        </script>
        <script state="off">
            <action>maincpu.mw@0B24 = 0C06            </action>
            <action>maincpu.mw@0B2A = 0BFB            </action>
            <action>maincpu.mw@0B30 = 0C17            </action>
            <action>maincpu.mw@0B36 = 0C11            </action>
            <action>maincpu.mq@3810 = 0000000000000000</action>
            <action>maincpu.mq@3818 = 0000000000000000</action>
            <action>maincpu.mq@3820 = 0000000000000000</action>
            <action>maincpu.mq@3828 = 0000000000000000</action>
        </script>
    </cheat>

    <cheat desc="bullet speed">
        <parameter>
            <item value="0x02">01 (slow)</item>
            <item value="0x06">02       </item>
            <item value="0x0c">03       </item>
            <item value="0x12">04       </item>
            <item value="0x18">05 (fast)</item>
        </parameter>
        <script state="on">
            <action>maincpu.md@020C = DD3830CD        </action>
            <action>maincpu.mq@3830 = F10220A7027EDDF5</action>
            <action>maincpu.mq@3838 = 00C9AFD010C6F1C9</action>
            <!--
            3830 | F5       : push af
            3831 | DD 7E 02 : ld   a,(ix+$02)
            3834 | A7       : and  a
            3835 | 20 02    : jr   nz,$3839
            3837 | F1       : pop  af         // enemy bullet
            3838 | C9       : ret
            3839 | F1       : pop  af
            383A | C6 xx    : add  a,$xx      // player bullet
            383C | D0       : ret  nc
            383D | AF       : xor  a
            383E | C9       : ret
            -->
        </script>
        <script state="change">
            <action>maincpu.mb@383B = param</action>
        </script>
        <script state="off">
            <action>maincpu.md@020C = DD0286DD        </action>
            <action>maincpu.mq@3830 = 0000000000000000</action>
            <action>maincpu.mq@3838 = 0000000000000000</action>
        </script>
    </cheat>

    <cheat desc="missile speed">
        <parameter>
            <item value="0x01">01 (slow)</item>
            <item value="0x02">02       </item>
            <item value="0x04">03       </item>
            <item value="0x06">04       </item>
            <item value="0x08">05 (fast)</item>
        </parameter>
        <script state="on">
            <action>maincpu.mb@03D5 = 00</action>
        </script>
        <script state="change">
            <action>maincpu.mb@03D9 = param</action>
        </script>
        <script state="off">
            <action>maincpu.mb@03D5 = 04</action>
            <action>maincpu.mb@03D9 = 02</action>
        </script>
    </cheat>

    <cheat desc="short hit mark - missile">
        <script state="on">
            <action>maincpu.mw@0388 = 3840            </action>
            <action>maincpu.mq@3840 = 86FE08287CFE7DDD</action>
            <action>maincpu.mq@3848 = 3B3EC9000ECD0428</action>
            <action>maincpu.mq@3850 = 000000C9AF0577DD</action>
            <!--
            3840 | DD 7D    : ld   a,ixl
            3842 | FE 7C    : cp   $7C        // first missile
            3844 | 28 08    : jr   z,$384E
            3846 | FE 86    : cp   $86        // second missile
            3848 | 28 04    : jr   z,$384E
            384A | CD 0E 00 : call $000E
            384D | C9       : ret
            384E | 3E 3B    : ld   a,$3B
            3850 | DD 77 05 : ld   (ix+$05),a
            3853 | AF       : xor  a
            3854 | C9       : ret
            -->
        </script>
        <script state="off">
            <action>maincpu.mw@0388 = 000E            </action>
            <action>maincpu.mq@3840 = 0000000000000000</action>
            <action>maincpu.mq@3848 = 0000000000000000</action>
            <action>maincpu.mq@3850 = 0000000000000000</action>
        </script>
    </cheat>

    <cheat desc="sound test mode (test)">
        <comment>reset the game (F3) to enter sound test mode</comment>
        <script state="on">
            <action>maincpu.mw@07D5 = 3860            </action>
            <action>maincpu.mq@3860 = 99CD400021007BCD</action>
            <action>maincpu.mq@3868 = 3A4F01E660003A0E</action>
            <action>maincpu.mq@3870 = 2847B8B1BCE66080</action>
            <action>maincpu.mq@3878 = 08FE35012004FEF0</action>
            <action>maincpu.mq@3880 = 3E042020FE340120</action>
            <action>maincpu.mq@3888 = 3E052080FE0618F0</action>
            <action>maincpu.mq@3890 = 032010FE78778610</action>
            <action>maincpu.mq@3898 = AF042002FE05187E</action>
            <action>maincpu.mq@38A0 = 000000C11806B2CD</action>
            <!--
            3860 | CD 7B 00 : call $007B     // erase sprites
            3863 | 21 00 40 : ld   hl,$4000  // sound code address
            3866 | CD 99 0E : call $0E99     // check sound?
            3869 | 3A 00 60 : ld   a,($6000) // read start button
            386C | E6 01    : and  $01
            386E | 4F       : ld   c,a
            386F | 3A 80 60 : ld   a,($6080) // read other inputs
            3872 | E6 BC    : and  $BC
            3874 | B1       : or   c
            3875 | B8       : cp   b
            3876 | 47       : ld   b,a
            3877 | 28 F0    : jr   z,$3869
            3879 | FE 04    : cp   $04
            387B | 20 01    : jr   nz,$387E
            387D | 35       : dec  (hl)      // decrease code -01
            387E | FE 08    : cp   $08
            3880 | 20 01    : jr   nz,$3883
            3882 | 34       : inc  (hl)      // increase code +01
            3883 | FE 20    : cp   $20
            3885 | 20 04    : jr   nz,$388B
            3887 | 3E F0    : ld   a,$F0     // decrease code -10
            3889 | 18 06    : jr   $3891
            388B | FE 80    : cp   $80
            388D | 20 05    : jr   nz,$3894
            388F | 3E 10    : ld   a,$10     // increase code +10
            3891 | 86       : add  a,(hl)
            3892 | 77       : ld   (hl),a
            3893 | 78       : ld   a,b
            3894 | FE 10    : cp   $10
            3896 | 20 03    : jr   nz,$389B
            3898 | 7E       : ld   a,(hl)    // play sound
            3899 | 18 05    : jr   $38A0
            389B | FE 02    : cp   $02
            389D | 20 04    : jr   nz,$38A3
            389F | AF       : xor  a         // stop sound
            38A0 | CD B2 06 : call $06B2     // send sound code
            38A3 | 18 C1    : jr   $3866
            -->
        </script>
        <script state="run">
            <output format="----- battle of atlantis 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@4000</argument>
            </output>
        </script>
        <script state="off">
            <action>maincpu.mw@07D5 = 01CA            </action>
            <action>maincpu.mq@3860 = 0000000000000000</action>
            <action>maincpu.mq@3868 = 0000000000000000</action>
            <action>maincpu.mq@3870 = 0000000000000000</action>
            <action>maincpu.mq@3878 = 0000000000000000</action>
            <action>maincpu.mq@3880 = 0000000000000000</action>
            <action>maincpu.mq@3888 = 0000000000000000</action>
            <action>maincpu.mq@3890 = 0000000000000000</action>
            <action>maincpu.mq@3898 = 0000000000000000</action>
            <action>maincpu.mq@38A0 = 0000000000000000</action>
        </script>
    </cheat>

    <cheat desc="skip in-game rom check">
        <script state="on">
            <action>maincpu.mq@0A75 = 0FFE0718401A3200</action>
        </script>
        <script state="off">
            <action>maincpu.mq@0A75 = 0FFE7C23401A3286</action>
        </script>
    </cheat>

</mamecheat>
  • In atlantisb, I don't know how to handle discrete sound. So you can't play sound correctly in "sound test mode".
  • Current "Invincibility" in the official database has problem (always fast scroll speed).
  • This game checks ROM at the game start. You can play the game even if fails in ROM test though bad gfx is displayed.
Post Reply