acdream/src/AcDream.Runtime
Erik 9a84230c4f feat(runtime): Campaign CC slice CC3 — RuntimeCharacterCreationState
Ports retail's CharGenState as the one Runtime-owned character-creation
state machine, mirroring RuntimeCharacterSelectionState's exact pattern
(snapshot/delta/event-stream, borrow-only view, generation-gated
commands, one mutable owner, no App types). Every command ports a named
retail function: SetHeritageGroup, SetGender, SetTemplate/ApplyTemplate
(Custom = template 0, Olthoi force-lock), the six attribute setters plus
GetAbsRemainingCredits/BalanceAttributes (retail's literal round-robin
order and fairness cursor), SetSkillLevel plus ResetSkillLevels' free-skill
baseline (reusing CC1's ChargenSkillCreditMath two-tier cost lookup
verbatim), RandomizeStartArea, and DoFinish's complete gate sequence
(empty name / unspent attribute credits / already-Pending / client-side
roster-vs-slotCount cap).

LiveSessionController gained a sibling IRuntimeCharacterCreationCommands
implementation, a CreateCharacter wire hook, and a response handler that
reuses existing machinery rather than inventing new paths: the Ok
identity is appended to the roster via RuntimeCharacterSelectionState's
own ApplyRoster, and the "log straight in" behavior reuses the private
EnterSelectedCore. ILiveSessionLifecycleHost gained two default-no-op
hooks (ApplyCharacterCreated/ApplyCreationFailed) so AcDream.App needs
zero changes to keep compiling; wiring them to the status stream is a
CC4 follow-up.

Filed four divergence-register rows for the corners deliberately not
ported: the FPU-unrecoverable FitTemplateToCharacter auto-detect (AP-207,
ACE only reads the field for title text), the per-style color-count
approximation (AP-208, CC1's model has no per-style palette data), the
classID DAT-DID placeholder (AP-209, ACE ignores the field), and
ApplyTemplate's atomic-vs-sequential attribute apply (AP-210).

34 new tests: full state-machine coverage (every Finish gate, every
rejection-code mapping, duplicate-NameInUse tolerance, Olthoi lock,
attribute balance/lock interaction, uncostable-skill rejection) plus a
LiveSessionController integration suite proving the wire send is exactly
55 skill slots (decoded from a real WorldSession + GameMessageCapture)
and the full Ok/rejection round trip through WorldSession.ProcessDatagram.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 14:26:10 +02:00
..
Chat feat(runtime): share chat commands and run login sequence 2026-08-14 20:27:45 +02:00
Entities fix(plugins): close LA5 ownership races 2026-08-14 19:28:14 +02:00
Gameplay chore: secure-trade closeout - strip [trade] gate probes, roadmap ledger 2026-08-14 12:48:31 +02:00
Physics fix(runtime): transient collision-seal failure no longer terminal for login (#357) 2026-08-09 12:32:53 +02:00
Session feat(runtime): Campaign CC slice CC3 — RuntimeCharacterCreationState 2026-08-15 14:26:10 +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 feat(platform): Campaign LA LA0 — extract ApplicationPathSet to AcDream.Platform 2026-08-14 15:19:02 +02:00
GameRuntime.cs fix(runtime): close Campaign LA7b review findings 2026-08-14 18:55:48 +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): Campaign CC slice CC3 — RuntimeCharacterCreationState 2026-08-15 14:26:10 +02:00
GameRuntimeEventHub.cs feat(headless): complete deterministic bot command parity 2026-07-27 08:23:36 +02:00
GameRuntimeEvents.cs feat(runtime): FA2 -- RuntimeFellowshipState + RuntimeAllegianceState sibling J-owners 2026-08-12 01:31:54 +02:00
GameRuntimeGameplayViews.cs feat(runtime): FA4 -- fellowship roster enumeration + Social selection source 2026-08-12 04:40:19 +02:00
GameRuntimeViews.cs feat(runtime): own character selection flow 2026-08-14 18:22:17 +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 feat: secure trade with other players - wire, RuntimeTradeState, the 2026-08-14 11:49:13 +02:00
RuntimeSimulationOwnership.cs feat: secure trade with other players - wire, RuntimeTradeState, the 2026-08-14 11:49:13 +02:00