Welcome to the PokéCommunity!

Hi there! Thanks for visiting PokéCommunity. We’re a group of Pokémon fans dedicated to providing the best place on the Internet for discussing ideas and sharing fan-made content. Welcome! We’re glad you’re here.

In order to join our community we need you to create an account with us. Doing so will allow you to make posts, submit and view fan art and fan fiction, download fan-made games, and much more. It’s quick and easy; just click here and follow the instructions.

PGM is all set for February. This month, we're playing through a game known as Eevee's Tile Trial. If you wish to earn rewards, please head over to our event thread by clicking on the provided link and give yourself a shot at the game!

Hey Unregistered! How fast can you game? The Marathon II is up and running in Video Game's - compete against your friends to see how quickly you can complete sixty intense in-game challenges. See you there!

Research & DevelopmentGot a well-founded knack with ROM hacking? Love reverse-engineering the Pokémon games? Or perhaps you love your assembly language. This is the spot for polling and gathering your ideas, and then implementing them! Share your hypothesis, get ideas from others, and collaborate to create!

Research & Development programs in this forum are subject to moderator approval before they are displayed.

So last night I was talking to Darthatron about his VB6 Hex Editing Modules, and that they wouldn't work on VB.NET and that there are better alternatives in VB.NET as well. I then mentioned my idea of making (for now) a Text Editor for this game. He then mentioned he had an interest in wanting to hack this game, as I do too, because I see a lot of potential for fangames. Anyways, I have a little bit of information documented so far, and I just wanted a place where I could get together information and have others contribute to finding info on this game.

020001CC to 020001D0 - Another timer?
02000E54 to 02000E5B - Player's sprite frame
02000E5C to 02000E60 - Altitude of player. All extra will be F if A is pressed, or 0 is not.

Spoiler:

For example, if the player is jumping, and his altitude is 23A, it would look like this: 0000023A.
However, if the A button is being pressed, if would look like this: FFFFF23A.

Now, I want to also figure out how levels are stored in the game (All three kinds: 2D sidescrolling, isometric atlasphere levels, and Mode 7 wakeboarding and Space Coco levels), where the graphics are, and how time trial relic data is stored, as well as gem shard data, and how we can edit all of it. Last thing I want to do is music as the game doesn't use the standard Sappy engine most GBA games do. Any input and other research you all do is welcomed too because I don't think I can do all of the research, especially ASM. :3

CURRENTLY-KNOWN DEBUGGING FEATURES
Right as of now, we know of:

Song Test (Unknownfile - HCS Forum)

Speed increaser (Team Fail - PC)

Complete Audio Engine crash handler (Team Fail - PC)

Due to the fact that these two debugging options exist, that means there must be more within the game's code. Help us find it and be credited!

Also, I have noticed what look like two message codes, "<#>" and "<$>"
However, it should be noted that they are separate characters!
"<" and ">" print < and >, while "#" prints "A" and "$" prints "A", this is because "#" and "$" are 'invalid.' They have not font representation.

Also, to end a message, there are 2 bytes ,00 00, just like Team Fail said.
However, sometimes there are 4 bytes (00 00 00 00).

On the subject of newlines, it is quite simple... just put two the hex value 0x0A (newline in ASCII)
I'm not really sure on this, though.

Ok, so today I decided to grab a J copy of the rom. As of now, I've already found localization changes.

First of all, let's look at some graphical changes.

Spoiler:

Note: Left is E/U, Right is J unless otherwise stated.
The TNT crates had the graphic changed in the J release. In the J release, there is a simple bomb on the crate as opposed to the letters "TNT". When jumped on, the countdown timer remains the same.

The Nitro translation is retained in the Atlas Sphere levels. I still need to check if this change is also retained in the Wakeboard levels, although I presume it does.

The title screen was also translated, and the graphic (imo) looks better in the J release. Note, it's before this screen, but after the Vicarious Visions screen, that you select a language in the E release. Therefore, Press Start will be in a different language depending on what is chosen. There is no language select in the U release, however, as previously stated.

Here's the copyright screen. It was updated for the J release.

There's also translation changed, for example, when you first enter Globe Trottin', in the J release, Aku Aku gives you a rundown of the controls, but it's left to a ? info spot in the EU releases to give you those same instructions, which also exists in the J release in case you forget.

I'm going to look into all three roms later on, but I am most curious as to how the J release has the text encoded. I'm thinking it's in Unicode, though. I'll have to look and see.

As well, there's some extras in the intro to the game, mostly that there's a Konami logo (KONAMI CODE PLS), and there's a screen change. I'll add that image in a minute.

Edit: Images added.

Edit 2: Was looking in the J rom, and came across this beauty: Debug text!

Code:

GAX2_INIT...OUT OF MEMORY...GAX2_NEW....PARAMS ARG IS NULL..GAX2_NEW_FX.FXPARAMS ARG IS NULL....WHEN USING DIFFERENT FX_MIXING_RATE, FLAG GAX_FX_REVERB AND GAX_HALFRATE_FX ARE NOT ALLOWED.....GAX2_JINGLE.GAX_NO_JINGLE FLAG IS SET...GAX_IRQ.GAX_PLAY HAS NOT FINISHED BEFORE GAX_IRQ. USE LOWER MIXING RATE OR LESS FX CHANNELS OR PUT GAX_PLAY IN VBLANK IRQ...GAX_FX..YOU TRIED TO PLAY A SPEECH FX BUT HAVE NOT USED THE GAX_SPEECH FLAG WITH GAX2_INIT..GAX2_FX.FXPARAMS->FXID IS GAX_DEFAULT

Well, I opened it in CrystalTile as well to see if I can rip the font, but I've found some other useful stuff that UnLZGBA never highlighted.

Starting at 0x7D8540 are some level-oriented objects. I can see, as of now, barrels for the Atlas Sphere levels, some numbers (For counters at the top of the screen), some kind of marker (For what I presume is the multiplayer Atlas Sphere games), various crate graphics in isometric position, various Wumpa Fruit graphics (Large and small), crystal shard graphics (for each frame, 10 frames), gem graphics (again, for each frame, 10 frames), a ? tile for Atlas Sphere levels (15 frames), portal graphics for the overworld (2 frames), (What I think is, but can someone verify? Look at 0x7DF6E0 in CT2.) gem shard graphics (10 frames), gem shard collection glow (10 frames), and CHECK POINT graphics (17 frames, but seems to be in the rom two times for some reason).

Edit: In writing a program I'm working on, I've generated a text dump of the U copy:

{null}{null}{null}{null}press start{null}new game{null}{null}{null}{null}load game{null}{null}{null}link game{null}{null}{null}credits{null}atlasphere{null}{null}link race{null}{null}{null}back{null}{null}{null}{null}waiting for connection...{null}{null}{null}a link error occurred.
the connection was dropped.{null}{null}player 1 wins{null}{null}{null}player 2 wins{null}{null}{null}play again{null}{null}start{null}{null}{null}game: {null}{null}map: {null}{null}{null}rounds: {null}{null}{null}{null}connection established.
waiting for player 1...{null}crash{null}{null}{null}crunch{null}{null}coco{null}{null}{null}{null}fake crash{null}{null}n. trance{null}{null}{null}n. tropy{null}{null}{null}{null}neo cortex{null}{null}dingodile{null}{null}{null}tiny{null}{null}{null}{null}n. gin{null}{null}megamix{null}double cross{null}{null}{null}{null}five points{null}long trail{null}{null}ring master{null}domination{null}{null}king of the hill{null}{null}{null}{null}bumpers{null}continue
and save
{null}continue
without save{null}{null}player 1{null}{null}{null}{null}player 2{null}{null}{null}{null}level{null}{null}{null}island intro{null}{null}{null}{null}prints of persia{null}{null}{null}{null}lagoony tunes{null}{null}{null}globe trottin'{null}{null}pharaoh's funhouse{null}{null}runaway rug{null}tiki torture{null}{null}{null}{null}hoppin' coffins{null}barrel roll{null}flockful of seagulls{null}{null}{null}{null}magma mania{null}run from the sun{null}{null}{null}{null}now it's istanbul{null}{null}{null}mister lava lava{null}{null}{null}{null}water logged{null}{null}{null}{null}slip-n-slidin' sphinx{null}{null}{null}rocks can roll{null}{null}rock the casaba{null}eruption disruption{null}spaced out{null}{null}king too uncommon{null}{null}{null}wild nile ride{null}{null}101 arabian kites{null}{null}{null}fire walker{null}evil crunch{null}evil coco{null}{null}{null}load-save{null}{null}{null}load link game{null}{null}delete game{null}save game{null}{null}{null}quit{null}{null}{null}{null}exit{null}{null}{null}{null}error saving data{null}{null}{null}save ok{null}cancel{null}{null}complete{null}{null}{null}{null}empty{null}{null}{null}delete?{null}overwrite?{null}{null}continue?{null}{null}{null}yes{null}no{null}{null}transferring data{null}{null}{null}error transferring data{null}unlocked neo cortex{null}unlocked dingodile{null}{null}unlocked tiny{null}{null}{null}unlocked n. gin{null}unlocked megamix{null}{null}{null}{null}push {btn_B} to quit{null}{null}push start to continue{null}{null}start: load-save{null}{null}{null}music{null}{null}{null}sound{null}{null}{null}resume{null}{null}warp zone{null}{null}{null}restart trial{null}{null}{null}powers{null}{null}crystals{null}{null}{null}{null}gems{null}{null}{null}{null}gem shards{null}{null}relics{null}{null}time trial{null}{null}none{null}{null}{null}{null}super slide{null}rocket jump{null}tornado spin{null}{null}{null}{null}turbo run{null}{null}{null}hold {btn_L} and push {btn_R} to break
crates and go farther as you slide.{null}hold {btn_L} and push {btn_A} to
jump even higher.{null}push {btn_B} repeatedly to spin
longer and temporarily float.{null}{null}{null}{null}hold {btn_L} for a burst of speed.{null}{null}{null}{null}main menu{null}{null}{null}quit to main menu?{null}{null}quit game{null}{null}{null}player 1 pause{null}{null}player 2 pause{null}{null}follow the wumpa fruit! collect 100 wumpa fruit to earn an extra life.{null}{null}press {btn_B} to spin and break crates!{null}{null}{null}press {btn_A} to jump!{null}{null}{null}{null}bouncy crates allow you to bounce on them several times before breaking.{null}{null}{null}{null}crates can be stacked. spin or jump on them to get past.{null}{null}{null}{null}do not spin tnt crates or they will explode! jump on them to start the timer.{null}{null}{null}break the aku aku crate to summon me. i will protect you from one hit.{null}{null}press {btn_A} two times to jump even higher.{null}{null}press {btn_R} while jumping to body slam. this breaks steel crates.{null}{null}{null}the crash crate will give you an extra life.{null}{null}{null}{null}hold {btn_A} while bouncing to bounce even higher{null}press {btn_R} while running to slide.{null}tnt crates can break other crates. just jump on one to start the timer.{null}{null}{null}{null}do not touch green nitro crates or they will explode!{null}{null}{null}spin the slot crate before it becomes unbreakable!{null}{null}the green nitro switch box destroys all nitro crates in a level.{null}{null}{null}{null}did you collect the purple crystal? did you break all of the crates?{null}{null}{null}{null}deep in the heart of hyperspace...{null}{null}{color:green}uka uka:{color:orange} that incompetent neo cortex. he cannot do anything right! his last scheme to shrink the earth failed miserably! you have been a great asset to the cause of evil over the years n. tropy.{null}{null}{null}{null}{color:green}n. tropy:{color:orange} thank you, my lord.{null}{color:green}uka uka:{color:orange} that is why i trust you with the task of aiding me in universal domination.{null}{null}{color:green}n. tropy:{color:orange} great uka uka, i am honored! and i have the perfect scheme.{null}{color:green}n. tropy:{color:orange} allow me to harness my powers of time and space to peer into the future...{null}{null}{color:green}n. tropy:{color:orange} of course! since those wretched bandicoots keep thwarting us, the solution is to get them on our side. and i know just the fellow for the job.{null}{null}{color:green}uka uka:{color:orange} a new recruit?{null}{null}{null}{color:green}n. tropy:{color:orange} indeed. meet my secret weapon.{null}{null}{color:green}n. trance:{color:orange} i am n. trance, master of hypnotism!{null}{null}{null}meanwhile... {null}{null}{null}{color:green}coco:{color:orange} crash, heeeeeelp!{null}{null}{null}{color:green}aku aku:{color:orange} crash! wake up! coco and crunch have been abducted! find me a power crystal so i can look into what's going on! hurry!{null}{null}{null}{color:green}aku aku:{color:orange} oh, no! watch out crash!{null}{color:green}aku aku:{color:orange} i've got you crash!{null}{null}{color:green}n. tropy:{color:orange} something is holding on to crash. we need more power!{null}{null}{null}{color:green}aku aku:{color:orange} this vortex must be the work of n. tropy.{null}{null}{null}{null}{color:green}n. tropy:{color:orange} i've finally captured that infernal bandicoot!{null}{null} {null}{null}{null}{color:green}n. tropy:{color:orange} i finally got all you obnoxious bandicoots! would you do the honors, n. trance!{null}{color:green}n. trance:{color:orange} with pleasure!{null}somewhere else in hyperspace...{null}{color:green}aku aku:{color:orange} that took almost all the power i had, crash. good job getting the power crystal before you were pulled into the vortex. but, i'll need a lot more crystals if we are to put an end to n. tropy's plans.{null}{null}{color:green}aku aku:{color:orange} that floating island up ahead will allow us to go to different worlds and find crystals. hopefully we can find coco and crunch and stop n. tropy!{null}{null}{null}{null}{color:green}crunch:{color:orange} oohh man...brainwashed again! thanks for saving me crash.{null}{color:green}aku aku:{color:orange} good news crash. the crystals you've collected have allowed me to open up a new area of the island. we can get to new worlds from there.{null}{color:green}coco:{color:orange} oh, crash, thank you. how did you break out of n. trance's hypnosis?{null}{null}{null}{null}{color:green}aku aku:{color:orange} something strange happened when you were being pulled into the vortex, crash. coco saw someone in n. tropy's secret base that looked like you. i'll try to find out who while you go collect more crystals.{null}{null}{color:green}n. tropy:{color:orange} n. trance, you blundering idiot! that was not crash! it was some sort of... fake crash!{null}{color:green}n. trance:{color:orange} how was i supposed to know? he fooled you too. besides, they will never find our hideout. not in a million years!{null}{null}{color:green}aku aku:{color:orange} good job crash! with a few more crystals, i'll be able to open the vortex to n. tropy's hideout!{null}{color:green}aku aku:{color:orange} yes! we've made it to n. tropy's secret base.{null}{null}{null}{color:green}n. tropy:{color:orange} n. trance, you fool! they have found us! destroy them!{null}{null}{color:green}n. trance:{color:orange} it should have taken a million years to find us... how?{null}{null}{null}{null}{color:green}aku aku:{color:orange} time does not pass in the vortex... i had all the time i needed to find you!{null}{color:green}n. tropy:{color:orange} you have one last chance to stop them. do not disappoint me again!{null}{null}{color:green}n. trance:{color:orange} destroy all bandicoots!{null}{null}{null}{null}{color:green}n. tropy:{color:orange} noooo! i can't defeat all these wretched bandicoots myself!{null}{color:green}n. tropy:{color:orange} but mark my words. i'll be baaaack!{null}{color:green}aku aku:{color:orange} good job crash! you've rescued the other bandicoots from n. tropy and defeated n. trance! too bad n. tropy got away. if only we had all of the gem shards, i could re-open his space vortex and you could go after him!{null}{null}the end??{null}{null}{null}{color:green}aku aku:{color:orange} good job, crash! you've rescued the other bandicoots from n. tropy and defeated n. trance! lucky thing you collected all of the gem shards. i can use them to re-open his space vortex and you can go after him!{null}{null}{null}{null}{color:green}aku aku:{color:orange} congratulations everyone, for defeating n. tropy and capturing him! let's take a picture to celebrate!{null}{null}{null}{color:green}uka uka:{color:orange} that's it! no more underlings! next time you will face a real adversary!{null}the end... for now...{null}{null}{null}{color:green}aku aku:{color:orange} crash, these mayan ruins can only be traversed by using one of your favorite toys, the atlasphere. look out for nitro traps and ledges.{null}{null}{color:green}aku aku:{color:orange} now it is your turn to use the atlasphere, crunch. but be careful! n. tropy has added some new dangers.{null}{null}{null}{null}{color:green}aku aku:{color:orange} crash, in this water world you will need to use your wakeboard to collect the power crystal. the waters are guarded by a vicious shark so be careful!{null}{null}{null}{null}{color:green}aku aku:{color:orange} the next power crystal is located in space, coco. you must use your space suit and rocket tug to retrieve it. n. tropy has sent a huge fireball that will destroy the crystal if you do not move fast enough, but i have created turbo gates to help you stay ahead of the danger.

Edit 2:

I've been looking at the text, and agentgeo and I figured out where the text is stored at for the Japanese games (0x5136C8) and I noticed that all of the characters, both Hiragana, and Katakana, are stored in there. So I looked at the first few lines of Japanese that are used for the main menu. I then made an amazing discovery.

This means, that when it parses Japanese text, it uses hashtags (#), byte 0x23, to switch between Hiragana and Katakana. The example I used above is the first occurrence of the hashtag switcharoo, which means that the text, by default, is set to display Hiragana, but since it's also the first Japanese string, and it needs to be written in Katakana, it switches it. As well, I think it uses an "X" character to "push" text along. What I mean by that, is that the game uses it to align characters for certain symbols that use 3 letters, such as tsu and shi, or chi. However, it doesn't render them. Look in the screens to see this.

Edit 3: These games also have english characters too, which, afaik, are only used in the credits. LOVE MY TRANSLATION:

I think this is the last of the methods they've employed for text encoding/reading, but hopefully I don't find any other odd characters.
Edit: nope.avi I need to find more bytes for the Japanese games. The codes to display the buttons in text are different from the UE releases. I'm going to have to write a completely custom parsing method for the Japanese games. @___@

So now that I've got more time to work on the program, I've been looking at the rom and found some kind of level data. I know it's not objects, but I think it may be crate counts for each level. I'm not sure what it is yet, but there's a table at 0x14D20 (U), and if you zerobyte it and attempt to go in a level, the game will simply hang.

So I found this post by ipatix that contains a program that generates a list of offsets for sound tables. I used it on the U version of the game and it gave me the following offsets. I plan to look at it soon and see if I can make heads and tails of the GAX sound engine. Although, with limited time, anyone can look at it if they wish. Now, on to the tables' offsets!

AC8E:
No 01: 2A3684
No 02: 216934
No 03: 211BA0
No 04: 21430C
No 05: 2A9684
No 06: 263990
No 07: 29E7A0
No 08: 2A5278
No 09: 7FC150
No 10: 261320

Major important edit:

So, I was looking on the interwebs to find a music rip of this game, and I came across a jewel of information that could be unused content within the game.

Quote:

-Crash Bandicoot 2 N-Tranced - There is a song test feature that can be accessed when the Current Level identifier is hacked. I might consider using a savestate for the GSFLib. (That's your cue to add state support.)

My next question, is what is this level identifier? I presume it's something in the RAM, but I'll have to look deeper and find out.

Edit: (U VERSION ONLY) If you pop open a memory viewer and go to 0x0200014 (or rom offset 0x007FBD18) and change it to a non-zero value, you'll enable a hidden debug option still in the game. I'm not gonna say what it is, but I plan to add it onto TCRF at some point soon.

Edit: mehhh I'll spill what this does. When that byte is set to a non-zero value, it doubles the speed of the game. However, audio remains at 1x speed. It'd probably have been binded to a button combo or debugger menu option so that it could be enabled/disabled at will to speed up slow parts of the game, like the intro or credits.

(Gameshark SP/Codebreaker code E99B8028 EC01 will also activate this unused feature. Works on hardware as well.)

Edit: Level identifiers by hex! Identifiers: 02002744:XX 03007DA8:XX, credits to Einstein95 on TCRF (Also signed up on PC, Thanks a ton!) for finding this.

Notice anything? Yes, the level numbers are the hex equivalents. That's how the game draws the level numbers. Also, I don't know if there's any unused levels in there yet, all I've done is up to 1C. I don't know where the bonus levels are identified at.

Also, going along theory, I think that there is not only a current level identifier, but a current map identifier because of the bonus levels, and the fact that they need to be loaded as well. I want to see if I can find this as well.

For example, if you were to set 0x03007DA7 to 80, then the camera moves up. It seems like it was planned to have a way of looking around the map, like in other games (Super Mario World springs to mind). This is probably true given that 00 returns back to Crash in a smooth camera movement.

ETA: Oh, and I found the time trial counter (not the gems)
Time Trial counter:
02002708 - Minutes
0200270C - Seconds
02002710 - Deciseconds (1/10th of a second)
02002714 - Centiseconds (1/100th of a second)

What's interesting is that it counts the centiseconds which aren't displayed in the timer.

Edit: Fast fact... If you edit the pointer to the sound table (Search E8 FB 1C 08 with a hex editor, it should only return one result), and you edit that pointer to something that doesn't exist, you can force the game to display a crash debugger for the audio engine. THAT MEANS EVEN MORE DEBUGGING CODE (And possibly an audio test) EXISTS!

Edit: There are two pointers I discovered. One points to the sound table, and one points to a sfx table. The offsets to these pointers are as follows:

The PokéCommunity

Meta

Pokémon characters and images belong to The Pokémon Company International and Nintendo. This website is in no way affiliated with or endorsed by Nintendo, Creatures, GAMEFREAK, or The Pokémon Company International. We just love Pokémon.