10 KiB
10 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
For testing notes, milestone summaries, known issues, and next steps, see docs/dev-log.md. Do not include testing content in this file.
[Unreleased]
Added
- Optional
appearancetransform snapshots for best-effort runtime proxy body and face visuals, including height, body morph weight, body tint, hair colors, head-part IDs, and morph slider values while leaving gender switching out. - Game-thread proxy appearance application for supported
appearancefields after runtime proxy 3D is ready, with race switching deferred for future proxy-base compatibility work. server/fake_client.pyparsing/output andserver/fake_player.pysample payloads for relayedappearancetransform data.COVault109solo-cell handling in the plugin so first-time character-creation space suppresses outgoing transform packets and remote proxy representation.compile-papyrus.batto compile active Papyrus sources fromcreation-kit\scripts\sourceintocreation-kit\scripts\compiledusing the Fallout 4 Creation Kit Papyrus compiler, resolving the Fallout 4 install with the same path workflow asdeploy-all.bat, using saved.fallout4-pathvalues without re-prompting during builds, and skipping reference-onlyCoSync*.pscfiles.build-all.batnow compiles Papyrus scripts before staging the mod package, and still stages the repo build folder for inspection when Papyrus compilation fails.deploy-all.batnow resolves the Fallout 4 path, compiles Papyrus scripts, stages the repo build folder, and then deploys frombuild\Fallout 4\Datainto the Fallout 4Datafolder.stage-mod.batnow stages active Papyrus scripts recursively: compiledcreation-kit\scripts\compiled\*.pexintoData\Scriptsand rawcreation-kit\scripts\source\*.pscintoData\Scripts\Source\User, while skipping reference-onlyCoSync*files.- Server-authoritative weather and time control via
serverWorldStatepackets from the dev server GUI. - Weather / Time tab in
server/dev_server_app.pywith preset buttons forfwweather form IDs andset gamehour to HHmmtime values. server/world_state_presets.pywith shared weather and time preset definitions.protocol/server-world-state.mddocumenting the new packet type.- Event-driven world time resync via optional
timeSyncfield onworldStatepackets; the current world-state host pushes time after menus, loading screens, save/load, wait/sleep, and other time freezes. timeSynctracking inserver/fake_client.pyhost world-state snapshot output.- Optional
equippedItemstransform snapshots for visible apparel slots so proxies can mirror clothing, armor, hats, and eyewear changes. - Game-thread proxy equipment application for synced apparel, including explicit tracked-slot unequips and cleanup when runtime proxy slots are held, reused, or reassigned.
server/fake_client.pyparsing and output for relayedequippedItemstransform data.
Fixed
- New clients now receive existing players' last transform snapshots immediately after
welcome, includingappearance, so late joiners do not start with default proxy visuals while waiting for the next sender heartbeat. - Runtime proxy candidate isolation now ignores actors flagged as deleted, so a freshly spawned proxy is controlled instead of the slot adopting a still-present stale proxy that was marked for deletion the same frame.
- Stale saved runtime
COPlayerProxyactors are deleted before spawning a fresh PlaceAtMe proxy, preventing duplicate visible proxies when an old uncontrolled proxy persisted in a save. - Runtime proxy promotion no longer waits for camera-frustum
IsVisible()before assigning a newly spawned proxy, preventing remote players from appearing only after the local player turns toward them. - Fixed Papyrus staging path construction so
.pexand.pscfiles are copied intobuild\Fallout 4\Data\Scriptsandbuild\Fallout 4\Data\Scripts\Source\User. - If a server profile exists but its associated save was deleted, joining from the main menu now falls back to first-time character creation and re-binds the profile to the newly created save instead of hard-failing.
- Pending first-time profile binding now completes as soon as a save exists even if character-creation phase flags are still active, preventing repeated
cocfirst-time launches on reconnect. - Session launch now resolves equivalent server endpoints (for example
localhost,127.0.0.1, and legacy host-case variants) to an existing server profile before deciding first-time join flow, preventing unintended new-character creation when reconnecting. - Server profile persistence now uses a sanitized save-folder path with a Documents fallback and write-failure logging, preventing silent loss of server profile bindings across game restarts.
- Pending profile binding now accepts exit saves (including
Exitsave...) so the last auto-save on game exit can be rebound and loaded on reconnect, reducing accidental progress loss. - Fixed Windows build issues in server profile path fallback by replacing unsafe
getenvusage and acceptingstd::string_viewsave-folder names in folder sanitization. - Reconnect now refreshes stale associated
Exitsave...names to the newest available exit save before load, preventing fallback to first-time flow when exit-save filenames rotate between sessions. - Server GUI weather now runs
fw <8-digit-form-id>on the currentworldStateHostPlayerIdclient (not hardcoded to player 1), scheduled on the game thread. - Weather
serverWorldStatehandling now defers until world-state host assignment is known, then skips only non-host clients. - Weather
serverWorldStatepackets are broadcast to all clients so the designated host receives them even after host reassignment. - Server restart now resets player/host assignment so the first client is
playerId1 again, preventing GUI weather from being ignored after restart. - Plugin now defers server weather commands until player assignment is available, preventing initial GUI clicks from being dropped right after connect.
- Replaced invalid default GUI weather IDs with valid Fallout 4 weather form IDs so
fw <id>no longer fails with "Invalid weather ...". - Corrected
Clearpreset ID typo from0002852ato valid0002b52a(CommonwealthClear). - Time apply now converts
timeHHmmto Fallout game-hour float before executingset gamehour, fixing 2200-style values applying incorrectly. - Corrected
CO_Vault109StartQuestScript.pscto compile against Fallout 4 Papyrus by replacing unsupportedActor.ShowLooksMenu/UI.IsMenuOpencalls withGame.ShowRaceMenuandUtility.IsInMenuMode. - Race customization now forces third-person camera and a short pre-menu settle delay before
ShowRaceMenu, fixing cases where the menu opens but the player model is not visible. CO_Vault109StartQuestScriptnow uses configurableRaceMenuMode(default0) plusRaceMenuFallbackMode(default1) forShowRaceMenu.- Race menu open flow now retries with fallback mode if the primary mode does not enter menu mode.
- Moved first-time character customization menu control out of
CO_Vault109StartQuestScript.psc; the quest now only handles spawn/stage while plugin C++ session-launch flow owns Looks/SPECIAL sequencing. - First-time C++ character creation now prepares camera context with
ForceThirdPerson, opens Looks viaShowLooksMenu 14, retries withActor.ShowLooksMenufallback, and times out/reset safely if Looks menu never opens. - When
LooksMenuis confirmed open, C++ now applies chargen camera context (SetInChargen 1+ForceThirdPerson) and restores it on close, fixing first-person camera persistence during customization. - Looks menu camera correction now directly sets
PlayerCamerato third-person state for several polls whileLooksMenuis open, avoiding reliance on console-only camera commands. - Looks menu camera correction now configures the
ThirdPersonStatefor face editing by zeroing shoulder offsets, flipping camera yaw toward the player, enabling free rotation, and applying a closer zoom offset. - Looks menu camera cleanup now restores the pre-customization third-person offsets, yaw, zoom, and free-rotation flags so movement controls return to normal after first-time customization closes.
Changed
- Weather presets store the exact
fwconsole argument (8-digit hex); editserver/world_state_presets.pyonly if a preset ID fails in your console. - Updated protocol weather examples/default preset table to match the new valid Fallout 4 preset IDs.
- World time no longer re-applies on every
worldStateheartbeat; weather heartbeats continue at ~1 Hz while time stays in sync during normal gameplay. - Updated Weather/Time UI and protocol wording to use world-state host terminology instead of hardcoded player-1 wording.
- Reformatted
changelog.mdto follow Keep a Changelog. - First-time character creation launch now uses
coc COVault109and waits for theCOVault109start cell instead ofSanctuaryExt. - First-time
COVault109launch now startsCO_Vault109StartQuestonce per first-time join flow so the quest can move the player to its preset spawn marker. CO_Vault109StartQuestnow opensShowRaceMenu(player, 1)after stage-10 spawn completion, waits for menu mode to close, then opensShowSPECIALMenufor name/S.P.E.C.I.A.L. setup.- First-time Looks menu now narrows the camera FOV while open (restored on close) to magnify the face for easier facial-feature editing, since LooksMenu uses its own fixed camera that ignores third-person zoom offsets.
- First-time Looks menu now centers the player on the fixed LooksMenu camera's optical axis for the first few polls (preserving distance and facing the camera), fixing the off-center face caused by the FOV zoom; the player's original transform is restored when the menu closes.
- Added temporary diagnostic logging to LooksMenu centering (camera position/heading, target vs actual player position per poll) to confirm whether
SetPositiontakes effect and whether the menu camera is fixed or follows the player. - Documented optional apparel equipment sync in protocol and architecture docs.
[0.0.1] - 2026-06-23
Added
Changed
Removed
docs/changelog.md— moved to project root.