diff options
Diffstat (limited to 'wram.asm')
-rwxr-xr-x | wram.asm | 4610 |
1 files changed, 2305 insertions, 2305 deletions
@@ -1,2305 +1,2305 @@ -
-INCLUDE "constants.asm"
-
-flag_array: MACRO
- ds ((\1) + 7) / 8
-ENDM
-
-box_struct_length EQU 25 + NUM_MOVES * 2
-box_struct: MACRO
-\1Species:: db
-\1HP:: dw
-\1BoxLevel:: db
-\1Status:: db
-\1Type::
-\1Type1:: db
-\1Type2:: db
-\1CatchRate:: db
-\1Moves:: ds NUM_MOVES
-\1OTID:: dw
-\1Exp:: ds 3
-\1HPExp:: dw
-\1AttackExp:: dw
-\1DefenseExp:: dw
-\1SpeedExp:: dw
-\1SpecialExp:: dw
-\1DVs:: ds 2
-\1PP:: ds NUM_MOVES
-ENDM
-
-party_struct: MACRO
- box_struct \1
-\1Level:: db
-\1Stats::
-\1MaxHP:: dw
-\1Attack:: dw
-\1Defense:: dw
-\1Speed:: dw
-\1Special:: dw
-ENDM
-
-battle_struct: MACRO
-\1Species:: db
-\1HP:: dw
-\1BoxLevel:: db
-\1Status:: db
-\1Type::
-\1Type1:: db
-\1Type2:: db
-\1CatchRate:: db
-\1Moves:: ds NUM_MOVES
-\1DVs:: ds 2
-\1Level:: db
-\1MaxHP:: dw
-\1Attack:: dw
-\1Defense:: dw
-\1Speed:: dw
-\1Special:: dw
-\1PP:: ds NUM_MOVES
-ENDM
-
-
-SECTION "WRAM Bank 0", WRAM0
-
-wc000:: ds 1
-wc001:: ds 1
-wc002:: ds 1
-wc003:: ds 1
-wc004:: ds 1
-wc005:: ds 1
-wc006:: ds 8
-wc00e:: ds 4
-wc012:: ds 4
-wc016:: ds 16
-wc026:: ds 1
-wc027:: ds 1
-wc028:: ds 2
-wc02a:: ds 1
-wc02b:: ds 1
-wc02c:: ds 1
-wc02d:: ds 1
-wc02e:: ds 8
-wc036:: ds 8
-wc03e:: ds 8
-wc046:: ds 8
-wc04e:: ds 8
-wc056:: ds 8
-wc05e:: ds 8
-wc066:: ds 8
-wc06e:: ds 8
-wc076:: ds 8
-wc07e:: ds 8
-wc086:: ds 8
-wc08e:: ds 8
-wc096:: ds 8
-wc09e:: ds 8
-wc0a6:: ds 8
-wc0ae:: ds 8
-wc0b6:: ds 8
-wc0be:: ds 8
-wc0c6:: ds 8
-wc0ce:: ds 1
-wc0cf:: ds 1
-wc0d0:: ds 1
-wc0d1:: ds 1
-wc0d2:: ds 1
-wc0d3:: ds 1
-wc0d4:: ds 1
-wc0d5:: ds 1
-wc0d6:: ds 8
-wc0de:: ds 8
-wc0e6:: ds 1
-wc0e7:: ds 1
-wc0e8:: ds 1
-wc0e9:: ds 1
-wc0ea:: ds 1
-wc0eb:: ds 1
-wc0ec:: ds 1
-wc0ed:: ds 1
-wc0ee:: ds 1
-wc0ef:: ds 1
-wc0f0:: ds 1
-wc0f1:: ds 1
-wc0f2:: ds 14
-
-
-SECTION "Sprite State Data", WRAM0[$c100]
-
-wSpriteStateData1:: ; c100
-; data for all sprites on the current map
-; holds info for 16 sprites with $10 bytes each
-; player sprite is always sprite 0
-; C1x0: picture ID (fixed, loaded at map init)
-; C1x1: movement status (0: uninitialized, 1: ready, 2: delayed, 3: moving)
-; C1x2: sprite image index (changed on update, $ff if off screen, includes facing direction, progress in walking animation and a sprite-specific offset)
-; C1x3: Y screen position delta (-1,0 or 1; added to c1x4 on each walking animation update)
-; C1x4: Y screen position (in pixels, always 4 pixels above grid which makes sprites appear to be in the center of a tile)
-; C1x5: X screen position delta (-1,0 or 1; added to c1x6 on each walking animation update)
-; C1x6: X screen position (in pixels, snaps to grid if not currently walking)
-; C1x7: intra-animation-frame counter (counting upwards to 4 until c1x8 is incremented)
-; C1x8: animation frame counter (increased every 4 updates, hold four states (totalling to 16 walking frames)
-; C1x9: facing direction (0: down, 4: up, 8: left, $c: right)
-; C1xA
-; C1xB
-; C1xC
-; C1xD
-; C1xE
-; C1xF
- ds $10 * $10
-
-
-SECTION "Sprite State Data 2", WRAM0[$c200]
-
-wSpriteStateData2:: ; c200
-; more data for all sprites on the current map
-; holds info for 16 sprites with $10 bytes each
-; player sprite is always sprite 0
-; C2x0: walk animation counter (counting from $10 backwards when moving)
-; C2x1:
-; C2x2: Y displacement (initialized at 8, supposed to keep moving sprites from moving too far, but bugged)
-; C2x3: X displacement (initialized at 8, supposed to keep moving sprites from moving too far, but bugged)
-; C2x4: Y position (in 2x2 tile grid steps, topmost 2x2 tile has value 4)
-; C2x5: X position (in 2x2 tile grid steps, leftmost 2x2 tile has value 4)
-; C2x6: movement byte 1 (determines whether a sprite can move, $ff:not moving, $fe:random movements, others unknown)
-; C2x7: (?) (set to $80 when in grass, else $0; may be used to draw grass above the sprite)
-; C2x8: delay until next movement (counted downwards, status (c1x1) is set to ready if reached 0)
-; C2x9
-; C2xA
-; C2xB
-; C2xC
-; C2xD
-; C2xE: sprite image base offset (in video ram, player always has value 1, used to compute c1x2)
-; C2xF
- ds $10 * $10
-
-
-SECTION "OAM Buffer", WRAM0[$c300]
-
-wOAMBuffer:: ; c300
-; buffer for OAM data. Copied to OAM by DMA
- ds 4 * 40
-
-wTileMap:: ; c3a0
-; buffer for tiles that are visible on screen (20 columns by 18 rows)
- ds 20 * 18
-
-wSerialPartyMonsPatchList:: ; c508
-; list of indexes to patch with SERIAL_NO_DATA_BYTE after transfer
-
-wTileMapBackup:: ; c508
-; buffer for temporarily saving and restoring current screen's tiles
-; (e.g. if menus are drawn on top)
-; ds 20 * 18
-
- ds 200
-
-wSerialEnemyMonsPatchList:: ; c5d0
-; list of indexes to patch with SERIAL_NO_DATA_BYTE after transfer
- ds 200
-
- ds 80
-
-wTempPic::
-wOverworldMap:: ; c6e8
- ds 1300
-
-wScreenEdgeTiles:: ; cbfc
-; the tiles of the row or column to be redrawn by RedrawExposedScreenEdge
- ds 20 * 2
-
-; coordinates of the position of the cursor for the top menu item (id 0)
-wTopMenuItemY:: ; cc24
- ds 1
-wTopMenuItemX:: ; cc25
- ds 1
-
-wCurrentMenuItem:: ; cc26
-; 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
- ds 1
-
-wTileBehindCursor:: ; cc27
-; the tile that was behind the menu cursor's current location
- ds 1
-
-wMaxMenuItem:: ; cc28
-; id of the bottom menu item
- ds 1
-
-wMenuWatchedKeys:: ; cc29
-; bit mask of keys that the menu will respond to
- ds 1
-
-wLastMenuItem:: ; cc2a
-; id of previously selected menu item
- ds 1
-
-wcc2b:: ds 1
-wcc2c:: ds 1
-wcc2d:: ds 1
-
-wPlayerMoveListIndex:: ; cc2e
- ds 1
-
-wPlayerMonNumber:: ; cc2f
- ds 1
-
-wMenuCursorLocation:: ; cc30
-; the address of the menu cursor's current location within wTileMap
- ds 2
-
- ds 2
-
-wMenuJoypadPollCount:: ; cc34
-; how many times should HandleMenuInput poll the joypad state before it returns?
- ds 1
-
-wMenuItemToSwap:: ; cc35
-; id of menu item selected for swapping (counts from 1) (0 means that no menu item has been selected for swapping)
- ds 1
-
-wListScrollOffset:: ; cc36
-; offset of the current top menu item from the beginning of the list
-; keeps track of what section of the list is on screen
- ds 1
-
-wcc37:: ds 1
-
-wTradeCenterPointerTableIndex:: ; cc38
- ds 1
-
- ds 1
-
-wcc3a:: ds 1
-wcc3b:: ds 1
-
-wDoNotWaitForButtonPressAfterDisplayingText:: ; cc3c
-; if non-zero, skip waiting for a button press after displaying text in DisplayTextID
- ds 1
-
-wSerialSyncAndExchangeNybbleReceiveData:: ; cc3d
-; the final received nybble is stored here by Serial_SyncAndExchangeNybble
-
-wSerialExchangeNybbleTempReceiveData:: ; cc3d
-; temporary nybble used by Serial_ExchangeNybble
-
-wLinkMenuSelectionReceiveBuffer:: ; cc3d
-; two byte buffer
-; the received menu selection is stored twice
-
-wcc3d:: ds 1
-
-wSerialExchangeNybbleReceiveData:: ; cc3e
-; the final received nybble is stored here by Serial_ExchangeNybble
- ds 1
-
- ds 3
-
-wSerialExchangeNybbleSendData:: ; cc42
-; this nybble is sent when using Serial_SyncAndExchangeNybble or Serial_ExchangeNybble
-
-wLinkMenuSelectionSendBuffer:: ; cc42
-; two byte buffer
-; the menu selection byte is stored twice before sending
-
- ds 5
-
-wLinkTimeoutCounter:: ; cc47
-; 1 byte
-
-wUnknownSerialCounter:: ; cc47
-; 2 bytes
-
-wcc47:: ds 1
-wcc48:: ds 1
-
-wWhichTradeMonSelectionMenu:: ; cc49
-; $00 = player mons
-; $01 = enemy mons
-
-wcc49:: ds 1
-
-wMenuWrappingEnabled:: ; cc4a
-; 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
- ds 1
-
-wcc4b:: ds 2
-wcc4d:: ds 1
-
-wPredefID:: ; cc4e
- ds 1
-wPredefRegisters:: ; cc4f
- ds 6
-
-wTrainerHeaderFlagBit:: ; cc55
- ds 1
-
- ds 1
-
-wNPCMovementScriptPointerTableNum:: ; cc57
-; which NPC movement script pointer is being used
-; 0 if an NPC movement script is not running
- ds 1
-
-wNPCMovementScriptBank:: ; cc58
-; ROM bank of current NPC movement script
- ds 1
-
- ds 2
-
-wHallOfFame:: ; cc5b
-wBoostExpByExpAll:: ; cc5b
-wAnimationType:: ; cc5b
-; values between 0-6. Shake screen horizontally, shake screen vertically, blink Pokemon...
-
-wcc5b:: ds 1
-wcc5c:: ds 1
-wcc5d:: ds 1
-wcc5e:: ds 13
-
-wcc6b:: ds 14
-wcc79:: ds 30
-
-wNPCMovementDirections2:: ; cc97
-
-wSwitchPartyMonTempBuffer:: ; cc97
-; temporary buffer when swapping party mon data
- ds 10
-
-wcca1:: ds 49
-
-wRLEByteCount:: ; ccd2
- ds 1
-
-wSimulatedJoypadStatesEnd:: ; ccd3
-; 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
-
-wccd3:: ds 1
-wccd4:: ds 1
-
-; if [ccd5] != 1, the second AI layer is not applied
-wAILayer2Encouragement:: ; ccd5
- ds 1
- ds 1
-
-; current HP of player and enemy substitutes
-wPlayerSubstituteHP:: ; ccd7
- ds 1
-wEnemySubstituteHP:: ; ccd8
- ds 1
-
-wccd9:: ds 2
-
-wMoveMenuType:: ; ccdb
-; 0=regular, 1=mimic, 2=above message box (relearn, heal pp..)
- ds 1
-
-wPlayerSelectedMove:: ; ccdc
- ds 1
-wEnemySelectedMove:: ; ccdd
- ds 1
-
-wLinkBattleRandomNumberListIndex:: ; ccde
- ds 1
-
-wAICount:: ; ccdf
-; number of times remaining that AI action can occur
- ds 1
-
- ds 2
-
-wEnemyMoveListIndex:: ; cce2
- ds 1
-
-wcce3:: ds 1
-wcce4:: ds 1
-
-wTotalPayDayMoney:: ; cce5
-; total amount of money made using Pay Day during the current battle
- ds 3
-
-wSafariEscapeFactor:: ; cce8
- ds 1
-wSafariBaitFactor:: ; cce9
- ds 1;
-
- ds 1
-
-wcceb:: ds 1
-wccec:: ds 1
-
-wMonIsDisobedient:: ds 1 ; cced
-
-wPlayerDisabledMoveNumber:: ds 1 ; ccee
-wEnemyDisabledMoveNumber:: ds 1 ; ccef
-
-wccf0:: ds 1
-
-wPlayerUsedMove:: ds 1 ; ccf1
-wEnemyUsedMove:: ds 1 ; ccf2
-
-wccf3:: ds 1
-
-wMoveDidntMiss:: ds 1 ; ccf4
-
-wPartyFoughtCurrentEnemyFlags:: ; ccf5
-; flags that indicate which party members have fought the current enemy mon
- flag_array 6
-
-wccf6:: ds 1
-wccf7:: ds 14
-
-wUnknownSlotVar:: ; cd05
-
-wEnemyNumHits:: ; cd05
-; number of hits by enemy in attacks like Double Slap, etc.
-
-wEnemyBideAccumulatedDamage:: ; cd05
-; the amount of damage accumulated by the enemy while biding (2 bytes)
-
-ds 10
-
-wInGameTradeGiveMonSpecies:: ; cd0f
-
-wPlayerMonUnmodifiedLevel:: ; cd0f
- ds 1
-
-wInGameTradeTextPointerTablePointer:: ; cd10
-
-wPlayerMonUnmodifiedMaxHP:: ; cd10
- ds 2
-
-wInGameTradeTextPointerTableIndex:: ; cd12
-
-wPlayerMonUnmodifiedAttack:: ; cd12
- ds 1
-wInGameTradeGiveMonName:: ; cd13
- ds 1
-wPlayerMonUnmodifiedDefense:: ; cd14
- ds 2
-wPlayerMonUnmodifiedSpeed:: ; cd16
- ds 2
-wPlayerMonUnmodifiedSpecial:: ; cd18
- ds 2
-
-; stat modifiers for the player's current pokemon
-; value can range from 1 - 13 ($1 to $D)
-; 7 is normal
-
-wPlayerMonStatMods::
-wPlayerMonAttackMod:: ; cd1a
- ds 1
-wPlayerMonDefenseMod:: ; cd1b
- ds 1
-wPlayerMonSpeedMod:: ; cd1c
- ds 1
-wPlayerMonSpecialMod:: ; cd1d
- ds 1
-
-wInGameTradeReceiveMonName:: ; cd1e
-
-wPlayerMonAccuracyMod:: ; cd1e
- ds 1
-wPlayerMonEvasionMod:: ; cd1f
- ds 1
-
- ds 3
-
-wEnemyMonUnmodifiedLevel:: ; cd23
- ds 1
-wEnemyMonUnmodifiedMaxHP:: ; cd24
- ds 2
-wEnemyMonUnmodifiedAttack:: ; cd26
- ds 2
-wEnemyMonUnmodifiedDefense:: ; cd28
- ds 1
-
-wInGameTradeMonNick:: ; cd29
- ds 1
-
-wEnemyMonUnmodifiedSpeed:: ; cd2a
- ds 2
-wEnemyMonUnmodifiedSpecial:: ; cd2c
- ds 1
-
-wEngagedTrainerClass:: ; cd2d
- ds 1
-wEngagedTrainerSet:: ; cd2e
-; ds 1
-
-; stat modifiers for the enemy's current pokemon
-; value can range from 1 - 13 ($1 to $D)
-; 7 is normal
-
-wEnemyMonStatMods::
-wEnemyMonAttackMod:: ; cd2e
- ds 1
-wEnemyMonDefenseMod:: ; cd2f
- ds 1
-wEnemyMonSpeedMod:: ; cd30
- ds 1
-wEnemyMonSpecialMod:: ; cd31
- ds 1
-wEnemyMonAccuracyMod:: ; cd32
- ds 1
-wEnemyMonEvasionMod:: ; cd33
- ds 1
-
-wInGameTradeReceiveMonSpecies::
- ds 1
-
- ds 2
-
-wNPCMovementDirections2Index:: ; cd37
-
-wcd37:: ds 1
-
-wSimulatedJoypadStatesIndex:: ; cd38
-; the next simulated joypad state is at wSimulatedJoypadStatesEnd plus this value minus 1
-; 0 if the joypad state is not being simulated
- ds 1
-
-wWastedByteCD39:: ; cd39
-; written to but nothing ever reads it
- ds 1
-
-wWastedByteCD3A:: ; cd3a
-; written to but nothing ever reads it
- ds 1
-
-wOverrideSimulatedJoypadStatesMask:: ; cd3b
-; mask indicating which real button presses can override simulated ones
-; XXX is it ever not 0?
- ds 1
-
- ds 1
-
-wTradedPlayerMonSpecies:: ; cd3d
-
-wTradingWhichPlayerMon:: ; cd3d
-
-wChangeBoxSavedMapTextPointer:: ; cd3d
-
-wFlyAnimUsingCoordList:: ; cd3d
-
-wPlayerSpinInPlaceAnimFrameDelay:: ; cd3d
-
-wPlayerSpinWhileMovingUpOrDownAnimDeltaY:: ; cd3d
-
-wHiddenObjectFunctionArgument:: ; cd3d
-
-wSubtrahend:: ; cd3d
-; subtract (BCD) wSubtrahend, wSubtrahend+1, wSubtrahend+2
-
-wWhichTrade:: ; cd3d
-; which entry from TradeMons to select
-
-wTrainerSpriteOffset:: ; cd3d
- ds 1
-
-wTradedEnemyMonSpecies:: ; cd3e
-
-wTradingWhichEnemyMon:: ; cd3e
-
-wFlyAnimCounter:: ; cd3e
-
-wPlayerSpinInPlaceAnimFrameDelayDelta:: ; cd3e
-
-wPlayerSpinWhileMovingUpOrDownAnimMaxY:: ; cd3e
-
-wHiddenObjectFunctionRomBank:: ; cd3e
-
-wTrainerEngageDistance:: ; cd3e
- ds 1
-
-wNameOfPlayerMonToBeTraded:: ; cd3f
-
-wFlyAnimBirdSpriteImageIndex:: ; cd3f
-
-wPlayerSpinInPlaceAnimFrameDelayEndValue:: ; cd3f
-
-wPlayerSpinWhileMovingUpOrDownAnimFrameDelay:: ; cd3f
-
-wHiddenObjectIndex:: ; cd3f
-
-wTrainerFacingDirection:: ; cd3f
-wcd3f::
- ds 1
-
-wPlayerSpinInPlaceAnimSoundID:: ; cd40
-
-wHiddenObjectY:: ; cd40
-
-wTrainerScreenY:: ; cd40
- ds 1
-
-wTradedPlayerMonOT:: ; cd41
-
-wHiddenObjectX:: ; cd41
-
-wTrainerScreenX:: ; cd41
- ds 1
-
-wcd42:: ds 1
-wcd43:: ds 1
-wcd44:: ds 1
-wcd45:: ds 1
-wcd46:: ds 1
-wcd47:: ds 1
-wcd48:: ds 1
-wcd49:: ds 1
-wcd4a:: ds 1
-wcd4b:: ds 1
-
-wTradedPlayerMonOTID:: ; cd4c
-
-wcd4c:: ds 1
-wcd4d:: ds 1
-
-wTradedEnemyMonOT:: ; cd4e
-
-wcd4e:: ds 1
-wcd4f:: ds 1
-wcd50:: ds 9
-
-wTradedEnemyMonOTID:: ; cd59
- ds 2
-
-wcd5b:: ds 1
-wcd5c:: ds 1
-
-wMonPartySpriteSpecies:: ; cd5d
- ds 1
-
-wLeftGBMonSpecies:: ; cd5e
-; in the trade animation, the mon that leaves the left gameboy
- ds 1
-
-wRightGBMonSpecies:: ; cd5f
-; in the trade animation, the mon that leaves the right gameboy
- ds 1
-
-wFlags_0xcd60:: ; cd60
-; bit 0: is player engaged by trainer (to avoid being engaged by multiple trainers simultaneously)
-; bit 1: boulder dust animation (from using Strength) pending
-; 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)
- ds 1
-
- ds 9
-
-wcd6a:: ds 1
-
-wJoyIgnore:: ; cd6b
-; Set buttons are ignored.
- ds 1
-
-wcd6c:: ds 1
-wcd6d:: ds 4
-wcd71:: ds 1
-wcd72:: ds 5
-wcd77:: ds 1
-wcd78:: ds 9
-
-wSerialOtherGameboyRandomNumberListBlock:: ; cd81
-; buffer for transferring the random number list generated by the other gameboy
-
-wTileMapBackup2:: ; cd81
-; second buffer for temporarily saving and restoring current screen's tiles (e.g. if menus are drawn on top)
- ds 20 * 18
-
-wBuffer:: ; cee9
-; Temporary storage area of 30 bytes.
-wHPBarMaxHP:: ; cee9
- ds 2
-wHPBarOldHP:: ; ceeb
- ds 2
-wHPBarNewHP:: ; ceed
- ds 2
-wHPBarDelta:: ; ceef
- ds 1
-
-wcef0:: ds 1
-wcef1:: ds 12
-
-wHPBarHPDifference:: ; cefd
- ds 1
- ds 7
-
-wcf05:: ds 1
-wcf06:: ds 1
-
-wAnimSoundID:: ; cf07
-; sound ID during battle animations
- ds 1
-
-wcf08:: ds 1
-wcf09:: ds 1
-wcf0a:: ds 1
-wBattleResult:: ; cf0b
-; $00 - win
-; $01 - lose
-; $02 - draw
- ds 1
-
-wAutoTextBoxDrawingControl:: ; cf0c
-; bit 0: if set, DisplayTextID automatically draws a text box
- ds 1
-
-wcf0d:: ds 1
-wcf0e:: ds 1
-wcf0f:: ds 1
-
-wNPCMovementScriptFunctionNum:: ; cf10
-; which script function within the pointer table indicated by
-; wNPCMovementScriptPointerTableNum
- ds 1
-
-wcf11:: ds 1
-
-wPredefParentBank:: ; cf12
- ds 1
-
-wSpriteIndex:: ds 1
-
-wCurSpriteMovement2:: ; cf14
-; movement byte 2 of current sprite
- ds 1
-
- ds 2
-
-wNPCMovementScriptSpriteOffset:: ; cf17
-; sprite offset of sprite being controlled by NPC movement script
- ds 1
-
-wcf18:: ds 2
-
-wOnSGB:: ; cf1b
-; if running on SGB, it's 1, else it's 0
- ds 1
-
-wcf1c:: ds 1
-wcf1d:: ds 1
-wcf1e:: ds 1
-wcf1f:: ds 6
-wcf25:: ds 8
-wcf2d:: ds 1
-wcf2e:: ds 2
-wcf30:: ds 7
-wcf37:: ds 20
-wcf4b:: ds 1
-wcf4c:: ds 1
-wGainBoostedExp:: ; cf4d
- ds 1
- ds 17
-
-wGymCityName:: ; cf5f
-wStringBuffer1:: ; cf5f
- ds 16 + 1
-wGymLeaderName:: ; cf70
-wStringBuffer2:: ; cf70
- ds 16 + 1
-wStringBuffer3:: ; cf81
- ds 9 + 1
-
-wList:: ; cf8b
- ds 2
-
-wcf8d:: ds 1
-wcf8e:: ds 1
-
-wItemPrices:: ; cf8f
- ds 2
-
-wcf91:: ds 1
-
-wWhichPokemon:: ; cf92
-; which pokemon you selected
- ds 1
-
-wcf93:: ds 1
-
-wHPBarType:: ; cf94
-; type of HP bar
-; $00 = enemy HUD in battle
-; $01 = player HUD in battle / status screen
-; $02 = party menu
-
-wListMenuID:: ; cf94
-; ID used by DisplayListMenuID
- ds 1
-
-wcf95:: ds 1
-wcf96:: ds 1
-wcf97:: ds 1
-
-; LoadMonData copies mon data here
-wLoadedMon:: party_struct wLoadedMon ; cf98
-
-wFontLoaded:: ; cfc4
-; 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.
- ds 1
-
-wWalkCounter:: ; cfc5
-; walk animation counter
- ds 1
-
-wTileInFrontOfPlayer:: ; cfc6
-; background tile number in front of the player (either 1 or 2 steps ahead)
- ds 1
-
-wMusicHeaderPointer:: ; cfc7
-; (the current music channel address - $4000) / 3
- ds 1
-
-wcfc8:: ds 1
-wcfc9:: ds 1
-wcfca:: ds 1
-
-wUpdateSpritesEnabled:: ; cfcb
-; $01 enables UpdateSprites; anything else disables it
- ds 1
-
-W_ENEMYMOVENUM:: ; cfcc
- ds 1
-W_ENEMYMOVEEFFECT:: ; cfcd
- ds 1
-W_ENEMYMOVEPOWER:: ; cfce
- ds 1
-W_ENEMYMOVETYPE:: ; cfcf
- ds 1
-W_ENEMYMOVEACCURACY:: ; cfd0
- ds 1
-W_ENEMYMOVEMAXPP:: ; cfd1
- ds 1
-W_PLAYERMOVENUM:: ; cfd2
- ds 1
-W_PLAYERMOVEEFFECT:: ; cfd3
- ds 1
-W_PLAYERMOVEPOWER:: ; cfd4
- ds 1
-W_PLAYERMOVETYPE:: ; cfd5
- ds 1
-W_PLAYERMOVEACCURACY:: ; cfd6
- ds 1
-W_PLAYERMOVEMAXPP:: ; cfd7
- ds 1
-
-
-wEnemyMonSpecies2:: ; cfd8
- ds 1
-wBattleMonSpecies2:: ; cfd9
- ds 1
-
-wEnemyMonNick:: ds 11 ; cfda
-
-wEnemyMon:: ; cfe5
-; The wEnemyMon struct reaches past 0xcfff,
-; the end of wram bank 0 on cgb.
-; This has no significance on dmg, where wram
-; isn't banked (c000-dfff is contiguous).
-; However, recent versions of rgbds have replaced
-; dmg-style wram with cgb wram banks.
-
-; Until this is fixed, this struct will have
-; to be declared manually.
-
-wEnemyMonSpecies:: db
-wEnemyMonHP:: dw
-wEnemyMonPartyPos::
-wEnemyMonBoxLevel:: db
-wEnemyMonStatus:: db
-wEnemyMonType::
-wEnemyMonType1:: db
-wEnemyMonType2:: db
-wEnemyMonCatchRate_NotReferenced:: db
-wEnemyMonMoves:: ds NUM_MOVES
-wEnemyMonDVs:: ds 2
-wEnemyMonLevel:: db
-wEnemyMonMaxHP:: dw
-wEnemyMonAttack:: dw
-wEnemyMonDefense:: dw
-wEnemyMonSpeed:: dw
-wEnemyMonSpecial:: dw
-wEnemyMonPP:: ds 2 ; NUM_MOVES - 2
-SECTION "WRAM Bank 1", WRAMX, BANK[1]
- ds 2 ; NUM_MOVES - 2
-
-wEnemyMonBaseStats:: ds 5
-wEnemyMonCatchRate:: ds 1
-wEnemyMonBaseExp:: ds 1
-
-wBattleMonNick:: ds 11 ; d009
-wBattleMon:: battle_struct wBattleMon ; d014
-
-
-W_TRAINERCLASS:: ; d031
- ds 1
-
- ds 1
-
-wTrainerPicPointer:: ; wd033
- ds 2
- ds 1
-wd036:: ds 16
-wd046:: ds 1
-wd047:: ds 1
-wd048:: ds 2
-
-W_TRAINERNAME:: ; d04a
-; 13 bytes for the letters of the opposing trainer
-; the name is terminated with $50 with possible
-; unused trailing letters
- ds 13
-
-W_ISINBATTLE:: ; d057
-; no battle, this is 0
-; wild battle, this is 1
-; trainer battle, this is 2
- ds 1
-
-wPartyGainExpFlags:: ; d058
-; flags that indicate which party members should be be given exp when GainExperience is called
- flag_array 6
-
-W_CUROPPONENT:: ; d059
-; in a wild battle, this is the species of pokemon
-; in a trainer battle, this is the trainer class + $C8
- ds 1
-
-W_BATTLETYPE:: ; d05a
-; in normal battle, this is 0
-; in old man battle, this is 1
-; in safari battle, this is 2
- ds 1
-
-wDamageMultipliers:: ; d05b
-; bits 0-6: Effectiveness
- ; $0 = immune
- ; $5 = not very effective
- ; $a = neutral
- ; $14 = super-effective
-; bit 7: STAB
- ds 1
-
-W_LONEATTACKNO:: ; d05c
-; which entry in LoneAttacks to use
-W_GYMLEADERNO:: ; d05c
-; it's actually the same thing as ^
- ds 1
-W_TRAINERNO:: ; d05d
-; which instance of [youngster, lass, etc] is this?
- ds 1
-
-wCriticalHitOrOHKO:: ; d05e
-; $00 = normal attack
-; $01 = critical hit
-; $02 = successful OHKO
-; $ff = failed OHKO
- ds 1
-
-W_MOVEMISSED:: ; d05f
- ds 1
-
-wPlayerStatsToDouble:: ; d060
-; always 0
- ds 1
-
-wPlayerStatsToHalve:: ; d061
-; always 0
- ds 1
-
-W_PLAYERBATTSTATUS1:: ; d062
-; 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
- ds 1
-
-W_PLAYERBATTSTATUS2:: ; d063
-; 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
- ds 1
-
-W_PLAYERBATTSTATUS3:: ; d064
-; bit 0 - toxic
-; bit 1 - light screen
-; bit 2 - reflect
-; bit 3 - tranformed
- ds 1
-
-wEnemyStatsToDouble:: ; d065
-; always 0
- ds 1
-
-wEnemyStatsToHalve:: ; d066
-; always 0
- ds 1
-
-W_ENEMYBATTSTATUS1:: ; d067
- ds 1
-W_ENEMYBATTSTATUS2:: ; d068
- ds 1
-W_ENEMYBATTSTATUS3:: ; d069
- ds 1
-
-wPlayerNumAttacksLeft::
-; when the player is attacking multiple times, the number of attacks left
- ds 1
-
-W_PLAYERCONFUSEDCOUNTER:: ; wd06b
- ds 1
-
-W_PLAYERTOXICCOUNTER:: ; d06c
- ds 1
-W_PLAYERDISABLEDMOVE:: ; d06d
-; high nibble: which move is disabled (1-4)
-; low nibble: disable turns left
- ds 1
-
- ds 1
-
-wEnemyNumAttacksLeft:: ; d06f
-; when the enemy is attacking multiple times, the number of attacks left
- ds 1
-
-W_ENEMYCONFUSEDCOUNTER:: ; wd070
- ds 1
-
-W_ENEMYTOXICCOUNTER:: ; d071
- ds 1
-W_ENEMYDISABLEDMOVE:: ; d072
-; high nibble: which move is disabled (1-4)
-; low nibble: disable turns left
- ds 1
-
- ds 1
-
-wPlayerNumHits:: ; d074
-; number of hits by player in attacks like Double Slap, etc.
-
-wPlayerBideAccumulatedDamage:: ; d074
-; the amount of damage accumulated by the player while biding (2 bytes)
-
-wUnknownSerialCounter2:: ; d075
-; 2 bytes
-
- ds 4
-
-wEscapedFromBattle::
-; non-zero when an item or move that allows escape from battle was used
- ds 1
-
-wd079::
-wAmountMoneyWon:: ds 1 ; wd079 - wd07b
-wd07a:: ds 1
- ds 1
-
-W_ANIMATIONID:: ; d07c
-; ID number of the current battle animation
- ds 1
-
-wd07d:: ds 1
-wd07e:: ds 3
-
-; base coordinates of frame block
-W_BASECOORDX:: ; d081
- ds 1
-W_BASECOORDY:: ; d082
- ds 1
-
-; low health alarm counter/enable
-; high bit = enable, others = timer to cycle frequencies
-wLowHealthAlarm:: ds 1 ; d083
-
-W_FBTILECOUNTER:: ; d084
-; counts how many tiles of the current frame block have been drawn
- ds 1
-
-wd085:: ds 1
-
-W_SUBANIMFRAMEDELAY:: ; d086
-; duration of each frame of the current subanimation in terms of screen refreshes
- ds 1
-W_SUBANIMCOUNTER:: ; d087
-; counts the number of subentries left in the current subanimation
- ds 1
-
-wd088:: ds 1
-
-W_NUMFBTILES:: ; d089
-; number of tiles in current battle animation frame block
- ds 1
-
-wTradedMonMovingRight:: ; d08a
-; $01 if mon is moving from left gameboy to right gameboy; $00 if vice versa
-
-wd08a:: ds 1
-
-wTownMapSpriteBlinkingCounter:: ; d08b
-
-wPartyMonAnimCounter:: ; d08b
-
-W_SUBANIMTRANSFORM:: ; d08b
-; 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
- ds 1
-
-wEndBattleWinTextPointer:: ; d08c
- ds 2
-
-wEndBattleLoseTextPointer:: ; d08e
- ds 2
-
- ds 2
-
-wEndBattleTextRomBank:: ; d092
- ds 1
-
- ds 1
-
-W_SUBANIMADDRPTR:: ; d094
-; the address _of the address_ of the current subanimation entry
- ds 2
-W_SUBANIMSUBENTRYADDR:: ; d096
-; the address of the current subentry of the current subanimation
- ds 2
-
- ds 2
-
-wd09a:: ds 1
-
-wTownMapSpriteBlinkingEnabled:: ; d09b
-; non-zero when enabled. causes nest locations to blink on and off.
-; the town selection cursor will blink regardless of what this value is
-
-wd09b:: ds 1
-
-W_FBDESTADDR:: ; d09c
-; current destination address in OAM for frame blocks (big endian)
- ds 2
-
-W_FBMODE:: ; d09e
-; 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
-; 04: delay, without cleaning OAM buffer, and do not advance [W_FBDESTADDR], so that the next frame block will overwrite this one
-; sprite data is written column by column, each byte contains 8 columns (one for ech bit)
-; for 2bpp sprites, pairs of two consecutive bytes (i.e. pairs of consecutive rows of sprite data)
-; contain the upper and lower bit of each of the 8 pixels, respectively
- ds 1
-
-wNewTileBlockID:: ; d09f
-
-wd09f:: ds 1
-wd0a0:: ds 1
-
-W_SPRITECURPOSX:: ; d0a1
- ds 1
-W_SPRITECURPOSY:: ; d0a2
- ds 1
-W_SPRITEWITDH:: ; d0a3
- ds 1
-W_SPRITEHEIGHT:: ; d0a4
- ds 1
-W_SPRITEINPUTCURBYTE:: ; d0a5
-; current input byte
- ds 1
-W_SPRITEINPUTBITCOUNTER:: ; d0a6
-; bit offset of last read input bit
- ds 1
-
-W_SPRITEOUTPUTBITOFFSET:: ; d0a7; 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
- ds 1
-
-W_SPRITELOADFLAGS:: ; d0a8
-; bit 0 determines used buffer (0 -> $a188, 1 -> $a310)
-; bit 1 loading last sprite chunk? (there are at most 2 chunks per load operation)
- ds 1
-W_SPRITEUNPACKMODE:: ; d0a9
- ds 1
-W_SPRITEFLIPPED:: ; d0aa
- ds 1
-
-W_SPRITEINPUTPTR:: ; d0ab
-; pointer to next input byte
- ds 2
-W_SPRITEOUTPUTPTR:: ; d0ad
-; pointer to current output byte
- ds 2
-W_SPRITEOUTPUTPTRCACHED:: ; d0af
-; used to revert pointer for different bit offsets
- ds 2
-W_SPRITEDECODETABLE0PTR:: ; d0b1
-; pointer to differential decoding table (assuming initial value 0)
- ds 2
-W_SPRITEDECODETABLE1PTR:: ; d0b3
-; pointer to differential decoding table (assuming initial value 1)
- ds 2
-
-wd0b5:: ds 1
-
-wNameListType:: ; d0b6
- ds 1
-
-wPredefBank:: ; d0b7
- ds 1
-
-W_MONHEADER:: ; d0b8
-W_MONHDEXNUM:: ; d0b8
- ds 1
-
-W_MONHBASESTATS:: ; d0b9
-W_MONHBASEHP:: ; d0b9
- ds 1
-W_MONHBASEATTACK:: ; d0ba
- ds 1
-W_MONHBASEDEFENSE:: ; d0bb
- ds 1
-W_MONHBASESPEED:: ; d0bc
- ds 1
-W_MONHBASESPECIAL:: ; d0bd
- ds 1
-
-W_MONHTYPES:: ; d0be
-W_MONHTYPE1:: ; d0be
- ds 1
-W_MONHTYPE2:: ; d0bf
- ds 1
-
-W_MONHCATCHRATE:: ; d0c0
- ds 1
-W_MONHBASEXP:: ; d0c1
- ds 1
-W_MONHSPRITEDIM:: ; d0c2
- ds 1
-W_MONHFRONTSPRITE:: ; d0c3
- ds 2
-W_MONHBACKSPRITE:: ; d0c5
- ds 2
-
-W_MONHMOVES:: ; d0c7
- ds 4
-
-W_MONHGROWTHRATE:: ; d0cb
- ds 1
-
-W_MONHLEARNSET:: ; d0cc
-; bit field
- flag_array 50 + 5
- ds 1
-
-wd0d4:: ds 3
-
-W_MONHPADDING:: ; d0d7
-
-
-W_DAMAGE:: ; d0d7
- ds 2
-
-ds 2
-
-wRepelRemainingSteps:: ; wd0db
- ds 1
-
-wMoves:: ; wd0dc
-; list of moves for FormatMovesString
- ds 4
-
-wMoveNum:: ; d0e0
- ds 1
-
-wMovesString:: ; d0e1
- ds 56
-
-wd119:: ds 1
-
-wWalkBikeSurfStateCopy:: ; d11a
-; wWalkBikeSurfState is sometimes copied here, but it doesn't seem to be used for anything
- ds 1
-
-wd11b:: ds 1
-wd11c:: ds 1
-wd11d:: ds 1
-wd11e:: ds 1
-wd11f:: ds 1
-
-wNumRunAttempts::
-; number of times the player has tried to run from battle
- ds 1
-
-wd121:: ds 1
-wd122:: ds 2
-wd124:: ds 1
-
-wTextBoxID:: ; d125
- ds 1
-
-wd126:: ds 1
-
-W_CURENEMYLVL:: ; d127
- ds 1
-
-wd128:: ds 1
-wd129:: ds 1
-wd12a:: ds 1
-
-wLinkState:: ; d12b
- ds 1
-
-wTwoOptionMenuID:: ds 1
-wd12d:: ds 1
-wd12e:: ds 1
-wd12f:: ds 1
-wd130:: ds 1
-wd131:: ds 1
-wd132:: ds 1
-wd133:: ds 6
-wd139:: ds 1
-
-wIgnoreInputCounter:: ; d13a
-; counts downward each frame
-; when it hits 0, bit 5 (ignore input bit) of wd730 is reset
- ds 1
-
-wStepCounter:: ; d13b
-; counts down once every step
- ds 1
-
-wNumberOfNoRandomBattleStepsLeft:: ; d13c
-; after a battle, you have at least 3 steps before a random battle can occur
- ds 1
-
-W_PRIZE1:: ; d13d
- ds 1
-W_PRIZE2:: ; d13e
- ds 1
-W_PRIZE3:: ; d13f
- ds 1
-
- ds 1
-
-wSerialRandomNumberListBlock:: ; d141
-; the first 7 bytes are the preamble
-
-wd141:: ds 2
-wd143:: ds 2
-wd145:: ds 3
-
-wLinkBattleRandomNumberList:: ; d148
-; shared list of 9 random numbers, indexed by wLinkBattleRandomNumberListIndex
- ds 10
-
-wSerialPlayerDataBlock:: ; d152
-; the first 6 bytes are the preamble
-
-wd152:: ds 1
-wd153:: ds 3
-wd156:: ds 1
-wd157:: ds 1
-
-
-wPlayerName:: ; d158
- ds 11
-
-wPartyCount:: ds 1 ; d163
-wPartySpecies:: ds PARTY_LENGTH ; d164
-wPartyEnd:: ds 1 ; d16a
-
-wPartyMons::
-wPartyMon1:: party_struct wPartyMon1 ; d16b
-wPartyMon2:: party_struct wPartyMon2 ; d197
-wPartyMon3:: party_struct wPartyMon3 ; d1c3
-wPartyMon4:: party_struct wPartyMon4 ; d1ef
-wPartyMon5:: party_struct wPartyMon5 ; d21b
-wPartyMon6:: party_struct wPartyMon6 ; d247
-
-wPartyMonOT:: ds 11 * PARTY_LENGTH ; d273
-wPartyMonNicks:: ds 11 * PARTY_LENGTH ; d2b5
-
-
-wPokedexOwned:: ; d2f7
- flag_array NUM_POKEMON
-wPokedexOwnedEnd::
-
-wPokedexSeen:: ; d30a
- flag_array NUM_POKEMON
-wPokedexSeenEnd::
-
-
-wNumBagItems:: ; d31d
- ds 1
-wBagItems:: ; d31e
-; item, quantity
- ds 20 * 2
- ds 1 ; end
-
-wPlayerMoney:: ; d347
- ds 3 ; BCD
-
-W_RIVALNAME:: ; d34a
- ds 11
-
-W_OPTIONS:: ; d355
-; 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
- ds 1
-
-W_OBTAINEDBADGES:: ; d356
- ds 1
-
- ds 1
-
-wd358:: ds 1
-
-wPlayerID:: ; d359
- ds 2
-
-wd35b:: ds 1
-wd35c:: ds 1
-
-wMapPalOffset:: ; d35d
-; 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
- ds 1
-
-W_CURMAP:: ; d35e
- ds 1
-
-wCurrentTileBlockMapViewPointer:: ; d35f
-; pointer to the upper left corner of the current view in the tile block map
- ds 2
-
-W_YCOORD:: ; d361
-; player’s position on the current map
- ds 1
-
-W_XCOORD:: ; d362
- ds 1
-
-W_YBLOCKCOORD:: ; d363
-; player's y position (by block)
- ds 1
-
-W_XBLOCKCOORD:: ; d364
- ds 1
-
-wLastMap:: ; d365
- ds 1
-
-wd366:: ds 1
-
-W_CURMAPTILESET:: ; d367
- ds 1
-
-W_CURMAPHEIGHT:: ; d368
-; blocks
- ds 1
-
-W_CURMAPWIDTH:: ; d369
-; blocks
- ds 1
-
-W_MAPDATAPTR:: ; d36a
- ds 2
-
-W_MAPTEXTPTR:: ; d36c
- ds 2
-
-W_MAPSCRIPTPTR:: ; d36e
- ds 2
-
-W_MAPCONNECTIONS:: ; d370
-; connection byte
- ds 1
-
-W_MAPCONN1PTR:: ; d371
- ds 1
-
-wd372:: ds 1
-wd373:: ds 1
-wd374:: ds 1
-wd375:: ds 1
-wd376:: ds 1
-wd377:: ds 1
-wd378:: ds 1
-wd379:: ds 1
-wd37a:: ds 1
-wd37b:: ds 1
-
-W_MAPCONN2PTR:: ; d37c
- ds 1
-
-wd37d:: ds 1
-wd37e:: ds 1
-wd37f:: ds 1
-wd380:: ds 1
-wd381:: ds 1
-wd382:: ds 1
-wd383:: ds 1
-wd384:: ds 1
-wd385:: ds 1
-wd386:: ds 1
-
-W_MAPCONN3PTR:: ; d387
- ds 1
-
-wd388:: ds 1
-wd389:: ds 1
-wd38a:: ds 1
-wd38b:: ds 1
-wd38c:: ds 1
-wd38d:: ds 1
-wd38e:: ds 1
-wd38f:: ds 1
-wd390:: ds 1
-wd391:: ds 1
-
-W_MAPCONN4PTR:: ; d392
- ds 1
-
-wd393:: ds 1
-wd394:: ds 1
-wd395:: ds 1
-wd396:: ds 1
-wd397:: ds 1
-wd398:: ds 1
-wd399:: ds 1
-wd39a:: ds 1
-wd39b:: ds 1
-wd39c:: ds 1
-
-W_SPRITESET:: ; d39d
-; sprite set for the current map (11 sprite picture ID's)
- ds 11
-
-W_SPRITESETID:: ; d3a8
-; sprite set ID for the current map
- ds 1
-
-wd3a9:: ds 1
-wd3aa:: ds 3
-wd3ad:: ds 1
-
-wNumberOfWarps:: ; d3ae
-; number of warps in current map
- ds 1
-
-wWarpEntries:: ; d3af
-; current map warp entries
- ds 128
-
-wDestinationWarpID:: ; d42f
-; if $ff, the player's coordinates are not updated when entering the map
- ds 1
-
-wd430:: ds 1 ; d430
-wd431:: ds 1 ; d431
-
- ds 3
-
-wd435:: ds 1
-wd436:: ds 1
-
- ds 60
-
-wd472:: ds 1
-wd473:: ds 1
-
- ds 61
-
-wd4b0:: ds 1
-wd4b1:: ds 32
-wd4d1:: ds 16
-
-W_NUMSPRITES:: ; d4e1
-; number of sprites on the current map
- ds 1
-
-; 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
-wYOffsetSinceLastSpecialWarp:: ; d4e2
- ds 1
-wXOffsetSinceLastSpecialWarp:: ; d4e3
- ds 1
-
-W_MAPSPRITEDATA:: ; d4e4
-; two bytes per sprite (movement byte 2, text ID)
- ds 32
-
-W_MAPSPRITEEXTRADATA:: ; d504
-; two bytes per sprite (trainer class/item ID, trainer set ID)
- ds 32
-
-wd524:: ds 1
-wd525:: ds 1
-
-wMapViewVRAMPointer:: ; d526
-; the address of the upper left corner of the visible portion of the BG tile map in VRAM
- ds 2
-
-wd528:: ds 1
-wd529:: ds 1
-wd52a:: ds 1
-
-W_TILESETBANK:: ; d52b
- ds 1
-
-W_TILESETBLOCKSPTR:: ; d52c
-; maps blocks (4x4 tiles) to tiles
- ds 2
-
-W_TILESETGFXPTR:: ; d52e
- ds 2
-
-W_TILESETCOLLISIONPTR:: ; d530
-; list of all walkable tiles
- ds 2
-
-W_TILESETTALKINGOVERTILES:: ; d532
- ds 3
-
-W_GRASSTILE:: ; d535
- ds 1
-
- ds 4
-
-wNumBoxItems:: ; d53a
- ds 1
-wBoxItems:: ; d53b
-; item, quantity
- ds 50 * 2
- ds 1 ; end
-
-wd5a0:: ds 2
-wd5a2:: ds 1
-wd5a3:: ds 1
-
-wPlayerCoins:: ; d5a4
- ds 2 ; BCD
-
-W_MISSABLEOBJECTFLAGS:: ; d5a6
-; bit array of missable objects. set = removed
- ds 39
-
-wd5cd:: ds 1
-
-W_MISSABLEOBJECTLIST:: ; d5ce
-; each entry consists of 2 bytes
-; * the sprite ID (depending on the current map)
-; * the missable object index (global, used for W_MISSABLEOBJECTFLAGS)
-; terminated with $FF
- ds 17 * 2
-
-W_GAMEPROGRESSFLAGS:: ; d5f0
-; $c8 bytes
- ds 0
-
-W_OAKSLABCURSCRIPT:: ; d5f0
- ds 1
-W_PALLETTOWNCURSCRIPT:: ; d5f1
- ds 1
- ds 1
-W_BLUESHOUSECURSCRIPT:: ; d5f3
- ds 1
-W_VIRIDIANCITYCURSCRIPT:: ; d5f4
- ds 1
- ds 2
-W_PEWTERCITYCURSCRIPT:: ; d5f7
- ds 1
-W_ROUTE3CURSCRIPT:: ; d5f8
- ds 1
-W_ROUTE4CURSCRIPT:: ; d5f9
- ds 1
- ds 1
-W_VIRIDIANGYMCURSCRIPT:: ; d5fb
- ds 1
-W_PEWTERGYMCURSCRIPT:: ; d5fc
- ds 1
-W_CERULEANGYMCURSCRIPT:: ; d5fd
- ds 1
-W_VERMILIONGYMCURSCRIPT:: ; d5fe
- ds 1
-W_CELADONGYMCURSCRIPT:: ; d5ff
- ds 1
-W_ROUTE6CURSCRIPT:: ; d600
- ds 1
-W_ROUTE8CURSCRIPT:: ; d601
- ds 1
-W_ROUTE24CURSCRIPT:: ; d602
- ds 1
-W_ROUTE25CURSCRIPT:: ; d603
- ds 1
-W_ROUTE9CURSCRIPT:: ; d604
- ds 1
-W_ROUTE10CURSCRIPT:: ; d605
- ds 1
-W_MTMOON1CURSCRIPT:: ; d606
- ds 1
-W_MTMOON3CURSCRIPT:: ; d607
- ds 1
-W_SSANNE8CURSCRIPT:: ; d608
- ds 1
-W_SSANNE9CURSCRIPT:: ; d609
- ds 1
-W_ROUTE22CURSCRIPT:: ; d60a
- ds 1
- ds 1
-W_REDSHOUSE2CURSCRIPT:: ; d60c
- ds 1
-W_VIRIDIANMARKETCURSCRIPT:: ; d60d
- ds 1
-W_ROUTE22GATECURSCRIPT:: ; d60e
- ds 1
-W_CERULEANCITYCURSCRIPT:: ; d60f
- ds 1
- ds 7
-W_SSANNE5CURSCRIPT:: ; d617
- ds 1
-W_VIRIDIANFORESTCURSCRIPT:: ; d618
- ds 1
-W_MUSEUM1FCURSCRIPT:: ; d619
- ds 1
-W_ROUTE13CURSCRIPT:: ; d61a
- ds 1
-W_ROUTE14CURSCRIPT:: ; d61b
- ds 1
-W_ROUTE17CURSCRIPT:: ; d61c
- ds 1
-W_ROUTE19CURSCRIPT:: ; d61d
- ds 1
-W_ROUTE21CURSCRIPT:: ; d61e
- ds 1
-W_SAFARIZONEENTRANCECURSCRIPT:: ; d61f
- ds 1
-W_ROCKTUNNEL2CURSCRIPT:: ; d620
- ds 1
-W_ROCKTUNNEL1CURSCRIPT:: ; d621
- ds 1
- ds 1
-W_ROUTE11CURSCRIPT:: ; d623
- ds 1
-W_ROUTE12CURSCRIPT:: ; d624
- ds 1
-W_ROUTE15CURSCRIPT:: ; d625
- ds 1
-W_ROUTE16CURSCRIPT:: ; d626
- ds 1
-W_ROUTE18CURSCRIPT:: ; d627
- ds 1
-W_ROUTE20CURSCRIPT:: ; d628
- ds 1
-W_SSANNE10CURSCRIPT:: ; d629
- ds 1
-W_VERMILIONCITYCURSCRIPT:: ; d62a
- ds 1
-W_POKEMONTOWER2CURSCRIPT:: ; d62b
- ds 1
-W_POKEMONTOWER3CURSCRIPT:: ; d62c
- ds 1
-W_POKEMONTOWER4CURSCRIPT:: ; d62d
- ds 1
-W_POKEMONTOWER5CURSCRIPT:: ; d62e
- ds 1
-W_POKEMONTOWER6CURSCRIPT:: ; d62f
- ds 1
-W_POKEMONTOWER7CURSCRIPT:: ; d630
- ds 1
-W_ROCKETHIDEOUT1CURSCRIPT:: ; d631
- ds 1
-W_ROCKETHIDEOUT2CURSCRIPT:: ; d632
- ds 1
-W_ROCKETHIDEOUT3CURSCRIPT:: ; d633
- ds 1
-W_ROCKETHIDEOUT4CURSCRIPT:: ; d634
- ds 2
-W_ROUTE6GATECURSCRIPT:: ; d636
- ds 1
-W_ROUTE8GATECURSCRIPT:: ; d637
- ds 2
-W_CINNABARISLANDCURSCRIPT:: ; d639
- ds 1
-W_MANSION1CURSCRIPT:: ; d63a
- ds 2
-W_MANSION2CURSCRIPT:: ; d63c
- ds 1
-W_MANSION3CURSCRIPT:: ; d63d
- ds 1
-W_MANSION4CURSCRIPT:: ; d63e
- ds 1
-W_VICTORYROAD2CURSCRIPT:: ; d63f
- ds 1
-W_VICTORYROAD3CURSCRIPT:: ; d640
- ds 2
-W_FIGHTINGDOJOCURSCRIPT:: ; d642
- ds 1
-W_SILPHCO2CURSCRIPT:: ; d643
- ds 1
-W_SILPHCO3CURSCRIPT:: ; d644
- ds 1
-W_SILPHCO4CURSCRIPT:: ; d645
- ds 1
-W_SILPHCO5CURSCRIPT:: ; d646
- ds 1
-W_SILPHCO6CURSCRIPT:: ; d647
- ds 1
-W_SILPHCO7CURSCRIPT:: ; d648
- ds 1
-W_SILPHCO8CURSCRIPT:: ; d649
- ds 1
-W_SILPHCO9CURSCRIPT:: ; d64a
- ds 1
-W_HALLOFFAMEROOMCURSCRIPT:: ; d64b
- ds 1
-W_GARYCURSCRIPT:: ; d64c
- ds 1
-W_LORELEICURSCRIPT:: ; d64d
- ds 1
-W_BRUNOCURSCRIPT:: ; d64e
- ds 1
-W_AGATHACURSCRIPT:: ; d64f
- ds 1
-W_UNKNOWNDUNGEON3CURSCRIPT:: ; d650
- ds 1
-W_VICTORYROAD1CURSCRIPT:: ; d651
- ds 1
- ds 1
-W_LANCECURSCRIPT:: ; d653
- ds 1
- ds 4
-W_SILPHCO10CURSCRIPT:: ; d658
- ds 1
-W_SILPHCO11CURSCRIPT:: ; d659
- ds 1
- ds 1
-W_FUCHSIAGYMCURSCRIPT:: ; d65b
- ds 1
-W_SAFFRONGYMCURSCRIPT:: ; d65c
- ds 1
- ds 1
-W_CINNABARGYMCURSCRIPT:: ; d65e
- ds 1
-W_CELADONGAMECORNERCURSCRIPT:: ; d65f
- ds 1
-W_ROUTE16GATECURSCRIPT:: ; d660
- ds 1
-W_BILLSHOUSECURSCRIPT:: ; d661
- ds 1
-W_ROUTE5GATECURSCRIPT:: ; d662
- ds 1
-W_POWERPLANTCURSCRIPT:: ; d663
-; overload
- ds 0
-W_ROUTE7GATECURSCRIPT:: ; d663
-; overload
- ds 1
- ds 1
-W_SSANNE2CURSCRIPT:: ; d665
- ds 1
-W_SEAFOAMISLANDS4CURSCRIPT:: ; d666
- ds 1
-W_ROUTE23CURSCRIPT:: ; d667
- ds 1
-W_SEAFOAMISLANDS5CURSCRIPT:: ; d668
- ds 1
-W_ROUTE18GATECURSCRIPT:: ; d669
- ds 1
-
- ds 134
-
-wd6f0:: ds 14
-wd6fe:: ds 2
-
-wWalkBikeSurfState:: ; d700
-; $00 = walking
-; $01 = biking
-; $02 = surfing
- ds 1
-
- ds 10
-
-W_TOWNVISITEDFLAG:: ; d70b
- flag_array 13
-
-wSafariSteps:: ; d70d
-; starts at 502
- ds 2
-
-W_FOSSILITEM:: ; d70f
-; item given to cinnabar lab
- ds 1
-
-W_FOSSILMON:: ; d710
-; mon that will result from the item
- ds 1
-
- ds 2
-
-W_ENEMYMONORTRAINERCLASS:: ; d713
-; trainer classes start at $c8
- ds 1
-
-wPlayerJumpingYScreenCoordsIndex:: ; d714
- ds 1
-
-W_RIVALSTARTER:: ; d715
- ds 1
-
- ds 1
-
-W_PLAYERSTARTER:: ; d717
- ds 1
-
-wBoulderSpriteIndex:: ; d718
-; sprite index of the boulder the player is trying to push
- ds 1
-
-wLastBlackoutMap:: ; d719
- ds 1
-
-wDestinationMap:: ; d71a
-; destination map (for certain types of special warps, not ordinary walking)
- ds 1
-
-wd71b:: ds 1
-
-wTileInFrontOfBoulderAndBoulderCollisionResult:: ; d71c
-; 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)
- ds 1
-
-wDungeonWarpDestinationMap:: ; d71d
-; destination map for dungeon warps
- ds 1
-
-wWhichDungeonWarp:: ; d71e
-; which dungeon warp within the source map was used
- ds 1
-
-wd71f:: ds 9
-
-wd728::
-; bit 0: using Strength outside of battle
- ds 1
-
- ds 1
-
-wd72a:: ds 2
-
-wd72c:: ; d72c
-; bit 0: if not set, the 3 minimum steps between random battles have passed
- ds 1
-
-wd72d:: ds 1
-wd72e:: ds 2
-
-wd730::
-; bit 0: NPC sprite being moved by script
-; bit 5: ignore joypad input
-; bit 6: print text with no delay between each letter
-; bit 7: set if joypad states are being simulated in the overworld
- ds 1
-
- ds 1
-
-wd732:: ; d732
-; bit 0: play time being counted
-; bit 1: remnant of debug mode? not set by the game code.
-; if it is set
-; 1. skips most of Prof. Oak's speech, and uses NINTEN as the player's name and SONY as the rival's name
-; 2. does not have the player start in floor two of the playyer's house (instead sending them to [wLastMap])
-; 3. allows wild battles to be avoided by holding down B
-; 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)
- ds 1
-
-W_FLAGS_D733:: ; d733
-; bit 4: use variable [W_CURMAPSCRIPT] instead of the provided index for next frame's map script (used to start battle when talking to trainers)
-; bit 7: used fly out of battle
- ds 1
-
-wd734:: ds 2
-
-wd736:: ; d736
-; bit 0: check if the player is standing on a door and make him walk down a step if so
-; bit 1: the player is currently stepping down from a door
-; bit 2: standing on a warp
-; bit 6: jumping down a ledge
- ds 1
-
-wCompletedInGameTradeFlags:: ; d737
- ds 2
-
- ds 2
-
-wd73b:: ds 1
-wd73c:: ds 3
-
-wCardKeyDoorY:: ; d73f
- ds 1
-
-wCardKeyDoorX:: ; d740
- ds 1
-
- ds 2
-
-wd743:: ds 1
-wd744:: ds 3
-wd747:: ds 3
-wd74a:: ds 1
-
-wd74b:: ; d74b
-; bit 0: Prof. Oak has lead the player to the north end of his lab
-; bit 1: Prof. Oak has asked the player to choose a pokemon
-; bit 2: the player and the rival have received their pokemon
-; bit 3: the player has battled the rival in Oak's lab
-; bit 4: Prof. Oak has given the player 5 pokeballs
-; bit 5: received pokedex
- ds 1
-
-wd74c:: ds 2
-wd74e:: ds 3
-wd751:: ds 1
-wd752:: ds 2
-wd754:: ds 1
-wd755:: ds 5
-wd75a:: ds 1
-wd75b:: ds 3
-wd75e:: ds 1
-wd75f:: ds 5
-wd764:: ds 1
-wd765:: ds 1
-wd766:: ds 1
-wd767:: ds 1
-wd768:: ds 1
-wd769:: ds 3
-wd76c:: ds 5
-wd771:: ds 2
-wd773:: ds 4
-wd777:: ds 1
-wd778:: ds 4
-wd77c:: ds 1
-wd77d:: ds 1
-wd77e:: ds 5
-wd783:: ds 11
-wd78e:: ds 2
-wd790:: ds 2
-wd792:: ds 4
-wd796:: ds 2
-wd798:: ds 2
-wd79a:: ds 1
-wd79b:: ds 1
-wd79c:: ds 5
-wd7a1:: ds 2
-wd7a3:: ds 12
-wd7af:: ds 2
-wd7b1:: ds 2
-wd7b3:: ds 1
-wd7b4:: ds 5
-wd7b9:: ds 4
-wd7bd:: ds 2
-wd7bf:: ds 3
-wd7c2:: ds 1
-wd7c3:: ds 2
-wd7c5:: ds 1
-wd7c6:: ds 3
-wd7c9:: ds 4
-wd7cd:: ds 2
-wd7cf:: ds 2
-wd7d1:: ds 1
-wd7d2:: ds 1
-wd7d3:: ds 2
-wd7d5:: ds 1
-wd7d6:: ds 1
-wd7d7:: ds 1
-wd7d8:: ds 1
-wd7d9:: ds 2
-wd7db:: ds 2
-wd7dd:: ds 2
-wd7df:: ds 1
-wd7e0:: ds 1
-wd7e1:: ds 2
-wd7e3:: ds 2
-wd7e5:: ds 2
-wd7e7:: ds 1
-wd7e8:: ds 1
-wd7e9:: ds 2
-wd7eb:: ds 2
-wd7ed:: ds 1
-wd7ee:: ds 1
-wd7ef:: ds 1
-wd7f0:: ds 1
-wd7f1:: ds 1
-wd7f2:: ds 1
-wd7f3:: ds 2
-wd7f5:: ds 1
-wd7f6:: ds 9
-wd7ff:: ds 4
-wd803:: ds 2
-wd805:: ds 2
-wd807:: ds 2
-wd809:: ds 10
-wd813:: ds 2
-wd815:: ds 1
-wd816:: ds 1
-wd817:: ds 2
-wd819:: ds 2
-wd81b:: ds 10
-wd825:: ds 1
-wd826:: ds 1
-wd827:: ds 1
-wd828:: ds 1
-wd829:: ds 1
-wd82a:: ds 1
-wd82b:: ds 1
-wd82c:: ds 1
-wd82d:: ds 1
-wd82e:: ds 1
-wd82f:: ds 1
-wd830:: ds 1
-wd831:: ds 1
-wd832:: ds 1
-wd833:: ds 1
-wd834:: ds 1
-wd835:: ds 1
-wd836:: ds 1
-wd837:: ds 1
-wd838:: ds 15
-wd847:: ds 2
-wd849:: ds 2
-wd84b:: ds 12
-wd857:: ds 8
-wd85f:: ds 4
-wd863:: ds 1
-wd864:: ds 1
-wd865:: ds 1
-wd866:: ds 1
-wd867:: ds 2
-wd869:: ds 20
-wd87d:: ds 2
-wd87f:: ds 1
-wd880:: ds 1
-wd881:: ds 1
-wd882:: ds 5
-
-wLinkEnemyTrainerName:: ; d887
-; linked game's trainer name
-
-W_GRASSRATE:: ; d887
- ds 1
-
-W_GRASSMONS:: ; d888
- ds 20
-
-
-wEnemyPartyCount:: ds 1 ; d89c
-wEnemyPartyMons:: ds PARTY_LENGTH + 1 ; d89d
-
-wEnemyMons:: ; d8a4
-wEnemyMon1:: party_struct wEnemyMon1
-wEnemyMon2:: party_struct wEnemyMon2
-wEnemyMon3:: party_struct wEnemyMon3
-wEnemyMon4:: party_struct wEnemyMon4
-wEnemyMon5:: party_struct wEnemyMon5
-wEnemyMon6:: party_struct wEnemyMon6
-
-wEnemyMonOT:: ds 11 * PARTY_LENGTH ; d9ac
-wEnemyMonNicks:: ds 11 * PARTY_LENGTH ; d9ee
-
-
-W_TRAINERHEADERPTR:: ; da30
- ds 2
-
- ds 6
-
-wda38:: ds 1
-
-W_CURMAPSCRIPT:: ; da39
-; index of current map script, mostly used as index for function pointer array
-; mostly copied from map-specific map script pointer and wirtten back later
- ds 1
-
- ds 6
-
-W_PLAYTIMEHOURS:: ; da40
- ds 2
-W_PLAYTIMEMINUTES:: ; da42
- ds 2
-W_PLAYTIMESECONDS:: ; da44
- ds 1
-W_PLAYTIMEFRAMES:: ; da45
- ds 1
-
-wSafariZoneGameOver:: ; da46
- ds 1
-
-W_NUMSAFARIBALLS:: ; da47
- ds 1
-
-
-W_DAYCARE_IN_USE:: ; da48
-; 0 if no pokemon is in the daycare
-; 1 if pokemon is in the daycare
- ds 1
-
-W_DAYCAREMONNAME:: ds 11 ; da49
-W_DAYCAREMONOT:: ds 11 ; da54
-
-wDayCareMon:: box_struct wDayCareMon ; da5f
-
-
-W_NUMINBOX:: ds 1 ; da80
-wBoxSpecies:: ds MONS_PER_BOX + 1
-
-wBoxMons::
-wBoxMon1:: box_struct wBoxMon1 ; da96
-wBoxMon2:: ds box_struct_length * (MONS_PER_BOX + -1) ; dab7
-
-wBoxMonOT:: ds 11 * MONS_PER_BOX ; dd2a
-wBoxMonNicks:: ds 11 * MONS_PER_BOX ; de06
-wBoxMonNicksEnd:: ; dee2
-
-
-SECTION "Stack", WRAMX[$dfff], BANK[1]
-wStack:: ; dfff
- ds -$100
-
-
-INCLUDE "sram.asm"
+ +INCLUDE "constants.asm" + +flag_array: MACRO + ds ((\1) + 7) / 8 +ENDM + +box_struct_length EQU 25 + NUM_MOVES * 2 +box_struct: MACRO +\1Species:: db +\1HP:: dw +\1BoxLevel:: db +\1Status:: db +\1Type:: +\1Type1:: db +\1Type2:: db +\1CatchRate:: db +\1Moves:: ds NUM_MOVES +\1OTID:: dw +\1Exp:: ds 3 +\1HPExp:: dw +\1AttackExp:: dw +\1DefenseExp:: dw +\1SpeedExp:: dw +\1SpecialExp:: dw +\1DVs:: ds 2 +\1PP:: ds NUM_MOVES +ENDM + +party_struct: MACRO + box_struct \1 +\1Level:: db +\1Stats:: +\1MaxHP:: dw +\1Attack:: dw +\1Defense:: dw +\1Speed:: dw +\1Special:: dw +ENDM + +battle_struct: MACRO +\1Species:: db +\1HP:: dw +\1BoxLevel:: db +\1Status:: db +\1Type:: +\1Type1:: db +\1Type2:: db +\1CatchRate:: db +\1Moves:: ds NUM_MOVES +\1DVs:: ds 2 +\1Level:: db +\1MaxHP:: dw +\1Attack:: dw +\1Defense:: dw +\1Speed:: dw +\1Special:: dw +\1PP:: ds NUM_MOVES +ENDM + + +SECTION "WRAM Bank 0", WRAM0 + +wc000:: ds 1 +wc001:: ds 1 +wc002:: ds 1 +wc003:: ds 1 +wc004:: ds 1 +wc005:: ds 1 +wc006:: ds 8 +wc00e:: ds 4 +wc012:: ds 4 +wc016:: ds 16 +wc026:: ds 1 +wc027:: ds 1 +wc028:: ds 2 +wc02a:: ds 1 +wc02b:: ds 1 +wc02c:: ds 1 +wc02d:: ds 1 +wc02e:: ds 8 +wc036:: ds 8 +wc03e:: ds 8 +wc046:: ds 8 +wc04e:: ds 8 +wc056:: ds 8 +wc05e:: ds 8 +wc066:: ds 8 +wc06e:: ds 8 +wc076:: ds 8 +wc07e:: ds 8 +wc086:: ds 8 +wc08e:: ds 8 +wc096:: ds 8 +wc09e:: ds 8 +wc0a6:: ds 8 +wc0ae:: ds 8 +wc0b6:: ds 8 +wc0be:: ds 8 +wc0c6:: ds 8 +wc0ce:: ds 1 +wc0cf:: ds 1 +wc0d0:: ds 1 +wc0d1:: ds 1 +wc0d2:: ds 1 +wc0d3:: ds 1 +wc0d4:: ds 1 +wc0d5:: ds 1 +wc0d6:: ds 8 +wc0de:: ds 8 +wc0e6:: ds 1 +wc0e7:: ds 1 +wc0e8:: ds 1 +wc0e9:: ds 1 +wc0ea:: ds 1 +wc0eb:: ds 1 +wc0ec:: ds 1 +wc0ed:: ds 1 +wc0ee:: ds 1 +wc0ef:: ds 1 +wc0f0:: ds 1 +wc0f1:: ds 1 +wc0f2:: ds 14 + + +SECTION "Sprite State Data", WRAM0[$c100] + +wSpriteStateData1:: ; c100 +; data for all sprites on the current map +; holds info for 16 sprites with $10 bytes each +; player sprite is always sprite 0 +; C1x0: picture ID (fixed, loaded at map init) +; C1x1: movement status (0: uninitialized, 1: ready, 2: delayed, 3: moving) +; C1x2: sprite image index (changed on update, $ff if off screen, includes facing direction, progress in walking animation and a sprite-specific offset) +; C1x3: Y screen position delta (-1,0 or 1; added to c1x4 on each walking animation update) +; C1x4: Y screen position (in pixels, always 4 pixels above grid which makes sprites appear to be in the center of a tile) +; C1x5: X screen position delta (-1,0 or 1; added to c1x6 on each walking animation update) +; C1x6: X screen position (in pixels, snaps to grid if not currently walking) +; C1x7: intra-animation-frame counter (counting upwards to 4 until c1x8 is incremented) +; C1x8: animation frame counter (increased every 4 updates, hold four states (totalling to 16 walking frames) +; C1x9: facing direction (0: down, 4: up, 8: left, $c: right) +; C1xA +; C1xB +; C1xC +; C1xD +; C1xE +; C1xF + ds $10 * $10 + + +SECTION "Sprite State Data 2", WRAM0[$c200] + +wSpriteStateData2:: ; c200 +; more data for all sprites on the current map +; holds info for 16 sprites with $10 bytes each +; player sprite is always sprite 0 +; C2x0: walk animation counter (counting from $10 backwards when moving) +; C2x1: +; C2x2: Y displacement (initialized at 8, supposed to keep moving sprites from moving too far, but bugged) +; C2x3: X displacement (initialized at 8, supposed to keep moving sprites from moving too far, but bugged) +; C2x4: Y position (in 2x2 tile grid steps, topmost 2x2 tile has value 4) +; C2x5: X position (in 2x2 tile grid steps, leftmost 2x2 tile has value 4) +; C2x6: movement byte 1 (determines whether a sprite can move, $ff:not moving, $fe:random movements, others unknown) +; C2x7: (?) (set to $80 when in grass, else $0; may be used to draw grass above the sprite) +; C2x8: delay until next movement (counted downwards, status (c1x1) is set to ready if reached 0) +; C2x9 +; C2xA +; C2xB +; C2xC +; C2xD +; C2xE: sprite image base offset (in video ram, player always has value 1, used to compute c1x2) +; C2xF + ds $10 * $10 + + +SECTION "OAM Buffer", WRAM0[$c300] + +wOAMBuffer:: ; c300 +; buffer for OAM data. Copied to OAM by DMA + ds 4 * 40 + +wTileMap:: ; c3a0 +; buffer for tiles that are visible on screen (20 columns by 18 rows) + ds 20 * 18 + +wSerialPartyMonsPatchList:: ; c508 +; list of indexes to patch with SERIAL_NO_DATA_BYTE after transfer + +wTileMapBackup:: ; c508 +; buffer for temporarily saving and restoring current screen's tiles +; (e.g. if menus are drawn on top) +; ds 20 * 18 + + ds 200 + +wSerialEnemyMonsPatchList:: ; c5d0 +; list of indexes to patch with SERIAL_NO_DATA_BYTE after transfer + ds 200 + + ds 80 + +wTempPic:: +wOverworldMap:: ; c6e8 + ds 1300 + +wScreenEdgeTiles:: ; cbfc +; the tiles of the row or column to be redrawn by RedrawExposedScreenEdge + ds 20 * 2 + +; coordinates of the position of the cursor for the top menu item (id 0) +wTopMenuItemY:: ; cc24 + ds 1 +wTopMenuItemX:: ; cc25 + ds 1 + +wCurrentMenuItem:: ; cc26 +; 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 + ds 1 + +wTileBehindCursor:: ; cc27 +; the tile that was behind the menu cursor's current location + ds 1 + +wMaxMenuItem:: ; cc28 +; id of the bottom menu item + ds 1 + +wMenuWatchedKeys:: ; cc29 +; bit mask of keys that the menu will respond to + ds 1 + +wLastMenuItem:: ; cc2a +; id of previously selected menu item + ds 1 + +wcc2b:: ds 1 +wcc2c:: ds 1 +wcc2d:: ds 1 + +wPlayerMoveListIndex:: ; cc2e + ds 1 + +wPlayerMonNumber:: ; cc2f + ds 1 + +wMenuCursorLocation:: ; cc30 +; the address of the menu cursor's current location within wTileMap + ds 2 + + ds 2 + +wMenuJoypadPollCount:: ; cc34 +; how many times should HandleMenuInput poll the joypad state before it returns? + ds 1 + +wMenuItemToSwap:: ; cc35 +; id of menu item selected for swapping (counts from 1) (0 means that no menu item has been selected for swapping) + ds 1 + +wListScrollOffset:: ; cc36 +; offset of the current top menu item from the beginning of the list +; keeps track of what section of the list is on screen + ds 1 + +wcc37:: ds 1 + +wTradeCenterPointerTableIndex:: ; cc38 + ds 1 + + ds 1 + +wcc3a:: ds 1 +wcc3b:: ds 1 + +wDoNotWaitForButtonPressAfterDisplayingText:: ; cc3c +; if non-zero, skip waiting for a button press after displaying text in DisplayTextID + ds 1 + +wSerialSyncAndExchangeNybbleReceiveData:: ; cc3d +; the final received nybble is stored here by Serial_SyncAndExchangeNybble + +wSerialExchangeNybbleTempReceiveData:: ; cc3d +; temporary nybble used by Serial_ExchangeNybble + +wLinkMenuSelectionReceiveBuffer:: ; cc3d +; two byte buffer +; the received menu selection is stored twice + +wcc3d:: ds 1 + +wSerialExchangeNybbleReceiveData:: ; cc3e +; the final received nybble is stored here by Serial_ExchangeNybble + ds 1 + + ds 3 + +wSerialExchangeNybbleSendData:: ; cc42 +; this nybble is sent when using Serial_SyncAndExchangeNybble or Serial_ExchangeNybble + +wLinkMenuSelectionSendBuffer:: ; cc42 +; two byte buffer +; the menu selection byte is stored twice before sending + + ds 5 + +wLinkTimeoutCounter:: ; cc47 +; 1 byte + +wUnknownSerialCounter:: ; cc47 +; 2 bytes + +wcc47:: ds 1 +wcc48:: ds 1 + +wWhichTradeMonSelectionMenu:: ; cc49 +; $00 = player mons +; $01 = enemy mons + +wcc49:: ds 1 + +wMenuWrappingEnabled:: ; cc4a +; 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 + ds 1 + +wcc4b:: ds 2 +wcc4d:: ds 1 + +wPredefID:: ; cc4e + ds 1 +wPredefRegisters:: ; cc4f + ds 6 + +wTrainerHeaderFlagBit:: ; cc55 + ds 1 + + ds 1 + +wNPCMovementScriptPointerTableNum:: ; cc57 +; which NPC movement script pointer is being used +; 0 if an NPC movement script is not running + ds 1 + +wNPCMovementScriptBank:: ; cc58 +; ROM bank of current NPC movement script + ds 1 + + ds 2 + +wHallOfFame:: ; cc5b +wBoostExpByExpAll:: ; cc5b +wAnimationType:: ; cc5b +; values between 0-6. Shake screen horizontally, shake screen vertically, blink Pokemon... + +wcc5b:: ds 1 +wcc5c:: ds 1 +wcc5d:: ds 1 +wcc5e:: ds 13 + +wcc6b:: ds 14 +wcc79:: ds 30 + +wNPCMovementDirections2:: ; cc97 + +wSwitchPartyMonTempBuffer:: ; cc97 +; temporary buffer when swapping party mon data + ds 10 + +wcca1:: ds 49 + +wRLEByteCount:: ; ccd2 + ds 1 + +wSimulatedJoypadStatesEnd:: ; ccd3 +; 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 + +wccd3:: ds 1 +wccd4:: ds 1 + +; if [ccd5] != 1, the second AI layer is not applied +wAILayer2Encouragement:: ; ccd5 + ds 1 + ds 1 + +; current HP of player and enemy substitutes +wPlayerSubstituteHP:: ; ccd7 + ds 1 +wEnemySubstituteHP:: ; ccd8 + ds 1 + +wccd9:: ds 2 + +wMoveMenuType:: ; ccdb +; 0=regular, 1=mimic, 2=above message box (relearn, heal pp..) + ds 1 + +wPlayerSelectedMove:: ; ccdc + ds 1 +wEnemySelectedMove:: ; ccdd + ds 1 + +wLinkBattleRandomNumberListIndex:: ; ccde + ds 1 + +wAICount:: ; ccdf +; number of times remaining that AI action can occur + ds 1 + + ds 2 + +wEnemyMoveListIndex:: ; cce2 + ds 1 + +wcce3:: ds 1 +wcce4:: ds 1 + +wTotalPayDayMoney:: ; cce5 +; total amount of money made using Pay Day during the current battle + ds 3 + +wSafariEscapeFactor:: ; cce8 + ds 1 +wSafariBaitFactor:: ; cce9 + ds 1; + + ds 1 + +wcceb:: ds 1 +wccec:: ds 1 + +wMonIsDisobedient:: ds 1 ; cced + +wPlayerDisabledMoveNumber:: ds 1 ; ccee +wEnemyDisabledMoveNumber:: ds 1 ; ccef + +wccf0:: ds 1 + +wPlayerUsedMove:: ds 1 ; ccf1 +wEnemyUsedMove:: ds 1 ; ccf2 + +wccf3:: ds 1 + +wMoveDidntMiss:: ds 1 ; ccf4 + +wPartyFoughtCurrentEnemyFlags:: ; ccf5 +; flags that indicate which party members have fought the current enemy mon + flag_array 6 + +wccf6:: ds 1 +wccf7:: ds 14 + +wUnknownSlotVar:: ; cd05 + +wEnemyNumHits:: ; cd05 +; number of hits by enemy in attacks like Double Slap, etc. + +wEnemyBideAccumulatedDamage:: ; cd05 +; the amount of damage accumulated by the enemy while biding (2 bytes) + +ds 10 + +wInGameTradeGiveMonSpecies:: ; cd0f + +wPlayerMonUnmodifiedLevel:: ; cd0f + ds 1 + +wInGameTradeTextPointerTablePointer:: ; cd10 + +wPlayerMonUnmodifiedMaxHP:: ; cd10 + ds 2 + +wInGameTradeTextPointerTableIndex:: ; cd12 + +wPlayerMonUnmodifiedAttack:: ; cd12 + ds 1 +wInGameTradeGiveMonName:: ; cd13 + ds 1 +wPlayerMonUnmodifiedDefense:: ; cd14 + ds 2 +wPlayerMonUnmodifiedSpeed:: ; cd16 + ds 2 +wPlayerMonUnmodifiedSpecial:: ; cd18 + ds 2 + +; stat modifiers for the player's current pokemon +; value can range from 1 - 13 ($1 to $D) +; 7 is normal + +wPlayerMonStatMods:: +wPlayerMonAttackMod:: ; cd1a + ds 1 +wPlayerMonDefenseMod:: ; cd1b + ds 1 +wPlayerMonSpeedMod:: ; cd1c + ds 1 +wPlayerMonSpecialMod:: ; cd1d + ds 1 + +wInGameTradeReceiveMonName:: ; cd1e + +wPlayerMonAccuracyMod:: ; cd1e + ds 1 +wPlayerMonEvasionMod:: ; cd1f + ds 1 + + ds 3 + +wEnemyMonUnmodifiedLevel:: ; cd23 + ds 1 +wEnemyMonUnmodifiedMaxHP:: ; cd24 + ds 2 +wEnemyMonUnmodifiedAttack:: ; cd26 + ds 2 +wEnemyMonUnmodifiedDefense:: ; cd28 + ds 1 + +wInGameTradeMonNick:: ; cd29 + ds 1 + +wEnemyMonUnmodifiedSpeed:: ; cd2a + ds 2 +wEnemyMonUnmodifiedSpecial:: ; cd2c + ds 1 + +wEngagedTrainerClass:: ; cd2d + ds 1 +wEngagedTrainerSet:: ; cd2e +; ds 1 + +; stat modifiers for the enemy's current pokemon +; value can range from 1 - 13 ($1 to $D) +; 7 is normal + +wEnemyMonStatMods:: +wEnemyMonAttackMod:: ; cd2e + ds 1 +wEnemyMonDefenseMod:: ; cd2f + ds 1 +wEnemyMonSpeedMod:: ; cd30 + ds 1 +wEnemyMonSpecialMod:: ; cd31 + ds 1 +wEnemyMonAccuracyMod:: ; cd32 + ds 1 +wEnemyMonEvasionMod:: ; cd33 + ds 1 + +wInGameTradeReceiveMonSpecies:: + ds 1 + + ds 2 + +wNPCMovementDirections2Index:: ; cd37 + +wcd37:: ds 1 + +wSimulatedJoypadStatesIndex:: ; cd38 +; the next simulated joypad state is at wSimulatedJoypadStatesEnd plus this value minus 1 +; 0 if the joypad state is not being simulated + ds 1 + +wWastedByteCD39:: ; cd39 +; written to but nothing ever reads it + ds 1 + +wWastedByteCD3A:: ; cd3a +; written to but nothing ever reads it + ds 1 + +wOverrideSimulatedJoypadStatesMask:: ; cd3b +; mask indicating which real button presses can override simulated ones +; XXX is it ever not 0? + ds 1 + + ds 1 + +wTradedPlayerMonSpecies:: ; cd3d + +wTradingWhichPlayerMon:: ; cd3d + +wChangeBoxSavedMapTextPointer:: ; cd3d + +wFlyAnimUsingCoordList:: ; cd3d + +wPlayerSpinInPlaceAnimFrameDelay:: ; cd3d + +wPlayerSpinWhileMovingUpOrDownAnimDeltaY:: ; cd3d + +wHiddenObjectFunctionArgument:: ; cd3d + +wSubtrahend:: ; cd3d +; subtract (BCD) wSubtrahend, wSubtrahend+1, wSubtrahend+2 + +wWhichTrade:: ; cd3d +; which entry from TradeMons to select + +wTrainerSpriteOffset:: ; cd3d + ds 1 + +wTradedEnemyMonSpecies:: ; cd3e + +wTradingWhichEnemyMon:: ; cd3e + +wFlyAnimCounter:: ; cd3e + +wPlayerSpinInPlaceAnimFrameDelayDelta:: ; cd3e + +wPlayerSpinWhileMovingUpOrDownAnimMaxY:: ; cd3e + +wHiddenObjectFunctionRomBank:: ; cd3e + +wTrainerEngageDistance:: ; cd3e + ds 1 + +wNameOfPlayerMonToBeTraded:: ; cd3f + +wFlyAnimBirdSpriteImageIndex:: ; cd3f + +wPlayerSpinInPlaceAnimFrameDelayEndValue:: ; cd3f + +wPlayerSpinWhileMovingUpOrDownAnimFrameDelay:: ; cd3f + +wHiddenObjectIndex:: ; cd3f + +wTrainerFacingDirection:: ; cd3f +wcd3f:: + ds 1 + +wPlayerSpinInPlaceAnimSoundID:: ; cd40 + +wHiddenObjectY:: ; cd40 + +wTrainerScreenY:: ; cd40 + ds 1 + +wTradedPlayerMonOT:: ; cd41 + +wHiddenObjectX:: ; cd41 + +wTrainerScreenX:: ; cd41 + ds 1 + +wcd42:: ds 1 +wcd43:: ds 1 +wcd44:: ds 1 +wcd45:: ds 1 +wcd46:: ds 1 +wcd47:: ds 1 +wcd48:: ds 1 +wcd49:: ds 1 +wcd4a:: ds 1 +wcd4b:: ds 1 + +wTradedPlayerMonOTID:: ; cd4c + +wcd4c:: ds 1 +wcd4d:: ds 1 + +wTradedEnemyMonOT:: ; cd4e + +wcd4e:: ds 1 +wcd4f:: ds 1 +wcd50:: ds 9 + +wTradedEnemyMonOTID:: ; cd59 + ds 2 + +wcd5b:: ds 1 +wcd5c:: ds 1 + +wMonPartySpriteSpecies:: ; cd5d + ds 1 + +wLeftGBMonSpecies:: ; cd5e +; in the trade animation, the mon that leaves the left gameboy + ds 1 + +wRightGBMonSpecies:: ; cd5f +; in the trade animation, the mon that leaves the right gameboy + ds 1 + +wFlags_0xcd60:: ; cd60 +; bit 0: is player engaged by trainer (to avoid being engaged by multiple trainers simultaneously) +; bit 1: boulder dust animation (from using Strength) pending +; 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) + ds 1 + + ds 9 + +wcd6a:: ds 1 + +wJoyIgnore:: ; cd6b +; Set buttons are ignored. + ds 1 + +wcd6c:: ds 1 +wcd6d:: ds 4 +wcd71:: ds 1 +wcd72:: ds 5 +wcd77:: ds 1 +wcd78:: ds 9 + +wSerialOtherGameboyRandomNumberListBlock:: ; cd81 +; buffer for transferring the random number list generated by the other gameboy + +wTileMapBackup2:: ; cd81 +; second buffer for temporarily saving and restoring current screen's tiles (e.g. if menus are drawn on top) + ds 20 * 18 + +wBuffer:: ; cee9 +; Temporary storage area of 30 bytes. +wHPBarMaxHP:: ; cee9 + ds 2 +wHPBarOldHP:: ; ceeb + ds 2 +wHPBarNewHP:: ; ceed + ds 2 +wHPBarDelta:: ; ceef + ds 1 + +wcef0:: ds 1 +wcef1:: ds 12 + +wHPBarHPDifference:: ; cefd + ds 1 + ds 7 + +wcf05:: ds 1 +wcf06:: ds 1 + +wAnimSoundID:: ; cf07 +; sound ID during battle animations + ds 1 + +wcf08:: ds 1 +wcf09:: ds 1 +wcf0a:: ds 1 +wBattleResult:: ; cf0b +; $00 - win +; $01 - lose +; $02 - draw + ds 1 + +wAutoTextBoxDrawingControl:: ; cf0c +; bit 0: if set, DisplayTextID automatically draws a text box + ds 1 + +wcf0d:: ds 1 +wcf0e:: ds 1 +wcf0f:: ds 1 + +wNPCMovementScriptFunctionNum:: ; cf10 +; which script function within the pointer table indicated by +; wNPCMovementScriptPointerTableNum + ds 1 + +wcf11:: ds 1 + +wPredefParentBank:: ; cf12 + ds 1 + +wSpriteIndex:: ds 1 + +wCurSpriteMovement2:: ; cf14 +; movement byte 2 of current sprite + ds 1 + + ds 2 + +wNPCMovementScriptSpriteOffset:: ; cf17 +; sprite offset of sprite being controlled by NPC movement script + ds 1 + +wcf18:: ds 2 + +wOnSGB:: ; cf1b +; if running on SGB, it's 1, else it's 0 + ds 1 + +wcf1c:: ds 1 +wcf1d:: ds 1 +wcf1e:: ds 1 +wcf1f:: ds 6 +wcf25:: ds 8 +wcf2d:: ds 1 +wcf2e:: ds 2 +wcf30:: ds 7 +wcf37:: ds 20 +wcf4b:: ds 1 +wcf4c:: ds 1 +wGainBoostedExp:: ; cf4d + ds 1 + ds 17 + +wGymCityName:: ; cf5f +wStringBuffer1:: ; cf5f + ds 16 + 1 +wGymLeaderName:: ; cf70 +wStringBuffer2:: ; cf70 + ds 16 + 1 +wStringBuffer3:: ; cf81 + ds 9 + 1 + +wList:: ; cf8b + ds 2 + +wcf8d:: ds 1 +wcf8e:: ds 1 + +wItemPrices:: ; cf8f + ds 2 + +wcf91:: ds 1 + +wWhichPokemon:: ; cf92 +; which pokemon you selected + ds 1 + +wcf93:: ds 1 + +wHPBarType:: ; cf94 +; type of HP bar +; $00 = enemy HUD in battle +; $01 = player HUD in battle / status screen +; $02 = party menu + +wListMenuID:: ; cf94 +; ID used by DisplayListMenuID + ds 1 + +wcf95:: ds 1 +wcf96:: ds 1 +wcf97:: ds 1 + +; LoadMonData copies mon data here +wLoadedMon:: party_struct wLoadedMon ; cf98 + +wFontLoaded:: ; cfc4 +; 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. + ds 1 + +wWalkCounter:: ; cfc5 +; walk animation counter + ds 1 + +wTileInFrontOfPlayer:: ; cfc6 +; background tile number in front of the player (either 1 or 2 steps ahead) + ds 1 + +wMusicHeaderPointer:: ; cfc7 +; (the current music channel address - $4000) / 3 + ds 1 + +wcfc8:: ds 1 +wcfc9:: ds 1 +wcfca:: ds 1 + +wUpdateSpritesEnabled:: ; cfcb +; $01 enables UpdateSprites; anything else disables it + ds 1 + +W_ENEMYMOVENUM:: ; cfcc + ds 1 +W_ENEMYMOVEEFFECT:: ; cfcd + ds 1 +W_ENEMYMOVEPOWER:: ; cfce + ds 1 +W_ENEMYMOVETYPE:: ; cfcf + ds 1 +W_ENEMYMOVEACCURACY:: ; cfd0 + ds 1 +W_ENEMYMOVEMAXPP:: ; cfd1 + ds 1 +W_PLAYERMOVENUM:: ; cfd2 + ds 1 +W_PLAYERMOVEEFFECT:: ; cfd3 + ds 1 +W_PLAYERMOVEPOWER:: ; cfd4 + ds 1 +W_PLAYERMOVETYPE:: ; cfd5 + ds 1 +W_PLAYERMOVEACCURACY:: ; cfd6 + ds 1 +W_PLAYERMOVEMAXPP:: ; cfd7 + ds 1 + + +wEnemyMonSpecies2:: ; cfd8 + ds 1 +wBattleMonSpecies2:: ; cfd9 + ds 1 + +wEnemyMonNick:: ds 11 ; cfda + +wEnemyMon:: ; cfe5 +; The wEnemyMon struct reaches past 0xcfff, +; the end of wram bank 0 on cgb. +; This has no significance on dmg, where wram +; isn't banked (c000-dfff is contiguous). +; However, recent versions of rgbds have replaced +; dmg-style wram with cgb wram banks. + +; Until this is fixed, this struct will have +; to be declared manually. + +wEnemyMonSpecies:: db +wEnemyMonHP:: dw +wEnemyMonPartyPos:: +wEnemyMonBoxLevel:: db +wEnemyMonStatus:: db +wEnemyMonType:: +wEnemyMonType1:: db +wEnemyMonType2:: db +wEnemyMonCatchRate_NotReferenced:: db +wEnemyMonMoves:: ds NUM_MOVES +wEnemyMonDVs:: ds 2 +wEnemyMonLevel:: db +wEnemyMonMaxHP:: dw +wEnemyMonAttack:: dw +wEnemyMonDefense:: dw +wEnemyMonSpeed:: dw +wEnemyMonSpecial:: dw +wEnemyMonPP:: ds 2 ; NUM_MOVES - 2 +SECTION "WRAM Bank 1", WRAMX, BANK[1] + ds 2 ; NUM_MOVES - 2 + +wEnemyMonBaseStats:: ds 5 +wEnemyMonCatchRate:: ds 1 +wEnemyMonBaseExp:: ds 1 + +wBattleMonNick:: ds 11 ; d009 +wBattleMon:: battle_struct wBattleMon ; d014 + + +W_TRAINERCLASS:: ; d031 + ds 1 + + ds 1 + +wTrainerPicPointer:: ; wd033 + ds 2 + ds 1 +wd036:: ds 16 +wd046:: ds 1 +wd047:: ds 1 +wd048:: ds 2 + +W_TRAINERNAME:: ; d04a +; 13 bytes for the letters of the opposing trainer +; the name is terminated with $50 with possible +; unused trailing letters + ds 13 + +W_ISINBATTLE:: ; d057 +; no battle, this is 0 +; wild battle, this is 1 +; trainer battle, this is 2 + ds 1 + +wPartyGainExpFlags:: ; d058 +; flags that indicate which party members should be be given exp when GainExperience is called + flag_array 6 + +W_CUROPPONENT:: ; d059 +; in a wild battle, this is the species of pokemon +; in a trainer battle, this is the trainer class + $C8 + ds 1 + +W_BATTLETYPE:: ; d05a +; in normal battle, this is 0 +; in old man battle, this is 1 +; in safari battle, this is 2 + ds 1 + +wDamageMultipliers:: ; d05b +; bits 0-6: Effectiveness + ; $0 = immune + ; $5 = not very effective + ; $a = neutral + ; $14 = super-effective +; bit 7: STAB + ds 1 + +W_LONEATTACKNO:: ; d05c +; which entry in LoneAttacks to use +W_GYMLEADERNO:: ; d05c +; it's actually the same thing as ^ + ds 1 +W_TRAINERNO:: ; d05d +; which instance of [youngster, lass, etc] is this? + ds 1 + +wCriticalHitOrOHKO:: ; d05e +; $00 = normal attack +; $01 = critical hit +; $02 = successful OHKO +; $ff = failed OHKO + ds 1 + +W_MOVEMISSED:: ; d05f + ds 1 + +wPlayerStatsToDouble:: ; d060 +; always 0 + ds 1 + +wPlayerStatsToHalve:: ; d061 +; always 0 + ds 1 + +W_PLAYERBATTSTATUS1:: ; d062 +; 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 + ds 1 + +W_PLAYERBATTSTATUS2:: ; d063 +; 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 + ds 1 + +W_PLAYERBATTSTATUS3:: ; d064 +; bit 0 - toxic +; bit 1 - light screen +; bit 2 - reflect +; bit 3 - tranformed + ds 1 + +wEnemyStatsToDouble:: ; d065 +; always 0 + ds 1 + +wEnemyStatsToHalve:: ; d066 +; always 0 + ds 1 + +W_ENEMYBATTSTATUS1:: ; d067 + ds 1 +W_ENEMYBATTSTATUS2:: ; d068 + ds 1 +W_ENEMYBATTSTATUS3:: ; d069 + ds 1 + +wPlayerNumAttacksLeft:: +; when the player is attacking multiple times, the number of attacks left + ds 1 + +W_PLAYERCONFUSEDCOUNTER:: ; wd06b + ds 1 + +W_PLAYERTOXICCOUNTER:: ; d06c + ds 1 +W_PLAYERDISABLEDMOVE:: ; d06d +; high nibble: which move is disabled (1-4) +; low nibble: disable turns left + ds 1 + + ds 1 + +wEnemyNumAttacksLeft:: ; d06f +; when the enemy is attacking multiple times, the number of attacks left + ds 1 + +W_ENEMYCONFUSEDCOUNTER:: ; wd070 + ds 1 + +W_ENEMYTOXICCOUNTER:: ; d071 + ds 1 +W_ENEMYDISABLEDMOVE:: ; d072 +; high nibble: which move is disabled (1-4) +; low nibble: disable turns left + ds 1 + + ds 1 + +wPlayerNumHits:: ; d074 +; number of hits by player in attacks like Double Slap, etc. + +wPlayerBideAccumulatedDamage:: ; d074 +; the amount of damage accumulated by the player while biding (2 bytes) + +wUnknownSerialCounter2:: ; d075 +; 2 bytes + + ds 4 + +wEscapedFromBattle:: +; non-zero when an item or move that allows escape from battle was used + ds 1 + +wd079:: +wAmountMoneyWon:: ds 1 ; wd079 - wd07b +wd07a:: ds 1 + ds 1 + +W_ANIMATIONID:: ; d07c +; ID number of the current battle animation + ds 1 + +wd07d:: ds 1 +wd07e:: ds 3 + +; base coordinates of frame block +W_BASECOORDX:: ; d081 + ds 1 +W_BASECOORDY:: ; d082 + ds 1 + +; low health alarm counter/enable +; high bit = enable, others = timer to cycle frequencies +wLowHealthAlarm:: ds 1 ; d083 + +W_FBTILECOUNTER:: ; d084 +; counts how many tiles of the current frame block have been drawn + ds 1 + +wd085:: ds 1 + +W_SUBANIMFRAMEDELAY:: ; d086 +; duration of each frame of the current subanimation in terms of screen refreshes + ds 1 +W_SUBANIMCOUNTER:: ; d087 +; counts the number of subentries left in the current subanimation + ds 1 + +wd088:: ds 1 + +W_NUMFBTILES:: ; d089 +; number of tiles in current battle animation frame block + ds 1 + +wTradedMonMovingRight:: ; d08a +; $01 if mon is moving from left gameboy to right gameboy; $00 if vice versa + +wd08a:: ds 1 + +wTownMapSpriteBlinkingCounter:: ; d08b + +wPartyMonAnimCounter:: ; d08b + +W_SUBANIMTRANSFORM:: ; d08b +; 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 + ds 1 + +wEndBattleWinTextPointer:: ; d08c + ds 2 + +wEndBattleLoseTextPointer:: ; d08e + ds 2 + + ds 2 + +wEndBattleTextRomBank:: ; d092 + ds 1 + + ds 1 + +W_SUBANIMADDRPTR:: ; d094 +; the address _of the address_ of the current subanimation entry + ds 2 +W_SUBANIMSUBENTRYADDR:: ; d096 +; the address of the current subentry of the current subanimation + ds 2 + + ds 2 + +wd09a:: ds 1 + +wTownMapSpriteBlinkingEnabled:: ; d09b +; non-zero when enabled. causes nest locations to blink on and off. +; the town selection cursor will blink regardless of what this value is + +wd09b:: ds 1 + +W_FBDESTADDR:: ; d09c +; current destination address in OAM for frame blocks (big endian) + ds 2 + +W_FBMODE:: ; d09e +; 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 +; 04: delay, without cleaning OAM buffer, and do not advance [W_FBDESTADDR], so that the next frame block will overwrite this one +; sprite data is written column by column, each byte contains 8 columns (one for ech bit) +; for 2bpp sprites, pairs of two consecutive bytes (i.e. pairs of consecutive rows of sprite data) +; contain the upper and lower bit of each of the 8 pixels, respectively + ds 1 + +wNewTileBlockID:: ; d09f + +wd09f:: ds 1 +wd0a0:: ds 1 + +W_SPRITECURPOSX:: ; d0a1 + ds 1 +W_SPRITECURPOSY:: ; d0a2 + ds 1 +W_SPRITEWITDH:: ; d0a3 + ds 1 +W_SPRITEHEIGHT:: ; d0a4 + ds 1 +W_SPRITEINPUTCURBYTE:: ; d0a5 +; current input byte + ds 1 +W_SPRITEINPUTBITCOUNTER:: ; d0a6 +; bit offset of last read input bit + ds 1 + +W_SPRITEOUTPUTBITOFFSET:: ; d0a7; 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 + ds 1 + +W_SPRITELOADFLAGS:: ; d0a8 +; bit 0 determines used buffer (0 -> $a188, 1 -> $a310) +; bit 1 loading last sprite chunk? (there are at most 2 chunks per load operation) + ds 1 +W_SPRITEUNPACKMODE:: ; d0a9 + ds 1 +W_SPRITEFLIPPED:: ; d0aa + ds 1 + +W_SPRITEINPUTPTR:: ; d0ab +; pointer to next input byte + ds 2 +W_SPRITEOUTPUTPTR:: ; d0ad +; pointer to current output byte + ds 2 +W_SPRITEOUTPUTPTRCACHED:: ; d0af +; used to revert pointer for different bit offsets + ds 2 +W_SPRITEDECODETABLE0PTR:: ; d0b1 +; pointer to differential decoding table (assuming initial value 0) + ds 2 +W_SPRITEDECODETABLE1PTR:: ; d0b3 +; pointer to differential decoding table (assuming initial value 1) + ds 2 + +wd0b5:: ds 1 + +wNameListType:: ; d0b6 + ds 1 + +wPredefBank:: ; d0b7 + ds 1 + +W_MONHEADER:: ; d0b8 +W_MONHDEXNUM:: ; d0b8 + ds 1 + +W_MONHBASESTATS:: ; d0b9 +W_MONHBASEHP:: ; d0b9 + ds 1 +W_MONHBASEATTACK:: ; d0ba + ds 1 +W_MONHBASEDEFENSE:: ; d0bb + ds 1 +W_MONHBASESPEED:: ; d0bc + ds 1 +W_MONHBASESPECIAL:: ; d0bd + ds 1 + +W_MONHTYPES:: ; d0be +W_MONHTYPE1:: ; d0be + ds 1 +W_MONHTYPE2:: ; d0bf + ds 1 + +W_MONHCATCHRATE:: ; d0c0 + ds 1 +W_MONHBASEXP:: ; d0c1 + ds 1 +W_MONHSPRITEDIM:: ; d0c2 + ds 1 +W_MONHFRONTSPRITE:: ; d0c3 + ds 2 +W_MONHBACKSPRITE:: ; d0c5 + ds 2 + +W_MONHMOVES:: ; d0c7 + ds 4 + +W_MONHGROWTHRATE:: ; d0cb + ds 1 + +W_MONHLEARNSET:: ; d0cc +; bit field + flag_array 50 + 5 + ds 1 + +wd0d4:: ds 3 + +W_MONHPADDING:: ; d0d7 + + +W_DAMAGE:: ; d0d7 + ds 2 + +ds 2 + +wRepelRemainingSteps:: ; wd0db + ds 1 + +wMoves:: ; wd0dc +; list of moves for FormatMovesString + ds 4 + +wMoveNum:: ; d0e0 + ds 1 + +wMovesString:: ; d0e1 + ds 56 + +wd119:: ds 1 + +wWalkBikeSurfStateCopy:: ; d11a +; wWalkBikeSurfState is sometimes copied here, but it doesn't seem to be used for anything + ds 1 + +wd11b:: ds 1 +wd11c:: ds 1 +wd11d:: ds 1 +wd11e:: ds 1 +wd11f:: ds 1 + +wNumRunAttempts:: +; number of times the player has tried to run from battle + ds 1 + +wd121:: ds 1 +wd122:: ds 2 +wd124:: ds 1 + +wTextBoxID:: ; d125 + ds 1 + +wd126:: ds 1 + +W_CURENEMYLVL:: ; d127 + ds 1 + +wd128:: ds 1 +wd129:: ds 1 +wd12a:: ds 1 + +wLinkState:: ; d12b + ds 1 + +wTwoOptionMenuID:: ds 1 +wd12d:: ds 1 +wd12e:: ds 1 +wd12f:: ds 1 +wd130:: ds 1 +wd131:: ds 1 +wd132:: ds 1 +wd133:: ds 6 +wd139:: ds 1 + +wIgnoreInputCounter:: ; d13a +; counts downward each frame +; when it hits 0, bit 5 (ignore input bit) of wd730 is reset + ds 1 + +wStepCounter:: ; d13b +; counts down once every step + ds 1 + +wNumberOfNoRandomBattleStepsLeft:: ; d13c +; after a battle, you have at least 3 steps before a random battle can occur + ds 1 + +W_PRIZE1:: ; d13d + ds 1 +W_PRIZE2:: ; d13e + ds 1 +W_PRIZE3:: ; d13f + ds 1 + + ds 1 + +wSerialRandomNumberListBlock:: ; d141 +; the first 7 bytes are the preamble + +wd141:: ds 2 +wd143:: ds 2 +wd145:: ds 3 + +wLinkBattleRandomNumberList:: ; d148 +; shared list of 9 random numbers, indexed by wLinkBattleRandomNumberListIndex + ds 10 + +wSerialPlayerDataBlock:: ; d152 +; the first 6 bytes are the preamble + +wd152:: ds 1 +wd153:: ds 3 +wd156:: ds 1 +wd157:: ds 1 + + +wPlayerName:: ; d158 + ds 11 + +wPartyCount:: ds 1 ; d163 +wPartySpecies:: ds PARTY_LENGTH ; d164 +wPartyEnd:: ds 1 ; d16a + +wPartyMons:: +wPartyMon1:: party_struct wPartyMon1 ; d16b +wPartyMon2:: party_struct wPartyMon2 ; d197 +wPartyMon3:: party_struct wPartyMon3 ; d1c3 +wPartyMon4:: party_struct wPartyMon4 ; d1ef +wPartyMon5:: party_struct wPartyMon5 ; d21b +wPartyMon6:: party_struct wPartyMon6 ; d247 + +wPartyMonOT:: ds 11 * PARTY_LENGTH ; d273 +wPartyMonNicks:: ds 11 * PARTY_LENGTH ; d2b5 + + +wPokedexOwned:: ; d2f7 + flag_array NUM_POKEMON +wPokedexOwnedEnd:: + +wPokedexSeen:: ; d30a + flag_array NUM_POKEMON +wPokedexSeenEnd:: + + +wNumBagItems:: ; d31d + ds 1 +wBagItems:: ; d31e +; item, quantity + ds 20 * 2 + ds 1 ; end + +wPlayerMoney:: ; d347 + ds 3 ; BCD + +W_RIVALNAME:: ; d34a + ds 11 + +W_OPTIONS:: ; d355 +; 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 + ds 1 + +W_OBTAINEDBADGES:: ; d356 + ds 1 + + ds 1 + +wd358:: ds 1 + +wPlayerID:: ; d359 + ds 2 + +wd35b:: ds 1 +wd35c:: ds 1 + +wMapPalOffset:: ; d35d +; 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 + ds 1 + +W_CURMAP:: ; d35e + ds 1 + +wCurrentTileBlockMapViewPointer:: ; d35f +; pointer to the upper left corner of the current view in the tile block map + ds 2 + +W_YCOORD:: ; d361 +; player’s position on the current map + ds 1 + +W_XCOORD:: ; d362 + ds 1 + +W_YBLOCKCOORD:: ; d363 +; player's y position (by block) + ds 1 + +W_XBLOCKCOORD:: ; d364 + ds 1 + +wLastMap:: ; d365 + ds 1 + +wd366:: ds 1 + +W_CURMAPTILESET:: ; d367 + ds 1 + +W_CURMAPHEIGHT:: ; d368 +; blocks + ds 1 + +W_CURMAPWIDTH:: ; d369 +; blocks + ds 1 + +W_MAPDATAPTR:: ; d36a + ds 2 + +W_MAPTEXTPTR:: ; d36c + ds 2 + +W_MAPSCRIPTPTR:: ; d36e + ds 2 + +W_MAPCONNECTIONS:: ; d370 +; connection byte + ds 1 + +W_MAPCONN1PTR:: ; d371 + ds 1 + +wd372:: ds 1 +wd373:: ds 1 +wd374:: ds 1 +wd375:: ds 1 +wd376:: ds 1 +wd377:: ds 1 +wd378:: ds 1 +wd379:: ds 1 +wd37a:: ds 1 +wd37b:: ds 1 + +W_MAPCONN2PTR:: ; d37c + ds 1 + +wd37d:: ds 1 +wd37e:: ds 1 +wd37f:: ds 1 +wd380:: ds 1 +wd381:: ds 1 +wd382:: ds 1 +wd383:: ds 1 +wd384:: ds 1 +wd385:: ds 1 +wd386:: ds 1 + +W_MAPCONN3PTR:: ; d387 + ds 1 + +wd388:: ds 1 +wd389:: ds 1 +wd38a:: ds 1 +wd38b:: ds 1 +wd38c:: ds 1 +wd38d:: ds 1 +wd38e:: ds 1 +wd38f:: ds 1 +wd390:: ds 1 +wd391:: ds 1 + +W_MAPCONN4PTR:: ; d392 + ds 1 + +wd393:: ds 1 +wd394:: ds 1 +wd395:: ds 1 +wd396:: ds 1 +wd397:: ds 1 +wd398:: ds 1 +wd399:: ds 1 +wd39a:: ds 1 +wd39b:: ds 1 +wd39c:: ds 1 + +W_SPRITESET:: ; d39d +; sprite set for the current map (11 sprite picture ID's) + ds 11 + +W_SPRITESETID:: ; d3a8 +; sprite set ID for the current map + ds 1 + +wd3a9:: ds 1 +wd3aa:: ds 3 +wd3ad:: ds 1 + +wNumberOfWarps:: ; d3ae +; number of warps in current map + ds 1 + +wWarpEntries:: ; d3af +; current map warp entries + ds 128 + +wDestinationWarpID:: ; d42f +; if $ff, the player's coordinates are not updated when entering the map + ds 1 + +wd430:: ds 1 ; d430 +wd431:: ds 1 ; d431 + + ds 3 + +wd435:: ds 1 +wd436:: ds 1 + + ds 60 + +wd472:: ds 1 +wd473:: ds 1 + + ds 61 + +wd4b0:: ds 1 +wd4b1:: ds 32 +wd4d1:: ds 16 + +W_NUMSPRITES:: ; d4e1 +; number of sprites on the current map + ds 1 + +; 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 +wYOffsetSinceLastSpecialWarp:: ; d4e2 + ds 1 +wXOffsetSinceLastSpecialWarp:: ; d4e3 + ds 1 + +W_MAPSPRITEDATA:: ; d4e4 +; two bytes per sprite (movement byte 2, text ID) + ds 32 + +W_MAPSPRITEEXTRADATA:: ; d504 +; two bytes per sprite (trainer class/item ID, trainer set ID) + ds 32 + +wd524:: ds 1 +wd525:: ds 1 + +wMapViewVRAMPointer:: ; d526 +; the address of the upper left corner of the visible portion of the BG tile map in VRAM + ds 2 + +wd528:: ds 1 +wd529:: ds 1 +wd52a:: ds 1 + +W_TILESETBANK:: ; d52b + ds 1 + +W_TILESETBLOCKSPTR:: ; d52c +; maps blocks (4x4 tiles) to tiles + ds 2 + +W_TILESETGFXPTR:: ; d52e + ds 2 + +W_TILESETCOLLISIONPTR:: ; d530 +; list of all walkable tiles + ds 2 + +W_TILESETTALKINGOVERTILES:: ; d532 + ds 3 + +W_GRASSTILE:: ; d535 + ds 1 + + ds 4 + +wNumBoxItems:: ; d53a + ds 1 +wBoxItems:: ; d53b +; item, quantity + ds 50 * 2 + ds 1 ; end + +wd5a0:: ds 2 +wd5a2:: ds 1 +wd5a3:: ds 1 + +wPlayerCoins:: ; d5a4 + ds 2 ; BCD + +W_MISSABLEOBJECTFLAGS:: ; d5a6 +; bit array of missable objects. set = removed + ds 39 + +wd5cd:: ds 1 + +W_MISSABLEOBJECTLIST:: ; d5ce +; each entry consists of 2 bytes +; * the sprite ID (depending on the current map) +; * the missable object index (global, used for W_MISSABLEOBJECTFLAGS) +; terminated with $FF + ds 17 * 2 + +W_GAMEPROGRESSFLAGS:: ; d5f0 +; $c8 bytes + ds 0 + +W_OAKSLABCURSCRIPT:: ; d5f0 + ds 1 +W_PALLETTOWNCURSCRIPT:: ; d5f1 + ds 1 + ds 1 +W_BLUESHOUSECURSCRIPT:: ; d5f3 + ds 1 +W_VIRIDIANCITYCURSCRIPT:: ; d5f4 + ds 1 + ds 2 +W_PEWTERCITYCURSCRIPT:: ; d5f7 + ds 1 +W_ROUTE3CURSCRIPT:: ; d5f8 + ds 1 +W_ROUTE4CURSCRIPT:: ; d5f9 + ds 1 + ds 1 +W_VIRIDIANGYMCURSCRIPT:: ; d5fb + ds 1 +W_PEWTERGYMCURSCRIPT:: ; d5fc + ds 1 +W_CERULEANGYMCURSCRIPT:: ; d5fd + ds 1 +W_VERMILIONGYMCURSCRIPT:: ; d5fe + ds 1 +W_CELADONGYMCURSCRIPT:: ; d5ff + ds 1 +W_ROUTE6CURSCRIPT:: ; d600 + ds 1 +W_ROUTE8CURSCRIPT:: ; d601 + ds 1 +W_ROUTE24CURSCRIPT:: ; d602 + ds 1 +W_ROUTE25CURSCRIPT:: ; d603 + ds 1 +W_ROUTE9CURSCRIPT:: ; d604 + ds 1 +W_ROUTE10CURSCRIPT:: ; d605 + ds 1 +W_MTMOON1CURSCRIPT:: ; d606 + ds 1 +W_MTMOON3CURSCRIPT:: ; d607 + ds 1 +W_SSANNE8CURSCRIPT:: ; d608 + ds 1 +W_SSANNE9CURSCRIPT:: ; d609 + ds 1 +W_ROUTE22CURSCRIPT:: ; d60a + ds 1 + ds 1 +W_REDSHOUSE2CURSCRIPT:: ; d60c + ds 1 +W_VIRIDIANMARKETCURSCRIPT:: ; d60d + ds 1 +W_ROUTE22GATECURSCRIPT:: ; d60e + ds 1 +W_CERULEANCITYCURSCRIPT:: ; d60f + ds 1 + ds 7 +W_SSANNE5CURSCRIPT:: ; d617 + ds 1 +W_VIRIDIANFORESTCURSCRIPT:: ; d618 + ds 1 +W_MUSEUM1FCURSCRIPT:: ; d619 + ds 1 +W_ROUTE13CURSCRIPT:: ; d61a + ds 1 +W_ROUTE14CURSCRIPT:: ; d61b + ds 1 +W_ROUTE17CURSCRIPT:: ; d61c + ds 1 +W_ROUTE19CURSCRIPT:: ; d61d + ds 1 +W_ROUTE21CURSCRIPT:: ; d61e + ds 1 +W_SAFARIZONEENTRANCECURSCRIPT:: ; d61f + ds 1 +W_ROCKTUNNEL2CURSCRIPT:: ; d620 + ds 1 +W_ROCKTUNNEL1CURSCRIPT:: ; d621 + ds 1 + ds 1 +W_ROUTE11CURSCRIPT:: ; d623 + ds 1 +W_ROUTE12CURSCRIPT:: ; d624 + ds 1 +W_ROUTE15CURSCRIPT:: ; d625 + ds 1 +W_ROUTE16CURSCRIPT:: ; d626 + ds 1 +W_ROUTE18CURSCRIPT:: ; d627 + ds 1 +W_ROUTE20CURSCRIPT:: ; d628 + ds 1 +W_SSANNE10CURSCRIPT:: ; d629 + ds 1 +W_VERMILIONCITYCURSCRIPT:: ; d62a + ds 1 +W_POKEMONTOWER2CURSCRIPT:: ; d62b + ds 1 +W_POKEMONTOWER3CURSCRIPT:: ; d62c + ds 1 +W_POKEMONTOWER4CURSCRIPT:: ; d62d + ds 1 +W_POKEMONTOWER5CURSCRIPT:: ; d62e + ds 1 +W_POKEMONTOWER6CURSCRIPT:: ; d62f + ds 1 +W_POKEMONTOWER7CURSCRIPT:: ; d630 + ds 1 +W_ROCKETHIDEOUT1CURSCRIPT:: ; d631 + ds 1 +W_ROCKETHIDEOUT2CURSCRIPT:: ; d632 + ds 1 +W_ROCKETHIDEOUT3CURSCRIPT:: ; d633 + ds 1 +W_ROCKETHIDEOUT4CURSCRIPT:: ; d634 + ds 2 +W_ROUTE6GATECURSCRIPT:: ; d636 + ds 1 +W_ROUTE8GATECURSCRIPT:: ; d637 + ds 2 +W_CINNABARISLANDCURSCRIPT:: ; d639 + ds 1 +W_MANSION1CURSCRIPT:: ; d63a + ds 2 +W_MANSION2CURSCRIPT:: ; d63c + ds 1 +W_MANSION3CURSCRIPT:: ; d63d + ds 1 +W_MANSION4CURSCRIPT:: ; d63e + ds 1 +W_VICTORYROAD2CURSCRIPT:: ; d63f + ds 1 +W_VICTORYROAD3CURSCRIPT:: ; d640 + ds 2 +W_FIGHTINGDOJOCURSCRIPT:: ; d642 + ds 1 +W_SILPHCO2CURSCRIPT:: ; d643 + ds 1 +W_SILPHCO3CURSCRIPT:: ; d644 + ds 1 +W_SILPHCO4CURSCRIPT:: ; d645 + ds 1 +W_SILPHCO5CURSCRIPT:: ; d646 + ds 1 +W_SILPHCO6CURSCRIPT:: ; d647 + ds 1 +W_SILPHCO7CURSCRIPT:: ; d648 + ds 1 +W_SILPHCO8CURSCRIPT:: ; d649 + ds 1 +W_SILPHCO9CURSCRIPT:: ; d64a + ds 1 +W_HALLOFFAMEROOMCURSCRIPT:: ; d64b + ds 1 +W_GARYCURSCRIPT:: ; d64c + ds 1 +W_LORELEICURSCRIPT:: ; d64d + ds 1 +W_BRUNOCURSCRIPT:: ; d64e + ds 1 +W_AGATHACURSCRIPT:: ; d64f + ds 1 +W_UNKNOWNDUNGEON3CURSCRIPT:: ; d650 + ds 1 +W_VICTORYROAD1CURSCRIPT:: ; d651 + ds 1 + ds 1 +W_LANCECURSCRIPT:: ; d653 + ds 1 + ds 4 +W_SILPHCO10CURSCRIPT:: ; d658 + ds 1 +W_SILPHCO11CURSCRIPT:: ; d659 + ds 1 + ds 1 +W_FUCHSIAGYMCURSCRIPT:: ; d65b + ds 1 +W_SAFFRONGYMCURSCRIPT:: ; d65c + ds 1 + ds 1 +W_CINNABARGYMCURSCRIPT:: ; d65e + ds 1 +W_CELADONGAMECORNERCURSCRIPT:: ; d65f + ds 1 +W_ROUTE16GATECURSCRIPT:: ; d660 + ds 1 +W_BILLSHOUSECURSCRIPT:: ; d661 + ds 1 +W_ROUTE5GATECURSCRIPT:: ; d662 + ds 1 +W_POWERPLANTCURSCRIPT:: ; d663 +; overload + ds 0 +W_ROUTE7GATECURSCRIPT:: ; d663 +; overload + ds 1 + ds 1 +W_SSANNE2CURSCRIPT:: ; d665 + ds 1 +W_SEAFOAMISLANDS4CURSCRIPT:: ; d666 + ds 1 +W_ROUTE23CURSCRIPT:: ; d667 + ds 1 +W_SEAFOAMISLANDS5CURSCRIPT:: ; d668 + ds 1 +W_ROUTE18GATECURSCRIPT:: ; d669 + ds 1 + + ds 134 + +wd6f0:: ds 14 +wd6fe:: ds 2 + +wWalkBikeSurfState:: ; d700 +; $00 = walking +; $01 = biking +; $02 = surfing + ds 1 + + ds 10 + +W_TOWNVISITEDFLAG:: ; d70b + flag_array 13 + +wSafariSteps:: ; d70d +; starts at 502 + ds 2 + +W_FOSSILITEM:: ; d70f +; item given to cinnabar lab + ds 1 + +W_FOSSILMON:: ; d710 +; mon that will result from the item + ds 1 + + ds 2 + +W_ENEMYMONORTRAINERCLASS:: ; d713 +; trainer classes start at $c8 + ds 1 + +wPlayerJumpingYScreenCoordsIndex:: ; d714 + ds 1 + +W_RIVALSTARTER:: ; d715 + ds 1 + + ds 1 + +W_PLAYERSTARTER:: ; d717 + ds 1 + +wBoulderSpriteIndex:: ; d718 +; sprite index of the boulder the player is trying to push + ds 1 + +wLastBlackoutMap:: ; d719 + ds 1 + +wDestinationMap:: ; d71a +; destination map (for certain types of special warps, not ordinary walking) + ds 1 + +wd71b:: ds 1 + +wTileInFrontOfBoulderAndBoulderCollisionResult:: ; d71c +; 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) + ds 1 + +wDungeonWarpDestinationMap:: ; d71d +; destination map for dungeon warps + ds 1 + +wWhichDungeonWarp:: ; d71e +; which dungeon warp within the source map was used + ds 1 + +wd71f:: ds 9 + +wd728:: +; bit 0: using Strength outside of battle + ds 1 + + ds 1 + +wd72a:: ds 2 + +wd72c:: ; d72c +; bit 0: if not set, the 3 minimum steps between random battles have passed + ds 1 + +wd72d:: ds 1 +wd72e:: ds 2 + +wd730:: +; bit 0: NPC sprite being moved by script +; bit 5: ignore joypad input +; bit 6: print text with no delay between each letter +; bit 7: set if joypad states are being simulated in the overworld + ds 1 + + ds 1 + +wd732:: ; d732 +; bit 0: play time being counted +; bit 1: remnant of debug mode? not set by the game code. +; if it is set +; 1. skips most of Prof. Oak's speech, and uses NINTEN as the player's name and SONY as the rival's name +; 2. does not have the player start in floor two of the playyer's house (instead sending them to [wLastMap]) +; 3. allows wild battles to be avoided by holding down B +; 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) + ds 1 + +W_FLAGS_D733:: ; d733 +; bit 4: use variable [W_CURMAPSCRIPT] instead of the provided index for next frame's map script (used to start battle when talking to trainers) +; bit 7: used fly out of battle + ds 1 + +wd734:: ds 2 + +wd736:: ; d736 +; bit 0: check if the player is standing on a door and make him walk down a step if so +; bit 1: the player is currently stepping down from a door +; bit 2: standing on a warp +; bit 6: jumping down a ledge + ds 1 + +wCompletedInGameTradeFlags:: ; d737 + ds 2 + + ds 2 + +wd73b:: ds 1 +wd73c:: ds 3 + +wCardKeyDoorY:: ; d73f + ds 1 + +wCardKeyDoorX:: ; d740 + ds 1 + + ds 2 + +wd743:: ds 1 +wd744:: ds 3 +wd747:: ds 3 +wd74a:: ds 1 + +wd74b:: ; d74b +; bit 0: Prof. Oak has lead the player to the north end of his lab +; bit 1: Prof. Oak has asked the player to choose a pokemon +; bit 2: the player and the rival have received their pokemon +; bit 3: the player has battled the rival in Oak's lab +; bit 4: Prof. Oak has given the player 5 pokeballs +; bit 5: received pokedex + ds 1 + +wd74c:: ds 2 +wd74e:: ds 3 +wd751:: ds 1 +wd752:: ds 2 +wd754:: ds 1 +wd755:: ds 5 +wd75a:: ds 1 +wd75b:: ds 3 +wd75e:: ds 1 +wd75f:: ds 5 +wd764:: ds 1 +wd765:: ds 1 +wd766:: ds 1 +wd767:: ds 1 +wd768:: ds 1 +wd769:: ds 3 +wd76c:: ds 5 +wd771:: ds 2 +wd773:: ds 4 +wd777:: ds 1 +wd778:: ds 4 +wd77c:: ds 1 +wd77d:: ds 1 +wd77e:: ds 5 +wd783:: ds 11 +wd78e:: ds 2 +wd790:: ds 2 +wd792:: ds 4 +wd796:: ds 2 +wd798:: ds 2 +wd79a:: ds 1 +wd79b:: ds 1 +wd79c:: ds 5 +wd7a1:: ds 2 +wd7a3:: ds 12 +wd7af:: ds 2 +wd7b1:: ds 2 +wd7b3:: ds 1 +wd7b4:: ds 5 +wd7b9:: ds 4 +wd7bd:: ds 2 +wd7bf:: ds 3 +wd7c2:: ds 1 +wd7c3:: ds 2 +wd7c5:: ds 1 +wd7c6:: ds 3 +wd7c9:: ds 4 +wd7cd:: ds 2 +wd7cf:: ds 2 +wd7d1:: ds 1 +wd7d2:: ds 1 +wd7d3:: ds 2 +wd7d5:: ds 1 +wd7d6:: ds 1 +wd7d7:: ds 1 +wd7d8:: ds 1 +wd7d9:: ds 2 +wd7db:: ds 2 +wd7dd:: ds 2 +wd7df:: ds 1 +wd7e0:: ds 1 +wd7e1:: ds 2 +wd7e3:: ds 2 +wd7e5:: ds 2 +wd7e7:: ds 1 +wd7e8:: ds 1 +wd7e9:: ds 2 +wd7eb:: ds 2 +wd7ed:: ds 1 +wd7ee:: ds 1 +wd7ef:: ds 1 +wd7f0:: ds 1 +wd7f1:: ds 1 +wd7f2:: ds 1 +wd7f3:: ds 2 +wd7f5:: ds 1 +wd7f6:: ds 9 +wd7ff:: ds 4 +wd803:: ds 2 +wd805:: ds 2 +wd807:: ds 2 +wd809:: ds 10 +wd813:: ds 2 +wd815:: ds 1 +wd816:: ds 1 +wd817:: ds 2 +wd819:: ds 2 +wd81b:: ds 10 +wd825:: ds 1 +wd826:: ds 1 +wd827:: ds 1 +wd828:: ds 1 +wd829:: ds 1 +wd82a:: ds 1 +wd82b:: ds 1 +wd82c:: ds 1 +wd82d:: ds 1 +wd82e:: ds 1 +wd82f:: ds 1 +wd830:: ds 1 +wd831:: ds 1 +wd832:: ds 1 +wd833:: ds 1 +wd834:: ds 1 +wd835:: ds 1 +wd836:: ds 1 +wd837:: ds 1 +wd838:: ds 15 +wd847:: ds 2 +wd849:: ds 2 +wd84b:: ds 12 +wd857:: ds 8 +wd85f:: ds 4 +wd863:: ds 1 +wd864:: ds 1 +wd865:: ds 1 +wd866:: ds 1 +wd867:: ds 2 +wd869:: ds 20 +wd87d:: ds 2 +wd87f:: ds 1 +wd880:: ds 1 +wd881:: ds 1 +wd882:: ds 5 + +wLinkEnemyTrainerName:: ; d887 +; linked game's trainer name + +W_GRASSRATE:: ; d887 + ds 1 + +W_GRASSMONS:: ; d888 + ds 20 + + +wEnemyPartyCount:: ds 1 ; d89c +wEnemyPartyMons:: ds PARTY_LENGTH + 1 ; d89d + +wEnemyMons:: ; d8a4 +wEnemyMon1:: party_struct wEnemyMon1 +wEnemyMon2:: party_struct wEnemyMon2 +wEnemyMon3:: party_struct wEnemyMon3 +wEnemyMon4:: party_struct wEnemyMon4 +wEnemyMon5:: party_struct wEnemyMon5 +wEnemyMon6:: party_struct wEnemyMon6 + +wEnemyMonOT:: ds 11 * PARTY_LENGTH ; d9ac +wEnemyMonNicks:: ds 11 * PARTY_LENGTH ; d9ee + + +W_TRAINERHEADERPTR:: ; da30 + ds 2 + + ds 6 + +wda38:: ds 1 + +W_CURMAPSCRIPT:: ; da39 +; index of current map script, mostly used as index for function pointer array +; mostly copied from map-specific map script pointer and wirtten back later + ds 1 + + ds 6 + +W_PLAYTIMEHOURS:: ; da40 + ds 2 +W_PLAYTIMEMINUTES:: ; da42 + ds 2 +W_PLAYTIMESECONDS:: ; da44 + ds 1 +W_PLAYTIMEFRAMES:: ; da45 + ds 1 + +wSafariZoneGameOver:: ; da46 + ds 1 + +W_NUMSAFARIBALLS:: ; da47 + ds 1 + + +W_DAYCARE_IN_USE:: ; da48 +; 0 if no pokemon is in the daycare +; 1 if pokemon is in the daycare + ds 1 + +W_DAYCAREMONNAME:: ds 11 ; da49 +W_DAYCAREMONOT:: ds 11 ; da54 + +wDayCareMon:: box_struct wDayCareMon ; da5f + + +W_NUMINBOX:: ds 1 ; da80 +wBoxSpecies:: ds MONS_PER_BOX + 1 + +wBoxMons:: +wBoxMon1:: box_struct wBoxMon1 ; da96 +wBoxMon2:: ds box_struct_length * (MONS_PER_BOX + -1) ; dab7 + +wBoxMonOT:: ds 11 * MONS_PER_BOX ; dd2a +wBoxMonNicks:: ds 11 * MONS_PER_BOX ; de06 +wBoxMonNicksEnd:: ; dee2 + + +SECTION "Stack", WRAMX[$dfff], BANK[1] +wStack:: ; dfff + ds -$100 + + +INCLUDE "sram.asm" |