diff --git a/Art/Spit0_004.xcf b/Art/Spit0_004.xcf index 0580c16..ac3212f 100644 Binary files a/Art/Spit0_004.xcf and b/Art/Spit0_004.xcf differ diff --git a/Art/Spit1_005.xcf b/Art/Spit1_005.xcf index ab2635c..fc62826 100644 Binary files a/Art/Spit1_005.xcf and b/Art/Spit1_005.xcf differ diff --git a/Art/Spit2_006.xcf b/Art/Spit2_006.xcf index 33beb66..49e99a6 100644 Binary files a/Art/Spit2_006.xcf and b/Art/Spit2_006.xcf differ diff --git a/Art/spit0_004.gif b/Art/spit0_004.gif index 2931736..7500007 100644 Binary files a/Art/spit0_004.gif and b/Art/spit0_004.gif differ diff --git a/Art/spit1_005.gif b/Art/spit1_005.gif index 3529e11..249ce8d 100644 Binary files a/Art/spit1_005.gif and b/Art/spit1_005.gif differ diff --git a/Art/spit2_006.gif b/Art/spit2_006.gif index 94bfe6a..60fab74 100644 Binary files a/Art/spit2_006.gif and b/Art/spit2_006.gif differ diff --git a/SpriteBank00.bin b/SpriteBank00.bin index 4a83570..f070860 100644 Binary files a/SpriteBank00.bin and b/SpriteBank00.bin differ diff --git a/gameobject.s b/gameobject.s index 2fd3528..ed191b3 100644 --- a/gameobject.s +++ b/gameobject.s @@ -54,19 +54,19 @@ placeGameObjectOnTerrain: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; VRAM_PTR +; vramPtr ; -; ptr = Pointer to gameobject data +; PARAML0 = Pointer to gameobject data ; X => Offset to upper left corner of VRAM, or -1 if offscreen ; -; Trashes all registers +; Trashes SCRATCHL ; -.macro VRAM_PTR ptr -.scope - ldy #0 +vramPtr: + SAVE_AY ; X - lda ptr+GO_POSX,y + ldy #GO_POSX + lda (PARAML0),y lsr cmp leftScreenEdge @@ -81,7 +81,8 @@ placeGameObjectOnTerrain: ; Y sec lda #200 - sbc ptr+GO_POSY,y + ldy #GO_POSY + sbc (PARAML0),y bmi vramPtrSkip ; Gameobject is off top edge of screen cmp #200 - GAMEOBJECTHEIGHT @@ -100,42 +101,41 @@ vramPtrSkip: ldx #-1 vramPtrDone: -.endscope -.endmacro + RESTORE_AY + rts ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; RENDER_GAMEOBJECT +; renderGameObject +; +; PARAML0 = Pointer to gameobject data +; A = Sprite index ; -; ptr = Pointer to gameobject data ; Trashes SCRATCHL ; -.macro RENDER_GAMEOBJECT ptr,spriteIndex -.scope - SAVE_AXY +renderGameObject: + SAVE_XY ; Find gameobject location in video memory - VRAM_PTR ptr + jsr vramPtr cpx #0 bmi renderGameobjectDone ; Call compiled sprite code txy - lda #spriteIndex clc jsr DrawSpriteBank renderGameobjectDone: - RESTORE_AXY -.endscope -.endmacro + RESTORE_XY + rts ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; protectGameObject ; ; Saves background behind this game object -; A = Pointer to gameobject data +; A = Pointer to gameobject background data ; X = VRAM position of upper left of game object ; ; Trashes SCRATCHL @@ -421,18 +421,16 @@ protectGameObject: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; UNRENDER_GAMEOBJECT +; unrenderGameObject ; -; ptr = Pointer to gameobject data +; PARAML0 = Pointer to gameobject data ; Trashes SCRATCHL ; -.macro UNRENDER_GAMEOBJECT ptr -.scope +unrenderGameObject: SAVE_AXY - ldy #0 ; Find gameobject location in video memory - VRAM_PTR ptr + jsr vramPtr cpx #0 bmi unrenderGameobjectSkip bra unrenderGameobjectBackground @@ -441,278 +439,278 @@ unrenderGameobjectSkip: jmp unrenderGameobjectDone unrenderGameobjectBackground: + ldy #GO_BACKGROUND - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+2,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+4,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+6,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160+2,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160+4,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160+6,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*2,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*2+2,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*2+4,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*2+6,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*3,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*3+2,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*3+4,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*3+6,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*4,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*4+2,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*4+4,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*4+6,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*5,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*5+2,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*5+4,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*5+6,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*6,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*6+2,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*6+4,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*6+6,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*7,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*7+2,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*7+4,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*7+6,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*8,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*8+2,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*8+4,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*8+6,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*9,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*9+2,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*9+4,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*9+6,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*10,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*10+2,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*10+4,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*10+6,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*11,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*11+2,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*11+4,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*11+6,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*12,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*12+2,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*12+4,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*12+6,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*13,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*13+2,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*13+4,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*13+6,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*14,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*14+2,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*14+4,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*14+6,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*15,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*15+2,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*15+4,x iny iny - lda ptr+GO_BACKGROUND,y + lda (PARAML0),y sta SHADOWVRAMBANK+160*15+6,x unrenderGameobjectDone: RESTORE_AXY -.endscope -.endmacro + rts diff --git a/gscats.2mg b/gscats.2mg index 5c03296..6410bec 100644 Binary files a/gscats.2mg and b/gscats.2mg differ diff --git a/player.s b/player.s index 0e520b2..223ba34 100644 --- a/player.s +++ b/player.s @@ -201,9 +201,18 @@ playerIntersectRect: ; renderPlayers: SAVE_AXY - RENDER_GAMEOBJECT playerData,0 - RENDER_GAMEOBJECT playerData+PD_SIZE,0 - RESTORE_AXY + + lda #playerData + sta PARAML0 + lda #0 + jsr renderGameObject + + lda #playerData+PD_SIZE + sta PARAML0 + lda #0 + jsr renderGameObject + +RESTORE_AXY rts @@ -214,14 +223,26 @@ renderPlayers: protectPlayers: SAVE_AXY - VRAM_PTR playerData + lda #playerData + sta PARAML0 + jsr vramPtr + cpx #0 + bmi protectPlayerNext + lda #playerData+GO_BACKGROUND jsr protectGameObject - VRAM_PTR playerData+PD_SIZE +protectPlayerNext: + lda #playerData+PD_SIZE + sta PARAML0 + jsr vramPtr + cpx #0 + bmi protectPlayerDone + lda #playerData+GO_BACKGROUND+PD_SIZE jsr protectGameObject +protectPlayerDone: RESTORE_AXY rts @@ -232,8 +253,13 @@ protectPlayers: ; unrenderPlayers: SAVE_AXY - UNRENDER_GAMEOBJECT playerData - UNRENDER_GAMEOBJECT playerData+PD_SIZE + lda #playerData + sta PARAML0 + jsr unrenderGameObject + + lda #playerData+PD_SIZE + sta PARAML0 + jsr unrenderGameObject RESTORE_AXY rts diff --git a/projectile.s b/projectile.s index 039ed9c..4971f94 100644 --- a/projectile.s +++ b/projectile.s @@ -37,7 +37,7 @@ GRAVITY = $ffff ; 8.8 fixed point projectileTypes: ; Byte offsets into projectile type data structure .word 50 ; Damage - .word 40 ; Crater radius + .word 10 ; Crater radius .word 0,0 ; Padding PT_DAMAGE = 0 @@ -257,12 +257,15 @@ updateProjectileCollisionsPlayerNext: ; Check for terrain collisions lda projectileData+GO_POSX + inc sta rectParams lda projectileData+GO_POSY + clc + inc sta rectParams+2 - lda #GAMEOBJECTWIDTH + lda #GAMEOBJECTWIDTH-2 sta rectParams+4 - lda #GAMEOBJECTHEIGHT + lda #GAMEOBJECTHEIGHT-2 sta rectParams+6 jsr intersectRectTerrain @@ -290,7 +293,9 @@ updateProjectileCollisionsTerrainHit: ; Trashes A and Y ; endProjectile: - UNRENDER_GAMEOBJECT projectileData + lda #projectileData + sta PARAML0 + jsr unrenderGameObject ldy #0 jsr deleteProjectile lda #1 @@ -323,7 +328,12 @@ protectProjectiles: lda projectileData bmi protectProjectilesDone - VRAM_PTR projectileData + lda #projectileData + sta PARAML0 + jsr vramPtr + cpx #0 + bmi protectProjectilesDone + lda #projectileData+GO_BACKGROUND jsr protectGameObject @@ -343,8 +353,30 @@ renderProjectiles: jmp renderProjectilesDone renderProjectilesDoIt: - RENDER_GAMEOBJECT projectileData,5 + lda #projectileData + sta PARAML0 + bra renderProjectilesFlat ; Bypass angle for now + ; Determine which sprite to use + lda projectileData+JD_VY + bmi renderProjectilesNegAngle + cmp #$0400 + bmi renderProjectilesFlat + lda #4 ; Up angle + bra renderProjectilesGoSprite + +renderProjectilesNegAngle: + cmp #$ffc0 + bpl renderProjectilesFlat + lda #6 ; Down angle + bra renderProjectilesGoSprite + +renderProjectilesFlat: + lda #5 ; Flat + +renderProjectilesGoSprite: + jsr renderGameObject + renderProjectilesDone: pla rts @@ -367,7 +399,9 @@ unrenderProjectilesActive: jmp unrenderProjectilesDone unrenderProjectilesDoIt: - UNRENDER_GAMEOBJECT projectileData + lda #projectileData + sta PARAML0 + jsr unrenderGameObject unrenderProjectilesDone: pla diff --git a/spritebank.s b/spritebank.s index 3202a0d..3064d1d 100644 --- a/spritebank.s +++ b/spritebank.s @@ -8,7 +8,7 @@ DrawSpriteBank : JMP (SpriteBankBank,X) ; Bank Number Table SpriteBankNum : - .dbyt $0000,$0200,$0300,$0100,$0500,$0600,$0400 + .dbyt $0000,$0500,$0400,$0100,$0200,$0600,$0300 SpriteBankBank : .addr SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00