From 73175b69653f62bd018487e9593eabd170ca250c Mon Sep 17 00:00:00 2001 From: Noah Petherbridge Date: Sat, 9 Oct 2021 20:45:38 -0700 Subject: [PATCH] Polish and bugfixes - Fix a memory sharing bug in the Giant Screenshot feature. - Main Menu to eagerload chunks in the background to make scrolling less jittery. No time for a loadscreen! - Extra script debugging: names/IDs of doodads are shown when they send messages to one another. - Level Properties: you can edit the Bounded max width/height values for the level. Doodad changes: - Buttons: fix a timing bug and keep better track of who is stepping on it, only popping up when all colliders have left. The effect: they pop up immediately (not after 200ms) and are more reliable. - Keys: zero-qty keys will no longer put themselves into the inventory of characters who already have one except for the player character. So the Thief will not steal them if she already has the key. Added to the JavaScript API: * time.Hour, time.Minute, time.Second, time.Millisecond, time.Microsecond --- dev-assets/doodads/buttons/button.js | 20 ++++++++++++++++---- dev-assets/doodads/doors/electric-door.js | 12 +++++------- dev-assets/doodads/doors/keys.js | 6 ++++++ 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/dev-assets/doodads/buttons/button.js b/dev-assets/doodads/buttons/button.js index c31e342..8919467 100644 --- a/dev-assets/doodads/buttons/button.js +++ b/dev-assets/doodads/buttons/button.js @@ -4,16 +4,23 @@ function main() { // Has a linked Sticky Button been pressed permanently down? var stickyDown = false; - Message.Subscribe("sticky:down", function(down) { + Message.Subscribe("sticky:down", function (down) { stickyDown = down; Self.ShowLayer(stickyDown ? 1 : 0); }); - Events.OnCollide(function(e) { + // Track who all is colliding with us. + var colliders = {}; + + Events.OnCollide(function (e) { if (!e.Settled) { return; } + if (colliders[e.Actor.ID()] == undefined) { + colliders[e.Actor.ID()] = true; + } + // If a linked Sticky Button is pressed, button stays down too and // doesn't interact. if (stickyDown) { @@ -37,12 +44,17 @@ function main() { } Self.ShowLayer(1); - timer = setTimeout(function() { + }); + + Events.OnLeave(function (e) { + delete colliders[e.Actor.ID()]; + + if (Object.keys(colliders).length === 0) { Sound.Play("button-up.wav") Self.ShowLayer(0); Message.Publish("power", false); timer = 0; pressed = false; - }, 200); + } }); } diff --git a/dev-assets/doodads/doors/electric-door.js b/dev-assets/doodads/doors/electric-door.js index 1f4be7c..127b812 100644 --- a/dev-assets/doodads/doors/electric-door.js +++ b/dev-assets/doodads/doors/electric-door.js @@ -6,7 +6,6 @@ var powerState = false; function setPoweredState(powered) { powerState = powered; - console.log("setPoweredState: %+v", powered) if (powered) { if (animating || opened) { return; @@ -14,14 +13,14 @@ function setPoweredState(powered) { animating = true; Sound.Play("electric-door.wav") - Self.PlayAnimation("open", function() { + Self.PlayAnimation("open", function () { opened = true; animating = false; }); } else { animating = true; Sound.Play("electric-door.wav") - Self.PlayAnimation("close", function() { + Self.PlayAnimation("close", function () { opened = false; animating = false; }) @@ -41,13 +40,12 @@ function main() { // power sources like Buttons will work as normal, as they emit only a power // signal. var ignoreNextPower = false; - Message.Subscribe("switch:toggle", function(powered) { - console.log("A switch powered %+v, setPoweredState(%+v) to opposite", powered, powerState); + Message.Subscribe("switch:toggle", function (powered) { ignoreNextPower = true; setPoweredState(!powerState); }) - Message.Subscribe("power", function(powered) { + Message.Subscribe("power", function (powered) { if (ignoreNextPower) { ignoreNextPower = false; return; @@ -56,7 +54,7 @@ function main() { setPoweredState(powered); }); - Events.OnCollide(function(e) { + Events.OnCollide(function (e) { if (e.InHitbox) { if (!opened) { return false; diff --git a/dev-assets/doodads/doors/keys.js b/dev-assets/doodads/doors/keys.js index 469a158..505f1e9 100644 --- a/dev-assets/doodads/doors/keys.js +++ b/dev-assets/doodads/doors/keys.js @@ -5,6 +5,12 @@ function main() { Events.OnCollide(function (e) { if (e.Settled) { if (e.Actor.HasInventory()) { + // If we don't have a quantity, and the actor already has + // one of us, don't pick it up so the player can get it. + if (quantity === 0 && e.Actor.HasItem(Self.Filename) === 0 && !e.Actor.IsPlayer()) { + return; + } + Sound.Play("item-get.wav") e.Actor.AddItem(Self.Filename, quantity); Self.Destroy();