14 Commits

Author SHA1 Message Date
sindoring 5565858e35 Add quest authoring and scoped NPC questgiver migrations
Create and update quest drafts through shared Save, Undo, Export and Play workflows. Guard quest baselines and NPC references before generating content writes. Enable questgiver flags for an entire template or clone a simple template to isolate one selected spawn.

Validated on Windows x64: formatting, workspace Clippy, 53 passing tests, release build and UI capture. MariaDB temporary-table checks cover both scopes, drift rejection and idempotency; persistent table checksums remain unchanged. Manual in-game quest completion remains open.

Co-Authored-By: Codex <noreply@openai.com>
2026-11-04 21:22:56 +04:00
sindoring 8ddca16b39 Render the editor world into a shared panel-sized target
Compose the full world texture between egui panels so retained static geometry and terrain use the same raster bounds. Remap picking coordinates for panel offsets and DPI, retire images on resize, and add reproducible camera captures.

Validated on Windows x64: formatting, workspace Clippy, 45 tests, release build, same-camera comparison and orbital motion in Northshire.

Co-Authored-By: Codex <noreply@openai.com>
2026-11-04 19:31:59 +04:00
sindoring ce27f96247 Cancel NPC placement with Escape and an explicit selection control
Clear the active catalog brush even when search owns keyboard focus. Keep empty-ground clicks from placing spawns in selection mode and cover the place/cancel/select sequence with an input regression test.

Validated on Windows x64: formatting, workspace Clippy, 42 passing tests and release build.

Co-Authored-By: Codex <noreply@openai.com>
2026-11-04 16:45:57 +04:00
sindoring f8d242977d Make editor installation independent of the developer machine
Add a project launcher, per-user settings and Play state, explicit env import, pinned Git engine dependencies and a Windows distribution script.

Validated on Windows x64: formatting, workspace Clippy, 41 tests, local realm security test and release launches outside the repository with profile preservation.

Co-Authored-By: Codex <noreply@openai.com>
2026-11-04 16:39:47 +04:00
sindoring b41b3ab599 Update Benilla pin to current MoonWell main
Pin aa799a2c7dd88cbcb088ccc8ebf56e4ebf142174 from origin/main of moonwell-client-core. The sibling main checkout already matches the fetched commit.

Verified on Windows without BENILLA_PIN_ANY: fmt, clippy with warnings denied, 38 tests, editor build. Keep and Mage Tower floor deltas are +0.000267 and -0.083572 yards. Screenshots inspected; BLP decoding and missing-decoration errors are documented in STATUS and the retained diagnostic report.

Co-Authored-By: Codex <codex@openai.com>
2026-11-04 14:20:22 +04:00
sindoring e2953c8a0d Add local Play sessions and preserve creature spawn identities
Open an owned client with an isolated local GM account, export and apply content before Play, and place its arrival point in the world. Check effective realm permissions and retain allocated guids after deletion.

Verified on Windows: fmt, workspace clippy with warnings denied, 38 workspace tests; local account_access precedence test and live wolf placement/teleport probe. Checked against Benilla aa799a2c with BENILLA_PIN_ANY=1; the pinned revision is updated separately.

Co-Authored-By: Codex <codex@openai.com>
2026-11-04 14:16:01 +04:00
sindoring f1abf5133c Pick among a template's displays; confirm export and unsaved quit
- A template with several displays (display_id1..4) shows them as a choice for the brush in the
  catalog and for the spawn in the inspector. Preview only: the server rolls one per spawn by
  the template's probabilities.
- Export asks first, naming the counts and the folder.
- WindowPlugin::close_when_requested is off: the close button exits at once when nothing is
  unsaved, else asks to save and quit, quit without saving, or cancel. A failed save keeps the
  window open.

EDITOR_SHOT_DIALOG opens either question for a diagnostic frame.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 18:13:04 +04:00
sindoring f65039826c Pose previews in Stand, with weapons in hand
Each spawn of an animated display gets its own rig, as benilla's animated doodad host builds one:
a RigPose with an AnimationPlayer looping the model's loader idle (Stand), a RigSkin palette slot,
and the skinned forms on its parts. Items hang on the bone's RigPose anchor plus the
attachment's offset, as benilla-app's equipment/spawn.rs hangs them, so weapons and shields now
sit in hand. A full palette or a model without animations keeps the bind pose, where the hand
points stay at the model origin and nothing hangs there.

Stormwind's Trade District: 299 server spawns, all 175 displays posed, no palette denial.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 17:22:24 +04:00
sindoring c27ee7f660 Helms and shoulders on humanoid NPCs; read creature gear
A humanoid display wears its helm (per race and sex) and shoulders from ItemDisplayInfo, hung on
attachment points 11, 5 and 6 at the bind pose: each point is its bone's pivot plus the
attachment's offset. Item models build through the same preview pipeline, their object slot
taking the display's model texture.

The server's equipment for an entry is read too (creature_template.equipment_id →
creature_equip_template → item_template), for project spawns once per entry and for server
spawns with each cell, and handed to the spawn roots. Weapons and shields stay hidden for now:
their points ride bones that sit at the model origin at the bind pose (HumanMale's 212, 218,
219, with a zero attachment position) and only the animation carries them to the hand, so
they wait for a posed preview.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 17:15:39 +04:00
sindoring 101a3f371e Show the server's own spawns, read only
A worker thread on its own connection reads the creature rows a patch-10 server loads in
128-yard cells within 320 yards of the camera, leaving out the project's guid range; a frame never
waits on it. They draw in their display's model with a grey-blue ring. The status bar names the
spawn under the cursor, and a click opens it in the inspector read only instead of placing on top
of it. A checkbox switches the layer. At Northshire Abbey it reads 355 spawns, the count a direct
query over the same cells gives.

A world database that is down no longer stops the window: the catalog and the layer are off, and
switching the layer back on retries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 17:06:11 +04:00
sindoring a8f5f8217f Principles: dungeons and raids, boss mechanics an open question
The editor builds a dungeon's or raid's plain parts: map and entrance, mobs and packs, patrols,
loot, doors and objects, binding and reset. Boss mechanics are not built in it yet; how to author
them is the owner's open question, and the two mechanisms the core has (EventAI rows in the world
database, C++ scripts) are noted for it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 13:13:43 +04:00
sindoring ba33c09a44 Record the owner's principles for the editor
docs/PRINCIPLES.md: the editor is a game design tool for world content (locations, terrain,
NPCs and their routes, items, flight paths, transport, quests), while gameplay, QoL and client
features stay in the client. Its output is one of three artifacts: client MPQs in Blizzard's own
formats, world-database migrations, and server DBCs through S3 before a release build. The
interface is drag and drop with previews. AGENTS.md and STATUS.md read it first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 13:02:19 +04:00
sindoring 5e4d5ffa05 Hand-off notes: status, plan and working rules
docs/STATUS.md records what is done (R0, R1 so far), what is unverified (the in-game check, mouse
interaction in the window), and the plan from R1's remaining steps through R9. AGENTS.md (pulled
into CLAUDE.md) holds the checks, the diagnostic run, the pin and repository rules, and the
Windows/WSL pitfalls met so far.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 12:56:53 +04:00
sindoring e8fa8011a2 Release manifest schema 1
The contract between the editor, the server build and the launcher: the complete set of non-stock
artifacts a release runs with, each with its consumers and the release that introduced it, so a
server build fetches everything from one manifest and never a client-only file. Migrations are
pinned by hash in the core checkout; binaries live under releases/<introducedIn>/, never
rewritten. `manifest-check --previous` refuses a release that drops or rewrites an inherited DBC.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 00:53:25 +04:00