Wreckhold Devlog 04 — Four Thousand Five Hundred Tests, Five Wave Hazards, and Structures That Earn Their Upgrades
Wreckhold ended the last sprint with about 3,900 assertions in its test harness and a solid mechanical foundation. This sprint added 664 more assertions, 360 screenshot batches, five distinct wave hazards, a full structure upgrade system, and a new beacon structure that changes how the night perimeter works. The fortress got deeper. The test suite got thorough enough to catch any new depth that tries to break something.
The QA Expansion: 3,900 to 4,564
The previous devlog described a harness that tripled in size over twenty-three commits. This sprint added another 664 assertions — a 17% increase that targeted the gaps left by that expansion. The new coverage maps almost exactly onto the new systems being built: you don’t add structure upgrades without testing what happens to HP, stats, and visual state at each tier.
New Test Coverage
Building upgrade chain — The upgrade system needed a dedicated block from the moment it landed. Assertions verify that barricades, turrets, and traps each transition correctly from base to upgraded stat profiles, that the upgrade cost is deducted from scrap, that upgrading an already-maxed structure is a no-op, and that tier stat bonuses scale within expected ranges. Wall brace cumulative math also got its own assertions to verify that the stacking formula doesn’t drift.
Economy flow — Fuel costs, dismantle loss rates, and scrap node distance rewards all got explicit assertions. The economy difficulty scaling block verifies that per-tier modifiers hit the expected values and that derived costs don’t fall below zero at any difficulty level. Carry triage and wreck yield/weight got coherence checks so the salvage loop doesn’t silently drift if a config constant changes.
Raider profiles — Raider type profiles now have individual assertions: expected base stats, night unlock thresholds, and the scaling functions that adjust count and HP per difficulty tier. The early clear floor and cap mechanics — which reward aggressive play by reducing the raider total for fast night completions — got bounds assertions so the incentive structure can’t accidentally flip.
Volume cap and state API — Audio volume cap assertions verify that the audio system clamps correctly at the boundaries. State API assertions check that module init, reset, and teardown leave no orphaned state. Floattext (the floating damage numbers) got validation that entries expire on schedule and that the pool cap is enforced.
Config coherence passes VI through XII — Eleven coherence passes ran against the config. Passes VI and VII added cross-system balance checks: wave composition templates against actual raider unlock schedules, hazard probability weights against the 35% total cap, upgrade cost tables against economy difficulty scaling. Passes VIII through XI ran multi-system balance projections — simulating ten-night campaigns and checking that the projected economy, wall integrity, and raider density values stay within design-intent ranges. Pass XII extended this to the beacon system and confirmed that beacon light radius, sapper hunt range, and dawn repair coverage are internally consistent.
Runner Improvements
Building isolation — The QA runner now resets building system state independently between test blocks. Previously, residual upgrade state from one block could bleed into assertions about base-tier behavior in the next block. This produced one false positive before the isolation was added; it was caught by a coherence check cross-referencing two independently-passing blocks.
Timeout bump to 3,600 seconds — Screenshot batch expansion from 122 to 360 batches pushed the runner past its original two-minute ceiling. The timeout now matches the actual runtime headroom of the CI environment. This is not an optimization deferral — the existing suite runs in well under thirty minutes on the target machine. The ceiling was raised so new screenshot blocks don’t hit the wall.
Persistent runner — The runner now writes intermediate results to disk during long runs, not just at the end. If a run is interrupted after batch 280 of 360, you don’t lose the first 280. This was important during the screenshot expansion sprints, where each batch adds real time to the cycle.
Wave Hazards
Wreckhold’s night phase already had whole-night event modifiers — environmental conditions that roll at dusk and persist until dawn. This sprint adds a second layer: per-wave hazards that roll independently each wave, starting at wave 2 of night 3 or later. The trigger probability is 35%, so roughly one wave in three gets a hazard. Five hazards are in the pool.
CORROSION applies acid rain that deals 2 DPS to all barricades and turrets for the duration of the wave. It doesn’t destroy them instantly — a wave lasts thirty to ninety seconds depending on composition and night number — but it applies steady attrition pressure on top of raider damage. Structures you planned to repair at dawn may arrive there already below the HP threshold where repair is cost-effective.
INTERFERENCE halves turret targeting range. Turrets still fire; they just can’t acquire targets beyond half their normal radius. In a tight perimeter this may be acceptable. In a spread layout with gap-fill coverage from ranged turrets, it forces a choice between letting raiders walk through coverage gaps or pulling the player into manual combat positions.
SCRAP DROUGHT halves the scrap that raiders drop on kill. Wreckhold’s night economy is small — you kill raiders for scraps, spend scraps on field repairs, and carry excess into the dawn salvage phase. Cut the yield in half for a wave and the repair budget collapses. Drought has no effect on the raiders themselves; it punishes the assumption that fighting well means staying resource-positive.
TREMOR stuns all turrets for two seconds at wave start. This is the most tactical of the five. The stun window is short — most waves don’t have raiders in turret range at second zero — but it removes the buffer period where automated fire can reduce incoming wave density before the player needs to react manually. Two seconds of silence from your turrets at wave start is a different game than two seconds of continuous coverage.
SUPPLY DRAIN causes the scrap stockpile to leak during the active wave. Unlike DROUGHT, which affects drops, DRAIN draws down what you already have. A large stockpile going into a wave with DRAIN active will leave you with significantly less coming out of it, regardless of how well the wave goes.
Hazard tags appear in the wave announce banners — the same UI element that displays night number and incoming composition — so you have one beat of warning before the wave locks in.
Structure Upgrades
The day build phase now offers a second tier for all three placeable structures. Upgrades are triggered with the G key while standing adjacent to a structure. The HUD shows upgrade availability as a contextual prompt, and both the day renderer and night renderer update visual states to reflect tier.
Barricade → Reinforced gives the wall 2x HP and adds a slow aura that reduces raider movement speed within a small radius. The slow doesn’t stop raiders — it creates a window. INTERFERENCE makes turrets less useful at range; REINFORCED walls make melee engagement less punishing by reducing how fast raiders close gaps. The two systems interact in ways the hazard doesn’t account for, which is intentional.
Turret → Heavy adds 50% damage and 30% targeting range. This is a direct stat amplifier with no mechanics twist. Heavy turrets have longer lead times to build and cost proportionally more scrap for the upgrade. The value proposition is highest when raider HP scales with difficulty — at early nights the upgrade is marginal; at night six or seven, it’s the difference between a turret that shreds a runner and one that fires twice before the runner clears the perimeter.
Trap → Volatile adds 50% damage and three charges. Standard traps have two charges. Volatile has five. On its own this doubles the trigger economy. Combined with SCRAP DROUGHT, where the post-kill scrap that would fund trap replacement is cut in half, Volatile traps hold value longer before replacement is required.
Visual indicators mark upgraded structures in both renderers. On the day map, an upgrade ring surrounds the structure icon. On the night renderer, upgraded structures have a distinct color shift — visible to the player as a fast-scan HUD read without requiring hover or menu interaction.
The Beacon System
Beacons are a new fourth structure type, deployable during the day build phase with the N key. They are not offensive structures. They are not defensive in the direct sense of absorbing or dealing damage. They are positional amplifiers.
The beacon’s primary function is the light radius. At 70 pixels, it has the largest illumination footprint of any structure in the game — larger than turrets, larger than reinforced barricades. Night render visibility is a real tactical resource in Wreckhold. Raiders that appear at the edge of the perimeter’s light cone give you less reaction time than raiders that light up early. Beacons extend the visible frontier.
The secondary function is the amplifier upgrade. Upgraded beacons expand their light radius and extend a buff aura that affects turret targeting range in the coverage zone. This interacts directly with INTERFERENCE: a sufficiently upgraded beacon within range of a turret can partially or fully offset the targeting debuff.
The tactical counterweight is the sapper. Raiders assigned to the sapper role seek out and prioritize beacons. They don’t attack walls unless beacons are destroyed first. A beacon-heavy perimeter is a high-value/high-risk layout: better visibility, amplified coverage, but a clear priority target that will pull raiders away from the walls and toward your light infrastructure.
Dawn field repair covers beacons, and the dawn defense count display includes beacon HP in its summary. If you run out of scrap during a wave and a beacon takes damage, it shows up in the morning math.
Polish Pass
Wave composition templates restructure how raiders are selected each wave. Instead of a uniform probability draw from all unlocked types, waves now follow weighted templates: early waves are probe-heavy (normal raiders, few runners), middle waves go mixed, later waves shift toward specialist types, and final waves are all-in draws from the full unlocked pool. The underlying pick function was refactored to separate unlock eligibility from composition weighting — two distinct decisions that were previously conflated in a single selection pass.
Wall-brace VFX gains a secondary glow ring on activation. The brace mechanic — a temporary HP buffer triggered manually — already had a particle effect on the braced face. The glow ring is a wider, softer pulse that reads at a glance from across the screen. You braced, you know it, you don’t have to check the HUD.
Dusk audio crossfade adds a gradual transition during the dusk sequence, blending the day ambient audio out and the night audio in over the build phase duration. Previously the audio state snapped at the day/night boundary. The crossfade doesn’t add content — it removes an abrupt cut that read as a technical transition rather than a diegetic one.
Nil-guard on audio cues wraps Cues.play calls in a nil-check after the fix for the previous sprint’s keybind issue exposed a secondary path where a cue could be requested before the audio system was initialized. The nil-guard prevents a silent crash in that boot sequence.
Version display appears in the main menu and is keyed to the build identifier used in itch package generation. Previously, build versions were tracked in filenames but not surfaced in-game. Now they are — which matters when players report bugs and the reproduction step requires knowing which build they ran.
Where Wreckhold Stands
The sprint brought the harness to 4,564 assertions and 360 screenshot batches, all passing. Every new system that shipped — wave hazards, structure upgrades, beacons — arrived with dedicated test coverage. Config coherence XII ran after all of them were in place and found no inconsistencies.
The gameplay is materially different from three weeks ago. Wave hazards mean every wave has a roll that changes the tactical calculus. Structure upgrades give the day phase strategic depth that wasn’t there before. Beacons add a fourth structure with both a risk profile and an interaction surface against the hazard system. The wave composition templates make later nights feel distinct from earlier ones in a way that comes from design, not random number variance.
The test suite watches all of it. That’s the standard now.