Changelog - v6.2.0-beta9

Range: 2f03749..aa118e5, 25 commits.

Feature

New Authored Systems

  • Loading Menu system. Scene-based loading screens with LoadingMenu.Open/Close/SetMenuScene Lua API, Loading.* SignalBus channels, per-project default loading scene in AppSettings, and "Loading Min Display" minimum. Survives the root scene swap via Node:SetPersistent(true). New files: LoadingMenu.cpp/h, LoadingMenu_Lua.cpp/h, full docs.
  • Transform Animation system. TransformAnimationAsset (keyframed transform clip, loop/play-rate/duration), TransformAnimationNode3D, TransformAnimationWidget, full Lua bindings, Timeline integration via new TransformAnimationClip and TransformAnimationTrack, TransformKeyframe as a first-class Datum value type.
  • Audio Analysis API. Cross-platform real-time audio analysis: AUD_GetRMS, AUD_GetLoudness, AUD_GetLoudnessDb, AUD_GetFrequencies, AUD_GetSpectrum, plus streaming variants (AUD_GetStream*). Lua bindings on free voices and on Audio3D. Works on XAudio2, ALSA, PulseAudio, ASND (Wii and GameCube), NDSP (3DS), console addons. New files: AudioAnalysis.cpp/h.
  • Image Plane feature. Drag-a-texture-into-scene auto-builds a paired SM_<base> plus M_<base>. Editable pivot (Center, BottomCenter, TopLeft), size mode (AspectWidth1, AspectHeight1, PixelsPerUnit), shading model, blend mode, two-sided. Reuses existing image-plane meshes. New files: ImagePlaneBuilder.cpp/h.
  • Asset Fixup Modal. Post-load scan finds widgets whose Asset-typed properties were bound to the wrong-type asset; per-row picker to rebind, clear, or skip. New files: AssetFixupModal.cpp/h.
  • Editor Alert Modal system. EditorShowAlert queues non-fatal alerts; multiple alerts batched into one walk-through modal. Used by the new Node::AddChild self-pointer corruption guard.

Audio

  • New 3D audio one-shots at a world position (fire-and-forget spatial playback) and seek on Audio3D.
  • AudioManager generic API extended with helper functions for visualization-friendly playback.
  • New Audio_Lua binding surface for the generic non-node audio API.

Editor and UX

  • Categorized "Add Node" menu. Scene Hierarchy + groups 3D and Widget children into sub-buckets; addons auto-group under Addons/<id> unless PolyphaseEngineAPI::SetNodeCategory is called.
  • New LaunchersModule in Preferences > External for managing external launcher tools.
  • Native addon shadow-copy load path. Addons are staged into a shadow directory before LoadLibrary, so file locks don't pin the original DLL across hot-reloads. InvalidateAddNodeMenuCache for refreshing node categorization.
  • Asset name clash dialog at import time. ActionManager detects collisions and suggests unused names before write.

Platforms

  • Android, production pass.
    • App settings, app label, app icons, orientation now respected end-to-end (Gradle, Manifest, resources).
    • Addons now build and link on Android (InjectNativeAddonsIntoCmake, AddonInject.cmake, CMakeLists include()).
    • Per-density PNG launcher icons replacing the old .webp set.
    • Big-endian and addon-platform guards in Scene.cpp, StaticMesh3D.cpp, World.cpp, Renderer.cpp, HttpClient.cpp, FileWatcher.h, SoundWave.cpp.
  • PSP, working cleanly. All engine-side stubs, big-endian guards, decompression hooks, mutex guards, and HTTP fallbacks needed for the PSP build-target addon to compile and run without engine forks.
  • Build-target addons, skeletal meshes. SkeletalMesh and SkeletalMeshCompResource now expose the POLYPHASE_PLATFORM_ADDON arms required for CPU skinning on console addons.
  • Build-target addons, input system. InputConstants.h console fallback closed; build-target addons reach the full input system.
  • Gaussian Splatting and Vulkan addon handles. New GfxVulkanAddonHandles surface in GraphicsVulkanAddon.h; camera-facing translucent splats supported through the engine's render order; new Vulkan pipeline and context plumbing for addon-submitted draw calls.

Engine Infrastructure

  • LUA_ENABLED flag in Constants.h. Lua support on by default everywhere.
  • Datum extended with TransformKeyframe serialization, copy, move, and comparison.
  • Property system extended with the new keyframe type, plus matching Property_Lua bindings.
  • ScriptUtils refactored from set to map for tracking loaded Lua files; new ClearLoadedScripts for clean project reload; script registry cleared on LoadProject.
  • New SystemUtils job-object support on Windows for cleanly terminating subprocesses with their children.

Bug

  • glTF vertex colors. Assimp's ExtractData was never normalizing integer COLOR_0 accessors, so Blender's normalized USHORT colors came in scrambled (blue to red). Fixed in glTF2Importer.cpp.
  • HTTP in Shared editor builds. Duplicate HttpResponse classes between the AutoUpdater and the engine were COMDAT-folded and corrupted the heap in Shared builds. Renamed AutoUpdater's to UpdaterHttpResponse.
  • Editor crashes, multiple. Null-check in Renderer.cpp collision-shape setup; safer self-pointer handling in Node::AddChild and Node.h pointer resolution; XAudio2 init error paths in Audio_Windows.cpp.
  • Packaging non-embedded builds. Builds that ship assets on disk (not baked) now resolve assets by UUID correctly.
  • Texture save round-trip. Texture::SaveStream's non-cooked LQ downsample branch was shrinking editor .oct files every save and load cycle; now skips Platform::Count.
  • Android builds with addons. Fixed multiple regressions where addons either didn't link, didn't expose Lua tables, or silently degraded at runtime.
  • Node::AddChild corrupt-self-pointer crash. Now detected and routed to the alert modal instead of taking the editor down.
  • btConvexConcaveCollisionAlgorithm. Additional guards for collision setup.
  • World.cpp mutex handling. Adjusted for compatibility with addon platforms lacking full threading.
  • SYS_Exec blocking. Routed through SYS_ExecDetached; long external commands no longer freeze the editor.

Deprecated

  • Old Android launcher icon set. The mipmap-*/ic_launcher.webp plus ic_launcher_round.webp assets and the drawable*/ic_launcher_* XML vectors are removed in favour of per-density PNGs.
  • Hardcoded Android app name and package paths. Old appname-rooted Java source paths replaced by the AppSettings-driven layout.
  • Blocking SYS_Exec for editor-triggered external commands. Use SYS_ExecDetached; the synchronous path is no longer the default for editor flows.

Chore

Documentation

  • Multiplayer guide. End-to-end Lua multiplayer tutorial (authoritative-server model, sessions, lifecycle, replication, RPCs).
  • AudioVisualizer guide. Covers RMS, Loudness, Frequencies, Spectrum from both Lua and C++.
  • LoadingMenu guide. Development plus Lua/Systems pages.
  • Audio3D docs expanded for one-shots and seek.
  • Audio systems docs expanded for the new generic functions.
  • SignalBus docs clarified, listener role, examples, and warnings on Subscribe.
  • CustomBuildTarget docs added.
  • Network systems docs updated for the new tooling.
  • mkdocs.yml updated for the new sections.

Refactors and Maintenance

  • AssetManager reworked for the asset-clash and fixup flow.
  • ActionManager extended with the asset-name-clash modal logic and unused-name suggestion (roughly 1k LOC of editor flow).
  • EditorImgui reorganized to host the new modal and alert system and the categorized Add Node menu (roughly 1k LOC).
  • Engine.cpp script-file change handling cleaned up for path consistency.
  • NativeAddonManager gains shadow-copy staging and sweeping (roughly 600 LOC).
  • PackagingWindow flows refreshed.
  • PlayerInputEditor updates.
  • Several *Platform_*Types.h regenerations under Standalone/Generated/.
  • .gitignore and AddonInject.mk housekeeping.
  • Big-endian-friendly tweaks across Scene.cpp, StaticMesh3D.cpp, SoundWave.cpp, Renderer.cpp, World.cpp, FileWatcher.h, Datum.h.
  • Audio_3DS.cpp, Audio_Dolphin.cpp, Audio_Linux.cpp, Audio_Windows.cpp. Uniform tweaks to plug into the new audio analysis API.
  • HttpClient_Linux.cpp and HttpClient_Windows.cpp refactors alongside the AutoUpdater ODR fix.
  • Log subsystem gains additional state info for debugging.
  • .claude/skills/polyphase-buildtarget/SKILL.md significantly expanded.
  • Removed LuaDebugger.cpp stray line; cleaned Asset.cpp and AssetRef.cpp.

Statistics: 228 files changed, 14,140 insertions, 953 deletions.