acdream/src/AcDream.Core
Erik 0fed5fdd91 fix(chargen): Campaign CC gate round 1 closeout — Group 2: Skills page four-bucket model
Ports the last remaining half of retail's Skills page: the four-bucket
sorted skill list (Specialized/Trained/UseableUntrained/UnuseableUntrained,
UpdateSkillEntry's own iMinlevel <= 1 test), plus the info box's
description + formula completion.

- ChargenSkillDetail/ChargenSkillFormula (Core) thread SkillBase.MinLevel/
  Description/Formula from the global SkillTable, exposed via a new
  ChargenOptions.TryGetSkillDetail (nullable-with-default parameter, so
  every pre-existing ChargenOptions call site compiles unchanged).
  ChargenTableReader.Project populates it from the same SkillTable loop
  that already builds GlobalSkillCostsBySkillId.
- CharacterCreationSkillsPage.RebuildRows now groups every costable skill
  into SkillBucket, sorts each bucket alphabetically by name
  (InsertEntrySorted's wcscmp, ported as string.CompareOrdinal), and
  builds one Templates[0] header row per bucket ahead of that bucket's
  Templates[1] skill rows — DoSkillRecords' own unconditional
  4-header-then-populate order. A level change re-buckets the row
  (detected per-refresh against each row's own cached bucket, then a
  full rebuild with the current selection explicitly preserved).
- RefreshInfoBox now composes description (word-wrapped via
  DatRichText.Compose) + the level-gated bonus line (an exact, unwrapped
  literal — NOT routed through word-wrap, which would have collapsed its
  authored double-space formatting) + ComposeFormula's "Formula : ..."
  line (MakeSkillFormula ported with high confidence for the prefix/
  per-attribute-term/divisor/bonus-suffix shape; the two-attribute
  connector text is a disclosed approximation, register AP-231, since
  the decompiled function's own connector literals could not be
  recovered byte-exact by this session's static-only tooling).

Register: AP-213 RETIRED (160 active rows). Live-DAT gate: the installed
SkillTable's MinLevel distribution matches the investigation's own
recorded finding exactly (38 entries, 23 useable-untrained / 15
trained-required). 3 new fixture tests + 1 new live-DAT test; 3
pre-existing integration tests fixed (they captured row widget
references before a bucket-changing click, which now rebuilds and
discards those references — a real, correct consequence of the new
model, not a bug).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-16 15:33:39 +02:00
..
Audio feat(audio): Ctrl+M instant mute + inn-chatter investigation closed as server content 2026-08-09 14:09:24 +02:00
CharGen fix(chargen): Campaign CC gate round 1 closeout — Group 2: Skills page four-bucket model 2026-08-16 15:33:39 +02:00
Chat fix: trade gate round 4 - "The trade has been cancelled." + retail's 2026-08-14 12:45:10 +02:00
Combat feat(core): adopt the retail members the equipment and physics enums were missing 2026-07-29 01:27:57 +02:00
Content fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
Input feat(ui): Campaign OP slice OP8 — Configure Keyboard 2026-08-11 09:19:54 +02:00
Items fix: social gate round 2, part 2 - confirmation-dialog sentences + the 2026-08-13 21:10:42 +02:00
Lighting perf(lighting): bound global light selection 2026-07-25 05:40:32 +02:00
Meshing fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
Physics docs: CC6b-PRE re-review residuals R1/R2 + cross-branch renumbering 2026-08-15 19:39:16 +02:00
Player feat(player): port retail augmentation stat chain 2026-07-31 08:08:23 +02:00
Plugins fix(plugins): close LA5 ownership races 2026-08-14 19:28:14 +02:00
Properties feat(core): give AC's seven property tables names, verified against two oracles 2026-07-29 01:11:16 +02:00
Rendering probe(physics): ACDREAM_PROBE_SUPPORT + ACDREAM_WIRE_MESH — separate #337's three candidates 2026-08-06 19:49:59 +02:00
Selection feat(runtime): FA4 -- fellowship roster enumeration + Social selection source 2026-08-12 04:40:19 +02:00
Social refactor(runtime): expose canonical gameplay state 2026-07-26 09:12:30 +02:00
Spells feat(player): port retail augmentation stat chain 2026-07-31 08:08:23 +02:00
Terrain refactor: #100 — remove hiddenTerrainCells / BuildingTerrainCells plumbing 2026-05-25 21:37:53 +02:00
Textures fix(ui): Campaign LA gate round 2 — character-select screen media resolution 2026-08-15 09:12:10 +02:00
Ui fix(interaction): port retail's wielded-item pickup rejection (Slice 4 F1) 2026-07-29 19:09:38 +02:00
Vfx fix(vfx): classify hardwareless particle emitters once 2026-07-27 00:03:44 +02:00
World feat(ui): Campaign OP slice OP4 — the Character tab 2026-08-11 04:31:34 +02:00
AcDream.Core.csproj fix(ui): Campaign LA gate round 2 — character-select screen media resolution 2026-08-15 09:12:10 +02:00