pokecrystal-board/docs/develop/ram_addresses.md

3.7 KiB
Executable File

RAM addresses

  • hCurBoardEvent: holds a BOARDEVENT_ value.

  • wTurnData ~ wTurnDataEnd: not preserved on save, and cleared at the beginning of BoardMenuScript (i.e. on turn begin). It's part of wMapStatus ~ wMapStatusEnd, so it's also cleared by StartMap. Includes:

    • wDieRoll
    • wSpacesLeft
  • Addresses within wCurMapData ~ wCurMapDataEnd: preserved on save. Initialized when entering a level (in StartMap), and updated accordingly throughout the level. Includes:

    • wCurTurn
    • wCurSpace
    • wCurLevelCoins
    • wCurLevelExp
    • wCurSpaceStruct:
      • wCurSpaceXCoord
      • wCurSpaceYCoord
      • wCurSpaceEffect for non-branch spaces, or wCurSpaceBranchStructPtr (two bytes) for branch spaces
      • wCurSpaceNextSpace for non-branch spaces
  • Addresses within wPlayerData ~ wPlayerDataEnd: preserved on save. Includes:

    • wUnlockedLevels: flag array that tracks progression regarding which levels have been unlocked.
    • wClearedLevelsStage<N>: flag array that tracks progression regarding which levels have been cleared. Each level can have up to four stages (clearable endings).
    • wUnlockedTechniques: flag array that tracks progression regarding which techniques have been unlocked.
    • wCurLevel: initialized in LevelSelectionMenu (where it is also used), and stays static during the level.
    • wDefaultLevelSelectionMenuLandmark: used to know in which landmark to place the player when entering level selection menu.
    • wCurOverworldMiscPal
    • wLevelSelectionMenuEntryEventQueue: which events have to be triggered the next time the player enters the level selection menu.
  • These addresses share memory region with string buffers from wStringBuffer3 onwards. They are placed in memory in the following order.

    • wTempSpaceStruct: Temporary scope. Same structure as wCurSpaceStruct
    • wTempSpaceBranchStruct: Temporary scope. The structure is four bytes for next space for each direction (R/L/U/D; -1 if unavailable direction) followed by at least four bytes (depending on NUM_TECHNIQUES) for required techniques for each direction (R/L/U/D)
    • wViewMapModeRange, wViewMapModeDisplacementY, wViewMapModeDisplacementX: Temporary scope during a Vew Map mode session.
    • wBeforeViewMapYCoord, wBeforeViewMapXCoord, wBeforeViewMapMapGroup, wBeforeViewMapMapNumber, wBeforeViewMapDirection: Temporary scope during a Vew Map mode session. Used to preserve player state before entering View Map mode.
  • Additional addresses for View Map mode, that share memory region with wCurBattleMon and wCurMoveNum, which are not used outside of battle:

    • wPlayerMockYCoord, wPlayerMockXCoord: Used to handle the player mock sprite through map connections during View Map mode.
  • Addresses for talker events:

    • wSeenTrainer* addresses have been repurposed as wSeenTrainerOrTalker*
    • wSeenTrainerOrTalkerIsTalker: added right before wSeenTrainerOrTalker*.
    • wTempTalker ~ wTempTalkerEnd: allocated to the same address space as wTempTrainer. Same scope as wTempTrainer, but for talker events.
  • Address spaces for backing up the map state (disabled spaces and map objects). Located outside of WRAM banks 0 and 1.

    • wDisabledSpacesBackups: preserved on save to sDisabledSpacesBackups.
    • wMapObjectsBackups: preserved on save to sMapObjectsBackups.
  • wLevelSelectionMenu* addresses, union under the "Miscellaneous WRAM 1" section. Temporary scope during level selection menu, except for wLevelSelectionMenuEntryEventQueue.

  • Other WRAM 0 addresses (not preserved on save):

    • wText2bpp
    • wWhichHUD
    • wExitOverworldReason