diff --git a/dev-assets/doodads/azulian/Makefile b/dev-assets/doodads/azulian/Makefile deleted file mode 100644 index d9e4930..0000000 --- a/dev-assets/doodads/azulian/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -SHELL = /bin/bash - -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 edit-doodad --tag "color=blue" 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 edit-doodad --tag "color=red" azu-red.doodad - doodad install-script azulian.js azu-red.doodad - - doodad convert -t "White Azulian" white-front.png white-back.png \ - white-wr{1,2,3,4}.png white-wl{1,2,3,4}.png azu-white.doodad - doodad edit-doodad --tag "color=white" azu-white.doodad - doodad install-script azulian.js azu-white.doodad - - # Tag the category for these doodads - for i in *.doodad; do\ - doodad edit-doodad --tag "category=creatures" $${i};\ - done - - cp *.doodad ../../../assets/doodads/ diff --git a/dev-assets/doodads/azulian/azulian.js b/dev-assets/doodads/azulian/azulian.js deleted file mode 100644 index 73e0943..0000000 --- a/dev-assets/doodads/azulian/azulian.js +++ /dev/null @@ -1,178 +0,0 @@ -// Azulian (Red and Blue) - -const color = Self.GetTag("color"); -var playerSpeed = color === 'blue' ? 2 : 4, - swimSpeed = playerSpeed * 0.4, - aggroX = 250, // X/Y distance sensitivity from player - aggroY = color === 'blue' ? 100 : 200, - jumpSpeed = color === 'blue' ? 14 : 18, - swimJumpSpeed = jumpSpeed * 0.4, - animating = false, - direction = "right", - lastDirection = "right"; - -// white Azulian is faster yet than the red -if (color === 'white') { - aggroX = 1000; - aggroY = 400; - playerSpeed = 8; - swimSpeed = playerSpeed * 0.4; - jumpSpeed = 20; - swimJumpSpeed = jumpSpeed * 0.4; -} - -function setupAnimations(color) { - let left = color === 'blue' ? 'blu-wl' : color + '-wl', - right = color === 'blue' ? 'blu-wr' : color + '-wr', - leftFrames = [left + '1', left + '2', left + '3', left + '4'], - rightFrames = [right + '1', right + '2', right + '3', right + '4']; - - Self.AddAnimation("walk-left", 100, leftFrames); - Self.AddAnimation("walk-right", 100, rightFrames); -} - -function main() { - playerSpeed = color === 'blue' ? 2 : 4; - - let swimJumpCooldownTick = 0, // minimum Game Tick before we can jump while swimming - swimJumpCooldown = 10; // CONFIG: delta of ticks between jumps while swimming - - Self.SetMobile(true); - Self.SetGravity(true); - Self.SetInventory(true); - Self.SetHitbox(0, 0, 24, 32); - setupAnimations(color); - - if (Self.IsPlayer()) { - return playerControls(); - } - - // A.I. pattern: walks back and forth, turning around - // when it meets resistance. - - // Sample our X position every few frames and detect if we've hit a solid wall. - let sampleTick = 0; - let sampleRate = 5; - let lastSampledX = 0; - - // Get the player on touch. - Events.OnCollide((e) => { - // If we're diving and we hit the player, game over! - // Azulians are friendly to Thieves though! - if (e.Settled && isPlayerFood(e.Actor)) { - FailLevel("Watch out for the Azulians!"); - return; - } - }); - - setInterval(() => { - // If the player is nearby, walk towards them. Otherwise, default pattern - // is to walk back and forth. - let player = Actors.FindPlayer(), - followPlayer = false, - jump = false; - - // Don't follow boring players. - if (player !== null && isPlayerFood(player)) { - let playerPt = player.Position(), - myPt = Self.Position(); - - // If the player is within aggro range, move towards. - if ((Math.abs(playerPt.X - myPt.X) < aggroX && Math.abs(playerPt.Y - myPt.Y) < aggroY) - || (Level.Difficulty > 0)) { - direction = playerPt.X < myPt.X ? "left" : "right"; - followPlayer = true; - - if (playerPt.Y + player.Size().H < myPt.Y + Self.Size().H) { - jump = true; - } - } - } - - // Default AI: sample position so we turn around on obstacles. - if (!followPlayer) { - if (sampleTick % sampleRate === 0) { - let curX = Self.Position().X; - let delta = Math.abs(curX - lastSampledX); - if (delta < 5) { - direction = direction === "right" ? "left" : "right"; - } - lastSampledX = curX; - } - sampleTick++; - } - - // Handle being underwater. - let canJump = Self.Grounded(); - if (Self.IsWet()) { - let tick = GetTick(); - if (tick > swimJumpCooldownTick) { - canJump = true; - swimJumpCooldownTick = tick + swimJumpCooldown; - } - } - - // How speedy would our movement and jump be? - let xspeed = playerSpeed, yspeed = jumpSpeed; - if (Self.IsWet()) { - xspeed = swimSpeed; - yspeed = swimJumpSpeed; - } - - let Vx = parseFloat(xspeed * (direction === "left" ? -1 : 1)), - Vy = jump && canJump ? parseFloat(-yspeed) : Self.GetVelocity().Y; - Self.SetVelocity(Vector(Vx, Vy)); - - // If we changed directions, stop animating now so we can - // turn around quickly without moonwalking. - if (direction !== lastDirection) { - Self.StopAnimation(); - } - - if (!Self.IsAnimating()) { - Self.PlayAnimation("walk-" + direction, null); - } - - lastDirection = direction; - }, 10); -} - -function playerControls() { - // Note: player speed is controlled by the engine. - Events.OnKeypress((ev) => { - if (ev.Right) { - if (!Self.IsAnimating()) { - Self.PlayAnimation("walk-right", null); - } - } else if (ev.Left) { - if (!Self.IsAnimating()) { - Self.PlayAnimation("walk-left", null); - } - } else { - Self.StopAnimation(); - animating = false; - } - }) -} - -// Logic to decide if the player is interesting to the Azulian (aka, if the Azulian -// will be hostile towards the player). Boring players will not be chased after and -// the Azulian will not harm them if they make contact. -function isPlayerFood(actor) { - // Not a player or is invulnerable, or Peaceful difficulty. - if (!actor.IsPlayer() || actor.Invulnerable() || Level.Difficulty < 0) { - return false; - } - - // On hard mode they are hostile to any player. - if (Level.Difficulty > 0) { - return true; - } - - // Azulians are friendly to Thieves and other Azulians. - if (actor.Doodad().Filename === "thief.doodad" || actor.Doodad().Title.indexOf("Azulian") > -1) { - return false; - } - - return true; -} diff --git a/dev-assets/doodads/azulian/blu-back.png b/dev-assets/doodads/azulian/blu-back.png deleted file mode 100644 index 066eaa1..0000000 Binary files a/dev-assets/doodads/azulian/blu-back.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/blu-front.png b/dev-assets/doodads/azulian/blu-front.png deleted file mode 100644 index 8f22c99..0000000 Binary files a/dev-assets/doodads/azulian/blu-front.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/blu-wl1.png b/dev-assets/doodads/azulian/blu-wl1.png deleted file mode 100644 index a97706b..0000000 Binary files a/dev-assets/doodads/azulian/blu-wl1.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/blu-wl2.png b/dev-assets/doodads/azulian/blu-wl2.png deleted file mode 100644 index aabb1fd..0000000 Binary files a/dev-assets/doodads/azulian/blu-wl2.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/blu-wl3.png b/dev-assets/doodads/azulian/blu-wl3.png deleted file mode 100644 index 428e733..0000000 Binary files a/dev-assets/doodads/azulian/blu-wl3.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/blu-wl4.png b/dev-assets/doodads/azulian/blu-wl4.png deleted file mode 100644 index 05079b3..0000000 Binary files a/dev-assets/doodads/azulian/blu-wl4.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/blu-wr1.png b/dev-assets/doodads/azulian/blu-wr1.png deleted file mode 100644 index f4e1945..0000000 Binary files a/dev-assets/doodads/azulian/blu-wr1.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/blu-wr2.png b/dev-assets/doodads/azulian/blu-wr2.png deleted file mode 100644 index 3044546..0000000 Binary files a/dev-assets/doodads/azulian/blu-wr2.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/blu-wr3.png b/dev-assets/doodads/azulian/blu-wr3.png deleted file mode 100644 index 5581c13..0000000 Binary files a/dev-assets/doodads/azulian/blu-wr3.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/blu-wr4.png b/dev-assets/doodads/azulian/blu-wr4.png deleted file mode 100644 index 4f43114..0000000 Binary files a/dev-assets/doodads/azulian/blu-wr4.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/red-back.png b/dev-assets/doodads/azulian/red-back.png deleted file mode 100644 index 2f5d2ef..0000000 Binary files a/dev-assets/doodads/azulian/red-back.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/red-front.png b/dev-assets/doodads/azulian/red-front.png deleted file mode 100644 index 8e7b797..0000000 Binary files a/dev-assets/doodads/azulian/red-front.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/red-wl1.png b/dev-assets/doodads/azulian/red-wl1.png deleted file mode 100644 index a05f987..0000000 Binary files a/dev-assets/doodads/azulian/red-wl1.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/red-wl2.png b/dev-assets/doodads/azulian/red-wl2.png deleted file mode 100644 index a4f7468..0000000 Binary files a/dev-assets/doodads/azulian/red-wl2.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/red-wl3.png b/dev-assets/doodads/azulian/red-wl3.png deleted file mode 100644 index 00c776d..0000000 Binary files a/dev-assets/doodads/azulian/red-wl3.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/red-wl4.png b/dev-assets/doodads/azulian/red-wl4.png deleted file mode 100644 index 9b0c599..0000000 Binary files a/dev-assets/doodads/azulian/red-wl4.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/red-wr1.png b/dev-assets/doodads/azulian/red-wr1.png deleted file mode 100644 index dfcfffe..0000000 Binary files a/dev-assets/doodads/azulian/red-wr1.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/red-wr2.png b/dev-assets/doodads/azulian/red-wr2.png deleted file mode 100644 index a79f3a3..0000000 Binary files a/dev-assets/doodads/azulian/red-wr2.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/red-wr3.png b/dev-assets/doodads/azulian/red-wr3.png deleted file mode 100644 index 5e79c36..0000000 Binary files a/dev-assets/doodads/azulian/red-wr3.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/red-wr4.png b/dev-assets/doodads/azulian/red-wr4.png deleted file mode 100644 index 219ec34..0000000 Binary files a/dev-assets/doodads/azulian/red-wr4.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/white-back.png b/dev-assets/doodads/azulian/white-back.png deleted file mode 100644 index 12f0a74..0000000 Binary files a/dev-assets/doodads/azulian/white-back.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/white-front.png b/dev-assets/doodads/azulian/white-front.png deleted file mode 100644 index b2ffece..0000000 Binary files a/dev-assets/doodads/azulian/white-front.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/white-wl1.png b/dev-assets/doodads/azulian/white-wl1.png deleted file mode 100644 index 9f98a1f..0000000 Binary files a/dev-assets/doodads/azulian/white-wl1.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/white-wl2.png b/dev-assets/doodads/azulian/white-wl2.png deleted file mode 100644 index ec900ce..0000000 Binary files a/dev-assets/doodads/azulian/white-wl2.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/white-wl3.png b/dev-assets/doodads/azulian/white-wl3.png deleted file mode 100644 index a87537f..0000000 Binary files a/dev-assets/doodads/azulian/white-wl3.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/white-wl4.png b/dev-assets/doodads/azulian/white-wl4.png deleted file mode 100644 index 7401607..0000000 Binary files a/dev-assets/doodads/azulian/white-wl4.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/white-wr1.png b/dev-assets/doodads/azulian/white-wr1.png deleted file mode 100644 index d9c26d1..0000000 Binary files a/dev-assets/doodads/azulian/white-wr1.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/white-wr2.png b/dev-assets/doodads/azulian/white-wr2.png deleted file mode 100644 index 1a1a566..0000000 Binary files a/dev-assets/doodads/azulian/white-wr2.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/white-wr3.png b/dev-assets/doodads/azulian/white-wr3.png deleted file mode 100644 index 7eeb34d..0000000 Binary files a/dev-assets/doodads/azulian/white-wr3.png and /dev/null differ diff --git a/dev-assets/doodads/azulian/white-wr4.png b/dev-assets/doodads/azulian/white-wr4.png deleted file mode 100644 index ee29adb..0000000 Binary files a/dev-assets/doodads/azulian/white-wr4.png and /dev/null differ diff --git a/dev-assets/doodads/bird/Makefile b/dev-assets/doodads/bird/Makefile deleted file mode 100644 index d0ff88d..0000000 --- a/dev-assets/doodads/bird/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -ALL: build - -.PHONY: build -build: - doodad convert -t "Bird (red)" red/left-1.png red/left-2.png red/right-1.png \ - red/right-2.png red/dive-left.png red/dive-right.png \ - bird-red.doodad - doodad install-script bird.js bird-red.doodad - doodad edit-doodad --tag "color=red" bird-red.doodad - - doodad convert -t "Bird (blue)" blue/left-1.png blue/left-2.png blue/right-1.png \ - blue/right-2.png blue/dive-left.png blue/dive-right.png \ - bird-blue.doodad - doodad install-script bird.js bird-blue.doodad - doodad edit-doodad --tag "color=blue" bird-blue.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/bird.js b/dev-assets/doodads/bird/bird.js deleted file mode 100644 index 9a236d8..0000000 --- a/dev-assets/doodads/bird/bird.js +++ /dev/null @@ -1,274 +0,0 @@ -// Bird (red and blue) - -/* -Base A.I. behaviors (red bird) are: - -- Tries to maintain original altitude in level and flies left/right. -- Divebombs the player to attack, then climbs back to its original - altitude when it hits a floor/wall. - -Blue bird: - -- Flies in a sine wave pattern (its target altitude fluctuates - around the bird's original placement on the level). -- Longer aggro radius to dive. -*/ - -let speed = 4, - Vx = Vy = 0, - color = Self.GetTag("color"), // informs our A.I. behaviors - searchStep = 12 // pixels to step while searching for a player - searchLimit = color === "blue" ? 24 : 12, // multiples of searchStep for aggro radius - altitude = Self.Position().Y, // original height in level - targetAltitude = altitude; // bird's target height to maintain - -let direction = "left", - lastDirection = "left"; -let states = { - flying: 0, - diving: 1, -}; -let state = states.flying; - -function main() { - Self.SetMobile(true); - Self.SetGravity(false); - Self.SetHitbox(0, 0, 46, 32); - Self.AddAnimation("fly-left", 100, ["left-1", "left-2"]); - Self.AddAnimation("fly-right", 100, ["right-1", "right-2"]); - - // Player Character controls? - if (Self.IsPlayer()) { - return player(); - } - - Events.OnCollide((e) => { - // If we're diving and we hit the player, game over! - if (e.Settled && state === states.diving && e.Actor.IsPlayer()) { - FailLevel("Watch out for birds!"); - return; - } - - if (e.Actor.IsMobile() && e.Actor.HasGravity() && e.InHitbox) { - return false; - } - }); - - // Sample our X position every few frames and detect if we've hit a solid wall. - let sampleTick = 0, - sampleRate = 2, - lastSampled = Point(0, 0); - - setInterval(() => { - // Run blue bird A.I. if we are blue: moves our target altitude along a sine wave. - if (color === "blue") { - AI_BlueBird(); - } - - // Sample how far we've moved to detect hitting a wall. - if (sampleTick % sampleRate === 0) { - let curP = Self.Position() - let delta = Math.abs(curP.X - lastSampled.X); - if (delta < 5) { - direction = direction === "right" ? "left" : "right"; - } - - // If we were diving, check Y delta too for if we hit floor - if (state === states.diving && Math.abs(curP.Y - lastSampled.Y) < 5) { - state = states.flying; - } - lastSampled = curP - } - sampleTick++; - - // Are we diving? - if (state === states.diving) { - Vy = speed - } else { - // If we are not flying at our original altitude, correct for that. - let curV = Self.Position(); - Vy = 0.0; - if (curV.Y != targetAltitude) { - Vy = curV.Y < targetAltitude ? 1 : -1; - } - - // Scan for the player character and dive. - try { - AI_ScanForPlayer() - } catch (e) { - console.error("Error in AI_ScanForPlayer: %s", e); - } - } - - // TODO: Vector() requires floats, pain in the butt for JS, - // the JS API should be friendlier and custom... - let Vx = parseFloat(speed * (direction === "left" ? -1 : 1)); - Self.SetVelocity(Vector(Vx, Vy)); - - // If diving, exit - don't edit animation. - if (state === states.diving) { - Self.ShowLayerNamed("dive-" + direction); - lastDirection = direction; - return; - } - - // If we changed directions, stop animating now so we can - // turn around quickly without moonwalking. - if (direction !== lastDirection) { - Self.StopAnimation(); - } - - if (!Self.IsAnimating()) { - Self.PlayAnimation("fly-" + direction, null); - } - - lastDirection = direction; - }, 100); -} - -// A.I. subroutine: scan for the player character. -// The bird scans in a 45 degree angle downwards, if the -// player is seen nearby in that scan it will begin a dive. -// It's not hostile towards characters that can fly (having -// no gravity). -function AI_ScanForPlayer() { - // If Peaceful difficulty, do not attack. - if (Level.Difficulty < 0) { - return - } - - let stepY = searchStep, // number of pixels to skip - stepX = stepY, - limit = stepX * searchLimit, // furthest we'll scan - scanX = scanY = 0, - size = Self.Size(), - fromPoint = Self.Position(); - - // From what point do we begin the scan? - if (direction === 'left') { - stepX = -stepX; - fromPoint.Y += size.H; - } else { - fromPoint.Y += size.H; - fromPoint.X += size.W; - } - - scanX = fromPoint.X; - scanY = fromPoint.Y; - - for (let i = 0; i < limit; i += stepY) { - scanX += stepX; - scanY += stepY; - for (let actor of Actors.At(Point(scanX, scanY))) { - if (actor.IsPlayer() && actor.HasGravity()) { - state = states.diving; - return; - } - } - } - - return; -} - -// Sine wave controls for the Blue bird. -var sineLimit = 32, - sineCounter = 0, - sineDirection = 1, - sineFrequency = 5, // every 500ms - sineStep = 16; - -// A.I. Subroutine: sine wave pattern (Blue bird). -function AI_BlueBird() { - // The main loop runs on a 100ms interval, control how frequently - // to adjust the bird's target velocity. - if (sineCounter > 0 && (sineCounter % sineFrequency) > 1) { - sineCounter++; - return; - } - sineCounter++; - - targetAltitude += sineStep*sineDirection; - - // Cap the distance between our starting altitude and sine-wave target. - if (targetAltitude < altitude && altitude - targetAltitude >= sineLimit) { - targetAltitude = altitude - sineLimit; - sineDirection = 1 - } else if (targetAltitude > altitude && targetAltitude - altitude >= sineLimit) { - targetAltitude = altitude + sineLimit; - sineDirection = -1 - } -} - -// If under control of the player character. -function player() { - let playerSpeed = 12, - diving = false, - falling = false; - - // The player can dive by moving downwards and laterally, but - // de-cheese their ability to just sweep across the ground; if - // they aren't seen to be moving downwards, cancel the dive. - let lastPoint = Self.Position(); - setInterval(() => { - let nowAt = Self.Position(); - if (nowAt.Y > lastPoint.Y) { - falling = true; - } else { - falling = false; - } - lastPoint = nowAt; - }, 100); - - Events.OnKeypress((ev) => { - Vx = 0; - Vy = 0; - - if (ev.Right) { - direction = "right"; - } else if (ev.Left) { - direction = "left"; - } - - // Dive! - if (ev.Down && ev.Right && falling) { - Self.StopAnimation(); - Self.ShowLayerNamed("dive-right"); - diving = falling; - } else if (ev.Down && ev.Left && falling) { - Self.StopAnimation(); - Self.ShowLayerNamed("dive-left"); - diving = falling; - } else if (ev.Right) { - // Fly right. - if (!Self.IsAnimating()) { - Self.PlayAnimation("fly-right", null); - } - Vx = playerSpeed; - diving = false; - } else if (ev.Left) { - // Fly left. - if (!Self.IsAnimating()) { - Self.PlayAnimation("fly-left", null); - } - Vx = -playerSpeed; - diving = false; - } else { - // Hover in place. - if (!Self.IsAnimating()) { - Self.PlayAnimation("fly-" + direction); - } - diving = false; - } - - // Player is invulnerable while diving. - Self.SetInvulnerable(diving); - }); - - Events.OnCollide((e) => { - // If the player is diving at an enemy mob, destroy it. - if (diving && e.Settled && e.Actor.IsMobile() && !e.Actor.Invulnerable()) { - Sound.Play("crumbly-break.wav"); - e.Actor.Destroy(); - } - }); -} diff --git a/dev-assets/doodads/bird/blue/dive-left.png b/dev-assets/doodads/bird/blue/dive-left.png deleted file mode 100644 index 1c2f7b7..0000000 Binary files a/dev-assets/doodads/bird/blue/dive-left.png and /dev/null differ diff --git a/dev-assets/doodads/bird/blue/dive-right.png b/dev-assets/doodads/bird/blue/dive-right.png deleted file mode 100644 index 04f0992..0000000 Binary files a/dev-assets/doodads/bird/blue/dive-right.png and /dev/null differ diff --git a/dev-assets/doodads/bird/blue/left-1.png b/dev-assets/doodads/bird/blue/left-1.png deleted file mode 100644 index e988064..0000000 Binary files a/dev-assets/doodads/bird/blue/left-1.png and /dev/null differ diff --git a/dev-assets/doodads/bird/blue/left-2.png b/dev-assets/doodads/bird/blue/left-2.png deleted file mode 100644 index f4e6fb5..0000000 Binary files a/dev-assets/doodads/bird/blue/left-2.png and /dev/null differ diff --git a/dev-assets/doodads/bird/blue/right-1.png b/dev-assets/doodads/bird/blue/right-1.png deleted file mode 100644 index 7c63982..0000000 Binary files a/dev-assets/doodads/bird/blue/right-1.png and /dev/null differ diff --git a/dev-assets/doodads/bird/blue/right-2.png b/dev-assets/doodads/bird/blue/right-2.png deleted file mode 100644 index d812571..0000000 Binary files a/dev-assets/doodads/bird/blue/right-2.png and /dev/null differ diff --git a/dev-assets/doodads/bird/red/dive-left.png b/dev-assets/doodads/bird/red/dive-left.png deleted file mode 100644 index 4ec5794..0000000 Binary files a/dev-assets/doodads/bird/red/dive-left.png and /dev/null differ diff --git a/dev-assets/doodads/bird/red/dive-right.png b/dev-assets/doodads/bird/red/dive-right.png deleted file mode 100644 index 8516ae3..0000000 Binary files a/dev-assets/doodads/bird/red/dive-right.png and /dev/null differ diff --git a/dev-assets/doodads/bird/red/left-1.png b/dev-assets/doodads/bird/red/left-1.png deleted file mode 100644 index e3c6e50..0000000 Binary files a/dev-assets/doodads/bird/red/left-1.png and /dev/null differ diff --git a/dev-assets/doodads/bird/red/left-2.png b/dev-assets/doodads/bird/red/left-2.png deleted file mode 100644 index e093f1f..0000000 Binary files a/dev-assets/doodads/bird/red/left-2.png and /dev/null differ diff --git a/dev-assets/doodads/bird/red/right-1.png b/dev-assets/doodads/bird/red/right-1.png deleted file mode 100644 index 91930e2..0000000 Binary files a/dev-assets/doodads/bird/red/right-1.png and /dev/null differ diff --git a/dev-assets/doodads/bird/red/right-2.png b/dev-assets/doodads/bird/red/right-2.png deleted file mode 100644 index 380b3b3..0000000 Binary files a/dev-assets/doodads/bird/red/right-2.png and /dev/null differ diff --git a/dev-assets/doodads/box/Makefile b/dev-assets/doodads/box/Makefile deleted file mode 100644 index ddbb2a1..0000000 --- a/dev-assets/doodads/box/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -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-1.png b/dev-assets/doodads/box/box-1.png deleted file mode 100644 index 29b33bd..0000000 Binary files a/dev-assets/doodads/box/box-1.png and /dev/null differ diff --git a/dev-assets/doodads/box/box-2.png b/dev-assets/doodads/box/box-2.png deleted file mode 100644 index d6028af..0000000 Binary files a/dev-assets/doodads/box/box-2.png and /dev/null differ diff --git a/dev-assets/doodads/box/box-3.png b/dev-assets/doodads/box/box-3.png deleted file mode 100644 index f94618f..0000000 Binary files a/dev-assets/doodads/box/box-3.png and /dev/null differ diff --git a/dev-assets/doodads/box/box-4.png b/dev-assets/doodads/box/box-4.png deleted file mode 100644 index 204421e..0000000 Binary files a/dev-assets/doodads/box/box-4.png and /dev/null differ diff --git a/dev-assets/doodads/box/box.js b/dev-assets/doodads/box/box.js deleted file mode 100644 index 0ca950a..0000000 --- a/dev-assets/doodads/box/box.js +++ /dev/null @@ -1,73 +0,0 @@ -// Pushable Box. - -const speed = 4, - size = 75; - -function main() { - Self.SetMobile(true); - Self.SetInvulnerable(true); - Self.SetGravity(true); - Self.SetHitbox(0, 0, size, size); - - Events.OnCollide((e) => { - // Ignore events from neighboring Boxes. - if (e.Actor.Actor.Filename === "box.doodad") { - return false; - } - - if (e.Actor.IsMobile() && e.InHitbox) { - let overlap = e.Overlap; - - if (overlap.Y === 0 && !(overlap.X === 0 && overlap.W < 5) && !(overlap.X === size)) { - // Be sure to position them snug on top. - // TODO: this might be a nice general solution in the - // collision detector... - e.Actor.MoveTo(Point( - e.Actor.Position().X, - Self.Position().Y - e.Actor.Hitbox().Y - e.Actor.Hitbox().H - 2, - )) - e.Actor.SetGrounded(true); - return false; - } else if (overlap.Y === size) { - // From the bottom, boop it up. - Self.SetVelocity(Vector(0, -speed * 2)) - } - - // If touching from the sides, slide away. - if (overlap.X === 0) { - Self.SetVelocity(Vector(speed, 0)) - } else if (overlap.X === size) { - Self.SetVelocity(Vector(-speed, 0)) - } - - return false; - } - }); - Events.OnLeave(function (e) { - Self.SetVelocity(Vector(0, 0)); - }); - - // When we receive power, we reset to our original position. - let origPoint = Self.Position(); - Message.Subscribe("power", (powered) => { - Self.MoveTo(origPoint); - Self.SetVelocity(Vector(0, 0)); - }); - - // Start animation on a loop. - animate(); -} - -function animate() { - Self.AddAnimation("animate", 100, [0, 1, 2, 3, 2, 1]); - - let running = false; - setInterval(() => { - if (!running) { - running = true; - Self.PlayAnimation("animate", function () { - running = false; - }) - } - }, 100); -} diff --git a/dev-assets/doodads/boy/Makefile b/dev-assets/doodads/boy/Makefile deleted file mode 100644 index aaa98ed..0000000 --- a/dev-assets/doodads/boy/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -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 \ - idle-right-1.png idle-right-2.png idle-right-3.png \ - idle-left-1.png idle-left-2.png idle-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/boy/boy.js b/dev-assets/doodads/boy/boy.js deleted file mode 100644 index c62bf8d..0000000 --- a/dev-assets/doodads/boy/boy.js +++ /dev/null @@ -1,62 +0,0 @@ -const playerSpeed = 12; - -let Vx = Vy = 0, - walking = false, - direction = "right", - lastDirection = direction; - -function main() { - Self.SetMobile(true); - Self.SetInventory(true); - Self.SetGravity(true); - Self.SetHitbox(0, 0, 32, 52); - Self.AddAnimation("walk-left", 200, ["stand-left", "walk-left-1", "walk-left-2", "walk-left-3", "walk-left-2", "walk-left-1"]); - Self.AddAnimation("walk-right", 200, ["stand-right", "walk-right-1", "walk-right-2", "walk-right-3", "walk-right-2", "walk-right-1"]); - Self.AddAnimation("idle-left", 200, ["idle-left-1", "idle-left-2", "idle-left-3", "idle-left-2"]); - Self.AddAnimation("idle-right", 200, ["idle-right-1", "idle-right-2", "idle-right-3", "idle-right-2"]); - - // If the player suddenly changes direction, reset the animation state to quickly switch over. - let lastVelocity = Vector(0, 0); - - Events.OnKeypress((ev) => { - Vx = 0; - Vy = 0; - - let curVelocity = Self.GetVelocity(); - if ((lastVelocity.X < 0 && curVelocity.X > 0) || - (lastVelocity.X > 0 && curVelocity.X < 0)) { - Self.StopAnimation(); - } - lastVelocity = curVelocity; - lastDirection = direction; - - let wasWalking = walking; - if (ev.Right) { - direction = "right"; - Vx = playerSpeed; - walking = true; - } else if (ev.Left) { - direction = "left"; - Vx = -playerSpeed; - walking = true; - } else { - // Has stopped walking! - walking = false; - stoppedWalking = true; - } - - // Should we stop animating? (changed state) - if (direction !== lastDirection || wasWalking !== walking) { - Self.StopAnimation(); - } - - // And play what animation? - if (!Self.IsAnimating()) { - if (walking) { - Self.PlayAnimation("walk-"+direction, null); - } else { - Self.PlayAnimation("idle-"+direction, null); - } - } - }) -} diff --git a/dev-assets/doodads/boy/idle-left-1.png b/dev-assets/doodads/boy/idle-left-1.png deleted file mode 100644 index ca64929..0000000 Binary files a/dev-assets/doodads/boy/idle-left-1.png and /dev/null differ diff --git a/dev-assets/doodads/boy/idle-left-2.png b/dev-assets/doodads/boy/idle-left-2.png deleted file mode 100644 index 192388b..0000000 Binary files a/dev-assets/doodads/boy/idle-left-2.png and /dev/null differ diff --git a/dev-assets/doodads/boy/idle-left-3.png b/dev-assets/doodads/boy/idle-left-3.png deleted file mode 100644 index 7c0aa43..0000000 Binary files a/dev-assets/doodads/boy/idle-left-3.png and /dev/null differ diff --git a/dev-assets/doodads/boy/idle-right-1.png b/dev-assets/doodads/boy/idle-right-1.png deleted file mode 100644 index def2698..0000000 Binary files a/dev-assets/doodads/boy/idle-right-1.png and /dev/null differ diff --git a/dev-assets/doodads/boy/idle-right-2.png b/dev-assets/doodads/boy/idle-right-2.png deleted file mode 100644 index ab55a73..0000000 Binary files a/dev-assets/doodads/boy/idle-right-2.png and /dev/null differ diff --git a/dev-assets/doodads/boy/idle-right-3.png b/dev-assets/doodads/boy/idle-right-3.png deleted file mode 100644 index 345b43f..0000000 Binary files a/dev-assets/doodads/boy/idle-right-3.png and /dev/null differ diff --git a/dev-assets/doodads/boy/stand-left.png b/dev-assets/doodads/boy/stand-left.png deleted file mode 100644 index 3ce4be7..0000000 Binary files a/dev-assets/doodads/boy/stand-left.png and /dev/null differ diff --git a/dev-assets/doodads/boy/stand-right.png b/dev-assets/doodads/boy/stand-right.png deleted file mode 100644 index 66a85d1..0000000 Binary files a/dev-assets/doodads/boy/stand-right.png and /dev/null differ diff --git a/dev-assets/doodads/boy/walk-left-1.png b/dev-assets/doodads/boy/walk-left-1.png deleted file mode 100644 index 733624d..0000000 Binary files a/dev-assets/doodads/boy/walk-left-1.png and /dev/null differ diff --git a/dev-assets/doodads/boy/walk-left-2.png b/dev-assets/doodads/boy/walk-left-2.png deleted file mode 100644 index 1256cc6..0000000 Binary files a/dev-assets/doodads/boy/walk-left-2.png and /dev/null differ diff --git a/dev-assets/doodads/boy/walk-left-3.png b/dev-assets/doodads/boy/walk-left-3.png deleted file mode 100644 index 39128c4..0000000 Binary files a/dev-assets/doodads/boy/walk-left-3.png and /dev/null differ diff --git a/dev-assets/doodads/boy/walk-right-1.png b/dev-assets/doodads/boy/walk-right-1.png deleted file mode 100644 index c422cfa..0000000 Binary files a/dev-assets/doodads/boy/walk-right-1.png and /dev/null differ diff --git a/dev-assets/doodads/boy/walk-right-2.png b/dev-assets/doodads/boy/walk-right-2.png deleted file mode 100644 index 2aac09e..0000000 Binary files a/dev-assets/doodads/boy/walk-right-2.png and /dev/null differ diff --git a/dev-assets/doodads/boy/walk-right-3.png b/dev-assets/doodads/boy/walk-right-3.png deleted file mode 100644 index 0bd2b72..0000000 Binary files a/dev-assets/doodads/boy/walk-right-3.png and /dev/null differ diff --git a/dev-assets/doodads/boy/walk-right.gif b/dev-assets/doodads/boy/walk-right.gif deleted file mode 100644 index e6e2d30..0000000 Binary files a/dev-assets/doodads/boy/walk-right.gif and /dev/null differ diff --git a/dev-assets/doodads/build.sh b/dev-assets/doodads/build.sh deleted file mode 100755 index a668a3e..0000000 --- a/dev-assets/doodads/build.sh +++ /dev/null @@ -1,114 +0,0 @@ -#!/bin/bash - -# Build all the doodads from their source files. -if [[ ! -d "./azulian" ]]; then - echo Run this script from the dev-assets/doodads/ working directory. - exit 1 -fi - -mkdir -p ../../assets/doodads - -boy() { - cd boy/ - make - cd .. - - cd thief/ - make - cd .. -} - -buttons() { - cd buttons/ - make - cd .. -} - -switches() { - cd switches/ - make - cd .. -} - -doors() { - cd doors/ - make - cd .. - - cd gems/ - make - cd .. -} - -trapdoors() { - cd trapdoors/ - make - cd .. -} - -azulians() { - cd azulian/ - make - cd .. -} - -mobs() { - cd bird/ - make - cd .. -} - -objects() { - cd objects/ - make - cd .. - - cd box/ - make - cd .. - - cd crumbly-floor/ - make - cd .. - - cd regions/ - make - cd .. -} - -onoff() { - cd on-off/ - make - cd .. -} - -warpdoor() { - cd warp-door/ - make - cd .. -} - -creatures() { - cd snake/ - make - cd .. - - cd crusher/ - make - cd .. -} - -boy -buttons -switches -doors -trapdoors -azulians -mobs -objects -onoff -warpdoor -creatures -doodad edit-doodad -quiet -lock -author "Noah" ../../assets/doodads/*.doodad -doodad edit-doodad ../../assets/doodads/azu-blu.doodad -doodad edit-doodad -hide ../../assets/doodads/boy.doodad diff --git a/dev-assets/doodads/buttons/Makefile b/dev-assets/doodads/buttons/Makefile deleted file mode 100644 index bd82563..0000000 --- a/dev-assets/doodads/buttons/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -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/buttons/README.md b/dev-assets/doodads/buttons/README.md deleted file mode 100644 index 001f1bb..0000000 --- a/dev-assets/doodads/buttons/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Button Doodads - -```bash -doodad convert -t "Sticky Button" sticky1.png sticky2.png sticky-button.doodad -doodad install-script sticky.js sticky-button.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 -``` diff --git a/dev-assets/doodads/buttons/button.js b/dev-assets/doodads/buttons/button.js deleted file mode 100644 index a07bba2..0000000 --- a/dev-assets/doodads/buttons/button.js +++ /dev/null @@ -1,60 +0,0 @@ -function main() { - let timer = 0; - let pressed = false; - - // Has a linked Sticky Button been pressed permanently down? - let stickyDown = false; - Message.Subscribe("sticky:down", (down) => { - stickyDown = down; - Self.ShowLayer(stickyDown ? 1 : 0); - }); - - // Track who all is colliding with us. - let colliders = {}; - - Events.OnCollide((e) => { - if (!e.Settled) { - return; - } - - if (colliders[e.Actor.ID()] == undefined) { - colliders[e.Actor.ID()] = true; - } - - // If a linked Sticky Button is pressed, button stays down too and - // doesn't interact. - if (stickyDown) { - return; - } - - // Verify they've touched the button. - if (e.Overlap.Y + e.Overlap.H < 24) { - return; - } - - if (!pressed && !stickyDown) { - Sound.Play("button-down.wav") - Message.Publish("power", true); - pressed = true; - } - - - if (timer > 0) { - clearTimeout(timer); - } - - Self.ShowLayer(1); - }); - - Events.OnLeave((e) => { - delete colliders[e.Actor.ID()]; - - if (Object.keys(colliders).length === 0 && !stickyDown) { - Sound.Play("button-up.wav") - Self.ShowLayer(0); - Message.Publish("power", false); - timer = 0; - pressed = false; - } - }); -} diff --git a/dev-assets/doodads/buttons/button1.png b/dev-assets/doodads/buttons/button1.png deleted file mode 100644 index 6736af8..0000000 Binary files a/dev-assets/doodads/buttons/button1.png and /dev/null differ diff --git a/dev-assets/doodads/buttons/button2.png b/dev-assets/doodads/buttons/button2.png deleted file mode 100644 index 67c3559..0000000 Binary files a/dev-assets/doodads/buttons/button2.png and /dev/null differ diff --git a/dev-assets/doodads/buttons/sticky.js b/dev-assets/doodads/buttons/sticky.js deleted file mode 100644 index e9d6866..0000000 --- a/dev-assets/doodads/buttons/sticky.js +++ /dev/null @@ -1,35 +0,0 @@ -function main() { - let pressed = false; - - // When a sticky button receives power, it pops back up. - Message.Subscribe("power", (powered) => { - if (powered && pressed) { - Self.ShowLayer(0); - pressed = false; - Sound.Play("button-up.wav") - Message.Publish("power", false); - Message.Publish("sticky:down", false); - } - }) - - Events.OnCollide((e) => { - if (!e.Settled) { - return; - } - - if (pressed) { - return; - } - - // Verify they've touched the button. - if (e.Overlap.Y + e.Overlap.H < 24) { - return; - } - - Sound.Play("button-down.wav") - Self.ShowLayer(1); - pressed = true; - Message.Publish("power", true); - Message.Publish("sticky:down", true); - }); -} diff --git a/dev-assets/doodads/buttons/sticky1.png b/dev-assets/doodads/buttons/sticky1.png deleted file mode 100644 index dbd955b..0000000 Binary files a/dev-assets/doodads/buttons/sticky1.png and /dev/null differ diff --git a/dev-assets/doodads/buttons/sticky2.png b/dev-assets/doodads/buttons/sticky2.png deleted file mode 100644 index c9e556b..0000000 Binary files a/dev-assets/doodads/buttons/sticky2.png and /dev/null differ diff --git a/dev-assets/doodads/buttons/typeB1.png b/dev-assets/doodads/buttons/typeB1.png deleted file mode 100644 index ff2d2b4..0000000 Binary files a/dev-assets/doodads/buttons/typeB1.png and /dev/null differ diff --git a/dev-assets/doodads/buttons/typeB2.png b/dev-assets/doodads/buttons/typeB2.png deleted file mode 100644 index 5cfe20c..0000000 Binary files a/dev-assets/doodads/buttons/typeB2.png and /dev/null differ diff --git a/dev-assets/doodads/crumbly-floor/Makefile b/dev-assets/doodads/crumbly-floor/Makefile deleted file mode 100644 index 7fe4048..0000000 --- a/dev-assets/doodads/crumbly-floor/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -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/crumbly-floor/crumbly-floor.js b/dev-assets/doodads/crumbly-floor/crumbly-floor.js deleted file mode 100644 index 283bd65..0000000 --- a/dev-assets/doodads/crumbly-floor/crumbly-floor.js +++ /dev/null @@ -1,59 +0,0 @@ -// Crumbly Floor. -function main() { - Self.SetHitbox(0, 0, 98, 11); - - Self.AddAnimation("shake", 100, ["shake1", "shake2", "floor", "shake1", "shake2", "floor"]); - Self.AddAnimation("fall", 100, ["fall1", "fall2", "fall3", "fall4"]); - - // Recover time for the floor to respawn. - let recover = 5000; - - // States of the floor. - let stateSolid = 0; - let stateShaking = 1; - let stateFalling = 2; - let stateFallen = 3; - let state = stateSolid; - - Events.OnCollide((e) => { - - // If the floor is falling, the player passes right thru. - if (state === stateFalling || state === stateFallen) { - return; - } - - // Floor is solid until it begins to fall. - if (e.InHitbox && (state === stateSolid || state === stateShaking)) { - // Only activate when touched from the top. - if (e.Overlap.Y > 0) { - return false; - } - - // If movement is not settled, be solid. - if (!e.Settled) { - return false; - } - - // Begin the animation sequence if we're in the solid state. - if (state === stateSolid) { - state = stateShaking; - Self.PlayAnimation("shake", () => { - state = stateFalling; - Self.PlayAnimation("fall", () => { - Sound.Play("crumbly-break.wav") - state = stateFallen; - Self.ShowLayerNamed("fallen"); - - // Recover after a while. - setTimeout(() => { - Self.ShowLayer(0); - state = stateSolid; - }, recover); - }); - }) - } - - return false; - } - }); -} diff --git a/dev-assets/doodads/crumbly-floor/fall1.png b/dev-assets/doodads/crumbly-floor/fall1.png deleted file mode 100644 index fdc1616..0000000 Binary files a/dev-assets/doodads/crumbly-floor/fall1.png and /dev/null differ diff --git a/dev-assets/doodads/crumbly-floor/fall2.png b/dev-assets/doodads/crumbly-floor/fall2.png deleted file mode 100644 index ac135c2..0000000 Binary files a/dev-assets/doodads/crumbly-floor/fall2.png and /dev/null differ diff --git a/dev-assets/doodads/crumbly-floor/fall3.png b/dev-assets/doodads/crumbly-floor/fall3.png deleted file mode 100644 index cad059d..0000000 Binary files a/dev-assets/doodads/crumbly-floor/fall3.png and /dev/null differ diff --git a/dev-assets/doodads/crumbly-floor/fall4.png b/dev-assets/doodads/crumbly-floor/fall4.png deleted file mode 100644 index 11f6c98..0000000 Binary files a/dev-assets/doodads/crumbly-floor/fall4.png and /dev/null differ diff --git a/dev-assets/doodads/crumbly-floor/fallen.png b/dev-assets/doodads/crumbly-floor/fallen.png deleted file mode 100644 index ffd3423..0000000 Binary files a/dev-assets/doodads/crumbly-floor/fallen.png and /dev/null differ diff --git a/dev-assets/doodads/crumbly-floor/floor.png b/dev-assets/doodads/crumbly-floor/floor.png deleted file mode 100644 index c592c09..0000000 Binary files a/dev-assets/doodads/crumbly-floor/floor.png and /dev/null differ diff --git a/dev-assets/doodads/crumbly-floor/shake1.png b/dev-assets/doodads/crumbly-floor/shake1.png deleted file mode 100644 index b59c251..0000000 Binary files a/dev-assets/doodads/crumbly-floor/shake1.png and /dev/null differ diff --git a/dev-assets/doodads/crumbly-floor/shake2.png b/dev-assets/doodads/crumbly-floor/shake2.png deleted file mode 100644 index 83723ef..0000000 Binary files a/dev-assets/doodads/crumbly-floor/shake2.png and /dev/null differ diff --git a/dev-assets/doodads/crusher/Makefile b/dev-assets/doodads/crusher/Makefile deleted file mode 100644 index abbac86..0000000 --- a/dev-assets/doodads/crusher/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -ALL: build - -.PHONY: build -build: - doodad convert -t "Crusher" sleep.png peek-left.png peek-right.png \ - angry.png ouch.png crusher.doodad - doodad install-script crusher.js crusher.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/crusher/angry.png b/dev-assets/doodads/crusher/angry.png deleted file mode 100644 index 6fdc159..0000000 Binary files a/dev-assets/doodads/crusher/angry.png and /dev/null differ diff --git a/dev-assets/doodads/crusher/crusher.js b/dev-assets/doodads/crusher/crusher.js deleted file mode 100644 index 5aba2a2..0000000 --- a/dev-assets/doodads/crusher/crusher.js +++ /dev/null @@ -1,207 +0,0 @@ -// Crusher - -/* -A.I. Behaviors: - -- Sleeps and hangs in the air in a high place. -- When a player gets nearby, it begins "peeking" in their direction. -- When the player is below, tries to drop and crush them or any - other mobile doodad. -- The top edge is safe to walk on and ride back up like an elevator. -*/ - -let direction = "left", - dropSpeed = 12, - riseSpeed = 4, - watchRadius = 300, // player nearby distance to start peeking - fallRadius = 120, // player distance before it drops - helmetThickness = 48, // safe solid hitbox height - fireThickness = 12, // dangerous bottom thickness - targetAltitude = Self.Position() - lastAltitude = targetAltitude.Y - size = Self.Size(); - -const states = { - idle: 0, - peeking: 1, - drop: 2, - falling: 3, - hit: 4, - rising: 5, -}; -let state = states.idle; - -function main() { - Self.SetMobile(true); - Self.SetGravity(false); - Self.SetInvulnerable(true); - Self.SetHitbox(5, 2, 90, 73); - Self.AddAnimation("hit", 50, - ["angry", "ouch", "angry", "angry", "angry", "angry", - "sleep", "sleep", "sleep", "sleep", "sleep", "sleep", - "sleep", "sleep", "sleep", "sleep", "sleep", "sleep", - "sleep", "sleep", "sleep", "sleep", "sleep", "sleep"], - ) - - // Player Character controls? - if (Self.IsPlayer()) { - return player(); - } - - let hitbox = Self.Hitbox(); - - Events.OnCollide((e) => { - // The bottom is deadly if falling. - if (state === states.falling || state === states.hit && e.Settled) { - if (e.Actor.IsMobile() && e.InHitbox && !e.Actor.Invulnerable()) { - if (e.Overlap.H > 72) { - if (e.Actor.IsPlayer()) { - FailLevel("Don't get crushed!"); - return; - } else { - e.Actor.Destroy(); - } - } - } - } - - // Our top edge is always solid. - if (e.Actor.IsPlayer() && e.InHitbox) { - if (e.Overlap.Y < helmetThickness) { - // Be sure to position them snug on top. - // TODO: this might be a nice general solution in the - // collision detector... - e.Actor.MoveTo(Point( - e.Actor.Position().X, - Self.Position().Y - e.Actor.Hitbox().Y - e.Actor.Hitbox().H, - )) - e.Actor.SetGrounded(true); - } - } - - // The whole hitbox is ordinarily solid. - if (state !== state.falling) { - if (e.Actor.IsMobile() && e.InHitbox) { - return false; - } - } - }); - - setInterval(() => { - // Find the player. - let player = Actors.FindPlayer(), - playerPoint = player.Position(), - point = Self.Position(), - delta = 0, - nearby = false, - below = false; - - // Face the player. - if (playerPoint.X < point.X + (size.W / 2)) { - direction = "left"; - delta = Math.abs(playerPoint.X - (point.X + (size.W/2))); - } - else if (playerPoint.X > point.X + (size.W / 2)) { - direction = "right"; - delta = Math.abs(playerPoint.X - (point.X + (size.W/2))); - } - - if (delta < watchRadius) { - nearby = true; - } - if (delta < fallRadius) { - // Check if the player is below us. - if (playerPoint.Y > point.Y + size.H) { - below = true; - } - } - - switch (state) { - case states.idle: - if (nearby) { - Self.ShowLayerNamed("peek-"+direction); - } else { - Self.ShowLayerNamed("sleep"); - } - - if (below) { - state = states.drop; - } else if (nearby) { - state = states.peeking; - } - - break; - case states.peeking: - if (nearby) { - Self.ShowLayerNamed("peek-"+direction); - } else { - state = states.idle; - break; - } - - if (below) { - state = states.drop; - } - - break; - case states.drop: - // Begin the fall. - Self.ShowLayerNamed("angry"); - Self.SetVelocity(Vector(0.0, dropSpeed)); - lastAltitude = -point.Y; - state = states.falling; - case states.falling: - Self.ShowLayerNamed("angry"); - Self.SetVelocity(Vector(0.0, dropSpeed)); - - // Landed? - if (point.Y === lastAltitude) { - Sound.Play("crumbly-break.wav") - state = states.hit; - Self.PlayAnimation("hit", () => { - state = states.rising; - }); - } - break; - case states.hit: - // A transitory state while the hit animation - // plays out. - break; - case states.rising: - Self.ShowLayerNamed("sleep"); - Self.SetVelocity(Vector(0, -riseSpeed)); - - point = Self.Position(); - if (point.Y <= targetAltitude.Y+4 || point.Y === lastAltitude.Y) { - Self.MoveTo(targetAltitude); - Self.SetVelocity(Vector(0, 0)) - state = states.idle; - } - } - - lastAltitude = point.Y; - }, 100); -} - -// If under control of the player character. -function player() { - Events.OnKeypress((ev) => { - if (ev.Right) { - direction = "right"; - } else if (ev.Left) { - direction = "left"; - } - - // Jump! - if (ev.Down) { - Self.ShowLayerNamed("angry"); - return; - } else if (ev.Right && ev.Left) { - Self.ShowLayerNamed("ouch"); - } else if (ev.Right || ev.Left) { - Self.ShowLayerNamed("peek-"+direction); - } else { - Self.ShowLayerNamed("sleep"); - } - }); -} diff --git a/dev-assets/doodads/crusher/ouch.png b/dev-assets/doodads/crusher/ouch.png deleted file mode 100644 index c982e6e..0000000 Binary files a/dev-assets/doodads/crusher/ouch.png and /dev/null differ diff --git a/dev-assets/doodads/crusher/peek-left.png b/dev-assets/doodads/crusher/peek-left.png deleted file mode 100644 index b2327ba..0000000 Binary files a/dev-assets/doodads/crusher/peek-left.png and /dev/null differ diff --git a/dev-assets/doodads/crusher/peek-right.png b/dev-assets/doodads/crusher/peek-right.png deleted file mode 100644 index b6c7115..0000000 Binary files a/dev-assets/doodads/crusher/peek-right.png and /dev/null differ diff --git a/dev-assets/doodads/crusher/sleep.png b/dev-assets/doodads/crusher/sleep.png deleted file mode 100644 index 796f656..0000000 Binary files a/dev-assets/doodads/crusher/sleep.png and /dev/null differ diff --git a/dev-assets/doodads/doors/Makefile b/dev-assets/doodads/doors/Makefile deleted file mode 100644 index 4f3c106..0000000 --- a/dev-assets/doodads/doors/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -SHELL = /bin/bash - -ALL: build - -.PHONY: build -build: - ./build.sh diff --git a/dev-assets/doodads/doors/README.md b/dev-assets/doodads/doors/README.md deleted file mode 100644 index 8fc5bf2..0000000 --- a/dev-assets/doodads/doors/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Button Doodads - -```bash -doodad convert -t "Red Door" red1.png red2.png red-door.doodad -doodad convert -t "Blue Door" blue1.png blue2.png blue-door.doodad -doodad convert -t "Green Door" green1.png green2.png green-door.doodad -doodad convert -t "Yellow Door" yellow1.png yellow2.png yellow-door.doodad - -doodad convert -t "Red Key" red-key.png red-key.doodad -doodad convert -t "Blue Key" blue-key.png blue-key.doodad -doodad convert -t "Green Key" green-key.png green-key.doodad -doodad convert -t "Yellow Key" yellow-key.png yellow-key.doodad - -doodad convert -t "Electric Door" electric{1,2,3,4}.png electric-door.doodad -``` diff --git a/dev-assets/doodads/doors/blue-closed.png b/dev-assets/doodads/doors/blue-closed.png deleted file mode 100644 index c8e2c8b..0000000 Binary files a/dev-assets/doodads/doors/blue-closed.png and /dev/null differ diff --git a/dev-assets/doodads/doors/blue-key.png b/dev-assets/doodads/doors/blue-key.png deleted file mode 100644 index 11e4355..0000000 Binary files a/dev-assets/doodads/doors/blue-key.png and /dev/null differ diff --git a/dev-assets/doodads/doors/blue-left.png b/dev-assets/doodads/doors/blue-left.png deleted file mode 100644 index 98a5bfb..0000000 Binary files a/dev-assets/doodads/doors/blue-left.png and /dev/null differ diff --git a/dev-assets/doodads/doors/blue-right.png b/dev-assets/doodads/doors/blue-right.png deleted file mode 100644 index 472c545..0000000 Binary files a/dev-assets/doodads/doors/blue-right.png and /dev/null differ diff --git a/dev-assets/doodads/doors/blue-unlocked.png b/dev-assets/doodads/doors/blue-unlocked.png deleted file mode 100644 index 660ce7b..0000000 Binary files a/dev-assets/doodads/doors/blue-unlocked.png and /dev/null differ diff --git a/dev-assets/doodads/doors/blue1.png b/dev-assets/doodads/doors/blue1.png deleted file mode 100644 index 13ad51b..0000000 Binary files a/dev-assets/doodads/doors/blue1.png and /dev/null differ diff --git a/dev-assets/doodads/doors/blue2.png b/dev-assets/doodads/doors/blue2.png deleted file mode 100644 index 1e5bcdb..0000000 Binary files a/dev-assets/doodads/doors/blue2.png and /dev/null differ diff --git a/dev-assets/doodads/doors/build.sh b/dev-assets/doodads/doors/build.sh deleted file mode 100755 index 7615a8d..0000000 --- a/dev-assets/doodads/doors/build.sh +++ /dev/null @@ -1,52 +0,0 @@ -# doodad convert -t "Red Door" red1.png red2.png door-red.doodad -# doodad edit-doodad -q --tag color=red door-red.doodad -# doodad install-script locked-door.js door-red.doodad - -doodad convert -t "Red Door" red-closed.png red-unlocked.png red-right.png red-left.png door-red.doodad -doodad edit-doodad -q --tag color=red door-red.doodad -doodad install-script colored-door.js door-red.doodad - -doodad convert -t "Blue Door" blue-closed.png blue-unlocked.png blue-right.png blue-left.png door-blue.doodad -doodad edit-doodad -q --tag color=blue door-blue.doodad -doodad install-script colored-door.js door-blue.doodad - -doodad convert -t "Green Door" green-closed.png green-unlocked.png green-right.png green-left.png door-green.doodad -doodad edit-doodad -q --tag color=green door-green.doodad -doodad install-script colored-door.js door-green.doodad - -doodad convert -t "Yellow Door" yellow-closed.png yellow-unlocked.png yellow-right.png yellow-left.png door-yellow.doodad -doodad edit-doodad -q --tag color=yellow door-yellow.doodad -doodad install-script colored-door.js door-yellow.doodad - -doodad convert -t "Small Key Door" small-closed.png small-unlocked.png small-right.png small-left.png small-key-door.doodad -doodad edit-doodad -q --tag color=small small-key-door.doodad -doodad install-script colored-door.js small-key-door.doodad - -doodad convert -t "Red Key" red-key.png key-red.doodad -doodad edit-doodad -q --tag color=red key-red.doodad -doodad install-script keys.js key-red.doodad - -doodad convert -t "Blue Key" blue-key.png key-blue.doodad -doodad edit-doodad -q --tag color=blue key-blue.doodad -doodad install-script keys.js key-blue.doodad - -doodad convert -t "Green Key" green-key.png key-green.doodad -doodad edit-doodad -q --tag color=green key-green.doodad -doodad install-script keys.js key-green.doodad - -doodad convert -t "Yellow Key" yellow-key.png key-yellow.doodad -doodad edit-doodad -q --tag color=yellow key-yellow.doodad -doodad install-script keys.js key-yellow.doodad - -doodad convert -t "Small Key" small-key.png small-key.doodad -doodad edit-doodad -q --tag color=small small-key.doodad -doodad install-script keys.js small-key.doodad - -doodad convert -t "Electric Door" electric{1,2,3,4}.png door-electric.doodad -doodad install-script electric-door.js door-electric.doodad - -# Tag the category for these doodads -for i in *.doodad; do doodad edit-doodad --tag "category=doors" $i; done -doodad edit-doodad --tag "category=doors,gizmos" door-electric.doodad - -cp *.doodad ../../../assets/doodads/ diff --git a/dev-assets/doodads/doors/colored-door.js b/dev-assets/doodads/doors/colored-door.js deleted file mode 100644 index 1c47ab6..0000000 --- a/dev-assets/doodads/doors/colored-door.js +++ /dev/null @@ -1,68 +0,0 @@ -// Colored Locked Doors. - -const color = Self.GetTag("color"), - keyname = color === "small" ? "small-key.doodad" : "key-" + color + ".doodad"; - -function main() { - // Layers in the doodad image. - let layer = { - closed: 0, - unlocked: 1, - right: 2, - left: 3, - }; - - // Variables that change in event handler. - let unlocked = false; // Key has been used to unlock the door (one time). - let opened = false; // If door is currently showing its opened state. - let enterSide = 0; // Side of player entering the door, -1 or 1, left or right. - - Self.SetHitbox(34, 0, 13, 76); - - Events.OnCollide((e) => { - // Record the side that this actor has touched us, in case the door - // needs to open. - if (enterSide === 0) { - enterSide = e.Overlap.X > 0 ? 1 : -1; - } - - if (opened) { - return; - } - - if (e.InHitbox) { - if (unlocked) { - Self.ShowLayer(enterSide < 0 ? layer.right : layer.left); - opened = true; - Sound.Play("door-open.wav") - return; - } - - // Do they have our key? - let hasKey = e.Actor.HasItem(keyname) >= 0; - if (!hasKey) { - // Door is locked. - return false; - } - - if (e.Settled) { - unlocked = true; - Self.ShowLayer(enterSide < 0 ? layer.right : layer.left); - Sound.Play("unlock.wav"); - - // If a Small Key door, consume a small key. - if (color === "small") { - e.Actor.RemoveItem(keyname, 1) - } - } - } - }); - Events.OnLeave((e) => { - Self.ShowLayer(unlocked ? layer.unlocked : layer.closed); - // Sound.Play("door-close.wav") - - // Reset collision state. - opened = false; - enterSide = 0; - }); -} diff --git a/dev-assets/doodads/doors/electric-door.js b/dev-assets/doodads/doors/electric-door.js deleted file mode 100644 index 5c35201..0000000 --- a/dev-assets/doodads/doors/electric-door.js +++ /dev/null @@ -1,65 +0,0 @@ -// Electric Door - -let animating = false; -let opened = false; -let powerState = false; - -// Function to handle the door opening or closing. -function setPoweredState(powered) { - powerState = powered; - - if (powered) { - if (animating || opened) { - return; - } - - animating = true; - opened = true; - Sound.Play("electric-door.wav") - Self.PlayAnimation("open", () => { - animating = false; - }); - } else { - animating = true; - Sound.Play("electric-door.wav") - Self.PlayAnimation("close", () => { - opened = false; - animating = false; - }) - } -} - -function main() { - Self.AddAnimation("open", 100, [0, 1, 2, 3]); - Self.AddAnimation("close", 100, [3, 2, 1, 0]); - - Self.SetHitbox(0, 0, 34, 76); - - // A linked Switch that activates the door will send the Toggle signal - // immediately before the Power signal. The door can just invert its - // state on this signal, and ignore the very next Power signal. Ordinary - // power sources like Buttons will work as normal, as they emit only a power - // signal. - let ignoreNextPower = false; - Message.Subscribe("switch:toggle", (powered) => { - ignoreNextPower = true; - setPoweredState(!powerState); - }) - - Message.Subscribe("power", (powered) => { - if (ignoreNextPower) { - ignoreNextPower = false; - return; - } - - setPoweredState(powered); - }); - - Events.OnCollide((e) => { - if (e.InHitbox) { - if (!opened) { - return false; - } - } - }); -} diff --git a/dev-assets/doodads/doors/electric.gif b/dev-assets/doodads/doors/electric.gif deleted file mode 100644 index c280b2d..0000000 Binary files a/dev-assets/doodads/doors/electric.gif and /dev/null differ diff --git a/dev-assets/doodads/doors/electric1.png b/dev-assets/doodads/doors/electric1.png deleted file mode 100644 index 26a378b..0000000 Binary files a/dev-assets/doodads/doors/electric1.png and /dev/null differ diff --git a/dev-assets/doodads/doors/electric2.png b/dev-assets/doodads/doors/electric2.png deleted file mode 100644 index 95aad3e..0000000 Binary files a/dev-assets/doodads/doors/electric2.png and /dev/null differ diff --git a/dev-assets/doodads/doors/electric3.png b/dev-assets/doodads/doors/electric3.png deleted file mode 100644 index ffaf07a..0000000 Binary files a/dev-assets/doodads/doors/electric3.png and /dev/null differ diff --git a/dev-assets/doodads/doors/electric4.png b/dev-assets/doodads/doors/electric4.png deleted file mode 100644 index e54c18f..0000000 Binary files a/dev-assets/doodads/doors/electric4.png and /dev/null differ diff --git a/dev-assets/doodads/doors/green-closed.png b/dev-assets/doodads/doors/green-closed.png deleted file mode 100644 index e178cda..0000000 Binary files a/dev-assets/doodads/doors/green-closed.png and /dev/null differ diff --git a/dev-assets/doodads/doors/green-key.png b/dev-assets/doodads/doors/green-key.png deleted file mode 100644 index fe876aa..0000000 Binary files a/dev-assets/doodads/doors/green-key.png and /dev/null differ diff --git a/dev-assets/doodads/doors/green-left.png b/dev-assets/doodads/doors/green-left.png deleted file mode 100644 index 37728e5..0000000 Binary files a/dev-assets/doodads/doors/green-left.png and /dev/null differ diff --git a/dev-assets/doodads/doors/green-right.png b/dev-assets/doodads/doors/green-right.png deleted file mode 100644 index 137716b..0000000 Binary files a/dev-assets/doodads/doors/green-right.png and /dev/null differ diff --git a/dev-assets/doodads/doors/green-unlocked.png b/dev-assets/doodads/doors/green-unlocked.png deleted file mode 100644 index 254fadb..0000000 Binary files a/dev-assets/doodads/doors/green-unlocked.png and /dev/null differ diff --git a/dev-assets/doodads/doors/green1.png b/dev-assets/doodads/doors/green1.png deleted file mode 100644 index e49c653..0000000 Binary files a/dev-assets/doodads/doors/green1.png and /dev/null differ diff --git a/dev-assets/doodads/doors/green2.png b/dev-assets/doodads/doors/green2.png deleted file mode 100644 index 9e229d0..0000000 Binary files a/dev-assets/doodads/doors/green2.png and /dev/null differ diff --git a/dev-assets/doodads/doors/keys.js b/dev-assets/doodads/doors/keys.js deleted file mode 100644 index c51154d..0000000 --- a/dev-assets/doodads/doors/keys.js +++ /dev/null @@ -1,22 +0,0 @@ -// Colored Keys and Small Key - -const color = Self.GetTag("color"), - quantity = color === "small" ? 1 : 0; - -function main() { - Events.OnCollide((e) => { - if (e.Settled) { - if (e.Actor.HasInventory()) { - // If we don't have a quantity, and the actor already has - // one of us, don't pick it up so the player can get it. - if (quantity === 0 && e.Actor.HasItem(Self.Filename) === 0 && !e.Actor.IsPlayer()) { - return; - } - - Sound.Play("item-get.wav") - e.Actor.AddItem(Self.Filename, quantity); - Self.Destroy(); - } - } - }) -} diff --git a/dev-assets/doodads/doors/red-closed.png b/dev-assets/doodads/doors/red-closed.png deleted file mode 100644 index 57fa66a..0000000 Binary files a/dev-assets/doodads/doors/red-closed.png and /dev/null differ diff --git a/dev-assets/doodads/doors/red-key.png b/dev-assets/doodads/doors/red-key.png deleted file mode 100644 index 38db173..0000000 Binary files a/dev-assets/doodads/doors/red-key.png and /dev/null differ diff --git a/dev-assets/doodads/doors/red-left.png b/dev-assets/doodads/doors/red-left.png deleted file mode 100644 index a345af8..0000000 Binary files a/dev-assets/doodads/doors/red-left.png and /dev/null differ diff --git a/dev-assets/doodads/doors/red-right.png b/dev-assets/doodads/doors/red-right.png deleted file mode 100644 index de5da7c..0000000 Binary files a/dev-assets/doodads/doors/red-right.png and /dev/null differ diff --git a/dev-assets/doodads/doors/red-unlocked.png b/dev-assets/doodads/doors/red-unlocked.png deleted file mode 100644 index 8124fb5..0000000 Binary files a/dev-assets/doodads/doors/red-unlocked.png and /dev/null differ diff --git a/dev-assets/doodads/doors/red1.png b/dev-assets/doodads/doors/red1.png deleted file mode 100644 index c963c2d..0000000 Binary files a/dev-assets/doodads/doors/red1.png and /dev/null differ diff --git a/dev-assets/doodads/doors/red2.png b/dev-assets/doodads/doors/red2.png deleted file mode 100644 index 07dc65f..0000000 Binary files a/dev-assets/doodads/doors/red2.png and /dev/null differ diff --git a/dev-assets/doodads/doors/small-closed.png b/dev-assets/doodads/doors/small-closed.png deleted file mode 100644 index b97ae46..0000000 Binary files a/dev-assets/doodads/doors/small-closed.png and /dev/null differ diff --git a/dev-assets/doodads/doors/small-key.png b/dev-assets/doodads/doors/small-key.png deleted file mode 100644 index 11e4eca..0000000 Binary files a/dev-assets/doodads/doors/small-key.png and /dev/null differ diff --git a/dev-assets/doodads/doors/small-left.png b/dev-assets/doodads/doors/small-left.png deleted file mode 100644 index 273786f..0000000 Binary files a/dev-assets/doodads/doors/small-left.png and /dev/null differ diff --git a/dev-assets/doodads/doors/small-right.png b/dev-assets/doodads/doors/small-right.png deleted file mode 100644 index 4f55056..0000000 Binary files a/dev-assets/doodads/doors/small-right.png and /dev/null differ diff --git a/dev-assets/doodads/doors/small-unlocked.png b/dev-assets/doodads/doors/small-unlocked.png deleted file mode 100644 index 5596796..0000000 Binary files a/dev-assets/doodads/doors/small-unlocked.png and /dev/null differ diff --git a/dev-assets/doodads/doors/yellow-closed.png b/dev-assets/doodads/doors/yellow-closed.png deleted file mode 100644 index 867e05c..0000000 Binary files a/dev-assets/doodads/doors/yellow-closed.png and /dev/null differ diff --git a/dev-assets/doodads/doors/yellow-key.png b/dev-assets/doodads/doors/yellow-key.png deleted file mode 100644 index c83c738..0000000 Binary files a/dev-assets/doodads/doors/yellow-key.png and /dev/null differ diff --git a/dev-assets/doodads/doors/yellow-left.png b/dev-assets/doodads/doors/yellow-left.png deleted file mode 100644 index 944a420..0000000 Binary files a/dev-assets/doodads/doors/yellow-left.png and /dev/null differ diff --git a/dev-assets/doodads/doors/yellow-right.png b/dev-assets/doodads/doors/yellow-right.png deleted file mode 100644 index 4b89710..0000000 Binary files a/dev-assets/doodads/doors/yellow-right.png and /dev/null differ diff --git a/dev-assets/doodads/doors/yellow-unlocked.png b/dev-assets/doodads/doors/yellow-unlocked.png deleted file mode 100644 index da2d0e7..0000000 Binary files a/dev-assets/doodads/doors/yellow-unlocked.png and /dev/null differ diff --git a/dev-assets/doodads/doors/yellow1.png b/dev-assets/doodads/doors/yellow1.png deleted file mode 100644 index b6a6e72..0000000 Binary files a/dev-assets/doodads/doors/yellow1.png and /dev/null differ diff --git a/dev-assets/doodads/doors/yellow2.png b/dev-assets/doodads/doors/yellow2.png deleted file mode 100644 index a985563..0000000 Binary files a/dev-assets/doodads/doors/yellow2.png and /dev/null differ diff --git a/dev-assets/doodads/gems/Makefile b/dev-assets/doodads/gems/Makefile deleted file mode 100644 index f9e5d87..0000000 --- a/dev-assets/doodads/gems/Makefile +++ /dev/null @@ -1,58 +0,0 @@ -ALL: build - -.PHONY: build -build: - ### - # Gemstones - ### - - doodad convert -t "Gemstone (Green)" green-1.png green-2.png green-3.png green-4.png \ - gem-green.doodad - doodad install-script gemstone.js gem-green.doodad - doodad edit-doodad --tag "color=green" gem-green.doodad - - doodad convert -t "Gemstone (Red)" red-1.png red-2.png red-3.png red-4.png \ - gem-red.doodad - doodad install-script gemstone.js gem-red.doodad - doodad edit-doodad --tag "color=red" gem-red.doodad - - doodad convert -t "Gemstone (Blue)" blue-1.png blue-2.png blue-3.png blue-4.png \ - gem-blue.doodad - doodad install-script gemstone.js gem-blue.doodad - doodad edit-doodad --tag "color=blue" gem-blue.doodad - - doodad convert -t "Gemstone (Yellow)" yellow-1.png yellow-2.png yellow-3.png yellow-4.png \ - gem-yellow.doodad - doodad install-script gemstone.js gem-yellow.doodad - doodad edit-doodad --tag "color=yellow" gem-yellow.doodad - - ### - # Totems - ### - - doodad convert -t "Gemstone Totem (Green)" totem-green-1.png totem-green-2.png totem-green-3.png \ - totem-green-4.png totem-green-0.png gem-totem-green.doodad - doodad install-script totem.js gem-totem-green.doodad - doodad edit-doodad --tag "color=green" gem-totem-green.doodad - - doodad convert -t "Gemstone Totem (Yellow)" totem-yellow-1.png totem-yellow-2.png totem-yellow-3.png \ - totem-yellow-4.png totem-yellow-0.png gem-totem-yellow.doodad - doodad install-script totem.js gem-totem-yellow.doodad - doodad edit-doodad --tag "color=yellow" gem-totem-yellow.doodad - - doodad convert -t "Gemstone Totem (Blue)" totem-blue-1.png totem-blue-2.png totem-blue-3.png \ - totem-blue-4.png totem-blue-0.png gem-totem-blue.doodad - doodad install-script totem.js gem-totem-blue.doodad - doodad edit-doodad --tag "color=blue" gem-totem-blue.doodad - - doodad convert -t "Gemstone Totem (Red)" totem-red-1.png totem-red-2.png totem-red-3.png \ - totem-red-4.png totem-red-0.png gem-totem-red.doodad - doodad install-script totem.js gem-totem-red.doodad - doodad edit-doodad --tag "color=red" gem-totem-red.doodad - - # Tag the category for these doodads - for i in *.doodad; do\ - doodad edit-doodad --tag "category=doors" $${i};\ - done - - cp *.doodad ../../../assets/doodads/ \ No newline at end of file diff --git a/dev-assets/doodads/gems/blue-1.png b/dev-assets/doodads/gems/blue-1.png deleted file mode 100644 index c74d062..0000000 Binary files a/dev-assets/doodads/gems/blue-1.png and /dev/null differ diff --git a/dev-assets/doodads/gems/blue-2.png b/dev-assets/doodads/gems/blue-2.png deleted file mode 100644 index 2760b45..0000000 Binary files a/dev-assets/doodads/gems/blue-2.png and /dev/null differ diff --git a/dev-assets/doodads/gems/blue-3.png b/dev-assets/doodads/gems/blue-3.png deleted file mode 100644 index b40177c..0000000 Binary files a/dev-assets/doodads/gems/blue-3.png and /dev/null differ diff --git a/dev-assets/doodads/gems/blue-4.png b/dev-assets/doodads/gems/blue-4.png deleted file mode 100644 index 63f8480..0000000 Binary files a/dev-assets/doodads/gems/blue-4.png and /dev/null differ diff --git a/dev-assets/doodads/gems/gemstone.js b/dev-assets/doodads/gems/gemstone.js deleted file mode 100644 index efb9361..0000000 --- a/dev-assets/doodads/gems/gemstone.js +++ /dev/null @@ -1,24 +0,0 @@ -// Gem stone collectibles/keys. - -const color = Self.GetTag("color"), - shimmerFreq = 1000; - -function main() { - Self.SetMobile(true); - Self.SetGravity(true); - - Self.AddAnimation("shimmer", 100, [0, 1, 2, 3, 0]); - Events.OnCollide((e) => { - if (e.Settled) { - if (e.Actor.HasInventory()) { - Sound.Play("item-get.wav") - e.Actor.AddItem(Self.Filename, 1); - Self.Destroy(); - } - } - }); - - setInterval(() => { - Self.PlayAnimation("shimmer", null); - }, shimmerFreq); -} \ No newline at end of file diff --git a/dev-assets/doodads/gems/green-1.png b/dev-assets/doodads/gems/green-1.png deleted file mode 100644 index ff76d09..0000000 Binary files a/dev-assets/doodads/gems/green-1.png and /dev/null differ diff --git a/dev-assets/doodads/gems/green-2.png b/dev-assets/doodads/gems/green-2.png deleted file mode 100644 index 996d565..0000000 Binary files a/dev-assets/doodads/gems/green-2.png and /dev/null differ diff --git a/dev-assets/doodads/gems/green-3.png b/dev-assets/doodads/gems/green-3.png deleted file mode 100644 index 8449974..0000000 Binary files a/dev-assets/doodads/gems/green-3.png and /dev/null differ diff --git a/dev-assets/doodads/gems/green-4.png b/dev-assets/doodads/gems/green-4.png deleted file mode 100644 index a6e7064..0000000 Binary files a/dev-assets/doodads/gems/green-4.png and /dev/null differ diff --git a/dev-assets/doodads/gems/red-1.png b/dev-assets/doodads/gems/red-1.png deleted file mode 100644 index 9a14ea0..0000000 Binary files a/dev-assets/doodads/gems/red-1.png and /dev/null differ diff --git a/dev-assets/doodads/gems/red-2.png b/dev-assets/doodads/gems/red-2.png deleted file mode 100644 index fdcf412..0000000 Binary files a/dev-assets/doodads/gems/red-2.png and /dev/null differ diff --git a/dev-assets/doodads/gems/red-3.png b/dev-assets/doodads/gems/red-3.png deleted file mode 100644 index 10ecf3c..0000000 Binary files a/dev-assets/doodads/gems/red-3.png and /dev/null differ diff --git a/dev-assets/doodads/gems/red-4.png b/dev-assets/doodads/gems/red-4.png deleted file mode 100644 index 982ec5a..0000000 Binary files a/dev-assets/doodads/gems/red-4.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-blue-0.png b/dev-assets/doodads/gems/totem-blue-0.png deleted file mode 100644 index 0775a22..0000000 Binary files a/dev-assets/doodads/gems/totem-blue-0.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-blue-1.png b/dev-assets/doodads/gems/totem-blue-1.png deleted file mode 100644 index 0f561a3..0000000 Binary files a/dev-assets/doodads/gems/totem-blue-1.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-blue-2.png b/dev-assets/doodads/gems/totem-blue-2.png deleted file mode 100644 index dbc0447..0000000 Binary files a/dev-assets/doodads/gems/totem-blue-2.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-blue-3.png b/dev-assets/doodads/gems/totem-blue-3.png deleted file mode 100644 index 8373a3c..0000000 Binary files a/dev-assets/doodads/gems/totem-blue-3.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-blue-4.png b/dev-assets/doodads/gems/totem-blue-4.png deleted file mode 100644 index 8bb6a80..0000000 Binary files a/dev-assets/doodads/gems/totem-blue-4.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-green-0.png b/dev-assets/doodads/gems/totem-green-0.png deleted file mode 100644 index ff0f54d..0000000 Binary files a/dev-assets/doodads/gems/totem-green-0.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-green-1.png b/dev-assets/doodads/gems/totem-green-1.png deleted file mode 100644 index 4a2e33f..0000000 Binary files a/dev-assets/doodads/gems/totem-green-1.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-green-2.png b/dev-assets/doodads/gems/totem-green-2.png deleted file mode 100644 index ae892e6..0000000 Binary files a/dev-assets/doodads/gems/totem-green-2.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-green-3.png b/dev-assets/doodads/gems/totem-green-3.png deleted file mode 100644 index b850991..0000000 Binary files a/dev-assets/doodads/gems/totem-green-3.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-green-4.png b/dev-assets/doodads/gems/totem-green-4.png deleted file mode 100644 index 4aa4c7d..0000000 Binary files a/dev-assets/doodads/gems/totem-green-4.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-red-0.png b/dev-assets/doodads/gems/totem-red-0.png deleted file mode 100644 index 404245c..0000000 Binary files a/dev-assets/doodads/gems/totem-red-0.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-red-1.png b/dev-assets/doodads/gems/totem-red-1.png deleted file mode 100644 index e7c1a35..0000000 Binary files a/dev-assets/doodads/gems/totem-red-1.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-red-2.png b/dev-assets/doodads/gems/totem-red-2.png deleted file mode 100644 index d08ce21..0000000 Binary files a/dev-assets/doodads/gems/totem-red-2.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-red-3.png b/dev-assets/doodads/gems/totem-red-3.png deleted file mode 100644 index bd56142..0000000 Binary files a/dev-assets/doodads/gems/totem-red-3.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-red-4.png b/dev-assets/doodads/gems/totem-red-4.png deleted file mode 100644 index 98ddcc9..0000000 Binary files a/dev-assets/doodads/gems/totem-red-4.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-yellow-0.png b/dev-assets/doodads/gems/totem-yellow-0.png deleted file mode 100644 index 5865701..0000000 Binary files a/dev-assets/doodads/gems/totem-yellow-0.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-yellow-1.png b/dev-assets/doodads/gems/totem-yellow-1.png deleted file mode 100644 index 66c163b..0000000 Binary files a/dev-assets/doodads/gems/totem-yellow-1.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-yellow-2.png b/dev-assets/doodads/gems/totem-yellow-2.png deleted file mode 100644 index 9cb7081..0000000 Binary files a/dev-assets/doodads/gems/totem-yellow-2.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-yellow-3.png b/dev-assets/doodads/gems/totem-yellow-3.png deleted file mode 100644 index da774b7..0000000 Binary files a/dev-assets/doodads/gems/totem-yellow-3.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem-yellow-4.png b/dev-assets/doodads/gems/totem-yellow-4.png deleted file mode 100644 index e227b7c..0000000 Binary files a/dev-assets/doodads/gems/totem-yellow-4.png and /dev/null differ diff --git a/dev-assets/doodads/gems/totem.js b/dev-assets/doodads/gems/totem.js deleted file mode 100644 index 3598f50..0000000 --- a/dev-assets/doodads/gems/totem.js +++ /dev/null @@ -1,100 +0,0 @@ -// Gem stone totem socket. - -/* -The Totem is a type of key-door that holds onto its corresponding -Gemstone. When a doodad holding the right Gemstone touches the -totem, the totem takes the gemstone and activates. - -If the Totem is not linked to any other Totems, it immediately -sends a power(true) signal upon activation. - -If the Totem is linked to other Totems, it waits until all totems -have been activated before it will emit a power signal. Only one -such totem needs to be linked to e.g. an Electric Door - no matter -which totem is solved last, they'll all emit a power signal when -all of their linked totems are activated. -*/ - -let color = Self.GetTag("color"), - keyname = "gem-"+color+".doodad", - activated = false, - linkedReceiver = false, // is linked to a non-totem which might want power - totems = {}, // linked totems - shimmerFreq = 1000; - -function main() { - // Show the hollow socket on level load (last layer) - Self.ShowLayer(4); - - // Find any linked totems. - for (let link of Self.GetLinks()) { - if (link.Filename.indexOf("gem-totem") > -1) { - totems[link.ID()] = false; - } else { - linkedReceiver = true; - } - } - - // Shimmer animation is just like the gemstones: first 4 frames - // are the filled socket sprites. - Self.AddAnimation("shimmer", 100, [0, 1, 2, 3, 0]); - - Events.OnCollide((e) => { - if (activated) return; - - if (e.Actor.IsMobile() && e.Settled) { - // Do they have our gemstone? - let hasKey = e.Actor.HasItem(keyname) >= 0; - if (!hasKey) { - return; - } - - // Take the gemstone. - e.Actor.RemoveItem(keyname, 1); - Self.ShowLayer(0); - - // Emit to our linked totem neighbors. - activated = true; - Message.Publish("gem-totem:activated", Self.ID()); - tryPower(); - } - }); - - Message.Subscribe("gem-totem:activated", (totemId) => { - totems[totemId] = true; - tryPower(); - }) - - setInterval(() => { - if (activated) { - Self.PlayAnimation("shimmer", null); - } - }, shimmerFreq); -} - -// Try to send a power signal for an activated totem. -function tryPower() { - // Only emit power if we are linked to something other than a totem. - if (!linkedReceiver) { - return; - } - - // Can't if any of our linked totems aren't activated. - try { - for (let totemId of Object.keys(totems)) { - if (totems[totemId] === false) { - return; - } - } - } catch(e) { - console.error("Caught: %s", e); - } - - // Can't if we aren't powered. - if (activated === false) { - return; - } - - // Emit power! - Message.Publish("power", true); -} \ No newline at end of file diff --git a/dev-assets/doodads/gems/yellow-1.png b/dev-assets/doodads/gems/yellow-1.png deleted file mode 100644 index 016d42a..0000000 Binary files a/dev-assets/doodads/gems/yellow-1.png and /dev/null differ diff --git a/dev-assets/doodads/gems/yellow-2.png b/dev-assets/doodads/gems/yellow-2.png deleted file mode 100644 index f602927..0000000 Binary files a/dev-assets/doodads/gems/yellow-2.png and /dev/null differ diff --git a/dev-assets/doodads/gems/yellow-3.png b/dev-assets/doodads/gems/yellow-3.png deleted file mode 100644 index fb9ac0f..0000000 Binary files a/dev-assets/doodads/gems/yellow-3.png and /dev/null differ diff --git a/dev-assets/doodads/gems/yellow-4.png b/dev-assets/doodads/gems/yellow-4.png deleted file mode 100644 index 904c7c9..0000000 Binary files a/dev-assets/doodads/gems/yellow-4.png and /dev/null differ diff --git a/dev-assets/doodads/mischievous.js b/dev-assets/doodads/mischievous.js deleted file mode 100644 index c7b4e0b..0000000 --- a/dev-assets/doodads/mischievous.js +++ /dev/null @@ -1,43 +0,0 @@ -function main() { - console.log("%s initialized!", Self.Doodad().Title); - - console.log(Object.keys(console)); - console.log(Object.keys(log)); - console.log(Object.keys(log.Config)); - console.log(Object.keys(Self.Canvas.Palette)); - console.log(Object.keys(Self.Canvas.Palette.Swatches[0])); - - Self.Canvas.Palette.Swatches[0].Color = RGBA(255, 0, 255, 255); - Self.Canvas.Palette.Swatches[1].Color = RGBA(0, 255, 255, 255); - console.log(Self.Canvas.Palette.Swatches); - log.Config.TimeFormat = "haha"; - - var colors = [ - RGBA(255, 0, 0, 255), - RGBA(255, 153, 0, 255), - RGBA(255, 255, 0, 255), - RGBA(0, 255, 0, 255), - RGBA(0, 153, 255, 255), - RGBA(0, 0, 255, 255), - RGBA(255, 0, 255, 255) - ]; - var colorIndex = 0; - setInterval(function() { - console.log("sticky tick"); - Self.Canvas.MaskColor = colors[colorIndex]; - colorIndex++; - if (colorIndex == colors.length) { - colorIndex = 0; - } - }, 100); - - // log.Config.Colors = 0; // panics, can't set a golog.Color - - Events.OnCollide( function() { - - Self.ShowLayer(1); - setTimeout(function() { - Self.ShowLayer(0); - }, 200); - }) -} diff --git a/dev-assets/doodads/objects/Makefile b/dev-assets/doodads/objects/Makefile deleted file mode 100644 index e79ee47..0000000 --- a/dev-assets/doodads/objects/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -ALL: build - -.PHONY: build -build: - # Start Flag - doodad convert -t "Start Flag" start-flag.png start-flag.doodad - doodad install-script start-flag.js 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 - - # Checkpoint Flag - doodad convert -t "Checkpoint Flag" checkpoint-active.png \ - checkpoint-inactive.png checkpoint-flag.doodad - doodad install-script checkpoint-flag.js checkpoint-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};\ - done - cp *.doodad ../../../assets/doodads/ \ No newline at end of file diff --git a/dev-assets/doodads/objects/anvil.js b/dev-assets/doodads/objects/anvil.js deleted file mode 100644 index 8ea5d59..0000000 --- a/dev-assets/doodads/objects/anvil.js +++ /dev/null @@ -1,52 +0,0 @@ -// 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); - Self.SetInvulnerable(true); - - // Monitor our Y position to tell if we've been falling. - let lastPoint = Self.Position(); - setInterval(() => { - let nowAt = Self.Position(); - if (nowAt.Y > lastPoint.Y) { - falling = true; - } else { - falling = false; - } - lastPoint = nowAt; - }, 100); - - Events.OnCollide((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() && !e.Actor.Invulnerable()) { - // Destroy mobile doodads. - Sound.Play("crumbly-break.wav"); - e.Actor.Destroy(); - } - } - } - }); - - // When we receive power, we reset to our original position. - let origPoint = Self.Position(); - Message.Subscribe("power", (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 deleted file mode 100644 index 205becc..0000000 Binary files a/dev-assets/doodads/objects/anvil.png and /dev/null differ diff --git a/dev-assets/doodads/objects/checkpoint-active.png b/dev-assets/doodads/objects/checkpoint-active.png deleted file mode 100644 index d8d9503..0000000 Binary files a/dev-assets/doodads/objects/checkpoint-active.png and /dev/null differ diff --git a/dev-assets/doodads/objects/checkpoint-flag.js b/dev-assets/doodads/objects/checkpoint-flag.js deleted file mode 100644 index 5b28815..0000000 --- a/dev-assets/doodads/objects/checkpoint-flag.js +++ /dev/null @@ -1,58 +0,0 @@ -// Checkpoint Flag. -var isCurrentCheckpoint = false, - playerEntered = false - broadcastCooldown = time.Now(); - -function main() { - Self.SetHitbox(22 + 16, 16, 75 - 16, 86); - setActive(false); - - // If the checkpoint is linked to any doodad, the player character will - // become that doodad when they cross this checkpoint. - let skin = null; - for (let actor of Self.GetLinks()) { - skin = actor.Filename; - actor.Destroy(); - } - - // Checkpoints broadcast to all of their peers so they all - // know which one is the most recently activated. - Message.Subscribe("broadcast:checkpoint", (currentID) => { - setActive(false); - return "a ok"; - }); - - Events.OnCollide((e) => { - if (!e.Settled) { - return; - } - - // Only care about the player character. - if (!e.Actor.IsPlayer()) { - return; - } - - SetCheckpoint(Self.Position()); - setActive(true); - - // Don't spam the PubSub queue or we get races and deadlocks. - if (time.Now().After(broadcastCooldown)) { - Message.Broadcast("broadcast:checkpoint", Self.ID()); - broadcastCooldown = time.Now().Add(5 * time.Second) - } - - // Are we setting a new player skin? - if (skin && e.Actor.Doodad().Filename !== skin) { - Actors.SetPlayerCharacter(skin); - } - }); -} - -function setActive(v) { - if (v && !isCurrentCheckpoint) { - Flash("Checkpoint!"); - } - - isCurrentCheckpoint = v; - Self.ShowLayerNamed(v ? "checkpoint-active" : "checkpoint-inactive"); -} diff --git a/dev-assets/doodads/objects/checkpoint-inactive.png b/dev-assets/doodads/objects/checkpoint-inactive.png deleted file mode 100644 index 6781ff9..0000000 Binary files a/dev-assets/doodads/objects/checkpoint-inactive.png and /dev/null differ diff --git a/dev-assets/doodads/objects/exit-flag.js b/dev-assets/doodads/objects/exit-flag.js deleted file mode 100644 index d45a754..0000000 --- a/dev-assets/doodads/objects/exit-flag.js +++ /dev/null @@ -1,19 +0,0 @@ -// Exit Flag. -function main() { - Self.SetHitbox(22 + 16, 16, 75 - 16, 86); - - Events.OnCollide((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/objects/exit-flag.png b/dev-assets/doodads/objects/exit-flag.png deleted file mode 100644 index 585152d..0000000 Binary files a/dev-assets/doodads/objects/exit-flag.png and /dev/null differ diff --git a/dev-assets/doodads/objects/start-flag.js b/dev-assets/doodads/objects/start-flag.js deleted file mode 100644 index f215651..0000000 --- a/dev-assets/doodads/objects/start-flag.js +++ /dev/null @@ -1,10 +0,0 @@ -// Start Flag. -function main() { - Self.SetHitbox(22 + 16, 16, 75 - 16, 86); - - // Linking a doodad to the Start Flag sets the - // player character. Destroy the original doodads. - for (var link of Self.GetLinks()) { - link.Destroy(); - } -} diff --git a/dev-assets/doodads/objects/start-flag.png b/dev-assets/doodads/objects/start-flag.png deleted file mode 100644 index 125550e..0000000 Binary files a/dev-assets/doodads/objects/start-flag.png and /dev/null differ diff --git a/dev-assets/doodads/on-off/Makefile b/dev-assets/doodads/on-off/Makefile deleted file mode 100644 index 32eae08..0000000 --- a/dev-assets/doodads/on-off/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -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/on-off/blue-button.png b/dev-assets/doodads/on-off/blue-button.png deleted file mode 100644 index 9df37be..0000000 Binary files a/dev-assets/doodads/on-off/blue-button.png and /dev/null differ diff --git a/dev-assets/doodads/on-off/blue-off.png b/dev-assets/doodads/on-off/blue-off.png deleted file mode 100644 index 1375fe6..0000000 Binary files a/dev-assets/doodads/on-off/blue-off.png and /dev/null differ diff --git a/dev-assets/doodads/on-off/blue-on.png b/dev-assets/doodads/on-off/blue-on.png deleted file mode 100644 index 20cc9ba..0000000 Binary files a/dev-assets/doodads/on-off/blue-on.png and /dev/null differ diff --git a/dev-assets/doodads/on-off/orange-button.png b/dev-assets/doodads/on-off/orange-button.png deleted file mode 100644 index fbf2cde..0000000 Binary files a/dev-assets/doodads/on-off/orange-button.png and /dev/null differ diff --git a/dev-assets/doodads/on-off/orange-off.png b/dev-assets/doodads/on-off/orange-off.png deleted file mode 100644 index e2fa95e..0000000 Binary files a/dev-assets/doodads/on-off/orange-off.png and /dev/null differ diff --git a/dev-assets/doodads/on-off/orange-on.png b/dev-assets/doodads/on-off/orange-on.png deleted file mode 100644 index 0aaae44..0000000 Binary files a/dev-assets/doodads/on-off/orange-on.png and /dev/null differ diff --git a/dev-assets/doodads/on-off/state-block-blue.js b/dev-assets/doodads/on-off/state-block-blue.js deleted file mode 100644 index 16e1421..0000000 --- a/dev-assets/doodads/on-off/state-block-blue.js +++ /dev/null @@ -1,23 +0,0 @@ -// Blue State Block -function main() { - Self.SetHitbox(0, 0, 42, 42); - - // Blue block is ON by default. - let state = true; - - Message.Subscribe("broadcast:state-change", (newState) => { - state = !newState; - - // Layer 0: ON - // Layer 1: OFF - Self.ShowLayer(state ? 0 : 1); - }); - - Events.OnCollide((e) => { - if (e.Actor.IsMobile() && e.InHitbox) { - if (state) { - return false; - } - } - }); -} diff --git a/dev-assets/doodads/on-off/state-block-orange.js b/dev-assets/doodads/on-off/state-block-orange.js deleted file mode 100644 index 7e3d518..0000000 --- a/dev-assets/doodads/on-off/state-block-orange.js +++ /dev/null @@ -1,23 +0,0 @@ -// Orange State Block -function main() { - Self.SetHitbox(0, 0, 42, 42); - - // Orange block is OFF by default. - let state = false; - - Message.Subscribe("broadcast:state-change", (newState) => { - state = newState; - - // Layer 0: OFF - // Layer 1: ON - Self.ShowLayer(state ? 1 : 0); - }); - - Events.OnCollide((e) => { - if (e.Actor.IsMobile() && e.InHitbox) { - if (state) { - return false; - } - } - }); -} diff --git a/dev-assets/doodads/on-off/state-button.js b/dev-assets/doodads/on-off/state-button.js deleted file mode 100644 index 291260c..0000000 --- a/dev-assets/doodads/on-off/state-button.js +++ /dev/null @@ -1,55 +0,0 @@ -// State Block Control Button - -// Button is "OFF" by default. -let state = false; - -function main() { - Self.SetHitbox(0, 0, 42, 42); - - // When the button is activated, don't keep toggling state until we're not - // being touched again. - let colliding = false; - - // If we receive a state change event from a DIFFERENT on/off button, update - // ourself to match the state received. - Message.Subscribe("broadcast:state-change", (value) => { - state = value; - showSprite(); - }); - - Events.OnCollide((e) => { - if (colliding) { - return false; - } - - // Only trigger for mobile characters. - if (e.Actor.IsMobile()) { - // Only activate if touched from the bottom or sides. - if (e.Overlap.Y === 0) { - return false; - } - - colliding = true; - state = !state; - Message.Broadcast("broadcast:state-change", state); - - showSprite(); - } - - // Always a solid button. - return false; - }); - - Events.OnLeave((e) => { - colliding = false; - }) -} - -// Update the active layer based on the current button state. -function showSprite() { - if (state) { - Self.ShowLayer(1); - } else { - Self.ShowLayer(0); - } -} diff --git a/dev-assets/doodads/palette.json b/dev-assets/doodads/palette.json deleted file mode 100644 index a2f9e19..0000000 --- a/dev-assets/doodads/palette.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "#000000": { - "name": "black" - }, - "#666666": { - "name": "dark-grey" - }, - "#999999": { - "name": "grey" - }, - "#CCCCCC": { - "name": "light-grey" - }, - "#FF0000": { - "name": "red" - }, - "#0099FF": { - "name": "light-blue" - }, - "#0000FF": { - "name": "blue" - }, - "#009900": { - "name": "green" - }, - "#999900": { - "name": "gold" - }, - "#4D391B": { - "name": "brown" - }, - "#8B652C": { - "name": "light-brown" - } -} diff --git a/dev-assets/doodads/regions/Makefile b/dev-assets/doodads/regions/Makefile deleted file mode 100644 index 1c3f568..0000000 --- a/dev-assets/doodads/regions/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -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 - - # Checkpoint Region - doodad convert -t "Checkpoint Region" checkpoint-128.png reg-checkpoint.doodad - doodad install-script checkpoint.js reg-checkpoint.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 - - # Warp Door - doodad convert -t "Invisible Warp Door" warp-door-64.png reg-warp-door.doodad - 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 - cp *.doodad ../../../assets/doodads/ diff --git a/dev-assets/doodads/regions/checkpoint-128.png b/dev-assets/doodads/regions/checkpoint-128.png deleted file mode 100644 index 13766e6..0000000 Binary files a/dev-assets/doodads/regions/checkpoint-128.png and /dev/null differ diff --git a/dev-assets/doodads/regions/checkpoint.js b/dev-assets/doodads/regions/checkpoint.js deleted file mode 100644 index 1645f69..0000000 --- a/dev-assets/doodads/regions/checkpoint.js +++ /dev/null @@ -1,38 +0,0 @@ -// Checkpoint Region -// Acts like an invisible checkpoint flag. -var isCurrentCheckpoint = false; - -function main() { - Self.Hide(); - setActive(false); - - // Checkpoints broadcast to all of their peers so they all - // know which one is the most recently activated. - Message.Subscribe("broadcast:checkpoint", (currentID) => { - setActive(false); - }); - - Events.OnCollide((e) => { - if (isCurrentCheckpoint || !e.Settled) { - return; - } - - // Only care about the player character. - if (!e.Actor.IsPlayer()) { - return; - } - - // Set the player checkpoint. - SetCheckpoint(Self.Position()); - setActive(true); - Message.Broadcast("broadcast:checkpoint", Self.ID()) - }); -} - -function setActive(v) { - if (v && !isCurrentCheckpoint) { - Flash("Checkpoint!"); - } - - isCurrentCheckpoint = v; -} diff --git a/dev-assets/doodads/regions/fire-128.png b/dev-assets/doodads/regions/fire-128.png deleted file mode 100644 index 117a231..0000000 Binary files a/dev-assets/doodads/regions/fire-128.png and /dev/null differ diff --git a/dev-assets/doodads/regions/fire.js b/dev-assets/doodads/regions/fire.js deleted file mode 100644 index 977537a..0000000 --- a/dev-assets/doodads/regions/fire.js +++ /dev/null @@ -1,19 +0,0 @@ -// Goal Region. -function main() { - Self.Hide(); - - Events.OnCollide((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 deleted file mode 100644 index c93dd3c..0000000 Binary files a/dev-assets/doodads/regions/goal-128.png and /dev/null differ diff --git a/dev-assets/doodads/regions/goal.js b/dev-assets/doodads/regions/goal.js deleted file mode 100644 index 6157c9d..0000000 --- a/dev-assets/doodads/regions/goal.js +++ /dev/null @@ -1,19 +0,0 @@ -// Goal Region. -function main() { - Self.Hide(); - - Events.OnCollide((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 deleted file mode 100644 index fcdab41..0000000 Binary files a/dev-assets/doodads/regions/power-128.png and /dev/null differ diff --git a/dev-assets/doodads/regions/power-64.png b/dev-assets/doodads/regions/power-64.png deleted file mode 100644 index 14a743c..0000000 Binary files a/dev-assets/doodads/regions/power-64.png and /dev/null differ diff --git a/dev-assets/doodads/regions/power.js b/dev-assets/doodads/regions/power.js deleted file mode 100644 index 6b555a3..0000000 --- a/dev-assets/doodads/regions/power.js +++ /dev/null @@ -1,22 +0,0 @@ -// 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", () => { - Message.Publish("switch:toggle", true); - Message.Publish("power", true); - }); -} diff --git a/dev-assets/doodads/regions/reset-timer.js b/dev-assets/doodads/regions/reset-timer.js deleted file mode 100644 index eb12c60..0000000 --- a/dev-assets/doodads/regions/reset-timer.js +++ /dev/null @@ -1,30 +0,0 @@ -// 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/stall-128.png b/dev-assets/doodads/regions/stall-128.png deleted file mode 100644 index ea0bd5e..0000000 Binary files a/dev-assets/doodads/regions/stall-128.png and /dev/null differ diff --git a/dev-assets/doodads/regions/stall.js b/dev-assets/doodads/regions/stall.js deleted file mode 100644 index 56cf5d4..0000000 --- a/dev-assets/doodads/regions/stall.js +++ /dev/null @@ -1,40 +0,0 @@ -// Stall Player. -// Tags: ms (int) -// Grabs the player one time. Resets if it receives power. -function main() { - Self.Hide(); - - let active = true, - timeout = 250, - ms = Self.GetTag("ms"); - - if (ms.length > 0) { - timeout = parseInt(ms); - } - - Events.OnCollide((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(() => { - e.Actor.Unfreeze(); - }, timeout); - - active = false; - } - }); - - // Reset the trap if powered by a button. - Message.Subscribe("power", (powered) => { - active = true; - }); -} diff --git a/dev-assets/doodads/regions/timer-64.png b/dev-assets/doodads/regions/timer-64.png deleted file mode 100644 index 4c55879..0000000 Binary files a/dev-assets/doodads/regions/timer-64.png and /dev/null differ diff --git a/dev-assets/doodads/regions/warp-door-64.png b/dev-assets/doodads/regions/warp-door-64.png deleted file mode 100644 index f2b31d4..0000000 Binary files a/dev-assets/doodads/regions/warp-door-64.png and /dev/null differ diff --git a/dev-assets/doodads/snake/Makefile b/dev-assets/doodads/snake/Makefile deleted file mode 100644 index 6fa8016..0000000 --- a/dev-assets/doodads/snake/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -ALL: build - -.PHONY: build -build: - doodad convert -t "Snake" left-1.png left-2.png left-3.png right-1.png right-2.png right-3.png \ - attack-left-1.png attack-left-2.png attack-left-3.png attack-right-1.png attack-right-2.png \ - attack-right-3.png snake.doodad - doodad install-script snake.js snake.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/snake/attack-left-1.png b/dev-assets/doodads/snake/attack-left-1.png deleted file mode 100644 index d7e3cdf..0000000 Binary files a/dev-assets/doodads/snake/attack-left-1.png and /dev/null differ diff --git a/dev-assets/doodads/snake/attack-left-2.png b/dev-assets/doodads/snake/attack-left-2.png deleted file mode 100644 index 8fec20b..0000000 Binary files a/dev-assets/doodads/snake/attack-left-2.png and /dev/null differ diff --git a/dev-assets/doodads/snake/attack-left-3.png b/dev-assets/doodads/snake/attack-left-3.png deleted file mode 100644 index 00948cd..0000000 Binary files a/dev-assets/doodads/snake/attack-left-3.png and /dev/null differ diff --git a/dev-assets/doodads/snake/attack-right-1.png b/dev-assets/doodads/snake/attack-right-1.png deleted file mode 100644 index 06f935e..0000000 Binary files a/dev-assets/doodads/snake/attack-right-1.png and /dev/null differ diff --git a/dev-assets/doodads/snake/attack-right-2.png b/dev-assets/doodads/snake/attack-right-2.png deleted file mode 100644 index 6bbef9c..0000000 Binary files a/dev-assets/doodads/snake/attack-right-2.png and /dev/null differ diff --git a/dev-assets/doodads/snake/attack-right-3.png b/dev-assets/doodads/snake/attack-right-3.png deleted file mode 100644 index e71d3cb..0000000 Binary files a/dev-assets/doodads/snake/attack-right-3.png and /dev/null differ diff --git a/dev-assets/doodads/snake/left-1.png b/dev-assets/doodads/snake/left-1.png deleted file mode 100644 index 9c76386..0000000 Binary files a/dev-assets/doodads/snake/left-1.png and /dev/null differ diff --git a/dev-assets/doodads/snake/left-2.png b/dev-assets/doodads/snake/left-2.png deleted file mode 100644 index f86887a..0000000 Binary files a/dev-assets/doodads/snake/left-2.png and /dev/null differ diff --git a/dev-assets/doodads/snake/left-3.png b/dev-assets/doodads/snake/left-3.png deleted file mode 100644 index 9c8eedb..0000000 Binary files a/dev-assets/doodads/snake/left-3.png and /dev/null differ diff --git a/dev-assets/doodads/snake/right-1.png b/dev-assets/doodads/snake/right-1.png deleted file mode 100644 index 571b070..0000000 Binary files a/dev-assets/doodads/snake/right-1.png and /dev/null differ diff --git a/dev-assets/doodads/snake/right-2.png b/dev-assets/doodads/snake/right-2.png deleted file mode 100644 index 37828ce..0000000 Binary files a/dev-assets/doodads/snake/right-2.png and /dev/null differ diff --git a/dev-assets/doodads/snake/right-3.png b/dev-assets/doodads/snake/right-3.png deleted file mode 100644 index 6b7b90c..0000000 Binary files a/dev-assets/doodads/snake/right-3.png and /dev/null differ diff --git a/dev-assets/doodads/snake/snake.js b/dev-assets/doodads/snake/snake.js deleted file mode 100644 index 952f742..0000000 --- a/dev-assets/doodads/snake/snake.js +++ /dev/null @@ -1,131 +0,0 @@ -// Snake - -/* -A.I. Behaviors: - -- Always turns to face the nearest player character -- Jumps up when the player tries to jump over them, - aiming to attack the player. -*/ - -let direction = "left", - jumpSpeed = 12, - watchRadius = 300, // player nearby distance for snake to jump - jumpCooldownStart = time.Now(), - size = Self.Size(); - -const states = { - idle: 0, - attacking: 1, -}; -let state = states.idle; - -function main() { - Self.SetMobile(true); - Self.SetGravity(true); - Self.SetHitbox(20, 0, 28, 58); - Self.AddAnimation("idle-left", 100, ["left-1", "left-2", "left-3", "left-2"]); - Self.AddAnimation("idle-right", 100, ["right-1", "right-2", "right-3", "right-2"]); - Self.AddAnimation("attack-left", 100, ["attack-left-1", "attack-left-2", "attack-left-3"]) - Self.AddAnimation("attack-right", 100, ["attack-right-1", "attack-right-2", "attack-right-3"]) - - // Player Character controls? - if (Self.IsPlayer()) { - return player(); - } - - Events.OnCollide((e) => { - // The snake is deadly to the touch. - if (e.Settled && e.Actor.IsPlayer() && e.InHitbox) { - // Friendly to fellow snakes. - if (e.Actor.Doodad().Filename.indexOf("snake") > -1) { - return; - } - - FailLevel("Watch out for snakes!"); - return; - } - }); - - setInterval(() => { - // Find the player. - let player = Actors.FindPlayer(), - playerPoint = player.Position(), - point = Self.Position(), - delta = 0, - nearby = false; - - // Face the player. - if (playerPoint.X < point.X + (size.W / 2)) { - direction = "left"; - delta = Math.abs(playerPoint.X - (point.X + (size.W/2))); - } - else if (playerPoint.X > point.X + (size.W / 2)) { - direction = "right"; - delta = Math.abs(playerPoint.X - (point.X + (size.W/2))); - } - - if (delta < watchRadius) { - nearby = true; - } - - // If we are idle and the player is jumping nearby... - if (state == states.idle && nearby && Self.Grounded()) { - if (playerPoint.Y - point.Y+(size.H/2) < 20) { - // Enter attack state. - if (time.Since(jumpCooldownStart) > 500 * time.Millisecond) { - state = states.attacking; - Self.SetVelocity(Vector(0, -jumpSpeed)); - Self.StopAnimation(); - Self.PlayAnimation("attack-"+direction, null); - return; - } - } - } - - // If we are attacking and gravity has claimed us back. - if (state === states.attacking && Self.Grounded()) { - state = states.idle; - jumpCooldownStart = time.Now(); - Self.StopAnimation(); - } - - // Ensure that the animations are always rolling. - if (state === states.idle && !Self.IsAnimating()) { - Self.PlayAnimation("idle-"+direction, null); - } - }, 100); -} - -// If under control of the player character. -function player() { - let jumping = false; - - Events.OnKeypress((ev) => { - Vx = 0; - Vy = 0; - - if (ev.Right) { - direction = "right"; - } else if (ev.Left) { - direction = "left"; - } - - // Jump! - if (ev.Up && !jumping) { - Self.StopAnimation(); - Self.PlayAnimation("attack-"+direction, null); - jumping = true; - return; - } - - if (jumping && Self.Grounded()) { - Self.StopAnimation(); - jumping = false; - } - - if (!jumping && !Self.IsAnimating()) { - Self.PlayAnimation("idle-"+direction, null); - } - }); -} diff --git a/dev-assets/doodads/switches/Makefile b/dev-assets/doodads/switches/Makefile deleted file mode 100644 index b603c1f..0000000 --- a/dev-assets/doodads/switches/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -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/switches/down-off.png b/dev-assets/doodads/switches/down-off.png deleted file mode 100644 index 2b08ca0..0000000 Binary files a/dev-assets/doodads/switches/down-off.png and /dev/null differ diff --git a/dev-assets/doodads/switches/down-on.png b/dev-assets/doodads/switches/down-on.png deleted file mode 100644 index 527b2a0..0000000 Binary files a/dev-assets/doodads/switches/down-on.png and /dev/null differ diff --git a/dev-assets/doodads/switches/left-off.png b/dev-assets/doodads/switches/left-off.png deleted file mode 100644 index 33acceb..0000000 Binary files a/dev-assets/doodads/switches/left-off.png and /dev/null differ diff --git a/dev-assets/doodads/switches/left-on.png b/dev-assets/doodads/switches/left-on.png deleted file mode 100644 index 36d5c45..0000000 Binary files a/dev-assets/doodads/switches/left-on.png and /dev/null differ diff --git a/dev-assets/doodads/switches/right-off.png b/dev-assets/doodads/switches/right-off.png deleted file mode 100644 index 500e65c..0000000 Binary files a/dev-assets/doodads/switches/right-off.png and /dev/null differ diff --git a/dev-assets/doodads/switches/right-on.png b/dev-assets/doodads/switches/right-on.png deleted file mode 100644 index c5a196e..0000000 Binary files a/dev-assets/doodads/switches/right-on.png and /dev/null differ diff --git a/dev-assets/doodads/switches/switch-off.png b/dev-assets/doodads/switches/switch-off.png deleted file mode 100644 index 4e7c006..0000000 Binary files a/dev-assets/doodads/switches/switch-off.png and /dev/null differ diff --git a/dev-assets/doodads/switches/switch-on.png b/dev-assets/doodads/switches/switch-on.png deleted file mode 100644 index bb191ce..0000000 Binary files a/dev-assets/doodads/switches/switch-on.png and /dev/null differ diff --git a/dev-assets/doodads/switches/switch.js b/dev-assets/doodads/switches/switch.js deleted file mode 100644 index 99fa153..0000000 --- a/dev-assets/doodads/switches/switch.js +++ /dev/null @@ -1,44 +0,0 @@ -function main() { - - // Switch has two frames: - // 0: Off - // 1: On - - let state = false; - let collide = false; - - Message.Subscribe("power", (powered) => { - state = powered; - showState(state); - }); - - Events.OnCollide((e) => { - if (!e.Settled || !e.Actor.IsMobile()) { - return; - } - - if (collide === false) { - Sound.Play("button-down.wav") - state = !state; - - Message.Publish("switch:toggle", state); - Message.Publish("power", state); - showState(state); - - collide = true; - } - }); - - Events.OnLeave((e) => { - collide = false; - }); -} - -// showState shows the on/off frame based on the boolean powered state. -function showState(state) { - if (state) { - Self.ShowLayer(1); - } else { - Self.ShowLayer(0); - } -} diff --git a/dev-assets/doodads/test/index.js b/dev-assets/doodads/test/index.js deleted file mode 100644 index 07ee2f7..0000000 --- a/dev-assets/doodads/test/index.js +++ /dev/null @@ -1,13 +0,0 @@ -// Test Doodad Script -function main() { - console.log("I am actor ID " + Self.ID()); - - // Set our doodad's background color to pink. It will be turned - // red whenever something collides with us. - Self.Canvas.SetBackground(RGBA(255, 153, 255, 153)); - - Events.OnCollide( function(e) { - console.log("Collided with something!"); - Self.Canvas.SetBackground(RGBA(255, 0, 0, 153)); - }); -} diff --git a/dev-assets/doodads/thief/Makefile b/dev-assets/doodads/thief/Makefile deleted file mode 100644 index 1d7a149..0000000 --- a/dev-assets/doodads/thief/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -SHELL = /bin/bash - -ALL: build - -.PHONY: build -build: - doodad convert -t "Thief" stand-right.png stand-left.png \ - walk-right-{1,2,3}.png walk-left-{1,2,3}.png \ - thief.doodad - doodad install-script thief.js thief.doodad - - doodad edit-doodad --tag "category=creatures" thief.doodad - - cp *.doodad ../../../assets/doodads/ diff --git a/dev-assets/doodads/thief/stand-left.png b/dev-assets/doodads/thief/stand-left.png deleted file mode 100644 index 9dc96b5..0000000 Binary files a/dev-assets/doodads/thief/stand-left.png and /dev/null differ diff --git a/dev-assets/doodads/thief/stand-right.png b/dev-assets/doodads/thief/stand-right.png deleted file mode 100644 index 96b5f13..0000000 Binary files a/dev-assets/doodads/thief/stand-right.png and /dev/null differ diff --git a/dev-assets/doodads/thief/thief.js b/dev-assets/doodads/thief/thief.js deleted file mode 100644 index 77c2a70..0000000 --- a/dev-assets/doodads/thief/thief.js +++ /dev/null @@ -1,123 +0,0 @@ -// Thief - -function main() { - Self.SetMobile(true); - Self.SetGravity(true); - Self.SetInventory(true); - Self.SetHitbox(0, 0, 32, 58); - Self.AddAnimation("walk-left", 200, ["stand-left", "walk-left-1", "walk-left-2", "walk-left-3", "walk-left-2", "walk-left-1"]); - Self.AddAnimation("walk-right", 200, ["stand-right", "walk-right-1", "walk-right-2", "walk-right-3", "walk-right-2", "walk-right-1"]); - - // All thieves can steal items. - stealable(); - - // Controlled by the player character? - if (Self.IsPlayer()) { - return playable(); - } - return ai(); -} - -// Common "steal" power between playable and A.I. thieves. -function stealable() { - // Steals your items. - Events.OnCollide((e) => { - let victim = e.Actor; - if (!e.Settled) { - return; - } - - // Thieves don't steal from Thieves (unless controlled by the player). - if (!Self.IsPlayer() && victim.Drawing.Doodad.Filename === "thief.doodad") { - return; - } - - // Steal inventory - let stolen = 0; - if (victim.HasInventory()) { - let myInventory = Self.Inventory(), - theirInventory = victim.Inventory(); - - for (let key in theirInventory) { - if (!theirInventory.hasOwnProperty(key)) { - continue; - } - - let value = theirInventory[key]; - if (value > 0 || myInventory[key] === undefined) { - victim.RemoveItem(key, value); - Self.AddItem(key, value); - stolen += (value === 0 ? 1 : value); - } - } - - // If the player lost their items, notify them. - if (victim.IsPlayer() && stolen > 0) { - Flash("Watch out for thieves! %d item%s stolen!", parseInt(stolen), stolen === 1 ? ' was' : 's were'); - } - - // If the Thief IS the player, notify your earnings. - if (Self.IsPlayer() && stolen > 0) { - Flash("Awesome! Stole %d item%s from the %s!", parseInt(stolen), stolen === 1 ? '' : 's', e.Actor.Drawing.Doodad.Title); - } - } - }); -} - -// Enemy Doodad AI: walks back and forth, changing direction -// when it encounters and obstacle. -function ai() { - // Walks back and forth. - let Vx = Vy = 0.0, - playerSpeed = 4, - direction = "right", - lastDirection = "right", - lastSampledX = 0, - sampleTick = 0, - sampleRate = 2; - - setInterval(() => { - if (sampleTick % sampleRate === 0) { - let curX = Self.Position().X, - delta = Math.abs(curX - lastSampledX); - if (delta < 5) { - direction = direction === "right" ? "left" : "right"; - } - lastSampledX = curX; - } - sampleTick++; - - Vx = parseFloat(playerSpeed * (direction === "left" ? -1 : 1)); - Self.SetVelocity(Vector(Vx, Vy)); - - // If we changed directions, stop animating now so we can - // turn around quickly without moonwalking. - if (direction !== lastDirection) { - Self.StopAnimation(); - } - - if (!Self.IsAnimating()) { - Self.PlayAnimation("walk-" + direction, null); - } - - lastDirection = direction; - }, 100); -} - -// If under control of the player character. -function playable() { - Events.OnKeypress((ev) => { - if (ev.Right) { - if (!Self.IsAnimating()) { - Self.PlayAnimation("walk-right", null); - } - } else if (ev.Left) { - if (!Self.IsAnimating()) { - Self.PlayAnimation("walk-left", null); - } - } else { - Self.StopAnimation(); - animating = false; - } - }) -} diff --git a/dev-assets/doodads/thief/walk-left-1.png b/dev-assets/doodads/thief/walk-left-1.png deleted file mode 100644 index 5e0e16d..0000000 Binary files a/dev-assets/doodads/thief/walk-left-1.png and /dev/null differ diff --git a/dev-assets/doodads/thief/walk-left-2.png b/dev-assets/doodads/thief/walk-left-2.png deleted file mode 100644 index 402e8d0..0000000 Binary files a/dev-assets/doodads/thief/walk-left-2.png and /dev/null differ diff --git a/dev-assets/doodads/thief/walk-left-3.png b/dev-assets/doodads/thief/walk-left-3.png deleted file mode 100644 index 352a45c..0000000 Binary files a/dev-assets/doodads/thief/walk-left-3.png and /dev/null differ diff --git a/dev-assets/doodads/thief/walk-right-1.png b/dev-assets/doodads/thief/walk-right-1.png deleted file mode 100644 index 138d9a4..0000000 Binary files a/dev-assets/doodads/thief/walk-right-1.png and /dev/null differ diff --git a/dev-assets/doodads/thief/walk-right-2.png b/dev-assets/doodads/thief/walk-right-2.png deleted file mode 100644 index 2e33928..0000000 Binary files a/dev-assets/doodads/thief/walk-right-2.png and /dev/null differ diff --git a/dev-assets/doodads/thief/walk-right-3.png b/dev-assets/doodads/thief/walk-right-3.png deleted file mode 100644 index e0b6244..0000000 Binary files a/dev-assets/doodads/thief/walk-right-3.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/Makefile b/dev-assets/doodads/trapdoors/Makefile deleted file mode 100644 index 596c1b2..0000000 --- a/dev-assets/doodads/trapdoors/Makefile +++ /dev/null @@ -1,34 +0,0 @@ -SHELL = /bin/bash - -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/ diff --git a/dev-assets/doodads/trapdoors/README.md b/dev-assets/doodads/trapdoors/README.md deleted file mode 100644 index 02d30b2..0000000 --- a/dev-assets/doodads/trapdoors/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Button Doodads - -```bash -doodad convert -t "Trapdoor Down" down{1,2,3}.png trapdoor-down.doodad -``` diff --git a/dev-assets/doodads/trapdoors/down.gif b/dev-assets/doodads/trapdoors/down.gif deleted file mode 100644 index 07a1fc9..0000000 Binary files a/dev-assets/doodads/trapdoors/down.gif and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/down1.png b/dev-assets/doodads/trapdoors/down1.png deleted file mode 100644 index f4871d5..0000000 Binary files a/dev-assets/doodads/trapdoors/down1.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/down2.png b/dev-assets/doodads/trapdoors/down2.png deleted file mode 100644 index 62adb46..0000000 Binary files a/dev-assets/doodads/trapdoors/down2.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/down3.png b/dev-assets/doodads/trapdoors/down3.png deleted file mode 100644 index 6c1f191..0000000 Binary files a/dev-assets/doodads/trapdoors/down3.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/down4.png b/dev-assets/doodads/trapdoors/down4.png deleted file mode 100644 index a15da36..0000000 Binary files a/dev-assets/doodads/trapdoors/down4.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/electric-trapdoor.js b/dev-assets/doodads/trapdoors/electric-trapdoor.js deleted file mode 100644 index 836f662..0000000 --- a/dev-assets/doodads/trapdoors/electric-trapdoor.js +++ /dev/null @@ -1,65 +0,0 @@ -// 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; - - // Had we lost power quickly? - if (!powerState) { - setPoweredState(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 deleted file mode 100644 index bc9138f..0000000 Binary files a/dev-assets/doodads/trapdoors/electric1.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/electric2.png b/dev-assets/doodads/trapdoors/electric2.png deleted file mode 100644 index 139d9c8..0000000 Binary files a/dev-assets/doodads/trapdoors/electric2.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/electric3.png b/dev-assets/doodads/trapdoors/electric3.png deleted file mode 100644 index 6b33049..0000000 Binary files a/dev-assets/doodads/trapdoors/electric3.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/electric4.png b/dev-assets/doodads/trapdoors/electric4.png deleted file mode 100644 index 97b9bac..0000000 Binary files a/dev-assets/doodads/trapdoors/electric4.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/left1.png b/dev-assets/doodads/trapdoors/left1.png deleted file mode 100644 index 6bb04d2..0000000 Binary files a/dev-assets/doodads/trapdoors/left1.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/left2.png b/dev-assets/doodads/trapdoors/left2.png deleted file mode 100644 index cd29dd5..0000000 Binary files a/dev-assets/doodads/trapdoors/left2.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/left3.png b/dev-assets/doodads/trapdoors/left3.png deleted file mode 100644 index b7cbb41..0000000 Binary files a/dev-assets/doodads/trapdoors/left3.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/left4.png b/dev-assets/doodads/trapdoors/left4.png deleted file mode 100644 index dec5a61..0000000 Binary files a/dev-assets/doodads/trapdoors/left4.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/right1.png b/dev-assets/doodads/trapdoors/right1.png deleted file mode 100644 index 5ac6228..0000000 Binary files a/dev-assets/doodads/trapdoors/right1.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/right2.png b/dev-assets/doodads/trapdoors/right2.png deleted file mode 100644 index e7f33d4..0000000 Binary files a/dev-assets/doodads/trapdoors/right2.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/right3.png b/dev-assets/doodads/trapdoors/right3.png deleted file mode 100644 index 88ee3db..0000000 Binary files a/dev-assets/doodads/trapdoors/right3.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/right4.png b/dev-assets/doodads/trapdoors/right4.png deleted file mode 100644 index 8c0d01d..0000000 Binary files a/dev-assets/doodads/trapdoors/right4.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/trapdoor.js b/dev-assets/doodads/trapdoors/trapdoor.js deleted file mode 100644 index 9bb6d70..0000000 --- a/dev-assets/doodads/trapdoors/trapdoor.js +++ /dev/null @@ -1,88 +0,0 @@ -// Trapdoors. - -// What direction is the trapdoor facing? -const direction = Self.GetTag("direction"); - -function main() { - // Set our hitbox based on our orientation. - let thickness = 10; - let doodadSize = 86; - if (direction === "left") { - Self.SetHitbox(48, 0, doodadSize, doodadSize); - } else if (direction === "right") { - Self.SetHitbox(0, 0, thickness, doodadSize); - } else if (direction === "up") { - Self.SetHitbox(0, doodadSize - thickness, doodadSize, doodadSize); - } else { // Down, default. - Self.SetHitbox(0, 0, doodadSize, thickness); - } - - let animationSpeed = 100; - let opened = false; - - // Register our animations. - let frames = []; - for (let i = 1; i <= 4; i++) { - frames.push(direction + i); - } - - Self.AddAnimation("open", animationSpeed, frames); - frames.reverse(); - Self.AddAnimation("close", animationSpeed, frames); - - Events.OnCollide((e) => { - if (opened) { - return; - } - - // Is the actor colliding our solid part? - if (e.InHitbox) { - // Are they touching our opening side? - if (direction === "left") { - if (doodadSize - e.Overlap.X < thickness) { - // Touching the right edge, open the door. - opened = true; - Self.PlayAnimation("open", null); - return; - } - if (e.Overlap.W === doodadSize - thickness) { - return false; - } - } else if (direction === "right") { - if (e.Overlap.X > 0) { - return false; - } else if (e.Settled) { - opened = true; - Self.PlayAnimation("open", null); - } - } else if (direction === "up") { - if (doodadSize - e.Overlap.Y < thickness) { - // Touching the bottom edge, open the door. - opened = true; - Self.PlayAnimation("open", null); - return; - } - if (e.Overlap.H === doodadSize - thickness) { - return false; - } - } else if (direction === "down") { - if (e.Overlap.Y > 0) { - return false; - } else if (e.Settled) { - opened = true; - Self.PlayAnimation("open", null); - } - } - - return true; - } - }); - - Events.OnLeave(() => { - if (opened) { - Self.PlayAnimation("close", () => { - opened = false; - }); - } - }) -} diff --git a/dev-assets/doodads/trapdoors/up1.png b/dev-assets/doodads/trapdoors/up1.png deleted file mode 100644 index bc7830c..0000000 Binary files a/dev-assets/doodads/trapdoors/up1.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/up2.png b/dev-assets/doodads/trapdoors/up2.png deleted file mode 100644 index bd92a0c..0000000 Binary files a/dev-assets/doodads/trapdoors/up2.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/up3.png b/dev-assets/doodads/trapdoors/up3.png deleted file mode 100644 index a18640e..0000000 Binary files a/dev-assets/doodads/trapdoors/up3.png and /dev/null differ diff --git a/dev-assets/doodads/trapdoors/up4.png b/dev-assets/doodads/trapdoors/up4.png deleted file mode 100644 index dc68a2d..0000000 Binary files a/dev-assets/doodads/trapdoors/up4.png and /dev/null differ diff --git a/dev-assets/doodads/warp-door/Makefile b/dev-assets/doodads/warp-door/Makefile deleted file mode 100644 index 90d80b2..0000000 --- a/dev-assets/doodads/warp-door/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -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" --hitbox=34,76 $${i};\ - done - for i in warp-door-*.doodad; do\ - doodad edit-doodad --tag "category=doors,gizmos" $${i};\ - done - - cp *.doodad ../../../assets/doodads/ diff --git a/dev-assets/doodads/warp-door/blue-1.png b/dev-assets/doodads/warp-door/blue-1.png deleted file mode 100644 index 4921faf..0000000 Binary files a/dev-assets/doodads/warp-door/blue-1.png and /dev/null differ diff --git a/dev-assets/doodads/warp-door/blue-2.png b/dev-assets/doodads/warp-door/blue-2.png deleted file mode 100644 index ca96abf..0000000 Binary files a/dev-assets/doodads/warp-door/blue-2.png and /dev/null differ diff --git a/dev-assets/doodads/warp-door/blue-3.png b/dev-assets/doodads/warp-door/blue-3.png deleted file mode 100644 index 1a1e75c..0000000 Binary files a/dev-assets/doodads/warp-door/blue-3.png and /dev/null differ diff --git a/dev-assets/doodads/warp-door/blue-4.png b/dev-assets/doodads/warp-door/blue-4.png deleted file mode 100644 index f676890..0000000 Binary files a/dev-assets/doodads/warp-door/blue-4.png and /dev/null differ diff --git a/dev-assets/doodads/warp-door/blue-off.png b/dev-assets/doodads/warp-door/blue-off.png deleted file mode 100644 index a42b51c..0000000 Binary files a/dev-assets/doodads/warp-door/blue-off.png and /dev/null differ diff --git a/dev-assets/doodads/warp-door/door-1.png b/dev-assets/doodads/warp-door/door-1.png deleted file mode 100644 index e057d24..0000000 Binary files a/dev-assets/doodads/warp-door/door-1.png and /dev/null differ diff --git a/dev-assets/doodads/warp-door/door-2.png b/dev-assets/doodads/warp-door/door-2.png deleted file mode 100644 index 71d0b61..0000000 Binary files a/dev-assets/doodads/warp-door/door-2.png and /dev/null differ diff --git a/dev-assets/doodads/warp-door/door-3.png b/dev-assets/doodads/warp-door/door-3.png deleted file mode 100644 index d225a8d..0000000 Binary files a/dev-assets/doodads/warp-door/door-3.png and /dev/null differ diff --git a/dev-assets/doodads/warp-door/door-4.png b/dev-assets/doodads/warp-door/door-4.png deleted file mode 100644 index 65f3e03..0000000 Binary files a/dev-assets/doodads/warp-door/door-4.png and /dev/null differ diff --git a/dev-assets/doodads/warp-door/orange-1.png b/dev-assets/doodads/warp-door/orange-1.png deleted file mode 100644 index 01a6a61..0000000 Binary files a/dev-assets/doodads/warp-door/orange-1.png and /dev/null differ diff --git a/dev-assets/doodads/warp-door/orange-2.png b/dev-assets/doodads/warp-door/orange-2.png deleted file mode 100644 index 2bb01fb..0000000 Binary files a/dev-assets/doodads/warp-door/orange-2.png and /dev/null differ diff --git a/dev-assets/doodads/warp-door/orange-3.png b/dev-assets/doodads/warp-door/orange-3.png deleted file mode 100644 index 1983e86..0000000 Binary files a/dev-assets/doodads/warp-door/orange-3.png and /dev/null differ diff --git a/dev-assets/doodads/warp-door/orange-4.png b/dev-assets/doodads/warp-door/orange-4.png deleted file mode 100644 index f8c08b2..0000000 Binary files a/dev-assets/doodads/warp-door/orange-4.png and /dev/null differ diff --git a/dev-assets/doodads/warp-door/orange-off.png b/dev-assets/doodads/warp-door/orange-off.png deleted file mode 100644 index 476703a..0000000 Binary files a/dev-assets/doodads/warp-door/orange-off.png and /dev/null differ diff --git a/dev-assets/doodads/warp-door/warp-door.js b/dev-assets/doodads/warp-door/warp-door.js deleted file mode 100644 index 2bde9f3..0000000 --- a/dev-assets/doodads/warp-door/warp-door.js +++ /dev/null @@ -1,157 +0,0 @@ -// Warp Doors - -const color = Self.GetTag("color"), - isStateDoor = color === 'blue' || color === 'orange'; - -// State in case we're a blue warp door. -let state = color === 'blue', - animating = false, - collide = false; - -function main() { - // Declare animations and sprite names. - let animSpeed = 100; - let spriteDefault, spriteDisabled; // the latter for state doors. - if (color === 'blue') { - Self.AddAnimation("open", animSpeed, ["blue-2", "blue-3", "blue-4"]); - Self.AddAnimation("close", animSpeed, ["blue-4", "blue-3", "blue-2", "blue-1"]); - spriteDefault = "blue-1"; - spriteDisabled = "blue-off"; - } else if (color === 'orange') { - Self.AddAnimation("open", animSpeed, ["orange-2", "orange-3", "orange-4"]); - Self.AddAnimation("close", animSpeed, ["orange-4", "orange-3", "orange-2", "orange-1"]); - spriteDefault = "orange-1"; - spriteDisabled = "orange-off"; - } else if (color === 'invisible') { - // Invisible Warp Door region. - Self.Hide(); - Self.AddAnimation("open", animSpeed, [0, 0]); - Self.AddAnimation("close", animSpeed, [0, 0]); - } else { - Self.AddAnimation("open", animSpeed, ["door-2", "door-3", "door-4"]); - Self.AddAnimation("close", animSpeed, ["door-4", "door-3", "door-2", "door-1"]); - spriteDefault = "door-1"; - } - - // Find our linked Warp Door. - let linkedDoor = null; - for (let link of Self.GetLinks()) { - if (link.Title.indexOf("Warp Door") > -1) { - linkedDoor = link; - break; - } - } - - // Subscribe to the global state-change if we are a state door. - if (isStateDoor) { - Message.Subscribe("broadcast:state-change", (newState) => { - state = color === 'blue' ? !newState : newState; - - // Activate or deactivate the door. - Self.ShowLayerNamed(state ? spriteDefault : spriteDisabled); - }); - } - - // For player groundedness work-around - let playerLastY = []; // last sampling of Y values - - // The player Uses the door. - let flashedCooldown = false; // "Locked Door" flashed message. - Events.OnUse((e) => { - if (animating) { - return; - } - - // Doors without linked exits are not usable. - if (linkedDoor === null) { - if (!flashedCooldown) { - Flash("This door is locked."); - flashedCooldown = true; - setTimeout(function() { - flashedCooldown = false; - }, 1000); - } - return; - } - - // Only players can use doors for now. - if (e.Actor.IsPlayer()) { - if (isStateDoor && !state) { - // The state door is inactive (dotted outline). - return; - } - - // The player must be grounded or have no gravity to open the door. - if (!e.Actor.Grounded() && e.Actor.HasGravity()) { - // Work-around: if two Boxes are stacked atop each other the player can - // get stuck if he jumps on top. He may not be Grounded but isn't changing - // effective Y position and a warp door may work as a good way out. - let yValue = e.Actor.Position().Y; - - // Collect a sampling of last few Y values. If the player Y position - // is constant the last handful of frames, treat them as if they're - // grounded (or else they can't activate the warp door). - playerLastY.unshift(yValue); - if (playerLastY.length < 6) { - return; - } - - // We have enough history. - playerLastY.pop(); - - // Hasn't moved? - let isGrounded = true; - for (let i = 0; i < playerLastY.length; i++) { - if (yValue !== playerLastY[i]) { - isGrounded = false; - break; - } - } - - if (!isGrounded) { - return; - } - - // Player was effectively grounded! No change in Y position. - } - - // Freeze the player. - e.Actor.Freeze() - - // Play the open and close animation. - animating = true; - Self.PlayAnimation("open", () => { - e.Actor.Hide() - Self.PlayAnimation("close", () => { - Self.ShowLayerNamed(isStateDoor && !state ? spriteDisabled : spriteDefault); - animating = false; - - // Teleport the player to the linked door. Inform the target - // door of the arrival of the player so it doesn't trigger - // to send the player back here again on a loop. - if (linkedDoor !== null) { - Message.Publish("warp-door:incoming", e.Actor); - e.Actor.MoveTo(linkedDoor.Position()); - } - }); - }); - } - }); - - // Respond to incoming warp events. - Message.Subscribe("warp-door:incoming", (player) => { - animating = true; - player.Unfreeze(); - Self.PlayAnimation("open", () => { - player.Show(); - Self.PlayAnimation("close", () => { - animating = false; - - // If the receiving door was a State Door, fix its state. - if (isStateDoor) { - Self.ShowLayerNamed(state ? spriteDefault : spriteDisabled); - } - }); - }); - }); -}