Author Topic: Sonic Advance 3 (GBA)  (Read 31883 times)

0 Members and 1 Guest are viewing this topic.

Offline TerraEsperZ

  • Hero Member
  • *****
  • Posts: 2326
Sonic Advance 3 (GBA)
« on: February 23, 2012, 08:18:40 pm »
Same is with this thread but with Sonic Advance 3 instead of Sonic Advance. Same techniques, only with different memory addresses. Wanted to see some different graphics for a change, so I thought it would be better to at least stay within the same series rather than to start mapping a completely different game. ...Probably not going to update this thread much until the first game is fully done; still not decided about the second game given its *huge* maps though.

*Added 28/02/12*
Zone 1 - Route 99 - Zone Map:


Zone 1 - Route 99 - Act 1:


*Added 28/02/12*
Zone 1 - Route 99 - Boss:


*Added 28/02/12*
Zone 1 - Route 99 - Push The Switch Mini Game:


*Added 28/02/12*
Zone 1 - Route 99 - Defeat All Enemies Mini Game:


*Added 28/02/12*
Zone 2 - Sunset Hill - Zone Map:
« Last Edit: February 05, 2017, 09:29:41 pm by TerraEsperZ »
Current project:
Mega Man: Powered Up (PSP)

Offline Troy Lundin

  • Full Member
  • ***
  • Posts: 145
Re: Sonic Advance 3 (GBA)
« Reply #1 on: February 24, 2012, 02:13:44 am »
I notice in your thread on Sonic Advance that you mentioned you could just move the camera around to capture the scene without actually moving your character. Is this all it takes for this game? If so, I could use my capture program to zip through the scenes making the capturing process take mere hours.

Let me know if I can help.

Offline TerraEsperZ

  • Hero Member
  • *****
  • Posts: 2326
Re: Sonic Advance 3 (GBA)
« Reply #2 on: February 25, 2012, 12:17:56 am »
Some automation would be really helpful, but fully automating the process would still leave a lot of manual work. First, I need to freeze all the cycling colour palette entries right at the start. Also, even though enemies spawn once the camera comes within a certain range of them, it takes a bit of work to make sure I capture them in their original position (or the best position for those where the original one looks bad). Further more, freezing the counter that keeps moving platforms in their original positions can hide some objects like the spikes which come out of the ground/ceiling periodically. And finally, there's a bit of auto-scrolling that kicks in when you approach the goal icon that can mess up things a bit.

Since I'm more of a hands-on kind of guy, I'd still prefer to have as much control of the capture process as possible. My method is mainly long and tedious because each movement of the camera requires opening the cheat code window, removing the code for the current camera position (usually only one axis at a time) and then entering the new one. That's also really hard on my wrists even by using lots of keyboard shortcuts.

What would be great, if I knew how to do that, is find a way to change the camera values with keyboard keys. Having each tap of a key move the screen halfway in the desired direction would be best (F0 / 2 = 78 for the X Axis, A0 / 2 = 50 for the Y Axis) because it would let me easily move from one screen to the next integral one with the halfway position in case an object overlaps between two screens. I've only recently learned of Lua script being supported in VBA-rerecording and how it might enable me to do just that, but I've yet to actually give it a try. What do you think?
« Last Edit: February 25, 2012, 12:28:29 am by TerraEsperZ »
Current project:
Mega Man: Powered Up (PSP)

Offline Troy Lundin

  • Full Member
  • ***
  • Posts: 145
Re: Sonic Advance 3 (GBA)
« Reply #3 on: February 25, 2012, 01:24:14 am »
I make small, custom programs that can freeze memory values for me. I customize them to give me complete control over what I want to do in the game. I made these mostly because the cheat feature in VBA is garbage. Utterly useless. If you would like, I can send you a copy of the program.

I made one for Sonic Advance 2, since you said you hadn't done that one yet I figured I'd see what was up. All it does for now is freeze the NPCs and rings. It also lets you change your position any time you want. If you send me the addresses for SA3 I can make a custom program for that as well. It's all very easy and takes less than five minutes. :D

I made freeze programs for all the games I have captured so far. Makes the process very simple.

Offline Revned

  • Hero Member
  • *****
  • Posts: 1094
Re: Sonic Advance 3 (GBA)
« Reply #4 on: February 25, 2012, 10:07:51 am »
A quick search found this script for Cheat Engine.

Offline TerraEsperZ

  • Hero Member
  • *****
  • Posts: 2326
Re: Sonic Advance 3 (GBA)
« Reply #5 on: February 25, 2012, 12:22:09 pm »
Cheat Engine didn't seem to work right with Visualboy Advance last time I tried it. The display kept oscillating between the camera position as entered in Cheat Engine and the normal position in the game, as is it wasn't updating the address fast enough or wasn't able to override VBA's control over that memory location. I'd still like to give it a try by myself, if only because anything I learn is bound to be useful for future game. Troy Lundin, give me a few days to see what I can manage on my own; if I can't accomplish squat alone, I'll see about using your program. Thanks for the offer though :)
Current project:
Mega Man: Powered Up (PSP)

Offline TerraEsperZ

  • Hero Member
  • *****
  • Posts: 2326
Re: Sonic Advance 3 (GBA)
« Reply #6 on: February 25, 2012, 03:35:42 pm »
Things are looking *way* up for all three Sonic Advance games! I've spent the last few hours first by installing VBA-ReRecording which supports Lua Script, and then going over some of the commands to read and write to memory, display information onscreen, etc. It's nice to see that despite not having coded anything in over a decade, I can still write a little program without much effort.

It's not finished yet, but so far it's showing promises. Since VBA-ReRecording doesn't let you change the background color like the later VBA-M versions do, the first thing my script does is change the color to my old favorite, 0x7C1F (which is the closest to #FF00FF the GBA can get). Somehow, I need to change it in two places for it to work flawlessly (one address is the GBA's palette, and the other I assume is the actual palette of the game engine). It also displays the actual X and Y coordinates on screen.

What's left is basically to switch to a "free camera" mode by pressing, say, F, after which I can move the camera around using the keyboard keys. It only sorta works so far, but I should have it fixed soon. This is going to make my life so easy :)!

Thanks for offering your help Troy Lundin though. It's seeing people like you who are much more talented than I am that makes me want to improve myself.

*EDIT*

It's pretty much done, and judging by how long that took, it's safe to say that I'm more than a little rusty when programming. The program basically does everything I already mentionned: changes the background color, displays the camera coordinates on screen, can freeze the moving objects in their starting spot at will and I can switch to free camera mode at any time, moving in half-screen increments in all directions or reset back to the player's position.

I might add something to make the rings stop spinning eventually or, heck, freeze the entire background color palette when the stage start but that's *so* not important right now! And the best part is that all I have to do to adapt it to the other Sonic Advance games is simply change the memory addresses. My wrists will be so thankful not to have to enter those annoying cheat codes all the time :)
« Last Edit: February 25, 2012, 07:26:31 pm by TerraEsperZ »
Current project:
Mega Man: Powered Up (PSP)

Offline Troy Lundin

  • Full Member
  • ***
  • Posts: 145
Re: Sonic Advance 3 (GBA)
« Reply #7 on: February 25, 2012, 09:26:22 pm »
Glad you got it working. Btw, does the rerecording program freeze values better than the VBA's cheat system? That was one issue I had with it. The internal freeze wasn't quite strong enough for some values.

Also, I made my first freeze program when I was doing Golden Sun 2. I couldn't just freeze the NPCs willy nilly. The NPCs had values in the WRAM and the IRAM. The ones in the IRAM were only used for the NPCs after the scene had loaded in the game. So, if I froze the value and loaded another scene, there would be graphical errors since the addresses I had frozen were used for loading the scene before they were used for controlling NPC animations. I had to write a conditional freeze so the values would only freeze after the scene had loaded but before any of the NPCs could do anything.

Does the rerecording program work with conditions like that? I'll have to check it out.

Offline TerraEsperZ

  • Hero Member
  • *****
  • Posts: 2326
Re: Sonic Advance 3 (GBA)
« Reply #8 on: February 25, 2012, 09:59:52 pm »
I don't think so. I don't anything about the various forms of RAM you mentioned but from what little I saw, it seems to be the same as with regular VBA. The new RAM Search Window has more options but that's pretty much it I think. But then again, my interest in VBA-ReRecording was limited to the Lua Script which allowed me to write my own conditional freezes.
Current project:
Mega Man: Powered Up (PSP)

Offline Troy Lundin

  • Full Member
  • ***
  • Posts: 145
Re: Sonic Advance 3 (GBA)
« Reply #9 on: February 25, 2012, 10:40:59 pm »
If you open the memory viewer and click the dropdown in the upper-left hand corner you'll see.

WRAM is anything 02000000, IRAM is 030000000.

Offline TerraEsperZ

  • Hero Member
  • *****
  • Posts: 2326
Re: Sonic Advance 3 (GBA)
« Reply #10 on: February 28, 2012, 07:52:07 pm »
Updated the first post with the following maps:

Zone 1 - Route 99:
-Zone Map
-Boss
-Push The Switch Mini Game
-Defeat All Enemies Mini Game

Zone 2 - Sunset Hill:
-Zone Map


My Lua Script makes the initial screen capture much faster, but the maps still require some time to capture the borders of the maps which my script doesn't allow me to reach unless Sonic is standing against said borders or to add the enemies correctly (my script makes it difficult to capture them in their initial state). Still, it's much better than before.
Current project:
Mega Man: Powered Up (PSP)