From 0518df226c4db2e950e6c896024cf84ddee7bec3 Mon Sep 17 00:00:00 2001 From: Noah Petherbridge Date: Sun, 8 Aug 2021 21:54:37 -0700 Subject: [PATCH] New Doodad: Anvil * The Anvil doodad is affected by gravity and becomes dangerous when falling. If it lands on the player character, you die! If it lands on any other mobile doodad, it destroys it! It can land on solid doodads such as the Electric Trapdoor and the Crumbly Floor. It will activate a Crumbly Floor if it lands on one, and can activate buttons and switches that it passes. * JavaScript API: FailLevel(message) can be called from a doodad to kill the player character. The Anvil does this if it collides with the player while it's been falling. --- dev-assets/doodads/box/box.js | 3 -- dev-assets/doodads/build.sh | 4 ++ dev-assets/doodads/objects/Makefile | 8 ++- dev-assets/doodads/objects/anvil.js | 51 ++++++++++++++++++ dev-assets/doodads/objects/anvil.png | Bin 0 -> 796 bytes dev-assets/doodads/switches/switch.js | 8 +-- .../doodads/trapdoors/electric-trapdoor.js | 5 ++ docs/Doodad Scripts.md | 1 + pkg/play_scene.go | 30 +++++++++-- pkg/scripting/pubsub.go | 2 + pkg/scripting/scripting.go | 1 + pkg/scripting/supervisor_events.go | 15 +++++- pkg/uix/actor_collision.go | 2 + 13 files changed, 117 insertions(+), 13 deletions(-) create mode 100644 dev-assets/doodads/objects/anvil.js create mode 100644 dev-assets/doodads/objects/anvil.png 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 0000000000000000000000000000000000000000..205beccb30199cdf8c61d57b22e1fe99ffc6844c GIT binary patch literal 796 zcmV+%1LOROP)X1^@s6ccHC$0004mX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKp2MKrb>%c9E>31kfAzR5EXIMDionYs1;guFuC*(nlvOS zE{=k0!NH%!s)LKOt`4q(Aov5~=H{g6A|-y;6k5c1$8itueecWNcYshYGu`eQ2Xw=+ zQi-^f$*xMFSA=N}KtxDkwmB!uN%)Shdj$A?7vov}b$^atEoU)O(FKVgxvqNr#<|dBfoFUT9?#W*m$r&rlT&FdR1QxLb84^@fQ9>CGVze8i*htZN+{ZuE^vmQ@$yEX) z#{w$Qp)~#AfAG7vc7AfgONzvS?ibhn7y&}NK%?fm-^Z@oI01ssz?ISVSL(pbC+W4e z7Ci#`wtjJ_!g^xpzKYhK@4=Qw=;($uTu4RCM> zj20++-RIrm&c6Ly)9T+34AOFbbr;fx00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru

D_9ta=#Ep7k+02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{008t!L_t(o!|hkw4Z|Q1^F?eFX3EV3GliM1KSgS2s4hH0 zkm^r_z{dB2pod^QC|xjD$nE<+jJdV;blm_D4YAw-H$!p`s1QOJ%HBDLbzKjSY5M12qzu0c2vsQ>MZQ$Tg2_?qz+sN6sYL0B zpyg&-zDC*$diRZ52c+kCt#zSPfIKD4i$my+&yD5}GJO>)cHk)!>feF8$LVf;U{pv= aUq)X@;ABbgF<7|(0000