Movement & Navigation

Squad Movement

Mechanic governing squad movement behavior, establishing rules for player interaction, feedback, and progression within this system.

High complexity
2 examples
2 patterns

Overview

As a core game system, squad movement provides meaningful choices and consequences for player actions. When well-implemented, this mechanic creates a satisfying feedback loop that keeps players engaged and motivated to continue playing. Modern implementations often combine this mechanic with procedural elements to increase variety and replayability.

Game Examples

Puzzle Games

Puzzle Games use this mechanic where players interact with NPCs to support their team effectively. Visual and audio feedback make the interaction satisfying, resulting in skill differentiation.

Racing Games

Racing Games use this mechanic where players make strategic decisions to complete objectives efficiently. Failure states are informative rather than punishing, resulting in personal achievement.

Pros & Cons

Advantages

  • Creates natural cooperation between players
  • Supports several viable strategies and approaches
  • Easy to understand but difficult to master
  • Supports numerous viable strategies and approaches

Disadvantages

  • Requires extensive balance testing to avoid edge cases
  • May overwhelm younger audiences with too many options
  • Requires significant balance data to implement well
  • Difficult to balance across a wide range of skill levels
  • Can feel overwhelming if progression is too slow

Implementation Patterns

Input Handler

Data-driven implementation that loads squad movement configuration from external definitions.

class SquadMovementController {
  position = { x: 0, y: 0 };
  moveSpeed = 10.0;
  mode = "standing";

  update(input: Input, dt: number) {
    const speed = this.getSpeed();
    this.position.x += input.x * speed * dt;
    this.position.y += input.y * speed * dt;
  }

  getSpeed() {
    switch (this.mode) {
      case "sprinting": return this.moveSpeed * 1.5;
      case "crouching": return this.moveSpeed * 0.4;
      case "swimming": return this.moveSpeed * 0.7;
      default: return this.moveSpeed;
    }
  }
}

Collision Detector

Data-driven implementation that loads squad movement configuration from external definitions.

class SquadMovementManager {
  pos = { x: 0, y: 0 };
  velocity = 5.0;
  status = "walking";

  update(input: Input, dt: number) {
    const speed = this.getSpeed();
    this.pos.x += input.x * speed * dt;
    this.pos.y += input.y * speed * dt;
  }

  getSpeed() {
    switch (this.status) {
      case "sprinting": return this.velocity * 1.8;
      case "crouching": return this.velocity * 0.5;
      case "swimming": return this.velocity * 0.8;
      default: return this.velocity;
    }
  }
}