Page 1 of 1

[chaknpop] Chack'n Pop

Posted: Wed Aug 23, 2023 10:26 am
by jman
This game has in-game rom check so that the game will crash unless you set "skip rom check" code.

Code: Select all

<!-- Chack'n Pop -->
<mamecheat version="1">

    <cheat desc="no hit">
        <script state="on">
            <action>maincpu.mb@1b4f = c9</action> <!-- objects -->
            <action>maincpu.mb@2a42 = c9</action> <!-- pressed by moving block -->
        </script>
        <script state="off">
            <action>maincpu.mb@1b4f = c0</action>
            <action>maincpu.mb@2a42 = c8</action>
        </script>
    </cheat>

    <cheat desc="unlimited jump">
        <script state="on">
            <action>maincpu.mw@15d7 = 8780</action>
            <action>maincpu.mw@1352 = 8780</action>
        </script>
        <script state="run">
            <action>maincpu.pq@8780 = 0b3a0820a7838b3a</action>
            <action>maincpu.pq@8788 = 87c3108dc247cb80</action>
            <action>maincpu.pq@8790 = 0000000000000010</action>
            <!--
            8780 | 3a 8b 83 : ld  a,($838B) // check stage clear flag
            8783 | a7       : and a
            8784 | 20 08    : jr  nz,$878E
            8786 | 3a 0b 80 : ld  a,($800B) // check input
            8789 | cb 47    : bit 0,a
            878b | c2 8d 10 : jp  nz,$108D
            878e | c3 87 10 : jp  $1087
            -->
        </script>
        <script state="off">
            <action>maincpu.mw@15d7 =             1087</action>
            <action>maincpu.mw@1352 =             1087</action>
            <action>maincpu.pq@8780 = 0000000000000000</action>
            <action>maincpu.pq@8788 = 0000000000000000</action>
            <action>maincpu.pq@8790 = 0000000000000000</action>
        </script>
    </cheat>

    <cheat desc="bomb explosion speed">
        <parameter>
            <item value="0xff">01 (slow)</item>
            <item value="0x18">02       </item>
            <item value="0x10">03       </item>
            <item value="0x08">04       </item>
            <item value="0x01">05 (fast)</item>
        </parameter>
        <script state="on">
            <action>maincpu.mb@233e = 01</action> <!-- sub timer -->
            <action>maincpu.mb@2519 = 01</action> <!-- sub timer -->
        </script>
        <script state="change">
            <action>maincpu.mb@2336 = param</action>
        </script>
        <script state="off">
            <action>maincpu.mb@2336 = 18</action>
            <action>maincpu.mb@233e = 04</action>
            <action>maincpu.mb@2519 = 04</action>
        </script>
    </cheat>

    <cheat desc="timer speed">
        <parameter>
            <item value="0x4000">01 (slow)</item>
            <item value="0x1000">02       </item>
            <item value="0x0800">03       </item>
            <item value="0x0300">04       </item>
            <item value="0x0001">05 (fast)</item>
        </parameter>
        <script state="on">
            <action>maincpu.md@3a84 = 22000021</action>
        </script>
        <script state="change">
            <action>maincpu.mw@3a85 = param</action>
        </script>
        <script state="off">
            <action>maincpu.md@3a84 = 2280b72a</action>
        </script>
    </cheat>

    <cheat desc="special bonus">
        <comment>doesn't work in maze 1</comment>
        <script state="on">
            <action>maincpu.mb@33a4 = c3</action> <!-- monsta -->
            <action>maincpu.mb@3954 = c3</action> <!-- egg -->
        </script>
        <script state="off">
            <action>maincpu.mb@33a4 = ca</action>
            <action>maincpu.mb@3954 = ca</action>
        </script>
    </cheat>

    <cheat desc="sound test mode">
        <comment>set &quot;skip rom check&quot; then reset the game (F3)</comment>
        <script state="on">
            <action>maincpu.mb@00b7 =               c3</action> <!-- disable credit display -->
            <action>maincpu.mb@0829 =               c3</action> <!-- skip sound code check -->
            <action>maincpu.mb@a1bb =               14</action> <!-- disable music after sfxs (code 0x02-0x12) -->
            <action>maincpu.mq@076a = b888093a810021fb</action>
            <action>maincpu.mq@0772 = 350120fefef92847</action>
            <action>maincpu.mq@077a = 20fbfe340120fdfe</action>
            <action>maincpu.mq@0782 = 20f7fe0618f03e04</action>
            <action>maincpu.mq@078a = effe787786103e05</action>
            <action>maincpu.mq@0792 = 20dffe06187e0320</action>
            <action>maincpu.mq@079a = 0000ce18e7503e03</action>
            <!--
            076a | fb       : ei            // enable interrupt
            076b | 21 00 81 : ld  hl,$8100  // sound code address
            076e | 3a 09 88 : ld  a,($8809) // read input
            0771 | b8       : cp  b
            0772 | 47       : ld  b,a
            0773 | 28 f9    : jr  z,$076E
            0775 | fe fe    : cp  $FE
            0777 | 20 01    : jr  nz,$077A
            0779 | 35       : dec (hl)      // decrease code -01
            077a | fe fd    : cp  $FD
            077c | 20 01    : jr  nz,$077F
            077e | 34       : inc (hl)      // increase code +01
            077f | fe fb    : cp  $FB
            0781 | 20 04    : jr  nz,$0787
            0783 | 3e f0    : ld  a,$F0     // decrease code -10
            0785 | 18 06    : jr  $078D
            0787 | fe f7    : cp  $F7
            0789 | 20 05    : jr  nz,$0790
            078b | 3e 10    : ld  a,$10     // increase code +10
            078d | 86       : add a,(hl)
            078e | 77       : ld  (hl),a
            078f | 78       : ld  a,b
            0790 | fe ef    : cp  $EF
            0792 | 20 03    : jr  nz,$0797
            0794 | 7e       : ld  a,(hl)    // play sound
            0795 | 18 06    : jr  $079D
            0797 | fe df    : cp  $DF
            0799 | 20 03    : jr  nz,$079E
            079b | 3e 50    : ld  a,$50     // stop sound
            079d | e7       : rst $20       // send sound code
            079e | 18 ce    : jr  $076E
            -->
        </script>
        <script state="run">
            <output format="----- chack'n pop 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@8100</argument>
            </output>
        </script>
        <script state="off">
            <action>maincpu.mb@00b7 =               9d</action>
            <action>maincpu.mb@0829 =               d2</action>
            <action>maincpu.mb@a1bb =               2a</action>
            <action>maincpu.mq@076a = 0006fb840032033e</action>
            <action>maincpu.mq@0772 = 06022877cb84253a</action>
            <action>maincpu.mq@077a = 02300f0f84273a03</action>
            <action>maincpu.mq@0782 = 0c3284023278d8cb</action>
            <action>maincpu.mq@078a = 5377cdcf500dcd88</action>
            <action>maincpu.mq@0792 = 00cdcf2f2acdcfcf</action>
            <action>maincpu.mq@079a = c8c3840032033e0d</action>
        </script>
    </cheat>

    <cheat desc="skip rom check">
        <script state="on">
            <action>maincpu.mw@06ca = 3418</action> <!-- boot -->
            <action>maincpu.mw@14ec = 55d1</action> <!-- ingame -->
        </script>
        <script state="off">
            <action>maincpu.mw@06ca = 0006</action>
            <action>maincpu.mw@14ec = 55d2</action>
        </script>
    </cheat>

</mamecheat>
"special bonus" (aka "no kill bonus") is unique. You can get 20,000 points and extra character after finish the maze. But it doesn't work in maze 1 (training stage).
Image

"unlimited jump" uses a part of RAM because I can't find "unused" ROM area. it will cause wrong behavior if other game routines write or read this area.
Please tell me in this case.