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

@ -41,7 +41,7 @@
width width
(cond (cond
((eqv? entity 'player) (make-color 0 0 1 1)) ((eqv? entity 'player) (make-color 0 0 1 1))
((eqv? entity 'foe) (make-color 1 0 0 1)) ((eqv? entity 'enemy) (make-color 1 0 0 1))
(else (make-color 0 0 0 1))) (else (make-color 0 0 0 1)))
(not (eqv? entity 'none)) (not (eqv? entity 'none))
2))))) 2)))))

View file

@ -208,6 +208,7 @@
;; If button is clicked, exec button click func ;; If button is clicked, exec button click func
(define (do-button-callback button) (define (do-button-callback button)
(when (eqv? 'clicked (button-state button)) (when (eqv? 'clicked (button-state button))
(play-sound (load-sound "../res/sfx/click.wav"))
((button-click-fn button)))) ((button-click-fn button))))
;; Needs to be added to do buttons ;; Needs to be added to do buttons

BIN
res/sfx/click.wav Normal file

Binary file not shown.

BIN
res/sfx/hit.wav Normal file

Binary file not shown.

BIN
res/sfx/hurt1.wav Normal file

Binary file not shown.

BIN
res/sfx/hurt2.wav Normal file

Binary file not shown.

BIN
res/sfx/hurt3.wav Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

BIN
res/sprites/enemy/lose.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

BIN
res/sprites/enemy/win.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

BIN
res/sprites/player/lose.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

BIN
res/sprites/player/win.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 KiB

View file

@ -3,9 +3,12 @@
(chicken base) (chicken base)
(chicken module) (chicken module)
(chicken string) (chicken string)
raylib
(imugi core) (imugi core)
(imugi input) (imugi input)
(imugi scene) (imugi scene)
(imugi resource)
(imugi drawing)
(imugi math) (imugi math)
(bd ui) (bd ui)
(bd random) (bd random)
@ -20,7 +23,7 @@
(define battle-state 'active) (define battle-state 'active)
(define player 'player) (define player 'player)
(define enemy 'foe) (define enemy 'enemy)
(define empty 'none) (define empty 'none)
(define grid-size 5) (define grid-size 5)
@ -105,8 +108,8 @@
(newline)) (newline))
(define (attempt-attack attack-dir unit) (define (attempt-attack attack-dir unit)
(display (unit-type unit))
(newline) (newline)
(play-sound (load-sound "../res/sfx/hit.wav"))
(let* ((target (if (eqv? (unit-type unit) player) enemy-unit player-unit)) (let* ((target (if (eqv? (unit-type unit) player) enemy-unit player-unit))
(outcome (resolve-combat (attack-from-stance attack-dir (unit-stance unit)) (outcome (resolve-combat (attack-from-stance attack-dir (unit-stance unit))
(defense-from-stance attack-dir (defense-from-stance attack-dir
@ -114,15 +117,16 @@
(unit-stance unit))))) (unit-stance unit)))))
(if (eqv? outcome 'hit) (if (eqv? outcome 'hit)
(begin (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)) (set-unit-health! target (- (unit-health target) 1))
(when (= 0 (unit-health target)) (when (= 0 (unit-health target))
(set! battle-state 'ended) (set! battle-state 'ended)
(if (eqv? player (unit-type target)) (if (eqv? player (unit-type target))
(lose) (lose)
(win)))) (win)))))
(display (conc (unit-type unit) " misses!")))
(newline)
(set-unit-hand-pos! unit (opposite-pos attack-dir)))) (set-unit-hand-pos! unit (opposite-pos attack-dir))))
(define (move-unit unit pos) (define (move-unit unit pos)
@ -157,6 +161,48 @@
((v= (unit-pos enemy-unit) (vec j i)) enemy) ((v= (unit-pos enemy-unit) (vec j i)) enemy)
(else empty)))))))))) (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) (export arena)
(define (arena menu-scene) (define (arena menu-scene)
;; Reset state ;; Reset state
@ -198,6 +244,8 @@
draw-grid draw-grid
handle-buttons handle-buttons
handle-music-players handle-music-players
draw-player-sprite
draw-enemy-sprite
(entity (entity
(music-player (music-player
@ -351,11 +399,11 @@
;; Player order display ;; Player order display
(entity (entity
(footer (footer
(vec 0 0) (vec 600 400)
"") "")
(dynamic-label (dynamic-label
(lambda () (lambda ()
(conc "Order:\n Move: " (conc "Your Order:\n Move: "
(if (order-mov player-order) (if (order-mov player-order)
(let ((m (order-mov player-order))) (let ((m (order-mov player-order)))
(cond (cond

View file

@ -7,7 +7,39 @@
(imugi input) (imugi input)
(imugi scene) (imugi scene)
(imugi math) (imugi math)
(bd ui)) (imugi resource)
(imugi drawing))
(bd ui)
(define draw-player-sprite
(make-system
'draw-player-sprite
0
'global
'()
(lambda ()
(push-render-object 'screen
-1
(lambda ()
(draw-texture-2d
(vec 50 300)
(texture "../res/sprites/player/lose.png")
(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 500 300)
(texture "../res/sprites/enemy/win.png")
(make-color 1 1 1 1)))))))
(export lose-screen) (export lose-screen)
(define (lose-screen arena-scene menu-scene) (define (lose-screen arena-scene menu-scene)
@ -17,7 +49,9 @@
push-actions push-actions
draw-labels draw-labels
handle-buttons handle-buttons
draw-player-sprite
draw-enemy-sprite
(entity (entity
(title (title
(vec (vec

View file

@ -7,8 +7,40 @@
(imugi input) (imugi input)
(imugi scene) (imugi scene)
(imugi math) (imugi math)
(imugi resource)
(imugi drawing)
(bd ui)) (bd ui))
(define draw-player-sprite
(make-system
'draw-player-sprite
0
'global
'()
(lambda ()
(push-render-object 'screen
-1
(lambda ()
(draw-texture-2d
(vec 50 300)
(texture "../res/sprites/player/win.png")
(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 500 300)
(texture "../res/sprites/enemy/lose.png")
(make-color 1 1 1 1)))))))
(export win-screen) (export win-screen)
(define (win-screen arena-scene menu-scene) (define (win-screen arena-scene menu-scene)
(play-sound (load-sound "../res/music/Win.wav")) (play-sound (load-sound "../res/music/Win.wav"))
@ -17,6 +49,8 @@
push-actions push-actions
draw-labels draw-labels
handle-buttons handle-buttons
draw-player-sprite
draw-enemy-sprite
(entity (entity
(title (title