The Smurfs on GameBoy - Hidden Developer Level Select and more

It truly has been a long time since I used this particular feature, but anyways I felt like it may be time to write some of the things down I do just in case anybody is interested in them and for me to maybe revisit at a later point too.
So, recently I did several tests with different gameboy models because I was interested in how exactly their audio differs from each other and for that I chose the smurfs because it uses several interesting registers to do stereo effects as well as volume control, I may get to those tests in a future blog entry, I dont know yet ;)

To focus a bit more on the smurfs, I was looking for some form of sound test because I wanted to also record most other tracks too because I think they are pretty good, but after searching on the internet there did not seem to be anything, in fact, I only found a whopping 2 passwords you can use in the options menu on the title screen to warp to act 5 (PBSP) and act 10 (ZRMS) - and that was it.
At that point I got curious if there truly was nothing else so I fired up the emulator bgb because of its very nice debugger features and started poking around, it just took me one look into the memory viewer to immediately see where the passwords were stored, its literally at the ROM start at hex D3 and D7:
smurfspws.jpg

So it was just a task of setting a breakpoint for it on read and I saw where it compared that data, which was right here when pressing start on the title screen:
smurfspwscmp.jpg

As you can see, "de" gets loaded with D3 and D7 here, also "hl" gets loaded with D93A, that is the memory location of the password you enter in the options menu, 2941 is just comparing both strings, and if they were true it loads "c" with either hex 28 (stage 5) or hex 58 (stage 10), if it did not match then it gets set to hex 0 (stage 1), "c" then gets moved to "a" and "b" gets loaded with hex FF, so far its all pretty simple and does not seem all that interesting...

However, the code right above this looks like this:
smurfspwhidden.jpg

You might notice that right in the first line, it loads from D93A, which is our entered password, and then comparing it to some hardcoded hex value, it does so for the first 3 letters and then that last comparison is actually the index of the 4th letter instead of its displayed value, so to be a bit more specific, it compares the first 3 letters against hex 42 (B), hex 58 (X) and hex 4D (M) and makes sure the 4th letter is below index hex 13. If all of that is verified true, then it takes the index of the 4th letter and essentially multiplies it by 8 (stage numbers are multiplied by 8 for some reason), loading hex FE into "b" and jumping to the same location where the "regular" passwords also continue at, meaning this acts as a form of secret developer level select! Also I should note, the "b" value is different from this password so when you load a bonus stage, it returns to the main menu after the bonus is finished since it has no act it was loaded from.

So with all that explained, here is a list of valid level select passwords you can enter in the options menu:
BXMB - Act 1
BXMC - Act 2
BXMD - Act 3
BXMF - Act 4
BXMG - Act 4 Boss
BXMH - Act 5
BXMJ - Act 6
BXMK - Act 7
BXML - Act 8
BXMM - Act 9
BXMN - Act 9 Boss
BXMP - Act 10
BXMQ - Act 11
BXMR - Act 12
BXMS - Final Boss
BXMT - Final Boss Defeated + Ending
BXMV - Bonus Stage The Dam
BXMW - Bonus Stage The Mushrooms
BXMX - Bonus Stage The Bubbles
I dont think those were documented before so hey, I actually may have found something new :D


Oh, also because I already looked at the memory locations where the password was set I noticed some more interesting locations too, such as these:
D942 - sound effect to play next
D95A - music to play next (16 bit address)
D9AA - invincibility frames after hit (counting down on hit)
D9B5 - lives
D9B6 - health
D9CD - timer (uses 2 bytes for 0-9 each)

With those I made up a set of game genie codes just for the sake of having done gameboy cheats, never wrote my own ones before.
edit: My original set of codes were only for v1.0, that version boots up saying 1993 like this:
v10.jpg
If you have that version then this original set of codes will work:
185-14E-4CA - disable sound effects
wish that one was an option ingame, its weird how you can disable music but not sound effects...

005-EBC-19E - infinite lives
006-D7A-19E - infinite health
C97-C3A-D5D - infinite time
186-B1A-6EA - phase through enemies
pretty generic ones I know, but hey, every game has cheats like these in some form right? ;)

replace title music with:
1BA-85D-80A - act 1/act 11 music
21A-85D-80A - act 2 music
1EA-85D-80A - act 3 music
36A-85D-80A - act 4/act 12 music
24A-85D-80A - act 5 music
27A-85D-80A - act 6 music
2AA-85D-80A - act 7 music
2DA-85D-80A - act 8 music
30A-85D-80A - act 9 music
33A-85D-80A - act 10 music
39A-85D-80A - bonus music
42A-85D-80A - intro part 1/game over music
45A-85D-80A - intro part 2/boss defeated music
48A-85D-80A - boss music
4BA-85D-80A - final boss music
4EA-85D-80A - credits music
just for show, I understand how the music works in this game, and sadly I did not see any code resembling a sound test, so these just demonstrate how to for example swap music around.

if your game however is v1.1 indicated by it saying 1994 on boot like this:
v11.jpg
then here are the adjusted codes for that:
185-4AE-4CA - disable sound effects
wish that one was an option ingame, its weird how you can disable music but not sound effects...

006-C1C-19E - infinite lives
007-E9A-19E - infinite health
C98-D5A-D5D - infinite time
187-C3A-6EA - phase through enemies
pretty generic ones I know, but hey, every game has cheats like these in some form right? ;)

replace title music with:
1BA-49D-80A - act 1/act 11 music
21A-49D-80A - act 2 music
1EA-49D-80A - act 3 music
36A-49D-80A - act 4/act 12 music
24A-49D-80A - act 5 music
27A-49D-80A - act 6 music
2AA-49D-80A - act 7 music
2DA-49D-80A - act 8 music
30A-49D-80A - act 9 music
33A-49D-80A - act 10 music
39A-49D-80A - bonus music
42A-49D-80A - intro part 1/game over music
45A-49D-80A - intro part 2/boss defeated music
48A-49D-80A - boss music
4BA-49D-80A - final boss music
4EA-49D-80A - credits music
just for show, I understand how the music works in this game, and sadly I did not see any code resembling a sound test, so these just demonstrate how to for example swap music around.

If you actually read through all of this then thank you, maybe something like this was interesting to read, let me know :)
  • Like
Reactions: 15 people

Comments

Your patience must be legendary, lol. I'm following u dude so anything you do I'm curious about, even if I don't understand half of what you say sometimes, lol!
 
nice write up. your dedication keeps me coming back, always a pleasure to read/watch your developments fix!
 
  • Like
Reactions: 1 person
@futow well I found those level select passwords a couple days ago, but all the game genie codes and those other memory addresses I all did yesterday in a couple of hours, it was a pretty simple case of just setting breakpoints and reading the machine code it pointed me to.
 

Blog entry information

Author
FIX94
Views
292
Comments
10
Last update

More entries in Personal Blogs

More entries from FIX94

General chit-chat
Help Users
  • RedColoredStars @ RedColoredStars:
    Guy doesnt know wtf hes talking about half the time
  • realtimesave @ realtimesave:
    @SylverReZ that reminds me that my friend sells CRTs he gets cheap or free for hundreds of dollars. people are dumb
    +1
  • RedColoredStars @ RedColoredStars:
    And is incredibly annoying.
  • realtimesave @ realtimesave:
    man I just washed my shoes and they look exactly the same as before I washed them :|
  • realtimesave @ realtimesave:
    luckily they didn't fall apart
  • RedColoredStars @ RedColoredStars:
    Some CRTs are very much worth the price
  • RedColoredStars @ RedColoredStars:
    i used to go out to the recycling center every couple weeks and look at the crts and other electronics people would drop off. Usually screens were broken or severely scratched from being tossed around. Did find a good one here and there, but never anything like a 1080i widescreen crt.
  • RedColoredStars @ RedColoredStars:
    Or a good contition 40" Sony Trini that weighs 300 lbs. lol
  • RedColoredStars @ RedColoredStars:
    Literally 300 lbs. lolol
  • BigOnYa @ BigOnYa:
    I have a few of those boat anchors in my basement I tried giving away but no one wanted them, So anyone close to Columbus, Ohio area that wants them, (26", 2x 19") please come get, for free.
  • RedColoredStars @ RedColoredStars:
    Dont know anyone wants those smaller ones. Most are after larger sizes and the kinda top of the line models
  • RedColoredStars @ RedColoredStars:
    Motion handling and input lag on those things destroy plasmas, led, oled
  • realtimesave @ realtimesave:
    I had some really nice CRTs I should've kept
  • realtimesave @ realtimesave:
    now I have all lcd
  • realtimesave @ realtimesave:
    one in particular I regret getting rid of oh well :|
  • realtimesave @ realtimesave:
    the Sonys and stuff I don't care about
  • realtimesave @ realtimesave:
    and used LCD are hard to sell I can imagine.. not worth much
  • realtimesave @ realtimesave:
    @SylverReZ where do u lurk
  • a_username_that_isnt_cool @ a_username_that_isnt_cool:
    Is it piracy if it was released for free? Not in my opinion, but I also think it's not piracy if buying it isn't owning it, and it's not piracy if you can't buy it from the original creators anymore.
  • K3Nv2 @ K3Nv2:
    Free release can have loopholes where they still make money through ads
    +1
  • Xdqwerty @ Xdqwerty:
    sigh
  • Xdqwerty @ Xdqwerty:
    @a_username_that_isnt_cool, could you change your username?
    Xdqwerty @ Xdqwerty: @a_username_that_isnt_cool, could you change your username?