Repository navigation
v0.0.3 - Pre-Alpha Playtest
Pre-release
Pre-release
Pre-Alpha Playtest
WARNING: This release is NOT in a fully playable state. It is provided strictly for testing and development purposes. DO NOT add this to multiworld games unless every player in the session knows you are testing an incomplete integration and the host has explicitly agreed to it. This can and will cause issues in your multiworld.
This software is provided "as is", without warranty of any kind, express or implied. In no event shall the authors be liable for any claim, damages, or other liability arising from the use of this software. Use at your own risk.
v0.0.3 is a focused stability and correctness pass - most of the day-one runtime bugs in v0.0.2 are now fixed and runtime-verified. Feedback welcome in the Issues tab.
Critical bug fixes (C# mod)
- Crash on first boost purchase fixed. v0.0.2 threw `ArgumentException: Invalid generic arguments` when applying a boost, trap-on-entity, or filler because `EntityComponentRegistry.GetEnabled` has a `where T : BaseComponent, IRegisteredComponent` constraint that `MakeGenericMethod` enforces at runtime. Now uses `EntityRegistry.Entities` + `BaseComponent.GetComponent()` per entity (unconstrained, safe).
- Filler goods injection fixed. `Inventory` extends `BaseComponent`, not `UnityEngine.Object`, so `FindObjectsByType` always returned empty. Now finds stockpiles correctly and uses `Inventory.Gives()` to prefer stockpiles over beaver-carry inventories.
- Boost re-apply on save/reload fixed. Bonuses were silently lost after reload because `Load()` ran before entities were instantiated. Moved to `PostLoad()` where entities actually exist. Runtime-verified: `MovementSpeed: 1.25` persists across reload on 200+ entity saves.
- Hazardous Weather trap now actually triggers hazardous weather. v0.0.2 updated history counters (enough for milestone firing) but didn't transition the visual weather state. Now shortens the current temperate cycle via `TemperateWeatherDurationService` backing field; the game's own cycle-end handler transitions through the proper event chain with the native "Drought/Badtide approaching" countdown UI.
New features
- `Trap: Hazardous Weather` replaces `Trap: Early Drought` + `Trap: Badwater Leak`. Single consolidated trap item; the game's own `HazardousWeatherRandomizer` picks drought or badtide based on map conditions. Honest semantics on maps without badwater.
- `Extra Early Survival` YAML option (default on) - forces one random housing/food/wellbeing building per category into sphere 1 alongside the existing essentials. 50-seed validation shows +60pp food and +46pp wellbeing availability on Folktails. Requires `force_early_items` and milestones enabled. Toggle off for leaner seeds.
- Population milestone "Reach 10 Beavers" → "Reach 15 Beavers". 10 was below starting population on normal (14), so it auto-fired on connect. 15 requires actual growth.
- `BonusId` validation at load - the mod now diffs the hardcoded `BoostMapping` BonusIds against the live `BonusTypeSpecService` on startup and warns if any are unknown. Would have caught all 4 v0.0.1 boost string bugs at load.
- Reflection dry-runs at load - the mod exercises every reflection path on startup so runtime-constraint failures surface in `Player.log` at connect instead of mid-gameplay.
- `ConnectionBlocked` resets on save load - a faction mismatch used to permanently block reconnects until you fully restarted Timberborn. Now clears on every save load.
- `IPostLoadableSingleton` diagnostic snapshot logs entity / BonusManager / Inventory / NeedManager / beaver / bot counts at load so you can sanity-check scale.
Known issues (open follow-ups)
- Hungry / Thirsty Beavers traps silent no-op. `NeedManager` reflection paths (`k__BackingField`, `Need.NeedId`) don't resolve against the current `Timberborn.NeedSystem.dll`. Pending DLL byte-regex diagnosis (pythonnet can't load NeedSystem due to its `ImmutableArray` dependency).
- T3 progression items can land at T1 shop slots. `Rules.py` slot access rules don't constrain item placement by item tier, so `Smelter` (T3) can appear at `Shop: C-01` (T1). Construction costs still gate actual use, but the sequence feels loose. APWorld-side follow-up.
- Boosts apply to bots in addition to beavers. `BonusManager` is attached to both. Some bonuses are semantically nonsensical on bots (`LifeExpectancy`, `GrowthSpeed`); bonuses the engine doesn't apply to bots just no-op internally.
- "Unknown location: Victory: Population" warning on goal completion. Cosmetic - goal still fires correctly via `SendGoalCompleted` StatusUpdate path.
Installation
- Extract `Archipelago.zip` into your Timberborn mods folder (`Documents/Timberborn/Mods/`)
- Place `timberborn.apworld` in your Archipelago `custom_worlds/` folder
- Requires Archipelago 0.6.7
Full changelog
- `ef9d997` crash fix: EntityRegistry + BaseComponent.GetComponent
- `a3595a0` ReadOnlyList null-check fix; load-time reflection dry-runs
- `0f68cba` PostLoad boost re-apply timing + diagnostic
- `ce5b764` ConnectionBlocked resets on save load
- `a988215` milestone comment sync with APWorld rename
- `6a14df5` filler Inventory BaseComponent fix
- `8e05c87` DiscoverBonusIds validator fleshed out
- `14d87f9` Hazardous Weather trap redesign
- `2c38099` TemperateWeatherDuration backing-field reflection
- `d58b343` explicit _trapScheduledAwaitingTransition flag
- `2253b9d` simplified Hazardous Weather to temperate-shortening only
- `9b371e9` manifest bump to 0.0.3.0 + IT faction description