Fix lightning bolt; implement speed boots
This commit is contained in:
parent
b01d50c7e8
commit
db2a24319d
25
js/game.js
25
js/game.js
@ -831,6 +831,7 @@ export class Level {
|
|||||||
|
|
||||||
// Record our speed, and halve it below if we're stepping onto a sliding tile
|
// Record our speed, and halve it below if we're stepping onto a sliding tile
|
||||||
let speed = actor.type.movement_speed;
|
let speed = actor.type.movement_speed;
|
||||||
|
let double_speed = false;
|
||||||
|
|
||||||
let move = DIRECTIONS[direction].movement;
|
let move = DIRECTIONS[direction].movement;
|
||||||
if (!actor.cell) console.error(actor);
|
if (!actor.cell) console.error(actor);
|
||||||
@ -855,7 +856,6 @@ export class Level {
|
|||||||
// enter it (similar to Cell.blocks_entering), but if the only thing blocking us is
|
// enter it (similar to Cell.blocks_entering), but if the only thing blocking us is
|
||||||
// a pushable object, we have to do two more passes: one to push anything pushable,
|
// a pushable object, we have to do two more passes: one to push anything pushable,
|
||||||
// then one to check whether we're blocked again.
|
// then one to check whether we're blocked again.
|
||||||
let has_slide_tile = false;
|
|
||||||
let blocked_by_pushable = false;
|
let blocked_by_pushable = false;
|
||||||
for (let tile of goal_cell) {
|
for (let tile of goal_cell) {
|
||||||
if (tile.blocks(actor, direction, this)) {
|
if (tile.blocks(actor, direction, this)) {
|
||||||
@ -872,7 +872,7 @@ export class Level {
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (tile.type.slide_mode) {
|
if (tile.type.slide_mode) {
|
||||||
has_slide_tile = true;
|
double_speed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bump tiles that we're even attempting to move into; this mostly reveals
|
// Bump tiles that we're even attempting to move into; this mostly reveals
|
||||||
@ -882,10 +882,6 @@ export class Level {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (has_slide_tile) {
|
|
||||||
speed /= 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the only thing blocking us can be pushed, give that a shot
|
// If the only thing blocking us can be pushed, give that a shot
|
||||||
if (! blocked && blocked_by_pushable) {
|
if (! blocked && blocked_by_pushable) {
|
||||||
// This time make a copy, since we're modifying the contents of the cell
|
// This time make a copy, since we're modifying the contents of the cell
|
||||||
@ -939,6 +935,9 @@ export class Level {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// We're clear!
|
// We're clear!
|
||||||
|
if (double_speed || actor.has_item('speed_boots')) {
|
||||||
|
speed /= 2;
|
||||||
|
}
|
||||||
this.move_to(actor, goal_cell, speed);
|
this.move_to(actor, goal_cell, speed);
|
||||||
|
|
||||||
// Set movement cooldown since we just moved
|
// Set movement cooldown since we just moved
|
||||||
@ -1191,12 +1190,14 @@ export class Level {
|
|||||||
for (let actor of this.actors) {
|
for (let actor of this.actors) {
|
||||||
if (! actor.cell)
|
if (! actor.cell)
|
||||||
continue;
|
continue;
|
||||||
// Only count when they're on a tile, not in transit!
|
// Only count when they're on a floor tile AND not in transit!
|
||||||
// FIXME this causes us to power mechanisms next to us, but we're only supposed to touch
|
let emitting = 0;
|
||||||
// wire we're standing on?
|
if (actor.movement_cooldown === 0 && actor.has_item('lightning_bolt')) {
|
||||||
let emitting = actor.movement_cooldown === 0 && actor.has_item('lightning_bolt');
|
let wired_tile = actor.cell.get_wired_tile();
|
||||||
if (emitting) {
|
if (wired_tile && wired_tile.type.name === 'floor') {
|
||||||
neighbors.push([actor.cell, 0x0f]);
|
emitting = true;
|
||||||
|
neighbors.push([actor.cell, wired_tile.wire_directions]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (emitting !== actor.emitting_edges) {
|
if (emitting !== actor.emitting_edges) {
|
||||||
any_changed = true;
|
any_changed = true;
|
||||||
|
|||||||
@ -703,7 +703,7 @@ class Player extends PrimaryView {
|
|||||||
if (this.state === 'playing' || this.state === 'paused' || this.state === 'rewinding') {
|
if (this.state === 'playing' || this.state === 'paused' || this.state === 'rewinding') {
|
||||||
new ConfirmOverlay(this.conductor, "Restart this level and watch the replay?", () => {
|
new ConfirmOverlay(this.conductor, "Restart this level and watch the replay?", () => {
|
||||||
this.play_demo();
|
this.play_demo();
|
||||||
});
|
}).open();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this.play_demo();
|
this.play_demo();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user