diff --git a/Art/000Cat.gif b/Art/000Free.gif similarity index 100% rename from Art/000Cat.gif rename to Art/000Free.gif diff --git a/Art/000Cat.xcf b/Art/000Free.xcf similarity index 100% rename from Art/000Cat.xcf rename to Art/000Free.xcf diff --git a/Art/001Cat.gif b/Art/001Free.gif similarity index 100% rename from Art/001Cat.gif rename to Art/001Free.gif diff --git a/Art/001Cat.xcf b/Art/001Free.xcf similarity index 100% rename from Art/001Cat.xcf rename to Art/001Free.xcf diff --git a/Art/020CatHit.gif b/Art/020CatHit.gif new file mode 100644 index 0000000..3aa9289 Binary files /dev/null and b/Art/020CatHit.gif differ diff --git a/Art/020CatHit.xcf b/Art/020CatHit.xcf new file mode 100644 index 0000000..2654e39 Binary files /dev/null and b/Art/020CatHit.xcf differ diff --git a/Art/021CatHit.gif b/Art/021CatHit.gif new file mode 100644 index 0000000..7fc745d Binary files /dev/null and b/Art/021CatHit.gif differ diff --git a/Art/021CatHit.xcf b/Art/021CatHit.xcf new file mode 100644 index 0000000..86b6f38 Binary files /dev/null and b/Art/021CatHit.xcf differ diff --git a/Art/022CatHit.gif b/Art/022CatHit.gif new file mode 100644 index 0000000..1478428 Binary files /dev/null and b/Art/022CatHit.gif differ diff --git a/Art/022CatHit.xcf b/Art/022CatHit.xcf new file mode 100644 index 0000000..0ee0e20 Binary files /dev/null and b/Art/022CatHit.xcf differ diff --git a/Art/023CatHit.gif b/Art/023CatHit.gif new file mode 100644 index 0000000..e5aae60 Binary files /dev/null and b/Art/023CatHit.gif differ diff --git a/Art/023CatHit.xcf b/Art/023CatHit.xcf new file mode 100644 index 0000000..c46b671 Binary files /dev/null and b/Art/023CatHit.xcf differ diff --git a/Art/024CatHit.gif b/Art/024CatHit.gif new file mode 100644 index 0000000..af29b55 Binary files /dev/null and b/Art/024CatHit.gif differ diff --git a/Art/024CatHit.xcf b/Art/024CatHit.xcf new file mode 100644 index 0000000..b1d9b02 Binary files /dev/null and b/Art/024CatHit.xcf differ diff --git a/Art/025CatHit.gif b/Art/025CatHit.gif new file mode 100644 index 0000000..4f34eda Binary files /dev/null and b/Art/025CatHit.gif differ diff --git a/Art/025CatHit.xcf b/Art/025CatHit.xcf new file mode 100644 index 0000000..43e52dc Binary files /dev/null and b/Art/025CatHit.xcf differ diff --git a/Art/026Cat.gif b/Art/026Cat.gif new file mode 100644 index 0000000..5077956 Binary files /dev/null and b/Art/026Cat.gif differ diff --git a/Art/026Cat.xcf b/Art/026Cat.xcf new file mode 100644 index 0000000..fd876af Binary files /dev/null and b/Art/026Cat.xcf differ diff --git a/Art/027Cat.gif b/Art/027Cat.gif new file mode 100644 index 0000000..095ae33 Binary files /dev/null and b/Art/027Cat.gif differ diff --git a/Art/027Cat.xcf b/Art/027Cat.xcf new file mode 100644 index 0000000..bece1a4 Binary files /dev/null and b/Art/027Cat.xcf differ diff --git a/Art/028Cat.gif b/Art/028Cat.gif new file mode 100644 index 0000000..4769e93 Binary files /dev/null and b/Art/028Cat.gif differ diff --git a/Art/028Cat.xcf b/Art/028Cat.xcf new file mode 100644 index 0000000..7a59c74 Binary files /dev/null and b/Art/028Cat.xcf differ diff --git a/Art/029Cat.gif b/Art/029Cat.gif new file mode 100644 index 0000000..905c44c Binary files /dev/null and b/Art/029Cat.gif differ diff --git a/Art/029Cat.xcf b/Art/029Cat.xcf new file mode 100644 index 0000000..f6cc467 Binary files /dev/null and b/Art/029Cat.xcf differ diff --git a/Art/030Cat.gif b/Art/030Cat.gif new file mode 100644 index 0000000..cb6cc45 Binary files /dev/null and b/Art/030Cat.gif differ diff --git a/Art/030Cat.xcf b/Art/030Cat.xcf new file mode 100644 index 0000000..80bf934 Binary files /dev/null and b/Art/030Cat.xcf differ diff --git a/Art/031Cat.gif b/Art/031Cat.gif new file mode 100644 index 0000000..8bf7be2 Binary files /dev/null and b/Art/031Cat.gif differ diff --git a/Art/031Cat.xcf b/Art/031Cat.xcf new file mode 100644 index 0000000..406de74 Binary files /dev/null and b/Art/031Cat.xcf differ diff --git a/GSCats.xcodeproj/project.pbxproj b/GSCats.xcodeproj/project.pbxproj index 2af5501..3726c4e 100644 --- a/GSCats.xcodeproj/project.pbxproj +++ b/GSCats.xcodeproj/project.pbxproj @@ -16,6 +16,7 @@ 700F72872112428D00225B17 /* RenumberSpriteFiles.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = RenumberSpriteFiles.sh; sourceTree = ""; }; 700FFAFB1F40F3BF00A442DE /* font.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = font.s; sourceTree = ""; }; 705456862A43E03B00A2B866 /* GeneratePixelCircle.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = GeneratePixelCircle.py; sourceTree = ""; }; + 705456882A4D336200A2B866 /* animation.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = animation.s; sourceTree = ""; }; 7059502B1F37A0BE00BBE90F /* GenerateVRAMTable.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = GenerateVRAMTable.py; sourceTree = ""; }; 705AAFA920040B0D001BB0ED /* terrain_e1.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = terrain_e1.s; sourceTree = ""; }; 705C54E62124B7F300515A6B /* fan.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = fan.s; sourceTree = ""; }; @@ -65,6 +66,7 @@ 700C39C51F2E5CA800C24F9C /* tables.s */, 70E266E31F6F262D005AC7E4 /* circleTable.s */, 70F0869F1F413A89002446C3 /* player.s */, + 705456882A4D336200A2B866 /* animation.s */, 700B5E6F2069831000B31C00 /* inventory.s */, 700F21DF1F4A364600D7007D /* projectile.s */, 705C54E62124B7F300515A6B /* fan.s */, diff --git a/GSCats.xcodeproj/project.xcworkspace/xcuserdata/qd.xcuserdatad/IDEFindNavigatorScopes.plist b/GSCats.xcodeproj/project.xcworkspace/xcuserdata/qd.xcuserdatad/IDEFindNavigatorScopes.plist new file mode 100644 index 0000000..5dd5da8 --- /dev/null +++ b/GSCats.xcodeproj/project.xcworkspace/xcuserdata/qd.xcuserdatad/IDEFindNavigatorScopes.plist @@ -0,0 +1,5 @@ + + + + + diff --git a/SpriteBank#060000 b/SpriteBank#060000 index 42dc42f..9eefdea 100644 Binary files a/SpriteBank#060000 and b/SpriteBank#060000 differ diff --git a/animation.s b/animation.s new file mode 100644 index 0000000..382dfcb --- /dev/null +++ b/animation.s @@ -0,0 +1,1189 @@ +; +; animation +; Code and data structures for animating sprites +; +; Created by Quinn Dunki on 6/28/23 +; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; renderAnimation +; +; Y = Base sprite index +; X = Number of frames +; PARAML0 = Pointer to X,Y (16 bits each, Y is bottom relative) +; Trashes PARAML0,PARAML1,SCRATCHL2 +; +renderAnimation: + SAVE_AXY + sty PARAML1 + + phx ; Calculate VRAM position + jsr vramPtr + cpx #$ffff + beq renderAnimationSkip + stx SCRATCHL2 + plx + + stx PARAML0 + + ldx #1 + +renderHitAnimationLoop: + + ; Preserve background + phx + ldx SCRATCHL2 + jsr protectAnimation16x32 + plx + + ; Render animation frame + ldy SCRATCHL2 + lda PARAML1 + jsr drawSpriteBankSafe + + jsr delayMedium + + ; Restore background + phx + ldx SCRATCHL2 + jsr unrenderAnimation16x32 + plx + + ; Next frame + inc PARAML1 + inx + cpx #6 + bne renderHitAnimationLoop + +renderAnimationDone: + RESTORE_AXY + rts + +renderAnimationSkip: + plx + bra renderAnimationDone + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; protectAnimation16x32 +; +; Saves background behind this sprite +; X = VRAM position of upper left of sprite +; Trashes A +; +; Brace for large unrolled loop in 3..2..1... +; +protectAnimation16x32: + phy + ldy #0 + + lda SHADOWVRAMBANK,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*2+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*2+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*2+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*3,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*3+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*3+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*3+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*4+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*4+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*4+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*5,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*5+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*5+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*5+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*6,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*6+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*6+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*6+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*7,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*7+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*7+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*7+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*8,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*8+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*8+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*8+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*9,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*9+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*9+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*9+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*10,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*10+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*10+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*10+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*11,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*11+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*11+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*11+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*12,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*12+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*12+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*12+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*13,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*13+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*13+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*13+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*14,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*14+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*14+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*14+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*15,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*15+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*15+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*15+6,x + sta savedBackground,y + + lda SHADOWVRAMBANK+160*16,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*16+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*16+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*16+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*17,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*17+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*17+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*17+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*18,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*18+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*18+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*18+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*19,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*19+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*19+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*19+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*20,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*20+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*20+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*20+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*21,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*21+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*21+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*21+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*22,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*22+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*22+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*22+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*23,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*23+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*23+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*23+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*24,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*24+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*24+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*24+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*25,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*25+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*25+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*25+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*26,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*26+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*26+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*26+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*27,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*27+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*27+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*27+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*28,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*28+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*28+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*28+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*29,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*29+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*29+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*29+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*30,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*30+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*30+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*30+6,x + sta savedBackground,y + iny + iny + + lda SHADOWVRAMBANK+160*31,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*31+2,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*31+4,x + sta savedBackground,y + iny + iny + lda SHADOWVRAMBANK+160*31+6,x + sta savedBackground,y + + ply + rts + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; unrenderAnimation16x32 +; +; X = VRAM position of upper left of sprite +; +; Brace for large unrolled loop in 3..2..1... +; +unrenderAnimation16x32: + SAVE_AXY + + ldy #0 + + lda savedBackground,y + sta SHADOWVRAMBANK,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*2+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*2+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*2+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*3,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*3+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*3+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*3+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*4+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*4+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*4+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*5,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*5+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*5+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*5+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*6,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*6+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*6+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*6+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*7,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*7+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*7+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*7+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*8,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*8+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*8+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*8+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*9,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*9+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*9+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*9+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*10,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*10+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*10+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*10+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*11,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*11+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*11+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*11+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*12,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*12+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*12+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*12+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*13,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*13+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*13+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*13+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*14,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*14+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*14+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*14+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*15,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*15+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*15+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*15+6,x + + lda savedBackground,y + sta SHADOWVRAMBANK+160*16,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*16+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*16+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*16+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*17,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*17+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*17+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*17+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*18,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*18+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*18+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*18+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*19,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*19+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*19+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*19+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*20,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*20+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*20+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*20+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*21,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*21+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*21+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*21+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*22,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*22+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*22+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*22+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*23,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*23+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*23+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*23+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*24,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*24+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*24+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*24+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*25,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*25+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*25+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*25+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*26,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*26+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*26+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*26+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*27,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*27+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*27+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*27+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*28,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*28+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*28+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*28+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*29,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*29+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*29+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*29+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*30,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*30+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*30+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*30+6,x + iny + iny + + lda savedBackground,y + sta SHADOWVRAMBANK+160*31,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*31+2,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*31+4,x + iny + iny + lda savedBackground,y + sta SHADOWVRAMBANK+160*31+6,x + + RESTORE_AXY + rts + + +savedBackground: ; Up to 32x32 +.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; Saved background +.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/gameobject.s b/gameobject.s index ad1e246..da0e864 100644 --- a/gameobject.s +++ b/gameobject.s @@ -125,11 +125,11 @@ renderGameObject: ; Call compiled sprite code txy - SAVE_AXY ; DEBUG BOUNDS RENDER +; SAVE_AXY ; DEBUG BOUNDS RENDER clc jsr DrawSpriteBank - RESTORE_AXY ; DEBUG BOUNDS RENDER +; RESTORE_AXY ; DEBUG BOUNDS RENDER ; lda #11 ; DEBUG BOUNDS RENDER ; clc ; DEBUG BOUNDS RENDER ; jsr DrawSpriteBank ; DEBUG BOUNDS RENDER diff --git a/graphics.s b/graphics.s index 65089f2..0f5edad 100644 --- a/graphics.s +++ b/graphics.s @@ -230,6 +230,23 @@ drawNumber: 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 ; diff --git a/gscats.s b/gscats.s index ccfdd27..40a7289 100644 --- a/gscats.s +++ b/gscats.s @@ -39,6 +39,7 @@ quitGame: .include "graphics.s" .include "font.s" .include "smallNumbers.s" +.include "animation.s" .include "player.s" .include "terrain.s" .include "collision.s" diff --git a/player.s b/player.s index 58c068e..59a7a9b 100644 --- a/player.s +++ b/player.s @@ -20,11 +20,10 @@ playerData: .word 2 ; Power .word 100 ; Anger .byte 8,"SPROCKET " ; Name - .word 1 ; Base Sprite + .word 26 ; Base Sprite .word 0,5,7,0,0,0,0,0 ; Prices .word 0 ; Current weapon .word 7 ; Treats - .repeat 86 .byte 0 ; Padding to 256-byte boundary .endrepeat @@ -42,7 +41,7 @@ playerData: .word 2 ; Power .word 100 ; Anger .byte 8,"TINKER " ; Name - .word 0 ; Base Sprite + .word 20 ; Base Sprite .word 0,5,7,0,0,0,0,0 ; Prices .word 0 ; Current weapon .word 7 ; Treats @@ -328,6 +327,43 @@ unrenderPlayers: 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 ; diff --git a/projectile.s b/projectile.s index 62dd030..ddb9640 100644 --- a/projectile.s +++ b/projectile.s @@ -857,8 +857,17 @@ unrenderProjectileDone: ; Y = Offset to projectile structure ; processPlayerImpact: + phy + phx PLAYERPTR_X + ; Do hit animation + plx + txy + jsr renderHitAnimation + + ; Find projectile data structure + ply lda projectileData+JD_TYPE,y tay PROJECTILETYPEPTR_Y @@ -867,7 +876,7 @@ processPlayerImpact: lda playerData+PD_ANGER,x sec sbc projectileTypes+PT_DAMAGE,y - + ; Check for death beq processPlayerImpactDeath bmi processPlayerImpactDeath diff --git a/spritebank.s b/spritebank.s index 5a20dd2..4595080 100644 --- a/spritebank.s +++ b/spritebank.s @@ -2,20 +2,22 @@ DrawSpriteBank : - ASL ; A=Sprite Number ($0000-$0013) + ASL ; A=Sprite Number ($0000-$001F) TAX ; Y=Target Screen Address ($2000-$9D00) LDA SpriteBankNum,X ; Relative Sprite Number Table JMP (SpriteBankBank,X) ; Bank Number Table SpriteBankNum : - .dbyt $0100,$0000,$0C00,$0500,$0600,$0B00,$1200,$1000 - .dbyt $0A00,$0900,$0F00,$1300,$0200,$0300,$0400,$1100 - .dbyt $0E00,$0D00,$0800,$0700 + .dbyt $0B00,$0A00,$1800,$1100,$1200,$1700,$1E00,$1C00 + .dbyt $1500,$1600,$1B00,$1F00,$0D00,$0F00,$1000,$1D00 + .dbyt $1A00,$1900,$1400,$1300,$0C00,$0E00,$0600,$0000 + .dbyt $0300,$0400,$0800,$0900,$0700,$0200,$0100,$0500 SpriteBankBank : .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 : JSL $AA0000 diff --git a/utility.s b/utility.s index fb64443..2d3ab09 100644 --- a/utility.s +++ b/utility.s @@ -182,6 +182,23 @@ delayShortInner: 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 ; Sleeps for long time (about 1.5 sec, but not calculated as such)