diff --git a/modules/grid.scm b/modules/grid.scm index dc0015d..c33ba98 100644 --- a/modules/grid.scm +++ b/modules/grid.scm @@ -41,7 +41,7 @@ width (cond ((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))) (not (eqv? entity 'none)) 2))))) diff --git a/modules/ui.scm b/modules/ui.scm index e6e6676..6c746c3 100644 --- a/modules/ui.scm +++ b/modules/ui.scm @@ -208,6 +208,7 @@ ;; If button is clicked, exec button click func (define (do-button-callback button) (when (eqv? 'clicked (button-state button)) + (play-sound (load-sound "../res/sfx/click.wav")) ((button-click-fn button)))) ;; Needs to be added to do buttons diff --git a/res/sfx/click.wav b/res/sfx/click.wav new file mode 100644 index 0000000..3bdd763 Binary files /dev/null and b/res/sfx/click.wav differ diff --git a/res/sfx/hit.wav b/res/sfx/hit.wav new file mode 100644 index 0000000..3a6e8f5 Binary files /dev/null and b/res/sfx/hit.wav differ diff --git a/res/sfx/hurt1.wav b/res/sfx/hurt1.wav new file mode 100644 index 0000000..7419713 Binary files /dev/null and b/res/sfx/hurt1.wav differ diff --git a/res/sfx/hurt2.wav b/res/sfx/hurt2.wav new file mode 100644 index 0000000..3d6cc50 Binary files /dev/null and b/res/sfx/hurt2.wav differ diff --git a/res/sfx/hurt3.wav b/res/sfx/hurt3.wav new file mode 100644 index 0000000..9fad7ea Binary files /dev/null and b/res/sfx/hurt3.wav differ diff --git a/res/sprites/enemy/down-left.png b/res/sprites/enemy/down-left.png new file mode 100644 index 0000000..f168008 Binary files /dev/null and b/res/sprites/enemy/down-left.png differ diff --git a/res/sprites/enemy/down-right.png b/res/sprites/enemy/down-right.png new file mode 100644 index 0000000..555ae6f Binary files /dev/null and b/res/sprites/enemy/down-right.png differ diff --git a/res/sprites/enemy/lose.png b/res/sprites/enemy/lose.png new file mode 100644 index 0000000..d04f960 Binary files /dev/null and b/res/sprites/enemy/lose.png differ diff --git a/res/sprites/enemy/mid-left.png b/res/sprites/enemy/mid-left.png new file mode 100644 index 0000000..052456e Binary files /dev/null and b/res/sprites/enemy/mid-left.png differ diff --git a/res/sprites/enemy/mid-right.png b/res/sprites/enemy/mid-right.png new file mode 100644 index 0000000..02aa1e1 Binary files /dev/null and b/res/sprites/enemy/mid-right.png differ diff --git a/res/sprites/enemy/up-left.png b/res/sprites/enemy/up-left.png new file mode 100644 index 0000000..4a2a11b Binary files /dev/null and b/res/sprites/enemy/up-left.png differ diff --git a/res/sprites/enemy/up-right.png b/res/sprites/enemy/up-right.png new file mode 100644 index 0000000..6b8e1ff Binary files /dev/null and b/res/sprites/enemy/up-right.png differ diff --git a/res/sprites/enemy/win.png b/res/sprites/enemy/win.png new file mode 100644 index 0000000..4ee562a Binary files /dev/null and b/res/sprites/enemy/win.png differ diff --git a/res/sprites/player/down-left.png b/res/sprites/player/down-left.png new file mode 100644 index 0000000..2b29107 Binary files /dev/null and b/res/sprites/player/down-left.png differ diff --git a/res/sprites/player/down-right.png b/res/sprites/player/down-right.png new file mode 100644 index 0000000..cebf2dd Binary files /dev/null and b/res/sprites/player/down-right.png differ diff --git a/res/sprites/player/lose.png b/res/sprites/player/lose.png new file mode 100644 index 0000000..7df20e0 Binary files /dev/null and b/res/sprites/player/lose.png differ diff --git a/res/sprites/player/mid-left.png b/res/sprites/player/mid-left.png new file mode 100644 index 0000000..472cfc1 Binary files /dev/null and b/res/sprites/player/mid-left.png differ diff --git a/res/sprites/player/mid-right.png b/res/sprites/player/mid-right.png new file mode 100644 index 0000000..cae872a Binary files /dev/null and b/res/sprites/player/mid-right.png differ diff --git a/res/sprites/player/up-left.png b/res/sprites/player/up-left.png new file mode 100644 index 0000000..479aa1a Binary files /dev/null and b/res/sprites/player/up-left.png differ diff --git a/res/sprites/player/up-right.png b/res/sprites/player/up-right.png new file mode 100644 index 0000000..fce2249 Binary files /dev/null and b/res/sprites/player/up-right.png differ diff --git a/res/sprites/player/win.png b/res/sprites/player/win.png new file mode 100644 index 0000000..432e185 Binary files /dev/null and b/res/sprites/player/win.png differ diff --git a/src/arena.scm b/src/arena.scm index 8a5ff8f..757fd8b 100644 --- a/src/arena.scm +++ b/src/arena.scm @@ -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 diff --git a/src/lose-screen.scm b/src/lose-screen.scm index 1067642..933ba16 100644 --- a/src/lose-screen.scm +++ b/src/lose-screen.scm @@ -7,7 +7,39 @@ (imugi input) (imugi scene) (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) (define (lose-screen arena-scene menu-scene) @@ -17,7 +49,9 @@ push-actions draw-labels handle-buttons - + draw-player-sprite + draw-enemy-sprite + (entity (title (vec diff --git a/src/win-screen.scm b/src/win-screen.scm index 4eb37b8..f95ce9b 100644 --- a/src/win-screen.scm +++ b/src/win-screen.scm @@ -7,8 +7,40 @@ (imugi input) (imugi scene) (imugi math) + (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/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) (define (win-screen arena-scene menu-scene) (play-sound (load-sound "../res/music/Win.wav")) @@ -17,6 +49,8 @@ push-actions draw-labels handle-buttons + draw-player-sprite + draw-enemy-sprite (entity (title