summaryrefslogtreecommitdiff
path: root/wram.asm
diff options
context:
space:
mode:
Diffstat (limited to 'wram.asm')
-rw-r--r--wram.asm1123
1 files changed, 558 insertions, 565 deletions
diff --git a/wram.asm b/wram.asm
index 8f4bbb5e..d3e9d034 100644
--- a/wram.asm
+++ b/wram.asm
@@ -313,106 +313,185 @@ wListMenuID: ; cf94
; ID used by DisplayListMenuID
ds 1
+ ds 48
+wWalkCounter: ; cfc5
+; walk animation counter
+ 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
+ ds 1
+
+wMusicChannelPointer: ; cfc7
+; (the current music channel address - $4000) / 3
+ ds 1
+
+ ds 4
+
+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
+
+ ds 1
+
+W_ENEMYMONNAME: ; cfda
+ ds 11
+
+ 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]
-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
+ ds 2 ; W_ENEMYMONPP
+
+ ds 7
+
+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 37
+
+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
+
+ 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
+
+ ds 1
+
+W_MOVEMISSED: ; d05f
+ ds 1
+
+ ds 2
+
+W_PLAYERBATTSTATUS1: ; d062
; bit 0 - bide
; bit 1 - thrash / petal dance
; bit 2 - attacking multiple times (e.g. double kick)
@@ -421,8 +500,9 @@ W_MOVEMISSED EQU $D05F
; bit 5 - using multi-turn move (e.g. wrap)
; bit 6 - invulnerable to normal attack (using fly/dig)
; bit 7 - confusion
+ ds 1
-; Battle Status Byte 2
+W_PLAYERBATTSTATUS2: ; d063
; bit 0 - X Accuracy effect
; bit 1 - protected by "mist"
; bit 2 - focus energy effect
@@ -430,355 +510,387 @@ W_MOVEMISSED EQU $D05F
; bit 5 - need to recharge
; bit 6 - rage
; bit 7 - leech seeded
+ ds 1
-; Battle Status Byte 3
+W_PLAYERBATTSTATUS3: ; d064
; bit 0 - toxic
; bit 1 - light screen
; bit 2 - reflect
; bit 3 - tranformed
+ ds 1
+
+ ds 2
+
+W_ENEMYBATTSTATUS1: ; d067
+ ds 1
+W_ENEMYBATTSTATUS2: ; d068
+ ds 1
+W_ENEMYBATTSTATUS3: ; d069
+ ds 1
+
+ ds 2
+
+W_PLAYERTOXICCOUNTER: ; d06c
+ ds 1
+W_PLAYERDISABLEDMOVE: ; d06d
+ ds 1
-W_PLAYERBATTSTATUS1 EQU $D062
-W_PLAYERBATTSTATUS2 EQU $D063
-W_PLAYERBATTSTATUS3 EQU $D064
+ ds 3
-W_ENEMYBATTSTATUS1 EQU $D067
-W_ENEMYBATTSTATUS2 EQU $D068
-W_ENEMYBATTSTATUS3 EQU $D069
+W_ENEMYTOXICCOUNTER: ; d071
+ ds 1
+W_ENEMYDISABLEDMOVE: ; d072
+ ds 1
-W_PLAYERTOXICCOUNTER EQU $D06C
-W_PLAYERDISABLEDMOVE EQU $D06D
+ ds 1
-W_ENEMYTOXICCOUNTER EQU $D071
-W_ENEMYDISABLEDMOVE EQU $D072
+W_NUMHITS: ; d074
+; number of hits in attacks like Doubleslap, etc.
+ ds 1
-W_NUMHITS EQU $D074 ; number of hits in attacks like Doubleslap, etc.
+ ds 7
-W_ANIMATIONID EQU $D07C ; ID number of the current battle animation
+W_ANIMATIONID: ; d07c
+; ID number of the current battle animation
+ ds 1
+
+ ds 4
; base coordinates of frame block
-W_BASECOORDX EQU $D081
-W_BASECOORDY EQU $D082
+W_BASECOORDX: ; d081
+ ds 1
+W_BASECOORDY: ; d082
+ ds 1
+
+ ds 1
+
+W_FBTILECOUNTER: ; d084
+; counts how many tiles of the current frame block have been drawn
+ ds 1
+
+ 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
-W_FBTILECOUNTER EQU $D084 ; counts how many tiles of the current frame block have been drawn
+ ds 1
-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: ; d089
+; number of tiles in current battle animation frame block
+ ds 1
-W_NUMFBTILES EQU $D089 ; number of tiles in current battle animation frame block
+ ds 1
-W_SUBANIMTRANSFORM EQU $D08B ; controls what transformations are applied to the subanimation
+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 EQU $D08C
-W_PBSTOREDREGISTERL EQU $D08D
-W_PBSTOREDREGISTERD EQU $D08E
-W_PBSTOREDREGISTERE EQU $D08F
-W_PBSTOREDROMBANK EQU $D092
+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 EQU $D094 ; the address _of the address_ of the current subanimation entry (2 bytes)
+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
-W_SUBANIMSUBENTRYADDR EQU $D096 ; the address of the current subentry of the current subanimation (2 bytes)
+ ds 4
-W_FBDESTADDR EQU $D09C ; current destination address in OAM for frame blocks (2 bytes, big endian)
+W_FBDESTADDR: ; d09c
+; current destination address in OAM for frame blocks (big endian)
+ ds 2
-W_FBMODE EQU $D09E ; controls how the frame blocks are put together to form frames
+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
-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)
+ ds 1
+
+
+SECTION "Sprite Buffers", SRAM
+
+SPRITEBUFFERSIZE EQU 7*7 * 8 ; 7 * 7 (tiles) * 8 (bytes per tile)
+
+S_SPRITEBUFFER0: ; a000
+ ds SPRITEBUFFERSIZE
+S_SPRITEBUFFER1: ; a188
+ ds SPRITEBUFFERSIZE
+S_SPRITEBUFFER2: ; a310
+ ds SPRITEBUFFERSIZE
+
+
+SECTION "Sprites", WRAMX[$d0a1], BANK[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
-W_SPRITEOUTPUTBITOFFSET EQU $D0A7
+ 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)
-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
+ 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
+
+ ds 1
+
+W_LISTTYPE: ; d0b6
+ ds 1
+
+ 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
+ ds 7
+
+ ds 4
+
+W_MONHPADDING: ; d0d7
+
+
+W_DAMAGE: ; d0d7
+ ds 1
+
+ ds 79
+
+W_CURENEMYLVL: ; d127
+ ds 1
+
+ ds 3
+
+W_ISLINKBATTLE: ; d12b
+ ds 1
+
+ ds 17
+
+W_PRIZE1: ; d13d
+ ds 1
+W_PRIZE2: ; d13e
+ ds 1
+W_PRIZE3: ; d13f
+ ds 1
+
+ ds 24
+
+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
SECTION "Pokedex", WRAMX[$d2f7], BANK[1]
@@ -792,59 +904,21 @@ wPokedexSeen: ; d30a
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
+wNumBagItems: ; d31d
+ ds 1
+wBagItems: ; d31e
+; item, quantity
+ ds 20 * 2
+ ds 1 ; end
; money is in decimal
-W_PLAYERMONEY3 EQU $D347
-W_PLAYERMONEY2 EQU $D348
-W_PLAYERMONEY1 EQU $D349
+wPlayerMoney: ; d347
+ ds 3
-W_RIVALNAME EQU $D34A ; 11 characters, including null
+W_RIVALNAME: ; d34a
+ ds 11
-W_OPTIONS EQU $D355
+W_OPTIONS: ; d355
; bit 7 = battle animation
; 0: On
; 1: Off
@@ -855,13 +929,22 @@ W_OPTIONS EQU $D355
; 1: Fast
; 3: Medium
; 5: Slow
+ ds 1
-W_OBTAINEDBADGES EQU $D356
+W_OBTAINEDBADGES: ; d356
+ ds 1
-W_PLAYERIDHI EQU $D359
-W_PLAYERIDLO EQU $D35A
+ ds 2
-W_CURMAP EQU $D35E
+wPlayerID: ; d359
+ ds 2
+
+ ds 3
+
+W_CURMAP: ; d35e
+ ds 1
+
+ ds 2
W_YCOORD EQU $D361 ; player’s position on the current map
W_XCOORD EQU $D362
@@ -899,122 +982,32 @@ 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
+
+SECTION "Items", WRAMX[$d53a], BANK[1]
+
+wNumBoxItems: ; d53a
+ ds 1
+wBoxItems: ; d53b
+; item, quantity
+ ds 50 * 2
+ ds 1 ; end
+
+ ds 4
; 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
+wPlayerCoins: ; d5a4
+ ds 2
+
+W_MISSABLEOBJECTFLAGS: ; d5a6
+; bit array of missable objects. set = removed
+ ds 40
+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
-W_MISSABLEOBJECTLIST EQU $D5CE
+ ds 17 * 2
W_GAMEPROGRESSFLAGS EQU $D5F0 ; $c8 bytes
W_OAKSLABCURSCRIPT EQU $D5F0