dkong: Invincibility [fix] and more...
Posted: Fri Feb 06, 2009 10:12 am
As reported by Shima Pong - who is as wise as he is humble - the current invincibility cheat makes you die when you turn it off. I also notice that you can't grab the hammer, and being invincible with the hammer is really fun!
It may be a personal preference, but I set up my infinite lives cheat to return me to the number I had before it was turned on:
The bonus timer cheat was the hardest to get right. Again, I want to be able to return the bonus I had before it was turned on. The current cheat affects game play, since you don't get that first wild barrel when the it's turned on. It also doesn't save you if the timer has already reached zero, although you have 4 seconds left to live.
My version freezes the timer, and you can resume if you choose, even at zero.
The starting level selector puts you on the right level, but the screen progression is that of level 1 (barrels, rivets). If I'm skipping to L2 for elevators, there aren't any. This is better:
Finally, I thought I'd mention that a lot of the examples I've seen seem to like the format:
1. [on] Save temp variables.
2. [run] Change bytes.
3. [off] Restore from temp variables.
A good example is the kill screen fix. It's a one-shot, but since all of the code is in "run", it gets reapplied every frame. It shouldn't have a run state:
I shortened it a bit to fit into two qwords. (I had to remove the U-R-L punctuation to post that. Maybe an admin can put it back.)
Any advice on these is welcome. I'm guessing at the new format sometimes. I'll post updates here myself if I find any improvements.
Code: Select all
<cheat desc="Invincibility">
<script state="on">
<action>temp0 = main.mw@1c57</action>
<action>temp1 = main.mw@2780</action>
<action>temp2 = main.mw@2819</action>
<action>temp3 = main.mw@2a1c</action>
<action>main.mw@1c57 = 1801</action>
<action>main.mw@2780 = 1804</action>
<action>main.mw@2819 = 1801</action>
<action>main.mw@2a1c = 1801</action>
</script>
<script state="off">
<action>main.mw@1c57 = temp0</action>
<action>main.mw@2780 = temp1</action>
<action>main.mw@2819 = temp2</action>
<action>main.mw@2a1c = temp3</action>
</script>
</cheat>
Code: Select all
<cheat desc="Infinite Lives">
<script state="on">
<action>temp0 = main.mb@12fc</action>
<action>temp1 = main.md@06c7</action>
<action>main.mb@12fc = 00</action><!-- never have lives subtracted -->
<action>main.md@06c7 = 0000063e</action><!-- always display maximum -->
</script>
<script state="off">
<action>main.mb@12fc = temp0</action>
<action>main.md@06c7 = temp1</action>
</script>
</cheat>
My version freezes the timer, and you can resume if you choose, even at zero.
Code: Select all
<cheat desc="Freeze Bonus Timer">
<script state="on">
<action>temp0 = main.mb@06a9</action>
<action>main.mb@06a9 = 00</action>
<action>main.pb@6386 = 00</action>
</script>
<script state="run">
<action condition="(main.pb@62b1 == 1)">main.pb@62b1 = main.pb@62b0 - 1</action>
</script>
<script state="off">
<action>main.mb@06a9 = temp0</action>
<action>temp1 = (main.pb@638c - (main.pb@638c / 10) * 6)</action>
<action condition="(main.pb@6200 != 0)">main.pb@62b1 = temp1</action>
<action condition="(main.pb@6200 != 0) AND (temp1 == 0)">main.pb@6386 = 02</action>
</script>
</cheat>
Code: Select all
<cheat desc="Select Starting Level">
<parameter min="2" max="99" step="1"/>
<script state="change">
<action>main.mb@095e = (param)</action>
<action condition="(param == 2)">main.mb@095f = 67</action>
<action condition="(param == 3)">main.mb@095f = 6A</action>
<action condition="(param == 4)">main.mb@095f = 6E</action>
<action condition="(param GT 4)">main.mb@095f = 73</action>
</script>
<script state="off">
<action>main.mb@095e = 01</action>
<action>main.mb@095f = 65</action>
</script>
</cheat>
1. [on] Save temp variables.
2. [run] Change bytes.
3. [off] Restore from temp variables.
A good example is the kill screen fix. It's a one-shot, but since all of the code is in "run", it gets reapplied every frame. It shouldn't have a run state:
Code: Select all
<cheat desc="Fix Kill Screen Bug">
<comment>Fixes the timer bug on level 22. See donhodges com how_high_can_you_get htm</comment>
<script state="on">
<action>temp0 = main.mq@0F7D</action>
<action>temp1 = main.mq@0F85</action>
<action>main.mq@0F7D = 3E47043E023805FE</action>
<action>main.mq@0F85 = 000218FC100AC628</action>
</script>
<script state="off">
<action>main.mq@0F7D = temp0</action>
<action>main.mq@0F85 = temp1</action>
</script>
</cheat>
Any advice on these is welcome. I'm guessing at the new format sometimes. I'll post updates here myself if I find any improvements.