mirror of
https://github.com/prosolis/gogobee.git
synced 2026-07-15 16:42:41 +00:00
Harden expedition-sim with the three layers a real player carries: race mods (+1 Human across the board), tier-appropriate equipment (weapon/armor/helmet/boots/tool promoted from tier 0 to a level-mapped tier), and a lean consumables bundle (2 heals + 1 buff at T2-T4, 3 heals + 2 buffs at T5). Capture material yields in SimResult so calibration sweeps actually read out the H4 signal. Three sweeps in sim_results/ (n=10): bare baseline, +gear/race, +lean consumables. Headline: yield is gated by combat survival, not charge counts. Fighter and Mage hit a sharp wall at T3+ even kitted; no class extracts the T5 dragons_lair boss. Tuning charges before fixing class survival would over-tune against a strawman, so H4 is now flagged blocked on Phase J. Phase J appended to gogobee_harvest_charges_plan.md: J0 baseline at n=30, J1 Fighter T3+ wall, J2 Mage T2+ wall, J3 T5 boss (sim artifact vs over-tuned vs raid content), J4 validation matrix.
39 lines
1.5 KiB
Bash
Executable File
39 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Aggregate h4_baseline.jsonl into a per-(class,level,zone) table.
|
|
# Columns: class, level, zone, n, p50 yield, mean yield, mean rooms, %cleared, %tpk, %fled, %extracted.
|
|
set -euo pipefail
|
|
|
|
infile=${1:-h4_baseline.jsonl}
|
|
cd "$(dirname "$0")"
|
|
|
|
jq -rs '
|
|
group_by([.Class, .Level, .Zone])
|
|
| map({
|
|
class: .[0].Class,
|
|
level: .[0].Level,
|
|
zone: .[0].Zone,
|
|
n: length,
|
|
yields: [.[] | .YieldCount],
|
|
rooms: [.[] | .Rooms],
|
|
outcomes: [.[] | .Outcome]
|
|
})
|
|
| map(. + {
|
|
p50_yield: (.yields | sort | .[(length/2|floor)]),
|
|
mean_yield: ((.yields | add) / length),
|
|
mean_rooms: ((.rooms | add) / length),
|
|
pct_cleared: (([.outcomes[] | select(. == "cleared")] | length) * 100 / .n),
|
|
pct_tpk: (([.outcomes[] | select(. == "tpk")] | length) * 100 / .n),
|
|
pct_fled: (([.outcomes[] | select(. == "fled")] | length) * 100 / .n),
|
|
pct_extracted: (([.outcomes[] | select(. == "extracted")] | length) * 100 / .n)
|
|
})
|
|
| sort_by(.zone, .class, .level)
|
|
| (["class","level","zone","n","p50_yld","mean_yld","mean_rms","%clr","%tpk","%fled","%ext"] | @tsv),
|
|
(.[] | [.class, .level, .zone, .n, .p50_yield,
|
|
(.mean_yield * 10 | round / 10),
|
|
(.mean_rooms * 10 | round / 10),
|
|
(.pct_cleared | round),
|
|
(.pct_tpk | round),
|
|
(.pct_fled | round),
|
|
(.pct_extracted | round)] | @tsv)
|
|
' "$infile" | column -t -s $'\t'
|