mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-05-11 11:33:52 +00:00
feat(pipeline): WCAM camera presets catalog (144th open format)
Novel format covering what vanilla WoW handled with hard-coded
camera profiles in the client's CameraMgr (the standard third-
person camera, the flight-path camera, vehicle cameras and
cinematic cameras were all bespoke C++ classes with no data-
driven extension point). Each WCAM entry binds one camera
preset to its FOV, distance, pitch/yaw offsets, shoulder offset,
focus-bone tracking target (M2 bone index, 0xFFFF = follow root),
motion damping curve (0=instant follow / 255=maximum lag), and
intended purpose (Cinematic / Combat / Mounted / Vehicle /
Cutscene / PhotoMode).
Three presets covering common camera scenarios:
--gen-cam-combat 3 Combat variants (default 75deg / wide
ranged 90deg / tight melee 60deg
shoulder-cam tracking chest bone) with
low motion damping (8-15) for responsive
tracking
--gen-cam-mounted 2 Mounted variants (ground 80deg pulled-
back / flying 85deg high-pitch wing-frame)
with medium-high damping (60-90) for
smooth turning
--gen-cam-cinematic 3 Cinematic angles (over-shoulder
dialogue 50deg telephoto / wide
establishing 100deg / portrait 35deg
3/4-face composition with yaw offset and
head-bone tracking) with high damping
(180-220) for film-quality motion
Validator catches: id+name required, purposeKind 0..5, no
duplicate presetIds, FOV in (0,180) (zero/negative makes no
sense, >=180 inverts the view frustum), distanceFromTarget >= 0
(negative places camera in front of target). CRITICAL: pitch
within (-89, +89) — beyond gimbal-locks the camera. Warns on
FOV outside 30..120 player-comfort range (motion-sickness risk
or extreme telephoto compression), distanceFromTarget < 0.5m
(clips into model), and yawOffsetDegrees beyond ±180° (wraps to
smaller equivalent angle — simplify).
Format count 143 -> 144. CLI flag count 1490 -> 1497.
This commit is contained in:
parent
7fbf35e98c
commit
ab69171ad9
10 changed files with 722 additions and 0 deletions
|
|
@ -2769,6 +2769,16 @@ void printUsage(const char* argv0) {
|
|||
std::printf(" Export binary .wcmd to a human-editable JSON sidecar (defaults to <base>.wcmd.json; emits both minSecurityLevel and category as int + name string; aliases as JSON string array)\n");
|
||||
std::printf(" --import-wcmd-json <json-path> [out-base]\n");
|
||||
std::printf(" Import a .wcmd.json sidecar back into binary .wcmd (minSecurityLevel int OR \"player\"/\"helper\"/\"moderator\"/\"gamemaster\"/\"admin\"; category int OR \"info\"/\"movement\"/\"communication\"/\"admincmd\"/\"debug\"; aliases array preserved)\n");
|
||||
std::printf(" --gen-cam-combat <wcam-base> [name]\n");
|
||||
std::printf(" Emit .wcam 3 Combat camera presets (default 75deg / wide ranged 90deg / tight melee 60deg shoulder-cam tracking chest bone) with low motion damping\n");
|
||||
std::printf(" --gen-cam-mounted <wcam-base> [name]\n");
|
||||
std::printf(" Emit .wcam 2 Mounted camera presets (ground 80deg pulled-back / flying 85deg high-pitch wing-frame) with medium-high damping for smooth turning\n");
|
||||
std::printf(" --gen-cam-cinematic <wcam-base> [name]\n");
|
||||
std::printf(" Emit .wcam 3 Cinematic camera presets (over-shoulder dialogue 50deg / wide establishing 100deg / portrait 35deg telephoto) with high damping for film-quality motion\n");
|
||||
std::printf(" --info-wcam <wcam-base> [--json]\n");
|
||||
std::printf(" Print WCAM entries (id / purpose / damping / FOV / distance / pitch / yaw / shoulder / focusBone / name)\n");
|
||||
std::printf(" --validate-wcam <wcam-base> [--json]\n");
|
||||
std::printf(" Static checks: id+name required, purposeKind 0..5, no duplicate presetIds, FOV in (0,180) (zero/negative makes no sense, >=180 inverts the view frustum), distanceFromTarget >= 0 (negative places camera in front of target); CRITICAL: pitch within (-89,+89) — beyond gimbal-locks the camera. Warns on FOV outside 30..120 player-comfort range (motion-sickness risk), distanceFromTarget < 0.5m (clips into model), and yawOffsetDegrees beyond ±180 (wraps to smaller equivalent — simplify)\n");
|
||||
std::printf(" --catalog-pluck <wXXX-file> <id> [--json]\n");
|
||||
std::printf(" Extract one entry by id from any registered catalog format. Auto-detects magic, dispatches to the per-format --info-* handler internally, then prints just the matching entry. Primary-key field is auto-detected (first *Id field, or first numeric)\n");
|
||||
std::printf(" --catalog-find <directory> <id> [--magic <WXXX>] [--json]\n");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue