Run Re-Do

This commit is contained in:
2026-07-02 20:41:43 -07:00
parent 86575dd5bc
commit 16e396841e
188 changed files with 8291 additions and 2429 deletions
+36 -1
View File
@@ -74,6 +74,22 @@ namespace ProjectM.Simulation
/// mining isn't a silent cold deadlock. Ore-only so the 'build a Fabricator to arm turrets' lesson survives.</summary>
public const int StartingOre = 50;
// ---- Expedition run economy (RoomFieldSystem / RunDirectorSystem) ----
/// <summary>Run-wide resource-node allotment: RunDirectorSystem stages it into RunRuntime.NodeBudgetRemaining
/// at the launch edge; RoomFieldSystem floors each room's scatter to what remains and spends it down. THE
/// scarcity knob — ~1.5 nodes/room over an 8-room run (dense Reward rooms drain it fastest; late rooms can
/// run dry, which is the intended tension).</summary>
public const int ExpeditionNodeBudget = 12;
/// <summary>Boss-room health multiplier over the base enemy prefab (RoomEnemyDirectorSystem spawns ONE
/// boss per Boss room; v1 = a beefed Charger — a real boss kit is a later rung).</summary>
public const float BossHealthMultiplier = 8f;
/// <summary>Boss-room visual scale multiplier (LocalTransform.Scale is a replicated [GhostField] — set once
/// at spawn on the baked value, legible at a glance).</summary>
public const float BossScaleMultiplier = 1.6f;
// ---- Inventory (per-player bag; InventoryMath / ResourceHarvestSystem / InventoryDepositSystem) ----
/// <summary>Max stacks a player can carry; InventoryMath rejects deposits past this and the harvest remainder spills to the global ledger.</summary>
@@ -87,7 +103,26 @@ namespace ProjectM.Simulation
// inline mods share that one id and are stripped target-agnostically via
// TimedModifierUtil.RemoveBySourceId on unequip/swap. Full StatModifier SourceId map (keep DISJOINT):
// 0u = pickups + debug-injection; 0x00A0E711 = ability-damage upgrade; 0x00DEB061 = debug stat command;
// 0x00E91000.. = equipment (4 slots); 0x00C1A550.. = class traits (Slice 2, permanent).
// 0x00B00000..0x00B10000 = run-scoped BOONS (stripped on return); 0x00C1A550.. = class traits (permanent);
// 0x00E7A000..0x00E7A100 = permanent META upgrades (Step 12a); 0x00E91000.. = equipment (4 slots).
/// <summary>Base of the run-scoped BOON SourceId band: each applied pick draws BoonSourceIdBase +
/// (BoonPickCounter++ % BoonSourceIdSpan), so boons stack as distinct rows and ONE range-strip on the
/// Returning edge clears the whole run's boons (the two-channel model — boons never persist).</summary>
public const uint BoonSourceIdBase = 0x00B00000u;
/// <summary>Width of the boon band [Base, Base+Span) — far above any realistic per-run pick count.</summary>
public const uint BoonSourceIdSpan = 0x10000u;
/// <summary>Base of the PERMANENT meta-upgrade SourceId band: a purchased tier's live StatModifier is
/// keyed MetaSourceIdBase + UpgradeId (absolute-value UPSERT — one row per owned upgrade, set to
/// ValuePerTier*tier). Persisted via MetaTierState (SaveData v6) and re-applied born-correct at spawn.
/// DISJOINT from every other band; NEVER stripped (the permanent channel of the two-channel model).</summary>
public const uint MetaSourceIdBase = 0x00E7A000u;
/// <summary>Width of the meta band [Base, Base+Span) — bounds UpgradeId to a byte-sized catalog.</summary>
public const uint MetaSourceIdSpan = 0x100u;
/// <summary>Base for per-slot equipment SourceIds; slot i tags its mods with <c>EquipSourceIdBase + i</c>.</summary>
public const uint EquipSourceIdBase = 0x00E91000u;