Wow. You really weren't kidding when you said the game doesn't like being force scrolled, huh? After a few resets, the game eventually got stuck at lag frames, showing only this:
In the end, I was forced to manually reset the 68000 processor so the map hack could continue.
Edit: it seems that the map hack has reset along with the 68000 processor, and is back at failing at the same spot: about maybe 3-4 half-screens down from the initial position, after the first (vertical) rotating gray cylinder. This is around the area where the Knuckles cutscene happens, if I am not mistaken.
Edit 2: It seems I was wrong and it went all the way through. After going over the level as described, however, hitting 'B' had no effect except if I left capslock on (that is, if I ignored step 20). And now I know why your maps do not have backgrounds too.
Oh right. If you have caps-lock off, you have to hit S after B to get it to actually dump. I forgot about that. For some reason the code logic only lets it dump on the same frame that it takes a new screenshot.
How fleeting are all human passions compared with the massive continuity of ducks.
Well, I now just have to figure out how to force Gens to let me actually scroll to the bottom of the stage -- there are five or six rows of about screen height missing from the bottom because of that, including a good chunk of the bottom route.
New WIP until end of IceCap 2. Act 1 is almost 3 seconds faster and act 2 is 1 frame faster. The act 1 trick came from an unassisted run I found by accident.
Uff... it was quite a bit of work*, but I finally managed to get Gens maphack to work as I wanted!
The first map is for Launch Base 1: here it is (warning: it is 0.97MB in size).
* For those that care: first, there was a scrolling limit bug that had to be fixed (alternatively, a bitmap-size bug, but it was easier to fix as the former) -- X and Y from lines 1833-1834 have to be pre-divided by the ratio (rounding up) or you will be able to scroll too far to the right or bottom for certain scale factors (most of them, actually).
I also had to tweak the values of X and Y for Launch Base 1, as large parts of the level were being cut otherwise.
The automatic mode was sadly more annoying than useful, so I turned it off (in particular, the changed X and Y values caused it to hang continuously).
Then I disabled ring animation to help make the map; but the line in question actually in SonicHackSuite.cpp actually does it wrong, and instead makes the ring rotate extremely quickly (instead of setting the timer to zero -- causing a change every frame -- it should be set to (say) 127 instead).
Finally, the pre-divided X and Y values from above forced me to adjust the line that sets the water level for levels without water. Each of these forced me to restart the map, but eventually it was done. I think (hope) that the other maps will be a lot easier now that I have some experience with it.
This is great work.
The bitmap size thing wasn't really a bug, exactly. It was a limit set because mapcap.bmp is always generated at the resolution specified, and the machine I was working on at the time was running out of memory even trying to open files that were more than a little bit larger than that.
The main reason I never did Launch Base, though, was because I couldn't figure out how to deal with the tileswapping for those inside/outside areas in an easy way.
Also, there's two last things I forgot which should be really helpful for future maps, but I don't think should make too much difference for the one you already did.
1. Make a copy of your S3K ROM, and open that copy in a hex editor
go to 0x01DB50, and replace
to prevent monitors from ever showing static.
2. Before dumping maps, enable graphics->layers->sprites->sprites always on top. This will cause rings and monitors and enemies to show even when they would normally be obscured by scenery.
How fleeting are all human passions compared with the massive continuity of ducks.
I did it by enabling debug mode, activating it and teleporting inside the inside area in question to swap the tiles. It had the nice additional effect of showing the camera position; it also did not trigger effects such as the bosses. It had the unfortunate effect that I had to do a couple of parts again because the game placed some extraneous rings here and there, but that was easy to spot and fix.
Now, that is useful! Thanks, redoing monitors to disable static was a pain.
I did that more towards the end (about halfway through), but it didn't make much difference for the top half (and I redid the parts where it did make a difference).
Launch Base 2 map is here (916KiB), already with the hacked monitors. By any chance, is there a similar hack for the big rings? Sure they are fewer and farther apart than monitors, but it would still help.
I never found the giant ring animation scripts, so no, there is not. But it actually shouldn't be that difficult for me to go try and make one right now.
edit:
At 0x0619C2, change
04000001020304050607F80C060B0A0908
to
04080808080808080808F80C0608080808
How fleeting are all human passions compared with the massive continuity of ducks.
The more Sonic-oriented sites are a much better source for Sonic maps than more generic map sites; for example, Sonic Retro has several maps by Upthorn, Stealth and others. I am just completing the S3&K map set of maps that also show sprites.
Which reminds me that another map bites the dust*: Sandopolis 1 is done (1.74 MiB). That leaves Lava Reef (1 to 4), Hidden Palace, Sky Sanctuary, Death Egg 1 & 2 and The Doomsday (if it can be mapped at all...).
* Although I guess that 'sand' might be more appropriate than 'dust' in this case.
Here are the maps for Lava Reef 2 (1.62 MiB), Lava Reef Boss (275 KiB, done for completness) and for Hidden Palace (223 KiB). I admittedly did not take as much attention to Lava Reef 2 timed sprites simply because there are too many scattered everywhere and I got a bit lazy.
Hrm. For now, I think I will skip mapping Sky Sanctuary and go straight through to Death Egg. It turns out that those clouds are sprites, and will horribly pollute the map. Further, disabling the sprite layer they are on also disables all monitors and rings, defeating the purpose of the map. It there a way to disable those clouds? Maybe a way to edit the sprites to be totally transparent?
The maps for Death Egg 1 (592 KiB), Death Egg 2 (721 KiB) and The Doomsday (83.2 KiB) zones are done. The only map still left to do is Sky Sanctuary (technically, so is the Death Egg 2 final bosses before The Doomsday, but they have nothing interesting).
then select all three and click ok.
This makes the cloud object code into a nonconditional jump to "deleteobject"
You could also do this with a hexeditor, but since the required change is so small and only needed once, game genie makes more sense to me.
How fleeting are all human passions compared with the massive continuity of ducks.
That did it, thanks. Here is the Sky Sanctuary map, completing the map set. Monitors seem weird in this stage, and a few bits seem to be missing; maybe they are related to the Knuckles cutscene (which I didn't wait for to make the map)?
Anyways, with the maps all done, I will be resuming the run shortly.
WIP until Launch Base 1.
Comments: At the beginning, going through the bottom route after turning Super is 60 frames slower and does not net me the fire shield. Hitting the ceiling at about the time the fire shield plays is about 20 frames faster than doing it otherwise because there is no drag and the ceiling does not hamper my acceleration. The slight waits before entering the tubes are to glitch out of them sooner, of course. At about 0:26, I am too fast to go down without losing speed; I had to improvise, and found another zip that saved some time. At about 0:37, it is quite faster to slow down and go the top route because Supersonic can't double-jump into the rotating cylinder from the top route like Sonic could with the lightning shield. Towards the end, at about 1:20, collecting the 3 rings loses me about 9 frames until the boss, but I save a lot more than that because I don't have to hit the boss 3 times after reverting to normal Sonic. Moreover, there is no way Supersonic can get up on those platforms. All in all, it is exactly as fast as Nitsuja's run using Tails to kill the boss.
My gut reaction was that it probably wouldn't save any time, because of the time that the boss takes to get low enough for it, but I tried anyway. With a slightly more optimized version of the ring grabbing (saving 6 frames), it actually saves a total of 70 frames -- enough that I could grab one less ring at the end, which will save a further frame on the score tally. Moreover, I put a memory watch on the boss' Y position and determined what was the best Y position to hit him the first time and get the two hits in the fewest frames possible, so that the kill is frame-perfect.
So, thanks for the suggestion :-)
Here is the updated WIP.
WIP until end of Launch Base 2.
Comments: the fire shield was only to get to the big ring faster. Slowing down to hit that spring at 0:09 is about 60 frames (!) faster than not doing it. Grabbing the rings at 0:13 does not lose any time, as I would have to slow down for the spring at 0:14 anyway (I could grab only one of them, though). Charging the spindash at 0:19 any more or any less loses frames. At 0:20-0:22, going the bottom route is slightly slower. Hitting the spring at 0:39 is a lot slower. At 0:45-0:46, I go slightly higher to gain slightly more speed until the first boss. Just before 0:48, I glitch past the invisible wall due to sheer speed: as a result, Robotnik never shows up, leaving me to destroy his unattended machine.
WIP until end of Mushroom Hill 1. A few comments: all other routes from the first giant ring to the second are ultimately slower. Same thing from there to the third giant ring or from the third to the fourth.