Memory manufacturers and AAA game studios hate her!
With some clever rearranging, PTGB now uses only 36 KiB of the 64 KiB
BG VRAM. This means the remaining 28 KiB is free to use in the future.
Caveats: The flex tileset must not use more that 6 KiB. There is a check
for it added.
VRAM Map
06000000 - 06000800 ( 2K): Eternal backdrop and textbox tileset
06000800 - 06002000 ( 6K): Flex BG tileset
06002000 - 06002400 ( 2K): BG0: Backdrop tilemap
06002800 - 06003000 ( 2K): BG1: Flex BG tilemap
06003000 - 06003800 ( 2K): BG2: Textbox tilemap
06003800 - 06004000 ( 2K): BG3: Text tilemap
06004000 -~06009000 (20K): Text rendering bitmap
06009000 - 06010000 (28K): Free work RAM
06010000 - 06018000 (32K): Sprite tileset
Additionally:
- Explicitly clear VRAM on boot
- Dirty workaround to fix box drawing buffer overflow.
- Flex backgrounds use a table instead of a huge switch statement
- Textbox tile IDs are now const u16[] instead of int[]
To protect the world from the soft float library...
To unite all arithmetic within our binary...
To denounce the evils of floating point precision...
To save more kilobytes - that's our vision....
(god this is cringe)
All floating point math has been eliminated, and replaced with
equivalent or near-equivalent fixed-point math.
sprite_data.cpp uses Q16, and get_rand_range uses a full Q32 to
ensure that the exact same results are generated as before, at
the cost of some inline assembly to do a umull (__aeabi_lmul is a
little excessive when the lower 32 bits are discarded)
This eliminates all of the expensive double precision float library,
saving a few kilobytes.
Additionally, the unneccessary parts of nanoprintf have been
disabled. There is no need for precision specifiers, long longs, or
floats.
This greatly decreases the ROM size, from 245 KB to 198 KB with no visual
changes (that I am aware of)
Changes:
- Enable compression on every graphic but the Pokemon sprites (which are
too large for the GBA to decompress).
- Change grit from emitting .s files to .c files so GCC can strip unused
palettes and maps
- Fix the empty tiles
- Trim down the font to skip 00-1F and 80-FF which were all zeroes
- needs a slight workaround because the Pokemon name display was printing
an invisible FF byte
- Switch memcpy to tonccpy which is vram safe
- Limit palette sizes.
Signed-off-by: easyaspi314 <6258309+easyaspi314@users.noreply.github.com>