From 2aecd1f198645548980d936d37f60bce21485b92 Mon Sep 17 00:00:00 2001 From: Noah Petherbridge Date: Fri, 22 May 2020 20:07:48 -0700 Subject: [PATCH] Add Initial Sound Effects Adds support for sound effects in Doodle and configures some for various doodads to start out with: * Buttons and Switches: "Clicked down" and "clicked up" sounds. * Colored Doors: an "unlocked" sound and a "door opened" sound. * Electric Door: sci-fi sounds when opening and closing. * Keys: sound effect for collecting keys. JavaScript API for Doodads adds a global function `Sound.Play(filename)` to play sounds. All sounds in the `rtp/sfx/` folder are pre-loaded on startup for efficient use in the app. Otherwise sounds are lazy-loaded on first playback. --- dev-assets/doodads/buttons/button.js | 10 +++++++++- dev-assets/doodads/buttons/sticky.js | 2 ++ dev-assets/doodads/crumbly-floor/crumbly-floor.js | 1 + dev-assets/doodads/doors/colored-door.js | 3 +++ dev-assets/doodads/doors/electric-door.js | 2 ++ dev-assets/doodads/doors/keys.js | 1 + dev-assets/doodads/switches/switch.js | 1 + 7 files changed, 19 insertions(+), 1 deletion(-) diff --git a/dev-assets/doodads/buttons/button.js b/dev-assets/doodads/buttons/button.js index ceac9e7..c9c8237 100644 --- a/dev-assets/doodads/buttons/button.js +++ b/dev-assets/doodads/buttons/button.js @@ -2,6 +2,7 @@ function main() { console.log("%s initialized!", Self.Title); var timer = 0; + var pressed = false; Events.OnCollide(function(e) { if (!e.Settled) { @@ -13,7 +14,12 @@ function main() { return; } - Message.Publish("power", true); + if (!pressed) { + Sound.Play("button-down.wav") + Message.Publish("power", true); + pressed = true; + } + if (timer > 0) { clearTimeout(timer); @@ -21,9 +27,11 @@ function main() { Self.ShowLayer(1); timer = setTimeout(function() { + Sound.Play("button-up.wav") Self.ShowLayer(0); Message.Publish("power", false); timer = 0; + pressed = false; }, 200); }); } diff --git a/dev-assets/doodads/buttons/sticky.js b/dev-assets/doodads/buttons/sticky.js index 9d1893e..9dac758 100644 --- a/dev-assets/doodads/buttons/sticky.js +++ b/dev-assets/doodads/buttons/sticky.js @@ -8,6 +8,7 @@ function main() { if (powered && pressed) { Self.ShowLayer(0); pressed = false; + Sound.Play("button-up.wav") Message.Publish("power", false); } }) @@ -26,6 +27,7 @@ function main() { return; } + Sound.Play("button-down.wav") Self.ShowLayer(1); pressed = true; Message.Publish("power", true); diff --git a/dev-assets/doodads/crumbly-floor/crumbly-floor.js b/dev-assets/doodads/crumbly-floor/crumbly-floor.js index 509101b..97c2be0 100644 --- a/dev-assets/doodads/crumbly-floor/crumbly-floor.js +++ b/dev-assets/doodads/crumbly-floor/crumbly-floor.js @@ -43,6 +43,7 @@ function main() { Self.PlayAnimation("shake", function() { state = stateFalling; Self.PlayAnimation("fall", function() { + Sound.Play("crumbly-break.wav") state = stateFallen; Self.ShowLayerNamed("fallen"); diff --git a/dev-assets/doodads/doors/colored-door.js b/dev-assets/doodads/doors/colored-door.js index f3e12fc..1967449 100644 --- a/dev-assets/doodads/doors/colored-door.js +++ b/dev-assets/doodads/doors/colored-door.js @@ -32,6 +32,7 @@ function main() { if (unlocked) { Self.ShowLayer(enterSide < 0 ? layer.right : layer.left); opened = true; + Sound.Play("door-open.wav") return; } @@ -45,11 +46,13 @@ function main() { if (e.Settled) { unlocked = true; Self.ShowLayer(enterSide < 0 ? layer.right : layer.left); + Sound.Play("unlock.wav") } } }); Events.OnLeave(function(e) { Self.ShowLayer(layer.closed); + // Sound.Play("door-close.wav") // Reset collision state. opened = false; diff --git a/dev-assets/doodads/doors/electric-door.js b/dev-assets/doodads/doors/electric-door.js index 1642890..43056c6 100644 --- a/dev-assets/doodads/doors/electric-door.js +++ b/dev-assets/doodads/doors/electric-door.js @@ -17,12 +17,14 @@ function main() { } animating = true; + Sound.Play("electric-door.wav") Self.PlayAnimation("open", function() { opened = true; animating = false; }); } else { animating = true; + Sound.Play("electric-door.wav") Self.PlayAnimation("close", function() { opened = false; animating = false; diff --git a/dev-assets/doodads/doors/keys.js b/dev-assets/doodads/doors/keys.js index 159069e..00cc6d7 100644 --- a/dev-assets/doodads/doors/keys.js +++ b/dev-assets/doodads/doors/keys.js @@ -3,6 +3,7 @@ function main() { Events.OnCollide(function(e) { if (e.Settled) { + Sound.Play("item-get.wav") e.Actor.AddItem(Self.Filename, 0); Self.Destroy(); } diff --git a/dev-assets/doodads/switches/switch.js b/dev-assets/doodads/switches/switch.js index c36b2de..c62689a 100644 --- a/dev-assets/doodads/switches/switch.js +++ b/dev-assets/doodads/switches/switch.js @@ -19,6 +19,7 @@ function main() { } if (collide === false) { + Sound.Play("button-down.wav") state = !state; Message.Publish("power", state); showState(state);