Jump to content
IGNORED

Infinite lives in Phoenix


Luc

Recommended Posts

Hello,

 

Does anyone happen to have a cheat code to get infinite lives in Phoenix? I'd like to see how the game levels evolve, but unfortunately I'm not very good at it. I've been searching for the lives counter myself using Stella, but could not find it.

 

Any help would be appreciated. Thank you.

Link to comment
Share on other sites

Easy...just look for the BCD scoring routine (by searching for the SED instruction) and cross-reference the ram locations used near the end. It turns out that the #lives variable is controlled by ram location $CB...so all that needs to be done is search for where this ram location is reduced. This is commonly done by using the DEC instruction in games...and the instruction DEC $CB exists at $D932 in Phoenix. I changed that 2-byte instruction to be 2 NOP instructions instead here:

Boring_Phoenix.bin

Link to comment
Share on other sites

Hello,

 

Does anyone happen to have a cheat code to get infinite lives in Phoenix? I'd like to see how the game levels evolve, but unfortunately I'm not very good at it. I've been searching for the lives counter myself using Stella, but could not find it.

 

Any help would be appreciated. Thank you.

In addition to what Nukey said, this can be found in Stella in several ways through the debugger and cheat facilities:

 

1) Search all of RAM, then go back to the game, lose a life, re-enter the debugger and compare RAM for '-1' (ie, all locations previously searched that are 1 less than before). This will highlight $CB and $CE. Lose another life to narrow it down.

 

2) Once you've determined it's $CB, there are two options:

a) trapwrite on $CB, rerun the game, and let the debugger break when $CB is changed. Then 'NOP' the operation as described by Nukey. The instruction is located at $F932 in bank 1. A cheat to 'NOP' this instruction is 01932ea1.

b) set $CB to some constant value all the time, so it effectively never changes. A cheat to do this is cb86.

Edited by stephena
Link to comment
Share on other sites

Hello,

 

Does anyone happen to have a cheat code to get infinite lives in Phoenix? I'd like to see how the game levels evolve, but unfortunately I'm not very good at it. I've been searching for the lives counter myself using Stella, but could not find it.

 

Any help would be appreciated. Thank you.

In addition to what Nukey said, this can be found in Stella in several ways through the debugger and cheat facilities:

 

1) Search all of RAM, then go back to the game, lose a life, re-enter the debugger and compare RAM for '-1' (ie, all locations previously searched that are 1 less than before). This will highlight $CB and $CE. Lose another life to narrow it down.

 

2) Once you've determined it's $CB, there are two options:

a) trapwrite on $CB, rerun the game, and let the debugger break when $CB is changed. Then 'NOP' the operation as described by Nukey. The instruction is located at $F932 in bank 1. A cheat to 'NOP' this instruction is 01932ea1.

b) set $CB to some constant value all the time, so it effectively never changes. A cheat to do this is cb86.

 

I need to look into this, not really this but Stella's cheat system, I never have understood how it works.

Link to comment
Share on other sites

Easy...just look for the BCD scoring routine (by searching for the SED instruction) and cross-reference the ram locations used near the end. It turns out that the #lives variable is controlled by ram location $CB...so all that needs to be done is search for where this ram location is reduced. This is commonly done by using the DEC instruction in games...and the instruction DEC $CB exists at $D932 in Phoenix. I changed that 2-byte instruction to be 2 NOP instructions instead here:

Or change the DEC to INC and gain lives by dying. Then you would be a true Phoenix, a mythical bird that rises from the ashes. :lol:

Link to comment
Share on other sites

Hello,

 

Does anyone happen to have a cheat code to get infinite lives in Phoenix? I'd like to see how the game levels evolve, but unfortunately I'm not very good at it. I've been searching for the lives counter myself using Stella, but could not find it.

 

Any help would be appreciated. Thank you.

In addition to what Nukey said, this can be found in Stella in several ways through the debugger and cheat facilities:

 

1) Search all of RAM, then go back to the game, lose a life, re-enter the debugger and compare RAM for '-1' (ie, all locations previously searched that are 1 less than before). This will highlight $CB and $CE. Lose another life to narrow it down.

 

2) Once you've determined it's $CB, there are two options:

a) trapwrite on $CB, rerun the game, and let the debugger break when $CB is changed. Then 'NOP' the operation as described by Nukey. The instruction is located at $F932 in bank 1. A cheat to 'NOP' this instruction is 01932ea1.

b) set $CB to some constant value all the time, so it effectively never changes. A cheat to do this is cb86.

 

I need to look into this, not really this but Stella's cheat system, I never have understood how it works.

Look at the Stella documentation, section 15 (Cheatcode Manager). Adding a cheat itself is ridiculously easy; coming up with them not so easy :) If you're creating one from scratch, 90% of the work is in finding the correct address/value to use, so knowing the debugger is really the first step. Also, the process in 2(a) above is described in the debugger section of the Stella manual as well.

Link to comment
Share on other sites

Easy...just look for the BCD scoring routine (by searching for the SED instruction) and cross-reference the ram locations used near the end. It turns out that the #lives variable is controlled by ram location $CB...so all that needs to be done is search for where this ram location is reduced. This is commonly done by using the DEC instruction in games...and the instruction DEC $CB exists at $D932 in Phoenix. I changed that 2-byte instruction to be 2 NOP instructions instead here:

Or change the DEC to INC and gain lives by dying. Then you would be a true Phoenix, a mythical bird that rises from the ashes. :lol:

Unless, of course, you lose so many lives (255) that INC wraps around to zero and causes you to die again! :)

Link to comment
Share on other sites

More like 128 lives, since it looks as if the high bit ($80) is used to indicate an active game vs. attract mode. IMO searching for the SED instruction in any BCD game that awards reserve ships/lives during the score routine is a pretty quick method (and reveals the precise ram location used).

Link to comment
Share on other sites

IMO searching for the SED instruction in any BCD game that awards reserve ships/lives during the score routine is a pretty quick method (and reveals the precise ram location used).

True, but my explanation assumes that the programmer doesn't have the source/know of any way of decompiling, and that they don't necessarily know that BCD mode is used for scoring/lives. As such, it's a more general approach (at least for games that decrease some counter by 1, since games like River Raid decrease by 8 for each life).

Edited by stephena
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...