shithub: pokered

ref: 35493bef27ba0425860a0f419c64371b824b6981
dir: /wram.asm/

View raw version

INCLUDE "constants/wram_constants.asm"

flag_array: MACRO
	ds ((\1) + 7) / 8
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

wTileMapBackup:: ; c508
; buffer for temporarily saving and restoring current screen's tiles
; (e.g. if menus are drawn on top)
	ds 20 * 18

	ds 120

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

wcc35:: 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
wcc38:: ds 2
wcc3a:: ds 1
wcc3b:: ds 1
wcc3c:: ds 1
wcc3d:: ds 1
wcc3e:: ds 4
wcc42:: ds 1
wcc43:: ds 4
wcc47:: ds 1
wcc48:: ds 1
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

wcc57:: ds 1
wcc58:: ds 3
wcc5b:: ds 1
wcc5c:: ds 1
wcc5d:: ds 1
wcc5e:: ds 13
wcc6b:: ds 14
wcc79:: ds 30
wcc97:: ds 10
wcca1:: ds 49

wRLEByteCount:: ; ccd2
	ds 1

wccd3:: ds 1
wccd4:: ds 1
wccd5:: ds 2

; 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

wccde:: 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
wcce5:: ds 2
wcce7:: ds 1
wcce8:: ds 1
wcce9:: ds 2
wcceb:: ds 1
wccec:: ds 1
wcced:: ds 1
wccee:: ds 1
wccef:: ds 1
wccf0:: ds 1
wccf1:: ds 1
wccf2:: ds 1
wccf3:: ds 1
wccf4:: ds 1
wccf5:: ds 1
wccf6:: ds 1
wccf7:: ds 14
wcd05:: ds 1
wcd06:: ds 9
wcd0f:: ds 1
wcd10:: ds 1
wcd11:: ds 1
wcd12:: ds 1
wcd13:: ds 7

; 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
wPlayerMonAccuracyMod:: ; cd1e
	ds 1
wPlayerMonEvasionMod:: ; cd1f
	ds 1

	ds 3

wcd23:: ds 3
wcd26:: ds 3
wcd29:: ds 4

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

wcd34:: ds 3
wcd37:: ds 1
wcd38:: ds 1
wcd39:: ds 1
wcd3a:: ds 1
wcd3b:: ds 2

wWhichTrade:: ; cd3d
; which entry from TradeMons to select
;	ds 1

wTrainerSpriteOffset:: ; cd3d
	ds 1
wTrainerEngageDistance:: ; cd3e
	ds 1
wTrainerFacingDirection:: ; cd3f
wcd3f::
	ds 1
wTrainerScreenY:: ; cd40
	ds 1
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
wcd4c:: ds 1
wcd4d:: ds 1
wcd4e:: ds 1
wcd4f:: ds 1
wcd50:: ds 9
wcd59:: ds 1
wcd5a:: ds 1
wcd5b:: ds 1
wcd5c:: ds 1
wcd5d:: ds 1
wcd5e:: ds 1
wcd5f:: ds 1

wFlags_0xcd60:: ; cd60
; bit 0: is player engaged by trainer (to avoid being engaged by multiple trainers simultaneously)
	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

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
wcf0b:: ds 1
wcf0c:: ds 1
wcf0d:: ds 1
wcf0e:: ds 1
wcf0f:: ds 1
wcf10:: ds 1
wcf11:: ds 1

wPredefParentBank:: ; cf12
	ds 1

wcf13:: ds 1

wCurSpriteMovement2:: ; cf14
; movement byte 2 of current sprite
	ds 1

	ds 2

wcf17:: ds 1
wcf18:: ds 2

wGBC:: ; cf1a
	ds 1

wcf1b:: 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
wcf4d:: ds 18

wGymCityName:: ; cf5f
wStringBuffer1:: ; cf5f
	ds 16 + 1
wGymLeaderName:: ; cf70
wStringBuffer2:: ; cf70
	ds 16 + 1
wStringBuffer3:: ; cf81
	ds 9 + 1

wcf8b:: ds 1
wcf8c:: ds 1
wcf8d:: ds 1
wcf8e:: ds 1
wcf8f:: ds 1
wcf90:: ds 1
wcf91:: ds 1

wWhichPokemon:: ; cf92
; which pokemon you selected
	ds 1

wcf93:: ds 1

wListMenuID:: ; cf94
; ID used by DisplayListMenuID
	ds 1

wcf95:: ds 1
wcf96:: ds 1
wcf97:: ds 1
wcf98:: ds 1
wcf99:: ds 1
wcf9a:: ds 1
wcf9b:: ds 1
wcf9c:: ds 4
wcfa0:: ds 4
wcfa4:: ds 2
wcfa6:: ds 2
wcfa8:: ds 7
wcfaf:: ds 10
wcfb9:: ds 1
wcfba:: ds 1
wcfbb:: ds 1
wcfbc:: ds 2
wcfbe:: ds 2
wcfc0:: ds 2
wcfc2:: ds 2
wcfc4:: ds 1

wWalkCounter:: ; cfc5
; walk animation counter
	ds 1

wcfc6:: ds 1

wMusicHeaderPointer:: ; cfc7
; (the current music channel address - $4000) / 3
	ds 1

wcfc8:: ds 1
wcfc9:: ds 1
wcfca:: ds 1
wcfcb:: 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

W_ENEMYMONID:: ; cfd8
	ds 1

wcfd9:: ds 1

W_ENEMYMONNAME:: ; cfda
	ds 11

wcfe5:: ds 1

W_ENEMYMONCURHP:: ; cfe6
; active opponent's hp (16 bits)
	ds 2
W_ENEMYMONNUMBER:: ; cfe8
; active opponent's position in team (0 to 5)
	ds 1
W_ENEMYMONSTATUS:: ; cfe9
; active opponent's status condition
	ds 1
W_ENEMYMONTYPES:: ; cfea
W_ENEMYMONTYPE1:: ; cfea
	ds 1
W_ENEMYMONTYPE2:: ; cfeb
	ds 1
	ds 1
W_ENEMYMONMOVES:: ; cfed
	ds 4
W_ENEMYMONATKDEFIV:: ; cff1
	ds 1
W_ENEMYMONSPDSPCIV:: ; cff2
	ds 1
W_ENEMYMONLEVEL:: ; cff3
	ds 1
W_ENEMYMONMAXHP:: ; cff4
	ds 2
W_ENEMYMONATTACK:: ; cff6
	ds 2
W_ENEMYMONDEFENSE:: ; cff8
	ds 2
W_ENEMYMONSPEED:: ; cffa
	ds 2
W_ENEMYMONSPECIAL:: ; cffc
	ds 2

W_ENEMYMONPP:: ; cffe
; four moves (extends past $cfff)
	ds 2


SECTION "WRAM Bank 1", WRAMX, BANK[1]

	ds 2 ; W_ENEMYMONPP

wd002:: ds 5
wd007:: ds 1
wd008:: ds 1

W_PLAYERMONNAME:: ; d009
	ds 11

W_PLAYERMONID:: ; d014
	ds 1

W_PLAYERMONCURHP:: ; d015
	ds 2
	ds 1
W_PLAYERMONSTATUS:: ; d018
; the status of the player’s current monster
	ds 1
W_PLAYERMONTYPES:: ; d019
W_PLAYERMONTYPE1:: ; d019
	ds 1
W_PLAYERMONTYPE2:: ; d01a
	ds 1
	ds 1
W_PLAYERMONMOVES:: ; d01c
	ds 4
W_PLAYERMONIVS:: ; d020
; 4x 4 bit: atk, def, spd, spc
	ds 2
W_PLAYERMONLEVEL:: ; d022
	ds 1
W_PLAYERMONMAXHP:: ; d023
	ds 2
W_PLAYERMONATK:: ; d025
	ds 2
W_PLAYERMONDEF:: ; d027
	ds 2
W_PLAYERMONSPEED:: ; d029
	ds 2
W_PLAYERMONSPECIAL:: ; d02b
	ds 2
W_PLAYERMONPP:: ; d02d
	ds 4

W_TRAINERCLASS:: ; d031
	ds 1

	ds 1

wd033:: ds 1
wd034:: ds 2
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

W_PLAYERMONSALIVEFLAGS:: ; d058
; 6 bit array, 1 if player mon is alive
	ds 1

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

wd05b:: 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

wd05e:: ds 1

W_MOVEMISSED:: ; d05f
	ds 1

wd060:: ds 1
wd061:: 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

wd065:: ds 1
wd066:: ds 1

W_ENEMYBATTSTATUS1:: ; d067
	ds 1
W_ENEMYBATTSTATUS2:: ; d068
	ds 1
W_ENEMYBATTSTATUS3:: ; d069
	ds 1

wd06a:: ds 1
wd06b:: ds 1

W_PLAYERTOXICCOUNTER:: ; d06c
	ds 1
W_PLAYERDISABLEDMOVE:: ; d06d
	ds 1

	ds 1

wd06f:: ds 1
wd070:: ds 1

W_ENEMYTOXICCOUNTER:: ; d071
	ds 1
W_ENEMYDISABLEDMOVE:: ; d072
	ds 1

	ds 1

W_NUMHITS:: ; d074
; number of hits in attacks like Doubleslap, etc.
	ds 1

wd075:: ds 3
wd078:: ds 1
wd079:: ds 1
wd07a:: ds 1
wd07b:: 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

wd083:: ds 1

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

wd08a:: ds 1

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

W_PBSTOREDREGISTERH:: ; d08c
	ds 1
W_PBSTOREDREGISTERL:: ; d08d
	ds 1
W_PBSTOREDREGISTERD:: ; d08e
	ds 1
W_PBSTOREDREGISTERE:: ; d08f
	ds 1

	ds 2

W_PBSTOREDROMBANK:: ; 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
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

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

W_LISTTYPE:: ; 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 1

wd0d8:: ds 3
wd0db:: ds 1
wd0dc:: ds 4
wd0e0:: ds 1
wd0e1:: ds 56
wd119:: ds 1
wd11a:: ds 1
wd11b:: ds 1
wd11c:: ds 1
wd11d:: ds 1
wd11e:: ds 1
wd11f:: ds 1
wd120:: ds 1
wd121:: ds 1
wd122:: ds 2
wd124:: ds 1
wd125:: ds 1
wd126:: ds 1

W_CURENEMYLVL:: ; d127
	ds 1

wd128:: ds 1
wd129:: ds 1
wd12a:: ds 1

W_ISLINKBATTLE:: ; d12b
	ds 1

wd12c:: 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
wd13a:: ds 1
wd13b:: ds 1
wd13c:: ds 1

W_PRIZE1:: ; d13d
	ds 1
W_PRIZE2:: ; d13e
	ds 1
W_PRIZE3:: ; d13f
	ds 1

	ds 1

wd141:: ds 2
wd143:: ds 2
wd145:: ds 3
wd148:: ds 10
wd152:: ds 1
wd153:: ds 3
wd156:: ds 1
wd157:: ds 1

W_PLAYERNAME:: ; d158
	ds 11

W_NUMINPARTY:: ; d163
	ds 1
W_PARTYMON1:: ; d164
	ds 1
W_PARTYMON2:: ; d165
	ds 1
W_PARTYMON3:: ; d166
	ds 1
W_PARTYMON4:: ; d167
	ds 1
W_PARTYMON5:: ; d168
	ds 1
W_PARTYMON6:: ; d169
	ds 1
W_PARTYMONEND:: ; d16a
	ds 1

W_PARTYMON1DATA:: ; d16b
W_PARTYMON1_NUM:: ; d16b
	ds 1
W_PARTYMON1_HP:: ; d16c
	ds 2
W_PARTYMON1_BOXLEVEL:: ; d16e
	ds 1
W_PARTYMON1_STATUS:: ; d16f
	ds 1
W_PARTYMON1_TYPE1:: ; d170
	ds 1
W_PARTYMON1_TYPE2:: ; d171
	ds 1
W_PARTYMON1_CRATE:: ; d172
	ds 1
W_PARTYMON1_MOVE1:: ; d173
	ds 1
W_PARTYMON1_MOVE2:: ; d174
	ds 1
W_PARTYMON1_MOVE3:: ; d175
	ds 1
W_PARTYMON1_MOVE4:: ; d176
	ds 1
W_PARTYMON1_OTID:: ; d177
	ds 2
W_PARTYMON1_EXP:: ; d179
	ds 3
W_PARTYMON1_EVHP:: ; d17c
	ds 2
W_PARTYMON1_EVATTACK:: ; d17e
	ds 2
W_PARTYMON1_EVDEFENSE:: ; d180
	ds 2
W_PARTYMON1_EVSPEED:: ; d182
	ds 2
W_PARTYMON1_EVSECIAL:: ; d184
	ds 2
W_PARTYMON1_IV:: ; d186
	ds 2
W_PARTYMON1_MOVE1PP:: ; d188
	ds 1
W_PARTYMON1_MOVE2PP:: ; d189
	ds 1
W_PARTYMON1_MOVE3PP:: ; d18a
	ds 1
W_PARTYMON1_MOVE4PP:: ; d18b
	ds 1
W_PARTYMON1_LEVEL:: ; d18c
	ds 1
W_PARTYMON1_MAXHP:: ; d18d
	ds 2
W_PARTYMON1_ATACK:: ; d18f
	ds 2
W_PARTYMON1_DEFENSE:: ; d191
	ds 2
W_PARTYMON1_SPEED:: ; d193
	ds 2
W_PARTYMON1_SPECIAL:: ; d195
	ds 2

W_PARTYMON2DATA:: ; d197
	ds 44
W_PARTYMON3DATA:: ; d1c3
	ds 44
W_PARTYMON4DATA:: ; d1ef
	ds 44
W_PARTYMON5DATA:: ; d21b
	ds 44
W_PARTYMON6DATA:: ; d247
	ds 44

W_PARTYMON1OT:: ; d273
	ds 11
W_PARTYMON2OT:: ; d27e
	ds 11
W_PARTYMON3OT:: ; d289
	ds 11
W_PARTYMON4OT:: ; d294
	ds 11
W_PARTYMON5OT:: ; d29f
	ds 11
W_PARTYMON6OT:: ; d2aa
	ds 11

W_PARTYMON1NAME:: ; d2b5
	ds 11
W_PARTYMON2NAME:: ; d2c0
	ds 11
W_PARTYMON3NAME:: ; d2cb
	ds 11
W_PARTYMON4NAME:: ; d2d6
	ds 11
W_PARTYMON5NAME:: ; d2e1
	ds 11
W_PARTYMON6NAME:: ; d2ec
	ds 11


wPokedexOwned:: ; d2f7
	flag_array 151
wPokedexOwnedEnd::

wPokedexSeen:: ; d30a
	flag_array 151
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
wd35d:: ds 1

W_CURMAP:: ; d35e
	ds 1

wd35f:: ds 1
wd360:: ds 1

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
wd3ae:: ds 1
wd3af:: ds 128
wd42f:: ds 129
wd4b0:: ds 1
wd4b1:: ds 32
wd4d1:: ds 16

W_NUMSPRITES:: ; d4e1
; number of sprites on the current map
; two bytes per sprite (movement byte 2 , text ID)
	ds 1

wd4e2:: ds 1
wd4e3:: ds 1

W_MAPSPRITEDATA:: ; d4e4
; two bytes per sprite (trainer class/item ID , trainer set ID)
	ds 32

W_MAPSPRITEEXTRADATA:: ; d504
	ds 32

wd524:: ds 1
wd525:: ds 1
wd526:: ds 1
wd527:: ds 1
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
wd700:: ds 11

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

wd714:: ds 1

W_RIVALSTARTER:: ; d715
	ds 1

	ds 1

W_PLAYERSTARTER:: ; d717
	ds 1

wd718:: ds 1

wLastBlackoutMap:: ; d719
	ds 1

wd71a:: ds 1
wd71b:: ds 1
wd71c:: ds 1
wd71d:: ds 1
wd71e:: ds 1
wd71f:: ds 9
wd728:: ds 2
wd72a:: ds 2
wd72c:: ds 1
wd72d:: ds 1
wd72e:: ds 2
wd730:: ds 2
wd732:: 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)
	ds 1

wd734:: ds 2
wd736:: ds 1
wd737:: ds 4
wd73b:: ds 1
wd73c:: ds 3
wd73f:: ds 1
wd740:: ds 3
wd743:: ds 1
wd744:: ds 3
wd747:: ds 3
wd74a:: ds 1
wd74b:: 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

W_GRASSRATE:: ; d887
	ds 1

W_GRASSMONS:: ; d888
	ds 20

wEnemyPartyCount:: ; d89c
	ds 1
wEnemyPartyMons:: ; d89d
	ds 6
	ds 1 ; end


wEnemyMons::

wEnemyMon1:: ; d8a4
wEnemyMon1Species:: ; d8a4
	ds 1
W_ENEMYMON1HP:: ; d8a5
	ds 2

	ds 1

wd8a8:: ds 4
wd8ac:: ds 2

W_ENEMYMON1MOVE3:: ; d8ae
	ds 19
wd8c1:: ds 4
wd8c5:: ds 1
wd8c6:: ds 20

W_ENEMYMON2MOVE3:: ; d8da
	ds 44
W_ENEMYMON3MOVE3:: ; d906
	ds 44
W_ENEMYMON4MOVE3:: ; d932
	ds 44
W_ENEMYMON5MOVE3:: ; d95e
	ds 44
W_ENEMYMON6MOVE3:: ; d98a
	ds 22
wd9a0:: ds 12

W_ENEMYMON1OT:: ; d9ac
	ds 11
W_ENEMYMON2OT:: ; d9b7
	ds 11
W_ENEMYMON3OT:: ; d9c2
	ds 11
W_ENEMYMON4OT:: ; d9cd
	ds 11
W_ENEMYMON5OT:: ; d9d8
	ds 11
W_ENEMYMON6OT:: ; d9e3
	ds 11

W_ENEMYMON1NAME:: ; d9ee
	ds 11
W_ENEMYMON2NAME:: ; d9f9
	ds 11
W_ENEMYMON3NAME:: ; da04
	ds 11
W_ENEMYMON4NAME:: ; da0f
	ds 11
W_ENEMYMON5NAME:: ; da1a
	ds 11
W_ENEMYMON6NAME:: ; da25
	ds 11

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

wda46:: 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:: ; da49
	ds 11

W_DAYCAREMONOT:: ; da54
	ds 11

W_DAYCAREMONDATA:: ; da5f
	ds 3
wda62:: ds 5
wda67:: ds 6
wda6d:: ds 2
wda6f:: ds 17


W_NUMINBOX:: ; da80
; number of mons in current box
	ds 1
wda81::
	ds 20
	ds 1

W_BOXMON1DATA:: ; da96
	ds 8
wda9e:: ds 25
W_BOXMON2DATA:: ; dab7
	ds 33 * 19

W_BOXMON1OT:: ; dd2a
	ds 11
W_BOXMON2OT:: ; dd35
	ds 11 * 19

W_BOXMON1NAME:: ; de06
	ds 11
W_BOXMON2NAME:: ; de11
	ds 11 * 19

wdee2::
	ds 1

SECTION "Stack", WRAMX[$dfff], BANK[1]
wStack:: ; dfff
	ds -$100


SECTION "Sprite Buffers", SRAM

S_SPRITEBUFFER0:: ; a000
	ds SPRITEBUFFERSIZE
S_SPRITEBUFFER1:: ; a188
	ds SPRITEBUFFERSIZE
S_SPRITEBUFFER2:: ; a310
	ds SPRITEBUFFERSIZE