From 66382739bbfe7a9a180165d7a92455e76fde8365 Mon Sep 17 00:00:00 2001 From: Noah Petherbridge Date: Sun, 27 Mar 2022 11:51:14 -0700 Subject: [PATCH] Reset Timer Doodad + Various Fixes * Bird is not solid when colliding with other birds. * If the dev shell is used to run JavaScript during Play Mode, consider it cheating (so player can't `$ d.Scene.ResetTimer()` for example) * On Survival Mode levels, DieByFire immediately opens the End Level (silver score) modal rather than respawn from checkpoint, so levels don't need checkpoint contraptions to end the level. * During level loading screens, wait and call doodads' main() function until the very end. --- dev-assets/doodads/bird/bird.js | 2 +- dev-assets/doodads/regions/Makefile | 4 +++ dev-assets/doodads/regions/reset-timer.js | 30 ++++++++++++++++++++++ dev-assets/doodads/regions/timer-64.png | Bin 0 -> 901 bytes 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 dev-assets/doodads/regions/reset-timer.js create mode 100644 dev-assets/doodads/regions/timer-64.png diff --git a/dev-assets/doodads/bird/bird.js b/dev-assets/doodads/bird/bird.js index 00de17d..67fa32d 100644 --- a/dev-assets/doodads/bird/bird.js +++ b/dev-assets/doodads/bird/bird.js @@ -31,7 +31,7 @@ function main() { return; } - if (e.Actor.IsMobile() && e.InHitbox) { + if (e.Actor.IsMobile() && e.Actor.HasGravity() && e.InHitbox) { return false; } }); diff --git a/dev-assets/doodads/regions/Makefile b/dev-assets/doodads/regions/Makefile index 6ea450f..1c3f568 100644 --- a/dev-assets/doodads/regions/Makefile +++ b/dev-assets/doodads/regions/Makefile @@ -28,6 +28,10 @@ build: doodad edit-doodad --tag "color=invisible" reg-warp-door.doodad doodad install-script ../warp-door/warp-door.js reg-warp-door.doodad + # Reset Level Timer + doodad convert -t "Reset Level Timer" timer-64.png reg-reset-timer.doodad + doodad install-script reset-timer.js reg-reset-timer.doodad + for i in *.doodad; do\ doodad edit-doodad --tag "category=technical" $${i};\ done diff --git a/dev-assets/doodads/regions/reset-timer.js b/dev-assets/doodads/regions/reset-timer.js new file mode 100644 index 0000000..eb12c60 --- /dev/null +++ b/dev-assets/doodads/regions/reset-timer.js @@ -0,0 +1,30 @@ +// Reset Level Timer. +function main() { + Self.Hide(); + + // Reset the level timer only once. + let hasReset = false; + + Events.OnCollide((e) => { + if (!e.Settled) { + return; + } + + // Only care if it's the player. + if (!e.Actor.IsPlayer()) { + return; + } + + if (e.InHitbox && !hasReset) { + Level.ResetTimer(); + hasReset = true; + } + }); + + // Receive a power signal resets the doodad. + Message.Subscribe("power", (powered) => { + if (powered) { + hasReset = true; + } + }); +} diff --git a/dev-assets/doodads/regions/timer-64.png b/dev-assets/doodads/regions/timer-64.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5587974741a99717bc55269fcf4eb0fd0f1fb5 GIT binary patch literal 901 zcmV;01A6?4P)EX>4Tx04R}tkv&MmKp2MKrivmJ1uIB#$WWauh>AFB6^c+H)C#RSm|Xe?O&XFE z7e~Rh;NZ_<)xpJCR|i)?5c~mgbaGO3krKa43N2#1*Znzq)ttqEfJi*c4AUmwAfDc| z4bJ<-VOEq?;&b9LlP*a7$aTfzH_io@1)do;)2VslFtJ!@W2KE*(bR~ih@+~eQ@)V# zSmnIMSu0mr^Pc>Lp`5<5%ynABNMI35kRU=q6(y8mBSyPUiiH%N$9?<}*DsMvAy)~E z91EyGgY5dj|KN9Tt^DMKmlTQvoiC2_F#>e$0*#vEd>=bb;{*sk16O*>U#SB#pQP7X zTJ#9$+XgPKTbi;5TCi1XOrEd$s6h?M(NpVNALh2OR~mM1{yODA>N z%?jOTLI46FU~R~py;UVk-`?xHC&s?EPRJs__OSEV-}BgC{hDhs%0ct@So_d8(}uv8 zwp(&QZDHYB^1inpvL8-B$N|@cZOP7z|Ir~KV;-(MVsjwH-bKQw9P}%3Wai}8B?*@7 z^WCb!oc%Y(u~H#qYLAtwRR910;LAE7Mh{%~BW(8iwH*8EwLp!wcZxc7UZ@TsPUM0x+0Fod80MHOg7B0Sq zhV8?Ld4Ebnq-E_OVwZLyvxU>=fEFakZ9(V+%31@J=z)~Hpz=s9EkHvAAp`*s009sH0T8e(1b?0; b1lGnMaXU~x8$4z=00000NkvXXu0mjfriPUd literal 0 HcmV?d00001