diff --git a/js/defs.js b/js/defs.js index 5f54e20..d1bb0dd 100644 --- a/js/defs.js +++ b/js/defs.js @@ -183,15 +183,14 @@ export const COMPAT_FLAGS = [ key: 'force_lynx_animation_lengths', label: "Animations use Lynx duration", rulesets: new Set(['lynx']), +}, { + key: 'actors_move_instantly', + label: "Movement happens instantly", + rulesets: new Set(['ms']), }, // Tiles { - // XXX this is goofy - key: 'tiles_react_instantly', - label: "Tiles react when approached", - rulesets: new Set(['ms']), -}, { key: 'rff_actually_random', label: "Random force floors are actually random", rulesets: new Set(['ms']), diff --git a/js/game.js b/js/game.js index c5b0963..65a3d0d 100644 --- a/js/game.js +++ b/js/game.js @@ -33,7 +33,7 @@ export class Tile { // Gives the effective position of an actor in motion, given smooth scrolling visual_position(update_progress = 0, update_rate = 0) { - if (! this.previous_cell || this.movement_speed === null) { + if (! this.previous_cell || this.movement_speed === null || this.moves_instantly) { return [this.cell.x, this.cell.y]; } @@ -414,6 +414,9 @@ export class Level extends LevelInterface { } if (tile.type.is_actor) { this.actors.push(tile); + if (this.compat.actors_move_instantly) { + tile.moves_instantly = true; + } } cell._add(tile); @@ -564,7 +567,7 @@ export class Level extends LevelInterface { // but it can't anyway because Tile.wire_directions = 0; need some // other way to identify a tile as wired, or at least an actor if (actor && actor.wire_directions && - (actor.movement_cooldown === 0 || this.compat.tiles_react_instantly)) + (actor.movement_cooldown === 0 || this.compat.actors_move_instantly)) { wire_directions = actor.wire_directions; } @@ -1128,7 +1131,7 @@ export class Level extends LevelInterface { } } - if (! this.compat.tiles_react_instantly) { + if (! this.compat.actors_move_instantly) { this.step_on_cell(actor, actor.cell); } // Note that we don't erase the movement bookkeeping until next decision phase, because @@ -1971,7 +1974,7 @@ export class Level extends LevelInterface { this.add_tile(actor, goal_cell); } - if (this.compat.tiles_react_instantly) { + if (this.compat.actors_move_instantly) { this.step_on_cell(actor, actor.cell); } } @@ -2198,6 +2201,9 @@ export class Level extends LevelInterface { } if (tile.cell) { this.add_actor(tile); + if (this.compat.actors_move_instantly) { + tile.moves_instantly = true; + } } this.add_tile(dropping_actor, cell); } diff --git a/js/main.js b/js/main.js index eefa27a..2113d57 100644 --- a/js/main.js +++ b/js/main.js @@ -1750,7 +1750,6 @@ class Player extends PrimaryView { else { // Figure out how far we are between the last game update and the next one, so the // renderer can interpolate appropriately. - let now = performance.now(); let elapsed = (performance.now() - this.last_advance) / 1000; let speed = this.play_speed; if (this.state === 'rewinding') {