Adding a Job¶
No C# required. Job definitions are content, following the exact same reasoning ADR-0004 established for items — see Architecture/16_JOBS_FRAMEWORK.md §2.
What you'll have at the end: a new job — using the legacy roster's "Chef" as the worked
example — joinable in-game with /team, editable without touching code, and hot-reloading
live while the server runs.
1. Before you start¶
You need the S&box editor open on this project. If you're recreating a legacy job, its
original values are in
Legacy/05_TEAMS_JOBS_FACTIONS.md §3
— Assets/Jobs/README.md already has all sixteen of the legacy roster's real jobs migrated as
worked examples, so check there first in case the job you want already exists.
2. Create the asset¶
In the S&box editor's asset browser:
- Navigate to
Assets/Jobs/. - Right-click → Create → Job. This is the
.jobGameResourcetype registered by Architecture/16_JOBS_FRAMEWORK.md. - Name the file
chef.job—snake_case, matching the job's id, the same convention Guides/02_ADDING_AN_ITEM.md uses for items.
3. Fill in the inspector¶
| Field | Value | Why |
|---|---|---|
| Display Name | Chef |
What players see |
| Group | Civilians |
One of the three fixed groups — Officials, Civilians, Underground. Not extensible; see 16_JOBS_FRAMEWORK.md §1 |
| Gang Id | 0 |
0 = the group's general population, not a sub-organisation |
| Level | 1 |
Rank within the gang. Not read by anything yet — demotion/mutiny logic will use it later |
| Max Players | 0 |
0 = unlimited. Set a real cap (e.g. 15 for Police Officer) if the job should be limited |
| Required Character Permission | (leave empty) | Set this if only characters holding a specific permission may join — most jobs need none |
| Is Mandatory Transit | unchecked | Legacy's "Master Race" flag — only ever true for a job like Citizen that every cross-group move must pass through. See 16_JOBS_FRAMEWORK.md §4 |
| Rejoin Cooldown Minutes | 0 |
Minutes before this job can be rejoined after leaving it. 0 = no cooldown |
| Sort Order | 13 |
Explicit presentation order — pick a number in the right group's range so this job doesn't jump ahead of jobs you didn't mean to reorder. Assets/Jobs/README.md documents the ranges already in use (Officials 0–4, Civilians 10–14, Underground 20–25) |
| Can Manufacture | Food |
Item categories a holder of this job may manufacture — legacy's canmake list. Leave empty for a job that can't manufacture anything |
4. Save and join it¶
Save the asset. Like items, .job assets hot-reload — no server restart needed to see a new
job registered.
Join it with /team chef (see Player/01_CHAT_AND_COMMANDS.md),
or through the player menu's Character tab's Become button once
Player/05_USER_INTERFACE.md's Character tab is available to
you. Joining checks, in order: the job exists, you're not on a rejoin cooldown, it isn't full,
the move respects mandatory-transit rules, and you hold Required Character Permission if one
is set — see Architecture/16_JOBS_FRAMEWORK.md §4
for the exact order.
5. Verify it worked¶
- The job appears in the asset browser and in the dev menu's job list with a Join button.
- It loads with no error in the console — an empty
Display Nameor a negativeMax Players/Rejoin Cooldown Minutesfails loudly, naming this asset specifically, not silently. /team chefsucceeds and your character's job changes.- Editing a property (say,
Max Players) and re-saving while the server runs updates the live job without a restart.
6. What this doesn't do yet¶
Several things the legacy game's jobs did are deliberately not built, named here rather than left as a silent gap — see Architecture/16_JOBS_FRAMEWORK.md §6 and Assets/Jobs/README.md for the full list:
- Salary and payday.
Can Manufactureand every other field here are enough to define a job, but nothing pays anyone yet — Economy's payday loop doesn't exist. - Starting loadouts and ammo grants. A job that should spawn its holder armed (Police Officer, for instance) doesn't do that yet — there's no field for it.
- A
/manufacturecommand.Can Manufactureis real data, consumed by nothing — the command that would actually let a job holder craft something isn't built. - Demotion, mutiny, and job-blacklisting — real governance features, out of scope for a content-authoring pass.
If the job you're adding needs one of these to feel complete, the data you just authored is still worth having — it's ready the moment the feature that reads it lands.