From 0fd2a97e6f169468b3a48f996ba35cd70210baa0 Mon Sep 17 00:00:00 2001
From: Paul Duncan <pabs@pablotron.org>
Date: Wed, 16 Jan 2019 17:22:42 -0500
Subject: add src/sdl/sounds.[hc], assets/wavs, and set default sounds

---
 assets/wavs/blip-0.wav    | Bin 0 -> 1501 bytes
 assets/wavs/coin-0.wav    | Bin 0 -> 1395 bytes
 assets/wavs/coin-1.wav    | Bin 0 -> 1252 bytes
 assets/wavs/coin-2.wav    | Bin 0 -> 2919 bytes
 assets/wavs/hit-0.wav     | Bin 0 -> 1293 bytes
 assets/wavs/hit-1.wav     | Bin 0 -> 3119 bytes
 assets/wavs/hit-2.wav     | Bin 0 -> 1314 bytes
 assets/wavs/jump-0.wav    | Bin 0 -> 8558 bytes
 assets/wavs/jump-1.wav    | Bin 0 -> 3190 bytes
 assets/wavs/jump-2.wav    | Bin 0 -> 6002 bytes
 assets/wavs/jump-3.wav    | Bin 0 -> 36826 bytes
 assets/wavs/laser-0.wav   | Bin 0 -> 8397 bytes
 assets/wavs/powerup-0.wav | Bin 0 -> 12832 bytes
 assets/wavs/powerup-1.wav | Bin 0 -> 12946 bytes
 assets/wavs/powerup-2.wav | Bin 0 -> 8586 bytes
 assets/wavs/powerup-3.wav | Bin 0 -> 8406 bytes
 assets/wavs/powerup-4.wav | Bin 0 -> 2075 bytes
 assets/wavs/powerup-5.wav | Bin 0 -> 14335 bytes
 assets/wavs/powerup-6.wav | Bin 0 -> 16219 bytes
 assets/wavs/undo-0.wav    | Bin 0 -> 1342 bytes
 assets/wavs/undo-1.wav    | Bin 0 -> 1303 bytes
 src/msi/sok.wxs           |  11 +++++++++++
 src/sdl/action.c          |   2 +-
 src/sdl/draw.c            |   2 +-
 src/sdl/sounds.c          |  47 ++++++++++++++++++++++++++++++++++++++++++++++
 src/sdl/sounds.h          |  10 ++++++++++
 26 files changed, 70 insertions(+), 2 deletions(-)
 create mode 100644 assets/wavs/blip-0.wav
 create mode 100644 assets/wavs/coin-0.wav
 create mode 100644 assets/wavs/coin-1.wav
 create mode 100644 assets/wavs/coin-2.wav
 create mode 100644 assets/wavs/hit-0.wav
 create mode 100644 assets/wavs/hit-1.wav
 create mode 100644 assets/wavs/hit-2.wav
 create mode 100644 assets/wavs/jump-0.wav
 create mode 100644 assets/wavs/jump-1.wav
 create mode 100644 assets/wavs/jump-2.wav
 create mode 100644 assets/wavs/jump-3.wav
 create mode 100644 assets/wavs/laser-0.wav
 create mode 100644 assets/wavs/powerup-0.wav
 create mode 100644 assets/wavs/powerup-1.wav
 create mode 100644 assets/wavs/powerup-2.wav
 create mode 100644 assets/wavs/powerup-3.wav
 create mode 100644 assets/wavs/powerup-4.wav
 create mode 100644 assets/wavs/powerup-5.wav
 create mode 100644 assets/wavs/powerup-6.wav
 create mode 100644 assets/wavs/undo-0.wav
 create mode 100644 assets/wavs/undo-1.wav
 create mode 100644 src/sdl/sounds.c
 create mode 100644 src/sdl/sounds.h

diff --git a/assets/wavs/blip-0.wav b/assets/wavs/blip-0.wav
new file mode 100644
index 0000000..d70e2ae
Binary files /dev/null and b/assets/wavs/blip-0.wav differ
diff --git a/assets/wavs/coin-0.wav b/assets/wavs/coin-0.wav
new file mode 100644
index 0000000..a4011b1
Binary files /dev/null and b/assets/wavs/coin-0.wav differ
diff --git a/assets/wavs/coin-1.wav b/assets/wavs/coin-1.wav
new file mode 100644
index 0000000..db9a8e1
Binary files /dev/null and b/assets/wavs/coin-1.wav differ
diff --git a/assets/wavs/coin-2.wav b/assets/wavs/coin-2.wav
new file mode 100644
index 0000000..fd8abca
Binary files /dev/null and b/assets/wavs/coin-2.wav differ
diff --git a/assets/wavs/hit-0.wav b/assets/wavs/hit-0.wav
new file mode 100644
index 0000000..7d80ded
Binary files /dev/null and b/assets/wavs/hit-0.wav differ
diff --git a/assets/wavs/hit-1.wav b/assets/wavs/hit-1.wav
new file mode 100644
index 0000000..6204c6e
Binary files /dev/null and b/assets/wavs/hit-1.wav differ
diff --git a/assets/wavs/hit-2.wav b/assets/wavs/hit-2.wav
new file mode 100644
index 0000000..b7b4977
Binary files /dev/null and b/assets/wavs/hit-2.wav differ
diff --git a/assets/wavs/jump-0.wav b/assets/wavs/jump-0.wav
new file mode 100644
index 0000000..e60eab8
Binary files /dev/null and b/assets/wavs/jump-0.wav differ
diff --git a/assets/wavs/jump-1.wav b/assets/wavs/jump-1.wav
new file mode 100644
index 0000000..e2f87cb
Binary files /dev/null and b/assets/wavs/jump-1.wav differ
diff --git a/assets/wavs/jump-2.wav b/assets/wavs/jump-2.wav
new file mode 100644
index 0000000..e8cc257
Binary files /dev/null and b/assets/wavs/jump-2.wav differ
diff --git a/assets/wavs/jump-3.wav b/assets/wavs/jump-3.wav
new file mode 100644
index 0000000..cc0acff
Binary files /dev/null and b/assets/wavs/jump-3.wav differ
diff --git a/assets/wavs/laser-0.wav b/assets/wavs/laser-0.wav
new file mode 100644
index 0000000..7fc08f0
Binary files /dev/null and b/assets/wavs/laser-0.wav differ
diff --git a/assets/wavs/powerup-0.wav b/assets/wavs/powerup-0.wav
new file mode 100644
index 0000000..bb41230
Binary files /dev/null and b/assets/wavs/powerup-0.wav differ
diff --git a/assets/wavs/powerup-1.wav b/assets/wavs/powerup-1.wav
new file mode 100644
index 0000000..0e9d375
Binary files /dev/null and b/assets/wavs/powerup-1.wav differ
diff --git a/assets/wavs/powerup-2.wav b/assets/wavs/powerup-2.wav
new file mode 100644
index 0000000..eb156af
Binary files /dev/null and b/assets/wavs/powerup-2.wav differ
diff --git a/assets/wavs/powerup-3.wav b/assets/wavs/powerup-3.wav
new file mode 100644
index 0000000..d72febd
Binary files /dev/null and b/assets/wavs/powerup-3.wav differ
diff --git a/assets/wavs/powerup-4.wav b/assets/wavs/powerup-4.wav
new file mode 100644
index 0000000..9af69db
Binary files /dev/null and b/assets/wavs/powerup-4.wav differ
diff --git a/assets/wavs/powerup-5.wav b/assets/wavs/powerup-5.wav
new file mode 100644
index 0000000..eab59d3
Binary files /dev/null and b/assets/wavs/powerup-5.wav differ
diff --git a/assets/wavs/powerup-6.wav b/assets/wavs/powerup-6.wav
new file mode 100644
index 0000000..203c7d3
Binary files /dev/null and b/assets/wavs/powerup-6.wav differ
diff --git a/assets/wavs/undo-0.wav b/assets/wavs/undo-0.wav
new file mode 100644
index 0000000..4e512ae
Binary files /dev/null and b/assets/wavs/undo-0.wav differ
diff --git a/assets/wavs/undo-1.wav b/assets/wavs/undo-1.wav
new file mode 100644
index 0000000..94b9a92
Binary files /dev/null and b/assets/wavs/undo-1.wav differ
diff --git a/src/msi/sok.wxs b/src/msi/sok.wxs
index b02bd50..7099390 100644
--- a/src/msi/sok.wxs
+++ b/src/msi/sok.wxs
@@ -186,6 +186,16 @@ adc88948-391e-48cf-8067-b002dcba4411
               />
             </Component>
 
+            <Component Id='cmp-sdl2-mixer-dll' Guid='*'>
+              <File
+                Id='file-sdl2-mixer-dll'
+                Name='SDL2_mixer.dll'
+                DiskId='1'
+                Source='$(var.SDL_LIB_DIR)/SDL2_mixer.dll'
+                KeyPath='yes'
+              />
+            </Component>
+
             <Component Id='cmp-sdl2-dll' Guid='*'>
               <File
                 Id='file-sdl2-dll'
@@ -217,6 +227,7 @@ adc88948-391e-48cf-8067-b002dcba4411
       <ComponentRef Id='cmp-text-exe'/>
       <ComponentRef Id='cmp-libfreetype-dll'/>
       <ComponentRef Id='cmp-sdl2-ttf-dll'/>
+      <ComponentRef Id='cmp-sdl2-mixer-dll'/>
       <ComponentRef Id='cmp-sdl2-dll'/>
       <ComponentRef Id='cmp-zlib1-dll'/>
     </Feature>
diff --git a/src/sdl/action.c b/src/sdl/action.c
index 18badc1..bc0cf89 100644
--- a/src/sdl/action.c
+++ b/src/sdl/action.c
@@ -125,7 +125,7 @@ get_action(
         };
         break;
       case SOLVE_EVENT_FAIL:
-        warn("solve failed: %s", ev->user.data2 ? ev->user.data2 : "unknown error");
+        warn("solve failed: %s", ev->user.data2 ? (char*) ev->user.data2 : "unknown error");
         return (action_t) { .type = ACTION_SOLVE_EVENT_FAIL };
         break;
       case SOLVE_EVENT_DONE:
diff --git a/src/sdl/draw.c b/src/sdl/draw.c
index 37d9ba2..d95e83f 100644
--- a/src/sdl/draw.c
+++ b/src/sdl/draw.c
@@ -291,7 +291,7 @@ draw_solve_moves_text(
   char buf[1024];
 
   // fill buffer
-  snprintf(buf, sizeof(buf), " %lu attempts ", draw_ctx->solve_num_steps);
+  snprintf(buf, sizeof(buf), " %u attempts ", (unsigned int) draw_ctx->solve_num_steps);
 
   // draw text
   draw_text(draw_ctx->renderer, draw_ctx->font, style, buf);
diff --git a/src/sdl/sounds.c b/src/sdl/sounds.c
new file mode 100644
index 0000000..956229c
--- /dev/null
+++ b/src/sdl/sounds.c
@@ -0,0 +1,47 @@
+#include <SDL.h>
+#include "util.h"
+#include "assets.h"
+#include "sounds.h"
+
+#define SOUND_OFS(asset_id) ((asset_id) - ASSET_SOUND_FIRST - 1)
+
+void
+sounds_init(
+  Mix_Chunk ** const sounds
+) {
+  for (asset_id_t id = ASSET_SOUND_FIRST + 1; id < ASSET_SOUND_LAST; id++) {
+    // get asset
+    const asset_t * const asset = asset_get(id);
+
+    // create rwops
+    SDL_RWops *rw = SDL_RWFromConstMem(asset->buf, asset->len);
+    if (!rw) {
+      die("SDL_RWFromConstMem(): %s", SDL_GetError());
+    }
+
+    // load chunk
+    Mix_Chunk *chunk = Mix_LoadWAV_RW(rw, 1);
+    if (!chunk) {
+      die("Mix_LoadWAV_RW(): %s", Mix_GetError());
+    }
+
+    // add to list of sounds
+    sounds[SOUND_OFS(id)] = chunk;
+  }
+}
+
+void
+sound_play(
+  Mix_Chunk ** const sounds,
+  const asset_id_t id
+) {
+  // check ID
+  if (id <= ASSET_SOUND_FIRST || id >= ASSET_SOUND_LAST) {
+    die("invalid sound asset id: %u", id);
+  }
+
+  // play sound
+  if (Mix_PlayChannel(-1, sounds[SOUND_OFS(id)], 0)) {
+    die("Mix_PlayChannel(): %s", Mix_GetError());
+  }
+}
diff --git a/src/sdl/sounds.h b/src/sdl/sounds.h
new file mode 100644
index 0000000..3b74aff
--- /dev/null
+++ b/src/sdl/sounds.h
@@ -0,0 +1,10 @@
+#ifndef SOUNDS_H
+#define SOUNDS_H
+
+#include <SDL_mixer.h>
+#include "assets.h"
+
+void sounds_init(Mix_Chunk ** const);
+void sound_play(Mix_Chunk ** const sounds, const asset_id_t);
+
+#endif /* SOUNDS_H */
-- 
cgit v1.2.3