The mission system allows you to create engaging employment opportunities for users. Missions come in three types: singleplayer missions (standalone jobs), mission chains (linked sequences that build on each other), and epic missions (multiplayer team-based challenges with dynamic events and elimination mechanics).
All missions are stored as JSON files in the employment/missions/ directory, organized by fixer (employer).
Each fixer can have standalone missions in an any/ directory, and mission chains in numbered directories
(e.g., one/, two/, three/).
Singleplayer Missions
Singleplayer missions are standalone jobs that users can accept individually. They come in three difficulty levels: low, medium, and high risk. Each mission has a chance of success or failure based on user preparation and bonuses.
Basic Structure
A singleplayer mission is a JSON object with the following required fields:
{
"title": "Mission Title",
"difficulty": "low",
"chain": "",
"description": "The fixer describes the mission to the user...",
"success": "What happens when the mission succeeds...",
"failure": "What happens when the mission fails...",
"triggers": {
"success": [...],
"failure": [...]
}
}
Required Fields
- title - The mission name, displayed when offered and tracked in user history
- difficulty - One of:
"low","medium","high"- Low risk: ~80% base success chance, shorter completion time, lower payouts
- Medium risk: ~55% base success chance, moderate time and payouts
- High risk: ~20% base success chance, longer time, high payouts
- chain - Leave empty (
"") for standalone missions, or set to chain name for mission chains - description - The mission briefing, written from the fixer's perspective, explaining what needs to be done
- success - Message shown when the mission succeeds, from the fixer's perspective
- failure - Message shown when the mission fails, from the fixer's perspective
- triggers - Optional hooks that can fire on success/failure (currently placeholder structure)
Writing Tips
- Keep descriptions concise but evocative - Users need to understand the mission quickly
- Write in your fixer's voice - Each fixer should have a distinct personality
- Success/failure messages should feel consequential - Make outcomes matter to the story
- Vary mission types - Thefts, deliveries, investigations, escorts, sabotage, etc.
- Reference your world-building - Connect missions to your lore and setting
Example Singleplayer Mission
{
"title": "Seriously Jacked ...Up?",
"difficulty": "low",
"chain": "",
"description": "Guy I know from war, Automatic Jack, not called that because he can lift car though. Back to point, he has cybernetic arm, except not like mine, much more fancy. What was I saying? Oh yeah, he need spare part located for fixes.",
"success": "Ratz not know how you find DeckRipper Oscillation Overthruster module, but my guy Jack says his replacement arm never made him feel so good about himself now...",
"failure": "Jack call me this morning, wants to know where you got that faulty actuator model for his arm. Jack very unhappy with unit, in hospital now, may never walk right again...",
"triggers": {
"success": [{"call": "", "value": ""}],
"failure": [{"call": "", "value": ""}]
}
}
Mission Chains
Mission chains are sequences of connected missions that tell a larger story. Users must complete missions in order, and each mission builds on the previous one. Chains can culminate in epic missions.
Chain Structure
A mission chain is a JSON array containing multiple mission objects. All missions in a chain share the same
chain field value. Missions are linked using triggers that check if prerequisite missions have been completed.
[
{
"title": "First Mission",
"difficulty": "low",
"chain": "chainname",
"description": "...",
"success": "...",
"failure": "...",
"triggers": {
"launch": [{"call": "", "value": ""}],
"success": [...],
"failure": [...]
}
},
{
"title": "Second Mission",
"difficulty": "medium",
"chain": "chainname",
"description": "...",
"success": "...",
"failure": "...",
"triggers": {
"launch": [
{
"call": "HASCOMPLETED",
"value": "First Mission"
}
],
"success": [...],
"failure": [...]
}
}
]
Chain Linking
To link missions in a chain, use the HASCOMPLETED trigger in the launch section.
This ensures the mission is only offered after the prerequisite mission has been completed successfully.
Trigger format:
"triggers": {
"launch": [
{
"call": "HASCOMPLETED",
"value": "Title of Prerequisite Mission"
},
{
"call": "",
"value": ""
}
]
}
The title in the value field must exactly match the title of the prerequisite mission.
Chain Progression
Mission chains typically progress in difficulty:
- Low risk - Introduction mission, establishes characters and setting
- Medium risk - Builds complexity, introduces complications
- High risk - Major challenges, high stakes
- Epic - Climactic multiplayer mission (if applicable)
Each mission in a chain should advance the story while remaining satisfying on its own. Users should feel like they're progressing through a narrative arc, not just completing disconnected tasks.
Example Mission Chain
This example shows a chain with three missions building up to an epic:
[
{
"title": "Putting a Finn in the Water",
"difficulty": "low",
"chain": "sprawltrilogy",
"description": "The Finn, local broker, need some parts for cyberware scanner...",
"success": "The Finn pleased to have scanner working again...",
"failure": "You literally in hottest place in world for black market cyberware tech...",
"triggers": {
"launch": [{"call": "", "value": ""}],
"success": [...],
"failure": [...]
}
},
{
"title": "One of a Kind",
"difficulty": "medium",
"chain": "sprawltrilogy",
"description": "You heard of Panther Moderns? weird, crazy guys...",
"success": "*Ratz shuffles you into a backroom*\n Tak, this is gear they want...",
"failure": "*Ratz shuffles you into a backroom*\n Arggh.. Dumbkopf!! This isn't unit...",
"triggers": {
"launch": [
{
"call": "HASCOMPLETED",
"value": "Putting a Finn in the Water"
}
],
"success": [...],
"failure": [...]
}
},
{
"title": "Divide By Zero",
"difficulty": "high",
"chain": "sprawltrilogy",
"description": "So, my guy Bobby, I think he got loose wires...",
"success": "I knew we could Count on you, to Zero in on the truth...",
"failure": "Wow, whatever thing you run into, it ICE-fry your brain nearly...",
"triggers": {
"launch": [
{
"call": "HASCOMPLETED",
"value": "One of a Kind"
}
],
"success": [...],
"failure": [...]
}
}
]
Epic Missions
Epic missions are multiplayer team-based challenges that represent the climax of a mission chain. They feature dynamic events, elimination mechanics, and multiple rounds of challenges. Teams work together to progress through the mission, with individual members facing elimination tests along the way.
Epic Mission Structure
Epic missions include all the fields from regular missions, plus additional fields for events, progress updates, and team dynamics:
{
"title": "Epic Mission Title",
"difficulty": "epic",
"chain": "chainname",
"description": "Epic mission briefing...",
"success": "Epic success message with template variables...",
"failure": "Epic failure message...",
"events": {
"1": {
"plot": "First event description...",
"progress": "",
"failure": "",
"survive": ""
},
"2": {
"plot": "Second event description...",
...
}
},
"progress-early": [...],
"progress-late": [...],
"progress-survival": [...],
"survival": [...],
"elimination": [...],
"leadsurvival": [...],
"leadelimination": [...],
"teamsurvived": [...],
"teameliminated": [...],
"triggers": {...}
}
Epic-Specific Fields
Events (events)
Events are numbered plot points that unfold as the mission progresses. Each event has:
- plot - The event description shown to the team (required)
- progress - Optional message when team progresses through this event
- failure - Optional message if team fails at this event
- survive - Optional message when someone survives an elimination at this event
Events are numbered sequentially (e.g., "1", "2", "3"...) and are displayed in order as the mission progresses. Typically, epic missions have 15-20 events, though this can vary based on your story needs.
Progress Messages
- progress-early - Messages shown in early rounds when the team makes progress (array of strings)
- progress-late - Messages shown in later rounds when close to completion (array of strings)
- progress-survival - Messages shown during survival rounds when the team progresses (array of strings)
These messages use template variables: {{.TeamName}}, {{.TeamMembers}}
Elimination & Survival Messages
- survival - Messages when a team member survives an elimination test (array of strings)
- elimination - Messages when a team member is eliminated (array of strings)
- leadsurvival - Messages when the team leader survives an elimination (array of strings)
- leadelimination - Messages when the team leader is eliminated (array of strings)
These use template variables: {{.TeamName}}, {{.TeamMembers}}, {{.TeamMemberAtRisk}}
Final Outcome Messages
- teamsurvived - Messages when the team successfully completes the epic (array of strings)
- teameliminated - Messages when the entire team is eliminated (array of strings)
These use template variables: {{.TeamName}}, {{.TeamMembers}}
Template Variables
Epic missions use template variables that are replaced with actual values during mission execution:
{{.TeamName}}- The team's generated name{{.TeamMembers}}- List of all team members (formatted){{.TeamMemberAtRisk}}- The team member currently facing elimination
Example usage:
"survival": [
"Sense/Net Mercs corner Team ***{{.TeamName}}***, screaming something about revenge for 3Jane, nearly manage to flatline {{.TeamMemberAtRisk}} too.. Nearly...",
"Team ***{{.TeamName}}*** not Finn-ished yet, but come close to losing {{.TeamMemberAtRisk}} as hunt for bobby and totality chip surges across factory complex."
]
How Epic Missions Work
Epic missions run in rounds. Each round, the system determines whether it's a progress round or an elimination round:
- Progress rounds - The team advances through events. Messages from
progress-early,progress-late, orprogress-survivalare shown based on mission stage. - Elimination rounds - A team member is selected (often the least prepared) and must pass a survival test. If they fail, they're eliminated and
eliminationorleadeliminationmessages are shown.
The mission continues until either:
- The team successfully completes all events (
teamsurvivedmessages shown) - The entire team is eliminated (
teameliminatedmessages shown)
Team preparation, leadership bonuses, and individual member bonuses all affect the chances of success and elimination.
Epic Eligibility
Epic missions are only available to users who have completed all non-epic missions in the chain. The system checks mission history to ensure users have successfully completed the prerequisite missions before offering the epic.
When writing epic missions, ensure they make narrative sense as the culmination of the chain. Epic missions should feel like the payoff for completing the earlier missions, not just a harder version of a regular mission.
Organization & File Structure
Directory Organization
Missions are organized by fixer (employer) in the employment/missions/ directory:
employment/
└── missions/
├── any/ # Standalone missions available from any fixer
│ └── *.json # Individual mission files
├── one/ # Missions for Fixer 1
│ └── ChainName.json # Mission chain files
├── two/ # Missions for Fixer 2
│ └── ChainName.json
└── three/ # Missions for Fixer 3
└── ChainName.json
- any/ - Contains standalone missions not tied to a specific fixer. Files can contain single missions or arrays of unrelated missions.
- one/, two/, three/ - Fixer-specific directories. Each file typically contains one mission chain (JSON array).
File Naming
Mission chain files are typically named after the chain's theme or story. Use descriptive names that make it easy to identify the chain's content:
- Good:
Burning_Chrome.json,Sprawl_Trilogy.json,The_Matrix.json - Avoid:
chain1.json,missions.json,epic1.json
Mission Pool Distribution
The bot distributes missions from the pool based on:
- User's mission history (they won't get the same mission repeatedly)
- Difficulty level (low/medium/high)
- Chain prerequisites (chain missions only offered when prerequisites are met)
- Fixer preferences and user reputation
- Mission cooldown periods
When writing missions, provide variety at each difficulty level so users have multiple options as they progress.
Best Practices
Writing Engaging Missions
- Create compelling stakes - Make missions feel important, not just busywork
- Build narrative momentum - Each mission should advance a story or character arc
- Vary mission types - Mix stealth, combat, investigation, social, technical challenges
- Reference your world - Connect missions to locations, characters, and events in your setting
- Write in your fixer's voice - Each fixer should have distinct personality and speech patterns
- Make failures interesting - Failure messages should be consequences, not just "you failed"
Epic Mission Design Tips
- Plan your event progression - Events should build tension and escalate stakes
- Write multiple variations - Provide 3-5 options for each message type to avoid repetition
- Use template variables effectively - Personalize messages with team names and member mentions
- Balance challenge - Epic missions should be difficult but not impossible
- Create memorable moments - Epic missions should feel like climactic set pieces
- Consider team size - Messages should work whether the team has 3 or 8 members
Maintaining Consistency
- Keep fixer voices distinct - Each fixer should sound different from others
- Maintain world consistency - Missions should fit within your established setting and lore
- Reference previous missions - Chains should feel connected, not disjointed
- Follow your style guide - Maintain consistent tone, vocabulary, and formatting