Added animation system with hit animations for cats
Before Width: | Height: | Size: 249 B After Width: | Height: | Size: 249 B |
Before Width: | Height: | Size: 242 B After Width: | Height: | Size: 242 B |
After Width: | Height: | Size: 249 B |
After Width: | Height: | Size: 261 B |
After Width: | Height: | Size: 269 B |
After Width: | Height: | Size: 278 B |
After Width: | Height: | Size: 275 B |
After Width: | Height: | Size: 274 B |
After Width: | Height: | Size: 242 B |
After Width: | Height: | Size: 263 B |
After Width: | Height: | Size: 268 B |
After Width: | Height: | Size: 281 B |
After Width: | Height: | Size: 275 B |
After Width: | Height: | Size: 270 B |
|
@ -16,6 +16,7 @@
|
||||||
700F72872112428D00225B17 /* RenumberSpriteFiles.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = RenumberSpriteFiles.sh; sourceTree = "<group>"; };
|
700F72872112428D00225B17 /* RenumberSpriteFiles.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = RenumberSpriteFiles.sh; sourceTree = "<group>"; };
|
||||||
700FFAFB1F40F3BF00A442DE /* font.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = font.s; sourceTree = "<group>"; };
|
700FFAFB1F40F3BF00A442DE /* font.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = font.s; sourceTree = "<group>"; };
|
||||||
705456862A43E03B00A2B866 /* GeneratePixelCircle.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = GeneratePixelCircle.py; sourceTree = "<group>"; };
|
705456862A43E03B00A2B866 /* GeneratePixelCircle.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = GeneratePixelCircle.py; sourceTree = "<group>"; };
|
||||||
|
705456882A4D336200A2B866 /* animation.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = animation.s; sourceTree = "<group>"; };
|
||||||
7059502B1F37A0BE00BBE90F /* GenerateVRAMTable.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = GenerateVRAMTable.py; sourceTree = "<group>"; };
|
7059502B1F37A0BE00BBE90F /* GenerateVRAMTable.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = GenerateVRAMTable.py; sourceTree = "<group>"; };
|
||||||
705AAFA920040B0D001BB0ED /* terrain_e1.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = terrain_e1.s; sourceTree = "<group>"; };
|
705AAFA920040B0D001BB0ED /* terrain_e1.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = terrain_e1.s; sourceTree = "<group>"; };
|
||||||
705C54E62124B7F300515A6B /* fan.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = fan.s; sourceTree = "<group>"; };
|
705C54E62124B7F300515A6B /* fan.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = fan.s; sourceTree = "<group>"; };
|
||||||
|
@ -65,6 +66,7 @@
|
||||||
700C39C51F2E5CA800C24F9C /* tables.s */,
|
700C39C51F2E5CA800C24F9C /* tables.s */,
|
||||||
70E266E31F6F262D005AC7E4 /* circleTable.s */,
|
70E266E31F6F262D005AC7E4 /* circleTable.s */,
|
||||||
70F0869F1F413A89002446C3 /* player.s */,
|
70F0869F1F413A89002446C3 /* player.s */,
|
||||||
|
705456882A4D336200A2B866 /* animation.s */,
|
||||||
700B5E6F2069831000B31C00 /* inventory.s */,
|
700B5E6F2069831000B31C00 /* inventory.s */,
|
||||||
700F21DF1F4A364600D7007D /* projectile.s */,
|
700F21DF1F4A364600D7007D /* projectile.s */,
|
||||||
705C54E62124B7F300515A6B /* fan.s */,
|
705C54E62124B7F300515A6B /* fan.s */,
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<array/>
|
||||||
|
</plist>
|
|
@ -125,11 +125,11 @@ renderGameObject:
|
||||||
|
|
||||||
; Call compiled sprite code
|
; Call compiled sprite code
|
||||||
txy
|
txy
|
||||||
SAVE_AXY ; DEBUG BOUNDS RENDER
|
; SAVE_AXY ; DEBUG BOUNDS RENDER
|
||||||
clc
|
clc
|
||||||
jsr DrawSpriteBank
|
jsr DrawSpriteBank
|
||||||
|
|
||||||
RESTORE_AXY ; DEBUG BOUNDS RENDER
|
; RESTORE_AXY ; DEBUG BOUNDS RENDER
|
||||||
; lda #11 ; DEBUG BOUNDS RENDER
|
; lda #11 ; DEBUG BOUNDS RENDER
|
||||||
; clc ; DEBUG BOUNDS RENDER
|
; clc ; DEBUG BOUNDS RENDER
|
||||||
; jsr DrawSpriteBank ; DEBUG BOUNDS RENDER
|
; jsr DrawSpriteBank ; DEBUG BOUNDS RENDER
|
||||||
|
|
17
graphics.s
|
@ -230,6 +230,23 @@ drawNumber:
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; drawSpriteBankSafe
|
||||||
|
;
|
||||||
|
; A slightly slower version of Mr Sprite's DrawSpriteBank that
|
||||||
|
; preserves all registers and requires no secret flag clearing
|
||||||
|
;
|
||||||
|
; Y = VRAM position at which to draw
|
||||||
|
; A = Sprite Index
|
||||||
|
;
|
||||||
|
drawSpriteBankSafe:
|
||||||
|
SAVE_AXY
|
||||||
|
clc
|
||||||
|
jsr DrawSpriteBank
|
||||||
|
RESTORE_AXY
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; BORDER_COLOR
|
; BORDER_COLOR
|
||||||
;
|
;
|
||||||
|
|
1
gscats.s
|
@ -39,6 +39,7 @@ quitGame:
|
||||||
.include "graphics.s"
|
.include "graphics.s"
|
||||||
.include "font.s"
|
.include "font.s"
|
||||||
.include "smallNumbers.s"
|
.include "smallNumbers.s"
|
||||||
|
.include "animation.s"
|
||||||
.include "player.s"
|
.include "player.s"
|
||||||
.include "terrain.s"
|
.include "terrain.s"
|
||||||
.include "collision.s"
|
.include "collision.s"
|
||||||
|
|
42
player.s
|
@ -20,11 +20,10 @@ playerData:
|
||||||
.word 2 ; Power
|
.word 2 ; Power
|
||||||
.word 100 ; Anger
|
.word 100 ; Anger
|
||||||
.byte 8,"SPROCKET " ; Name
|
.byte 8,"SPROCKET " ; Name
|
||||||
.word 1 ; Base Sprite
|
.word 26 ; Base Sprite
|
||||||
.word 0,5,7,0,0,0,0,0 ; Prices
|
.word 0,5,7,0,0,0,0,0 ; Prices
|
||||||
.word 0 ; Current weapon
|
.word 0 ; Current weapon
|
||||||
.word 7 ; Treats
|
.word 7 ; Treats
|
||||||
|
|
||||||
.repeat 86
|
.repeat 86
|
||||||
.byte 0 ; Padding to 256-byte boundary
|
.byte 0 ; Padding to 256-byte boundary
|
||||||
.endrepeat
|
.endrepeat
|
||||||
|
@ -42,7 +41,7 @@ playerData:
|
||||||
.word 2 ; Power
|
.word 2 ; Power
|
||||||
.word 100 ; Anger
|
.word 100 ; Anger
|
||||||
.byte 8,"TINKER " ; Name
|
.byte 8,"TINKER " ; Name
|
||||||
.word 0 ; Base Sprite
|
.word 20 ; Base Sprite
|
||||||
.word 0,5,7,0,0,0,0,0 ; Prices
|
.word 0,5,7,0,0,0,0,0 ; Prices
|
||||||
.word 0 ; Current weapon
|
.word 0 ; Current weapon
|
||||||
.word 7 ; Treats
|
.word 7 ; Treats
|
||||||
|
@ -328,6 +327,43 @@ unrenderPlayers:
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; renderHitAnimation
|
||||||
|
;
|
||||||
|
; Y = Player index to render
|
||||||
|
; Trashes PARAML0,SCRATCHL
|
||||||
|
;
|
||||||
|
renderHitAnimation:
|
||||||
|
SAVE_AXY
|
||||||
|
PLAYERPTR_Y
|
||||||
|
|
||||||
|
jsr unrenderPlayers
|
||||||
|
jsr unrenderCrosshair
|
||||||
|
|
||||||
|
lda playerData+GO_POSX,y
|
||||||
|
sta renderHitAnimationPos
|
||||||
|
lda playerData+GO_POSY,y
|
||||||
|
clc
|
||||||
|
adc #GAMEOBJECTHEIGHT
|
||||||
|
sta renderHitAnimationPos+2
|
||||||
|
lda #renderHitAnimationPos
|
||||||
|
sta PARAML0
|
||||||
|
ldx #5
|
||||||
|
|
||||||
|
lda playerData+PD_BASESPRITE,y
|
||||||
|
inc ; Hit animation starts right above base sprite
|
||||||
|
tay
|
||||||
|
jsr renderAnimation
|
||||||
|
|
||||||
|
jsr renderPlayers
|
||||||
|
|
||||||
|
RESTORE_AXY
|
||||||
|
rts
|
||||||
|
|
||||||
|
renderHitAnimationPos:
|
||||||
|
.word 0,0
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; renderPlayerHeader
|
; renderPlayerHeader
|
||||||
;
|
;
|
||||||
|
|
11
projectile.s
|
@ -857,8 +857,17 @@ unrenderProjectileDone:
|
||||||
; Y = Offset to projectile structure
|
; Y = Offset to projectile structure
|
||||||
;
|
;
|
||||||
processPlayerImpact:
|
processPlayerImpact:
|
||||||
|
phy
|
||||||
|
phx
|
||||||
PLAYERPTR_X
|
PLAYERPTR_X
|
||||||
|
|
||||||
|
; Do hit animation
|
||||||
|
plx
|
||||||
|
txy
|
||||||
|
jsr renderHitAnimation
|
||||||
|
|
||||||
|
; Find projectile data structure
|
||||||
|
ply
|
||||||
lda projectileData+JD_TYPE,y
|
lda projectileData+JD_TYPE,y
|
||||||
tay
|
tay
|
||||||
PROJECTILETYPEPTR_Y
|
PROJECTILETYPEPTR_Y
|
||||||
|
@ -867,7 +876,7 @@ processPlayerImpact:
|
||||||
lda playerData+PD_ANGER,x
|
lda playerData+PD_ANGER,x
|
||||||
sec
|
sec
|
||||||
sbc projectileTypes+PT_DAMAGE,y
|
sbc projectileTypes+PT_DAMAGE,y
|
||||||
|
|
||||||
; Check for death
|
; Check for death
|
||||||
beq processPlayerImpactDeath
|
beq processPlayerImpactDeath
|
||||||
bmi processPlayerImpactDeath
|
bmi processPlayerImpactDeath
|
||||||
|
|
12
spritebank.s
|
@ -2,20 +2,22 @@
|
||||||
|
|
||||||
|
|
||||||
DrawSpriteBank :
|
DrawSpriteBank :
|
||||||
ASL ; A=Sprite Number ($0000-$0013)
|
ASL ; A=Sprite Number ($0000-$001F)
|
||||||
TAX ; Y=Target Screen Address ($2000-$9D00)
|
TAX ; Y=Target Screen Address ($2000-$9D00)
|
||||||
LDA SpriteBankNum,X ; Relative Sprite Number Table
|
LDA SpriteBankNum,X ; Relative Sprite Number Table
|
||||||
JMP (SpriteBankBank,X) ; Bank Number Table
|
JMP (SpriteBankBank,X) ; Bank Number Table
|
||||||
|
|
||||||
SpriteBankNum :
|
SpriteBankNum :
|
||||||
.dbyt $0100,$0000,$0C00,$0500,$0600,$0B00,$1200,$1000
|
.dbyt $0B00,$0A00,$1800,$1100,$1200,$1700,$1E00,$1C00
|
||||||
.dbyt $0A00,$0900,$0F00,$1300,$0200,$0300,$0400,$1100
|
.dbyt $1500,$1600,$1B00,$1F00,$0D00,$0F00,$1000,$1D00
|
||||||
.dbyt $0E00,$0D00,$0800,$0700
|
.dbyt $1A00,$1900,$1400,$1300,$0C00,$0E00,$0600,$0000
|
||||||
|
.dbyt $0300,$0400,$0800,$0900,$0700,$0200,$0100,$0500
|
||||||
|
|
||||||
SpriteBankBank :
|
SpriteBankBank :
|
||||||
.addr SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00
|
.addr SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00
|
||||||
.addr SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00
|
.addr SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00
|
||||||
.addr SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00
|
.addr SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00
|
||||||
|
.addr SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00
|
||||||
|
|
||||||
SpriteBankBank00 :
|
SpriteBankBank00 :
|
||||||
JSL $AA0000
|
JSL $AA0000
|
||||||
|
|
17
utility.s
|
@ -182,6 +182,23 @@ delayShortInner:
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; delayMedium
|
||||||
|
; Sleeps for medium time (about 0.25 sec, but not calculated as such)
|
||||||
|
;
|
||||||
|
delayMedium:
|
||||||
|
SAVE_AX
|
||||||
|
|
||||||
|
ldx #$50
|
||||||
|
delayMediumInner:
|
||||||
|
jsr delayShort
|
||||||
|
dex
|
||||||
|
bne delayMediumInner
|
||||||
|
|
||||||
|
RESTORE_AX
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; delayLong
|
; delayLong
|
||||||
; Sleeps for long time (about 1.5 sec, but not calculated as such)
|
; Sleeps for long time (about 1.5 sec, but not calculated as such)
|
||||||
|
|