Added simple game over animation
authorLukas Krickl <lukas@krickl.dev>
Mon, 7 Oct 2024 16:39:10 +0000 (18:39 +0200)
committerLukas Krickl <lukas@krickl.dev>
Mon, 7 Oct 2024 16:39:10 +0000 (18:39 +0200)
src/main.s
src/player.s
src/strings.s
src/video.s
src/wram.s

index 680a1273ce65da51f1d03bde9a6aeb6fb45f7970..bb4d2b215423ffcc6d181cc94d4a61b60f87183e 100644 (file)
@@ -43,9 +43,9 @@ main:
   jr @forever REL
 #endif
 
+#include "strings.s"
 #include "video.s"
 #include "mem.s"
-#include "strings.s"
 #include "sys.s"
 #include "input.s"
 #include "player.s"
index 8a96dc21533509ad3cb2ae75027775e81c52ec5c..3a62b2ee2233a15d64828585cc085749b0a212b3 100644 (file)
@@ -256,3 +256,37 @@ player_gain_resource:
   ld [hl], a
 @skip:
   ret
+
+  ; sub routine for game over
+  ; never call outside of blank!
+player_game_over:
+  ; if timer is not set 
+  ; set up game over now
+  ld a, [game_over_timer]
+  cp a, 0
+  jr nz, @game_over_timer REL
+
+  ld hl, STR_GAME_OVER
+  ld de, SCRN0
+  call puts
+
+  ; set game over timer
+  ld a, 60
+  ld [game_over_timer], a
+
+  ret
+@game_over_timer:
+  ; otherwise timer--
+  ; and wait 
+  dec a
+  ld [game_over_timer], a
+  ; if timer has reached 1 restart game 
+  cp a, 0
+  jr z, @restart REL
+  
+  ret
+@restart:
+  ; restart game 
+  ; TODO: maybe just go to title?
+  ; FIXME: this is not clearing the stack!
+  jp entry
index 5bd025aa440952709af8235a3092d0574f4dfde8..4080d9de97dfcb10664eefc886b2c19042b1a705 100644 (file)
@@ -17,6 +17,10 @@ STR_HP:
 .db 0
 STR_MP:
 .str "MP"
+.db 0
+
+STR_GAME_OVER:
+.str "GAME OVER"
 .db 0
 
   ; print a string 0-terminated to the screen 
index 6ca5cff0db08cb4751936a876e888e9a118412e1..619840c684effdd8e190eba0778b0d3331b277c6 100644 (file)
@@ -31,8 +31,18 @@ vblank:
   ld [RBGP], a
   ret ; return for one more frame 
 @no_damage_taken:
+
   call ui_draw
 
+
+  ; check for game over animation
+  ld a, [player+player_hp]
+  cp a, 0
+  jr nz, @not_game_over REL
+  call player_game_over
+  ret ; never set frame to be ready during game-over 
+@not_game_over:
+
   ld a, 1
   ld [frame_ready], a
   ret
index 8026d8d521e6db5b4f6916e5108861d7692042b8..76eae6da21f399501cff6e7ec106d88e273026b8 100644 (file)
@@ -95,3 +95,7 @@ tmp: .adv 16
   ; itmp is the same as tmp but 
   ; for use during an interrupt
 itmp: .adv 16
+
+  ; timer for game over. when 
+  ; it reaches 0 re-start game
+game_over_timer: .adv 1