Wow it's been years.
Over a decade, in fact. No one from the old YI community seems to be here anymore, but I'll post this anyway in case anyone happens to check by and see it. (I'm sort of amazed just how far we all managed to document in the old thread from 2010-2011, by just comparing formats between the versions, and trial-and-error GBA editing/converting, without any assembly knowledge...)
---
SMA3 documentation spreadsheet
Holds most of my notes. It includes ROM/RAM maps, vanilla sublevel headers, some random IDs like game states and music, and random other notes in various stages of completion.
SMA3 disassembly
Update 2022-10-04: Now on Github, and split into more manageable code file sizes (it was formerly a single 23-million-character text file). Can be assembled with Armips.
Note: GBA assembly (ARM7TDMI processor, ARMv4 instruction set; in practice it's all Thumb code) is pretty messy and inefficient compared to older consoles such as SNES and GB. It's compiled rather than written in assembly, seemingly by a very inefficient compiler, and the ported code adds further confusion, e.g. most RAM addresses are halfwords for no reason (probably because the code worked on SNES with 16-bit addresses).
---
I've been working on documenting SMA3 for a while now, so might as well make it public?
In particular, I've been focusing on documenting how the game processes sublevel data (header, entrance bytes, objects, sprites)... this includes how the GBA handles graphics, palettes, music, layer tiles, etc., considering GBA is a distinct console with its own formats. I think a thorough documentation of the sublevel loading code is important... it'll not only help an editor display YI's complex objects and graphics, but should also allow for coding sublevel-specific overrides (unique sprite tilesets in every sublevel? Lunar-Magic-style custom palettes?) in the future.
Despite the overcomplicated vanilla code, and that existing SNES patches would need to be ported, I think hacking the GBA version should be well worth it in the long run... not only for avoiding the SuperFX ROM size limit, but for the hacking potential of GBA's higher capabilities:
- More WRAM (288 KiB, to SNES YI's ~160 KiB after accounting for its use of SRAM as WRAM... shouldn't be difficult to support more than 4 item memory settings, for example)
- More VRAM (including 8 dynamic sprite slots by default, instead of 4, and messages made of sprites so layer 3 settings won't interfere)
- Native support for sprite rotation/scaling without needing a dynamic slot
- 512-color palettes instead of 256
- Much faster processor at 16 MHz (hopefully less lag despite the inefficient compiler, and if not, there's still the potential for optimization patches)
- 4 layers by default (GBA layer 0, which seems to be only used in a few tilesets for foreground graphics, could be useful for hacks), or a mode-7-style layer with 2 normal layers (less restrictions on editing bosses like Hookbill, when they no longer displace layer 1?)
–=–=–=–=–=–=–
Advynia: a Yoshi's Island editor - Alyssa's Unlikely Trap demo 3
Over a decade, in fact. No one from the old YI community seems to be here anymore, but I'll post this anyway in case anyone happens to check by and see it. (I'm sort of amazed just how far we all managed to document in the old thread from 2010-2011, by just comparing formats between the versions, and trial-and-error GBA editing/converting, without any assembly knowledge...)
---
SMA3 documentation spreadsheet
Holds most of my notes. It includes ROM/RAM maps, vanilla sublevel headers, some random IDs like game states and music, and random other notes in various stages of completion.
SMA3 disassembly
Update 2022-10-04: Now on Github, and split into more manageable code file sizes (it was formerly a single 23-million-character text file). Can be assembled with Armips.
Note: GBA assembly (ARM7TDMI processor, ARMv4 instruction set; in practice it's all Thumb code) is pretty messy and inefficient compared to older consoles such as SNES and GB. It's compiled rather than written in assembly, seemingly by a very inefficient compiler, and the ported code adds further confusion, e.g. most RAM addresses are halfwords for no reason (probably because the code worked on SNES with 16-bit addresses).
---
I've been working on documenting SMA3 for a while now, so might as well make it public?
In particular, I've been focusing on documenting how the game processes sublevel data (header, entrance bytes, objects, sprites)... this includes how the GBA handles graphics, palettes, music, layer tiles, etc., considering GBA is a distinct console with its own formats. I think a thorough documentation of the sublevel loading code is important... it'll not only help an editor display YI's complex objects and graphics, but should also allow for coding sublevel-specific overrides (unique sprite tilesets in every sublevel? Lunar-Magic-style custom palettes?) in the future.
Despite the overcomplicated vanilla code, and that existing SNES patches would need to be ported, I think hacking the GBA version should be well worth it in the long run... not only for avoiding the SuperFX ROM size limit, but for the hacking potential of GBA's higher capabilities:
- More WRAM (288 KiB, to SNES YI's ~160 KiB after accounting for its use of SRAM as WRAM... shouldn't be difficult to support more than 4 item memory settings, for example)
- More VRAM (including 8 dynamic sprite slots by default, instead of 4, and messages made of sprites so layer 3 settings won't interfere)
- Native support for sprite rotation/scaling without needing a dynamic slot
- 512-color palettes instead of 256
- Much faster processor at 16 MHz (hopefully less lag despite the inefficient compiler, and if not, there's still the potential for optimization patches)
- 4 layers by default (GBA layer 0, which seems to be only used in a few tilesets for foreground graphics, could be useful for hacks), or a mode-7-style layer with 2 normal layers (less restrictions on editing bosses like Hookbill, when they no longer displace layer 1?)
–=–=–=–=–=–=–
Advynia: a Yoshi's Island editor - Alyssa's Unlikely Trap demo 3