From 810ba193d96f22b8b5068d1767a9e580ff51b8cc Mon Sep 17 00:00:00 2001 From: Noah Petherbridge Date: Sun, 8 Aug 2021 20:10:42 -0700 Subject: [PATCH] Doodads: Electric Trapdoor and Resettable Box * New doodad: Electric Trapdoor. It is a horizontal version of the Electric Door. Opens while powered by a button or a switch and closes when it loses power. * The Box doodad will reset to its original location if it receives a power signal from a linked Button or Switch. So for box pushing puzzles you can add a reset button in case the boxes get stuck. * Refactored the Doodad build scripts into many Makefiles for easier iteration (don't need to compile ALL doodads to test one). Updates to the JavaScript API for doodads: * Self.MoveTo(Point) is now available to set the actor's position in world coordinates. --- dev-assets/doodads/azulian/Makefile | 18 +++ dev-assets/doodads/bird/Makefile | 14 ++ dev-assets/doodads/box/Makefile | 13 ++ dev-assets/doodads/box/box.js | 10 ++ dev-assets/doodads/boy/Makefile | 13 ++ dev-assets/doodads/build.sh | 152 ++---------------- dev-assets/doodads/buttons/Makefile | 19 +++ dev-assets/doodads/crumbly-floor/Makefile | 12 ++ dev-assets/doodads/doors/Makefile | 5 + dev-assets/doodads/doors/build.sh | 2 +- dev-assets/doodads/objects/Makefile | 13 ++ dev-assets/doodads/on-off/Makefile | 18 +++ dev-assets/doodads/switches/Makefile | 20 +++ dev-assets/doodads/trapdoors/Makefile | 32 ++++ .../doodads/trapdoors/electric-trapdoor.js | 60 +++++++ dev-assets/doodads/trapdoors/electric1.png | Bin 0 -> 941 bytes dev-assets/doodads/trapdoors/electric2.png | Bin 0 -> 1064 bytes dev-assets/doodads/trapdoors/electric3.png | Bin 0 -> 1269 bytes dev-assets/doodads/trapdoors/electric4.png | Bin 0 -> 972 bytes dev-assets/doodads/warp-door/Makefile | 26 +++ pkg/uix/scripting.go | 12 +- 21 files changed, 296 insertions(+), 143 deletions(-) create mode 100644 dev-assets/doodads/azulian/Makefile create mode 100644 dev-assets/doodads/bird/Makefile create mode 100644 dev-assets/doodads/box/Makefile create mode 100644 dev-assets/doodads/boy/Makefile create mode 100644 dev-assets/doodads/buttons/Makefile create mode 100644 dev-assets/doodads/crumbly-floor/Makefile create mode 100644 dev-assets/doodads/doors/Makefile create mode 100644 dev-assets/doodads/objects/Makefile create mode 100644 dev-assets/doodads/on-off/Makefile create mode 100644 dev-assets/doodads/switches/Makefile create mode 100644 dev-assets/doodads/trapdoors/Makefile create mode 100644 dev-assets/doodads/trapdoors/electric-trapdoor.js create mode 100644 dev-assets/doodads/trapdoors/electric1.png create mode 100644 dev-assets/doodads/trapdoors/electric2.png create mode 100644 dev-assets/doodads/trapdoors/electric3.png create mode 100644 dev-assets/doodads/trapdoors/electric4.png create mode 100644 dev-assets/doodads/warp-door/Makefile diff --git a/dev-assets/doodads/azulian/Makefile b/dev-assets/doodads/azulian/Makefile new file mode 100644 index 0000000..20e7aa5 --- /dev/null +++ b/dev-assets/doodads/azulian/Makefile @@ -0,0 +1,18 @@ +ALL: build + +.PHONY: build +build: + doodad convert -t "Blue Azulian" blu-front.png blu-back.png \ + blu-wr{1,2,3,4}.png blu-wl{1,2,3,4}.png azu-blu.doodad + doodad install-script azulian.js azu-blu.doodad + + doodad convert -t "Red Azulian" red-front.png red-back.png \ + red-wr{1,2,3,4}.png red-wl{1,2,3,4}.png azu-red.doodad + doodad install-script azulian-red.js azu-red.doodad + + # Tag the category for these doodads + for i in *.doodad; do\ + doodad edit-doodad --tag "category=creatures" $${i};\ + done + + cp *.doodad ../../../assets/doodads/ \ No newline at end of file diff --git a/dev-assets/doodads/bird/Makefile b/dev-assets/doodads/bird/Makefile new file mode 100644 index 0000000..e70fedc --- /dev/null +++ b/dev-assets/doodads/bird/Makefile @@ -0,0 +1,14 @@ +ALL: build + +.PHONY: build +build: + doodad convert -t "Bird (red)" left-1.png left-2.png right-1.png right-2.png \ + dive-left.png dive-right.png bird-red.doodad + doodad install-script bird.js bird-red.doodad + + # Tag the category for these doodads + for i in *.doodad; do\ + doodad edit-doodad --tag "category=creatures" $${i};\ + done + + cp *.doodad ../../../assets/doodads/ \ No newline at end of file diff --git a/dev-assets/doodads/box/Makefile b/dev-assets/doodads/box/Makefile new file mode 100644 index 0000000..ddbb2a1 --- /dev/null +++ b/dev-assets/doodads/box/Makefile @@ -0,0 +1,13 @@ +ALL: build + +.PHONY: build +build: + doodad convert -t "Box" box-1.png box-2.png \ + box-3.png box-4.png box.doodad + doodad install-script box.js box.doodad + + for i in *.doodad; do \ + doodad edit-doodad --tag "category=objects" $${i}; \ + done + + cp *.doodad ../../../assets/doodads/ \ No newline at end of file diff --git a/dev-assets/doodads/box/box.js b/dev-assets/doodads/box/box.js index b68d0bc..1c97439 100644 --- a/dev-assets/doodads/box/box.js +++ b/dev-assets/doodads/box/box.js @@ -38,6 +38,16 @@ function main() { Self.SetVelocity(Vector(0, 0)); }); + // 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)); + }); + // Start animation on a loop. animate(); } diff --git a/dev-assets/doodads/boy/Makefile b/dev-assets/doodads/boy/Makefile new file mode 100644 index 0000000..39d98a8 --- /dev/null +++ b/dev-assets/doodads/boy/Makefile @@ -0,0 +1,13 @@ +ALL: build + +.PHONY: build +build: + doodad convert -t "Boy" stand-right.png stand-left.png \ + walk-right-1.png walk-right-2.png walk-right-3.png \ + walk-left-1.png walk-left-2.png walk-left-3.png \ + boy.doodad + doodad install-script boy.js boy.doodad + + doodad edit-doodad --tag "category=creatures" boy.doodad + + cp *.doodad ../../../assets/doodads/ \ No newline at end of file diff --git a/dev-assets/doodads/build.sh b/dev-assets/doodads/build.sh index 4e20064..f434a94 100755 --- a/dev-assets/doodads/build.sh +++ b/dev-assets/doodads/build.sh @@ -10,191 +10,65 @@ mkdir -p ../../assets/doodads boy() { cd boy/ - - doodad convert -t "Boy" stand-right.png stand-left.png \ - walk-right-1.png walk-right-2.png walk-right-3.png \ - walk-left-1.png walk-left-2.png walk-left-3.png \ - boy.doodad - doodad install-script boy.js boy.doodad - - cp *.doodad ../../../assets/doodads/ + make cd .. } buttons() { cd buttons/ - - doodad convert -t "Sticky Button" sticky1.png sticky2.png button-sticky.doodad - doodad install-script sticky.js button-sticky.doodad - - doodad convert -t "Button" button1.png button2.png button.doodad - doodad install-script button.js button.doodad - - doodad convert -t "Button Type B" typeB1.png typeB2.png button-typeB.doodad - doodad install-script button.js button-typeB.doodad - - # Tag the category for these doodads - for i in *.doodad; do doodad edit-doodad --tag "category=gizmos" $i; done - - cp button*.doodad ../../../assets/doodads/ + make cd .. } switches() { cd switches/ - - doodad convert -t "Switch" switch-off.png switch-on.png switch.doodad - doodad convert -t "Floor Switch" down-off.png down-on.png switch-down.doodad - doodad convert -t "Left Switch" left-off.png left-on.png switch-left.doodad - doodad convert -t "Right Switch" right-off.png right-on.png switch-right.doodad - - doodad install-script switch.js switch.doodad - doodad install-script switch.js switch-down.doodad - doodad install-script switch.js switch-left.doodad - doodad install-script switch.js switch-right.doodad - - # Tag the category for these doodads - for i in *.doodad; do doodad edit-doodad --tag "category=gizmos" $i; done - - cp *.doodad ../../../assets/doodads/ + make cd .. } doors() { cd doors/ - ./build.sh + make cd .. } trapdoors() { cd trapdoors/ - - doodad convert -t "Trapdoor" down{1,2,3,4}.png trapdoor-down.doodad - doodad convert -t "Trapdoor Left" left{1,2,3,4}.png trapdoor-left.doodad - doodad convert -t "Trapdoor Right" right{1,2,3,4}.png trapdoor-right.doodad - doodad convert -t "Trapdoor Up" up{1,2,3,4}.png trapdoor-up.doodad - doodad install-script trapdoor.js trapdoor-down.doodad - doodad install-script trapdoor.js trapdoor-left.doodad - doodad install-script trapdoor.js trapdoor-right.doodad - doodad install-script trapdoor.js trapdoor-up.doodad - - doodad edit-doodad -q --tag direction=down trapdoor-down.doodad - doodad edit-doodad -q --tag direction=left trapdoor-left.doodad - doodad edit-doodad -q --tag direction=right trapdoor-right.doodad - doodad edit-doodad -q --tag direction=up trapdoor-up.doodad - - # Tag the category for these doodads - for i in *.doodad; do doodad edit-doodad --tag "category=doors" $i; done - - cp trapdoor-*.doodad ../../../assets/doodads/ - + make cd .. } azulians() { cd azulian/ - - doodad convert -t "Blue Azulian" blu-front.png blu-back.png \ - blu-wr{1,2,3,4}.png blu-wl{1,2,3,4}.png azu-blu.doodad - doodad install-script azulian.js azu-blu.doodad - - doodad convert -t "Red Azulian" red-front.png red-back.png \ - red-wr{1,2,3,4}.png red-wl{1,2,3,4}.png azu-red.doodad - doodad install-script azulian-red.js azu-red.doodad - - # Tag the category for these doodads - for i in *.doodad; do doodad edit-doodad --tag "category=creatures" $i; done - - cp azu-*.doodad ../../../assets/doodads/ - + make cd .. } mobs() { cd bird/ - - doodad convert -t "Bird (red)" left-1.png left-2.png right-1.png right-2.png \ - dive-left.png dive-right.png bird-red.doodad - doodad install-script bird.js bird-red.doodad - - # Tag the category for these doodads - for i in *.doodad; do doodad edit-doodad --tag "category=creatures" $i; done - - cp *.doodad ../../../assets/doodads/ + make cd .. } objects() { cd objects/ + make + cd .. - 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 - - for i in *.doodad; do doodad edit-doodad --tag "category=objects" $i; done - cp *.doodad ../../../assets/doodads/ - - cd ../crumbly-floor - - doodad convert -t "Crumbly Floor" floor.png shake1.png shake2.png \ - fall1.png fall2.png fall3.png fall4.png fallen.png \ - crumbly-floor.doodad - doodad install-script crumbly-floor.js crumbly-floor.doodad - for i in *.doodad; do doodad edit-doodad --tag "category=objects" $i; done - cp *.doodad ../../../assets/doodads/ - - cd ../box - - doodad convert -t "Box" box-1.png box-2.png box-3.png box-4.png box.doodad - doodad install-script box.js box.doodad - for i in *.doodad; do doodad edit-doodad --tag "category=objects" $i; done - cp *.doodad ../../../assets/doodads/ - + cd box/ + make cd .. } onoff() { cd on-off/ - - doodad convert -t "State Button" blue-button.png orange-button.png state-button.doodad - doodad install-script state-button.js state-button.doodad - - doodad convert -t "State Block (Blue)" blue-on.png blue-off.png state-block-blue.doodad - doodad install-script state-block-blue.js state-block-blue.doodad - - doodad convert -t "State Block (Orange)" orange-off.png orange-on.png state-block-orange.doodad - doodad install-script state-block-orange.js state-block-orange.doodad - - for i in *.doodad; do doodad edit-doodad --tag "category=gizmos" $i; done - - cp *.doodad ../../../assets/doodads/ - + make cd .. } warpdoor() { cd warp-door/ - - doodad convert -t "Warp Door" door-1.png door-2.png door-3.png door-4.png warp-door.doodad - doodad edit-doodad -q --tag color=none warp-door.doodad - doodad install-script warp-door.js warp-door.doodad - - doodad convert -t "Warp Door (Blue)" blue-1.png blue-2.png blue-3.png blue-4.png blue-off.png \ - warp-door-blue.doodad - doodad edit-doodad -q --tag color=blue warp-door-blue.doodad - doodad install-script warp-door.js warp-door-blue.doodad - - doodad convert -t "Warp Door (Orange)" orange-off.png orange-1.png orange-2.png orange-3.png orange-4.png \ - warp-door-orange.doodad - doodad edit-doodad -q --tag color=orange warp-door-orange.doodad - doodad install-script warp-door.js warp-door-orange.doodad - - for i in *.doodad; do doodad edit-doodad --tag "category=doors" $i; done - for i in warp-door-*.doodad; do doodad edit-doodad --tag "category=doors,gizmos" $i; done - - cp *.doodad ../../../assets/doodads/ - + make cd .. } diff --git a/dev-assets/doodads/buttons/Makefile b/dev-assets/doodads/buttons/Makefile new file mode 100644 index 0000000..bd82563 --- /dev/null +++ b/dev-assets/doodads/buttons/Makefile @@ -0,0 +1,19 @@ +ALL: build + +.PHONY: build +build: + doodad convert -t "Sticky Button" sticky1.png sticky2.png button-sticky.doodad + doodad install-script sticky.js button-sticky.doodad + + doodad convert -t "Button" button1.png button2.png button.doodad + doodad install-script button.js button.doodad + + doodad convert -t "Button Type B" typeB1.png typeB2.png button-typeB.doodad + doodad install-script button.js button-typeB.doodad + + # Tag the category for these doodads + for i in *.doodad; do\ + doodad edit-doodad --tag "category=gizmos" $${i};\ + done + + cp *.doodad ../../../assets/doodads/ \ No newline at end of file diff --git a/dev-assets/doodads/crumbly-floor/Makefile b/dev-assets/doodads/crumbly-floor/Makefile new file mode 100644 index 0000000..7fe4048 --- /dev/null +++ b/dev-assets/doodads/crumbly-floor/Makefile @@ -0,0 +1,12 @@ +ALL: build + +.PHONY: build +build: + doodad convert -t "Crumbly Floor" floor.png shake1.png shake2.png \ + fall1.png fall2.png fall3.png fall4.png fallen.png \ + crumbly-floor.doodad + doodad install-script crumbly-floor.js crumbly-floor.doodad + for i in *.doodad; do\ + doodad edit-doodad --tag "category=objects" $${i};\ + done + cp *.doodad ../../../assets/doodads/ \ No newline at end of file diff --git a/dev-assets/doodads/doors/Makefile b/dev-assets/doodads/doors/Makefile new file mode 100644 index 0000000..2c685ea --- /dev/null +++ b/dev-assets/doodads/doors/Makefile @@ -0,0 +1,5 @@ +ALL: build + +.PHONY: build +build: + ./build.sh \ No newline at end of file diff --git a/dev-assets/doodads/doors/build.sh b/dev-assets/doodads/doors/build.sh index 5f327d3..7615a8d 100755 --- a/dev-assets/doodads/doors/build.sh +++ b/dev-assets/doodads/doors/build.sh @@ -49,4 +49,4 @@ doodad install-script electric-door.js door-electric.doodad for i in *.doodad; do doodad edit-doodad --tag "category=doors" $i; done doodad edit-doodad --tag "category=doors,gizmos" door-electric.doodad -cp door-*.doodad key-*.doodad small-*.doodad ../../../assets/doodads/ +cp *.doodad ../../../assets/doodads/ diff --git a/dev-assets/doodads/objects/Makefile b/dev-assets/doodads/objects/Makefile new file mode 100644 index 0000000..0573bc1 --- /dev/null +++ b/dev-assets/doodads/objects/Makefile @@ -0,0 +1,13 @@ +ALL: build + +.PHONY: build +build: + 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 + + for i in *.doodad; do\ + doodad edit-doodad --tag "category=objects" $${i};\ + done + cp *.doodad ../../../assets/doodads/ \ No newline at end of file diff --git a/dev-assets/doodads/on-off/Makefile b/dev-assets/doodads/on-off/Makefile new file mode 100644 index 0000000..32eae08 --- /dev/null +++ b/dev-assets/doodads/on-off/Makefile @@ -0,0 +1,18 @@ +ALL: build + +.PHONY: build +build: + doodad convert -t "State Button" blue-button.png orange-button.png state-button.doodad + doodad install-script state-button.js state-button.doodad + + doodad convert -t "State Block (Blue)" blue-on.png blue-off.png state-block-blue.doodad + doodad install-script state-block-blue.js state-block-blue.doodad + + doodad convert -t "State Block (Orange)" orange-off.png orange-on.png state-block-orange.doodad + doodad install-script state-block-orange.js state-block-orange.doodad + + for i in *.doodad; do\ + doodad edit-doodad --tag "category=gizmos" $${i};\ + done + + cp *.doodad ../../../assets/doodads/ \ No newline at end of file diff --git a/dev-assets/doodads/switches/Makefile b/dev-assets/doodads/switches/Makefile new file mode 100644 index 0000000..b603c1f --- /dev/null +++ b/dev-assets/doodads/switches/Makefile @@ -0,0 +1,20 @@ +ALL: build + +.PHONY: build +build: + doodad convert -t "Switch" switch-off.png switch-on.png switch.doodad + doodad convert -t "Floor Switch" down-off.png down-on.png switch-down.doodad + doodad convert -t "Left Switch" left-off.png left-on.png switch-left.doodad + doodad convert -t "Right Switch" right-off.png right-on.png switch-right.doodad + + doodad install-script switch.js switch.doodad + doodad install-script switch.js switch-down.doodad + doodad install-script switch.js switch-left.doodad + doodad install-script switch.js switch-right.doodad + + # Tag the category for these doodads + for i in *.doodad; do\ + doodad edit-doodad --tag "category=gizmos" $${i};\ + done + + cp *.doodad ../../../assets/doodads/ \ No newline at end of file diff --git a/dev-assets/doodads/trapdoors/Makefile b/dev-assets/doodads/trapdoors/Makefile new file mode 100644 index 0000000..48a72b8 --- /dev/null +++ b/dev-assets/doodads/trapdoors/Makefile @@ -0,0 +1,32 @@ +ALL: build + +.PHONY: build +build: + # Build the four basic trapdoors. + doodad convert -t "Trapdoor" down{1,2,3,4}.png trapdoor-down.doodad + doodad convert -t "Trapdoor Left" left{1,2,3,4}.png trapdoor-left.doodad + doodad convert -t "Trapdoor Right" right{1,2,3,4}.png trapdoor-right.doodad + doodad convert -t "Trapdoor Up" up{1,2,3,4}.png trapdoor-up.doodad + doodad install-script trapdoor.js trapdoor-down.doodad + doodad install-script trapdoor.js trapdoor-left.doodad + doodad install-script trapdoor.js trapdoor-right.doodad + doodad install-script trapdoor.js trapdoor-up.doodad + + doodad edit-doodad -q --tag direction=down trapdoor-down.doodad + doodad edit-doodad -q --tag direction=left trapdoor-left.doodad + doodad edit-doodad -q --tag direction=right trapdoor-right.doodad + doodad edit-doodad -q --tag direction=up trapdoor-up.doodad + + # Tag the category for these doodads + ls -hal *.doodad + for i in *.doodad; do\ + echo $${i};\ + doodad edit-doodad -q --tag "category=doors" $${i};\ + done + + # Build the Electric Trapdoor. + doodad convert -t "Electric Trapdoor" electric{1,2,3,4}.png electric-trapdoor.doodad + doodad install-script electric-trapdoor.js electric-trapdoor.doodad + doodad edit-doodad -q --tag "category=doors,gizmos" electric-trapdoor.doodad + + cp *.doodad ../../../assets/doodads/ \ No newline at end of file diff --git a/dev-assets/doodads/trapdoors/electric-trapdoor.js b/dev-assets/doodads/trapdoors/electric-trapdoor.js new file mode 100644 index 0000000..2a33057 --- /dev/null +++ b/dev-assets/doodads/trapdoors/electric-trapdoor.js @@ -0,0 +1,60 @@ +// Electric Trapdoor + +var animationSpeed = 100, + spriteWidth = 114, + thickness = 7, + isOpen = false, + animating = false, + powerState = false; + +function main() { + Self.SetHitbox(0, 2, spriteWidth, thickness); + + Self.AddAnimation("open", animationSpeed, [0, 1, 2, 3]); + Self.AddAnimation("close", animationSpeed, [3, 2, 1, 0]); + + // Subscribe to Switches and other power sources. Note: if a + // switch toggles us, we ignore the immediately following + // power signal which will be coming from the same switch. + // The electric trapdoor always toggles when hit by a switch. + var ignoreNextPower = false; + Message.Subscribe("switch:toggle", function (powered) { + ignoreNextPower = true + setPoweredState(!powerState); + }); + Message.Subscribe("power", function (powered) { + if (ignoreNextPower) { + ignoreNextPower = false; + return; + } + setPoweredState(powered); + }); + + Events.OnCollide(function (e) { + if (e.InHitbox && !isOpen) { + return false; + } + }) +} + +function setPoweredState(powered) { + powerState = powered; + + if (powered) { + if (animating || isOpen) { + return; + } + + animating = true; + Self.PlayAnimation("open", function () { + isOpen = true; + animating = false; + }); + } else { + animating = true; + Self.PlayAnimation("close", function () { + isOpen = false; + animating = false; + }); + } +} diff --git a/dev-assets/doodads/trapdoors/electric1.png b/dev-assets/doodads/trapdoors/electric1.png new file mode 100644 index 0000000000000000000000000000000000000000..bc9138f8ff52f06a04dd637da369789f40e9e306 GIT binary patch literal 941 zcmeAS@N?(olHy`uVBq!ia0vp^MIg+<1|<9Mw$?H*Ft%hmI|q0=J1Z0v<)>xlq%tsQ zOst(~>v7mYqV4`NukH|;9)(8}7FtCLh!$Sa5?Sc9LNuz>VCNV9Stcr)dVNjV2M^9a zx~jQ*^E$qDO$tAlA3b}v=lEWK=I(JMt zxz1~0cuOXqgNsMvHcR!>o-sK z=c4C)EtF zoKb(db(@$i)30rf-LJPTd&fB4`oM$9DU%yo?Fy1 zT)MLQ32#9GM~|3B_1))pAD-LyH~R9c`}{nYit0+mFSP-qg)Pb3-G$*l2rk&Wd@@jk zv%n*=n1O*?7=#%aX3dcR3bL1Y`ns||<=_w#=W0s%_!TH5S>hT|;+&tGo0?a`;9QiN zSdyBeP@Y+mq2TW68xY>eCk~A6R!oWr<*PGom{~Nobck`zo5o`bZeOekdzt-#1 zW~+$Bz3U&Xv6-df?^zcTpY!F&?(Jt*WQxUpchyw&y!8F=J;AcwcMt!$T_|(;du?0d z35!1dsaMK&pVh3qVq0X%xBrdF?D9D7jd@G9<>trPtDmX1`)+w=tIexFX2+e@WS?HW z9CZ$-QTqtk1Vy2I=v1^>bP0l+XkKgPowq literal 0 HcmV?d00001 diff --git a/dev-assets/doodads/trapdoors/electric2.png b/dev-assets/doodads/trapdoors/electric2.png new file mode 100644 index 0000000000000000000000000000000000000000..139d9c8f9fc931bc6c6c39da0b85a6c6da73eb9f GIT binary patch literal 1064 zcmeAS@N?(olHy`uVBq!ia0vp^MIg+<1|<9Mw$?H*Ft%hmI|q0=J1Z0v<)>xlq%tsQ zOst(~>v7mYqV4`NukH|;9)(8}7FtCLh!$Sa5?Sc9LNuz>VCNV9Stcr)dVNjV2M^9a zx~jQ*^E$qDO$tAlA3b}v=lEWK=I(JMt zxz1~0cuOXqgNsMvHcR!>o-sK z=c4C)EtF zoKb(db(@$i)30rf-LJPTd&fB4`oM$9DU%yo?Fy1 zT)MLQ32#9GM~|3B_1))pAD-LyH~R9c`}{nYit0+mFSP-qg)Pb3-G$*l2rk&Wd@@jk zv%n*=n1O*?7=#%aX3dcR3bL1Y`ns||<=_w#=WFFOeFGGdEOCt}an8@pP0cG|a4t$s zEJ;mKD9u0?LTWZbX zSvE;COMWh$sy{m|{zB!}$~!DOzo;heOMjJf^0CSFsnNgo@hi3z?2OTAnI{sr?qzyx z^mbwY=-`~2t(RrRti@k3Kb&f+cR1#h^7UW$Z*{$>v8%6Mf9Ie@U!u(M2|--7_n$ZK z_WL*Eit=@hrC&mKua#Q=bYgbRcT1!GWrZ@%*Gm_^-ZiVa%j*69nDsIHcUEnkr<`w> z5wZ22Oo(Rtte{`N{_y+kzrM3^UUuNMl`?-))wewne9o8hbeHP2z8%N>Y_m38U;6cM z*z?eH5mzgZ9NTTVF;(Rm^9(l2+Px-A-`HHa$++js?oY21C6*Znzs+BJE?M_P_4}=M zS5{i{mKHDlnehB7%gvJYre-A%pJ~jTC%l|B!g~3;7n_!?{H%4Z^1DoRsa&D{;wtsI zzt)|rzVWiv@!i(o?-wf1Yrl&-Z*PBPW&7Jbwk1ziTbt^!Ry;X(yV%`sZ?HZ0zFlk1 z-?oW*E^ByV_qyQd!!;kQ{3qD&+_Z-0^R7=XUKEsC{`z}v?ej|Aa$mmK?)xQ=Z+#8` d#y(LXs)k{?OUYb|{;md)dQVqBmvv4FO#n|uEX>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

BC7ZQ;OX`=uD02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00PZPL_t(|+U?w3Zlf>|!0|Cft4e+7VaS=xnVdW2E`8js zw97th$U4Y;80;~S|4*tKHHEY@o?&pRiu_l}v+n+ZGNSTPdyjvM$cOj1_d`U!y^|SY ztRgxe?_RdMLH5VKhJ04#!wgFI!CEUKBG>D6_(D{qj;MT?(82vdJ?~(WSRk28@?qu< zBANS2;#fY6U&8)Dp;8`{H3`k!Qe*N_O`Y*_xe(SJnaW3BRi7gAMQh!S=zLVe`;ov@ zL=wxi*VXxWx>vE*cGlW1a1ZlAoYj&Um5;Z%8&Kz5$A*BKx0%=nHv}sAxBc_(m1^ae ztaI+^Gwn6IM?Rc$(si95dq4grbdCJwJ@IGk749dbBJ=y%C(oG4x_LZV&wNuSB67Rk z2(2r*vEW{xkQ?_ZHKD@O8S`JbFi$(E?FVIB`3%F zYK)EblGggDO6Xf!FxA=@;999ujZ2x>7aC4ewAge>+!EVW6&W*4K_|8`i40D#wAi#Q zHD*%v)oWG^8wB~PacykP))mCWK%2l#cWwgOt57q)ua{41Y2%WO_4|@*d0u& zDO&5~P6RDhKWPd^K)WZ#>?#ZTtA)*eIA6dgnjIr6@&3KDAi> zl3>0X{V6roJdwP$@|Of_wJw^@m{f1sXNc6Tl?hgH zQdPS~zW6?Da6k1Z*GR6Fg<_yOwZ2eQX4{I>P9z)Z0XaKTt?>)^Q=4;6+O|FOzd{SX z^MBNe9GzfaN$yFt$Tjjs_Fz>fRgI~2^1^@O>9yFj&R*+*Cspl=9J}Q>TSaz(TP?Nj zQ=e?Xlw@WWE)HCwB=n5!761SM0000000000000000000000000000000000000000 f000000Mz^iv5k(`f8Ien00000NkvXXu0mjfA+Jc# literal 0 HcmV?d00001 diff --git a/dev-assets/doodads/trapdoors/electric4.png b/dev-assets/doodads/trapdoors/electric4.png new file mode 100644 index 0000000000000000000000000000000000000000..97b9bac24a5e7ce2916ab05df6afb02365ce6b69 GIT binary patch literal 972 zcmeAS@N?(olHy`uVBq!ia0vp^MIg+<1|<9Mw$?H*Ft%hmI|q0=J1Z0v<)>xlq%tsQ zOst(~>v7mYqV4`NukH|;9)(8}7FtCLh!$Sa5?Sc9LNuz>VCNV9Stcr)dVNjV2M^9a zx~jQ*^E$qDO$tAlA3b}v=lEWK=I(JMt zxz1~0cuOXqgNsMvHcR!>o-sK z=c4C)EtF zoKb(db(@$i)30rf-LJPTd&fB4`oM$9DU%yo?Fy1 zT)MLQ32#9GM~|3B_1))pAD-LyH~R9c`}{nYit0+mFSP-qg)Pb3-G$*l2rk&Wd@@jk zv%n*=n1O*?7=#%aX3dcR3bL1Y`ns||<=_w#7k`*ER|hC0S>hT|;+&tGo0?a`;9QiN zSdyBeP@Y+mq2TW68xY>eCk~A6C7v#hAr-gY-np3DY#_oK&~xL&nJ04(`OWP7H$^NX zY4!@!C06dML?-Q$-)FO9MUc~W)Ae!fXR5aZ&OILR(|t$S3VRzKqorFc=Pf&FHgAPm z{|5i6{TiEZq;5O-b!4 zxZ@IUBb?p8?aNY1?)mq-aMG>4>-i>qZu&FTJG-aQ_|X>Ljb-nr%B~d!!qDuiQCq`+ zlq(Q|nIKV7$E>v(Kp3_9+N!OKz%UEM=>kKDP}bU0eb-Lyj*Vii{3vj|aLukgT%R5( zmc@!M%hYPSdEM@K#`;`c#X7mROW!Z1Hpk58Ty5N9=JfE#2Fs-;<@+pu#tSF`V+<>( Z`OOfMbG-G|#7Jq7yr-+5%Q~loCICOJy7T}5 literal 0 HcmV?d00001 diff --git a/dev-assets/doodads/warp-door/Makefile b/dev-assets/doodads/warp-door/Makefile new file mode 100644 index 0000000..a4842e1 --- /dev/null +++ b/dev-assets/doodads/warp-door/Makefile @@ -0,0 +1,26 @@ +ALL: build + +.PHONY: build +build: + doodad convert -t "Warp Door" door-1.png door-2.png door-3.png door-4.png warp-door.doodad + doodad edit-doodad -q --tag color=none warp-door.doodad + doodad install-script warp-door.js warp-door.doodad + + doodad convert -t "Warp Door (Blue)" blue-1.png blue-2.png blue-3.png blue-4.png blue-off.png \ + warp-door-blue.doodad + doodad edit-doodad -q --tag color=blue warp-door-blue.doodad + doodad install-script warp-door.js warp-door-blue.doodad + + doodad convert -t "Warp Door (Orange)" orange-off.png orange-1.png orange-2.png orange-3.png orange-4.png \ + warp-door-orange.doodad + doodad edit-doodad -q --tag color=orange warp-door-orange.doodad + doodad install-script warp-door.js warp-door-orange.doodad + + for i in *.doodad; do\ + doodad edit-doodad --tag "category=doors" $${i};\ + done + for i in warp-door-*.doodad; do\ + doodad edit-doodad --tag "category=doors,gizmos" $${i};\ + done + + cp *.doodad ../../../assets/doodads/ \ No newline at end of file diff --git a/pkg/uix/scripting.go b/pkg/uix/scripting.go index 81096b5..0f4a012 100644 --- a/pkg/uix/scripting.go +++ b/pkg/uix/scripting.go @@ -1,5 +1,7 @@ package uix +import "git.kirsle.net/go/render" + // Functions relating to the Doodad JavaScript API for Canvas Actors. // MakeSelfAPI generates the `Self` object for the scripting API in @@ -10,9 +12,13 @@ func (w *Canvas) MakeSelfAPI(actor *Actor) map[string]interface{} { "Title": actor.Doodad().Title, // functions - "ID": actor.ID, - "GetTag": actor.Doodad().Tag, - "Position": actor.Position, + "ID": actor.ID, + "GetTag": actor.Doodad().Tag, + "Position": actor.Position, + "MoveTo": func(p render.Point) { + actor.MoveTo(p) + actor.SetGrounded(false) + }, "SetHitbox": actor.SetHitbox, "SetVelocity": actor.SetVelocity, "SetMobile": actor.SetMobile,