# Command-line flags

> Every flag of the game client and the server.

<!-- Generated by `zombye-server --docs`. Do not edit: change the game and generate again. -->

## `zombye-server`

Modes:
- `zombye-server --mcp` — MCP server on stdio. Time only advances when an agent calls
  `step_ticks`, so agent runs are deterministic and reproducible.
- `zombye-server --mcp-http [ADDR[:PORT]]` — the same MCP server over streamable HTTP
  (`mcp_http.rs`), for agents that reach it over the network: `POST /mcp`, by default on
  `127.0.0.1:8787`. One world, shared by everyone who connects. Needs a bearer token
  (`ZOMBYE_MCP_TOKEN`, or `--mcp-token T`; `--mcp-token-in-url` also takes it as `/mcp/T`) or
  `--mcp-no-auth` (open, and then without the debug tools); `--mcp-no-dev` turns the debug
  tools off with a token too; `--mcp-origin ORIGIN` allows a browser origin. No TLS: put a
  reverse proxy or a tunnel in front.
- `zombye-server --bench [--ticks N] [--players N] [--horde N]` — run N ticks and print timing.
  With no players every zombie heads for a debug goal (all of them stay on the active tier);
  with players they start on the road west of town (in the forest on a big map), run in
  circles and make a 60 m noise every 10 s, `--horde N` spawns N more zombies round the first,
  and the report breaks the tick down by tier, and says what the worst tick was made of.
  `--spread` is a realistic server instead: the players on a grid over the whole map, one
  in four running and making a noise now and then, the rest walking.
  `--bench --bots N` is that bench over the real transport: a server on a loopback TCP port and
  N headless bots, each its own connection (the players' places as above, the bots playing
  them), ticking at the real rate; it reports the whole tick (intents, world, snapshots), the
  active zombies and what each client was sent.
- `zombye-server --host [ADDR[:PORT]]` — the multiplayer server (`multiplayer.rs`,
  `zombye_net::host`): game clients join with `zombye --connect HOST[:PORT]`. Listens on every
  interface, TCP port 7777, unless told otherwise. `--max-players N` (default 32, at most 64),
  `--pvp on|off` (default on: players can hurt each other; off is co-op), `--spawn
  spread|together` (default: spread round the town with PvP, together by the first house
  without), `--name NAME`, `--password P`, `--allow-dev` (take dev toggles and debug intents
  from clients), `--budget KB` (kilobytes a second down to each client, default 32, 8 to
  1000: what its snapshots are kept within), `--fair-sight on|off` (#66: a client is told
  of another player only while its survivor sees them, and of one it only hears as a sound;
  default on with PvP, off in co-op), `--logout-secs S` (default 30: how long a
  survivor lies in the world, asleep, after its player leaves), `--logout-safe-secs S` (default
  5: the same when it was left somewhere safe), `--spawn-protection S` (default 10: seconds a
  new survivor can't be hurt by other players). New survivors start with the data folder's
  `start_kit.ron`, or with `--start-kit ITEM[:N],ITEM[:N]...` (`none`: nothing). `--camera
  isometric|first-person` and `--agents off|on|marked` are the camera and agents rules (#69:
  told to every client that joins, and to anyone who asks with `zombye --server-info HOST`;
  clients that say they are programs are refused, let in, or let in and marked). With `--save PATH` the world is loaded or made, autosaved and saved on
  shutdown as below, with whose survivor is whose in `PATH.players`.
  `--admin-mcp [ADDR[:PORT]]` (`admin.rs`) adds the operator's MCP endpoint to the running
  server, by default on `127.0.0.1:8788`: list, kick and ban players, save, change settings, set
  off events, read the log. It always needs a bearer token (`ZOMBYE_ADMIN_TOKEN`, or
  `--admin-token T`); `--admin-origin ORIGIN` allows a browser origin.
- `zombye-server --config FILE` — the dedicated server (`config.rs`, docs/self-hosting.md):
  `--host` with its settings read from one RON file (written with the defaults, commented, if
  it isn't there yet; `server.example.ron` beside this crate's manifest). The file stands for
  the flags above, so a flag on the command line wins over it; its paths are relative to its
  folder, and its world is saved in `world.zsave` there unless it says otherwise. This is what
  the Docker image runs (`Dockerfile`: `--config /data/server.ron`).
- `zombye-server --bots N --connect HOST[:PORT] [--secs S] [--bots-hostile] [--lag MS]` — N headless bot
  clients, each on its own connection, that wander and fight; prints what each costs. `--lag MS`
  makes them play as if that many milliseconds of ping away (lag compensation).
- `zombye-server --benchmark list | table | ID | all` — the agent survival benchmark (#29,
  `benchmark.rs`, docs/benchmark.md): fixed scenarios from the data folder's `scenarios.ron`.
  `list` prints them; with `--mcp` or `--mcp-http`, `--benchmark ID` serves that scenario's
  world to an agent (a player's tools only, one life, time stops when the run is over) and
  writes its result as JSON into `--results DIR` (default `saves/benchmark`) under `--agent
  NAME`; `--benchmark ID|all --baseline idle|brawler|runner` plays it with a built-in script instead;
  `table` ranks the results in the folder.

- `zombye-server --docs DIR [--repo DIR] [--docs-base PATH] [--docs-strict]` — write the game's reference as Markdown pages
  into DIR (`docgen.rs`): every MCP tool, every data file with its fields and shipped values, every
  tuning number and these flags, from the game itself, for the docs site. Says what it found
  undocumented; `--docs-strict` exits 1 if anything is. `--docs-base` is the site path the pages
  are served under (default `/docs/reference/game`).

Common options: `--zombies N` (default: as many as `population.ron` gives for the map, about 2,600
on the default map), `--seed S` (default 1), `--map-chunks N` (a square
map N × N chunks of 16 m; default 30, so 480 m; 64 is about 1 km), `--data DIR` (content
folder; default `$ZOMBYE_DATA`, else the repo's `assets/data`, else a `data` folder beside the
binary: `content::installed_data_dir`).

Saves: `--save PATH` loads that save if it exists (the world options are then ignored) or
makes a new world and saves it there; the server then autosaves to it every
`--autosave-mins N` minutes of real time (default 5; 0 = never) and when it shuts down (stdin
closed, Ctrl-C, SIGTERM or SIGHUP; on Windows also closing the console window). A save made with game data changed since in ways it can't take (a building
template that changes the map, a weapon it uses removed) is refused unless `--load-anyway`, which
loads it dropping what no longer fits; compatible changes load with a note. `--saves DIR` is the folder for the MCP `save`/`load`/`saves` tools
(default: the `--save` file's folder, else `saves`). `--bench --save-bench` also times saving
and loading the world at the end of the run.

Screenshots (MCP `screenshot`, `screenshot.rs`): `--client PATH` is the game client binary to
render with (default `$ZOMBYE_CLIENT`, else `zombye` next to this binary) and
`--screenshot-timeout SECS` how long a render may take (default 60).

## `zombye` (the game)

Each flag with what it takes. Most are for testing, pictures and recordings; a plain start needs none.

| Flag | Takes |
|---|---|
| `--zombies` | `N` |
| `--seed` | `S` |
| `--time` | `HOUR` |
| `--at` | `X,Y` |
| `--map-chunks` | `N` |
| `--angle` | `0..3` |
| `--turn` | `N@SECS[,N@SECS...]` |
| `--opening-hints` | `on\|off` |
| `--novsync` |  |
| `--zoom` | `METRES` |
| `--screenshot` | `PATH` |
| `--screenshot-after` | `SECS[,SECS...]` |
| `--exit-after` | `SECS` |
| `--fight-demo` |  |
| `--weapons-demo` |  |
| `--siege` |  |
| `--pvp` |  |
| `--duel` |  |
| `--autoplay` |  |
| `--sneak` |  |
| `--saves` | `DIR` |
| `--load` | `NAME\|PATH` |
| `--load-anyway` |  |
| `--player` | `ID` |
| `--data` | `DIR` |
| `--mod` | `DIR` |
| `--quicksave-after` | `SECS` |
| `--quickload-after` | `SECS` |
| `--new-run-after` | `SECS` |
| `--render-to` | `PATH` |
| `--size` | `WxH` |
| `--center` | `X,Y` |
| `--hud` |  |
| `--inventory` |  |
| `--find` | `TEXT` |
| `--filter` | `CATEGORY[,CATEGORY...]` |
| `--tab` | `rows\|floor` |
| `--sort` | `name\|type\|weight` |
| `--expand` |  |
| `--pick` | `N,N` |
| `--pick-range` | `A,B[@SECS]` |
| `--drop-picked-after` | `SECS` |
| `--menu` | `SPEC` |
| `--menu-pick` | `N[@SECS]` |
| `--skills` |  |
| `--health` |  |
| `--morning` |  |
| `--graphics-panel` |  |
| `--map` |  |
| `--map-zoom` | `PX` |
| `--map-center` | `X,Y` |
| `--map-all` |  |
| `--skip-hours` | `H` |
| `--hover-tag` | `N` |
| `--debug-stats` |  |
| `--god` |  |
| `--ignored` |  |
| `--crowd-vat` | `PATH[,PATH...]\|DIR\|none` |
| `--survivor` | `PATH\|DIR\|none` |
| `--pose` | `NAME[:U]` |
| `--mute` |  |
| `--volume` | `V` |
| `--music` | `V` |
| `--ui-scale` | `PCT` |
| `--help-text` | `full\|short\|off` |
| `--old-look` | `off\|subtle\|strong` |
| `--connect` | `HOST[:PORT]` |
| `--name` | `NAME` |
| `--password` | `P` |
| `--agent` |  |
| `--server-info` | `HOST[:PORT]` |
| `--server-list` | `FILE\|URL` |
| `--browser` |  |
| `--browser-join` | `N[@SECS]` |
| `--joined` |  |
| `--join-error` | `TEXT` |
| `--hotbar` | `ID[,ID...]` |
| `--hotbar-press` | `K@SECS[,K@SECS...]` |
| `--panel-at` | `PANEL:X,Y[;PANEL:X,Y]` |
| `--drag-panel` | `PANEL:DX,DY[@SECS]` |
| `--lag` | `MS` |
| `--say` | `TEXT[@SECS]` |
| `--shout` | `TEXT[@SECS]` |
| `--whisper` | `TEXT[@SECS]` |
| `--gesture` | `NAME[@SECS]` |
| `--talk-demo` |  |
| `--talk-wall` |  |
| `--holdup-demo` |  |
| `--holdup-auto` |  |
| `--graphics` | `low\|medium\|high\|ultra\|auto` |
| `--vegetation` | `off\|low\|high\|N` |
| `--no-post` | `LIST` |
| `--msaa` | `N` |
| `--shadow-map` | `N` |
| `--render-scale` | `F` |
| `--frame-bench` | `N` |
| `--gun` | `ID` |
| `--give` | `ID[:N],...` |
| `--walls-up` |  |
| `--zombie-silhouettes` |  |
| `--aim-at` | `DX,DY\|zombie` |
| `--first-person` |  |
| `--new-game` |  |
| `--new-game-tab` | `who\|picks\|world` |
| `--new-game-from` | `PATH` |
| `--background` | `ID` |
| `--strengths` | `ID[,ID...]` |
| `--flaws` | `ID[,ID...]` |
| `--outfit` | `ITEM[,ITEM...]` |
| `--difficulty` | `ID` |
| `--walk` | `X,Y;X,Y;...` |