diff --git a/dev-assets/doodads/build.sh b/dev-assets/doodads/build.sh index d115872..6bc41eb 100755 --- a/dev-assets/doodads/build.sh +++ b/dev-assets/doodads/build.sh @@ -66,6 +66,10 @@ objects() { cd crumbly-floor/ make cd .. + + cd regions/ + make + cd .. } onoff() { diff --git a/dev-assets/doodads/regions/Makefile b/dev-assets/doodads/regions/Makefile new file mode 100644 index 0000000..63b40ad --- /dev/null +++ b/dev-assets/doodads/regions/Makefile @@ -0,0 +1,25 @@ +ALL: build + +.PHONY: build +build: + # Goal Region + doodad convert -t "Goal Region" goal-128.png reg-goal.doodad + doodad install-script goal.js reg-goal.doodad + + # Fire Region + doodad convert -t "Fire Region" fire-128.png reg-fire.doodad + doodad install-script fire.js reg-fire.doodad + + # Stall Region + doodad convert -t "Stall Player (250ms)" stall-128.png reg-stall-250.doodad + doodad edit-doodad --tag "ms=250" reg-stall-250.doodad + doodad install-script stall.js reg-stall-250.doodad + + # Power Source + doodad convert -t "Power Source" power-64.png power-source.doodad + doodad install-script power.js power-source.doodad + + for i in *.doodad; do\ + doodad edit-doodad --tag "category=technical" $${i};\ + done + cp *.doodad ../../../assets/doodads/ \ No newline at end of file diff --git a/dev-assets/doodads/regions/fire-128.png b/dev-assets/doodads/regions/fire-128.png new file mode 100644 index 0000000..117a231 Binary files /dev/null and b/dev-assets/doodads/regions/fire-128.png differ diff --git a/dev-assets/doodads/regions/fire.js b/dev-assets/doodads/regions/fire.js new file mode 100644 index 0000000..aae40c8 --- /dev/null +++ b/dev-assets/doodads/regions/fire.js @@ -0,0 +1,19 @@ +// Goal Region. +function main() { + Self.Hide(); + + Events.OnCollide(function (e) { + if (!e.Settled) { + return; + } + + // Only care if it's the player. + if (!e.Actor.IsPlayer()) { + return; + } + + if (e.InHitbox) { + FailLevel("You have died!"); + } + }); +} diff --git a/dev-assets/doodads/regions/goal-128.png b/dev-assets/doodads/regions/goal-128.png new file mode 100644 index 0000000..b769917 Binary files /dev/null and b/dev-assets/doodads/regions/goal-128.png differ diff --git a/dev-assets/doodads/regions/goal.js b/dev-assets/doodads/regions/goal.js new file mode 100644 index 0000000..1d06f8f --- /dev/null +++ b/dev-assets/doodads/regions/goal.js @@ -0,0 +1,19 @@ +// Goal Region. +function main() { + Self.Hide(); + + Events.OnCollide(function (e) { + if (!e.Settled) { + return; + } + + // Only care if it's the player. + if (!e.Actor.IsPlayer()) { + return; + } + + if (e.InHitbox) { + EndLevel(); + } + }); +} diff --git a/dev-assets/doodads/regions/power-128.png b/dev-assets/doodads/regions/power-128.png new file mode 100644 index 0000000..fcdab41 Binary files /dev/null and b/dev-assets/doodads/regions/power-128.png differ diff --git a/dev-assets/doodads/regions/power-64.png b/dev-assets/doodads/regions/power-64.png new file mode 100644 index 0000000..cfe47f5 Binary files /dev/null and b/dev-assets/doodads/regions/power-64.png differ diff --git a/dev-assets/doodads/regions/power.js b/dev-assets/doodads/regions/power.js new file mode 100644 index 0000000..072a526 --- /dev/null +++ b/dev-assets/doodads/regions/power.js @@ -0,0 +1,22 @@ +// Power source. +// Emits a power(true) signal once on level start. +// If it receives a power signal, it will repeat it after 5 seconds. +// Link two of these bad boys together and you got yourself a clock. +function main() { + Self.Hide(); + + // See if we are not linked to anything. + var links = Self.GetLinks(); + if (links.length === 0) { + console.error( + "%s at %s is not linked to anything! This doodad emits a power(true) on level start to all linked doodads.", + Self.Title, + Self.Position() + ); + } + + Message.Subscribe("broadcast:ready", function () { + Message.Publish("switch:toggle", true); + Message.Publish("power", true); + }); +} diff --git a/dev-assets/doodads/regions/stall-128.png b/dev-assets/doodads/regions/stall-128.png new file mode 100644 index 0000000..ea0bd5e Binary files /dev/null and b/dev-assets/doodads/regions/stall-128.png differ diff --git a/dev-assets/doodads/regions/stall.js b/dev-assets/doodads/regions/stall.js new file mode 100644 index 0000000..c174594 --- /dev/null +++ b/dev-assets/doodads/regions/stall.js @@ -0,0 +1,40 @@ +// Stall Player. +// Tags: ms (int) +// Grabs the player one time. Resets if it receives power. +function main() { + Self.Hide(); + + var active = true, + timeout = 250, + ms = Self.GetTag("ms"); + + if (ms.length > 0) { + timeout = parseInt(ms); + } + + Events.OnCollide(function (e) { + if (!active || !e.Settled) { + return; + } + + // Only care if it's the player. + if (!e.Actor.IsPlayer()) { + return; + } + + if (e.InHitbox) { + // Grab hold of the player. + e.Actor.Freeze(); + setTimeout(function () { + e.Actor.Unfreeze(); + }, timeout); + + active = false; + } + }); + + // Reset the trap if powered by a button. + Message.Subscribe("power", function (powered) { + active = true; + }); +}