diff options
author | luckytyphlosion <alan.rj.huang@gmail.com> | 2015-05-17 18:21:24 -0400 |
---|---|---|
committer | luckytyphlosion <alan.rj.huang@gmail.com> | 2015-05-17 18:21:24 -0400 |
commit | b5f5a16f43ef62680f09666073f07911306e1561 (patch) | |
tree | b62055647e8b02b8d0341639b398f1ed1a1913a2 /wram.asm | |
parent | fb327a0a949f9ce2f25116c29ee6c9d2aa83bd94 (diff) |
Completed home/overworld.asm with other related functions
Diffstat (limited to 'wram.asm')
-rwxr-xr-x | wram.asm | 4602 |
1 files changed, 2305 insertions, 2297 deletions
@@ -1,2297 +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 - - ds 4 - -wd435:: ds 1 -wd436:: ds 1 - - ds 122 - -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"
|