Luckily I managed to figure out the how to hex-edit the actual tilemap as well as the individual 8x8 tiles making up each 16x16 tiles. Basically, the tilemap is stored in this table:
Codeorg $03D7EC
db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
db $00,$00,$15,$16,$1A,$00,$00,$00,$00,$00,$00,$15,$16,$1A,$00,$00
db $00,$00,$00,$03,$00,$00,$00,$00,$00,$00,$00,$00,$03,$00,$00,$00
db $00,$00,$00,$04,$00,$00,$00,$00,$00,$00,$00,$00,$04,$00,$00,$00
db $00,$00,$15,$16,$16,$16,$1A,$00,$00,$15,$16,$16,$16,$1A,$00,$00
db $00,$00,$00,$00,$03,$00,$00,$00,$00,$00,$00,$03,$00,$00,$00,$00
db $00,$00,$00,$00,$04,$00,$00,$00,$00,$00,$00,$04,$00,$00,$00,$00
db $00,$00,$00,$00,$04,$00,$00,$00,$00,$00,$00,$04,$00,$00,$00,$00
db $00,$00,$00,$00,$04,$00,$00,$00,$00,$00,$00,$04,$00,$00,$00,$00
db $00,$00,$00,$00,$04,$00,$00,$00,$00,$00,$00,$04,$00,$00,$00,$00
db $00,$00,$00,$00,$04,$00,$00,$00,$00,$00,$00,$04,$00,$00,$00,$00
db $00,$00,$00,$00,$04,$00,$00,$00,$00,$00,$00,$04,$00,$00,$00,$00
db $00,$00,$00,$00,$04,$00,$00,$00,$00,$00,$00,$04,$00,$00,$00,$00
db $00,$00,$00,$00,$04,$00,$00,$00,$00,$00,$00,$04,$00,$00,$00,$00
This table is a 256-byte table. Each byte corresponds to the tiles you 'place' (more like hex-edit) in the tilemap. Editing the tilemap with Smallhacker's tool is not a good idea nowadays (expect for illustrating what you edited) because otherwise there's no means to easily port your edits to a new ROM and you are forced to redo it from scratch.
Important Notes:
- You shouldn't put any interactive tiles (i.e., tiles 0x15-0x1A) anywhere above the fourth line in the table, otherwise the player will glitch to death upon touching it at certain angles.
- Make sure the player can't run at full speed from running, otherwise if he lands on the interactive tiles in this condition, he may 'skip' on the tiles, which once again could be fatal.
- Make sure to turn off sprite buoyancy, otherwise, regular sprites will sink in thin air at a certain Y-position.
- For some reason, certain sprites such as the YI eggplant sprite and d^4's
pipe spawner will not work.
- If a platform sprite is placed in the level, the player cannot stand on it properly and instead they'll randomly teleport somewhere within the arena, potentially dying. I'm guessing this is because of the Iggy platform collision code.
Now, on to the next table:
Codeorg $03D8EE
db $FF,$FF
db $FF,$FF,$24,$34
db $25,$0B,$26,$36
db $00,$10,$01,$11
db $10,$10,$11,$11
db $29,$39,$2A,$3A
db $2B,$3B,$26,$38
db $20,$30,$21,$31
db $27,$37,$28,$38
db $FF,$FF,$22,$32
db $0E,$33,$0C,$1C
db $0D,$1D,$0E,$3C
db $2D,$3D,$FF,$FF
db $07,$17,$0E,$23
db $0E,$04,$0C,$1C
db $0D,$1D,$0E,$09
db $0E,$2C,$0A,$1A
db $FF,$FF,$24,$34
db $2B,$3B,$FF,$FF
db $07,$17,$0E,$18
db $0E,$19,$0A,$1A
db $02,$12,$03,$13
db $02,$13,$03,$13
db $03,$05,$03,$14
db $03,$15,$03,$05
db $03,$05,$03,$08
db $02,$13,$0F,$1F
This table dictates the 8x8 tiles making up each 16x16 tile. The first line of the this table is actually for the blank 16x16 tile in the tilemap, and it's best not to touch that. The other lines following have 4 bytes each, corresponding to the 8x8 tiles for each 16x16 tile. Obviously, the values for the tiles correspond to their locations in GFX27, so you should open it with
Graphic Editor and check there.
Now, I already edited the tables for my needs, which should yield something like this:
The graphics are here:
https://bin.smwcentral.net/u/25222/GFX27.bin
Again, the graphics themselves are best edited with Graphics Editor. Hope I helped with this for those who are curious about this.
My Mode 0 guide.
My Discord server. It has a lot of archived ASM stuff, so check that out!