Skip to content

Commit 0cd985b

Browse files
author
FitzDegenhub
committed
Merge branch 'v3-dev'
# Conflicts: # .github/workflows/update-ucm-catalog.yml # .gitignore # community_presets/catalog.json # ucm_presets/catalog.json
2 parents b124283 + 93875b1 commit 0cd985b

71 files changed

Lines changed: 16338 additions & 856 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.gitattributes‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Force LF line endings for preset files so SHA256 hashes match across platforms
2+
ucm_presets/*.ucmpreset text eol=lf
3+
ucm_presets/catalog.json text eol=lf

‎.github/workflows/update-ucm-catalog.yml‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ name: Update preset catalogs
22

33
on:
44
push:
5+
branches: [main]
56
paths:
67
- 'ucm_presets/*.ucmpreset'
78
- 'community_presets/*.ucmpreset'
@@ -93,17 +94,19 @@ jobs:
9394
print(f"{catalog_path}: {len(presets)} presets")
9495
9596
# UCM presets (style definitions only)
96-
generate_catalog("ucm_presets", "ucm_presets/catalog.json", kind_filter="style")
97+
if os.path.isdir("ucm_presets"):
98+
generate_catalog("ucm_presets", "ucm_presets/catalog.json", kind_filter="style")
9799
98100
# Community presets (all presets)
99-
generate_catalog("community_presets", "community_presets/catalog.json")
101+
if os.path.isdir("community_presets"):
102+
generate_catalog("community_presets", "community_presets/catalog.json")
100103
SCRIPT
101104
102105
- name: Commit updated catalogs
103106
run: |
104107
git config user.name "github-actions[bot]"
105108
git config user.email "github-actions[bot]@users.noreply.github.com"
106-
git add ucm_presets/catalog.json community_presets/catalog.json
109+
git add ucm_presets/catalog.json community_presets/catalog.json 2>/dev/null || true
107110
if git diff --cached --quiet; then
108111
echo "No changes to catalogs"
109112
else

‎.gitignore‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,20 @@ release/
1313
*.suo
1414
*.csproj.user
1515

16-
# Claude Code worktrees
16+
# Local-only worktree under src (do not commit)
1717
src/.claude/
1818

1919
# Runtime data
2020
backups/
2121
custom_presets/
2222
advanced_presets/
2323
ucm_presets/
24-
# Re-include repo-level preset folders (official definitions + community presets for GitHub download)
24+
# Re-include the repo-level ucm_presets/ folder (official preset definitions for GitHub download)
2525
!/ucm_presets/
26+
my_presets/
2627
community_presets/
28+
# Re-include the repo-level community_presets/ folder (community presets for GitHub download)
2729
!/community_presets/
28-
my_presets/
2930
import_presets/
3031
imported_presets/
3132
presets/
@@ -34,6 +35,7 @@ advanced_overrides.json
3435
window_state.json
3536
u3_draft_slot.json
3637
crash.log
38+
tutorial_done.flag
3739
debug/
3840
*.marker
3941

‎CHANGELOG.md‎

Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
# Changelog
2+
3+
All notable changes to Ultimate Camera Mod are documented here.
4+
5+
Format based on [Keep a Changelog](https://keepachangelog.com/). Versioning follows [Semantic Versioning](https://semver.org/).
6+
7+
---
8+
9+
## [v3.1] - 2026-04-05
10+
11+
### Camera
12+
- **Lock-on auto-rotate toggle** - New checkbox in UCM Quick to disable camera snap-to-target when locking on. Prevents the camera from whipping around to face a target behind you. Discovered by [sillib1980](https://github.com/sillib1980). Sets `IsAutoRotate` and `IsTargetFixed` on lock-on camera sections.
13+
14+
### God Mode
15+
- **Sacred God Mode overrides** - Values you edit in God Mode are now permanently protected from Quick/Fine Tune rebuilds. The camera rule engine skips any field you've explicitly touched. Your values stay exactly where you put them, no matter what happens in Quick or Fine Tune. Addresses issues #18, #20.
16+
- **Green sacred indicators** - Sacred values show in green in the God Mode grid (white = vanilla, gold = rules-modified, green = sacred/protected). Row count shows sacred count.
17+
- **"Sacred only" filter** - New filter option in God Mode dropdown to show only your protected values.
18+
- **Fine Tune slider locking** - Fine Tune sliders that control sacred God Mode values are greyed out with a green label and tooltip "Sacred -- controlled by God Mode".
19+
- **One-time sacred toast** - First God Mode edit on a managed preset shows a status message explaining the value is protected.
20+
21+
### UI
22+
- **Version-aware upgrade overlay** - Existing users upgrading between versions (e.g. v3.0.2 to v3.1) now see a "What's new" overlay on first launch. Previously only triggered for users without tutorial_done.flag.
23+
24+
### Bug Fixes
25+
- **Full Manual Control presets not installing edits** - Install was using the original vanilla XML from preset creation instead of rebuilding from current God Mode edits. God Mode changes on Full Manual Control presets now work correctly.
26+
- **God Mode overrides file polluted with CameraRules values** - `advanced_overrides.json` previously saved ALL values that differed from vanilla, including values set by CameraRules (not the user). Now only saves values the user explicitly edited.
27+
- **Fresh install showing upgrade overlay** - Startup created files (backups, preset dirs) before the fresh-install check ran, so it always detected "existing data". Detection now runs before any file creation.
28+
29+
---
30+
31+
## [v3.0.2] - 2026-04-04
32+
33+
### UI
34+
- **In-app overlay dialogs** - All dialogs converted from Windows popups to themed in-app overlays (gold-bordered dark cards). X close button on all overlays (except fatal errors). No more Windows-style popups anywhere.
35+
- **Preset type selection** - New preset dialog with "Managed by UCM" and "Full Manual Control" cards. Feature tags show what's enabled (green ticks/red crosses). OR divider between options.
36+
- **Import type picker** - Cards with hover highlight instead of plain buttons.
37+
- **Import metadata dialog** - Textboxes enlarged (54px, 18px font, white text on dark background) for readability.
38+
- **Export dialog** - Removed redundant description under header. Auto-populates name, author, description, URL from active preset.
39+
- **Browse catalog cards** - Description/tags on left, Download/Nexus buttons on right.
40+
- **Game Default sidebar group** - Vanilla preset separated from UCM presets.
41+
- **Height slider** range extended to -1.6/1.5.
42+
- **Preset author text** enlarged in the active preset header.
43+
- **God Mode columns** - Fixed squished columns on first load with double-bind workaround.
44+
- **Camera preview** - Now updates immediately when switching presets.
45+
- **Error messages** - All major errors rewritten with clear, actionable guidance as overlay popups.
46+
- **First-run welcome overlay** - Verification prompt before tutorial. "No, close UCM" shuts down app.
47+
- **Game update warning** - Shows as overlay with Snooze/Dismiss instead of bottom strip.
48+
- **Fatal error overlay** - Unclosable overlay with "Close UCM" for critical errors (tainted backup, etc.).
49+
50+
### Presets
51+
- **God Mode overrides persist across tabs** - Edits saved to `advanced_overrides.json` and re-applied when Quick/Fine Tune rebuilds. No more losing God Mode tweaks.
52+
- **Duplicate God Mode conversion** - When duplicating a God Mode preset, choose "Keep God Mode" or "Convert to UCM Managed" with warning about value changes.
53+
- **Raw XML import separation** - Imported XML/PAZ/mod manager presets are standalone with no UCM rules. Only God Mode editing available.
54+
- **Export writes `preset_mode`** - Exported .ucmpreset files preserve whether they're UCM managed or God Mode only.
55+
- **UCM presets can be deleted locally** - Re-download from catalog anytime. Rename still blocked.
56+
- **Community preset duplicates go to My Presets** - Instead of staying in the community_presets folder.
57+
58+
### Catalog
59+
- **Community presets moved to main repo** - From separate `ucm-community-presets` repo to `community_presets/` folder. Single unified GitHub Actions workflow for both catalogs.
60+
- **New community presets** - Shoulder Camera (latranchedepain), Proper 3rd Person Camera (orangeees).
61+
- **All catalog URLs point to main branch** - Long-term stability.
62+
- **Workflow preserves existing SHAs** - Adding a new preset no longer changes SHAs of unchanged presets. No more false update icons.
63+
- **Raw byte downloads** - Both Browse and Update write raw bytes to preserve SHA hash for update detection.
64+
65+
### Camera
66+
- **Game crash fix** - Removed Player_Interaction_LockOn and Interaction_LookAt from LockOnSections (modifying these NPC dialogue sections crashed the game).
67+
- **Game crash fix** - Removed unsafe byte-replacement fallback in ArchiveWriter that produced invalid XML.
68+
- **Vanilla validation relaxed** - June 2026 game patch added MaxZoomDistance=30 and XML comments to vanilla. Checks updated to only flag UCM-specific signatures.
69+
- **Auto-fix tainted backups** - Automatically deletes tainted backup AND 0.paz when validation fails. Steam verify alone doesn't restore modded files.
70+
- **God Mode attribute tooltips** - 54 attributes documented (up from 29). Covers interaction, blend, zoom, damping, and targeting.
71+
72+
### Documentation
73+
- **Wiki** - 21 pages (11 user guide + 10 developer) published to GitHub Wiki tab with sidebar navigation.
74+
75+
### Bug Fixes
76+
- **HShift slider staying gold on locked presets** - `ApplyCenteredLock` was re-enabling after lock.
77+
- **Community preset "View on Nexus" link not showing** - URL field past 4KB header. Fixed by ordering metadata before session_xml.
78+
- **Community preset update SHA mismatch** - Updates write raw bytes instead of re-serializing.
79+
- **False update icons after downloading** - Raw byte downloads preserve SHA hash.
80+
- **PAZ import from different game version** - Shows helpful overlay explaining PAMT version mismatch.
81+
- **Export missing `preset_mode`** - Exported files now include the correct mode tag.
82+
- **Vanilla validation false positive after game patch** - Relaxed checks for new vanilla values.
83+
84+
---
85+
86+
## [v3.0.1] - 2026-04-03
87+
88+
### Added
89+
- **UCM preset catalog browser** - UCM style presets downloaded on demand via Browse button. Official presets hosted on v3-dev branch with auto-generated `catalog.json`.
90+
- **Preset update detection** - Background catalog check compares revision numbers. Outdated presets show update icon in sidebar. Update prompt offers to duplicate old version before downloading.
91+
- **Game Default sidebar group** - Vanilla preset separated into its own group.
92+
- **Community and UCM update detection** - SHA256 comparison against GitHub catalogs with pulsating update icons.
93+
- **Browse catalog redesign** - Cleaner card layout with description/tags on the left, Download and Nexus link buttons on the right.
94+
95+
### Changed
96+
- **Style IDs renamed** - Old cryptic IDs (`western`, `cinematic`, `immersive`, `lowcam`, `vlowcam`, `ulowcam`, `re2`) replaced with self-documenting names (`heroic`, `panoramic`, `close-up`, `low-rider`, `knee-cam`, `dirt-cam`, `survival`).
97+
- **Definition-based UCM presets** - Presets stored as style definitions (style_id + settings), session XML baked locally from game files + current CameraRules.
98+
- **UCM Quick layout** - Custom Offsets and Global Settings side-by-side at top, camera previews side-by-side below.
99+
- **God Mode SECTION column** - Auto-stretches to fit window width.
100+
- **Live camera preview** - Shows selected preset name.
101+
- **Height slider** - Range extended to -1.6/1.5.
102+
103+
### Fixed
104+
- **Game crash on load** - Removed `Player_Interaction_LockOn` and `Interaction_LookAt` from LockOnSections (modifying NPC dialogue camera sections caused crash).
105+
- **Game crash on load** - Removed unsafe byte-replacement fallback in ArchiveWriter that produced invalid XML.
106+
- **Session XML corruption** - Removed `JavaScriptEncoder.UnsafeRelaxedJsonEscaping` from preset serialization.
107+
- **Camera preview and FoV** - Now update immediately when switching presets.
108+
- **Community preset "View on Nexus" link** - No longer disappears after update.
109+
- **False update icons** - No longer show on all presets after download.
110+
- **Locked preset toast** - Now appears on Fine Tune and God Mode tabs.
111+
- **Steadycam tooltip** - Now shows on disabled sliders.
112+
113+
---
114+
115+
## [v3.0.0] - 2026-04-03
116+
117+
### Added
118+
- **Export-first workflow** - Tune camera in-app, export as JSON patch for mod managers. Direct PAZ install still available as secondary option.
119+
- **Three-tier editor** - UCM Quick (fast sliders), Fine Tune (curated deep control), God Mode (full raw XML editor with vanilla comparison).
120+
- **`.ucmpreset` file format** - Dedicated shareable preset files.
121+
- **Sidebar preset manager** - Collapsible grouped sections: Game Default, UCM Presets, Community Presets, My Presets, Imported.
122+
- **Multi-format export** - JSON (Mod Manager), XML, 0.paz, .ucmpreset with metadata fields.
123+
- **Community preset catalog** - Browse and download presets from GitHub directly in-app.
124+
- **Preset lock system** - UCM presets permanently locked, user presets toggleable via padlock icon.
125+
- **True Vanilla preset** - Decoded directly from game backup with no modifications.
126+
- **Lock-on zoom slider** - Replaces combat camera dropdown (-60% to +60%).
127+
- **Steadycam expanded** - 30+ camera states smoothed, individually tunable in Fine Tune.
128+
- **Lock-on distance scaling** - ZoomDistance values scale dynamically with chosen camera distance.
129+
- **Live camera + FoV preview** - Distance-aware top-down view with FoV cone.
130+
- **Game patch awareness** - Tracks install metadata, warns when game may have updated.
131+
- **Auto-save** - Changes to unlocked presets write back to file automatically.
132+
- **Auto-migration** - Legacy `.json` presets migrated to `.ucmpreset` on first launch.
133+
134+
### Changed
135+
- **Value-edits only** - Removed structural XML injection from v2 (extra zoom levels, horse first-person, horse camera overhaul). Modifies only existing values for safer sharing across game patches.
136+
137+
---
138+
139+
## [v2.5] - 2026-03-31
140+
141+
### Fixed
142+
- **European locale camera values** - `InvariantCulture` forced for all number formatting so decimal separators are always periods regardless of Windows locale.
143+
144+
---
145+
146+
## [v2.4] - 2026-03-31
147+
148+
Incremental improvements and tuning.
149+
150+
---
151+
152+
## [v2.3] - 2026-03-31
153+
154+
Incremental improvements and tuning.
155+
156+
---
157+
158+
## [v2.2] - 2026-03-31
159+
160+
### Added
161+
- Steadycam system
162+
- Extra zoom levels
163+
- Horse first person mode
164+
- Horizontal shift control
165+
- Universal FoV
166+
- Skill aiming consistency
167+
- Import XML support
168+
- Preset sharing
169+
- Update notifications
170+
171+
---
172+
173+
## [v2.1] - 2026-03-30
174+
175+
### Added
176+
- Advanced editor with full XML parameter control
177+
- Export/import preset strings (`UCM:` and `UCM_ADV:` formats)
178+
179+
---
180+
181+
## [v2.0] - 2026-03-30
182+
183+
### Changed
184+
- Complete rewrite from Python to C# WPF application
185+
- Single-file `.exe`, no installer required
186+
187+
---
188+
189+
## [v1.5] - 2026-03-30
190+
191+
Initial public release (Python version).

‎CONTRIBUTING.md‎

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
# Contributing to Ultimate Camera Mod
2+
3+
Thanks for wanting to help build `Ultimate Camera Mod` for `Crimson Desert`.
4+
5+
This project is still evolving quickly, and outside contributors are very welcome. Camera behavior, XML coverage, UI polish, preset tuning, archive tooling, and regression testing all benefit from extra hands.
6+
7+
## Ways To Help
8+
9+
- Fix bugs in camera install, restore, preset handling, and XML editing.
10+
- Improve camera tuning for on-foot, horse, combat, aim, and special mounts.
11+
- Improve `UCM Quick`, `Fine Tune`, and `God Mode` UX.
12+
- Add missing parameter coverage where vanilla camera states are not yet exposed cleanly.
13+
- Improve export/import support for external mod workflows.
14+
- Improve docs, setup instructions, and troubleshooting.
15+
16+
## Before You Start
17+
18+
- Open an issue or discussion if you want to work on a larger change.
19+
- For small fixes, a PR is fine without prior discussion.
20+
- If your change affects live game file writes, camera state mapping, or preset compatibility, please describe the expected before/after behavior clearly.
21+
22+
## Project Layout
23+
24+
- `src/UltimateCameraMod/` - shared core logic, camera rules, archive tooling, legacy app
25+
- `src/UltimateCameraMod.V3/` - current V3 WPF app
26+
- `Additional Resources/` - reference files, mod manager docs, sample assets
27+
28+
## Local Setup
29+
30+
Requires:
31+
32+
- Windows
33+
- .NET 6 SDK or later
34+
35+
Build V3:
36+
37+
```powershell
38+
dotnet build "src/UltimateCameraMod.V3/UltimateCameraMod.V3.csproj" -c Release
39+
```
40+
41+
Run V3:
42+
43+
```powershell
44+
dotnet run --project "src/UltimateCameraMod.V3/UltimateCameraMod.V3.csproj"
45+
```
46+
47+
Build the legacy app:
48+
49+
```powershell
50+
dotnet build "src/UltimateCameraMod/UltimateCameraMod.csproj" -c Release
51+
```
52+
53+
Important on Windows: if `UltimateCameraMod.V3.exe` is already running, stop it before rebuilding or MSBuild may fail to replace the executable.
54+
55+
```powershell
56+
Stop-Process -Name "UltimateCameraMod.V3" -Force -ErrorAction SilentlyContinue
57+
```
58+
59+
## Development Guidelines
60+
61+
- Keep behavior aligned with vanilla where the mod is meant to preserve original state coverage.
62+
- Avoid injecting non-vanilla camera states unless that is an intentional feature and clearly documented.
63+
- Prefer fixing shared logic in `src/UltimateCameraMod/` when V3 and the legacy app depend on the same code.
64+
- Be careful with generated/runtime files under `bin/Release/...`; they should not drive source-of-truth behavior.
65+
- Keep number formatting invariant for XML and patch output.
66+
- Avoid committing temporary diagnostics, extracted XML dumps, local traces, or personal test files.
67+
68+
## Testing Expectations
69+
70+
There is currently no deep automated test suite for the full camera pipeline, so manual verification matters.
71+
72+
For changes that affect installs, presets, or XML generation, please verify as many of these as possible:
73+
74+
- Build succeeds in `Release`
75+
- App launches successfully
76+
- Install to game works
77+
- Restore vanilla works
78+
- Presets save and reload correctly
79+
- Quick, Fine Tune, and God Mode stay in sync where expected
80+
- No extra non-vanilla zoom levels or camera states are unintentionally injected
81+
- Horse, combat, and aim behavior still feel correct in-game
82+
83+
If you cannot test against the game directly, say so in the PR.
84+
85+
## Pull Requests
86+
87+
Please keep PRs focused.
88+
89+
Good PRs usually include:
90+
91+
- a short summary of the problem
92+
- what changed
93+
- any risk areas
94+
- a quick manual test plan
95+
96+
If the change touches camera tuning, screenshots, XML snippets, or a short gameplay note are helpful.
97+
98+
## Good First Contribution Areas
99+
100+
- Fine Tune / God Mode parameter coverage
101+
- camera rule cleanup and parity fixes
102+
- preset generation and migration bugs
103+
- install/restore diagnostics and error handling
104+
- docs and onboarding improvements
105+
106+
## Questions
107+
108+
If you are unsure where to contribute, open an issue or discussion and describe:
109+
110+
- what you want to improve
111+
- whether it is code, tuning, UI, or documentation
112+
- whether you can test in-game
113+
114+
That is enough to get started.

0 commit comments

Comments
 (0)