pokered/ram/wram.asm

2325 lines
58 KiB
NASM
Raw Normal View History

2021-05-31 21:17:03 +00:00
SECTION "Audio RAM", WRAM0
2021-05-31 15:46:10 +00:00
wUnusedC000:: db
2015-08-09 05:32:44 +00:00
2021-05-31 15:46:10 +00:00
wSoundID:: db
2015-08-09 05:32:44 +00:00
; bit 7: whether sound has been muted
; all bits: whether the effective is active
; Store 1 to activate effect (any value in the range [1, 127] works).
; All audio is muted and music is paused. Sfx continues playing until it
; ends normally.
; Store 0 to resume music.
wMuteAudioAndPauseMusic:: db
2015-08-09 05:32:44 +00:00
2021-05-31 15:46:10 +00:00
wDisableChannelOutputWhenSfxEnds:: db
2015-08-09 05:32:44 +00:00
2021-05-31 15:46:10 +00:00
wStereoPanning:: db
2015-08-09 05:32:44 +00:00
2021-05-31 15:46:10 +00:00
wSavedVolume:: db
2015-08-09 05:32:44 +00:00
wChannelCommandPointers:: ds NUM_CHANNELS * 2
wChannelReturnAddresses:: ds NUM_CHANNELS * 2
2015-08-09 05:32:44 +00:00
wChannelSoundIDs:: ds NUM_CHANNELS
2015-08-09 05:32:44 +00:00
wChannelFlags1:: ds NUM_CHANNELS
wChannelFlags2:: ds NUM_CHANNELS
wChannelDutyCycles:: ds NUM_CHANNELS
wChannelDutyCyclePatterns:: ds NUM_CHANNELS
2015-08-09 05:32:44 +00:00
; reloaded at the beginning of a note. counts down until the vibrato begins.
wChannelVibratoDelayCounters:: ds NUM_CHANNELS
wChannelVibratoExtents:: ds NUM_CHANNELS
2015-08-09 05:32:44 +00:00
; high nybble is rate (counter reload value) and low nybble is counter.
; time between applications of vibrato.
wChannelVibratoRates:: ds NUM_CHANNELS
wChannelFrequencyLowBytes:: ds NUM_CHANNELS
2015-08-09 05:32:44 +00:00
; delay of the beginning of the vibrato from the start of the note
wChannelVibratoDelayCounterReloadValues:: ds NUM_CHANNELS
wChannelPitchSlideLengthModifiers:: ds NUM_CHANNELS
wChannelPitchSlideFrequencySteps:: ds NUM_CHANNELS
wChannelPitchSlideFrequencyStepsFractionalPart:: ds NUM_CHANNELS
wChannelPitchSlideCurrentFrequencyFractionalPart:: ds NUM_CHANNELS
wChannelPitchSlideCurrentFrequencyHighBytes:: ds NUM_CHANNELS
wChannelPitchSlideCurrentFrequencyLowBytes:: ds NUM_CHANNELS
wChannelPitchSlideTargetFrequencyHighBytes:: ds NUM_CHANNELS
wChannelPitchSlideTargetFrequencyLowBytes:: ds NUM_CHANNELS
2015-08-09 05:32:44 +00:00
; Note delays are stored as 16-bit fixed-point numbers where the integer part
; is 8 bits and the fractional part is 8 bits.
wChannelNoteDelayCounters:: ds NUM_CHANNELS
wChannelLoopCounters:: ds NUM_CHANNELS
wChannelNoteSpeeds:: ds NUM_CHANNELS
wChannelNoteDelayCountersFractionalPart:: ds NUM_CHANNELS
wChannelOctaves:: ds NUM_CHANNELS
2015-08-09 05:32:44 +00:00
; also includes fade for hardware channels that support it
wChannelVolumes:: ds NUM_CHANNELS
2015-08-09 05:32:44 +00:00
2021-05-31 15:46:10 +00:00
wMusicWaveInstrument:: db
wSfxWaveInstrument:: db
wMusicTempo:: dw
wSfxTempo:: dw
wSfxHeaderPointer:: dw
2015-08-09 05:32:44 +00:00
2021-05-31 15:46:10 +00:00
wNewSoundID:: db
2015-08-09 05:32:44 +00:00
2021-05-31 15:46:10 +00:00
wAudioROMBank:: db
wAudioSavedROMBank:: db
2015-08-09 05:32:44 +00:00
2021-05-31 15:46:10 +00:00
wFrequencyModifier:: db
wTempoModifier:: db
2015-08-09 05:32:44 +00:00
ds 13
2018-11-18 23:29:24 +00:00
SECTION "Sprite State Data", WRAM0
wSpriteDataStart::
; data for all sprites on the current map
; holds info for 16 sprites with $10 bytes each
wSpriteStateData1::
; struct fields:
; - 0: picture ID (fixed, loaded at map init)
; - 1: movement status (0: uninitialized, 1: ready, 2: delayed, 3: moving)
; - 2: sprite image index (changed on update, $ff if off screen, includes facing direction, progress in walking animation and a sprite-specific offset)
; - 3: Y screen position delta (-1,0 or 1; added to Y pixels on each walking animation update)
; - 4: Y screen position (in pixels, always 4 pixels above grid which makes sprites appear to be in the center of a tile)
; - 5: X screen position delta (-1,0 or 1; added to field X pixels on each walking animation update)
; - 6: X screen position (in pixels, snaps to grid if not currently walking)
; - 7: intra-animation-frame counter (counting upwards to 4 until animation frame counter is incremented)
; - 8: animation frame counter (increased every 4 updates, hold four states (totalling to 16 walking frames)
; - 9: facing direction ($0: down, $4: up, $8: left, $c: right)
; - A: adjusted Y coordinate
; - B: adjusted X coordinate
; - C: direction of collision
; - D
; - E
; - F
wSpritePlayerStateData1:: spritestatedata1 wSpritePlayerStateData1 ; player is struct 0
; wSprite01StateData1 - wSprite15StateData1
2021-05-31 15:46:10 +00:00
FOR n, 1, NUM_SPRITESTATEDATA_STRUCTS
wSprite{02d:n}StateData1:: spritestatedata1 wSprite{02d:n}StateData1
2021-05-31 15:46:10 +00:00
ENDR
; more data for all sprites on the current map
; holds info for 16 sprites with $10 bytes each
wSpriteStateData2::
; struct fields:
; - 0: walk animation counter (counting from $10 backwards when moving)
; - 1:
; - 2: Y displacement (initialized at 8, supposed to keep moving sprites from moving too far, but bugged)
; - 3: X displacement (initialized at 8, supposed to keep moving sprites from moving too far, but bugged)
; - 4: Y position (in 2x2 tile grid steps, topmost 2x2 tile has value 4)
; - 5: X position (in 2x2 tile grid steps, leftmost 2x2 tile has value 4)
; - 6: movement byte 1 (determines whether a sprite can move, $ff:not moving, $fe:random movements, others unknown)
; - 7: (?) (set to $80 when in grass, else $0; may be used to draw grass above the sprite)
; - 8: delay until next movement (counted downwards, movement status is set to ready if reached 0)
; - 9: original facing direction (backed up by DisplayTextIDInit, restored by CloseTextDisplay)
; - A
; - B
; - C
; - D: picture ID
; - E: sprite image base offset (in video ram, player always has value 1, used to compute sprite image index)
; - F
wSpritePlayerStateData2:: spritestatedata2 wSpritePlayerStateData2 ; player is struct 0
; wSprite01StateData2 - wSprite15StateData2
2021-05-31 15:46:10 +00:00
FOR n, 1, NUM_SPRITESTATEDATA_STRUCTS
wSprite{02d:n}StateData2:: spritestatedata2 wSprite{02d:n}StateData2
2021-05-31 15:46:10 +00:00
ENDR
; The high byte of a pointer to anywhere within wSpriteStateData1 can be incremented
; to reach within wSpriteStateData2, and vice-versa for decrementing.
2021-05-31 15:46:10 +00:00
ASSERT HIGH(wSpriteStateData1) + 1 == HIGH(wSpriteStateData2)
ASSERT LOW(wSpriteStateData1) == 0 && LOW(wSpriteStateData2) == 0
wSpriteDataEnd::
2018-11-18 23:29:24 +00:00
SECTION "OAM Buffer", WRAM0
; buffer for OAM data. Copied to OAM by DMA
2022-07-09 21:18:18 +00:00
wShadowOAM::
; wShadowOAMSprite00 - wShadowOAMSprite39
2021-05-31 15:46:10 +00:00
FOR n, NUM_SPRITE_OAM_STRUCTS
2022-07-09 21:18:18 +00:00
wShadowOAMSprite{02d:n}:: sprite_oam_struct wShadowOAMSprite{02d:n}
2021-05-31 15:46:10 +00:00
ENDR
2022-07-09 21:18:18 +00:00
wShadowOAMEnd::
2021-05-31 21:17:03 +00:00
SECTION "Tilemap", WRAM0
; buffer for tiles that are visible on screen (20 columns by 18 rows)
wTileMap:: ds SCREEN_WIDTH * SCREEN_HEIGHT
2015-02-07 10:43:08 +00:00
2020-11-05 21:55:39 +00:00
UNION
; buffer for temporarily saving and restoring current screen's tiles
; (e.g. if menus are drawn on top)
wTileMapBackup:: ds SCREEN_WIDTH * SCREEN_HEIGHT
2015-02-07 10:43:08 +00:00
2020-11-05 21:55:39 +00:00
NEXTU
; list of indexes to patch with SERIAL_NO_DATA_BYTE after transfer
wSerialPartyMonsPatchList:: ds 200
2015-02-07 10:43:08 +00:00
; list of indexes to patch with SERIAL_NO_DATA_BYTE after transfer
wSerialEnemyMonsPatchList:: ds 200
2020-11-05 21:55:39 +00:00
ENDU
2015-02-07 10:43:08 +00:00
ds 80
2021-05-31 21:17:03 +00:00
SECTION "Overworld Map", WRAM0
2020-11-05 21:55:39 +00:00
UNION
wOverworldMap:: ds 1300
wOverworldMapEnd::
2020-11-05 21:55:39 +00:00
NEXTU
wTempPic:: ds 7 * 7 tiles
2020-11-05 21:55:39 +00:00
ENDU
2021-05-31 21:17:03 +00:00
SECTION "WRAM", WRAM0
; the tiles of the row or column to be redrawn by RedrawRowOrColumn
wRedrawRowOrColumnSrcTiles:: ds SCREEN_WIDTH * 2
; coordinates of the position of the cursor for the top menu item (id 0)
2021-05-31 15:46:10 +00:00
wTopMenuItemY:: db
wTopMenuItemX:: db
; the id of the currently selected menu item
; the top item has id 0, the one below that has id 1, etc.
; note that the "top item" means the top item currently visible on the screen
; add this value to [wListScrollOffset] to get the item's position within the list
wCurrentMenuItem:: db
; the tile that was behind the menu cursor's current location
wTileBehindCursor:: db
; id of the bottom menu item
wMaxMenuItem:: db
; bit mask of keys that the menu will respond to
wMenuWatchedKeys:: db
; id of previously selected menu item
wLastMenuItem:: db
2015-07-16 03:04:58 +00:00
; It is mainly used by the party menu to remember the cursor position while the
; menu isn't active.
; It is also used to remember the cursor position of mon lists (for the
; withdraw/deposit/release actions) in Bill's PC so that it doesn't get lost
; when you choose a mon from the list and a sub-menu is shown. It's reset when
; you return to the main Bill's PC menu.
wPartyAndBillsPCSavedMenuItem:: db
2015-07-16 03:04:58 +00:00
; It is used by the bag list to remember the cursor position while the menu
; isn't active.
wBagSavedMenuItem:: db
2015-07-16 03:04:58 +00:00
; It is used by the start menu to remember the cursor position while the menu
; isn't active.
; The battle menu uses it so that the cursor position doesn't get lost when
; a sub-menu is shown. It's reset at the start of each battle.
wBattleAndStartSavedMenuItem:: db
2021-05-31 15:46:10 +00:00
wPlayerMoveListIndex:: db
2015-07-16 03:04:58 +00:00
; index in party of currently battling mon
wPlayerMonNumber:: db
; the address of the menu cursor's current location within wTileMap
wMenuCursorLocation:: dw
ds 2
; how many times should HandleMenuInput poll the joypad state before it returns?
wMenuJoypadPollCount:: db
2014-08-09 05:39:13 +00:00
; id of menu item selected for swapping (counts from 1) (0 means that no menu item has been selected for swapping)
wMenuItemToSwap:: db
; offset of the current top menu item from the beginning of the list
; keeps track of what section of the list is on screen
wListScrollOffset:: db
2015-07-13 07:32:03 +00:00
; If non-zero, then when wrapping is disabled and the player tries to go past
; the top or bottom of the menu, return from HandleMenuInput. This is useful for
; menus that have too many items to display at once on the screen because it
; allows the caller to scroll the entire menu up or down when this happens.
wMenuWatchMovingOutOfBounds:: db
2015-02-07 10:43:08 +00:00
2021-05-31 15:46:10 +00:00
wTradeCenterPointerTableIndex:: db
2015-02-07 10:43:08 +00:00
ds 1
2016-09-11 09:01:37 +00:00
; destination pointer for text output
; this variable is written to, but is never read from
wTextDest:: dw
2014-09-13 07:50:56 +00:00
; if non-zero, skip waiting for a button press after displaying text in DisplayTextID
wDoNotWaitForButtonPressAfterDisplayingText:: db
2014-09-13 07:50:56 +00:00
UNION
; the received menu selection is stored twice
wLinkMenuSelectionReceiveBuffer:: dw
ds 3
; the menu selection byte is stored twice before sending
wLinkMenuSelectionSendBuffer:: dw
ds 3
wEnteringCableClub::
wLinkTimeoutCounter:: db
2015-02-07 10:43:08 +00:00
NEXTU
2015-02-07 10:43:08 +00:00
; temporary nybble used by Serial_ExchangeNybble
wSerialExchangeNybbleTempReceiveData::
; the final received nybble is stored here by Serial_SyncAndExchangeNybble
wSerialSyncAndExchangeNybbleReceiveData:: db
2015-02-07 10:43:08 +00:00
; the final received nybble is stored here by Serial_ExchangeNybble
wSerialExchangeNybbleReceiveData:: db
2015-02-07 10:43:08 +00:00
ds 3
; this nybble is sent when using Serial_SyncAndExchangeNybble or Serial_ExchangeNybble
wSerialExchangeNybbleSendData:: db
ds 4
wUnknownSerialCounter:: dw
ENDU
2015-02-07 10:43:08 +00:00
; $00 = player mons
; $01 = enemy mons
wWhichTradeMonSelectionMenu::
2015-07-16 03:04:58 +00:00
; 0 = player's party
; 1 = enemy party
; 2 = current box
; 3 = daycare
; 4 = in-battle mon
;
; AddPartyMon uses it slightly differently.
; If the lower nybble is 0, the mon is added to the player's party, else the enemy's.
; If the entire value is 0, then the player is allowed to name the mon.
wMonDataLocation:: db
; set to 1 if you can go from the bottom to the top or top to bottom of a menu
; set to 0 if you can't go past the top or bottom of the menu
wMenuWrappingEnabled:: db
2015-07-25 03:27:59 +00:00
; whether to check for 180-degree turn (0 = don't, 1 = do)
wCheckFor180DegreeTurn:: db
2015-07-25 03:27:59 +00:00
ds 1
2021-05-31 15:46:10 +00:00
wMissableObjectIndex:: db
2021-05-31 15:46:10 +00:00
wPredefID:: db
wPredefHL:: dw
wPredefDE:: dw
wPredefBC:: dw
2021-05-31 15:46:10 +00:00
wTrainerHeaderFlagBit:: db
ds 1
; which NPC movement script pointer is being used
; 0 if an NPC movement script is not running
wNPCMovementScriptPointerTableNum:: db
; ROM bank of current NPC movement script
wNPCMovementScriptBank:: db
ds 2
; This union spans 180 bytes.
UNION
wVermilionDockTileMapBuffer:: ds 5 * BG_MAP_WIDTH + SCREEN_WIDTH
wVermilionDockTileMapBufferEnd::
2015-08-13 05:14:31 +00:00
NEXTU
wOaksAideRewardItemName:: ds ITEM_NAME_LENGTH
2015-08-13 05:14:31 +00:00
NEXTU
wElevatorWarpMaps:: ds 11 * 2
2015-08-13 05:14:31 +00:00
NEXTU
2015-08-13 05:14:31 +00:00
; List of bag items that has been filtered to a certain type of items,
; such as drinks or fossils.
wFilteredBagItems:: ds 4
2015-08-13 05:14:31 +00:00
NEXTU
2015-08-13 05:14:31 +00:00
; Saved copy of OAM for the first frame of the animation to make it easy to
; flip back from the second frame.
wMonPartySpritesSavedOAM:: ds $60
2015-08-13 05:14:31 +00:00
NEXTU
wTrainerCardBlkPacket:: ds $40
2015-08-12 09:16:56 +00:00
NEXTU
wHallOfFame:: ds HOF_TEAM
NEXTU
wNPCMovementDirections:: ds 180
NEXTU
wDexRatingNumMonsSeen:: db
wDexRatingNumMonsOwned:: db
wDexRatingText:: db
NEXTU
2015-07-13 20:35:35 +00:00
; If a random number greater than this value is generated, then the player is
; allowed to have three 7 symbols or bar symbols line up.
; So, this value is actually the chance of NOT entering that mode.
; If the slot is lucky, it equals 250, giving a 5/256 (~2%) chance.
; Otherwise, it equals 253, giving a 2/256 (~0.8%) chance.
wSlotMachineSevenAndBarModeChance:: db
ds 2
2015-07-13 20:35:35 +00:00
; ROM back to return to when the player is done with the slot machine
wSlotMachineSavedROMBank:: db
ds 166
wLuckySlotHiddenObjectIndex:: db
2015-07-13 20:35:35 +00:00
NEXTU
; values between 0-6. Shake screen horizontally, shake screen vertically, blink Pokemon...
wAnimationType:: db
2015-07-24 21:39:45 +00:00
ds 29
wAnimPalette:: db
2020-11-05 21:55:39 +00:00
NEXTU
ds 60
; temporary buffer when swapping party mon data
wSwitchPartyMonTempBuffer:: ds 44 ; party_struct size
NEXTU
ds 120
; this is the end of the joypad states
; the list starts above this address and extends downwards in memory until here
; overloaded with below labels
wSimulatedJoypadStatesEnd::
NEXTU
wBoostExpByExpAll::
wUnusedCC5B:: db
ds 59
wNPCMovementDirections2:: ds 10
; used in Pallet Town scripted movement
wNumStepsToTake:: db
ds 48
wRLEByteCount:: db
2020-06-28 03:03:39 +00:00
wParentMenuItem::
; 0 = not added
; 1 = added
wAddedToParty::
2015-07-19 03:49:52 +00:00
; 1 flag for each party member indicating whether it can evolve
; The purpose of these flags is to track which mons levelled up during the
; current battle at the end of the battle when evolution occurs.
; Other methods of evolution simply set it by calling TryEvolvingMon.
2023-07-15 22:36:59 +00:00
wMiscBattleData::
wCanEvolveFlags:: db
2015-07-19 03:49:52 +00:00
2021-05-31 15:46:10 +00:00
wForceEvolution:: db
2015-03-31 18:40:22 +00:00
2020-06-28 03:03:39 +00:00
; if [wAILayer2Encouragement] != 1, the second AI layer is not applied
2021-05-31 15:46:10 +00:00
wAILayer2Encouragement:: db
2015-03-31 18:40:22 +00:00
ds 1
; current HP of player and enemy substitutes
2021-05-31 15:46:10 +00:00
wPlayerSubstituteHP:: db
wEnemySubstituteHP:: db
2023-07-15 22:36:59 +00:00
; used for TestBattle (unused in non-debug builds)
wTestBattlePlayerSelectedMove:: db
2015-08-14 02:13:47 +00:00
ds 1
; 0=regular, 1=mimic, 2=above message box (relearn, heal pp..)
wMoveMenuType:: db
2021-05-31 15:46:10 +00:00
wPlayerSelectedMove:: db
wEnemySelectedMove:: db
2021-05-31 15:46:10 +00:00
wLinkBattleRandomNumberListIndex:: db
; number of times remaining that AI action can occur
wAICount:: db
ds 2
2021-05-31 15:46:10 +00:00
wEnemyMoveListIndex:: db
2015-07-24 03:48:35 +00:00
; The enemy mon's HP when it was switched in or when the current player mon
; was switched in, which was more recent.
; It's used to determine the message to print when switching out the player mon.
wLastSwitchInEnemyMonHP:: dw
2014-08-09 05:39:13 +00:00
; total amount of money made using Pay Day during the current battle
wTotalPayDayMoney:: ds 3
2014-08-09 05:39:13 +00:00
2021-05-31 15:46:10 +00:00
wSafariEscapeFactor:: db
wSafariBaitFactor:: db
2014-08-09 05:39:13 +00:00
ds 1
2021-05-31 15:46:10 +00:00
wTransformedEnemyMonOriginalDVs:: dw
wMonIsDisobedient:: db
wPlayerDisabledMoveNumber:: db
wEnemyDisabledMoveNumber:: db
2015-08-14 07:36:06 +00:00
; When running in the scope of HandlePlayerMonFainted, it equals 1.
; When running in the scope of HandleEnemyMonFainted, it equals 0.
wInHandlePlayerMonFainted:: db
wPlayerUsedMove:: db
wEnemyUsedMove:: db
wEnemyMonMinimized:: db
2014-08-09 05:39:13 +00:00
wMoveDidntMiss:: db
2014-08-09 05:39:13 +00:00
; flags that indicate which party members have fought the current enemy mon
wPartyFoughtCurrentEnemyFlags:: flag_array PARTY_LENGTH
2014-08-09 05:39:13 +00:00
2015-08-14 07:36:06 +00:00
; Whether the low health alarm has been disabled due to the player winning the
; battle.
wLowHealthAlarmDisabled:: db
2015-08-14 07:36:06 +00:00
2021-05-31 15:46:10 +00:00
wPlayerMonMinimized:: db
2015-07-12 22:51:04 +00:00
ds 13
2014-08-09 05:39:13 +00:00
2015-02-07 10:43:08 +00:00
; number of hits by enemy in attacks like Double Slap, etc.
wEnemyNumHits:: ; db
; the amount of damage accumulated by the enemy while biding
wEnemyBideAccumulatedDamage:: dw
2015-02-07 10:43:08 +00:00
ds 8
2023-07-15 22:36:59 +00:00
wMiscBattleDataEnd::
ENDU
2015-02-07 10:43:08 +00:00
; This union spans 39 bytes.
UNION
wInGameTradeGiveMonSpecies:: db
wInGameTradeTextPointerTablePointer:: dw
wInGameTradeTextPointerTableIndex:: db
wInGameTradeGiveMonName:: ds NAME_LENGTH
wInGameTradeReceiveMonName:: ds NAME_LENGTH
wInGameTradeMonNick:: ds NAME_LENGTH
wInGameTradeReceiveMonSpecies:: db
2015-02-07 10:43:08 +00:00
NEXTU
wPlayerMonUnmodifiedLevel:: db
2021-05-31 15:46:10 +00:00
wPlayerMonUnmodifiedMaxHP:: dw
wPlayerMonUnmodifiedAttack:: dw
2021-05-31 15:46:10 +00:00
wPlayerMonUnmodifiedDefense:: dw
wPlayerMonUnmodifiedSpeed:: dw
wPlayerMonUnmodifiedSpecial:: dw
; stat modifiers for the player's current pokemon
; value can range from 1 - 13 ($1 to $D)
; 7 is normal
wPlayerMonStatMods::
2021-05-31 15:46:10 +00:00
wPlayerMonAttackMod:: db
wPlayerMonDefenseMod:: db
wPlayerMonSpeedMod:: db
wPlayerMonSpecialMod:: db
wPlayerMonAccuracyMod:: db
wPlayerMonEvasionMod:: db
ds 2
wPlayerMonStatModsEnd::
ds 1
2021-05-31 15:46:10 +00:00
wEnemyMonUnmodifiedLevel:: db
wEnemyMonUnmodifiedMaxHP:: dw
wEnemyMonUnmodifiedAttack:: dw
wEnemyMonUnmodifiedDefense:: dw
2021-05-31 15:46:10 +00:00
wEnemyMonUnmodifiedSpeed:: dw
wEnemyMonUnmodifiedSpecial:: dw
; stat modifiers for the enemy's current pokemon
; value can range from 1 - 13 ($1 to $D)
; 7 is normal
wEnemyMonStatMods::
2021-05-31 15:46:10 +00:00
wEnemyMonAttackMod:: db
wEnemyMonDefenseMod:: db
wEnemyMonSpeedMod:: db
wEnemyMonSpecialMod:: db
wEnemyMonAccuracyMod:: db
wEnemyMonEvasionMod:: db
ds 2
wEnemyMonStatModsEnd::
NEXTU
ds 30
wEngagedTrainerClass:: db
wEngagedTrainerSet:: db
ENDU
ds 1
2020-06-28 03:03:39 +00:00
wNPCMovementDirections2Index::
wUnusedCD37::
2015-08-13 05:14:31 +00:00
; number of items in wFilteredBagItems list
wFilteredBagItemsCount:: db
; the next simulated joypad state is at wSimulatedJoypadStatesEnd plus this value minus 1
; 0 if the joypad state is not being simulated
wSimulatedJoypadStatesIndex:: db
; written to but nothing ever reads it
wUnusedCD39:: db
; written to but nothing ever reads it
wUnusedCD3A:: db
; mask indicating which real button presses can override simulated ones
; XXX is it ever not 0?
wOverrideSimulatedJoypadStatesMask:: db
ds 1
; This union spans 30 bytes.
UNION
wTradedPlayerMonSpecies:: db
wTradedEnemyMonSpecies:: db
ds 2
wTradedPlayerMonOT:: ds NAME_LENGTH
wTradedPlayerMonOTID:: dw
wTradedEnemyMonOT:: ds NAME_LENGTH
wTradedEnemyMonOTID:: dw
NEXTU
wTradingWhichPlayerMon:: db
wTradingWhichEnemyMon:: db
wNameOfPlayerMonToBeTraded:: ds NAME_LENGTH
NEXTU
; one byte for each falling object
wFallingObjectsMovementData:: ds 20
2015-07-24 21:39:45 +00:00
NEXTU
; array of the number of mons in each box
wBoxMonCounts:: ds NUM_BOXES
2015-07-24 21:39:45 +00:00
NEXTU
wPriceTemp:: ds 3 ; BCD
NEXTU
; the current mon's field moves
wFieldMoves:: ds NUM_MOVES
wNumFieldMoves:: db
wFieldMovesLeftmostXCoord:: db
wLastFieldMoveID:: db ; unused
2015-07-24 21:39:45 +00:00
NEXTU
wBoxNumString:: ds 3
NEXTU
2015-07-23 13:07:12 +00:00
; 0 = upper half (Y < 9)
; 1 = lower half (Y >= 9)
wBattleTransitionCircleScreenQuadrantY:: db
wBattleTransitionCircleScreenQuadrantX:: db
NEXTU
2015-07-23 13:07:12 +00:00
; after 1 row/column has been copied, the offset to the next one to copy from
wBattleTransitionCopyTilesOffset:: dw
NEXTU
2015-07-23 13:07:12 +00:00
; counts down from 7 so that every time 7 more tiles of the spiral have been
; placed, the tile map buffer is copied to VRAM so that progress is visible
wInwardSpiralUpdateScreenCounter:: db
ds 9
; 0 = outward, 1 = inward
wBattleTransitionSpiralDirection:: db
2014-09-13 07:50:56 +00:00
NEXTU
; multiplied by 16 to get the number of times to go right by 2 pixels
wSSAnneSmokeDriftAmount:: db
2015-07-23 13:07:12 +00:00
; 0 = left half (X < 10)
; 1 = right half (X >= 10)
wSSAnneSmokeX:: db
2014-09-14 18:29:18 +00:00
NEXTU
wHoFMonSpecies::
wHoFTeamIndex:: db
wHoFPartyMonIndex:: db
wHoFMonLevel:: db
; 0 = mon, 1 = player
wHoFMonOrPlayer:: db
wHoFTeamIndex2:: db
wHoFTeamNo:: db
2014-09-13 07:50:56 +00:00
NEXTU
wRivalStarterTemp:: db
wRivalStarterBallSpriteIndex:: db
2015-07-23 13:07:12 +00:00
NEXTU
wFlyAnimUsingCoordList:: db
; $ff sentinel values at each end
wFlyLocationsList:: ds NUM_CITY_MAPS + 2
2014-09-13 07:50:56 +00:00
NEXTU
wWhichTownMapLocation:: db
wFlyAnimCounter:: db
wFlyAnimBirdSpriteImageIndex:: db
2015-07-23 13:07:12 +00:00
NEXTU
ds 1
; difference in X between the next ball and the current one
wHUDPokeballGfxOffsetX:: db
wHUDGraphicsTiles:: ds 3
2014-09-14 18:29:18 +00:00
NEXTU
; the level of the mon at the time it entered day care
wDayCareStartLevel:: db
wDayCareNumLevelsGrown:: db
wDayCareTotalCost:: dw ; BCD
wDayCarePerLevelCost:: dw ; BCD (always $100)
2015-07-23 13:07:12 +00:00
NEXTU
; which wheel the player is trying to stop
; 0 = none, 1 = wheel 1, 2 = wheel 2, 3 or greater = wheel 3
wStoppingWhichSlotMachineWheel:: db
wSlotMachineWheel1Offset:: db
wSlotMachineWheel2Offset:: db
wSlotMachineWheel3Offset:: db
2015-07-13 20:35:35 +00:00
; the OAM tile number of the upper left corner of the winning symbol minus 2
wSlotMachineWinningSymbol::
wSlotMachineWheel1BottomTile:: db
wSlotMachineWheel1MiddleTile:: db
wSlotMachineWheel1TopTile:: db
2021-05-31 15:46:10 +00:00
wSlotMachineWheel2BottomTile:: db
wSlotMachineWheel2MiddleTile:: db
wSlotMachineWheel2TopTile:: db
wSlotMachineWheel3BottomTile:: db
wSlotMachineWheel3MiddleTile:: db
wSlotMachineWheel3TopTile:: db
wPayoutCoins:: dw
2015-07-13 20:35:35 +00:00
; These flags are set randomly and control when the wheels stop.
; bit 6: allow the player to win in general
; bit 7: allow the player to win with 7 or bar (plus the effect of bit 6)
wSlotMachineFlags:: db
2015-07-13 20:35:35 +00:00
; wheel 1 can "slip" while this is non-zero
wSlotMachineWheel1SlipCounter:: db
; wheel 2 can "slip" while this is non-zero
wSlotMachineWheel2SlipCounter:: db
2015-07-13 20:35:35 +00:00
; The remaining number of times wheel 3 will roll down a symbol until a match is
; found, when winning is enabled. It's initialized to 4 each bet.
wSlotMachineRerollCounter:: db
2015-07-13 20:35:35 +00:00
; how many coins the player bet on the slot machine (1 to 3)
wSlotMachineBet:: db
NEXTU
wCanPlaySlots:: db
ds 8
; temporary variable used to add payout amount to the player's coins
wTempCoins1:: dw
ds 2
; temporary variable used to subtract the bet amount from the player's coins
wTempCoins2:: dw
NEXTU
wHiddenObjectFunctionArgument:: db
wHiddenObjectFunctionRomBank:: db
wHiddenObjectIndex:: db
wHiddenObjectY:: db
wHiddenItemOrCoinsIndex::
wHiddenObjectX:: db
NEXTU
wPlayerSpinInPlaceAnimFrameDelay:: db
wPlayerSpinInPlaceAnimFrameDelayDelta:: db
wPlayerSpinInPlaceAnimFrameDelayEndValue:: db
wPlayerSpinInPlaceAnimSoundID:: db
ds 6
db ; temporary space used when wFacingDirectionList is rotated
; used when spinning the player's sprite
wFacingDirectionList:: ds 4
ds 3
wSavedPlayerScreenY:: db
wSavedPlayerFacingDirection:: db
NEXTU
wPlayerSpinWhileMovingUpOrDownAnimDeltaY:: db
wPlayerSpinWhileMovingUpOrDownAnimMaxY:: db
wPlayerSpinWhileMovingUpOrDownAnimFrameDelay:: db
NEXTU
wTrainerSpriteOffset:: db
wTrainerEngageDistance:: db
wTrainerFacingDirection:: db
wTrainerScreenY:: db
wTrainerScreenX:: db
NEXTU
wTrainerInfoTextBoxWidthPlus1:: db
wTrainerInfoTextBoxWidth:: db
wTrainerInfoTextBoxNextRowOffset:: db
NEXTU
wOptionsTextSpeedCursorX:: db
wOptionsBattleAnimCursorX:: db
wOptionsBattleStyleCursorX:: db
wOptionsCancelCursorX:: db
NEXTU
; tile ID of the badge number being drawn
wBadgeNumberTile:: db
; first tile ID of the name being drawn
wBadgeNameTile:: db
; a list of the first tile IDs of each badge or face (depending on whether the
; badge is owned) to be drawn on the trainer screen
; the byte after the list gets read when shifting back one byte
wBadgeOrFaceTiles:: ds NUM_BADGES + 1
ds 1
; temporary list created when displaying the badges on the trainer screen
; one byte for each badge; 0 = not obtained, 1 = obtained
wTempObtainedBadgesBooleans:: ds NUM_BADGES
NEXTU
wUnusedCD3D:: db
; the number of credits mons that have been displayed so far
wNumCreditsMonsDisplayed:: db
NEXTU
ds 1
db ; temporary space used when wJigglypuffFacingDirections is rotated
wJigglypuffFacingDirections:: ds 4
NEXTU
ds 16
; $3d = tree tile, $52 = grass tile
wCutTile:: db
ds 2
; 0 = cut animation, 1 = boulder dust animation
wWhichAnimationOffsets:: db
NEXTU
ds 18
; the index of the sprite the emotion bubble is to be displayed above
wEmotionBubbleSpriteIndex:: db
wWhichEmotionBubble:: db
2015-02-07 10:43:08 +00:00
NEXTU
wChangeBoxSavedMapTextPointer:: dw
NEXTU
wSavedY::
wTempSCX::
; which entry from TradeMons to select
wWhichTrade::
wDexMaxSeenMon::
wPPRestoreItem::
wWereAnyMonsAsleep::
wNumShakes::
wWhichBadge::
wTitleMonSpecies::
wPlayerCharacterOAMTile::
; the number of small stars OAM entries to move down
wMoveDownSmallStarsOAMCount::
wChargeMoveNum::
wCoordIndex::
wSwappedMenuItem::
; 0 = no bite
; 1 = bite
; 2 = no fish on map
wRodResponse::
db
ENDU
2015-02-07 10:43:08 +00:00
2015-07-25 03:27:59 +00:00
; 0 = neither
; 1 = warp pad
; 2 = hole
wStandingOnWarpPadOrHole::
2020-06-28 03:03:39 +00:00
wOAMBaseTile::
2021-05-31 15:46:10 +00:00
wGymTrashCanIndex:: db
2015-07-25 03:27:59 +00:00
2021-05-31 15:46:10 +00:00
wSymmetricSpriteOAMAttributes:: db
2015-03-14 22:25:21 +00:00
2021-05-31 15:46:10 +00:00
wMonPartySpriteSpecies:: db
2015-03-14 22:25:21 +00:00
; in the trade animation, the mon that leaves the left gameboy
wLeftGBMonSpecies:: db
2015-03-14 22:25:21 +00:00
; in the trade animation, the mon that leaves the right gameboy
wRightGBMonSpecies:: db
; bit 0: is player engaged by trainer (to avoid being engaged by multiple trainers simultaneously)
; bit 1: boulder dust animation (from using Strength) pending
2015-07-16 03:04:58 +00:00
; bit 3: using generic PC
2015-02-07 10:43:08 +00:00
; bit 5: don't play sound when A or B is pressed in menu
; bit 6: tried pushing against boulder once (you need to push twice before it will move)
wFlags_0xcd60:: db
ds 9
2015-07-15 06:16:06 +00:00
; This has overlapping related uses.
; When the player tries to use an item or use certain field moves, 0 is stored
; when the attempt fails and 1 is stored when the attempt succeeds.
; In addition, some items store 2 for certain types of failures, but this
; cannot happen in battle.
; In battle, a non-zero value indicates the player has taken their turn using
; something other than a move (e.g. using an item or switching pokemon).
; So, when an item is successfully used in battle, this value becomes non-zero
; and the player is not allowed to make a move and the two uses are compatible.
wActionResultOrTookBattleTurn:: db
2014-05-25 17:51:53 +00:00
; Set buttons are ignored.
wJoyIgnore:: db
2015-07-15 06:16:06 +00:00
; size of downscaled mon pic used in pokeball entering/exiting animation
; $00 = 5×5
; $01 = 3×3
wDownscaledMonSize::
2015-07-15 06:16:06 +00:00
; FormatMovesString stores the number of moves minus one here
wNumMovesMinusOne:: db
2015-07-15 06:16:06 +00:00
2018-03-21 22:55:09 +00:00
UNION
wcd6d:: ds NAME_BUFFER_LENGTH ; buffer for various data
NEXTU
ds 4
2015-07-15 06:16:06 +00:00
; temp variable used to print a move's current PP on the status screen
wStatusScreenCurrentPP:: db
2015-07-15 06:16:06 +00:00
ds 6
; list of normal max PP (without PP up) values
wNormalMaxPPList:: ds NUM_MOVES
ds 5
2018-03-21 22:55:09 +00:00
ENDU
UNION
2015-02-07 10:43:08 +00:00
; buffer for transferring the random number list generated by the other gameboy
wSerialOtherGameboyRandomNumberListBlock:: ds $11
NEXTU
; second buffer for temporarily saving and restoring current screen's tiles (e.g. if menus are drawn on top)
wTileMapBackup2:: ds SCREEN_WIDTH * SCREEN_HEIGHT
ENDU
; This union spans 30 bytes.
UNION
; Temporary storage area
wBuffer:: ds 30
2015-07-25 03:27:59 +00:00
NEXTU
wEvoOldSpecies:: db
wEvoNewSpecies:: db
wEvoMonTileOffset:: db
wEvoCancelled:: db
2015-07-19 03:49:52 +00:00
NEXTU
wNamingScreenNameLength:: db
2015-07-25 03:27:59 +00:00
; non-zero when the player has chosen to submit the name
wNamingScreenSubmitName:: db
; 0 = upper case
; 1 = lower case
wAlphabetCase:: db
ds 1
wNamingScreenLetter:: db
2015-07-24 21:39:45 +00:00
NEXTU
wChangeMonPicEnemyTurnSpecies:: db
wChangeMonPicPlayerTurnSpecies:: db
NEXTU
wHPBarMaxHP:: dw
wHPBarOldHP:: dw
wHPBarNewHP:: dw
wHPBarDelta:: db
wHPBarTempHP:: dw
ds 11
wHPBarHPDifference:: dw
2015-07-19 03:49:52 +00:00
NEXTU
; lower nybble is x, upper nybble is y
wTownMapCoords::
; whether WriteMonMoves is being used to make a mon learn moves from day care
; non-zero if so
wLearningMovesFromDayCare::
db
2015-07-19 03:49:52 +00:00
ds 27
2015-07-15 06:16:06 +00:00
; the item that the AI used
wAIItem:: db
2021-05-31 15:46:10 +00:00
wUsedItemOnWhichPokemon:: db
ENDU
; sound ID during battle animations
wAnimSoundID:: db
2015-07-15 06:16:06 +00:00
; used as a storage value for the bank to return to after a BankswitchHome (bankswitch in homebank)
wBankswitchHomeSavedROMBank:: db
2015-07-15 06:16:06 +00:00
; used as a temp storage value for the bank to switch to
wBankswitchHomeTemp:: db
2015-07-13 06:00:48 +00:00
; 0 = nothing bought or sold in pokemart
; 1 = bought or sold something in pokemart
; this value is not used for anything
wBoughtOrSoldItemInMart:: db
2015-07-13 06:00:48 +00:00
2014-08-09 05:39:13 +00:00
; $00 - win
; $01 - lose
; $02 - draw
wBattleResult:: db
2014-09-13 07:50:56 +00:00
; bit 0: if set, DisplayTextID automatically draws a text box
wAutoTextBoxDrawingControl:: db
2014-09-13 07:50:56 +00:00
; used in some overworld scripts to vary scripted movement
wSavedCoordIndex::
wOakWalkedToPlayer::
wNextSafariZoneGateScript:: db
2015-07-15 06:16:06 +00:00
; used in CheckForTilePairCollisions2 to store the tile the player is on
wTilePlayerStandingOn:: db
2015-07-15 06:16:06 +00:00
wNPCNumScriptedSteps:: db
; which script function within the pointer table indicated by
; wNPCMovementScriptPointerTableNum
wNPCMovementScriptFunctionNum:: db
2015-07-15 06:16:06 +00:00
; bit 0: set when printing a text predef so that DisplayTextID doesn't switch
; to the current map's bank
wTextPredefFlag:: db
2021-05-31 15:46:10 +00:00
wPredefParentBank:: db
wSpriteIndex:: db
; movement byte 2 of current sprite
wCurSpriteMovement2:: db
ds 2
; sprite offset of sprite being controlled by NPC movement script
wNPCMovementScriptSpriteOffset:: db
2021-05-31 15:46:10 +00:00
wScriptedNPCWalkCounter:: db
2015-07-15 20:58:21 +00:00
ds 1
2014-05-23 22:34:35 +00:00
2021-05-31 15:46:10 +00:00
wGBC:: db
2014-05-23 22:34:35 +00:00
2014-09-13 07:50:56 +00:00
; if running on SGB, it's 1, else it's 0
wOnSGB:: db
2014-09-13 07:50:56 +00:00
2021-05-31 15:46:10 +00:00
wDefaultPaletteCommand:: db
2015-08-12 09:16:56 +00:00
UNION
2023-09-20 19:43:01 +00:00
wPlayerHPBarColor:: db
2015-08-12 09:16:56 +00:00
NEXTU
2015-08-12 09:16:56 +00:00
; species of the mon whose palette is used for the whole screen
wWholeScreenPaletteMonSpecies:: db
2023-09-20 19:43:01 +00:00
ENDU
2015-08-12 09:16:56 +00:00
2021-05-31 15:46:10 +00:00
wEnemyHPBarColor:: db
2015-08-12 09:16:56 +00:00
; 0: green
; 1: yellow
; 2: red
wPartyMenuHPBarColors:: ds PARTY_LENGTH
2015-08-12 09:16:56 +00:00
2021-05-31 15:46:10 +00:00
wStatusScreenHPBarColor:: db
2015-08-12 09:16:56 +00:00
ds 7
2020-06-28 03:03:39 +00:00
wCopyingSGBTileData::
wWhichPartyMenuHPBar::
wPalPacket::
db
2015-08-12 09:16:56 +00:00
; This union spans 49 bytes.
UNION
wPartyMenuBlkPacket:: ds $30
2015-08-12 09:16:56 +00:00
NEXTU
ds 29
2020-11-05 21:55:39 +00:00
; storage buffer for various strings
2021-08-28 21:02:20 +00:00
wStringBuffer:: ds 20
NEXTU
ds 29
; the total amount of exp a mon gained
wExpAmountGained:: dw
2021-05-31 15:46:10 +00:00
wGainBoostedExp:: db
ENDU
wGymCityName:: ds 17
2015-07-15 06:16:06 +00:00
wGymLeaderName:: ds NAME_LENGTH
2015-07-15 06:16:06 +00:00
wItemList:: ds 16
2021-05-31 15:46:10 +00:00
wListPointer:: dw
2015-02-08 02:37:40 +00:00
2015-08-07 19:39:29 +00:00
; used to store pointers, but never read
wUnusedCF8D:: dw
2015-02-08 02:37:40 +00:00
2021-05-31 15:46:10 +00:00
wItemPrices:: dw
2015-02-08 02:37:40 +00:00
wcf91:: db ; used with a lot of things (too much to list here)
; which pokemon you selected
wWhichPokemon:: db
2015-07-13 06:00:48 +00:00
; if non-zero, then print item prices when displaying lists
wPrintItemPrices:: db
2015-02-08 06:18:42 +00:00
; type of HP bar
; $00 = enemy HUD in battle
; $01 = player HUD in battle / status screen
; $02 = party menu
wHPBarType::
; ID used by DisplayListMenuID
wListMenuID:: db
; if non-zero, RemovePokemon will remove the mon from the current box,
; else it will remove the mon from the party
wRemoveMonFromBox::
; 0 = move from box to party
; 1 = move from party to box
; 2 = move from daycare to party
; 3 = move from party to daycare
wMoveMonType:: db
2015-07-13 06:00:48 +00:00
2021-05-31 15:46:10 +00:00
wItemQuantity:: db
2015-07-13 06:00:48 +00:00
2021-05-31 15:46:10 +00:00
wMaxItemQuantity:: db
2015-02-08 02:37:40 +00:00
; LoadMonData copies mon data here
2020-06-28 03:03:39 +00:00
wLoadedMon:: party_struct wLoadedMon
2015-02-08 02:37:40 +00:00
2015-02-09 02:40:08 +00:00
; bit 0: The space in VRAM that is used to store walk animation tile patterns
; for the player and NPCs is in use for font tile patterns.
; This means that NPC movement must be disabled.
; The other bits are unused.
wFontLoaded:: db
2013-12-08 09:49:40 +00:00
; walk animation counter
wWalkCounter:: db
2014-09-13 07:50:56 +00:00
; background tile number in front of the player (either 1 or 2 steps ahead)
wTileInFrontOfPlayer:: db
2013-12-08 09:49:40 +00:00
2015-08-09 05:32:44 +00:00
; The desired fade counter reload value is stored here prior to calling
; PlaySound in order to cause the current music to fade out before the new
; music begins playing. Storing 0 causes no fade out to occur and the new music
; to begin immediately.
; This variable has another use related to fade-out, as well. PlaySound stores
; the sound ID of the music that should be played after the fade-out is finished
; in this variable. FadeOutAudio checks if it's non-zero every V-Blank and
; fades out the current audio if it is. Once it has finished fading out the
; audio, it zeroes this variable and starts playing the sound ID stored in it.
wAudioFadeOutControl:: db
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wAudioFadeOutCounterReloadValue:: db
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wAudioFadeOutCounter:: db
2015-08-09 05:32:44 +00:00
; This is used to determine whether the default music is already playing when
; attempting to play the default music (in order to avoid restarting the same
; music) and whether the music has already been stopped when attempting to
; fade out the current music (so that the new music can be begin immediately
; instead of waiting).
; It sometimes contains the sound ID of the last music played, but it may also
; contain $ff (if the music has been stopped) or 0 (because some routines zero
; it in order to prevent assumptions from being made about the current state of
; the music).
wLastMusicSoundID:: db
2014-09-13 07:50:56 +00:00
2015-07-15 11:27:59 +00:00
; $00 = causes sprites to be hidden and the value to change to $ff
; $01 = enabled
; $ff = disabled
; other values aren't used
wUpdateSpritesEnabled:: db
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wEnemyMoveNum:: db
wEnemyMoveEffect:: db
wEnemyMovePower:: db
wEnemyMoveType:: db
wEnemyMoveAccuracy:: db
wEnemyMoveMaxPP:: db
wPlayerMoveNum:: db
wPlayerMoveEffect:: db
wPlayerMovePower:: db
wPlayerMoveType:: db
wPlayerMoveAccuracy:: db
wPlayerMoveMaxPP:: db
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wEnemyMonSpecies2:: db
wBattleMonSpecies2:: db
2013-12-08 09:49:40 +00:00
2020-06-28 03:03:39 +00:00
wEnemyMonNick:: ds NAME_LENGTH
2020-06-28 03:03:39 +00:00
wEnemyMon:: battle_struct wEnemyMon
2013-12-08 09:49:40 +00:00
wEnemyMonBaseStats:: ds NUM_STATS
wEnemyMonActualCatchRate:: db
wEnemyMonBaseExp:: db
2013-12-08 09:49:40 +00:00
2020-06-28 03:03:39 +00:00
wBattleMonNick:: ds NAME_LENGTH
wBattleMon:: battle_struct wBattleMon
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wTrainerClass:: db
2013-12-08 09:49:40 +00:00
ds 1
2021-05-31 15:46:10 +00:00
wTrainerPicPointer:: dw
2015-04-09 11:05:57 +00:00
ds 1
2015-08-14 07:36:06 +00:00
UNION
wTempMoveNameBuffer:: ds 14
2015-08-14 07:36:06 +00:00
NEXTU
2015-08-14 07:36:06 +00:00
; The name of the mon that is learning a move.
wLearnMoveMonName:: ds NAME_LENGTH
ENDU
ds 2
2015-07-25 03:27:59 +00:00
; money received after battle = base money × level of last enemy mon
wTrainerBaseMoney:: dw ; BCD
2015-07-25 03:27:59 +00:00
2021-05-31 15:46:10 +00:00
wMissableObjectCounter:: db
2015-07-25 03:27:59 +00:00
ds 1
; 13 bytes for the letters of the opposing trainer
; the name is terminated with $50 with possible
; unused trailing letters
wTrainerName:: ds 13
2013-12-08 09:49:40 +00:00
2015-07-25 03:27:59 +00:00
; lost battle, this is -1
2013-12-08 09:49:40 +00:00
; no battle, this is 0
; wild battle, this is 1
; trainer battle, this is 2
wIsInBattle:: db
2013-12-08 09:49:40 +00:00
2014-08-09 05:39:13 +00:00
; flags that indicate which party members should be be given exp when GainExperience is called
wPartyGainExpFlags:: flag_array PARTY_LENGTH
2013-12-08 09:49:40 +00:00
; in a wild battle, this is the species of pokemon
; in a trainer battle, this is the trainer class + OPP_ID_OFFSET
wCurOpponent:: db
2013-12-08 09:49:40 +00:00
; in normal battle, this is 0
; in old man battle, this is 1
; in safari battle, this is 2
wBattleType:: db
2013-12-08 09:49:40 +00:00
2015-03-31 18:28:42 +00:00
; bits 0-6: Effectiveness
; $0 = immune
; $5 = not very effective
; $a = neutral
; $14 = super-effective
; bit 7: STAB
wDamageMultipliers:: db
2013-12-08 09:49:40 +00:00
; which entry in LoneAttacks to use
; it's actually the same thing as ^
wLoneAttackNo::
wGymLeaderNo:: db
2013-12-08 09:49:40 +00:00
; which instance of [youngster, lass, etc] is this?
wTrainerNo:: db
2013-12-08 09:49:40 +00:00
2014-08-09 05:39:13 +00:00
; $00 = normal attack
; $01 = critical hit
; $02 = successful OHKO
; $ff = failed OHKO
wCriticalHitOrOHKO:: db
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wMoveMissed:: db
2013-12-08 09:49:40 +00:00
2015-02-08 09:44:41 +00:00
; always 0
wPlayerStatsToDouble:: db
2015-02-08 09:44:41 +00:00
; always 0
wPlayerStatsToHalve:: db
2013-12-08 09:49:40 +00:00
; bit 0 - bide
; bit 1 - thrash / petal dance
; bit 2 - attacking multiple times (e.g. double kick)
; bit 3 - flinch
; bit 4 - charging up for attack
; bit 5 - using multi-turn move (e.g. wrap)
; bit 6 - invulnerable to normal attack (using fly/dig)
; bit 7 - confusion
wPlayerBattleStatus1:: db
; bit 0 - X Accuracy effect
; bit 1 - protected by "mist"
; bit 2 - focus energy effect
; bit 4 - has a substitute
; bit 5 - need to recharge
; bit 6 - rage
; bit 7 - leech seeded
wPlayerBattleStatus2:: db
; bit 0 - toxic
; bit 1 - light screen
; bit 2 - reflect
2017-06-24 20:01:43 +00:00
; bit 3 - transformed
wPlayerBattleStatus3:: db
2013-12-08 09:49:40 +00:00
2015-02-08 09:44:41 +00:00
; always 0
wEnemyStatsToDouble:: db
2015-02-08 09:44:41 +00:00
; always 0
wEnemyStatsToHalve:: db
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wEnemyBattleStatus1:: db
wEnemyBattleStatus2:: db
wEnemyBattleStatus3:: db
2013-12-08 09:49:40 +00:00
2014-08-09 05:39:13 +00:00
; when the player is attacking multiple times, the number of attacks left
wPlayerNumAttacksLeft:: db
2014-08-09 05:39:13 +00:00
2021-05-31 15:46:10 +00:00
wPlayerConfusedCounter:: db
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wPlayerToxicCounter:: db
2015-08-31 02:38:41 +00:00
; high nibble: which move is disabled (1-4)
; low nibble: disable turns left
wPlayerDisabledMove:: db
ds 1
; when the enemy is attacking multiple times, the number of attacks left
wEnemyNumAttacksLeft:: db
2014-08-09 05:39:13 +00:00
2021-05-31 15:46:10 +00:00
wEnemyConfusedCounter:: db
2021-05-31 15:46:10 +00:00
wEnemyToxicCounter:: db
2015-08-31 02:38:41 +00:00
; high nibble: which move is disabled (1-4)
; low nibble: disable turns left
wEnemyDisabledMove:: db
2013-12-08 09:49:40 +00:00
ds 1
UNION
; the amount of damage accumulated by the player while biding
wPlayerBideAccumulatedDamage:: dw
2015-02-07 10:43:08 +00:00
NEXTU
wUnknownSerialCounter2:: dw
2015-02-07 10:43:08 +00:00
NEXTU
; number of hits by player in attacks like Double Slap, etc.
wPlayerNumHits:: db
ENDU
ds 2
2014-08-09 05:39:13 +00:00
; non-zero when an item or move that allows escape from battle was used
wEscapedFromBattle:: db
2014-08-09 05:39:13 +00:00
UNION
wAmountMoneyWon:: ds 3 ; BCD
2015-07-25 03:27:59 +00:00
NEXTU
2021-05-31 15:46:10 +00:00
wObjectToHide:: db
wObjectToShow:: db
ENDU
2015-08-30 00:15:05 +00:00
; the map you will start at when the debug bit is set
wDefaultMap::
2020-06-28 03:03:39 +00:00
wMenuItemOffset::
2013-12-08 09:49:40 +00:00
; ID number of the current battle animation
wAnimationID:: db
2013-12-08 09:49:40 +00:00
2020-06-28 03:03:39 +00:00
wNamingScreenType::
wPartyMenuTypeOrMessageID::
; temporary storage for the number of tiles in a tileset
wTempTilesetNumTiles:: db
2015-07-13 06:00:48 +00:00
; used by the pokemart code to save the existing value of wListScrollOffset
; so that it can be restored when the player is done with the pokemart NPC
wSavedListScrollOffset:: db
2015-07-13 06:00:48 +00:00
ds 2
; base coordinates of frame block
2021-05-31 15:46:10 +00:00
wBaseCoordX:: db
wBaseCoordY:: db
2013-12-08 09:49:40 +00:00
; low health alarm counter/enable
; high bit = enable, others = timer to cycle frequencies
wLowHealthAlarm:: db
2013-12-08 09:49:40 +00:00
; counts how many tiles of the current frame block have been drawn
wFBTileCounter:: db
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wMovingBGTilesCounter2:: db
2013-12-08 09:49:40 +00:00
; duration of each frame of the current subanimation in terms of screen refreshes
wSubAnimFrameDelay:: db
2013-12-08 09:49:40 +00:00
; counts the number of subentries left in the current subanimation
wSubAnimCounter:: db
2015-07-19 03:49:52 +00:00
; 1 = no save file or save file is corrupted
; 2 = save file exists and no corruption has been detected
wSaveFileStatus:: db
2013-12-08 09:49:40 +00:00
; number of tiles in current battle animation frame block
wNumFBTiles:: db
UNION
wSpiralBallsBaseY:: db
wSpiralBallsBaseX:: db
NEXTU
2015-07-24 21:39:45 +00:00
; bits 0-6: index into FallingObjects_DeltaXs array (0 - 8)
; bit 7: direction; 0 = right, 1 = left
wFallingObjectMovementByte:: db
wNumFallingObjects:: db
NEXTU
wFlashScreenLongCounter::
2020-06-28 03:03:39 +00:00
wNumShootingBalls::
2015-03-14 22:25:21 +00:00
; $01 if mon is moving from left gameboy to right gameboy; $00 if vice versa
wTradedMonMovingRight::
2020-06-28 03:03:39 +00:00
wOptionsInitialized::
wNewSlotMachineBallTile::
2015-07-24 21:39:45 +00:00
; how much to add to the X/Y coord
wCoordAdjustmentAmount::
wUnusedD08A::
db
2015-07-24 21:39:45 +00:00
2020-06-28 03:03:39 +00:00
wSlideMonDelay::
2015-07-13 20:35:35 +00:00
; generic counter variable for various animations
wAnimCounter::
2013-12-08 09:49:40 +00:00
; controls what transformations are applied to the subanimation
; 01: flip horizontally and vertically
; 02: flip horizontally and translate downwards 40 pixels
; 03: translate base coordinates of frame blocks, but don't change their internal coordinates or flip their tiles
; 04: reverse the subanimation
wSubAnimTransform::
db
ENDU
2021-05-31 15:46:10 +00:00
wEndBattleWinTextPointer:: dw
wEndBattleLoseTextPointer:: dw
2013-12-08 09:49:40 +00:00
ds 2
2021-05-31 15:46:10 +00:00
wEndBattleTextRomBank:: db
2013-12-08 09:49:40 +00:00
ds 1
2013-12-08 09:49:40 +00:00
; the address _of the address_ of the current subanimation entry
wSubAnimAddrPtr:: dw
2015-07-13 20:35:35 +00:00
UNION
; the address of the current subentry of the current subanimation
wSubAnimSubEntryAddr:: dw
NEXTU
2015-07-13 20:35:35 +00:00
; If non-zero, the allow matches flag is always set.
; There is a 1/256 (~0.4%) chance that this value will be set to 60, which is
; the only way it can increase. Winning certain payout amounts will decrement it
; or zero it.
wSlotMachineAllowMatchesCounter:: db
ENDU
ds 2
2021-05-31 15:46:10 +00:00
wOutwardSpiralTileMapPointer:: db
2015-07-24 21:39:45 +00:00
2020-06-28 03:03:39 +00:00
wPartyMenuAnimMonEnabled::
2014-09-14 18:29:18 +00:00
; non-zero when enabled. causes nest locations to blink on and off.
; the town selection cursor will blink regardless of what this value is
wTownMapSpriteBlinkingEnabled::
2021-05-31 15:46:10 +00:00
wUnusedD09B:: db
2013-12-08 09:49:40 +00:00
; current destination address in OAM for frame blocks (big endian)
wFBDestAddr:: dw
2013-12-08 09:49:40 +00:00
; controls how the frame blocks are put together to form frames
; specifically, after finishing drawing the frame block, the frame block's mode determines what happens
; 00: clean OAM buffer and delay
; 02: move onto the next frame block with no delay and no cleaning OAM buffer
; 03: delay, but don't clean OAM buffer
2015-08-31 02:38:41 +00:00
; 04: delay, without cleaning OAM buffer, and do not advance [wFBDestAddr], so that the next frame block will overwrite this one
wFBMode:: db
2013-12-08 09:49:40 +00:00
2015-07-24 21:39:45 +00:00
; 0 = small
; 1 = big
wLinkCableAnimBulgeToggle::
2020-06-28 03:03:39 +00:00
wIntroNidorinoBaseTile::
wOutwardSpiralCurrentDirection::
wDropletTile::
wNewTileBlockID::
wWhichBattleAnimTileset::
2015-07-24 21:39:45 +00:00
; 0 = left
; 1 = right
wSquishMonCurrentDirection::
2015-07-24 21:39:45 +00:00
; the tile ID of the leftmost tile in the bottom row in AnimationSlideMonUp_
wSlideMonUpBottomRowLeftTile::
db
2015-07-24 21:39:45 +00:00
wDisableVBlankWYUpdate:: db ; if non-zero, don't update WY during V-blank
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wSpriteCurPosX:: db
wSpriteCurPosY:: db
wSpriteWidth:: db
wSpriteHeight:: db
2013-12-08 09:49:40 +00:00
; current input byte
wSpriteInputCurByte:: db
2013-12-08 09:49:40 +00:00
; bit offset of last read input bit
wSpriteInputBitCounter:: db
2013-12-08 09:49:40 +00:00
; determines where in the output byte the two bits are placed. Each byte contains four columns (2bpp data)
; 3 -> XX000000 1st column
; 2 -> 00XX0000 2nd column
; 1 -> 0000XX00 3rd column
; 0 -> 000000XX 4th column
wSpriteOutputBitOffset:: db
; bit 0 determines used buffer (0 -> sSpriteBuffer1, 1 -> sSpriteBuffer2)
; bit 1 loading last sprite chunk? (there are at most 2 chunks per load operation)
wSpriteLoadFlags:: db
2021-05-31 15:46:10 +00:00
wSpriteUnpackMode:: db
wSpriteFlipped:: db
2013-12-08 09:49:40 +00:00
; pointer to next input byte
wSpriteInputPtr:: dw
2013-12-08 09:49:40 +00:00
; pointer to current output byte
wSpriteOutputPtr:: dw
2013-12-08 09:49:40 +00:00
; used to revert pointer for different bit offsets
wSpriteOutputPtrCached:: dw
2013-12-08 09:49:40 +00:00
; pointer to differential decoding table (assuming initial value 0)
wSpriteDecodeTable0Ptr:: dw
2013-12-08 09:49:40 +00:00
; pointer to differential decoding table (assuming initial value 1)
wSpriteDecodeTable1Ptr:: dw
2013-12-08 09:49:40 +00:00
wd0b5:: db ; used as a temp storage area for Pokemon Species, and other Pokemon/Battle related things
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wNameListType:: db
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wPredefBank:: db
2013-12-08 09:49:40 +00:00
2020-06-28 03:03:39 +00:00
wMonHeader::
2017-06-24 20:01:43 +00:00
; In the ROM base stats data structure, this is the dex number, but it is
2015-08-07 19:39:29 +00:00
; overwritten with the internal index number after the header is copied to WRAM.
wMonHIndex:: db
2020-06-28 03:03:39 +00:00
wMonHBaseStats::
2021-05-31 15:46:10 +00:00
wMonHBaseHP:: db
wMonHBaseAttack:: db
wMonHBaseDefense:: db
wMonHBaseSpeed:: db
wMonHBaseSpecial:: db
2020-06-28 03:03:39 +00:00
wMonHTypes::
2021-05-31 15:46:10 +00:00
wMonHType1:: db
wMonHType2:: db
wMonHCatchRate:: db
wMonHBaseEXP:: db
wMonHSpriteDim:: db
wMonHFrontSprite:: dw
wMonHBackSprite:: dw
wMonHMoves:: ds NUM_MOVES
2021-05-31 15:46:10 +00:00
wMonHGrowthRate:: db
wMonHLearnset:: flag_array NUM_TMS + NUM_HMS
ds 1
wMonHeaderEnd::
2013-12-08 09:49:40 +00:00
2015-07-20 00:52:26 +00:00
; saved at the start of a battle and then written back at the end of the battle
wSavedTileAnimations:: db
2015-07-20 00:52:26 +00:00
ds 2
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wDamage:: dw
2013-12-08 09:49:40 +00:00
ds 2
2021-05-31 15:46:10 +00:00
wRepelRemainingSteps:: db
2015-02-08 08:17:03 +00:00
; list of moves for FormatMovesString
wMoves:: ds NUM_MOVES
2015-02-08 08:17:03 +00:00
2021-05-31 15:46:10 +00:00
wMoveNum:: db
2015-02-08 08:17:03 +00:00
wMovesString:: ds 56
2015-02-08 08:17:03 +00:00
2021-05-31 15:46:10 +00:00
wUnusedD119:: db
2014-09-13 07:50:56 +00:00
; wWalkBikeSurfState is sometimes copied here, but it doesn't seem to be used for anything
wWalkBikeSurfStateCopy:: db
2014-09-13 07:50:56 +00:00
2015-07-13 06:00:48 +00:00
; the type of list for InitList to init
wInitListType:: db
2015-07-13 06:00:48 +00:00
2015-07-25 03:27:59 +00:00
; 0 if no mon was captured
wCapturedMonSpecies:: db
2015-07-25 03:27:59 +00:00
; Non-zero when the first player mon and enemy mon haven't been sent out yet.
; It prevents the game from asking if the player wants to choose another mon
; when the enemy sends out their first mon and suppresses the "no will to fight"
; message when the game searches for the first non-fainted mon in the party,
; which will be the first mon sent out.
wFirstMonsNotOutYet:: db
2015-07-25 03:27:59 +00:00
2020-06-28 03:03:39 +00:00
wPokeBallCaptureCalcTemp::
2015-08-07 12:20:37 +00:00
; lower nybble: number of shakes
; upper nybble: number of animations to play
2020-06-28 03:03:39 +00:00
wPokeBallAnimData::
wUsingPPUp::
wMaxPP::
2015-08-07 12:20:37 +00:00
; 0 for player, non-zero for enemy
2020-06-28 03:03:39 +00:00
wCalculateWhoseStats::
wTypeEffectiveness::
wMoveType::
wNumSetBits::
; used as a Pokemon and Item storage value. Also used as an output value for CountSetBits
wd11e::
db
2015-07-25 03:27:59 +00:00
; When this value is non-zero, the player isn't allowed to exit the party menu
; by pressing B and not choosing a mon.
wForcePlayerToChooseMon:: db
2014-08-09 05:39:13 +00:00
; number of times the player has tried to run from battle
wNumRunAttempts:: db
2014-08-09 05:39:13 +00:00
2021-05-31 15:46:10 +00:00
wEvolutionOccurred:: db
2015-07-25 03:27:59 +00:00
2021-05-31 15:46:10 +00:00
wVBlankSavedROMBank:: db
2015-07-25 03:27:59 +00:00
ds 1
2021-05-31 15:46:10 +00:00
wIsKeyItem:: db
2015-02-07 10:43:08 +00:00
2021-05-31 15:46:10 +00:00
wTextBoxID:: db
2015-02-07 10:43:08 +00:00
wCurrentMapScriptFlags:: db ; not exactly sure what this is used for, but it seems to be used as a multipurpose temp flag value
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wCurEnemyLVL:: db
2013-12-08 09:49:40 +00:00
2015-07-13 06:00:48 +00:00
; pointer to list of items terminated by $FF
wItemListPointer:: dw
2015-07-13 06:00:48 +00:00
2015-07-13 07:32:03 +00:00
; number of entries in a list
wListCount:: db
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wLinkState:: db
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wTwoOptionMenuID:: db
2015-07-13 06:00:48 +00:00
; the id of the menu item the player ultimately chose
wChosenMenuItem::
2015-07-13 06:00:48 +00:00
; non-zero when the whole party has fainted due to out-of-battle poison damage
wOutOfBattleBlackout:: db
2015-07-13 06:00:48 +00:00
; the way the user exited a menu
; for list menus and the buy/sell/quit menu:
; $01 = the user pressed A to choose a menu item
; $02 = the user pressed B to cancel
; for two-option menus:
; $01 = the user pressed A with the first menu item selected
; $02 = the user pressed B or pressed A with the second menu item selected
wMenuExitMethod:: db
2015-07-13 06:00:48 +00:00
2015-07-26 02:26:54 +00:00
; the size is always 6, so they didn't need a variable in RAM for this
wDungeonWarpDataEntrySize::
2015-07-26 02:26:54 +00:00
; 0 = museum guy
; 1 = gym guy
wWhichPewterGuy::
2015-07-26 02:26:54 +00:00
; there are 3 windows, from 0 to 2
wWhichPrizeWindow::
2015-07-26 02:26:54 +00:00
; a horizontal or vertical gate block
wGymGateTileBlock:: db
2015-07-26 02:26:54 +00:00
2021-05-31 15:46:10 +00:00
wSavedSpriteScreenY:: db
wSavedSpriteScreenX:: db
wSavedSpriteMapY:: db
wSavedSpriteMapX:: db
2015-07-26 02:26:54 +00:00
ds 5
2021-05-31 15:46:10 +00:00
wWhichPrize:: db
2014-09-14 18:29:18 +00:00
; counts downward each frame
; when it hits 0, bit 5 (ignore input bit) of wd730 is reset
wIgnoreInputCounter:: db
2014-09-13 07:50:56 +00:00
; counts down once every step
wStepCounter:: db
2014-09-13 07:50:56 +00:00
; after a battle, you have at least 3 steps before a random battle can occur
wNumberOfNoRandomBattleStepsLeft:: db
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wPrize1:: db
wPrize2:: db
wPrize3:: db
2013-12-08 09:49:40 +00:00
ds 1
UNION
wSerialRandomNumberListBlock:: ds $11
2015-02-07 10:43:08 +00:00
NEXTU
2021-05-31 15:46:10 +00:00
wPrize1Price:: dw
wPrize2Price:: dw
wPrize3Price:: dw
2015-07-26 02:26:54 +00:00
ds 1
2015-02-07 10:43:08 +00:00
; shared list of 9 random numbers, indexed by wLinkBattleRandomNumberListIndex
wLinkBattleRandomNumberList:: ds 10
ENDU
2015-02-07 10:43:08 +00:00
wSerialPlayerDataBlock:: ; ds $1a8
2015-02-07 10:43:08 +00:00
2015-07-26 02:26:54 +00:00
; When a real item is being used, this is 0.
; When a move is acting as an item, this is the ID of the item it's acting as.
; For example, out-of-battle Dig is executed using a fake Escape Rope item. In
; that case, this would be ESCAPE_ROPE.
wPseudoItemID:: db
2015-07-26 02:26:54 +00:00
2021-05-31 15:46:10 +00:00
wUnusedD153:: db
2015-07-26 02:26:54 +00:00
ds 2
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wEvoStoneItemID:: db
2015-07-26 02:26:54 +00:00
2021-05-31 15:46:10 +00:00
wSavedNPCMovementDirections2Index:: db
2013-12-08 09:49:40 +00:00
wPlayerName:: ds NAME_LENGTH
2013-12-08 09:49:40 +00:00
2021-05-31 21:17:03 +00:00
SECTION "Party Data", WRAM0
wPartyDataStart::
wPartyCount:: db
wPartySpecies:: ds PARTY_LENGTH + 1
2013-12-08 09:49:40 +00:00
wPartyMons::
; wPartyMon1 - wPartyMon6
2021-05-31 15:46:10 +00:00
FOR n, 1, PARTY_LENGTH + 1
wPartyMon{d:n}:: party_struct wPartyMon{d:n}
2021-05-31 15:46:10 +00:00
ENDR
wPartyMonOT::
; wPartyMon1OT - wPartyMon6OT
2021-05-31 15:46:10 +00:00
FOR n, 1, PARTY_LENGTH + 1
wPartyMon{d:n}OT:: ds NAME_LENGTH
2021-05-31 15:46:10 +00:00
ENDR
wPartyMonNicks::
; wPartyMon1Nick - wPartyMon6Nick
2021-05-31 15:46:10 +00:00
FOR n, 1, PARTY_LENGTH + 1
wPartyMon{d:n}Nick:: ds NAME_LENGTH
2021-05-31 15:46:10 +00:00
ENDR
wPartyMonNicksEnd::
wPartyDataEnd::
2021-05-31 21:17:03 +00:00
SECTION "Main Data", WRAM0
wMainDataStart::
wPokedexOwned:: flag_array NUM_POKEMON
wPokedexOwnedEnd::
wPokedexSeen:: flag_array NUM_POKEMON
wPokedexSeenEnd::
2021-05-31 15:46:10 +00:00
wNumBagItems:: db
2013-12-08 09:49:40 +00:00
; item, quantity
wBagItems:: ds BAG_ITEM_CAPACITY * 2 + 1
wPlayerMoney:: ds 3 ; BCD
wRivalName:: ds NAME_LENGTH
; bit 7 = battle animation
; 0: On
; 1: Off
; bit 6 = battle style
; 0: Shift
; 1: Set
; bits 0-3 = text speed (number of frames to delay after printing a letter)
; 1: Fast
; 3: Medium
; 5: Slow
wOptions:: db
wObtainedBadges:: flag_array NUM_BADGES
ds 1
2015-07-15 02:46:52 +00:00
; bit 0: If 0, limit the delay to 1 frame. Note that this has no effect if
; the delay has been disabled entirely through bit 1 of this variable
; or bit 6 of wd730.
; bit 1: If 0, no delay.
wLetterPrintingDelayFlags:: db
2021-05-31 15:46:10 +00:00
wPlayerID:: dw
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wMapMusicSoundID:: db
wMapMusicROMBank:: db
2014-09-13 07:50:56 +00:00
; offset subtracted from FadePal4 to get the background and object palettes for the current map
; normally, it is 0. it is 6 when Flash is needed, causing FadePal2 to be used instead of FadePal4
wMapPalOffset:: db
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wCurMap:: db
2013-12-08 09:49:40 +00:00
2014-09-13 07:50:56 +00:00
; pointer to the upper left corner of the current view in the tile block map
wCurrentTileBlockMapViewPointer:: dw
2020-07-07 01:15:12 +00:00
; player's position on the current map
wYCoord:: db
2021-05-31 15:46:10 +00:00
wXCoord:: db
2013-12-08 19:25:19 +00:00
; player's position (by block)
wYBlockCoord:: db
2021-05-31 15:46:10 +00:00
wXBlockCoord:: db
2021-05-31 15:46:10 +00:00
wLastMap:: db
2021-05-31 15:46:10 +00:00
wUnusedD366:: db
2013-12-08 19:25:19 +00:00
wCurMapHeader::
2021-05-31 15:46:10 +00:00
wCurMapTileset:: db
2023-11-22 15:09:21 +00:00
wCurMapHeight:: db
wCurMapWidth:: db
wCurMapDataPtr:: dw
wCurMapTextPtr:: dw
wCurMapScriptPtr:: dw
wCurMapConnections:: db
wCurMapHeaderEnd::
2013-12-08 19:25:19 +00:00
wNorthConnectionHeader:: map_connection_struct wNorth
wSouthConnectionHeader:: map_connection_struct wSouth
wWestConnectionHeader:: map_connection_struct wWest
wEastConnectionHeader:: map_connection_struct wEast
2013-12-08 19:25:19 +00:00
; sprite set for the current map (11 sprite picture ID's)
wSpriteSet:: ds 11
2013-12-08 19:25:19 +00:00
; sprite set ID for the current map
wSpriteSetID:: db
2021-05-31 15:46:10 +00:00
wObjectDataPointerTemp:: dw
2015-07-20 00:52:26 +00:00
ds 2
; the tile shown outside the boundaries of the map
wMapBackgroundTile:: db
2014-09-13 07:50:56 +00:00
; number of warps in current map (up to 32)
wNumberOfWarps:: db
2014-09-13 07:50:56 +00:00
; current map warp entries
wWarpEntries:: ds 32 * 4 ; Y, X, warp ID, map ID
2014-09-13 07:50:56 +00:00
; if $ff, the player's coordinates are not updated when entering the map
wDestinationWarpID:: db
2014-09-13 07:50:56 +00:00
ds 128
2015-07-20 00:52:26 +00:00
; number of signs in the current map (up to 16)
wNumSigns:: db
2015-07-20 00:52:26 +00:00
wSignCoords:: ds 16 * 2 ; Y, X
wSignTextIDs:: ds 16
; number of sprites on the current map (up to 16)
wNumSprites:: db
2014-09-13 07:50:56 +00:00
; these two variables track the X and Y offset in blocks from the last special warp used
; they don't seem to be used for anything
2021-05-31 15:46:10 +00:00
wYOffsetSinceLastSpecialWarp:: db
wXOffsetSinceLastSpecialWarp:: db
wMapSpriteData:: ds 16 * 2 ; movement byte 2, text ID
wMapSpriteExtraData:: ds 16 * 2 ; trainer class/item ID, trainer set ID
2015-07-20 00:52:26 +00:00
; map height in 2x2 meta-tiles
wCurrentMapHeight2:: db
2015-07-20 00:52:26 +00:00
; map width in 2x2 meta-tiles
wCurrentMapWidth2:: db
2014-09-14 18:29:18 +00:00
; the address of the upper left corner of the visible portion of the BG tile map in VRAM
wMapViewVRAMPointer:: dw
2014-09-14 18:29:18 +00:00
2015-07-20 00:52:26 +00:00
; In the comments for the player direction variables below, "moving" refers to
; both walking and changing facing direction without taking a step.
; if the player is moving, the current direction
; if the player is not moving, zero
; map scripts write to this in order to change the player's facing direction
wPlayerMovingDirection:: db
2015-07-20 00:52:26 +00:00
; the direction in which the player was moving before the player last stopped
wPlayerLastStopDirection:: db
2015-07-20 00:52:26 +00:00
; if the player is moving, the current direction
; if the player is not moving, the last the direction in which the player moved
wPlayerDirection:: db
2013-12-08 19:25:19 +00:00
2021-05-31 15:46:10 +00:00
wTilesetBank:: db
2013-12-08 19:25:19 +00:00
; maps blocks (4x4 tiles) to tiles
wTilesetBlocksPtr:: dw
2013-12-08 19:25:19 +00:00
2021-05-31 15:46:10 +00:00
wTilesetGfxPtr:: dw
2013-12-08 19:25:19 +00:00
; list of all walkable tiles
wTilesetCollisionPtr:: dw
2013-12-08 19:25:19 +00:00
wTilesetTalkingOverTiles:: ds 3
2013-12-08 19:25:19 +00:00
2021-05-31 15:46:10 +00:00
wGrassTile:: db
ds 4
2013-12-08 09:49:40 +00:00
2021-05-31 15:46:10 +00:00
wNumBoxItems:: db
2013-12-08 09:49:40 +00:00
; item, quantity
wBoxItems:: ds PC_ITEM_CAPACITY * 2 + 1
2013-12-08 09:49:40 +00:00
2015-07-19 03:49:52 +00:00
; bits 0-6: box number
; bit 7: whether the player has changed boxes before
wCurrentBoxNum:: db
ds 1
2015-07-15 02:46:52 +00:00
; number of HOF teams
wNumHoFTeams:: db
2015-07-15 02:46:52 +00:00
2021-05-31 15:46:10 +00:00
wUnusedD5A3:: db
2023-11-22 15:12:40 +00:00
wPlayerCoins:: dw ; BCD
2013-12-08 09:49:40 +00:00
; bit array of missable objects. set = removed
wMissableObjectFlags:: flag_array $100
2015-08-10 04:56:20 +00:00
wMissableObjectFlagsEnd::
ds 7
; saved copy of SPRITESTATEDATA1_IMAGEINDEX (used for sprite facing/anim)
wSavedSpriteImageIndex:: db
; each entry consists of 2 bytes
; * the sprite ID (depending on the current map)
2015-08-31 02:38:41 +00:00
; * the missable object index (global, used for wMissableObjectFlags)
; terminated with $FF
wMissableObjectList:: ds 16 * 2 + 1
ds 1
wGameProgressFlags::
2021-05-31 15:46:10 +00:00
wOaksLabCurScript:: db
wPalletTownCurScript:: db
ds 1
wBluesHouseCurScript:: db
wViridianCityCurScript:: db
ds 2
wPewterCityCurScript:: db
wRoute3CurScript:: db
wRoute4CurScript:: db
ds 1
wViridianGymCurScript:: db
wPewterGymCurScript:: db
wCeruleanGymCurScript:: db
wVermilionGymCurScript:: db
wCeladonGymCurScript:: db
wRoute6CurScript:: db
wRoute8CurScript:: db
wRoute24CurScript:: db
wRoute25CurScript:: db
wRoute9CurScript:: db
wRoute10CurScript:: db
wMtMoon1FCurScript:: db
wMtMoonB2FCurScript:: db
wSSAnne1FRoomsCurScript:: db
wSSAnne2FRoomsCurScript:: db
wRoute22CurScript:: db
ds 1
wRedsHouse2FCurScript:: db
wViridianMartCurScript:: db
wRoute22GateCurScript:: db
wCeruleanCityCurScript:: db
ds 7
2021-05-31 15:46:10 +00:00
wSSAnneBowCurScript:: db
wViridianForestCurScript:: db
wMuseum1FCurScript:: db
wRoute13CurScript:: db
wRoute14CurScript:: db
wRoute17CurScript:: db
wRoute19CurScript:: db
wRoute21CurScript:: db
wSafariZoneGateCurScript:: db
wRockTunnelB1FCurScript:: db
wRockTunnel1FCurScript:: db
ds 1
wRoute11CurScript:: db
wRoute12CurScript:: db
wRoute15CurScript:: db
wRoute16CurScript:: db
wRoute18CurScript:: db
wRoute20CurScript:: db
wSSAnneB1FRoomsCurScript:: db
wVermilionCityCurScript:: db
wPokemonTower2FCurScript:: db
wPokemonTower3FCurScript:: db
wPokemonTower4FCurScript:: db
wPokemonTower5FCurScript:: db
wPokemonTower6FCurScript:: db
wPokemonTower7FCurScript:: db
wRocketHideoutB1FCurScript:: db
wRocketHideoutB2FCurScript:: db
wRocketHideoutB3FCurScript:: db
wRocketHideoutB4FCurScript:: db
ds 1
wRoute6GateCurScript:: db
wRoute8GateCurScript:: db
ds 1
wCinnabarIslandCurScript:: db
wPokemonMansion1FCurScript:: db
ds 1
wPokemonMansion2FCurScript:: db
wPokemonMansion3FCurScript:: db
wPokemonMansionB1FCurScript:: db
wVictoryRoad2FCurScript:: db
wVictoryRoad3FCurScript:: db
ds 1
wFightingDojoCurScript:: db
wSilphCo2FCurScript:: db
wSilphCo3FCurScript:: db
wSilphCo4FCurScript:: db
wSilphCo5FCurScript:: db
wSilphCo6FCurScript:: db
wSilphCo7FCurScript:: db
wSilphCo8FCurScript:: db
wSilphCo9FCurScript:: db
wHallOfFameCurScript:: db
wChampionsRoomCurScript:: db
wLoreleisRoomCurScript:: db
wBrunosRoomCurScript:: db
wAgathasRoomCurScript:: db
wCeruleanCaveB1FCurScript:: db
wVictoryRoad1FCurScript:: db
ds 1
wLancesRoomCurScript:: db
ds 4
2021-05-31 15:46:10 +00:00
wSilphCo10FCurScript:: db
wSilphCo11FCurScript:: db
ds 1
wFuchsiaGymCurScript:: db
wSaffronGymCurScript:: db
ds 1
wCinnabarGymCurScript:: db
wGameCornerCurScript:: db
wRoute16Gate1FCurScript:: db
wBillsHouseCurScript:: db
wRoute5GateCurScript:: db
wPowerPlantCurScript:: ; overload
wRoute7GateCurScript:: db
ds 1
wSSAnne2FCurScript:: db
wSeafoamIslandsB3FCurScript:: db
wRoute23CurScript:: db
wSeafoamIslandsB4FCurScript:: db
wRoute18Gate1FCurScript:: db
2015-08-10 04:56:20 +00:00
ds 78
wGameProgressFlagsEnd::
ds 56
wObtainedHiddenItemsFlags:: flag_array MAX_HIDDEN_ITEMS
2015-07-19 03:49:52 +00:00
wObtainedHiddenCoinsFlags:: flag_array MAX_HIDDEN_COINS
2014-09-13 07:50:56 +00:00
; $00 = walking
; $01 = biking
; $02 = surfing
wWalkBikeSurfState:: db
2014-09-13 07:50:56 +00:00
ds 10
wTownVisitedFlag:: flag_array NUM_CITY_MAPS
; starts at 502
wSafariSteps:: dw
; item given to cinnabar lab
wFossilItem:: db
; mon that will result from the item
wFossilMon:: db
ds 2
; trainer classes start at OPP_ID_OFFSET
wEnemyMonOrTrainerClass:: db
2021-05-31 15:46:10 +00:00
wPlayerJumpingYScreenCoordsIndex:: db
2021-05-31 15:46:10 +00:00
wRivalStarter:: db
ds 1
2021-05-31 15:46:10 +00:00
wPlayerStarter:: db
2014-09-13 07:50:56 +00:00
; sprite index of the boulder the player is trying to push
wBoulderSpriteIndex:: db
2021-05-31 15:46:10 +00:00
wLastBlackoutMap:: db
2014-09-13 07:50:56 +00:00
; destination map (for certain types of special warps, not ordinary walking)
wDestinationMap:: db
2014-09-13 07:50:56 +00:00
2021-05-31 15:46:10 +00:00
wUnusedD71B:: db
2014-09-13 07:50:56 +00:00
; used to store the tile in front of the boulder when trying to push a boulder
; also used to store the result of the collision check ($ff for a collision and $00 for no collision)
wTileInFrontOfBoulderAndBoulderCollisionResult:: db
2014-09-13 07:50:56 +00:00
; destination map for dungeon warps
wDungeonWarpDestinationMap:: db
2014-09-13 07:50:56 +00:00
; which dungeon warp within the source map was used
wWhichDungeonWarp:: db
2014-09-13 07:50:56 +00:00
2021-05-31 15:46:10 +00:00
wUnusedD71F:: db
2015-07-26 02:26:54 +00:00
ds 8
; bit 0: using Strength outside of battle
2015-08-30 00:15:05 +00:00
; bit 1: set by IsSurfingAllowed when surfing's allowed, but the caller resets it after checking the result
; bit 3: received Old Rod
; bit 4: received Good Rod
; bit 5: received Super Rod
; bit 6: gave one of the Saffron guards a drink
; bit 7: set by ItemUseCardKey, which is leftover code from a previous implementation of the Card Key
wd728:: db
ds 1
2015-08-31 02:38:41 +00:00
; redundant because it matches wObtainedBadges
2015-07-26 02:26:54 +00:00
; used to determine whether to show name on statue and in two NPC text scripts
wBeatGymFlags:: db
2015-07-26 02:26:54 +00:00
ds 1
2014-09-13 07:50:56 +00:00
; bit 0: if not set, the 3 minimum steps between random battles have passed
2015-08-30 00:15:05 +00:00
; bit 1: prevent audio fade out
wd72c:: db
2015-08-30 00:15:05 +00:00
; This variable is used for temporary flags and as the destination map when
; warping to the Trade Center or Colosseum.
; bit 0: sprite facing directions have been initialised in the Trade Center
; bit 3: do scripted warp (used to warp back to Lavender Town from the top of the pokemon tower)
; bit 4: on a dungeon warp
; bit 5: don't make NPCs face the player when spoken to
; Bits 6 and 7 are set by scripts when starting major battles in the storyline,
; but they do not appear to affect anything. Bit 6 is reset after all battles
; and bit 7 is reset after trainer battles (but it's only set before trainer
; battles anyway).
wd72d:: db
2015-08-30 00:15:05 +00:00
; bit 0: the player has received Lapras in the Silph Co. building
; bit 1: set in various places, but doesn't appear to have an effect
; bit 2: the player has healed pokemon at a pokemon center at least once
; bit 3: the player has a received a pokemon from Prof. Oak
; bit 4: disable battles
; bit 5: set when a battle ends and when the player blacks out in the overworld due to poison
; bit 6: using the link feature
; bit 7: set if scripted NPC movement has been initialised
wd72e:: db
2014-09-13 07:50:56 +00:00
2015-08-30 00:15:05 +00:00
ds 1
2014-09-14 18:29:18 +00:00
; bit 0: NPC sprite being moved by script
; bit 5: ignore joypad input
; bit 6: print text with no delay between each letter
2015-07-15 11:27:59 +00:00
; bit 7: set if joypad states are being simulated in the overworld or an NPC's movement is being scripted
wd730:: db
ds 1
2014-09-13 07:50:56 +00:00
; bit 0: play time being counted
2023-07-15 22:36:59 +00:00
; bit 1: debug mode (unused and incomplete in non-debug builds)
2014-09-13 07:50:56 +00:00
; bit 2: the target warp is a fly warp (bit 3 set or blacked out) or a dungeon warp (bit 4 set)
; bit 3: used warp pad, escape rope, dig, teleport, or fly, so the target warp is a "fly warp"
; bit 4: jumped into hole (Pokemon Mansion, Seafoam Islands, Victory Road) or went down waterfall (Seafoam Islands), so the target warp is a "dungeon warp"
; bit 5: currently being forced to ride bike (cycling road)
; bit 6: map destination is [wLastBlackoutMap] (usually the last used pokemon center, but could be the player's house)
wd732:: db
2023-07-15 22:36:59 +00:00
; bit 0: running a test battle (unused in non-debug builds)
2015-08-30 00:15:05 +00:00
; bit 1: prevent music from changing when entering new map
; bit 2: skip the joypad check in CheckWarpsNoCollision (used for the forced warp down the waterfall in the Seafoam Islands)
; bit 3: trainer wants to battle
; bit 4: use variable [wCurMapScript] instead of the provided index for next frame's map script (used to start battle when talking to trainers)
2014-09-13 07:50:56 +00:00
; bit 7: used fly out of battle
wFlags_D733:: db
2015-07-21 21:21:14 +00:00
; bit 1: set when you beat Lorelei and reset in Indigo Plateau lobby
; the game uses this to tell when Elite 4 events need to be reset
wBeatLorelei:: db
2020-11-05 21:55:39 +00:00
ds 1
; bit 0: check if the player is standing on a door and make him walk down a step if so
2014-09-14 18:29:18 +00:00
; bit 1: the player is currently stepping down from a door
2014-09-13 07:50:56 +00:00
; bit 2: standing on a warp
; bit 6: jumping down a ledge / fishing animation
2017-06-24 20:01:43 +00:00
; bit 7: player sprite spinning due to spin tiles (Rocket hideout / Viridian Gym)
wd736:: db
2021-05-31 15:46:10 +00:00
wCompletedInGameTradeFlags:: dw
2015-02-07 10:43:08 +00:00
ds 2
2021-05-31 15:46:10 +00:00
wWarpedFromWhichWarp:: db
wWarpedFromWhichMap:: db
2015-07-26 02:26:54 +00:00
ds 2
2014-09-14 18:29:18 +00:00
2021-05-31 15:46:10 +00:00
wCardKeyDoorY:: db
wCardKeyDoorX:: db
2014-09-14 18:29:18 +00:00
ds 2
2021-05-31 15:46:10 +00:00
wFirstLockTrashCanIndex:: db
wSecondLockTrashCanIndex:: db
2015-07-21 01:32:02 +00:00
2015-07-25 03:27:59 +00:00
ds 2
2020-11-05 21:55:39 +00:00
wEventFlags:: flag_array NUM_EVENTS
UNION
wGrassRate:: db
wGrassMons:: ds 10 * 2
ds 8
wWaterRate:: db
wWaterMons:: ds 10 * 2
NEXTU
2015-02-07 10:43:08 +00:00
; linked game's trainer name
wLinkEnemyTrainerName:: ds NAME_LENGTH
2015-02-07 10:43:08 +00:00
ds 1
wSerialEnemyDataBlock:: ; ds $1a8
ds 9
2020-06-28 03:03:39 +00:00
wEnemyPartyCount:: ds 1
wEnemyPartySpecies:: ds PARTY_LENGTH + 1
2020-06-28 03:03:39 +00:00
wEnemyMons::
; wEnemyMon1 - wEnemyMon6
2021-05-31 15:46:10 +00:00
FOR n, 1, PARTY_LENGTH + 1
wEnemyMon{d:n}:: party_struct wEnemyMon{d:n}
2021-05-31 15:46:10 +00:00
ENDR
wEnemyMonOT::
; wEnemyMon1OT - wEnemyMon6OT
2021-05-31 15:46:10 +00:00
FOR n, 1, PARTY_LENGTH + 1
wEnemyMon{d:n}OT:: ds NAME_LENGTH
2021-05-31 15:46:10 +00:00
ENDR
wEnemyMonNicks::
; wEnemyMon1Nick - wEnemyMon6Nick
2021-05-31 15:46:10 +00:00
FOR n, 1, PARTY_LENGTH + 1
wEnemyMon{d:n}Nick:: ds NAME_LENGTH
2021-05-31 15:46:10 +00:00
ENDR
ENDU
2021-05-31 15:46:10 +00:00
wTrainerHeaderPtr:: dw
ds 6
2015-07-26 02:26:54 +00:00
; the trainer the player must face after getting a wrong answer in the Cinnabar
; gym quiz
wOpponentAfterWrongAnswer::
2021-05-31 15:46:10 +00:00
wUnusedDA38:: db
; index of current map script, mostly used as index for function pointer array
2017-06-24 20:01:43 +00:00
; mostly copied from map-specific map script pointer and written back later
wCurMapScript:: db
2016-01-03 19:17:10 +00:00
ds 7
2021-05-31 15:46:10 +00:00
wPlayTimeHours:: db
wPlayTimeMaxed:: db
wPlayTimeMinutes:: db
wPlayTimeSeconds:: db
wPlayTimeFrames:: db
2021-05-31 15:46:10 +00:00
wSafariZoneGameOver:: db
2021-05-31 15:46:10 +00:00
wNumSafariBalls:: db
2014-01-06 00:24:01 +00:00
; 0 if no pokemon is in the daycare
; 1 if pokemon is in the daycare
wDayCareInUse:: db
2014-01-06 00:24:01 +00:00
2020-06-28 03:03:39 +00:00
wDayCareMonName:: ds NAME_LENGTH
wDayCareMonOT:: ds NAME_LENGTH
2020-06-28 03:03:39 +00:00
wDayCareMon:: box_struct wDayCareMon
wMainDataEnd::
2021-05-31 21:17:03 +00:00
SECTION "Current Box Data", WRAM0
wBoxDataStart::
wBoxCount:: db
wBoxSpecies:: ds MONS_PER_BOX + 1
wBoxMons::
; wBoxMon1 - wBoxMon20
2021-05-31 15:46:10 +00:00
FOR n, 1, MONS_PER_BOX + 1
wBoxMon{d:n}:: box_struct wBoxMon{d:n}
2021-05-31 15:46:10 +00:00
ENDR
wBoxMonOT::
; wBoxMon1OT - wBoxMon20OT
2021-05-31 15:46:10 +00:00
FOR n, 1, MONS_PER_BOX + 1
wBoxMon{d:n}OT:: ds NAME_LENGTH
2021-05-31 15:46:10 +00:00
ENDR
wBoxMonNicks::
; wBoxMon1Nick - wBoxMon20Nick
2021-05-31 15:46:10 +00:00
FOR n, 1, MONS_PER_BOX + 1
wBoxMon{d:n}Nick:: ds NAME_LENGTH
2021-05-31 15:46:10 +00:00
ENDR
2020-06-28 03:03:39 +00:00
wBoxMonNicksEnd::
wBoxDataEnd::
2014-05-23 22:34:35 +00:00
2018-11-18 23:29:24 +00:00
SECTION "Stack", WRAM0
2020-11-05 21:55:39 +00:00
2021-05-31 15:46:10 +00:00
; the stack grows downward
ds $100 - 1
wStack:: db
2024-01-03 15:59:04 +00:00
ENDSECTION