SFX and some more sprites

This commit is contained in:
Jakub 2026-05-24 16:49:19 +08:00
parent 277a040f5f
commit 030b35e4fa
26 changed files with 128 additions and 11 deletions

View file

@ -3,9 +3,12 @@
(chicken base)
(chicken module)
(chicken string)
raylib
(imugi core)
(imugi input)
(imugi scene)
(imugi resource)
(imugi drawing)
(imugi math)
(bd ui)
(bd random)
@ -20,7 +23,7 @@
(define battle-state 'active)
(define player 'player)
(define enemy 'foe)
(define enemy 'enemy)
(define empty 'none)
(define grid-size 5)
@ -105,8 +108,8 @@
(newline))
(define (attempt-attack attack-dir unit)
(display (unit-type unit))
(newline)
(play-sound (load-sound "../res/sfx/hit.wav"))
(let* ((target (if (eqv? (unit-type unit) player) enemy-unit player-unit))
(outcome (resolve-combat (attack-from-stance attack-dir (unit-stance unit))
(defense-from-stance attack-dir
@ -114,15 +117,16 @@
(unit-stance unit)))))
(if (eqv? outcome 'hit)
(begin
(display (conc (unit-type unit) " hits!"))
(case (unit-health target)
((3) (play-sound (load-sound "../res/sfx/hurt1.wav")))
((2) (play-sound (load-sound "../res/sfx/hurt2.wav")))
((1) (play-sound (load-sound "../res/sfx/hurt3.wav"))))
(set-unit-health! target (- (unit-health target) 1))
(when (= 0 (unit-health target))
(set! battle-state 'ended)
(if (eqv? player (unit-type target))
(lose)
(win))))
(display (conc (unit-type unit) " misses!")))
(newline)
(win)))))
(set-unit-hand-pos! unit (opposite-pos attack-dir))))
(define (move-unit unit pos)
@ -157,6 +161,48 @@
((v= (unit-pos enemy-unit) (vec j i)) enemy)
(else empty))))))))))
(define (build-sprite-path-for unit order)
(let ((hand-to-use (if (and (eqv? (unit-type unit) player) (order-atk order))
(order-atk order)
(unit-hand-pos unit))))
(conc "../res/sprites/" (unit-type unit) "/"
(case (hand-vert hand-to-use)
((high) "up")
((mid) "mid")
((low) "down"))
"-" (hand-horiz hand-to-use)
".png")))
(define draw-player-sprite
(make-system
'draw-player-sprite
0
'global
'()
(lambda ()
(push-render-object 'screen
-1
(lambda ()
(draw-texture-2d
(vec 0 0)
(texture (build-sprite-path-for player-unit player-order))
(make-color 1 1 1 1)))))))
(define draw-enemy-sprite
(make-system
'draw-enemy-sprite
0
'global
'()
(lambda ()
(push-render-object 'screen
-1
(lambda ()
(draw-texture-2d
(vec 600 0)
(texture (build-sprite-path-for enemy-unit (empty-order)))
(make-color 1 1 1 1)))))))
(export arena)
(define (arena menu-scene)
;; Reset state
@ -198,6 +244,8 @@
draw-grid
handle-buttons
handle-music-players
draw-player-sprite
draw-enemy-sprite
(entity
(music-player
@ -351,11 +399,11 @@
;; Player order display
(entity
(footer
(vec 0 0)
(vec 600 400)
"")
(dynamic-label
(lambda ()
(conc "Order:\n Move: "
(conc "Your Order:\n Move: "
(if (order-mov player-order)
(let ((m (order-mov player-order)))
(cond