Animations for Thief + No More Moonwalking

* Adds walking animations for the Thief.
* Mobile doodads no longer moonwalk: their A.I. used to wait for the
  animation to finish before setting the appropriate animation, so when
  it changed directions it would "moonwalk" for a time. Their A.I. is
  now updated to cancel the animation if they change directions so to
  immediately play the correct animation.
master
Noah 2021-09-03 19:54:10 -07:00
parent 33f2dca5bc
commit 2cf8a44b8f
12 changed files with 35 additions and 6 deletions

View File

@ -1,7 +1,8 @@
// Azulian (Red and Blue) // Azulian (Red and Blue)
var playerSpeed = 12, var playerSpeed = 12,
animating = false, animating = false,
direction = "right"; direction = "right",
lastDirection = "right";
function setupAnimations(color) { function setupAnimations(color) {
var left = color === 'blue' ? 'blu-wl' : 'red-wl', var left = color === 'blue' ? 'blu-wl' : 'red-wl',
@ -49,9 +50,17 @@ function main() {
var Vx = parseFloat(playerSpeed * (direction === "left" ? -1 : 1)); var Vx = parseFloat(playerSpeed * (direction === "left" ? -1 : 1));
Self.SetVelocity(Vector(Vx, 0.0)); Self.SetVelocity(Vector(Vx, 0.0));
// If we changed directions, stop animating now so we can
// turn around quickly without moonwalking.
if (direction !== lastDirection) {
Self.StopAnimation();
}
if (!Self.IsAnimating()) { if (!Self.IsAnimating()) {
Self.PlayAnimation("walk-" + direction, null); Self.PlayAnimation("walk-" + direction, null);
} }
lastDirection = direction;
}, 100); }, 100);
} }

View File

@ -5,7 +5,8 @@ function main() {
var Vx = Vy = 0; var Vx = Vy = 0;
var altitude = Self.Position().Y; // original height in the level var altitude = Self.Position().Y; // original height in the level
var direction = "left"; var direction = "left",
lastDirection = "left";
var states = { var states = {
flying: 0, flying: 0,
diving: 1, diving: 1,
@ -51,9 +52,17 @@ function main() {
var Vx = parseFloat(speed * (direction === "left" ? -1 : 1)); var Vx = parseFloat(speed * (direction === "left" ? -1 : 1));
Self.SetVelocity(Vector(Vx, 0.0)); Self.SetVelocity(Vector(Vx, 0.0));
// If we changed directions, stop animating now so we can
// turn around quickly without moonwalking.
if (direction !== lastDirection) {
Self.StopAnimation();
}
if (!Self.IsAnimating()) { if (!Self.IsAnimating()) {
Self.PlayAnimation("fly-" + direction, null); Self.PlayAnimation("fly-" + direction, null);
} }
lastDirection = direction;
}, 100); }, 100);
} }

View File

@ -3,6 +3,7 @@ ALL: build
.PHONY: build .PHONY: build
build: build:
doodad convert -t "Thief" stand-right.png stand-left.png \ doodad convert -t "Thief" stand-right.png stand-left.png \
walk-right-{1,2,3}.png walk-left-{1,2,3}.png \
thief.doodad thief.doodad
doodad install-script thief.js thief.doodad doodad install-script thief.js thief.doodad

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -5,8 +5,8 @@ function main() {
Self.SetGravity(true); Self.SetGravity(true);
Self.SetInventory(true); Self.SetInventory(true);
Self.SetHitbox(0, 0, 32, 58); 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-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("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. // All thieves can steal items.
stealable(); stealable();
@ -71,6 +71,7 @@ function ai() {
var Vx = Vy = 0.0, var Vx = Vy = 0.0,
playerSpeed = 4, playerSpeed = 4,
direction = "right", direction = "right",
lastDirection = "right",
lastSampledX = 0, lastSampledX = 0,
sampleTick = 0, sampleTick = 0,
sampleRate = 2; sampleRate = 2;
@ -89,8 +90,17 @@ function ai() {
Vx = parseFloat(playerSpeed * (direction === "left" ? -1 : 1)); Vx = parseFloat(playerSpeed * (direction === "left" ? -1 : 1));
Self.SetVelocity(Vector(Vx, Vy)); Self.SetVelocity(Vector(Vx, Vy));
Self.StopAnimation(); // If we changed directions, stop animating now so we can
Self.PlayAnimation("walk-" + direction, null); // turn around quickly without moonwalking.
if (direction !== lastDirection) {
Self.StopAnimation();
}
if (!Self.IsAnimating()) {
Self.PlayAnimation("walk-" + direction, null);
}
lastDirection = direction;
}, 100); }, 100);
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB