MANDRIS / DESIGN REFERENCE
Combat and progression
Resource rules, damage interactions, pickups, difficulty, linked sorties, and co-op.
Snapshot: · Source ca26d81327a1
The game may have changed since this snapshot. Routine deployments do not update this reference.
Combat, movement, and resources #
Movement and aim are independent. The game renders in full 3D, but pilots normally move on a combat flight plane above the battlefield. Target altitude and weapon surface restrictions matter: ground artillery, air missiles, beams, contact, and area hazards use different collision rules.
Hull determines survival. Shields absorb ordinary incoming damage first; shield-bypassing attacks and particular damage rules are exceptions. Armor removes a fixed amount from each hull hit. Energy funds shots and abilities; active modes and channels, such as Michen's Flame Jet and Ratajack's auto turret, pause passive recharge while they run.
Enemies announce committed attacks on the unit: glowing weapons, opening bays, spinning hoppers, and wind-up poses. Impact rings mark where area attacks land. Bosses and heavy enemies have exceptions to displacement, crowd control, and damage that must be considered when evaluating a weapon.
Source reference: src/simulation/MissionSimulation.ts · src/content/combat.ts · src/content/enemyWeapons.ts
Existing damage interactions #
There is no general flame-versus-flesh or explosive-versus-armor effectiveness matrix in this snapshot. That is a proposed system. Existing special cases include Tug Hauler directional armor, Brood Warden protection, vulnerable recovery states, shield-piercing needles, the Gulper's shield-breaking laser, Norgron's eye and throat weak points, and the Forgemaster's exposed core.
Blast radius, falloff, air/ground eligibility, and obstruction rules belong to each weapon. Scrap plates can be destroyed before impact: a plate cracks on the first hit and breaks on a second hit from another shot. Explosive scenery such as slag vats can chain into nearby enemies. Ordinary player attacks do not imply universal friendly fire; Wrath of Sera explicitly damages pilots.
Source reference: src/content/armoredCarrier.ts · src/content/heavies.ts · src/content/frostfall.ts · src/content/foundry.ts · src/simulation/MissionSimulation.ts
Pickups, credits, and weapon drops #
Destroyed enemies pay credits directly on the kill: 2 for ordinary enemies, 6 for strong ones, and 10 for heavies. Ordinary pickups occupy the world and go to the closest eligible living pilot within collection reach, with pilot-slot order breaking a tie. Credits belong to the collecting pilot. An upgrade requires a compatible hull and an available rank, so the closest ineligible pilot does not consume it.
A credit pickup grants 50 credits. Repair pickups restore up to 68 hull; if hull is already full, they instead restore up to 48 shields. An upgrade orb that has nothing left to grant converts to 25 credits. Capacity upgrades also grant the newly added capacity to a living pilot. Upgrades persist across linked sorties until the run ends.
Ratajack and Garmo also receive weapon drops during a run, from scheduled drops and rare destructible caches. Each drop adds a new ship-specific weapon at full strength for the rest of the run. Boss rewards reserve a pickup for each pilot and collect it automatically after a brief delay. Orb color, symbols, and motion are presentation choices; they do not change what a pickup grants.
Source reference: src/simulation/Pickups.ts · src/content/pickups.ts · src/content/enemyRewards.ts · src/content/weaponAdditions.ts · src/content/rareCaches.ts
Linked sorties and the Field Store #
A standard run begins in combat with a fresh loadout and zero run credits. Winning a sortie opens the Field Store, carries upgrades and remaining hull forward, and awards each pilot 250 clear credits. A pilot destroyed during a victorious stage returns with a quarter of maximum hull for the intermission.
The store offers ship-compatible purchases, prerequisites, rank caps, quarter-hull or full repairs, and the next mission selection. Repair price is proportional to the hull actually restored, at 200 credits per full maximum hull. The flight lead chooses the next mission and launches after everyone prepares and declares ready.
Defeat or ending the run clears its credits and upgrades. There is no completed persistent power economy or fixed six-stage campaign director here.
Source reference: src/simulation/RunState.ts · src/content/upgrades.ts · src/ui/StoreDirector.ts
Private cooperative play #
Solo uses one pilot. Private co-op supports two to four pilots, including duplicate ship choices. A flight lead creates a room; guests join with its code, choose hulls, prepare assets, and declare readiness. The host starts and controls the shared run while each pilot has a personal loadout and credit balance.
The host simulates authoritative state; guests predict their own inputs and reconcile against checkpoints. All participants need compatible protocol and content. If a pilot disconnects or the host's tab goes to the background, the flight pauses and resumes from the host's exact state. Spectating after destruction and continuing without an absent pilot are supported; host migration and recovering a host after a full page reload are not.
Linked-stage and store recovery track the current run and stage rather than restarting the original sortie. A complete downed/bleedout/revive combat system remains future work.
Source reference: src/network/CoopSession.ts · src/network/contracts.ts · src/simulation/RunState.ts · ARCHITECTURE.md
Difficulty and combat profiles #
Players choose a difficulty before launch, or the host chooses it for a co-op room. It scales enemy count, hull, and damage; player ships are unchanged.
Public launches use the Arcade Test combat profile. The Standard profile is a local development option (?balance=standard). Profiles change enemy density, dispatch timing, approach, cooldowns, and projectile behavior; player weapon tuning is shared. Heavy counts do not multiply like ordinary waves, and boss phase rules and special encounter caps also apply.
| Difficulty | Enemy count | Enemy hull | Enemy damage | Summary |
|---|---|---|---|---|
| Easy | ×0.9 | ×0.65 | ×0.8 | Slightly fewer enemies, much lower enemy hull, and lighter hits. |
| Medium | ×1 | ×1 | ×1 | The standard combat balance. |
| Hard | ×1.15 | ×1.7 | ×1.35 | Slightly more enemies, much tougher hulls, and heavier hits. |
| Nightmare | ×1.3 | ×2.6 | ×1.75 | More enemies, extreme hull strength, and punishing hits. |
| Parameter | Standard | Arcade Test |
|---|---|---|
| Enemy Count | 1 | 2 |
| Wave Time | 1 | 0.5 |
| Approach Speed | 1 | 1.5 |
| Regular Cooldown | 1 | 0.65 |
| Boss Cooldown | 1 | 0.5 |
| Boss Projectile Speed | 1 | 1.25 |
| Extra Fan Pairs | 0 | 1 |
| Solo Cap | 12 | 24 |
| Coop Cap | 12 | 40 |
| Solo Offspring Cap | 6 | 12 |
| Coop Offspring Cap | 6 | 20 |
| Solo Carry Over | 1 | 4 |
| Coop Carry Over | 1 | 6 |
Source reference: src/content/difficulty.ts · src/content/combatProfiles.ts · src/content/population.ts · src/main.ts
Enemy drop rates #
Base chances per eligible death, before mission adjustments. Upgrade chance is absolute and already included in the chance of any drop. The remaining drops split one third repair and two thirds credits, and repair and credit drops are then scaled by 0.5. Ordinary waves compensate for their reduced counts. Boss rewards and no-drop summons (such as Spark Fighters and Maw Fry) use separate rules. The tier uses base enemy health, not remaining health.
| Tier | Base health | Any drop | Upgrade | Kill credits |
|---|---|---|---|---|
| Ordinary | <80 | 34.4% | 1.15% | 2 |
| Strong | 80–299 | 43% | 2.3% | 6 |
| Heavy | ≥300 | 60.2% | 4.6% | 10 |
Source reference: src/simulation/Pickups.ts: DROP_RATES, enemyDropRates, rollEnemyDrop · src/content/pickups.ts · src/content/enemyRewards.ts
Hazards and telegraphs #
Warnings identify delayed damage; active residue can remain after the initial impact. Different hazards use different altitude checks, damage clocks, and destruction rules. Avoid assuming that every visible ground effect harms a pilot or that every hazard can be shot.
- Slag Bombers drop 4 bombs along a committed line; each leaves a burning cloud of 3.5 m for 1.6 s dealing 7 damage every 400 ms.
- Furnace Crawlers heat up, then release a fire ring that expands to 13 m and deals 18 damage to pilots it crosses. A destroyed crawler can cook off; Fuel Haulers explode when destroyed.
- Tug Hauler scrap plates deal 12 damage each in a fan of 7; a plate cracks on the first hit and breaks on the second.
- Resin patches slow to 70% movement, cover 3.2 m, and last 5 s. Resin itself deals no direct damage.
- Spore vents and brood capsules are destructible hive hazards; capsules can release offspring. Root lashes and toxic clouds control flight lanes.
- Damaging hive blood splashes are brief: 600 ms lifetime, 2.5 m radius, 4 damage per eligible hit. These are separate from cosmetic blood particles.
- Frost residue slows to 70% movement and lasts 3 s. Norgron's breath sweeps 90° over a 26 m range, dealing 6 damage per 250 ms damage tick.
Source reference: src/content/foundry.ts · src/content/heavies.ts · src/content/hiveExpansion.ts · src/content/combatEvolution.ts · src/content/frostfall.ts