Docs · Start here
Open the playtest
docs/playtest.mdEdit on GitHub
There are two ways to play. Host runs the village on this PC as a dedicated server, the way friends will play it: start with Play tonight. Workbench play runs it inside Workbench for one person: see Start DebugWorld. Both use main; the old release/next branch is merged and gone.
Walk up to each site and try it. Send back what you did, what you expected, and what you want built next. That note becomes the next agent prompt. The last QA pass is playtest/rc-2026-11-08.md (the first: playtest/qa-2026-11-08.md).
Play tonight
Double-click Play Life Framework.cmd in your clone, or run:
tools\cli playtest
That is all. It updates a playtest copy of main (..\Life-Framework-playtest, never an agent's work in progress), starts the server (continuing your last save), and opens the game joined to it. Register on form R-89 and play. When you are done:
tools\cli playtest stop
It closes the game and the server and saves. tools\cli playtest status shows both; tools\cli playtest shortcut puts the launcher on your desktop. If an agent's test is using the server when you start, it waits for it (up to 30 minutes) and says so; while you play, agent tests move to the test box.
Your character is keyed by your Steam name and kept in %LOCALAPPDATA%\LifeFramework\host. The launcher prints how a friend joins at the end (How a friend joins); give friends distinct Steam names. The manual steps behind the command are in Host a playtest on a dedicated server.
What to try tonight
Nothing outside the game is needed: the clerk on the square, the signs, and the prompts lead the way. In this order, it is the M1 loop:
- Register on form R-89, then follow the clerk: ID card, town board, a parcel run ("Run paid: $40").
- You start with $1,000 in the bank. At the car lot, "Look at the cars": the price sheet shows what you can buy. Buy the S105.
- Your character also owns a car in the garage and one at the impound lot (playtest only). Read the ledger at the garage, retrieve one, collect the other at the impound desk for the fee.
- The general store sells food, drink, and a dressing from a price sheet.
- Police: the first player on a fresh playtest save is on the police roster. Clock in at the station desk; the kit includes the key to the station car. A second player robs
Roadmap_Fuel_Till: the officer gets the radio dispatch and reads the wanted board, then arrests the robber, who goes to the cell. - Found an organization at
Roadmap_Org_Desk, take the alley yard lease, store something in the stash, run contraband from the barn to the pub. toolscli playtest stop, thentoolscli playtestagain: you wake on the square with your cash, bank, job, organization, and cars.
Known rough edges (2026-11-08)
Do not spend the evening on these; they are filed or being worked. Full list: playtest/rc-2026-11-08.md.
- Esc does not close the wanted card, or the org ledger right after founding; use its button or walk away (#199).
- The arrest now moves the prisoner on your client; it was fixed after the last check, so say whether you end up in the cell.
- Some NPCs may appear half-dressed.
- Fuel delivery opens after five parcel runs and the taxi after fifteen runs in all (#156).
Start DebugWorld
- Open
addons/LifeFramework/LifeFramework.gprojin Workbench. - Build for PC.
- Play the scenario Life Framework Test Suite (
Missions/EL_DebugTest.conf). That loads DebugWorld. It does not run the automated test suite unless you launch that suite yourself. Do not runtools\cli test. - Pick Civilian or Police and finish character creation.
- You start on the village square at the west end of the main street. Walk east: post office, bank and ATM, general store and market, car dealer and garage, police station, hospital and fuel station, org registry with the hideout down the alley to its east. The farm is north of the square, the quarry and builders' yard south of the street, the forest at the east end, and the contraband barn up the dirt track past the village. The map is in
docs/roadmap/m1-25-village.md. The fenced yard to the south-west is the test annex; nothing there is part of the playtest.
Walk up to an object. The interact key offers the same actions you see when you look at it. If looking at a site offers nothing, write that down.
Stop play mode and start the same scenario again when a step says restart.
What to try
Do these as separate passes if one character cannot be both civilian and police. Name the Roadmap_ entity in your note.
Arrive
Register a character. Say whether the name screen appeared straight away, with no faction screen before it.
Civilian work
At Roadmap_Job_Depot, take the parcel job. Carry it to Roadmap_Job_Drop. You should be paid cash once. Abandoning the job should pay nothing.
Level 1 is the parcel. Level 2 opens fuel delivery (Roadmap_Job_FuelCan). Level 3 opens the taxi (Roadmap_Job_TaxiPad). If a job you have not earned is offered, or an earned job is missing, say so.
Crops, logs, and ore are the older chains (apples, plums, tomatoes on the farm; logging at the forest edge; mining, cement, gravel, sand south of the street). Gather one and sell it at the market stalls next to the general store.
A vehicle
At Roadmap_Vehicle_Lot, buy a vehicle. Lock Roadmap_Vehicle_S105 and unlock it with the key. The wrong key should fail.
One robbery
A till pays cash onto you. Your bank balance stays put, and you become wanted. Try Roadmap_Fuel_Till or Roadmap_Hospital_Till. A second try during the cooldown should be refused.
A locked target is a breach. Plant the charge at Roadmap_Breach_Door, Roadmap_Bank_Vault, Roadmap_Hospital_Cabinet, or Roadmap_Jail_Door, then wait. The bank pays with the bag at Roadmap_Bank_Bag, not with a bank deposit. The cabinet should give medicine. The hideout door is not a breach.
Police
Everyone joins as a civilian; there is no faction screen. To play police, the player's uid must be on the police roster. On the hosted server there is no admin login, so write the file by hand:
- Have the player join once. The host log (
tools\cli host statusprints its path) shows[ELDebug:Whitelist] join allowed: uuid=<their id>. tools\cli host stop, then create%LOCALAPPDATA%\LifeFramework\host\profile\profile\LifeFramework\whitelist.txtwith five lines:1,1, the uuid,POLICE,0(version, one faction entry, who, which faction, no job entries).tools\cli host start.
At the station desk (Roadmap_Police_Desk, the punch clock under the police station porch) use Clock in: your civilian clothes and pockets are stored and you get the police uniform and M9 (a first shift) or the police inventory you left at your last clock-out. Clock out at the same desk swaps back and pays duty pay in cash. Say whether anything from one inventory showed up in the other. Read the wanted board (Roadmap_Police_WantedBoard) on the station front wall on and off duty: police see where each crime happened, everyone sees a description, and a name only after an ID check. At Roadmap_Police_Armory (the grey locker under the porch), take the rank kit.
A new officer is patrol: a pistol and fines up to 1000. Senior is a rifle and fines up to 5000. Both can arrest and escort. An hour on duty promotes. Promoting yourself should be refused.
Arrest a wanted player into Roadmap_Jail_Cell. Repair an open breach. At Roadmap_Escort_Car, an on-duty officer can put a wanted player on foot into a passenger seat; the sentence starts when they reach the cell.
Organization, hideout, convoy
At Roadmap_Org_Desk, the screen should show an empty organization, a name field, create, deposit, withdraw, and buy processing. If the screen is blank, that is the bug to report.
Create an organization, deposit cash, and buy the processing upgrade. The fund is not your personal bank balance.
Roadmap_Hideout_Door opens for a member and refuses everyone else. Roadmap_Hideout_Machine works only after the processing upgrade. Roadmap_Hideout_Stash is a real container: members open it and store items, everyone else is refused with a sound and a toast, and its contents survive a restart.
Run the contraband convoy: Start convoy at the crates by the barn (Roadmap_Convoy_Start) hands you a crate of spirits; drive it to the back of the pub on the square and Deliver contraband at the pallet (Roadmap_Convoy_Drop). Delivery pays cash in hand once. Leaving the vehicle or dying should fail the run. An on-duty officer can confiscate the flagged goods.
Restart
Stop play and start the scenario again.
Still there: organization members, the fund, the processing upgrade, hideout ownership and its lock, and the vehicle lock.
Expected to reset: police rank goes back to patrol. A jail sentence, an open breach, and the bank bags on the ground are not saved yet and are lost.
Write down anything that did not match that.
Not in this build
Do not file these as broken. File them under "build next" if you want them.
- Buying a house
- A general crafting bench
- Revive
- A police mission board
- World events
- New guns, cars, or aircraft
Host a playtest on a dedicated server
This runs the town on your PC as a dedicated server so friends can join and keep what they earn across restarts. You need the Arma Reforger Server (Steam app 1874900) and Node. It uses the mission Life Framework Playtest Town (Missions/LF_PlaytestTown.conf): DebugWorld with the debug menu and harness tools closed to everyone except server admins, and no test suite.
Host from a worktree. host start refuses in the main checkout, because that copy belongs to the world editor:
tools\cli wt new playtest # once
cd ..\Life-Framework-ws-playtest
tools\cli host start
host start:
- copies any existing saves to
backups\<time>-start, then boots with-loadSessionSaveso the latest save continues. With no save it starts fresh. - waits for the world and prints the session line:
session continued from a save point (-loadSessionSave)orfresh session: no save point exists for this mission. - prints the join addresses and returns. The server keeps running in the background.
Other commands:
| Command | Does |
|---|---|
tools\cli host status |
Running or stopped, the newest save point, the newest backup, the log path, join addresses |
tools\cli host stop |
Asks the server to close normally, waits for save completed (SHUTDOWN), then copies the saves to backups\<time>-stop |
tools\cli host backup |
Copies the saves now |
Always stop with host stop. Closing the window or killing the process skips the shutdown save, so the restart loses everything since the last autosave (every 10 minutes).
The host profile, saves, logs, and backups live in %LOCALAPPDATA%\LifeFramework\host (set LF_HOST_DIR to move it). Nothing there is inside a worktree, so pruning a worktree or running tests never touches the saves. Restore a backup by stopping the host and copying the backup folder back over profile\profile\.save.
Only one server can run on this PC at a time. Every server listens on UDP port 2001. If a test run in another worktree holds the port, host start says so; host start --wait queues behind it. While the host runs, tools\cli test in any worktree waits for it.
How a friend joins
The mod is not on the Workshop yet, so your friend needs the same addon you host:
-
Clone the repository and check out the same commit you host (
git rev-parse HEADin your worktree). -
Start the release game executable from the game folder with the addon and your address. Not
ArmaReforgerSteamDiag.exe: it stops on a modal dialog for a vanilla HUD script error.ArmaReforgerSteam.exe -client <your address> -addonsDir "<their clone>\addons" -addons LifeFramework-clientconnects on port 2001. On the same network use the LAN addresshost startprinted. Over the internet use your public IP. -
Each player is keyed by their Steam name (the server runs with
-noBackend, so there is no platform identity). Distinct names keep distinct characters across restarts.
Firewall and port forwarding
Allow ArmaReforgerServer.exe through Windows Firewall when Windows asks (private and public networks for internet play). For friends outside your network, forward UDP 2001 on your router to this PC's LAN address. Port 2001 is fixed in this mode: the server ignores -bindPort when it runs a mission directly, and the JSON server config (-config) cannot be combined with a local addon.
Send feedback
Open a GitHub issue with the Playtest form: https://github.com/Life-Framework/Life-Framework/issues/new/choose
If that form is not listed yet, open Feature request or Bug report and paste the block below. One issue per problem or idea. A screenshot of the site, the menu, or a white mesh belongs on the issue.
### Title
### Where
DebugWorld entity name, and Civilian or Police.
### Did
1.
### Expected
### Happened
Blank menu, missing action, white mesh, wrong payout, or a site you could not reach.
### Build next
The change an agent should make. Name the entity. Leave this empty if you only want the problem recorded.
A useful "build next" line is specific: "At Roadmap_Org_Desk the menu never appears. Open it as a visible screen with the organization name, fund, and the processing purchase." A vague line ("add more crime") is still welcome, and a second sentence that names a place makes it a prompt.