Commit graph

3301 commits

Author SHA1 Message Date
Kelsi
5d50a29d44 feat(editor): brush radius indicator on minimap
- Yellow circle on minimap shows current brush position and radius
- Scales proportionally with terrain tile size
- Visible in all brush-based modes (Sculpt/Paint/Water)
- Helps orient where you're working relative to the full tile
2026-05-05 06:42:16 -07:00
Kelsi
f593606251 feat(editor): reset-to-flat button for terrain, consolidation
- "Reset to Flat" button in Noise Generator section: zeroes all heights
  across entire tile for starting over without creating a new terrain
- Useful workflow: reset → noise → smooth → scale → clamp → auto-paint
2026-05-05 06:40:26 -07:00
Kelsi
3ac40d27ad feat(editor): road flattener tool alongside river carver
- River/Road Carver section now has two modes:
  - River: carves a channel below terrain (existing)
  - Road: flattens terrain to interpolated height between start/end
- Road mode smoothly transitions height along the path with quadratic
  falloff at edges for natural embankment shape
- Set Start → Set End + Apply workflow works for both modes
- Roads follow terrain slope by interpolating between start/end heights
- Pair with Paint mode to add cobblestone/dirt texture on the road
2026-05-05 06:37:54 -07:00
Kelsi
d253aed635 feat(editor): Find Valid Tile button, improved ADT loading workflow
- "Find Valid Tile" button in Load dialog: auto-scans manifest for the
  first available ADT tile of the selected map (checks center range
  25-45 first for open world, then full 0-63 for dungeons)
- Fixes "wrong coords" issue — dungeons use different tile coords than
  open world maps, now auto-detected
- Map name lowercased for manifest lookup consistency
- Tile check shows green "Tile found" or red "Tile not found" indicator
2026-05-05 06:35:37 -07:00
Kelsi
79a091526e fix(editor): much larger NPC markers, river carver tool
- NPC markers now 30 units tall with octagonal base, colored pole,
  and yellow diamond at top — visible from any camera altitude
- Red pole = hostile, green pole = friendly, yellow top = all NPCs
- River/Path Carver: set start point, set end point, carves a channel
  between them with configurable width and depth
- Smooth quadratic falloff at edges for natural riverbank shape
- Pair with Water mode to fill carved channels
2026-05-05 06:32:39 -07:00
Kelsi
d573f3a678 feat(editor): river/path carver tool for terrain channels
- River Carver in Sculpt panel: carves a channel between two points
  with configurable width and depth
- Set Start at cursor, then Set End + Carve to create the channel
- Smooth quadratic falloff at edges for natural riverbank shape
- Works by projecting each terrain vertex onto the line segment and
  lowering height based on distance from center
- Auto-stitches chunk edges after carving
- Pair with Water mode to fill the carved channel with liquid
2026-05-05 06:30:26 -07:00
Kelsi
14bb2cf7de feat(editor): one-click flatten platform for building sites
- "Create Flat Platform at Cursor" button in Sculpt panel
- Instantly flattens terrain under brush radius to cursor height
- Perfect for creating building sites, road beds, camp grounds
- Applies 30 iterations of flatten for a thorough result
- Restores previous brush mode after completion
2026-05-05 06:28:05 -07:00
Kelsi
9555a4a91a feat(editor): quest NPC linking via spawn list dropdowns
- Quest giver and turn-in NPC now selected from a dropdown of placed
  creatures instead of typing raw IDs — shows name + id for each
- Links quests directly to NPCs you've already placed on the map
- "None" option to unset NPC link
- Much more intuitive quest→NPC workflow
2026-05-05 06:26:15 -07:00
Kelsi
dd2b9294b5 feat(editor): terrain mirror X/Y for symmetric zone design
- Mirror X: copies left half of terrain to right half (mirrored)
- Mirror Y: copies top half to bottom half (mirrored)
- Useful for creating symmetric zones, arenas, or balanced landscapes
- Auto-stitches all chunk edges after mirror for seamless results
- UI buttons in Sculpt panel under "Mirror Terrain" section
2026-05-05 06:24:28 -07:00
Kelsi
ac88aed250 feat(editor): quick generate checkbox in New Terrain dialog 2026-05-05 06:22:44 -07:00
Kelsi
df4cc809f4 feat(editor): quest link hint in NPC panel for workflow guidance 2026-05-05 06:21:00 -07:00
Kelsi
673cfa6368 feat(editor): show all biome texture paths in New Terrain dialog 2026-05-05 06:19:49 -07:00
Kelsi
506fcc29f3 feat(editor): auto-scatter checkbox for height-based object placement 2026-05-05 06:18:47 -07:00
Kelsi
aa9a6a87a8 feat(editor): auto-paint terrain by height bands
- Auto-Paint by Height: automatically sets base texture per chunk based
  on average height — configurable thresholds for sand/grass/rock/snow
- Uses Tanaris sand, Elwynn grass, Barrens rock, Dragonblight snow
- One-click to texture an entire procedurally generated terrain
- Adjustable height thresholds via drag floats
- Workflow: noise → smooth → clamp → auto-paint for instant biome
2026-05-05 06:17:37 -07:00
Kelsi
1ba1a50112 feat(editor): terrain stamp/clone tool for replicating terrain features
- Copy Stamp: captures all vertex heights within brush radius at cursor
  position, storing relative offsets from center
- Paste Stamp: applies the copied height pattern at a new location,
  finding nearest vertices and setting their heights
- Stamp status shown in panel ("Stamp ready" / "No stamp copied")
- Auto-stitches chunk edges after paste for seamless results
- Useful for replicating hills, craters, or other terrain features
2026-05-05 06:15:33 -07:00
Kelsi
9a547f66d2 chore(editor): add multi-tile WDT placeholder comment for future 2026-05-05 06:13:02 -07:00
Kelsi
00fd1249d8 feat(editor): key 6 for Quest mode, update help overlay 2026-05-05 06:11:54 -07:00
Kelsi
f59d79537a feat(editor): quest editor with objectives, rewards, and quest chains
- New Quest mode (key 6) with full quest creation panel:
  - Title, description, required level
  - Quest giver / turn-in NPC ID linkage
  - Up to 4 objectives: Kill, Collect, Talk, Explore, Escort, Use Object
  - Rewards: XP and gold
  - Quest chain support via nextQuestId linking
- Quest list showing all created quests with level and objective count
- Save quests to JSON (included in Export Zone package)
- Foundation for campaign system: create quest chains across NPCs,
  link objectives to placed creatures, build storylines
2026-05-05 06:10:14 -07:00
Kelsi
124ff5a54a feat(editor): tile availability checker, NPC marker diagnostics
- Load dialog shows green "Tile found" / red "Tile not found" indicator
  by checking the manifest before you attempt to load
- NPC marker build/render diagnostic logging to trace rendering issues
- Map browser and tile checker work together for easy existing zone loading
2026-05-05 06:05:33 -07:00
Kelsi
a6b8cd75f6 feat(editor): map browser for loading existing WoW zones
- Load Map Tile dialog now shows a searchable list of all available
  maps from the manifest (Azeroth, Kalimdor, Outland, dungeons, etc.)
- Click a map name to select it, then pick tile X/Y coordinates
- Helpful tile range hints shown below coordinates
- Maps indexed from WDT files in the manifest on startup
- Foundation for loading and modifying sections of existing WoW maps
2026-05-05 06:01:42 -07:00
Kelsi
5ccc61f144 fix(editor): NPC position markers always visible regardless of M2 rendering
- Colored diamond markers rendered at every NPC position on terrain:
  red for hostile, green for friendly, with vertical pillar for height
- Renders through water pipeline (alpha-blended, depth-tested)
- Always visible regardless of whether M2 creature model renders
- Scales with NPC scale setting for consistent visual size
- This guarantees you can always see where NPCs are placed
2026-05-05 05:59:06 -07:00
Kelsi
b25f7fa4bf fix(editor): add M2 render diagnostics to Info panel for NPC debugging
- Info panel now shows M2 renderer stats: model count, instance count,
  draw call count — visible in real-time to diagnose NPC rendering issues
- When placing NPCs: if models=0/instances=0, the model failed to load
  If models>0 but draws=0, it's a culling/frame-sync issue
  If draws>0, the model IS rendering but may be too small to see
2026-05-05 05:56:49 -07:00
Kelsi
9322d37b81 feat(editor): height scale tool for terrain relief control
- Scale Heights: multiply all terrain heights by a factor (0.1x - 5.0x)
- >1.0 exaggerates relief (deeper valleys, taller peaks)
- <1.0 flattens terrain toward base height
- Re-stitches all chunk edges after scaling for seamless results
- Workflow: noise → smooth → scale → clamp for precise control
2026-05-05 05:55:05 -07:00
Kelsi
ff33babb1d feat(editor): fog toggle in View menu 2026-05-05 05:52:23 -07:00
Kelsi
d59d69b0c5 feat(editor): height clamp tool for controlled terrain range
- Clamp Heights: sets min/max height bounds across entire tile
  (DragFloatRange2 slider for min/max, -500 to 2000 range)
- Useful workflow: Generate noise → Smooth → Clamp to desired range
- Prevents terrain from going underground or too high
- All affected chunks marked dirty for mesh regeneration
2026-05-05 05:51:03 -07:00
Kelsi
c93a997424 docs(editor): add Home/scroll/speed shortcuts to help overlay 2026-05-05 05:48:56 -07:00
Kelsi
434fdf6c7f feat(editor): center on terrain (Home key), navigation improvements
- "Center on Terrain" (Home key or View menu): resets camera to center
  of loaded tile at 300 units altitude with 45-degree downward pitch.
  Essential for recovering when camera gets lost in empty space.
- Toast confirmation on center action
2026-05-05 05:48:00 -07:00
Kelsi
2b0a81fd9a fix(editor): update speed hint to show Shift+scroll 2026-05-05 05:45:17 -07:00
Kelsi
12acbfb2d5 feat(editor): scroll wheel zoom, clickable minimap navigation
- Scroll wheel now zooms camera (moves along look direction) instead
  of adjusting speed. Much more intuitive for terrain editing.
- Shift+scroll adjusts camera speed (old behavior preserved)
- Click on minimap to teleport camera to that location on the terrain
- Zoom speed scales with current camera speed for consistent feel
2026-05-05 05:44:24 -07:00
Kelsi
f891bd02a5 feat(editor): import ADT doodad/WMO placements on load
- Loading an existing ADT now imports its MDDF (doodad) and MODF (WMO)
  placements into the object placer with correct position/rotation/scale
- Allows editing zones that already have objects placed in them
- Mutable getObjects() accessor for bulk import operations
- Log shows imported doodad + WMO count on load
2026-05-05 05:42:14 -07:00
Kelsi
17fda37813 docs(editor): add mode shortcuts to help overlay, update memory 2026-05-05 05:39:48 -07:00
Kelsi
e1776620d5 feat(editor): brush mode tooltips, chunk texture inspector in Paint panel
- Brush mode tooltips: hover over the mode combo to see what each does
  (Raise/Lower/Smooth/Flatten/Level/Erode descriptions)
- Chunk texture inspector: Paint panel shows which texture layers are
  on the chunk under the cursor (base + blended layers with filenames)
- Helps identify what textures you're painting over before blending
2026-05-05 05:37:35 -07:00
Kelsi
dc9b085e38 feat(editor): add author credit to About dialog 2026-05-05 05:36:01 -07:00
Kelsi
f1168cf6b7 feat(editor): about dialog, terrain stats, enhanced status bar
- About dialog: Help > About shows editor version, capabilities, and
  supported format (WoW 3.3.5a compatible)
- Info panel now shows texture count, water chunk count, hole chunk count
- Status bar shows object/NPC counts alongside map name
- Better at-a-glance overview of zone composition without opening panels
2026-05-05 05:34:43 -07:00
Kelsi
864415d246 feat(editor): auto-load objects/NPCs, mode buttons, number key shortcuts
- Loading an ADT now auto-loads objects.json and creatures.json from
  the output directory if they exist (full session persistence)
- Toolbar buttons now highlight active mode in blue (clearer visual)
- Number keys 1-5 switch modes: 1=Sculpt 2=Paint 3=Objects 4=Water 5=NPCs
- Toast shows loaded object/NPC count on zone open
2026-05-05 05:29:30 -07:00
Kelsi
e18c2cf009 feat(editor): minimap camera indicator, bulk operations, snap all
- White crosshair on minimap shows camera position in real-time
- Bulk Operations section in Object panel:
  - "Delete All in Radius": removes all objects within brush radius
  - "Snap All to Ground": raycasts every object downward to terrain
    (fixes all floating objects in one click)
- Minimap legend updated with camera indicator
- Useful for cleaning up scattered objects or fixing placement height
2026-05-05 05:25:33 -07:00
Kelsi
fe91fda421 fix(editor): NPC default scale 3x, right-side panels track window resize
- NPC default scale changed from 1.0 to 3.0 so creatures are visible
  from typical editing altitude (WoW creature models are very small at
  scale 1.0)
- Properties/Info panel uses ImGuiCond_Always for position so it stays
  pinned to the right edge when the window is resized (was getting lost
  off-screen before)
2026-05-05 05:23:09 -07:00
Kelsi
befa12f9e6 fix(editor): Clear All, New Terrain reset, right-click menu, gizmo drag
- Clear All now actually removes all objects and NPCs (was only clearing
  selections before). Uses new ObjectPlacer::clearAll() method.
- New Terrain clears all objects/NPCs and resets viewport before creating
  fresh terrain. Fixes stale state from previous session.
- Right-click context menu works on both objects AND NPCs with
  appropriate options for each (Move/Rotate/Scale for objects,
  Fly To/Duplicate for NPCs)
- Gizmo drag: left-click now confirms the transform (ends drag) instead
  of requiring mouse-up. Right-click cancels. Camera no longer steals
  mouse events while gizmo is active.
- Right-click on unselected area passes through to camera correctly
2026-05-05 05:20:53 -07:00
Kelsi
d9ed7be36c feat(editor): fly-to-object, export README, quality of life
- "Fly To" button on selected objects and NPCs: moves camera 30 units
  above the selected item for quick navigation on large zones
- Export now generates README.txt with zone summary: map name, tile
  coords, object/NPC counts, and file listing
- Complete export package: zone.json + WDT + ADT + objects.json +
  creatures.json + README.txt
2026-05-05 05:16:43 -07:00
Kelsi
8c9407e0f5 feat(editor): object save/load JSON, working duplicate, export objects
- Object placer save/load: objects.json persists placed M2/WMO objects
  across sessions (path, position, rotation, scale, type)
- Fixed Duplicate button in Object panel: now actually creates a copy
  with correct path/type/scale instead of being a no-op stub
- Export Zone now saves objects.json alongside ADT/WDT/creatures/manifest
- Object JSON loader parses all fields for full round-trip
2026-05-05 05:14:03 -07:00
Kelsi
8341fb6dc9 feat(editor): minimap objects/NPCs, NPC duplicate, legend
- Minimap now shows placed objects (yellow dots) and NPCs (red=hostile,
  green=friendly) at their world positions on the height grid
- NPC Duplicate button: copies selected creature with 10-unit offset
  for quick population of similar spawns
- Minimap legend: colored dots showing Object/Hostile/Friendly markers
- All positions correctly mapped from world coords to minimap UV space
2026-05-05 05:11:33 -07:00
Kelsi
e0d14de5d2 feat(editor): zone manifest for client loading, export workflow complete
- Zone manifest (zone.json): generated on export with map name, map ID,
  tile list, biome, creature flag, and file paths. This is what the
  wowee client will read to discover and load custom zones.
- Export workflow now produces a complete loadable zone package:
  zone.json + MapName.wdt + MapName_X_Y.adt + creatures.json
- ZoneManifest class with save/load (JSON format)
- Custom map IDs start at 9000+ to avoid conflicting with retail maps
- New Terrain dialog shows helper text for map name format
2026-05-05 05:06:41 -07:00
Kelsi
3d6c508491 refactor(editor): remove dead marker renderer, clean up stale fields
- Remove markerRenderer_ initialization, shutdown, update, and clear
  calls from EditorViewport (markers replaced by actual M2 rendering)
- Remove unused saveAdtRequested_/saveWdtRequested_ fields and their
  void casts (replaced by unified exportZone workflow)
- Zero warnings across both wowee and wowee_editor targets
2026-05-05 05:04:14 -07:00
Kelsi
9bc05fae87 feat(editor): smooth entire tile, snap-to-ground toggle, object list improvements
- Smooth Entire Tile: global smoothing pass with configurable iterations
  (1-10). Smooths across chunk boundaries for seamless results. Updates
  inner vertices from smoothed outer grid. Great after noise generation.
- Snap to Ground checkbox: on by default, objects placed at terrain
  surface. Disable for floating/airborne objects.
- Random Rotation + Snap Ground checkboxes side-by-side for fast setup
- Toast notifications on noise apply and smooth operations
- Smooth pass uses cross-chunk neighbor averaging for edge continuity
2026-05-05 05:00:31 -07:00
Kelsi
5df007b7b9 feat(editor): random rotation, placed object list, quality of life
- Random Rotation checkbox: each placed object gets a random Y rotation
  (great for natural-looking tree/rock placement without manual tweaking)
- Placed Object List: collapsible list in Object panel showing all placed
  objects with name and position, click to select
- Both features reduce repetitive manual work when building dense zones
2026-05-05 04:57:42 -07:00
Kelsi
89312120f4 feat(editor): heightmap export, help overlay, keyboard reference
- Export Heightmap: File > Export Heightmap saves terrain as 16-bit
  RAW grayscale (129x129) for use in external terrain editors or
  as a backup. Configurable max height scale.
- Help overlay (F1 or Help menu): lists all keyboard shortcuts
  organized by category (navigation, editing, object transform, view)
- Round-trip heightmap workflow: import → edit → export
2026-05-05 04:52:36 -07:00
Kelsi
2f96f112bd feat(editor): heightmap import, toast notifications, workflow polish
- Import Heightmap: File > Import Heightmap loads RAW 8/16-bit grayscale
  files (129x129 or 257x257) and maps to terrain heights with configurable
  scale. Supports standard terrain editor heightmap formats.
- Toast notifications: non-intrusive green popup at bottom center for
  user feedback (save confirmations, import results, errors)
- Toasts fade out after 3 seconds with alpha animation
- Auto-save now shows toast on save
- Quick-save (Ctrl+S) shows toast confirmation
2026-05-05 04:49:43 -07:00
Kelsi
a91233a6ec feat(editor): erosion brush, NPC load, auto-save
- Erode brush mode: simulates water erosion by moving height downhill
  based on slope, creating natural drainage patterns and gullies
- NPC JSON loader: File > Load NPCs parses saved creatures.json back
  into the spawn list (round-trip save/load now works)
- Auto-save: every 5 minutes when unsaved changes exist, exports the
  full zone (ADT + WDT + creatures) to the output directory
- Sculpt mode now has 6 brush types: Raise/Lower/Smooth/Flatten/Level/Erode
2026-05-05 04:44:54 -07:00
Kelsi
42749e9b58 feat(editor): procedural noise generator, sky presets, viewport lighting
- Noise Generator in Sculpt panel: applies procedural value noise
  with configurable frequency, amplitude, octaves, and seed
  to create hills/valleys across entire tile instantly
- Sky/Lighting presets: View > Sky menu with Day (blue sky, high sun),
  Dusk (orange, low sun), Night (dark blue, moonlight)
- Viewport clear color and light direction now configurable at runtime
- Noise uses smoothstep interpolation with octave fractal layering
2026-05-05 04:40:37 -07:00
Kelsi
f5fe9a0101 feat(editor): terrain holes, recent textures, sculpt panel polish
- Punch Hole / Fill Hole buttons in Sculpt panel: creates terrain
  holes (4x4 bitmask) for cave entrances, mine shafts, etc.
  Uses brush radius to determine affected area.
- Recent Textures: paint panel shows last 6 used textures as quick-
  select buttons (no need to re-search the full list)
- Holes saved in ADT format (MCNK holes field) and respected by
  the mesh generator (triangles skipped at hole positions)
2026-05-05 04:34:03 -07:00