summaryrefslogtreecommitdiff
path: root/constants.asm
diff options
context:
space:
mode:
Diffstat (limited to 'constants.asm')
-rw-r--r--constants.asm98
1 files changed, 97 insertions, 1 deletions
diff --git a/constants.asm b/constants.asm
index 091221a6..d856329c 100644
--- a/constants.asm
+++ b/constants.asm
@@ -105,6 +105,48 @@ PREDEF_JUMP: MACRO
; wram locations
+; 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
+W_SPRITESTATEDATA1 EQU $C100
+
+; 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
+W_SPRITESTATEDATA2 EQU $C200
+
; the tiles of the row or column to be redrawn by RedrawExposedScreenEdge
W_SCREENEDGETILES EQU $CBFC
@@ -144,6 +186,8 @@ W_LISTSCROLLOFFSET EQU $CC36
; set to 0 if you can't go past the top or bottom of the menu
W_MENUWRAPPINGENABLED EQU $CC4A
+W_RLEBYTECOUNTER EQU $CCD2
+
; current HP of player and enemy substitutes
W_PLAYERSUBSITUTEHP EQU $CCD7
W_ENEMYSUBSITUTEHP EQU $CCD8
@@ -180,6 +224,9 @@ W_WHICHTRADE EQU $CD3D ; which entry from TradeMons to select
W_ANIMSOUNDID EQU $CF07 ; sound ID during battle animations
+; movement byte 2 of current sprite
+W_CURSPRITEMOVEMENT2 EQU $CF14
+
W_WHICHPOKEMON EQU $CF92 ; which pokemon you selected
W_LISTMENUID EQU $CF94 ; ID used by DisplayListMenuID
@@ -371,6 +418,11 @@ H_SPRITEINTERLACECOUNTER EQU $FF8B
H_SPRITEHEIGHT EQU $FF8C ; in bytes
H_SPRITEOFFSET EQU $FF8D
+; OAM flags used by this game
+OAMFLAG_ENDOFDATA EQU %00000001 ; pseudo OAM flag, only used by game logic
+OAMFLAG_CANBEMASKED EQU %00000010 ; pseudo OAM flag, only used by game logic
+OAMFLAG_VFLIPPED EQU %00100000 ; OAM flag flips the sprite vertically. Used for making left facing sprites face right and to alternate between left and right foot animation when walking up or down
+
; List type
; used in $D0B6
W_LISTTYPE EQU $D0B6
@@ -729,7 +781,19 @@ 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
-W_PEOPLEMOVEPERMISSIONS EQU $D4E4
+
+; 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
; coins are in decimal
W_PLAYERCOINS1 EQU $D5A4
@@ -762,6 +826,21 @@ 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_PLAYTIMEHOURS EQU $DA40 ; two bytes
W_PLAYTIMEMINUTES EQU $DA42 ; two bytes
W_PLAYTIMESECONDS EQU $DA44 ; one byte
@@ -878,9 +957,24 @@ W_BOXITEM50 EQU $D59D
W_BOXITEM50QTY EQU $D59E
;box end of list $D59F
+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_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
+
; counters for blinking down arrow
H_DOWNARROWBLINKCNT1 EQU $FF8B
H_DOWNARROWBLINKCNT2 EQU $FF8C
@@ -978,6 +1072,8 @@ H_FRAMECOUNTER EQU $FFD5 ; decremented every V-blank (used for delays)
; you can detect that the V-blank handler has run since then.
H_VBLANKOCCURRED EQU $FFD6
+H_CURRENTSPRITEOFFSET EQU $FFDA ; multiple of $10
+
H_WHOSETURN EQU $FFF3 ; 0 on player’s turn, 1 on enemy’s turn
; hardware registers, from the pandocs http://nocash.emubase.de/pandocs.htm