So quite recently I was looking at the tutorial for making chunks in Sonic 1 load from ROM instead of RAM, which was smart but it was only made for Green Hill Zone and nowhere else. So I came up with an idea that branched from there, what if we loaded blocks without RAM and instead loaded them from ROM? Well, let's dive in. How Much RAM Gets Freed Considering that in Sonic 1 blocks are normally loaded from LevelHeaders and then decompressed from Enigma, the estimated RAM you will be freeing is shown below. Code: v_16x16 RAM Usage = $1FFF Yeah, that's a lot of RAM freed. There's enough RAM there to import a lot of things into your hacks. Installation So first we want to decompress the blocks, firstly go ahead and grab FW-KENSC and once that's done installing then go into the folder labelled map16 and select all files in there. Now right click and decompress all the files from Enigma (if you aren't using Enigma in your hack, then use the compression you used to decompress it). Once that is complete, you should be left with *.unc files left in the folder and you can go ahead and delete the other files. Remember to go into your main assembly file (sonic.asm) and fix the pointers to the contents in map16 to point to the uncompressed ones. Now that the blocks are uncompressed, it's time to make them load! But first, we need to make sure they aren't being decompressed, so go to LevelDataLoad and get rid of this: Code: movea.l (a2)+,a0 lea (v_16x16).w,a1 ; RAM address for 16x16 mappings move.w #0,d0 bsr.w EniDec And change this above the previous code: Code: addq.l #4,a2 To this: Code: addq.l #8,a2 There, that skips the blocks from being pointlessly decompressed. Here's the part where we actually load the blocks, go to GetBlockData and replace this: Code: lea (v_16x16).w,a1 With this: Code: move.w (v_zone).w,d0 lsl.w #2,d0 ; change this to lsr.w #6,d0 if using 128x128 chunks move.l BlockList(pc,d0.w),a1 And then place this above GetBlockData: Code: BlockList: dc.l Blk16_GHZ dc.l Blk16_LZ dc.l Blk16_MZ dc.l Blk16_SLZ dc.l Blk16_SYZ dc.l Blk16_SBZ dc.l Blk16_GHZ What this does is that it loads the blocks depending on the zone, so it's not hard coded to load just in Green Hill Zone. We're almost done here, just need to do one more thing. Go to Tit_LoadText, and delete this: Code: lea (v_16x16).w,a1 lea (Blk16_GHZ).l,a0 ; load GHZ 16x16 mappings move.w #0,d0 bsr.w EniDec There! Now you can go to Variables.asm and you can completely get rid of the v_16x16 label as it is now useless. Hopefully you find this tutorial useful in your hacks, no credit is required but it would be appreciated.