Repository navigation
Vortex Engine v3.4.15 — Every script runs, Stop leaves no trace
Vortex Engine v3.4.15 — Every script runs, Stop leaves no trace
Twenty-six bugs reported by @patii132 and two found on the way. They cover scripting, play mode, the Claude tools, audio, navigation, asset import and rendering.
Scripting
- Every script on an entity runs. Only the first Script component of an entity used to run; the rest were skipped without a word. Each one now gets its own behaviour, fields and lifecycle, and every callback reaches all of them. Disabled Script components stay off. Play start lists entities that run several scripts and warns about duplicates. (#408)
- Save reads the disk every session. A save file changed between play sessions is read again, and a new session never writes the last one's leftovers. (#452)
- UI units.
UI.Width,UI.Height,UI.MouseXandUI.MouseYare points in the editor and in the player. The newUI.Scalegives the pixels per point. All of them are valid inStart(). (#454) - NaN guard. A NaN or infinity written to a Transform or passed to
MoveCharacteris refused with a capped warning instead of reaching native code. (#455)
Play mode
- Stop leaves no trace. Stop now gives back exactly the scenes you had before Play, whatever changed them: the Claude tools, the Inspector, the hierarchy or scripts. (#423, #478, #479)
- Entities created, duplicated, placed or scattered while playing are removed. Re-parented entities return to their old place, in every loaded scene.
- Script field values and environment settings changed in play come back.
- Data files that play created for removed entities are deleted.
- Prefabs saved in play re-sync their instances.
- Undo and redo are the ones you had before Play.
- One Console line says what Stop did.
- No pause menu left behind. Gui screens and cached canvases are cleared when play stops and when a project closes, so one template's menu no longer overlays another game. (#477)
Application.Quit()in the editor stops play after the frame. Bone attachments no longer write their play pose into the edit scene. (#410)
Claude and MCP tools
- Scripts in subfolders. Every script tool finds a bare script name in any subfolder of
Assets/Scripts. An ambiguous name is refused with every candidate listed, and a misspelt one gets suggestions. (#456, #494) - Script fields.
get_entityshows a script's field values and which ones are overridden.set_component_propertiessets them, and in play the value reaches the running script, also while paused. (#405) - Honest results in play. Every change made while playing or paused says
runtime_only: true when Stop takes it back, false with the reason when it can't. The result keeps its edit-mode shape. Play-mode hints go intoplay_note. - project.vortex keeps your keys. A save merges into the file at the JSON level. The version, creation time,
$schemaand every key the editor doesn't know survive, and so do edits made to the file meanwhile. (#414) - The capture shows the right camera.
focus_cameraandcapture_viewport(focus)switch to the editor camera, and the capture names the camera that rendered. (#444) get_scripting_apiprints the doc summary of each API.
Audio and navigation
- One-shots reverberate. A 3D
Audio.PlayOneShotinside a Reverb Zone gets the zone's reverb, like an Audio Source. 2D one-shots stay dry, and both have areverbMixoverload. (#496) - Reverb Zones follow the hierarchy. A zone counts only while it is active in the hierarchy. Box zones turn and scale with their entity, and the gizmo shows the same shape. (#497)
- Audio Sources and Listeners follow the hierarchy too. A source under a deactivated parent is silent. The ears follow the first Audio Listener that is active, so switching camera rigs moves the listener with them.
- Fade in from silence. "Start at Volume 0, then fade in" now reaches its target. Other fades still multiply Volume, and a fade that can't be heard warns once. (#404)
- Stability AI works on macOS. Sound Studio's Stable Audio backends connect over TLS 1.3. The API key never appears on a command line. (#403)
- Tall levels keep their navmesh. Levels taller than 819 m bake completely, and the bake reports anything it cannot keep. (#451)
Asset import
- glTF alpha modes. MASK imports as a cut-out at the glTF cutoff and BLEND as alpha blend. A BLEND material that is fully opaque in practice imports opaque, so it keeps its shadows.
doubleSidedapplies to cut-outs and blended materials. (#441) - Colour-only materials stay colour-only. A glTF material without a colour map no longer picks up one of the model's images, which was often its normal map. (#453)
- KHR_texture_transform. Offset, rotation and scale are applied as the glTF spec defines them, so Sketchfab scans and tiled textures line up. (#470)
- Emission is imported. The glTF emissive colour and
KHR_materials_emissive_strengthreach the material, so a placed glTF glows. (#450) - Animation clips reload.
.vanimclips and skeletons reload when their file changes, and a missing clip is looked for again. (#419)
Rendering
- Up to six times more animated characters. All submeshes of a character share one bone palette per frame, so a character made of six meshes uses a sixth of the budget it used before. Over budget, visible and near characters keep their animation first, and the first-person arms always do. New script stats:
Rendering.BoneMatricesUsed,BoneMatricesCapacityandSkinnedBindPoseFallbacks. (#415) - Lights no longer pop. With more than 16 point or 8 spot lights in a scene, the ones that matter most are picked, and a light already chosen gets a keep bonus. A light the budget swaps out fades over half a second. A shadow map changes hands only after its old shadow has faded. A camera cut picks the new set at once.
engine_statsreports the bone and light budgets. (#416) - Two-sided back faces. The back of a two-sided material is lit on its own side, so glTF
doubleSidedcards, fences and cloth seen from behind are no longer lit inside out.
Behaviour changes for existing projects
- Scripts that were silently skipped now run, for example the Open World player's footprints, which now fade after 60 s. Disabled Script components stop running.
- The standalone player starts scripts in its first frame, so the window size is known in
Start(). - Undo after Stop no longer replays steps recorded while playing.
attach_scriptwhile paused starts the behaviour when play resumes.- FBX and OBJ models with colour-only materials that picked up an
*_albedoimage lying next to them now show their material colours. - Models re-import once (import cache version 5). Sidecar
.vmatfiles written by older imports keep their values until re-imported.
New smoke checks guard these fixes on Metal and on DirectX 12 in CI:
two-sided back faces,light budget,bone palette budgetandmcp play mode leaves no trace;audio play,sound studioandnavigation;- five glTF import checks.