LegacyShell WikiLegacyShell Wiki
Back to LegacyShell
Home
Wiki
Plugins
Docs
Back to LegacyShell
Home
Wiki
Plugins
Docs
  • Documentation

    • Getting Started

      • What is LegacyShell?
      • Speed Setup
      • Requirements
      • Installation
      • First Run
      • Config Files
      • Making an Account
      • Troubleshooting (Getting Started)
    • Running a Server

      • Architecture Overview
      • The Database
      • Users and Ranks
      • Adding Game Servers
      • Client Mirrors
      • Perpetual
      • Backups
      • Rate Limiting
      • Moderation
      • Closed Mode
      • Deployment
      • Troubleshooting (Running a Server)
      • Hosting for Someone Else's Instance
    • Content Creation

      • Maps
      • Dealing with Babylon Models
      • Map Blocks
      • Items and Skins
      • Hats and Stamps
      • Sounds
      • Gamemodes
      • Seasonal Events
    • Plugin Development

      • Quickstart
      • I Want To...
      • Anatomy of a Plugin
      • Lifecycle
      • Dependencies
      • Events (Concept)
      • Event Reference

        • services: events
        • game: events — shared logic (src/shell/)
        • game: events — main-thread server process
        • game: events — per-connection client object
        • game: events — room lifecycle & tick loop
        • game: events — in-browser gameplay
        • client: events — client server & build pipeline
      • Commands
      • Client-Side Code
      • Static Assets
      • Content Packs
      • Networking
      • Workers and State
      • Prediction and Authority
      • Recipes

        • Recipe: Killstreaks
        • Recipe: New Pickup Item
        • Recipe: New Gamemode
        • Recipe: Custom Weapon
        • Recipe: UI Modification
        • Recipe: Discord Integration
        • Recipe: Replacing Core Behaviour
        • Recipe: Persistent Plugin Storage
        • Recipe: Rewarding Players with Currency
        • Recipe: Custom Per-Player Data
        • Recipe: Custom Theme
      • Publishing
      • Pitfalls
      • Modifiers
      • Sound and Apollo
    • Codebase Reference

      • Repo Layout
      • Shared Shell Layer
      • Server-Only Markers
      • The ss Object
      • Build Pipeline
      • Stamps and Babylons
      • Game Loop
      • Rooms and Workers
      • Wire Protocol
      • Generated

        • Wire Protocol Opcodes
        • Enums & Lookup Tables
        • Database Schema
        • Config Reference
        • Slash Command Reference
      • Services Internals
      • Catalog and Items
      • Permissions Internals
      • Physics and Collision
      • Known Quirks
      • Codebase Anecdotes
      • Development Timeline
    • Contributing

      • Documentation Style Guide
      • Generators
      • For AI Agents

Gamemodes

Audience: Content creators, server operators · Prereqs: Moderation

Canonical source: src/shell/gametypes.js

What you can configure about gamemodes without writing any code - creating a genuinely new gamemode is a coding task, covered in Plugin Development instead.

Only two gamemodes are actually built into the base game

gametypes.js itself only defines FFA and Teams. Every other mode you'll see in a normal LegacyShell instance's mode dropdown (Timed variants, Scale Shift, Lifesteal, Apocalypse, Parkour, etc.) is added by a plugin hooking game:GameTypesInit - typically ones already bundled in plugins_default/ on a standard install, not something baked into core. If you're trying to find where a specific mode "lives" in the codebase and it's not FFA or Teams, it's in a plugin, not gametypes.js.

mapPool - why some maps don't show up for some modes

Every gamemode declares a mapPool name ("FFA", "Teams", or a custom one a plugin defines). A map is only offered for a gamemode if the map's own modes field (see Maps) marks it valid for that pool - this is why adding a new map sometimes means also checking its modes object includes every gamemode you want it playable in, not just exporting it from the editor and assuming it'll show up everywhere.

Per-room settings (gameOptions)

The actual player/room-facing configurability - team toggles, item spawn rates, gravity/speed/damage modifiers per team, timed-round settings, weather - is the gameOptions object, adjustable per-room via slash commands rather than server-wide config. See Moderation and the generated slash command reference for the full change/room/rounds/weather command list - these are the same commands a private-room owner uses to customize their own game (see Users and Ranks for why private rooms get more command access than public ones).

Creating an actual new gamemode

This requires hooking game:GameTypesInit and is a coding task, not a config one - see Events (concept) and the Plugin Development section generally. A "New Gamemode" recipe is planned but not yet written - see Recipes for what's currently available.

Next: Seasonal Events.


This page was drafted with AI assistance and reviewed for accuracy. If something looks wrong, please open a PR or flag it.

Edit this page on GitHub
Prev
Sounds
Next
Seasonal Events