mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-05-10 19:13:52 +00:00
feat(editor): add WSCT (Spell Cast Time Index) open catalog format
Companion to WSRG: open replacement for SpellCastTimes.dbc plus the per-spell castTime fields in Spell.dbc. Defines categorical cast-time buckets (Instant 0ms / FastCast 1s / MediumCast 1.5s / LongCast 3s) that thousands of spells reference instead of each embedding their own ms count. Together WSRG and WSCT let the spell engine resolve "Frostbolt's range bucket = id 3" and "Frostbolt's cast time bucket = id 5" with two table reads instead of duplicating per-rank data. Cast time can scale with character level via perLevelMs (a rank-1 spell at 1000ms can grow to 2200ms at lvl 60), then the bucket result is clamped to [minCastMs, maxCastMs] before haste is applied. resolveAtLevel() does the math for engine consumers. Three preset emitters: --gen-sct (4 baseline buckets), --gen-sct-channel (3 channeled-spell durations), --gen-sct-ramp (4 level-scaled buckets with non-zero perLevelMs). Validation catches negative baseCastMs, min>max, duplicate ids, warns on Instant kind with non-zero base (cast bar would still show), and errors on Channel kind with zero base (would tick once and end). Wired through the cross-format table; WSCT appears automatically in all 9 cross-format utilities. Format count 68 -> 69; CLI flag count 892 -> 897.
This commit is contained in:
parent
53611be09d
commit
8dcbd08a16
10 changed files with 649 additions and 0 deletions
|
|
@ -1701,6 +1701,16 @@ void printUsage(const char* argv0) {
|
|||
std::printf(" Export binary .wsrg to a human-editable JSON sidecar (defaults to <base>.wsrg.json)\n");
|
||||
std::printf(" --import-wsrg-json <json-path> [out-base]\n");
|
||||
std::printf(" Import a .wsrg.json sidecar back into binary .wsrg (accepts rangeKind int OR rangeKindName string)\n");
|
||||
std::printf(" --gen-sct <wsct-base> [name]\n");
|
||||
std::printf(" Emit .wsct starter: 4 baseline cast time buckets (Instant 0ms / FastCast 1s / MediumCast 1.5s / LongCast 3s)\n");
|
||||
std::printf(" --gen-sct-channel <wsct-base> [name]\n");
|
||||
std::printf(" Emit .wsct 3 channeled-spell buckets (TickEvery1s 3s total / TickEvery2s 6s / TickEvery3s 9s)\n");
|
||||
std::printf(" --gen-sct-ramp <wsct-base> [name]\n");
|
||||
std::printf(" Emit .wsct 4 level-scaled buckets (perLevelMs > 0; baseMs grows with level, clamped to min/max)\n");
|
||||
std::printf(" --info-wsct <wsct-base> [--json]\n");
|
||||
std::printf(" Print WSCT entries (id / kind / baseMs / perLevelMs / minMs / maxMs / iconColor / name)\n");
|
||||
std::printf(" --validate-wsct <wsct-base> [--json]\n");
|
||||
std::printf(" Static checks: id+name required, castKind 0..4, baseMs>=0, min<=max, no duplicate ids; warns on Instant+nonzero base, errors on Channel+0 base\n");
|
||||
std::printf(" --gen-weather-temperate <wow-base> [zoneName]\n");
|
||||
std::printf(" Emit .wow weather schedule: clear-dominant + occasional rain + fog (forest / grassland)\n");
|
||||
std::printf(" --gen-weather-arctic <wow-base> [zoneName]\n");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue