CutterCross
Active member
You likely already know that you can sacrifice 2 rows of 16x16 metatile-based gameplay screens on your Overworld / Underworld maps for 1 row of 8x8 tile-based detailed screens. Every 2 rows of 16x16 gameplay screens (or 1 row of 8x8 detailed screens) represents 1 bank of screen data. If you use 8x8 detailed screens for a bank, the nametable data for all the extra 16x16 gameplay screens will be gone. Except... what's all this extra data in the screen banks when viewing the ROM in Shiru's NES Space Checker?
It turns out that while the nametable data for the 16x16 gameplay screens is cleared when using 8x8 detailed screens, the collision and attribute table data for each screen is not. So each bank that uses 8x8 detailed screens has unnecessary data corresponding to screens that don't exist anymore in your project.
An easy way to free this unused data is to simply comment out the nametable, attribute table, and collision table .includes for these unused screens in your bank data. The first 8 sets of these .includes correspond to your 8x8 detailed screens, leave these uncommented. Also leave all of the labels themselves uncommented.
Here is an example for Bank $00 [Bank00.asm]:
I exclusively use 8x8 detailed screens for my current project, and getting rid of this unused data in each screen bank saves a considerable amount of ROM space! This gives me plenty of room for manually including extra nametables, routines, or more likely in my case... more CHR graphics tilesets.
Before:
After:
Hope this will be useful to users doing some more advanced things with their NESmaker projects!
It turns out that while the nametable data for the 16x16 gameplay screens is cleared when using 8x8 detailed screens, the collision and attribute table data for each screen is not. So each bank that uses 8x8 detailed screens has unnecessary data corresponding to screens that don't exist anymore in your project.
An easy way to free this unused data is to simply comment out the nametable, attribute table, and collision table .includes for these unused screens in your bank data. The first 8 sets of these .includes correspond to your 8x8 detailed screens, leave these uncommented. Also leave all of the labels themselves uncommented.
Here is an example for Bank $00 [Bank00.asm]:
Code:
NT_Rm00:
.include "ScreenData\Nametables\Screen_Over_00.nam"
Ct00:
.include "ScreenData\CollisionTables\Screen_Over_00.col"
AT_Rm00:
.include "ScreenData\AttributeTables\Screen_Over_00.att"
NT_Rm01:
.include "ScreenData\Nametables\Screen_Over_01.nam"
Ct01:
.include "ScreenData\CollisionTables\Screen_Over_01.col"
AT_Rm01:
.include "ScreenData\AttributeTables\Screen_Over_01.att"
NT_Rm02:
.include "ScreenData\Nametables\Screen_Over_02.nam"
Ct02:
.include "ScreenData\CollisionTables\Screen_Over_02.col"
AT_Rm02:
.include "ScreenData\AttributeTables\Screen_Over_02.att"
NT_Rm03:
.include "ScreenData\Nametables\Screen_Over_03.nam"
Ct03:
.include "ScreenData\CollisionTables\Screen_Over_03.col"
AT_Rm03:
.include "ScreenData\AttributeTables\Screen_Over_03.att"
NT_Rm04:
.include "ScreenData\Nametables\Screen_Over_04.nam"
Ct04:
.include "ScreenData\CollisionTables\Screen_Over_04.col"
AT_Rm04:
.include "ScreenData\AttributeTables\Screen_Over_04.att"
NT_Rm05:
.include "ScreenData\Nametables\Screen_Over_05.nam"
Ct05:
.include "ScreenData\CollisionTables\Screen_Over_05.col"
AT_Rm05:
.include "ScreenData\AttributeTables\Screen_Over_05.att"
NT_Rm06:
.include "ScreenData\Nametables\Screen_Over_06.nam"
Ct06:
.include "ScreenData\CollisionTables\Screen_Over_06.col"
AT_Rm06:
.include "ScreenData\AttributeTables\Screen_Over_06.att"
NT_Rm07:
.include "ScreenData\Nametables\Screen_Over_07.nam"
Ct07:
.include "ScreenData\CollisionTables\Screen_Over_07.col"
AT_Rm07:
.include "ScreenData\AttributeTables\Screen_Over_07.att"
NT_Rm08:
;.include "ScreenData\Nametables\Screen_Over_08.nam"
Ct08:
;.include "ScreenData\CollisionTables\Screen_Over_08.col"
AT_Rm08:
;.include "ScreenData\AttributeTables\Screen_Over_08.att"
NT_Rm09:
;.include "ScreenData\Nametables\Screen_Over_09.nam"
Ct09:
;.include "ScreenData\CollisionTables\Screen_Over_09.col"
AT_Rm09:
;.include "ScreenData\AttributeTables\Screen_Over_09.att"
NT_Rm10:
;.include "ScreenData\Nametables\Screen_Over_0A.nam"
Ct10:
;.include "ScreenData\CollisionTables\Screen_Over_0A.col"
AT_Rm10:
;.include "ScreenData\AttributeTables\Screen_Over_0A.att"
NT_Rm11:
;.include "ScreenData\Nametables\Screen_Over_0B.nam"
Ct11:
;.include "ScreenData\CollisionTables\Screen_Over_0B.col"
AT_Rm11:
;.include "ScreenData\AttributeTables\Screen_Over_0B.att"
NT_Rm12:
;.include "ScreenData\Nametables\Screen_Over_0C.nam"
Ct12:
;.include "ScreenData\CollisionTables\Screen_Over_0C.col"
AT_Rm12:
;.include "ScreenData\AttributeTables\Screen_Over_0C.att"
NT_Rm13:
;.include "ScreenData\Nametables\Screen_Over_0D.nam"
Ct13:
;.include "ScreenData\CollisionTables\Screen_Over_0D.col"
AT_Rm13:
;.include "ScreenData\AttributeTables\Screen_Over_0D.att"
NT_Rm14:
;.include "ScreenData\Nametables\Screen_Over_0E.nam"
Ct14:
;.include "ScreenData\CollisionTables\Screen_Over_0E.col"
AT_Rm14:
;.include "ScreenData\AttributeTables\Screen_Over_0E.att"
NT_Rm15:
;.include "ScreenData\Nametables\Screen_Over_0F.nam"
Ct15:
;.include "ScreenData\CollisionTables\Screen_Over_0F.col"
AT_Rm15:
;.include "ScreenData\AttributeTables\Screen_Over_0F.att"
NT_Rm16:
;.include "ScreenData\Nametables\Screen_Over_10.nam"
Ct16:
;.include "ScreenData\CollisionTables\Screen_Over_10.col"
AT_Rm16:
;.include "ScreenData\AttributeTables\Screen_Over_10.att"
NT_Rm17:
;.include "ScreenData\Nametables\Screen_Over_11.nam"
Ct17:
;.include "ScreenData\CollisionTables\Screen_Over_11.col"
AT_Rm17:
;.include "ScreenData\AttributeTables\Screen_Over_11.att"
NT_Rm18:
;.include "ScreenData\Nametables\Screen_Over_12.nam"
Ct18:
;.include "ScreenData\CollisionTables\Screen_Over_12.col"
AT_Rm18:
;.include "ScreenData\AttributeTables\Screen_Over_12.att"
NT_Rm19:
;.include "ScreenData\Nametables\Screen_Over_13.nam"
Ct19:
;.include "ScreenData\CollisionTables\Screen_Over_13.col"
AT_Rm19:
;.include "ScreenData\AttributeTables\Screen_Over_13.att"
NT_Rm20:
;.include "ScreenData\Nametables\Screen_Over_14.nam"
Ct20:
;.include "ScreenData\CollisionTables\Screen_Over_14.col"
AT_Rm20:
;.include "ScreenData\AttributeTables\Screen_Over_14.att"
NT_Rm21:
;.include "ScreenData\Nametables\Screen_Over_15.nam"
Ct21:
;.include "ScreenData\CollisionTables\Screen_Over_15.col"
AT_Rm21:
;.include "ScreenData\AttributeTables\Screen_Over_15.att"
NT_Rm22:
;.include "ScreenData\Nametables\Screen_Over_16.nam"
Ct22:
;.include "ScreenData\CollisionTables\Screen_Over_16.col"
AT_Rm22:
;.include "ScreenData\AttributeTables\Screen_Over_16.att"
NT_Rm23:
;.include "ScreenData\Nametables\Screen_Over_17.nam"
Ct23:
;.include "ScreenData\CollisionTables\Screen_Over_17.col"
AT_Rm23:
;.include "ScreenData\AttributeTables\Screen_Over_17.att"
NT_Rm24:
;.include "ScreenData\Nametables\Screen_Over_18.nam"
Ct24:
;.include "ScreenData\CollisionTables\Screen_Over_18.col"
AT_Rm24:
;.include "ScreenData\AttributeTables\Screen_Over_18.att"
NT_Rm25:
;.include "ScreenData\Nametables\Screen_Over_19.nam"
Ct25:
;.include "ScreenData\CollisionTables\Screen_Over_19.col"
AT_Rm25:
;.include "ScreenData\AttributeTables\Screen_Over_19.att"
NT_Rm26:
;.include "ScreenData\Nametables\Screen_Over_1A.nam"
Ct26:
;.include "ScreenData\CollisionTables\Screen_Over_1A.col"
AT_Rm26:
;.include "ScreenData\AttributeTables\Screen_Over_1A.att"
NT_Rm27:
;.include "ScreenData\Nametables\Screen_Over_1B.nam"
Ct27:
;.include "ScreenData\CollisionTables\Screen_Over_1B.col"
AT_Rm27:
;.include "ScreenData\AttributeTables\Screen_Over_1B.att"
NT_Rm28:
;.include "ScreenData\Nametables\Screen_Over_1C.nam"
Ct28:
;.include "ScreenData\CollisionTables\Screen_Over_1C.col"
AT_Rm28:
;.include "ScreenData\AttributeTables\Screen_Over_1C.att"
NT_Rm29:
;.include "ScreenData\Nametables\Screen_Over_1D.nam"
Ct29:
;.include "ScreenData\CollisionTables\Screen_Over_1D.col"
AT_Rm29:
;.include "ScreenData\AttributeTables\Screen_Over_1D.att"
NT_Rm30:
;.include "ScreenData\Nametables\Screen_Over_1E.nam"
Ct30:
;.include "ScreenData\CollisionTables\Screen_Over_1E.col"
AT_Rm30:
;.include "ScreenData\AttributeTables\Screen_Over_1E.att"
NT_Rm31:
;.include "ScreenData\Nametables\Screen_Over_1F.nam"
Ct31:
;.include "ScreenData\CollisionTables\Screen_Over_1F.col"
AT_Rm31:
;.include "ScreenData\AttributeTables\Screen_Over_1F.att"
I exclusively use 8x8 detailed screens for my current project, and getting rid of this unused data in each screen bank saves a considerable amount of ROM space! This gives me plenty of room for manually including extra nametables, routines, or more likely in my case... more CHR graphics tilesets.
Before:
After:
Hope this will be useful to users doing some more advanced things with their NESmaker projects!
Last edited: