diff --git a/dev-assets/doodads/box/box.js b/dev-assets/doodads/box/box.js index 1c97439..30d3d6a 100644 --- a/dev-assets/doodads/box/box.js +++ b/dev-assets/doodads/box/box.js @@ -41,9 +41,6 @@ function main() { // When we receive power, we reset to our original position. var origPoint = Self.Position(); Message.Subscribe("power", function (powered) { - console.error("Box received power! %+v", powered); - console.error("MoveTo: %+v", origPoint); - console.error("Keys: %+v", Object.keys(Self)); Self.MoveTo(origPoint); Self.SetVelocity(Vector(0, 0)); }); diff --git a/dev-assets/doodads/build.sh b/dev-assets/doodads/build.sh index f434a94..5597a19 100755 --- a/dev-assets/doodads/build.sh +++ b/dev-assets/doodads/build.sh @@ -58,6 +58,10 @@ objects() { cd box/ make cd .. + + cd crumbly-floor/ + make + cd .. } onoff() { diff --git a/dev-assets/doodads/objects/Makefile b/dev-assets/doodads/objects/Makefile index 0573bc1..c56b8ed 100644 --- a/dev-assets/doodads/objects/Makefile +++ b/dev-assets/doodads/objects/Makefile @@ -2,10 +2,16 @@ ALL: build .PHONY: build build: + # Start Flag + doodad convert -t "Start Flag" start-flag.png start-flag.doodad + + # Exit Flag doodad convert -t "Exit Flag" exit-flag.png exit-flag.doodad doodad install-script exit-flag.js exit-flag.doodad - doodad convert -t "Start Flag" start-flag.png start-flag.doodad + # Anvil + doodad convert -t "Anvil" anvil.png anvil.doodad + doodad install-script anvil.js anvil.doodad for i in *.doodad; do\ doodad edit-doodad --tag "category=objects" $${i};\ diff --git a/dev-assets/doodads/objects/anvil.js b/dev-assets/doodads/objects/anvil.js new file mode 100644 index 0000000..2359bca --- /dev/null +++ b/dev-assets/doodads/objects/anvil.js @@ -0,0 +1,51 @@ +// Anvil +var falling = false; + +function main() { + // Note: doodad is not "solid" but hurts if it falls on you. + Self.SetHitbox(0, 0, 48, 25); + Self.SetMobile(true); + Self.SetGravity(true); + + // Monitor our Y position to tell if we've been falling. + var lastPoint = Self.Position(); + setInterval(function () { + var nowAt = Self.Position(); + if (nowAt.Y > lastPoint.Y) { + falling = true; + } else { + falling = false; + } + lastPoint = nowAt; + }, 100); + + Events.OnCollide(function (e) { + if (!e.Settled) { + return; + } + + // Were we falling? + if (falling) { + if (e.InHitbox) { + if (e.Actor.IsPlayer()) { + // Fatal to the player. + Sound.Play("crumbly-break.wav"); + FailLevel("Watch out for anvils!"); + return; + } + else if (e.Actor.IsMobile()) { + // Destroy mobile doodads. + Sound.Play("crumbly-break.wav"); + e.Actor.Destroy(); + } + } + } + }); + + // When we receive power, we reset to our original position. + var origPoint = Self.Position(); + Message.Subscribe("power", function (powered) { + Self.MoveTo(origPoint); + Self.SetVelocity(Vector(0, 0)); + }); +} diff --git a/dev-assets/doodads/objects/anvil.png b/dev-assets/doodads/objects/anvil.png new file mode 100644 index 0000000..205becc Binary files /dev/null and b/dev-assets/doodads/objects/anvil.png differ diff --git a/dev-assets/doodads/switches/switch.js b/dev-assets/doodads/switches/switch.js index 88e8eaf..973a7b3 100644 --- a/dev-assets/doodads/switches/switch.js +++ b/dev-assets/doodads/switches/switch.js @@ -7,13 +7,13 @@ function main() { var state = false; var collide = false; - Message.Subscribe("power", function(powered) { + Message.Subscribe("power", function (powered) { state = powered; showState(state); }); - Events.OnCollide(function(e) { - if (!e.Settled) { + Events.OnCollide(function (e) { + if (!e.Settled || !e.Actor.IsMobile()) { return; } @@ -30,7 +30,7 @@ function main() { } }); - Events.OnLeave(function(e) { + Events.OnLeave(function (e) { collide = false; }); } diff --git a/dev-assets/doodads/trapdoors/electric-trapdoor.js b/dev-assets/doodads/trapdoors/electric-trapdoor.js index 2a33057..836f662 100644 --- a/dev-assets/doodads/trapdoors/electric-trapdoor.js +++ b/dev-assets/doodads/trapdoors/electric-trapdoor.js @@ -49,6 +49,11 @@ function setPoweredState(powered) { Self.PlayAnimation("open", function () { isOpen = true; animating = false; + + // Had we lost power quickly? + if (!powerState) { + setPoweredState(false); + } }); } else { animating = true;