Crap… This will need even more handwork than I expected… Okay, trying to explain what is needed, step by step.
1. First, as already mentioned above, you need to have lua-gd installed
2. You need to have high quality full sized level maps. Those can be made using
Sonic Extractor. The problem is that Sonic Extractor doesn’t dump the map as a single file. Instead, it produces set of pieces. It is possible to write a script for merging them into single map, but also possible to do it manually in any graphical editor (example: GIMP)
3. You’ll need my Sega Atlas script:
https://github.com/WST/gens-atlas-tools/blob/master/atlas.lua
4. Put atlas.lua in a place like C:\sega-atlas and create subolders within that directory: C:\sega-atlas\maps and C:\sega-atlas\results
5. Put your level maps into the “maps” directory
6. Edit the function “loadMap” in the code to add the maps. X and Y offset will be zero everywhere, the last value is the default camera Y position when starting the level. It is used to align the picture when the proper camera Y position is not yet set by the game.
7. Change camera_x_address and camera_y_address to 0xFFEE78 and 0xFFEE7C (if I’m not wrong)
8. Edit the section marked as “TODO: get rid of this ugliness”. You’ll have to add more ugliness like that. These lines are quite self-explaining, and their purpose is loading the next map when certain frame is reached. You can determine the frame numbers by viewing the entire run.
9. Start the emulator, open the game’s ROM and start marzojr’s Sonic TAS Tools. Click “options” and configure the script to hide all it’s panels, plus the game’s original HUD. Ensure there is nothing wrong displayed (the “options” button itself can also be hidden). Then go to Graphics → layers → scroll A and disable the layer “scroll A low”. It will disable the background layer. Now you can rewind the movie to the starting point (let it be the movie beginning), load the atlas.lua script and start emulation. If everything is correct, the frames will be rendered into the “results” directory, otherwise you will get some error message…
If you started rendering, but noticed some mistake (forgot to disable the game’s HUD, for example), you’ll need to stop the script, delete the wrong rendered frames, return to the starting point and start the script again.
Pretty complicated, true. But now you at least see it yourself why I am more speaking than doing…
If you get any questions, post them here, I will answer.
Important notice: for some reason, sometimes the script behaves normally and consumes stable amount of RAM, but at other time it can suddenly start eating more and more. If you experience that kind of problem, you can workaround it by invoking the garbage collection manually. For example:
Language: lua
frame = frame + 1
if (frame % 100 == 0) then
collectgarbage()
end
(upd) ah… About the maps… I have only
this one, dumped it when I was creating an encode for an old TheYogWog’s run. A good illustration showing how large are the levels in this game.