Multi-Team Support


Note: Not space-age ready yet. Check in 2 weeks. Up to 20 teams race the same Factorio seed, each on their own private copy of the world. Independent research trees, separate planets, zero resource conflicts. Play solo or group up via buddy-join, form alliances through mutual friendship, spectate rivals with live per-player follow cams. First-to-research announcements and production milestones drive the competition, with per-team clocks for fair speedruns. Full Space Age support auto-detected.

Scenarios
8 hours ago
2.0
21
Planets Character Environment

Changelog

Version: 0.3.2
Date: 2026-04-16
  Other:
    - Release workflow: release notes now cover changes since the last
      PUBLISHED release (queried via the GitHub API) instead of just the
      current version's changelog entry. Handles cases where an intermediate
      version was tagged but never published — its changelog gets included
      in the next successful release's notes. Same notes used for both the
      GitHub release body and the Discord announcement.
Version: 0.3.1
Date: 2026-04-16
  Features:
    - dangOreus mod compatibility: when dangOreus is active, dangOreus's
      chunk-gen behavior (ore flooding, anti-building-on-ore, container
      spill, floor-is-lava) is applied to each team's nauvis surface
      (team-N-nauvis in base 2.0 / VoidBlock, mts-nauvis-N in Space Age).
      Default nauvis is disabled for dangOreus since no team plays there.
      All five dangOreus modes (pie, random, voronoi, perlin, spiral) work.
      Perlin mode also fixes an upstream bug where integer coordinates
      collapsed the noise output to a constant (ore variety restored via
      coordinate scaling).
  Bugfixes:
    - Platformer mode: fix player being teleported to the landing-pen
      surface after pressing Escape from a remote view. Root cause was
      Factorio's god-controller cursor following the last-viewed surface
      when there's no character to anchor position (Platformer players
      have no character by design). Mitigated by saving the god's
      physical_surface + physical_position before entering remote view
      and teleporting back on exit (god_pre_remote anchor in
      on_player_controller_changed).
    - Fix on_player_controller_changed handlers referencing the wrong
      event field. Factorio 2.0 uses event.old_type, not
      event.old_controller_type; the mismatched field silently read nil,
      so prior attempts at this fix never actually executed.
    - Re-enable hiding the default nauvis surface from team forces in
      all modes (base 2.0, VoidBlock, Platformer) now that the
      god_pre_remote guard protects against the related SurfaceList
      engine quirk.
  Other:
    - Diagnostic logging: helpers.diag() + helpers.player_state() instrument
      every surface/controller event and every teleport call site with
      force/surface/position/physical_surface/physical_position/controller
      type, making future position-state bugs far easier to diagnose.
    - helpers.set_surface_hidden() wrapper (with DISABLE_SURFACE_HIDING
      kill-switch) routes all force.set_surface_hidden calls through one
      place so they can be disabled globally for diagnosis.
Version: 0.3.0
Date: 2026-04-16
  Features:
    - Space Age support: per-team planet variants (mts-nauvis-1, mts-vulcanus-1, etc.)
      with space-connection topology mirrored from vanilla. Auto-detected at runtime.
    - Each team gets their own full solar system; base planets are locked and hidden
      for team forces so teams never collide on shared planets.
    - Researching planet-discovery techs unlocks the team's variant (not the base).
    - Teams GUI: replaces "Players & Platforms" with a card-based team-centric view.
      Each card shows members (★ leader, online/offline, friendship), surfaces, and
      per-player Follow Cam buttons.
    - Follow Cam: grid of live camera widgets tracking individual players across
      planets and surfaces. Updates at ~30 FPS. Click a cell's magnifier to expand
      into full spectator mode; Esc returns to the grid with state preserved.
    - Tech records & announcements: tracks first + fastest per technology across
      teams. Broadcasts "first to research [X]" and "new speed record" messages.
    - Milestone engine: generic production-threshold tracker (science, landfill,
      space platform tile). Editable via milestones/config.lua — add any category
      with its own thresholds and counters.
    - Team clock: each team's elapsed time starts when the first member spawns,
      used for all record comparisons regardless of team creation time.
    - Redesigned Landing Pen: "Start a new team" primary button + "OR join an
      existing team" section with per-team Request to Join. Request flow announces
      to all team members (only the leader can accept).
    - Cancel request button: requesters can withdraw before a response.
    - Leave/Kick confirmation dialogs explain consequences before executing.
    - Admin toolbar button (only visible to admins) replaces auto-open panel.
    - Commands: /mts-teams (list all teams + status), /mts-rename (leader renames).
  Changes:
    - Force naming reform: forces are now "team-1" through "team-N" (pre-created
      at game start via mts_max_teams startup setting; default 20). Forces no
      longer carry a player's name — any member can become leader without a swap.
    - Team names are customizable via /mts-rename or the Teams panel.
    - Force color always derived from team leader's player color.
    - Simplified team-leader logic: leader leaving elects a new leader; no
      complex force-swapping.
    - Landing pen players stay on the spectator force until they click Spawn,
      so game.forces.player stays clean as a research baseline.
    - Teams GUI and all chat announcements use "Team <name>" prefix and
      color-tag teams consistently.
    - Default nauvis surface is hidden from team forces (Space Age or not).
    - /mts-kick and /mts-leave now use confirmation dialogs (gui/confirm.lua).
    - Multi-player teams (buddy join) enabled by default.
  Bugfixes:
    - Research on leaving a team resets to baseline (was incorrectly carrying
      over the team's full research to the departing player's new force).
    - Team cards stay visible while a member is spectating (uses team_pool
      occupancy check, not force.players length, so spectating members don't
      hide their team).
    - Follow Cam tooltips update when targets are added/removed.
    - Buddy join request routes to team leader (not arbitrary member).
    - Admin nav button stays grouped with mod buttons after demote/promote.
Version: 0.2.20
Date: 2026-04-14
  Features:
    - Buddy join team size limit: admin dropdown (2-10, default 2) controls max players per team
    - /mts-leave command: any player can leave their team and return to the Landing Pen
    - /mts-kick command: team leader can kick members from their team
    - Team leadership transfer: when owner leaves, next member is promoted and all players are notified
    - Admin Starter Items tab: configure starting inventory by copying from inventory or adding items manually
    - Starter items auto-populated from first player's inventory on initial spawn
    - New admin-added starter items are distributed to all already-spawned players immediately
    - Anti-abuse: inventory cleared when rejoining a team previously left
    - Landing Pen GUI is now scrollable for large player counts
    - Team spawn announcement broadcast when a player starts their team
  Changes:
    - Rename force prefix from "player-" to "force-"
    - Rename commands from /st-* to /mts-*
    - Player names in system messages are now colorized with their chat color
    - Force name shown in grey brackets after every "team" mention in chat messages
    - Force name shown next to owner name in the Players GUI
    - Leave Team button removed from Players GUI (use /mts-leave instead)
  Bugfixes:
    - Fix multiplayer desync caused by storage writes in on_load
    - Fix team size not decrementing when force owner leaves
    - Fix Players GUI showing old owner name after team leadership transfer
    - Fix "Return to my base" button appearing for players in the Landing Pen
    - Fix crash from duplicate GUI element names in Starter Items tab
Version: 0.2.17
Date: 2026-04-08
  Features:
    - Players in the Landing Pen are now assigned the spectator permission group, preventing building or griefing in the pen area
  Changes:
    - Update README: remove Space Block references, add Platformer and VoidBlock links, remove installation section, fix command references
    - Update info.json description
Version: 0.2.16
Date: 2026-04-08
  Features:
    - Spectate now focuses on the target player's live position (or their saved position if they are away spectating someone else), instead of always starting at surface origin
    - Returning from spectate restores the player to their exact pre-spectate surface and position, with collision avoidance to prevent getting stuck in structures built by bots
    - Character remains vulnerable (destructible) while spectating, preventing players from using spectate mode to escape enemy attacks
  Changes:
    - Rename gui/platforms.lua to gui/surfaces.lua (internal variable: surfaces_gui)
  Bugfixes:
    - Players in the Landing Pen can no longer see or use the "request friend" option for spawned players
Version: 0.2.15
Date: 2026-04-07
  Changes:
    - Extract shared compat utilities (planet_display_name, process_pending_teleports, setup_player_surface) into compat_utils.lua to reduce duplication between vanilla and VoidBlock modules
  Bugfixes:
    - Fix spectator mode not exiting when spawning from the Landing Pen
Version: 0.2.14
Date: 2026-04-06
  Features:
    - VoidBlock mod compatibility: each player gets their own Nauvis with void-island terrain
    - Pre-generate chunks around spawn so players never see default terrain flash
  Changes:
    - Stats GUI: active category and time period buttons use green_button style for visibility
Version: 0.2.13
Date: 2026-04-06
  Features:
    - "Allow Friendship" admin flag: disabling dissolves all friendships and hides checkboxes
    - Per-player "show offline" toggle in Players panel (hidden by default)
    - Players in the Landing Pen are excluded from Research and Stats GUIs
  Changes:
    - Codebase reorganized into gui/, compat/ folders with shared helpers.lua
    - All module variables renamed from M/H to descriptive names
    - Extracted force_utils.lua, surface_utils.lua, gui/friendship.lua,
      gui/research_diff.lua, gui/landing_pen_terrain.lua for smaller files
    - Vanilla surface naming changed from "st-<index>-<planet>" to "<force>-<planet>"
    - Spectator exit always teleports player home (prevents god-mode stranding)
    - Stats GUI refreshes on player spawn (not just connect/disconnect)
    - Widened Players panel and Stats name column to prevent layout shifts
  Bugfixes:
    - Fix spectator bounce failing in Platformer god mode (force lookup used
      spectator force instead of effective force)
    - Fix landing pen player colors: use chat_color consistently instead of
      hardcoded yellow for self and grey for spawned players
Version: 0.2.12
Date: 2026-04-05
  Features:
    - Spectator system: view other players' surfaces via a dedicated spectator force
    - Spectate button (magnifying glass) on each player's platform/surface row
    - Friend-view: friends bypass spectator force and get direct remote view
    - Mutual friendship: both sides must agree to activate, either side can break
    - Friendship request states: request friend (blue), pending (yellow), friends (green)
    - Chat prefix shows "[on X's base][spectator]" or "[on X's base][friend]" context
    - Admin flag: "Spectate Notifications" to toggle spectation announcements
    - Admin flag changes now broadcast to all players
    - Crafting queue freezes while spectating, resumes on exit
    - "Stop spectating" button shows "(crafting paused)" when crafting queue is active
    - Surface visibility: other players' surfaces hidden from map sidebar unless friends
  Changes:
    - GPS ping buttons replaced with spectate buttons in Players GUI
    - Friendship is now mutual (requires both sides) instead of one-directional
    - Friend/unfriend downgrade: losing friendship while viewing switches to spectator mode
    - Spectator force hidden from all player-facing GUIs (Players, Research, Stats)
    - Players GUI uses effective force for all comparisons (correct during spectation)
    - Vanilla surface naming changed from "st-<index>-<planet>" to "<force>-<planet>"
  Bugfixes:
    - Fix player color showing as white when spectating (now uses game.get_player lookup)
Version: 0.2.11
Date: 2026-04-04
  Features:
    - Announce friend/unfriend actions to all players with mutual status indicator
  Bugfixes:
    - Fix players being stranded on foreign surfaces after exiting GPS remote view
    - Fix landing-pen players being moved to foreign surfaces via GPS tag clicks
Version: 0.2.9
Date: 2026-04-03
  Features:
    - Landing Pen visual overhaul: lab-dark-2 island, water moat, grass ring, ground text
    - Add "Buddy Join" admin feature flag (off by default) to gate buddy request system
    - New branding: "Solo by design. Legendary by choice."
  Changes:
    - Replace quality sync polling (every 30 ticks) with event-driven sync on research finished
    - Landing Pen chunks now handled via on_chunk_generated (no more grass outside the void)
  Bugfixes:
    - Fix nav bar buttons not working after server restart / save transfer
    - Fix welcome screen crash when on_player_created and on_player_joined_game both fire
Version: 0.2.8
Date: 2026-04-02
  Features:
    - Research GUI: collapsible player rows (1 row default, expand to see all)
    - Research GUI: "You both have researched" section in diff view
    - Research GUI: click any tech icon to open it in the tech tree
    - Research GUI: Escape navigates back from diff to overview before closing
    - Welcome window: added close button and About tab selected by default
    - Welcome window: Discord tab uses full logo image
    - Admin panel now visible to all admins, not just the host
    - Add GitHub Actions workflow to package mod zip on version tags
  Changes:
    - Remove all periodic GUI polling; all updates are now purely event-driven
    - Platforms and admin frames use clear() instead of destroy+recreate (fixes drag jitter)
    - Nav bar buttons doubled in size (56x56)
    - Landing Pen window positioned below top bar, above Players panel
    - Research play time now shows elapsed since spawn, not absolute game time
    - Remove em-dashes from About page and README
  Bugfixes:
    - Fix Players panel reappearing after closing (5-second poll was recreating it)
    - Fix admin and Players windows feeling jittery while dragging
Version: 0.2.7
Date: 2026-04-01
  Features:
    - Add Landing Pen: new players wait in a shared pre-game lobby before spawning
    - Add buddy system: pen players can request to join an active player's force
    - Add vanilla surface support: each player gets their own nauvis surface
    - Add admin panel with runtime feature flags (Landing Pen toggle)
    - Add per-player clock tracking (time since spawn)
    - Add research comparison panel with tech icon grid and 1-on-1 diff view
    - Show Platforms GUI to players in the Landing Pen
  Changes:
    - Rename Platforms GUI to Players GUI
    - Include vanilla surfaces in the player list as "<name>'s base on <Planet>"
    - Disabling Landing Pen mid-session immediately spawns all waiting players
  Bugfixes:
    - Fix landing pen surface shape: out-of-map tiles outside the circle
    - Fix spawn button double-fire and duplicate platform creation
    - Fix cutscene skip: exit_cutscene() before teleport
    - Fix solo force being reset by scenario after cutscene
    - Fix teleport retry: keep pending entry until teleport succeeds
Version: 0.2.6
Date: 2026-03-31
  Bugfixes:
    - Fix Stats button width in Platforms title bar
Version: 0.2.5
Date: 2026-03-31
  Features:
    - Add per-player production stats GUI with five categories (Ores, Plates, Intermediates, Science, Custom)
    - Categories built dynamically from game prototypes; works with overhaul mods
    - 12 choose-elem-button columns per category; players can swap any item
    - Time range selector: 1m / 10m / 1h / 10h / All time
    - Per-player column overrides persisted across sessions
  Changes:
    - Online/offline status updates instantly via events (no tick delay)
Version: 0.2.4
Date: 2026-03-30
  Features:
    - Add Platformer mod compatibility: per-player space platform creation and deferred teleport
    - Add "Return to my base" button when visiting a foreign surface
  Changes:
    - Hide the default "player" force from the platforms GUI
    - Declare optional dependency on Platformer for correct load ordering
Version: 0.2.3
Date: 2026-03-29
  Changes:
    - Remove GPS ping button from player name rows; GPS buttons now only appear on platform rows
Version: 0.2.2
Date: 2026-03-29
  Changes:
    - Remove all hub collision detection hacks (use /unstuck instead)
Version: 0.2.1
Date: 2026-03-29
  Bugfixes:
    - Fix hub collision fix and /unstuck to use physical_surface/position
    - Fix remote view (GPS clicks) incorrectly triggering the collision fix
Version: 0.2.0
Date: 2026-03-29
  Changes:
    - Remove automatic hub collision repositioning (caused issues with GPS pings)
    - Document /unstuck command as the manual alternative
Version: 0.1.1
Date: 2026-03-28
  Changes:
    - Add thumbnail image for mod portal
    - Add homepage URL to info.json
Version: 0.1.0
Date: 2026-03-28
  Features:
    - Separate forces: each player gets their own force with independent research
    - Quality unlocks and space platform access copied from default force
    - Neutral diplomacy: players start in cease-fire with all others
    - Per-player friend toggle via the Platforms GUI
    - Cross-force chat: normal messages broadcast to all forces
    - Draggable, collapsible Platforms GUI with live GPS locations
    - /platforms command with colored names and clickable GPS pings
    - /unstuck command to eject from vehicles and teleport to safety