pokecrystal-board/docs/develop/ram_addresses.md
2024-04-16 10:01:07 +02:00

4.2 KiB
Executable File

RAM addresses

  • hCurBoardEvent: holds a BOARDEVENT_ value.

  • wTurnData ~ wTurnDataEnd: turn-scoped, 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: level-scoped or turn-scoped, preserved on save. Initialized when entering a level if required (in StartMap), and updated accordingly throughout the level. Includes:

    • wCurTurn: initialized when entering a level (in StartMap)
    • wCurSpace: initialized when entering a level (in StartMap)
    • wCurLevelCoins: initialized when entering a level (in StartMap)
    • wCurLevelExp: initialized when entering a level (in StartMap)
    • wCurSpaceStruct:
      • wCurSpaceXCoord
      • wCurSpaceYCoord
      • wCurSpaceEffect for non-branch spaces, or wCurSpaceBranchStructPtr (two bytes) for branch spaces
      • wCurSpaceNextSpace for non-branch spaces
    • wCurOverworldMiscPal
  • Addresses within wPlayerData ~ wPlayerDataEnd: game-scoped (change between levels or on level start/end, but now within), 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.
    • wLevelSelectionMenuEntryEventQueue: which events have to be triggered the next time the player enters the level selection menu.
    • wLastUnlockedLevelsCount, wLastUnlockedLevels, wLastClearedLevelStage: temporary list of unlocked and cleared levels during post-level screen
  • 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 (not the case for wLevelSelectionMenuEntryEventQueue, which is in wPlayerData instead, as mentioned above).

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

    • wText2bpp
    • wWhichHUD
    • wExitOverworldReason