VGMaps
November 23, 2017, 11:43:31 AM *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
 
   Home   Help Search Login Register  
Pages: [1]   Go Down
  Print  
Author Topic: (GBA) Final Fantasy V Advance  (Read 1924 times)
0 Members and 1 Guest are viewing this topic.
Troy Lundin
Full Member
***
Offline Offline

Posts: 145


« on: May 03, 2012, 09:48:36 PM »

I was going to do this game about a year ago but hit a road block immediately. Let me explain.

Most games are ridiculously easy to capture. I just find a couple memory locations (Map ID, Actor Position, Camera Position) and I can zip through the game in about a week. But, this game was unforgiving.

I found the address for the actor location pretty quick, so I started manipulating that to get around the scenes. But, I learned pretty quickly that this game was not like most. As soon as I moved to a tile that I wasn't supposed to be on, like the ones on the other side of walls, I would get ported out of the area and back to the world map. It was weird so I took a look in memory for a solution. I checked if I could just manipulate the camera directly, but that was a no go. I tried corrupting some of the surrounding memory it hopes of uncovering some secret bytes that let me move where ever I want. Nope.

So, I gave up on the game. It seemed as though it couldn't be captured. But, today I loaded it back up with the intention of finding a way to capture it. No matter what! After about eight or nine hours of trudging through memory byte-by-byte, I came upon a group of bytes that didn't seem to be of any use at first glance. This group of 8192 bytes starts at 9726h. After a few minutes of manipulating them, I noticed something quite interesting. Each byte was actually the ID of each tile for the current scene. This was amazing!

I quickly through together a program that could read the bytes and output the correct tiles in that order to create the entire scene. This worked, but only partway. It seems the first 4096 bytes of this block is used for BG2 while the second 4096 bytes are used for BG3. The were no bytes for BG1 or BG0. Very disappointing. Sad

Then I had an idea. What if I just changed the ID of all the tiles to that of a walkable tile? It may work since the tiles don't get updated until the screen is refreshed via the status menu or scrolling. It worked somewhat, but as soon as I started scrolling the tiles refreshed and changed into the wrong ones. Ok, that's fine. What if I just change a couple tiles? Maybe just the tiles around me? That way they won't refresh until they scroll off-screen but that won't matter since I sill have already captured that portion of the scene. It worked! Yay!

So, about eleven hours total today got me the ability to capture this treacherous game. There were other minor things I found, such as a way to move my sprite off the screen so I can capture other important sprites. But, all in all it has been a long and rewarding adventure. I learned some new things about the game and about myself. Cheesy


Memory Locations

9726   Tile Start
E2AE   Map ID
E2B2   PosX
E2B3   PosY
E397   Set to zero to move sprite off-screen.
E398   Same as previous.
Logged

Troy Lundin
Full Member
***
Offline Offline

Posts: 145


« Reply #1 on: May 24, 2012, 11:12:38 PM »

Been slacking lately. I got myself hooked on newly released games and I have been neglecting everything else.

Here are a couple scenes I grabbed recently. As you can see, there are areas that aren't even finished. I guess they figured the camera would never go over there so why even put something there. Makes sense. Also, the scenes are definitely 1024x1024 pixels. It won't even loop around when I hit the edge. The character just stops. It's such unusual programming.

Logged

Pages: [1]   Go Up
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2013, Simple Machines Valid XHTML 1.0! Valid CSS!