shithub: pokered

ref: 766429f7d65b9519d2d6b2c6ab8c86ba35c6f32a
dir: /wram.asm/

View raw version


SECTION "WRAM Bank 0", WRAM0


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

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


wOAMBuffer: ; c300
; buffer for OAM data. Copied to OAM by DMA
	ds 4 * 40


SECTION "Tile Map", WRAM0[$c3a0]

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

; c670


SECTION "Screen Edge Tiles", WRAM0[$cbfc]

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

; cc2b

	ds 3

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

	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

	ds 19

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

	ds 10

wTrainerHeaderFlagBit: ; cc55
	ds 1

; cc56


SECTION "RLE", WRAM0[$ccd2]
wRLEByteCount: ; ccd2
	ds 1

	ds 4

; current HP of player and enemy substitutes
wPlayerSubstituteHP: ; ccd7
	ds 1
wEnemySubstituteHP: ; ccd8
	ds 1

	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

	ds 1

wAICount: ; ccdf
; number of times remaining that AI action can occur
	ds 1

	ds 2

wEnemyMoveListIndex: ; cce2
	ds 1

; cce3


SECTION "Stat Modifiers", WRAM0[$cd1a]

; 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 13

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

	ds 9

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

wTrainerSpriteOffset: ; cd3d
	ds 1
wTrainerEngageDistance: ; cd3e
	ds 1
wTrainerFacingDirection: ; cd3f
	ds 1
wTrainerScreenY: ; cd40
	ds 1
wTrainerScreenX: ; cd41
	ds 1

	ds 30

wFlags_0xcd60: ; cd60
; bit 0: is player engaged by trainer (to avoid being engaged by multiple trainers simultaniously)
	ds 1

	ds 10

wJoypadForbiddenButtonsMask: ; cd6b
; bit 1 means button presses will be ignored for that button
	ds 1

	ds 21

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
; used for temporary things

wHPBarMaxHP: ; cee9
	ds 2
wHPBarOldHP: ; ceeb
	ds 2
wHPBarNewHP: ; ceed
	ds 2
wHPBarDelta: ; ceef
	ds 1

	ds 13

wHPBarHPDifference: ; cefd
	ds 1

	ds 9

wAnimSoundID: ; cf07
; sound ID during battle animations
	ds 1

	ds 12

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

	ds 74

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

wWhichPokemon: ; cf92
; which pokemon you selected
	ds 1

	ds 1

wListMenuID: ; cf94
; ID used by DisplayListMenuID
	ds 1



W_WALKCOUNTER EQU $CFC5 ; walk animation counter

W_CURCHANNELPOINTER EQU $CFC7 ; (the current music channel pointer - $4000) / 3

W_ENEMYMOVENUM      EQU $CFCC
W_ENEMYMOVEEFFECT   EQU $CFCD
W_ENEMYMOVEPOWER    EQU $CFCE
W_ENEMYMOVETYPE     EQU $CFCF
W_ENEMYMOVEACCURACY EQU $CFD0
W_ENEMYMOVEMAXPP    EQU $CFD1

W_PLAYERMOVENUM      EQU $CFD2
W_PLAYERMOVEEFFECT   EQU $CFD3
W_PLAYERMOVEPOWER    EQU $CFD4
W_PLAYERMOVETYPE     EQU $CFD5
W_PLAYERMOVEACCURACY EQU $CFD6
W_PLAYERMOVEMAXPP    EQU $CFD7

W_ENEMYMONID    EQU $CFD8

W_ENEMYMONNAME  EQU $CFDA

W_ENEMYMONCURHP EQU $CFE6 ; active opponent's hp (16 bits)
W_ENEMYMONNUMBER EQU $CFE8 ; active opponent's position in team (0 to 5)
W_ENEMYMONSTATUS EQU $CFE9 ; active opponent's status condition
	; bit 0 slp
	; bit 1 slp
	; bit 2 slp
	; bit 3 psn
	; bit 4 brn
	; bit 5 frz
	; bit 6 par
	; unused? (XXX confirm)
W_ENEMYMONTYPES    EQU $CFEA
W_ENEMYMONTYPE1    EQU $CFEA
W_ENEMYMONTYPE2    EQU $CFEB
W_ENEMYMONMOVES    EQU $CFED
W_ENEMYMONATKDEFIV EQU $CFF1
W_ENEMYMONSPDSPCIV EQU $CFF2
W_ENEMYMONLEVEL    EQU $CFF3
W_ENEMYMONMAXHP    EQU $CFF4 ; (16 bits)
W_ENEMYMONATTACK   EQU $CFF6
W_ENEMYMONDEFENSE  EQU $CFF8
W_ENEMYMONSPEED    EQU $CFFA
W_ENEMYMONSPECIAL  EQU $CFFC
W_ENEMYMONPP       EQU $CFFE


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

W_PLAYERMONNAME   EQU $D009
W_PLAYERMONID     EQU $D014
W_PLAYERMONCURHP  EQU $D015 ; active opponent's hp (16 bits)
W_PLAYERMONSTATUS EQU $D018 ; the status of the player’s current monster
	; bit 0 slp
	; bit 1 slp
	; bit 2 slp
	; bit 3 psn
	; bit 4 brn
	; bit 5 frz
	; bit 6 par
	; unused? (XXX confirm)
W_PLAYERMONTYPES    EQU $D019
W_PLAYERMONTYPE1    EQU $D019
W_PLAYERMONTYPE2    EQU $D01A
W_PLAYERMONMOVES    EQU $D01C
W_PLAYERMONIVS      EQU $D020 ; 4x 4 bit: atk, def, spd, spc
W_PLAYERMONLEVEL    EQU $D022
W_PLAYERMONMAXHP    EQU $D023 ; (16 bits)
W_PLAYERMONATK      EQU $D025
W_PLAYERMONDEF      EQU $D027
W_PLAYERMONSPEED    EQU $D029
W_PLAYERMONSPECIAL  EQU $D02B
W_PLAYERMONPP       EQU $D02D

W_TRAINERCLASS EQU $D031

W_ISINBATTLE EQU $D057 ; no battle, this is 0
                       ; wild battle, this is 1
                       ; trainer battle, this is 2

W_PLAYERMONSALIVEFLAGS EQU $D058 ; 6 bit array, 1 if player mon is alive

W_CUROPPONENT EQU $D059 ; in a wild battle, this is the species of pokemon
                        ; in a trainer battle, this is the trainer class + $C8

W_BATTLETYPE EQU $D05A ; in normal battle, this is 0
                       ; in old man battle, this is 1
                       ; in safari battle, this is 2

W_LONEATTACKNO EQU $D05C ; which entry in LoneAttacks to use
W_GYMLEADERNO  EQU $D05C ; it's actually the same thing as ^
W_TRAINERNO    EQU $D05D ; which instance of [youngster, lass, etc] is this?

W_MOVEMISSED EQU $D05F

; not entirely sure that all these bits are 100% correct
; Battle Status Byte 1
; 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

; Battle Status Byte 2
; 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

; Battle Status Byte 3
; bit 0 - toxic
; bit 1 - light screen
; bit 2 - reflect
; bit 3 - tranformed

W_PLAYERBATTSTATUS1 EQU $D062
W_PLAYERBATTSTATUS2 EQU $D063
W_PLAYERBATTSTATUS3 EQU $D064

W_ENEMYBATTSTATUS1 EQU $D067
W_ENEMYBATTSTATUS2 EQU $D068
W_ENEMYBATTSTATUS3 EQU $D069

W_PLAYERTOXICCOUNTER EQU $D06C
W_PLAYERDISABLEDMOVE EQU $D06D

W_ENEMYTOXICCOUNTER EQU $D071
W_ENEMYDISABLEDMOVE EQU $D072

W_NUMHITS EQU $D074 ; number of hits in attacks like Doubleslap, etc.

W_ANIMATIONID EQU $D07C ; ID number of the current battle animation

; base coordinates of frame block
W_BASECOORDX EQU $D081
W_BASECOORDY EQU $D082

W_FBTILECOUNTER EQU $D084 ; counts how many tiles of the current frame block have been drawn

W_SUBANIMFRAMEDELAY EQU $D086 ; duration of each frame of the current subanimation in terms of screen refreshes
W_SUBANIMCOUNTER EQU $D087 ; counts the number of subentries left in the current subanimation

W_NUMFBTILES EQU $D089 ; number of tiles in current battle animation frame block

W_SUBANIMTRANSFORM EQU $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

W_PBSTOREDREGISTERH  EQU $D08C
W_PBSTOREDREGISTERL  EQU $D08D
W_PBSTOREDREGISTERD  EQU $D08E
W_PBSTOREDREGISTERE  EQU $D08F
W_PBSTOREDROMBANK    EQU $D092

W_SUBANIMADDRPTR EQU $D094 ; the address _of the address_ of the current subanimation entry (2 bytes)

W_SUBANIMSUBENTRYADDR EQU $D096 ; the address of the current subentry of the current subanimation (2 bytes)

W_FBDESTADDR EQU $D09C ; current destination address in OAM for frame blocks (2 bytes, big endian)

W_FBMODE EQU $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
SPRITEBUFFERSIZE   EQU $188 ; 7 * 7 (tiles) * 8 (bytes per tile)
S_SPRITEBUFFER0    EQU $A000 + 0 * SPRITEBUFFERSIZE
S_SPRITEBUFFER1    EQU $A000 + 1 * SPRITEBUFFERSIZE
S_SPRITEBUFFER2    EQU $A000 + 2 * SPRITEBUFFERSIZE

W_SPRITECURPOSX         EQU $D0A1
W_SPRITECURPOSY         EQU $D0A2
W_SPRITEWITDH           EQU $D0A3
W_SPRITEHEIGHT          EQU $D0A4
W_SPRITEINPUTCURBYTE    EQU $D0A5 ; current input byte
W_SPRITEINPUTBITCOUNTER EQU $D0A6 ; bit offset of last read input bit

; 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
W_SPRITEOUTPUTBITOFFSET EQU $D0A7

; bit 0 determines used buffer (0 -> $a188, 1 -> $a310)
; bit 1 loading last sprite chunk? (there are at most 2 chunks per load operation)
W_SPRITELOADFLAGS       EQU $D0A8
W_SPRITEUNPACKMODE      EQU $D0A9
W_SPRITEFLIPPED         EQU $D0AA

W_SPRITEINPUTPTR        EQU $D0AB ; pointer to next input byte
W_SPRITEOUTPUTPTR       EQU $D0AD ; pointer to current output byte
W_SPRITEOUTPUTPTRCACHED EQU $D0AF ; used to revert pointer for different bit offsets
W_SPRITEDECODETABLE0PTR EQU $D0B1 ; pointer to differential decoding table (assuming initial value 0)
W_SPRITEDECODETABLE1PTR EQU $D0B3 ; pointer to differential decoding table (assuming initial value 1)


; List type
; used in $D0B6
W_LISTTYPE    EQU $D0B6

W_MONHEADER       EQU $d0b8
W_MONHDEXNUM      EQU $d0b8
W_MONHBASESTATS   EQU $d0b9
;W_MONHBASEHP      EQU $d0b9
;W_MONHBASEATTACK  EQU $d0ba
;W_MONHBASEDEFENSE EQU $d0bb
W_MONHBASESPEED   EQU $d0bc
;W_MONHBASESPECIAL EQU $d0bd
W_MONHTYPES       EQU $d0be
W_MONHTYPE1       EQU $d0be
W_MONHTYPE2       EQU $d0bf
W_MONHCATCHRATE   EQU $d0c0
;W_MONHBASEXP      EQU $d0c1
W_MONHSPRITEDIM   EQU $d0c2
W_MONHFRONTSPRITE EQU $d0c3
W_MONHBACKSPRITE  EQU $d0c5
W_MONHMOVES       EQU $d0c7
;W_MONHMOVE1       EQU $d0c7
;W_MONHMOVE2       EQU $d0c8
;W_MONHMOVE3       EQU $d0c9
;W_MONHMOVE4       EQU $d0ca
W_MONHGROWTHRATE  EQU $d0cb
W_MONHLEARNSET    EQU $d0cc ; bit field, 7 bytes
;W_MONHPADDING     EQU $d0d7



W_DAMAGE EQU $D0D7


W_CURENEMYLVL EQU $D127

W_ISLINKBATTLE EQU $D12B

W_PRIZE1 EQU $D13D
W_PRIZE2 EQU $D13E
W_PRIZE3 EQU $D13F

W_PLAYERNAME EQU $D158 ; 11 characters, including null

W_NUMINPARTY EQU $D163

W_PARTYMON1 EQU $D164
W_PARTYMON2 EQU $D165
W_PARTYMON3 EQU $D166
W_PARTYMON4 EQU $D167
W_PARTYMON5 EQU $D168
W_PARTYMON6 EQU $D169
W_PARTYMONEND EQU $D16A

W_PARTYMON1DATA EQU $D16B
W_PARTYMON1_NUM EQU $D16B
W_PARTYMON1_HP EQU $D16C
W_PARTYMON1_BOXLEVEL EQU $D16E
W_PARTYMON1_STATUS EQU $D16F
W_PARTYMON1_TYPE1 EQU $D170
W_PARTYMON1_TYPE2 EQU $D171
W_PARTYMON1_CRATE EQU $D172
W_PARTYMON1_MOVE1 EQU $D173
W_PARTYMON1_MOVE2 EQU $D174
W_PARTYMON1_MOVE3 EQU $D175
W_PARTYMON1_MOVE4 EQU $D176
W_PARTYMON1_OTID EQU $D177
W_PARTYMON1_EXP EQU $D179
W_PARTYMON1_EVHP EQU $D17C
W_PARTYMON1_EVATTACK EQU $D17E
W_PARTYMON1_EVDEFENSE EQU $D180
W_PARTYMON1_EVSPEED EQU $D182
W_PARTYMON1_EVSECIAL EQU $D184
W_PARTYMON1_IV EQU $D186
W_PARTYMON1_MOVE1PP EQU $D188
W_PARTYMON1_MOVE2PP EQU $D189
W_PARTYMON1_MOVE3PP EQU $D18A
W_PARTYMON1_MOVE4PP EQU $D18B
W_PARTYMON1_LEVEL EQU $D18C
W_PARTYMON1_MAXHP EQU $D18D
W_PARTYMON1_ATACK EQU $D18F
W_PARTYMON1_DEFENSE EQU $D191
W_PARTYMON1_SPEED EQU $D193
W_PARTYMON1_SPECIAL EQU $D195

W_PARTYMON2DATA EQU $D197
W_PARTYMON2_NUM EQU $D197
W_PARTYMON2_HP EQU $D198
W_PARTYMON2_BOXLEVEL EQU $D19A
W_PARTYMON2_STATUS EQU $D19B
W_PARTYMON2_TYPE1 EQU $D19C
W_PARTYMON2_TYPE2 EQU $D19D
W_PARTYMON2_CRATE EQU $D19E
W_PARTYMON2_MOVE1 EQU $D19F
W_PARTYMON2_MOVE2 EQU $D1A0
W_PARTYMON2_MOVE3 EQU $D1A1
W_PARTYMON2_MOVE4 EQU $D1A2
W_PARTYMON2_OTID EQU $D1A3
W_PARTYMON2_EXP EQU $D1A5
W_PARTYMON2_EVHP EQU $D1A8
W_PARTYMON2_EVATTACK EQU $D1AA
W_PARTYMON2_EVDEFENSE EQU $D1AC
W_PARTYMON2_EVSPEED EQU $D1AE
W_PARTYMON2_EVSECIAL EQU $D1B0
W_PARTYMON2_IV EQU $D1B2
W_PARTYMON2_MOVE1PP EQU $D1B4
W_PARTYMON2_MOVE2PP EQU $D1B5
W_PARTYMON2_MOVE3PP EQU $D1B6
W_PARTYMON2_MOVE4PP EQU $D1B7
W_PARTYMON2_LEVEL EQU $D1B8
W_PARTYMON2_MAXHP EQU $D1B9
W_PARTYMON2_ATACK EQU $D1BB
W_PARTYMON2_DEFENSE EQU $D1BD
W_PARTYMON2_SPEED EQU $D1BF
W_PARTYMON2_SPECIAL EQU $D1C1

W_PARTYMON3DATA EQU $D1C3
W_PARTYMON3_NUM EQU $D1C3
W_PARTYMON3_HP EQU $D1C4
W_PARTYMON3_BOXLEVEL EQU $D1C6
W_PARTYMON3_STATUS EQU $D1C7
W_PARTYMON3_TYPE1 EQU $D1C8
W_PARTYMON3_TYPE2 EQU $D1C9
W_PARTYMON3_CRATE EQU $D1CA
W_PARTYMON3_MOVE1 EQU $D1CB
W_PARTYMON3_MOVE2 EQU $D1CC
W_PARTYMON3_MOVE3 EQU $D1CD
W_PARTYMON3_MOVE4 EQU $D1CE
W_PARTYMON3_OTID EQU $D1CF
W_PARTYMON3_EXP EQU $D1D1
W_PARTYMON3_EVHP EQU $D1D4
W_PARTYMON3_EVATTACK EQU $D1D6
W_PARTYMON3_EVDEFENSE EQU $D1D8
W_PARTYMON3_EVSPEED EQU $D1DA
W_PARTYMON3_EVSECIAL EQU $D1DC
W_PARTYMON3_IV EQU $D1DE
W_PARTYMON3_MOVE1PP EQU $D1E0
W_PARTYMON3_MOVE2PP EQU $D1E1
W_PARTYMON3_MOVE3PP EQU $D1E2
W_PARTYMON3_MOVE4PP EQU $D1E3
W_PARTYMON3_LEVEL EQU $D1E4
W_PARTYMON3_MAXHP EQU $D1E5
W_PARTYMON3_ATACK EQU $D1E7
W_PARTYMON3_DEFENSE EQU $D1E9
W_PARTYMON3_SPEED EQU $D1EB
W_PARTYMON3_SPECIAL EQU $D1ED

W_PARTYMON4DATA EQU $D1EF
W_PARTYMON4_NUM EQU $D1EF
W_PARTYMON4_HP EQU $D1F0
W_PARTYMON4_BOXLEVEL EQU $D1F2
W_PARTYMON4_STATUS EQU $D1F3
W_PARTYMON4_TYPE1 EQU $D1F4
W_PARTYMON4_TYPE2 EQU $D1F5
W_PARTYMON4_CRATE EQU $D1F6
W_PARTYMON4_MOVE1 EQU $D1F7
W_PARTYMON4_MOVE2 EQU $D1F8
W_PARTYMON4_MOVE3 EQU $D1F9
W_PARTYMON4_MOVE4 EQU $D1FA
W_PARTYMON4_OTID EQU $D1FB
W_PARTYMON4_EXP EQU $D1FD
W_PARTYMON4_EVHP EQU $D200
W_PARTYMON4_EVATTACK EQU $D202
W_PARTYMON4_EVDEFENSE EQU $D204
W_PARTYMON4_EVSPEED EQU $D206
W_PARTYMON4_EVSECIAL EQU $D208
W_PARTYMON4_IV EQU $D20A
W_PARTYMON4_MOVE1PP EQU $D20C
W_PARTYMON4_MOVE2PP EQU $D20D
W_PARTYMON4_MOVE3PP EQU $D20E
W_PARTYMON4_MOVE4PP EQU $D20F
W_PARTYMON4_LEVEL EQU $D210
W_PARTYMON4_MAXHP EQU $D211
W_PARTYMON4_ATACK EQU $D213
W_PARTYMON4_DEFENSE EQU $D215
W_PARTYMON4_SPEED EQU $D217
W_PARTYMON4_SPECIAL EQU $D219

W_PARTYMON5DATA EQU $D21B
W_PARTYMON5_NUM EQU $D21B
W_PARTYMON5_HP EQU $D21C
W_PARTYMON5_BOXLEVEL EQU $D21E
W_PARTYMON5_STATUS EQU $D21F
W_PARTYMON5_TYPE1 EQU $D220
W_PARTYMON5_TYPE2 EQU $D221
W_PARTYMON5_CRATE EQU $D222
W_PARTYMON5_MOVE1 EQU $D223
W_PARTYMON5_MOVE2 EQU $D224
W_PARTYMON5_MOVE3 EQU $D225
W_PARTYMON5_MOVE4 EQU $D226
W_PARTYMON5_OTID EQU $D227
W_PARTYMON5_EXP EQU $D229
W_PARTYMON5_EVHP EQU $D22C
W_PARTYMON5_EVATTACK EQU $D22E
W_PARTYMON5_EVDEFENSE EQU $D230
W_PARTYMON5_EVSPEED EQU $D232
W_PARTYMON5_EVSECIAL EQU $D234
W_PARTYMON5_IV EQU $D236
W_PARTYMON5_MOVE1PP EQU $D238
W_PARTYMON5_MOVE2PP EQU $D239
W_PARTYMON5_MOVE3PP EQU $D23A
W_PARTYMON5_MOVE4PP EQU $D23B
W_PARTYMON5_LEVEL EQU $D23C
W_PARTYMON5_MAXHP EQU $D23D
W_PARTYMON5_ATACK EQU $D23F
W_PARTYMON5_DEFENSE EQU $D241
W_PARTYMON5_SPEED EQU $D243
W_PARTYMON5_SPECIAL EQU $D245

W_PARTYMON6DATA EQU $D247
W_PARTYMON6_NUM EQU $D247
W_PARTYMON6_HP EQU $D248
W_PARTYMON6_BOXLEVEL EQU $D24A
W_PARTYMON6_STATUS EQU $D24B
W_PARTYMON6_TYPE1 EQU $D24C
W_PARTYMON6_TYPE2 EQU $D24D
W_PARTYMON6_CRATE EQU $D24E
W_PARTYMON6_MOVE1 EQU $D24F
W_PARTYMON6_MOVE2 EQU $D250
W_PARTYMON6_MOVE3 EQU $D251
W_PARTYMON6_MOVE4 EQU $D252
W_PARTYMON6_OTID EQU $D253
W_PARTYMON6_EXP EQU $D255
W_PARTYMON6_EVHP EQU $D258
W_PARTYMON6_EVATTACK EQU $D25A
W_PARTYMON6_EVDEFENSE EQU $D25C
W_PARTYMON6_EVSPEED EQU $D25E
W_PARTYMON6_EVSECIAL EQU $D260
W_PARTYMON6_IV EQU $D262
W_PARTYMON6_MOVE1PP EQU $D264
W_PARTYMON6_MOVE2PP EQU $D265
W_PARTYMON6_MOVE3PP EQU $D266
W_PARTYMON6_MOVE4PP EQU $D267
W_PARTYMON6_LEVEL EQU $D268
W_PARTYMON6_MAXHP EQU $D269
W_PARTYMON6_ATACK EQU $D26B
W_PARTYMON6_DEFENSE EQU $D26D
W_PARTYMON6_SPEED EQU $D26F
W_PARTYMON6_SPECIAL EQU $D271

W_PARTYMON1OT EQU $D273
W_PARTYMON2OT EQU $D27E
W_PARTYMON3OT EQU $D289
W_PARTYMON4OT EQU $D294
W_PARTYMON5OT EQU $D29F
W_PARTYMON6OT EQU $D2AA

W_PARTYMON1NAME EQU $D2B5
W_PARTYMON2NAME EQU $D2C0
W_PARTYMON3NAME EQU $D2CB
W_PARTYMON4NAME EQU $D2D6
W_PARTYMON5NAME EQU $D2E1
W_PARTYMON6NAME EQU $D2EC


SECTION "Pokedex", WRAMX[$d2f7], BANK[1]

wPokedexOwned: ; d2f7
	ds (150 / 8) + 1
wPokedexOwnedEnd:

wPokedexSeen: ; d30a
	ds (150 / 8) + 1
wPokedexSeenEnd:


;number of items in bag
W_NUMBAGITEMS     EQU $D31D
; BAGITEM01  is an item id
; BAGCOUNT01 is how many of this item
W_BAGITEM01         EQU $D31E
W_BAGITEM01QTY      EQU $D31F
W_BAGITEM02         EQU $D320
W_BAGITEM02QTY      EQU $D321
W_BAGITEM03         EQU $D322
W_BAGITEM03QTY      EQU $D323
W_BAGITEM04         EQU $D324
W_BAGITEM04QTY      EQU $D325
W_BAGITEM05         EQU $D326
W_BAGITEM05QTY      EQU $D327
W_BAGITEM06         EQU $D328
W_BAGITEM06QTY      EQU $D329
W_BAGITEM07         EQU $D32A
W_BAGITEM07QTY      EQU $D32B
W_BAGITEM08         EQU $D32C
W_BAGITEM08QTY      EQU $D32D
W_BAGITEM09         EQU $D32E
W_BAGITEM09QTY      EQU $D32F
W_BAGITEM10         EQU $D330
W_BAGITEM10QTY      EQU $D331
W_BAGITEM11         EQU $D332
W_BAGITEM11QTY      EQU $D333
W_BAGITEM12         EQU $D334
W_BAGITEM12QTY      EQU $D335
W_BAGITEM13         EQU $D336
W_BAGITEM13QTY      EQU $D337
W_BAGITEM14         EQU $D338
W_BAGITEM14QTY      EQU $D339
W_BAGITEM15         EQU $D33A
W_BAGITEM15QTY      EQU $D33B
W_BAGITEM16         EQU $D33C
W_BAGITEM16QTY      EQU $D33D
W_BAGITEM17         EQU $D33E
W_BAGITEM17QTY      EQU $D33F
W_BAGITEM18         EQU $D340
W_BAGITEM18QTY      EQU $D341
W_BAGITEM19         EQU $D342
W_BAGITEM19QTY      EQU $D343
W_BAGITEM20         EQU $D344
W_BAGITEM20QTY      EQU $D345

; money is in decimal
W_PLAYERMONEY3 EQU $D347
W_PLAYERMONEY2 EQU $D348
W_PLAYERMONEY1 EQU $D349

W_RIVALNAME  EQU $D34A ; 11 characters, including null

W_OPTIONS EQU $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

W_OBTAINEDBADGES EQU $D356

W_PLAYERIDHI EQU $D359
W_PLAYERIDLO EQU $D35A

W_CURMAP EQU $D35E

W_YCOORD EQU $D361 ; player’s position on the current map
W_XCOORD EQU $D362
W_YBLOCKCOORD EQU $D363 ; player's y position (by block)
W_XBLOCKCOORD EQU $D364

W_CURMAPTILESET EQU $D367
W_CURMAPHEIGHT  EQU $D368 ; blocks
W_CURMAPWIDTH   EQU $D369 ; blocks

W_MAPDATAPTR EQU $D36A
W_MAPTEXTPTR EQU $D36C
W_MAPSCRIPTPTR EQU $D36E
W_MAPCONNECTIONS EQU $D370 ; connection byte
W_MAPCONN1PTR EQU $D371
W_MAPCONN2PTR EQU $D37C
W_MAPCONN3PTR EQU $D387
W_MAPCONN4PTR EQU $D392

W_SPRITESET EQU $D39D ; sprite set for the current map (11 sprite picture ID's)
W_SPRITESETID EQU $D3A8 ; sprite set ID for the current map

W_NUMSPRITES EQU $D4E1 ; number of sprites on the current map

; two bytes per sprite (movement byte 2 , text ID)
W_MAPSPRITEDATA EQU $D4e4

; two bytes per sprite (trainer class/item ID , trainer set ID)
W_MAPSPRITEEXTRADATA EQU $D504

W_TILESETBANK             EQU $D52B
W_TILESETBLOCKSPTR        EQU $D52C ; maps blocks (4x4 tiles) to it's tiles
W_TILESETGFXPTR           EQU $D52E
W_TILESETCOLLISIONPTR     EQU $D530 ; list of all walkable tiles
W_TILESETTALKINGOVERTILES EQU $D532 ; 3 bytes
W_GRASSTILE               EQU $D535

;number of items in box
W_NUMBOXITEMS EQU $D53A
; BOXITEM01    is an item id
; BOXITEM01QTY is how many of this item
W_BOXITEM01       EQU $D53B
W_BOXITEM01QTY    EQU $D53C
W_BOXITEM02       EQU $D53D
W_BOXITEM02QTY    EQU $D53E
W_BOXITEM03       EQU $D53F
W_BOXITEM03QTY    EQU $D540
W_BOXITEM04       EQU $D541
W_BOXITEM04QTY    EQU $D542
W_BOXITEM05       EQU $D543
W_BOXITEM05QTY    EQU $D544
W_BOXITEM06       EQU $D545
W_BOXITEM06QTY    EQU $D546
W_BOXITEM07       EQU $D547
W_BOXITEM07QTY    EQU $D548
W_BOXITEM08       EQU $D549
W_BOXITEM08QTY    EQU $D54A
W_BOXITEM09       EQU $D54B
W_BOXITEM09QTY    EQU $D54C
W_BOXITEM10       EQU $D54D
W_BOXITEM10QTY    EQU $D54E
W_BOXITEM11       EQU $D54F
W_BOXITEM11QTY    EQU $D550
W_BOXITEM12       EQU $D551
W_BOXITEM12QTY    EQU $D552
W_BOXITEM13       EQU $D553
W_BOXITEM13QTY    EQU $D554
W_BOXITEM14       EQU $D555
W_BOXITEM14QTY    EQU $D556
W_BOXITEM15       EQU $D557
W_BOXITEM15QTY    EQU $D558
W_BOXITEM16       EQU $D559
W_BOXITEM16QTY    EQU $D55A
W_BOXITEM17       EQU $D55B
W_BOXITEM17QTY    EQU $D55C
W_BOXITEM18       EQU $D55D
W_BOXITEM18QTY    EQU $D55E
W_BOXITEM19       EQU $D55F
W_BOXITEM19QTY    EQU $D560
W_BOXITEM20       EQU $D561
W_BOXITEM20QTY    EQU $D562
W_BOXITEM21       EQU $D563
W_BOXITEM21QTY    EQU $D564
W_BOXITEM22       EQU $D565
W_BOXITEM22QTY    EQU $D566
W_BOXITEM23       EQU $D567
W_BOXITEM23QTY    EQU $D568
W_BOXITEM24       EQU $D569
W_BOXITEM24QTY    EQU $D56A
W_BOXITEM25       EQU $D56B
W_BOXITEM25QTY    EQU $D56C
W_BOXITEM26       EQU $D56D
W_BOXITEM26QTY    EQU $D56E
W_BOXITEM27       EQU $D56F
W_BOXITEM27QTY    EQU $D570
W_BOXITEM28       EQU $D571
W_BOXITEM28QTY    EQU $D572
W_BOXITEM29       EQU $D573
W_BOXITEM29QTY    EQU $D574
W_BOXITEM30       EQU $D575
W_BOXITEM30QTY    EQU $D576
W_BOXITEM31       EQU $D577
W_BOXITEM31QTY    EQU $D578
W_BOXITEM32       EQU $D579
W_BOXITEM32QTY    EQU $D57A
W_BOXITEM33       EQU $D57B
W_BOXITEM33QTY    EQU $D57C
W_BOXITEM34       EQU $D57D
W_BOXITEM34QTY    EQU $D57E
W_BOXITEM35       EQU $D57F
W_BOXITEM35QTY    EQU $D580
W_BOXITEM36       EQU $D581
W_BOXITEM36QTY    EQU $D582
W_BOXITEM37       EQU $D583
W_BOXITEM37QTY    EQU $D584
W_BOXITEM38       EQU $D585
W_BOXITEM38QTY    EQU $D586
W_BOXITEM39       EQU $D587
W_BOXITEM39QTY    EQU $D588
W_BOXITEM40       EQU $D589
W_BOXITEM40QTY    EQU $D58A
W_BOXITEM41       EQU $D58B
W_BOXITEM41QTY    EQU $D58C
W_BOXITEM42       EQU $D58D
W_BOXITEM42QTY    EQU $D58E
W_BOXITEM43       EQU $D58F
W_BOXITEM43QTY    EQU $D590
W_BOXITEM44       EQU $D591
W_BOXITEM44QTY    EQU $D592
W_BOXITEM45       EQU $D593
W_BOXITEM45QTY    EQU $D594
W_BOXITEM46       EQU $D595
W_BOXITEM46QTY    EQU $D596
W_BOXITEM47       EQU $D597
W_BOXITEM47QTY    EQU $D598
W_BOXITEM48       EQU $D599
W_BOXITEM48QTY    EQU $D59A
W_BOXITEM49       EQU $D59B
W_BOXITEM49QTY    EQU $D59C
W_BOXITEM50       EQU $D59D
W_BOXITEM50QTY    EQU $D59E
;box end of list $D59F

; coins are in decimal
W_PLAYERCOINS1 EQU $D5A4
W_PLAYERCOINS2 EQU $D5A5
W_MISSABLEOBJECTFLAGS EQU $D5A6 ; $20 bytes, bit array of missable objects. bit 1 = removed

; 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
W_MISSABLEOBJECTLIST EQU $D5CE

W_GAMEPROGRESSFLAGS           EQU $D5F0 ; $c8 bytes
W_OAKSLABCURSCRIPT            EQU $D5F0
W_PALLETTOWNCURSCRIPT         EQU $D5F1

W_BLUESHOUSECURSCRIPT         EQU $D5F3
W_VIRIDIANCITYCURSCRIPT       EQU $D5F4

W_PEWTERCITYCURSCRIPT         EQU $D5F7
W_ROUTE3CURSCRIPT             EQU $D5F8
W_ROUTE4CURSCRIPT             EQU $D5F9

W_VIRIDIANGYMCURSCRIPT        EQU $D5FB
W_PEWTERGYMCURSCRIPT          EQU $D5FC
W_CERULEANGYMCURSCRIPT        EQU $D5FD
W_VERMILIONGYMCURSCRIPT       EQU $D5FE
W_CELADONGYMCURSCRIPT         EQU $D5FF
W_ROUTE6CURSCRIPT             EQU $D600
W_ROUTE8CURSCRIPT             EQU $D601
W_ROUTE24CURSCRIPT            EQU $D602
W_ROUTE25CURSCRIPT            EQU $D603
W_ROUTE9CURSCRIPT             EQU $D604
W_ROUTE10CURSCRIPT            EQU $D605
W_MTMOON1CURSCRIPT            EQU $D606
W_MTMOON3CURSCRIPT            EQU $D607
W_SSANNE8CURSCRIPT            EQU $D608
W_SSANNE9CURSCRIPT            EQU $D609
W_ROUTE22CURSCRIPT            EQU $D60A

W_REDSHOUSE2CURSCRIPT         EQU $D60C
W_VIRIDIANMARKETCURSCRIPT     EQU $D60D
W_ROUTE22GATECURSCRIPT        EQU $D60E
W_CERULEANCITYCURSCRIPT       EQU $D60F

W_SSANNE5CURSCRIPT            EQU $D617
W_VIRIDIANFORESTCURSCRIPT     EQU $D618
W_MUSEUMF1CURSCRIPT           EQU $D619
W_ROUTE13CURSCRIPT            EQU $D61A
W_ROUTE14CURSCRIPT            EQU $D61B
W_ROUTE17CURSCRIPT            EQU $D61C
W_ROUTE19CURSCRIPT            EQU $D61D
W_ROUTE21CURSCRIPT            EQU $D61E
W_SAFARIZONEENTRANCECURSCRIPT EQU $D61F
W_ROCKTUNNEL2CURSCRIPT        EQU $D620
W_ROCKTUNNEL1CURSCRIPT        EQU $D621

W_ROUTE11CURSCRIPT            EQU $D623
W_ROUTE12CURSCRIPT            EQU $D624
W_ROUTE15CURSCRIPT            EQU $D625
W_ROUTE16CURSCRIPT            EQU $D626
W_ROUTE18CURSCRIPT            EQU $D627
W_ROUTE20CURSCRIPT            EQU $D628
W_SSANNE10CURSCRIPT           EQU $D629
W_VERMILIONCITYCURSCRIPT      EQU $D62A
W_POKEMONTOWER2CURSCRIPT      EQU $D62B
W_POKEMONTOWER3CURSCRIPT      EQU $D62C
W_POKEMONTOWER4CURSCRIPT      EQU $D62D
W_POKEMONTOWER5CURSCRIPT      EQU $D62E
W_POKEMONTOWER6CURSCRIPT      EQU $D62F
W_POKEMONTOWER7CURSCRIPT      EQU $D630
W_ROCKETHIDEOUT1CURSCRIPT     EQU $D631
W_ROCKETHIDEOUT2CURSCRIPT     EQU $D632
W_ROCKETHIDEOUT3CURSCRIPT     EQU $D633
W_ROCKETHIDEOUT4CURSCRIPT     EQU $D634

W_ROUTE6GATECURSCRIPT         EQU $D636
W_ROUTE8GATECURSCRIPT         EQU $D637

W_CINNABARISLANDCURSCRIPT     EQU $D639
W_MANSION1CURSCRIPT           EQU $D63A

W_MANSION2CURSCRIPT           EQU $D63C
W_MANSION3CURSCRIPT           EQU $D63D
W_MANSION4CURSCRIPT           EQU $D63E
W_VICTORYROAD2CURSCRIPT       EQU $D63F
W_VICTORYROAD3CURSCRIPT       EQU $D640

W_FIGHTINGDOJOCURSCRIPT       EQU $D642
W_SILPHCO2CURSCRIPT           EQU $D643
W_SILPHCO3CURSCRIPT           EQU $D644
W_SILPHCO4CURSCRIPT           EQU $D645
W_SILPHCO5CURSCRIPT           EQU $D646
W_SILPHCO6CURSCRIPT           EQU $D647
W_SILPHCO7CURSCRIPT           EQU $D648
W_SILPHCO8CURSCRIPT           EQU $D649
W_SILPHCO9CURSCRIPT           EQU $D64A
W_HALLOFFAMEROOMCURSCRIPT     EQU $D64B
W_GARYCURSCRIPT               EQU $D64C
W_LORELEICURSCRIPT            EQU $D64D
W_BRUNOCURSCRIPT              EQU $D64E
W_AGATHACURSCRIPT             EQU $D64F
W_UNKNOWNDUNGEON3CURSCRIPT    EQU $D650
W_VICTORYROAD1CURSCRIPT       EQU $D651

W_LANCECURSCRIPT              EQU $D653

W_SILPHCO10CURSCRIPT          EQU $D658
W_SILPHCO11CURSCRIPT          EQU $D659

W_FUCHSIAGYMCURSCRIPT         EQU $D65B
W_SAFFRONGYMCURSCRIPT         EQU $D65C

W_CINNABARGYMCURSCRIPT        EQU $D65E
W_CELADONGAMECORNERCURSCRIPT  EQU $D65F
W_ROUTE16GATECURSCRIPT        EQU $D660
W_BILLSHOUSECURSCRIPT         EQU $D661
W_ROUTE5GATECURSCRIPT         EQU $D662
W_POWERPLANTCURSCRIPT         EQU $D663 ; overload
W_ROUTE7GATECURSCRIPT         EQU $D663 ; overload

W_SSANNE2CURSCRIPT            EQU $D665
W_SEAFOAMISLANDS4CURSCRIPT    EQU $D666
W_ROUTE23CURSCRIPT            EQU $D667
W_SEAFOAMISLANDS5CURSCRIPT    EQU $D668
W_ROUTE18GATECURSCRIPT        EQU $D669

W_TOWNVISITEDFLAG EQU $D70B ; 2 bytes bit array, 1 means visited

W_SAFARITIMER1 EQU $D70D ; use 01 for maximum
W_SAFARITIMER2 EQU $D70E ; use F4 for maximum
W_FOSSILITEM   EQU $D70F ; item given to cinnabar lab
W_FOSSILMON    EQU $D710 ; mon that will result from the item

W_ENEMYMONORTRAINERCLASS EQU $D713 ; trainer classes start at $c8

W_RIVALSTARTER EQU $D715

W_PLAYERSTARTER EQU $D717

; 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)
W_FLAGS_D733 EQU $D733


W_GRASSRATE EQU $D887
W_GRASSMONS EQU $D888
W_WATERRATE EQU $D8A4 ; OVERLOADED
W_WATERMONS EQU $D8A5 ; OVERLOADED

W_ENEMYMONCOUNT  EQU $D89C

W_ENEMYMON1HP EQU $D8A5 ; 16 bits

W_ENEMYMON1MOVE3 EQU $D8AE

W_ENEMYMON2MOVE3 EQU $D8DA

W_ENEMYMON3MOVE3 EQU $D906

W_ENEMYMON4MOVE3 EQU $D932

W_ENEMYMON5MOVE3 EQU $D95E

W_ENEMYMON6MOVE3 EQU $D98A

W_ENEMYMON1OT    EQU $D9AC
W_ENEMYMON2OT    EQU $D9B7
W_ENEMYMON3OT    EQU $D9C2
W_ENEMYMON4OT    EQU $D9CD
W_ENEMYMON5OT    EQU $D9D8
W_ENEMYMON6OT    EQU $D9E3

W_ENEMYMON1NAME     EQU $D9EE
W_ENEMYMON2NAME     EQU $D9F9
W_ENEMYMON3NAME     EQU $DA04
W_ENEMYMON4NAME     EQU $DA0F
W_ENEMYMON5NAME     EQU $DA1A
W_ENEMYMON6NAME     EQU $DA25 ; to $da2f
W_TRAINERHEADERPTR  EQU $DA30

; 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
W_CURMAPSCRIPT      EQU $DA39

W_PLAYTIMEHOURS     EQU $DA40 ; two bytes
W_PLAYTIMEMINUTES   EQU $DA42 ; two bytes
W_PLAYTIMESECONDS   EQU $DA44 ; one byte
W_PLAYTIMEFRAMES    EQU $DA45 ; one byte

W_NUMSAFARIBALLS EQU $DA47

; number of mons in current box
W_NUMINBOX    EQU $DA80
W_BOXMON1DATA EQU $DA96
W_BOXMON2DATA EQU $DAB7