Miscellaneous hacking notes
Moveable tile graphics
Pots, bushes, rocks, and any other tiles that can be pushed or lifted need to be located on the top half of the tile sheet, and all 4 subtiles need to be located next to each other. This is because they are temporarily turned into sprites when pushed or lifted; sprites can only be created properly if these limitations are followed.
Removing advance shop door (& other dynamic room changes)
The Advance Shop is a prominent example of a room with some custom code that modifies the room layout in specific situations (in this case, when playing on a GBA).
To disable this behavior, find this code (or its equivalent in Ages) and delete the contents of the function except for the "ret".
If you fail to do this, the specific room on the overworld which originally contained the advance shop will have a door appear when playing on a GBA.
You may also wish to disable:
- Other dynamic room changes in
code/{game}/roomSpecificTileChanges.s(ages/seasons) - Single-tile room changes in
data/{game}/singleTileChanges.s(ages/seasons)- Simply delete the 4-byte lines, each of which modifies a single tile in a single room under specific conditions.
Changing overworld size
The following steps aren't complete yet, but in oracles-disasm it is necessary to:
- Modify constants:
- Change the values of the OVERWORLD_WIDTH and OVERWORLD_HEIGHT constants in
constants/common/other.s(see also SUBROSIA_WIDTH/HEIGHT) - Change the values of OVERWORLD_MAP_START_X/Y to change where the tile grid starts on the map screen
- Change the values of the OVERWORLD_WIDTH and OVERWORLD_HEIGHT constants in
- Add data:
- Add text indices to
presentMapTextIndicesandpastMapTextIndices - (optional) Add data to
presentMinimapPopups.
- Add text indices to
- Modify code:
- Ages only: Modify the implementation of
mapGetRoomIndexWithoutUnusedColumns - Ages only: If using the final 2 rows of the overworld, do something about the vines, which use up past room flags. The variable "wVinePositions" is defined in terms of the past room flags; giving it a separate memory location to use may suffice.
- Ages only: Modify the implementation of
- Modify graphics:
- Modify the appearance of the map screen to account for the new tiles (no good tools exist for this yet)
- gfx_map_tiles_[present|past]_1.bin: the graphics for the tiles used (part 1)
- gfx_map_tiles_[present|past]_2.bin: the graphics for the tiles used (part 2)
- map_[past|present]_minimap.bin: the layout of the tiles.
- Modify the appearance of the map screen to account for the new tiles (no good tools exist for this yet)
Changing tree warps
In Ages, this is straightforward to edit in ZOLE, except for the tokay island tree. You can only warp there if bit 7 of the room flags in present room $ac has been set.
See the function: getWarpTreeData to change this behaviour.