D-20260811-09|定點能量帳與全 SOC 線性供電¶
背景與驅動力¶
舊模型以 mAh 包裝遊戲尺度容量,K_DRAIN 又與自身校準說明相差 1000 倍,使一般駕駛耗電近乎
不存在。晶片的 1–100 整數分配值未除以 100,導致名為 energy/J 的量實際位於 100 倍直乘域;
電池輸出上限與晶片總配額也只在 authoring 層守門,可由手工 GLB 繞過。專案仍在開發期,公版
GLB 是半成品,因此直接破壞式升版,不保留錯誤單位、欄位或相容 fallback。
考慮過的選項¶
- 只把
K_DRAIN改成 0.001:保留 mAh 假單位與效果能量歧義,之後仍需再校準,棄。 - 固定 20% knee/5% reserve:容易理解,但會把重輕車的失速點硬寫成同一 SOC,棄。
- 全 SOC 線性可供功率、整數 mW/mJ 能量帳、效果/成本/熱分帳(採納)。
決定¶
- PhysicsManifest v6:motor 使用整數
autoInputMw;battery 使用整數configuredOutputMw與energyCapacityMj。runtime 以1/60 mJquantum 保存 remaining energy;60Hz 下供應P mW一幀恰扣Pquantum,不再有 mAh 或K_DRAIN/K_DRAIN_FROM_J。 availableOutputMw=floor(configuredOutputMw×remainingEnergyQ/initialEnergyQ),全 SOC 線性,無 knee、reserve 或固定停車線。drive 先取min(autoInputMw,availableOutputMw);只要自走命令與 motor/battery 有效,達極速、失去牽引、卡牆或全胎 broken 仍耗實際供應功率。- chip 欄位改為
allocation_pct/allocationPct,仍存 1–100 整數,計算時除以 100,不依總和 正規化;全槽總和不得超過 100,低於 100 是合法低配。駕駛先結帳,技能再依已簽 event 順序 結帳;剩餘能量不足按 granted/requested 等比縮放,禁止透支。 effect_energy_j與battery_cost_j分帳。Event 效果固定取一秒功率積分,成本使用每技能 protocol-owned equivalent frames;Hold 效果與成本皆按幀。passive weapon 不耗能;launch 只在 projectile 成功 release 後按 fire interval 結算,冷卻、空彈或失敗一律為零。- chip/battery skill heat 分別由實際
battery_cost_j乘 waste-heat fraction 進既有 J/W ledger; 效果能量、電池成本與兩路廢熱不得混為同一量。 - battery
configured_output_w必須不超過實際幾何體積上限,chip allocation 總和不得超過 100; 兩條 hard rule 都在 canonical finalizer、首次 ledger admission 與 runtime typed manifest boundary fail-closed,並登錄 PART-R-001/PHYS-R-001 conformance contract。 open4wd_version、PhysicsManifest、builtin assets、SavedState 分別升到 6/6/6/9;27 個半成品 builtin 同版重烘。正式 runtime 與重開流程不讀舊欄,生成測試只保留一次性的半成品來源轉換。- HUD 顯示 SOC、目前可供輸出比例,且當 available output 低於 motor input 時顯示「輸出受限」; 實際失速仍由質量、坡度、接觸、滾阻、輪胎、氣動與損壞自然決定。
後果與影響¶
能量帳現在可用量綱與整數不變式直接稽核,低 SOC 性能連續下降,重車與輕車可在不同 SOC 自然 失去有效推進。禁晶片賽因移除主要額外負載而降低電池差異是規則自然結果,不另設模式倍率。 代價是所有資產、snapshot、指紋、editor、catalog、runtime 與規格必須同批升版;開發期無正式鏈 與已發布資產,故不承擔相容層與二次校準成本。