acdream/src/AcDream.Runtime
Erik 22b86b9ff4 feat(ui): Campaign OP slice OP4 — the Character tab
Binds LayoutDesc 0x21000028 (gmCharacterSettingsUI) through OP2's
template-list mechanism and OP3's OptionPage model: 6 authored group
headers + 50 toggle rows (49 from the 2013 build + D3's "Listen to PK
death messages", AP-193) in research doc §2's authored order, each row
resolved by PlayerOption id through CharacterOptionTable, seeded from
live RuntimeCharacterOptionsState, defaulted from CharacterOptionTable.
ClientDefault (byte-verified against UIOption_Checkbox::SetPlayerOption
@0x00486e80's own GetDefaultOptionValue call — AP-194 updated to confirm
the directive was followed), labels/tooltips resolved by name from
string table 0x23000003 (never hard-coded English), and registered with
OptionsPanelController.CharacterPage. Apply/Reset/Defaults
(0x100001FC/FD/FE) are now wired per-page via a scoped subtree search
(UiElement.FindDescendant, promoted from UiTabPanel) since Character/
Chat/Config each author their own physical instance under the SAME
element ids.

Consumers: Group A (29 ids) wire+store only via the existing
SetSingleCharacterOptionRuntimeCmd/TrySetOption seam. Group B: Display
Timestamps prefixes new transcript lines (RuntimeCommunicationState.
DisplayTimestampsSource); Disable Distance Fog forces FogMode.Off
(WeatherSystem.DisableDistanceFogSource, retiring half of TS-73); Run as
Default Movement inverts the walk-mode modifier's default
(RuntimeLocalPlayerMovementState.RunAsDefaultMovementSource). Group C
re-points AutoTarget/AutoRepeatAttack/ViewCombatTarget
(CharacterOptionCombatSettingsSource), VividTargetingIndicator/
CoordinatesOnRadar/LockUI/AcceptLootPermits from the client-local
GameplaySettings record to the canonical server bit — closing two
previously-unfiled divergences where AutoRepeatAttack and
AcceptCorpseLootingPermissions never reached the wire despite being
retail auto-save ids. TS-73 narrowed to its two still-open cases;
TS-75..TS-80 file the genuine gaps (no day/night force, no weather-
particle/profanity-filter/salvage/housing/pickup-preference subsystem,
fellowship-create's unaudited client-sourced field) rather than
inventing stand-ins.

Conformance: CharacterOptionsPageControllerTests pins all 50 rows
against CharacterOptionTable in both directions (an invented or dropped
row fails the build), the authored group/order row-by-row, and the
build/seed/Apply/Reset/Defaults/wire-publish behavior end-to-end against
the committed fixture. 52 new tests; full solution suite 13,008 passed /
4 skipped / 0 failed (was 12,956/4/0).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 04:31:34 +02:00
..
Entities fix(runtime): close the C5b re-review findings — Gate A narrowing filed, no-window payload gate, bisect hazard recorded 2026-08-05 23:10:24 +02:00
Gameplay feat(ui): Campaign OP slice OP4 — the Character tab 2026-08-11 04:31:34 +02:00
Physics fix(runtime): transient collision-seal failure no longer terminal for login (#357) 2026-08-09 12:32:53 +02:00
Platform feat(linux): add graphical platform services 2026-07-27 11:54:59 +02:00
Session fix(headless,runtime): OP7 review fixes + docs: OP3 re-review REOPEN (narrow) 2026-08-11 03:22:54 +02:00
World fix(streaming): derive the portal reveal window from the live streaming radii (#280) 2026-08-05 23:54:59 +02:00
AcDream.Runtime.csproj fix(physics): activate collision generations atomically 2026-07-31 15:19:25 +02:00
GameRuntime.cs fix(runtime,net): OP1 re-review residuals R1/R2/R3 (coordinator pass) 2026-08-11 01:13:57 +02:00
GameRuntimeActionViews.cs refactor(runtime): own combat and magic intent 2026-07-26 11:56:40 +02:00
GameRuntimeClock.cs feat(runtime): define borrowed views commands and ordered events 2026-07-25 19:08:42 +02:00
GameRuntimeCommands.cs feat(runtime,net): Campaign OP slice OP1 — full character-option table, dirty model, real 0x01A1 blob builder 2026-08-10 23:31:34 +02:00
GameRuntimeEventHub.cs feat(headless): complete deterministic bot command parity 2026-07-27 08:23:36 +02:00
GameRuntimeEvents.cs feat(runtime): own deferred set-position residence 2026-07-31 22:32:49 +02:00
GameRuntimeGameplayViews.cs refactor(runtime): expose canonical gameplay state 2026-07-26 09:12:30 +02:00
GameRuntimeViews.cs feat(headless): complete deterministic bot command parity 2026-07-27 08:23:36 +02:00
RuntimeAssemblyMarker.cs arch(runtime): establish presentation-independent boundary 2026-07-25 17:33:11 +02:00
RuntimeGeneration.cs feat(runtime): define borrowed views commands and ordered events 2026-07-25 19:08:42 +02:00
RuntimeGenerationReset.cs fix(chat): CH2 rework — SpewBox tick-driven visibility + binary-derived error table 2026-08-09 18:14:26 +02:00
RuntimeSimulationOwnership.cs refactor(runtime): close simulation ownership 2026-07-26 15:53:31 +02:00