Buildings and roads
Players spend lumber to put structures on cleared parcels. Each parcel holds at most one building. A road is separate: it can share a parcel with timber or a building.
| Structure | Key | Cost (bd ft) | In-game note |
|---|---|---|---|
| Cabin | cabin | 1,500 | Your home on the claim |
| Woodshed | woodshed | 500 | Keeps the crew rested longer |
| Barn | barn | 2,500 | Required to prove up |
| Sawmill | mill | 4,000 | Mill your own logs and buy from neighbors |
| Road | road | 200 | Shares the parcel; cuts skidding losses |
Placement
Section titled “Placement”build(parcel, kind), kind other than road: refuse if the parcel has standing timber, a building, or a field refuse if kind already exists, except the woodshed require lumber >= cost lumber -= cost; parcel.building = kind; built[kind] += 1
build(parcel, "road"): refuse if the parcel already has a road require lumber >= 200 lumber -= 200; parcel.road = trueA parcel that is allowed a building is therefore any cleared parcel without a field or another building. That includes meadow parcels. The interface additionally disables the building buttons on the landing. The build function does not check this itself. A road may be built on any parcel without one: timbered, cleared, farmed or built on.
Only the woodshed is repeatable. Each extra woodshed costs 500 bd ft and adds 500 bd ft to the appraisal, but crews rest only 25 percent faster no matter how many exist.
Businesses (see town and markets) are stored as a building of kind biz: plus the market id, and are placed with their own rules.
Effects
Section titled “Effects”| Structure | Effect |
|---|---|
| Cabin | A deed goal. Required before a boarding house. Adds 1,500 to the appraisal. |
| Barn | A deed goal. Required before a teamster stable. Adds 2,500 to the appraisal. |
| Woodshed | Crew rest is multiplied by 0.75. Adds 500 each to the appraisal. |
| Sawmill | Creates the sawmill record (see your sawmill). Adds 4,000 and later upgrade costs to the appraisal. |
| Road | See below. Adds 200 each to the appraisal. |
The barn and cabin do nothing else in the code. The barn does not store produce: harvested crops go straight into a counter whether or not a barn exists.
A road on a parcel changes three things:
skidding: stepCost(parcel) = 1 (2 on steep ground), instead of 2 or 3 (+3 on steep ground)yield: logs cut from the parcel are multiplied by ROAD_SHARE = 0.9appraisal: +200 per road parcelThe landing starts as a road, so a new claim already holds 200 bd ft of appraised road. Roads are never removed.
Inputs, outputs and state
Section titled “Inputs, outputs and state”Inputs are a parcel, a kind and the lumber on hand. Outputs are a changed parcel, a counter and a ledger entry. State: each parcel’s b (building kind or null) and road flag, and the built map from kind to count. Business buildings are recorded as built["biz:id"] = 1. The legacy field cabinAt is set when a cabin is built and is not read.
For the shared game
Section titled “For the shared game”Buildings change the economy in three places: the appraisal, the deed and the rest of the crew. A server should own the parcel grid so that a building cannot be claimed without payment. Placement rules live partly in the interface in the prototype, so the server should hold a single rule set: no building on the landing, no building on a field, and a decision on meadow parcels. The woodshed that can be bought repeatedly is a lumber sink with an appraisal benefit.
Source: prototype/index.html · constants BUILD, ROAD_SHARE in rules.json · logic build, claimValue, stepCost