;-----------------------------------------------------------;
;                                                           ;
; Invaded                                                   ;
; Version 1.0                                               ;
; Variable Declarations                                     ;
;                                                           ;
;-----------------------------------------------------------;

vars                    = saferam1      ; Main variable pointer, starts at beginning of saferam1
;------------------------------------------------------------------------------
; Variable Name          Location        Size   Description
;------------------------------------------------------------------------------
menuItem                = vars+000      ; 1     Selection at main menu
speed                   = vars+001      ; 1     Game speed
vatPtr                  = vars+002      ; 2     Pointer to current location in VAT
noLevelsets             = vars+004      ; 1     Number of levels found
dataPtr                 = vars+005      ; 2     Pointer to levelset data
levelsetName            = vars+007      ; 6     Where levelset name is copied to
tileData                = vars+013      ; 2     Save pointer to start of tile data
solidTiles              = vars+015      ; 1     Number where solid tiles begin
hurtyTiles              = vars+016      ; 1     Number where hurty tiles begin
pScreenX                = vars+017      ; 1     Player screen X Coord
cpX                     = vars+018      ; 1     X Block value of last checkpoint passed
levelPtr                = vars+019      ; 2     Pointer to start of level data
noLevels                = vars+021      ; 1     Number of levels in this Levelset
level                   = vars+022      ; 1     Current level
x                       = vars+023      ; 2     X Coord of player
y                       = vars+025      ; 1     Y Coord of player
xScr                    = vars+026      ; 2     X scroll counter
xBlock                  = vars+028      ; 1     X block of top-left tile
frame                   = vars+029      ; 1     Frame counter
clipMask                = vars+030      ; 1     Temp byte for ASCR83
rows2Put                = vars+031      ; 1     Temp byte for ASCR83
bitMask                 = vars+032      ; 1     Temp byte for ASCR83
playerBG                = vars+033      ; 10    Old X/Y coords & background behind player
lives                   = vars+043      ; 1     Number of lives left
score                   = vars+044      ; 2     Score
beam                    = vars+046      ; 1     Beam Power
dead                    = vars+047      ; 1     0 = Player alive, else player dead
hiScore                 = vars+048      ; 2     Hi-Score for this Levelset
noEnemies               = vars+050      ; 1     Number of enemies in a Levelset
#ifdef TI83
tempMem                 = vars+051      ; 2     Pointer to temp program
#endif
orbY                    = vars+053      ; 1     Orb Y Coordinate
orbX                    = vars+054      ; 1     Orb X Coordinate
orbBG                   = vars+055      ; 10    Old X/Y coords & background behind orb
enemyIni                = vars+065      ; 2     Pointer to enemy initialisation array
numEnemiesThisLevel     = vars+067      ; 1     Number of enemies left in the level
lastSprite              = vars+068      ; 2     Pointer to last enemy sprite that was drawn
aiCnt                   = vars+070      ; 1     Input parameter for AI scripts
collideObject1          = vars+071      ; 4     Object 1 for collision detection [x, width, y, height]
collideObject2          = vars+075      ; 4     Object 2 for collision detection [x, width, y, height]
guardian                = vars+079      ; 1     1 = Fighting end-of-level boss
gAICnt1                 = vars+080      ; 1     AI Script 1 counter for end-of-level boss
gAICnt2                 = vars+081      ; 1     AI Script 2 counter for end-of-level boss
gEnemyCnt               = vars+082      ; 1     Counter for end-of-level bosses that produce normal enemies
gEnemyIni               = vars+083      ; 4     Fake enemyIni entry used by end-of-level boss
orb                     = vars+087      ; 1     Flags for Orb
                                        ;       bit 0 = Is Orb on screen
                                        ;       bit 1 = Is player wearing Orb
                                        ;       bit 2 = Is it being worn on the front or back
                                        ;       bit 3 = Is it being shot off the player
specialWeapon           = vars+088      ; 1     Special weapon player has (0 = None)
cmpPtr                  = vars+089      ; 2     Pointer to start of compressed data
scrolled                = vars+091      ; 1     0 = Didn't scroll this frame, 1 = Scrolled this frame
showHLBuffer            = vars+092      ; 7     String buffer

arrays                  = vars+768      ; Main array pointer, starts at end of saferam1
;------------------------------------------------------------------------------
; Array Name             Location        Size   Description
;------------------------------------------------------------------------------
enemyBG                 = arrays-080    ; 80    Enemy backgrounds (8 entries * 10 bytes) [x, y, BG]
enemyArray              = arrays-128    ; 48    Enemies (8 entries * 6 bytes) [type, x, y, health, aiCnt1, aiCnt2]
animationArray          = arrays-143    ; 15    Explosions (5 entries * 3 bytes) [counter, x, y]
eBulletArray            = arrays-183    ; 40    Enemy bullets (10 entries * 4 bytes) [type, x, y, dir]
levelDataTable          = arrays-261    ; 78    Data for current level
guardianBG              = arrays-301    ; 40    End-Of-Level Boss backgrounds
pickupArray             = arrays-313    ; 12    Floating pickups (4 entries * 3 bytes) [type, x, y]
bulletArray             = arrays-413    ; 100   Player bullets (25 entries * 4 bytes) [type, x, y, dir]
enemyScoreTable         = arrays-453    ; 40    Amount of points each enemy is worth (20 entries * 2 bytes)

;------------------------------------------------------------------------------
; Storage Area to store System Pointers (normally after gbuf)
;------------------------------------------------------------------------------
#ifdef TI83
systemPointers          = vars+100
#else
systemPointers          = vars+100
#endif

;------------------------------------------------------------------------------
; levelDataTable layout:
;------------------------------------------------------------------------------
levelLength             = levelDataTable+0
numEnemies              = levelDataTable+1
guardianSizeX           = levelDataTable+2
guardianSizeY           = levelDataTable+3
guardianSpr1            = levelDataTable+4
guardianSpr2            = levelDataTable+20
guardianSpr3            = levelDataTable+36
guardianSpr4            = levelDataTable+52
gX                      = levelDataTable+68
gY                      = levelDataTable+69
gHealth                 = levelDataTable+70
gAI1                    = levelDataTable+71
gAI2                    = levelDataTable+72
gClearScreen            = levelDataTable+73
gEnemy                  = levelDataTable+74
cp1                     = levelDataTable+75
cp2                     = levelDataTable+76
cp3                     = levelDataTable+77

;------------------------------------------------------------------------------
; Constants:
;------------------------------------------------------------------------------
verMajor                = '1'
verMinor                = '0'
LEVELSET_HEADER_LENGTH  = 9
LEVEL_HEADER_LENGTH     = 78
ENEMY_DATA_LENGTH       = 21
INI_DEAD                = 101
MENU_MAX                = 4
MEM_NEEDED              = 1800+LEVEL_HEADER_LENGTH
MAX_ANIMS               = 5
MAX_BULLETS             = 25
MAX_EBULLETS            = 10
MAX_ENEMIES             = 8
MAX_PICKUPS             = 4
EBULLET_THROUGH_SOLIDS  = 4
E_TYPE                  = 0
E_X                     = 1
E_Y                     = 2
E_HEALTH                = 3
E_AICNT1                = 4
E_AICNT2                = 5

;------------------------------------------------------------------------------
; Some extra equates:
;------------------------------------------------------------------------------
#ifndef MIRAGE
apdable                 = 2
apdrunning              = 3
apdflags                = 8
#endif
#ifdef TI83
timer                   = $8009
#else
timer                   = $8448
#endif

.end
