Miscellaneous hacking notes

From ZeldaHacking Wiki
Jump to navigation Jump to search

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
  • Add data:
    • Add text indices to presentMapTextIndices and pastMapTextIndices
    • (optional) Add data to presentMinimapPopups.
  • 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.
  • 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.

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.