acdream/src/AcDream.Core/World
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
..
Cells wip(physics): collision O(changed) delta-commit (O1-O3) - ON HOLD, feel-test failed 2026-08-02 20:06:59 +02:00
DerethCalendar.cs refactor(runtime): own world environment state 2026-07-26 16:45:04 +02:00
DerethDateTime.cs refactor(runtime): own world environment state 2026-07-26 16:45:04 +02:00
InteriorEntityIdAllocator.cs feat(vfx): port retail effect scheduling and delivery 2026-07-14 09:25:44 +02:00
LandblockCollisionBuild.cs feat(streaming): shadow-publish flat collision assets 2026-07-25 16:38:54 +02:00
LandblockLoader.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
LandblockStaticEntityIdAllocator.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
LoadedLandblock.cs feat(streaming): PhysicsDatBundle on LoadedLandblock (datLock fix scaffold) 2026-06-23 09:31:26 +02:00
MeshRef.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
PaletteOverride.cs feat(net+app): SubPalette overlays applied to palette-indexed textures (Phase 5b) 2026-04-11 16:30:08 +02:00
PhysicsDatBundle.cs refactor(physics): remove parsed collision graphs 2026-07-25 18:21:19 +02:00
ProceduralSceneryIdAllocator.cs fix(portal): synchronize destination presentation state 2026-07-16 21:17:13 +02:00
SceneryGenerator.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
SkyDayGroupSelector.cs refactor(runtime): own world environment state 2026-07-26 16:45:04 +02:00
SkyDescLoader.cs refactor(runtime): own world environment state 2026-07-26 16:45:04 +02:00
SkyState.cs fix(diag): Campaign V slice V7 commit 2 - pin the world clock, because the route never did 2026-07-28 19:34:13 +02:00
StreamingReadinessGate.cs fix(#192): close login streaming race — gate on a known real position, not session state 2026-07-09 15:57:43 +02:00
TeleportAnimSequencer.cs fix(runtime): align portal and movement presentation 2026-07-17 08:48:27 +02:00
WbSceneryAdapter.cs feat(O-T2): extract pure stateless helpers to AcDream.Core.Rendering.Wb 2026-05-21 15:13:26 +02:00
WeatherState.cs feat(ui): Campaign OP slice OP4 — the Character tab 2026-08-11 04:31:34 +02:00
WorldEntity.cs fix(vfx): resolve an entity's cell through one owner so effects follow it 2026-08-03 14:02:03 +02:00
WorldView.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00