-
Notifications
You must be signed in to change notification settings - Fork 10
changelog
Vicious Squid edited this page Sep 8, 2026
·
192 revisions
ENGINE / PERFORMANCE
- PERFORMANCE: Added cached brush AABBs, eliminating repeated bounding-box calculations across physics, collision and visibility systems.
- PERFORMANCE: Optimized spatial-grid queries with fast paths for single-cell lookups.
- PERFORMANCE: Inlined ray/AABB intersection in line-of-sight checks, substantially reducing temporary allocations and Python call overhead.
- PERFORMANCE: Replaced per-tick NumPy allocations in door and mover interpolation with scalar arithmetic.
- PERFORMANCE: Added lightweight XZ distance culling for the main camera render path.
- PERFORMANCE: Cached renderer matrix uniform pointers within textured batches.
- PERFORMANCE: Optimized terrain lighting by selecting the nearest lights supported by the terrain shader.
- PERFORMANCE: Reduced property-editor rebuild overhead through deferred Qt updates and lazy plugin-tab construction.
EDITOR
- NEW: Collapsible property-editor sections for improved inspector organisation.
- NEW: Advanced property tab for less frequently used/dynamic properties.
- NEW: Editable KeyValue defaults in the property editor.
- NEW: Property grouping support for plugin-defined properties.
- NEW: Generic floating-window infrastructure for editor and diagnostic tools.
- NEW: Plugin entity-wizard hooks for custom entity creation workflows.
- NEW: Singleton entity support for plugin-defined entity types.
- IMPROVED: Entity type lookup can now use an explicit
map_type, decoupling map serialization from Python class names. - IMPROVED: Asset browser failures are isolated to individual assets instead of aborting an entire scan.
PLUGIN SYSTEM
- NEW: Expanded plugin API with property groups, entity wizards and singleton entity types.
- IMPROVED: Plugin custom-property tabs are constructed lazily, reducing unnecessary editor initialization work.
- IMPROVED: Plugin registration infrastructure now supports additional built-in extension layers while remaining backwards-compatible with existing plugins.
AUDIO
- FIXED: Speaker
loopingproperty was not being honoured by game-view audio playback. - FIXED:
StopSoundnow correctly stops active speaker channels. - IMPROVED: Per-entity audio channel tracking prevents duplicate looping channels when sounds are retriggered.
ROBUSTNESS
- FIXED: Logic-thread exceptions are now logged with full tracebacks instead of silently terminating the update loop.
- FIXED: Terrain shader setup no longer reports misleading failures when invoked before a valid OpenGL context exists.
- FIXED: Terrain lighting no longer attempts to address more light uniforms than are declared by the terrain shader.
- IMPROVED: GLB thumbnail generation reports failures without destabilising the asset browser.
- IMPROVED: Runtime-only renderer caches are excluded from map serialization and undo state.
RENDERING
- IMPROVED: Main-camera rendering can discard distant objects before expensive render preparation while leaving lights, portals and shadow/portal source collections unaffected.
- IMPROVED: Reduced repeated uniform-pointer lookup during textured brush rendering.
QUALITY
- NEW: Extensive regression and equivalence tests covering AABB caching, physics fast paths, ray intersection, mover interpolation, rendering culling, audio, floating windows and plugin infrastructure.
- FIXED: Multiple edge cases identified through cross-codebase regression testing.
- PERFORMANCE: Gated some unnecessary lookups in monster vision system
- Backported IO widget from MiniWind
- Fixes and improvements:
- FIXED: Property editor crash with integers >32 bits (backported from
miniwindbranch) - Textures can now be applied to angled brush faces via the FACE button
- FIXED: Property editor crash with integers >32 bits (backported from
- Everything needed to make & distribute First person, Top-Down and Open-World games
-
NEW:
LogicCommand— Executes a console command when triggered. - Added native Play-mode load/save functionality to console and API
- FIXED: ad-hoc signing to macOS release build (Thanks Carson)
- UI fixes and performance enhancements
-
NEW:
BigWorldPlugin for massive worlds; streams only the area around the player.
- Improved random level generator
- Property editor now exposes UUIDs and the I/O system can reference them
-
NEW:
Topdowncamera mode and assets (work in progress) - FIXED: Keyboard nudging was re-serialising the entire scene every keypress
-
PERFORMANCE: Persistent play-mode cull cache (
_build_cull_cache). Built once at play-start:- (N,3) NumPy arrays of brush AABB centers and half-sizes
- an object array of per-brush render refs
- the list of mover/door row indices (the only brushes that move)
- Per frame, the fast path now does almost no Python!
- NEW: Plugin API v1.3 provides primitives and extension points (Documented here)
-
NEW:
TidyPlugin for building "put everything away" games - FIXED: Improved package map discovery and ensured plugin metadata is not treated as playable maps.
-
I/O System:
- FIXED: Added missing inputs/outputs in IO manager
-
FIXED: Console commands
fireandent_firewere broken -
FIXED:
levelchanger.OnUsewas broken
- NEW: Fio Player for Android - (under development)
- No changes to
editororengine
- NEW: Convex polyhedra brushes
-
NEW: Scissor (clip) tool - Shortcut
X - NEW: Per-face surface inspector
-
NEW:
cigpickup entity - FIXED: Portal rendering pipeline bug
- PERFORMANCE: Hot code paths aggressively optimized across core rendering and spatial subsystems
- NEW: Dynamic lights cast real-time cubemap shadows
- NEW: Water volume physics
- PERFORMANCE: Improved terrain generation speed via NumPy batching
- PERFORMANCE: Portals now utilize frustum culling for significant FPS gains
- AI: NPCs now hear nearby sounds and actively investigate source locations
- FIXED: OpenGL crash when loading/generating large terrain
- FIXED: Linked portal yaw/pitch/roll orientation calculations
- NEW: LogicKeyValueStore — persists up to 25 key/value pairs across map transitions
Optimizations:
- Vectorized brush frustum culling with NumPy (replaced per-brush Python loop)
- Cached collision-brush lists instead of rebuilding every tick
- Precomputed trigger, pickup, level-changer, and monster entity lists
- Cached mover/door brush lists and normalized direction vectors once at load time
- AI now iterates a precomputed monster list/ID-map instead of rescanning all entities
- Batched spatial-grid and monster-ray debug visualizers into a single draw call
- Memoized monster sprite texture-key strings to eliminate per-frame allocations
- NEW: Autocaulk tool for automated face optimization
- NEW: Added GLB model support
- NEW: Added "Save layout", "Restore layout", and "Reset layout" workspace controls
- NEW: Taskbar and Dock icons for packaged Mac/Windows binaries
- ENGINE: PyGame integrated for audio spatialization and gamepad support
- AI: Monster AI offloaded to a dedicated background thread; increased monster hitboxes
-
UI/UX:
- Improved Asset and Model Browsing via
☰menu - Faster Property Editor response times
- Enhanced Scene Hierarchy overview
- Improved 2D view wireframes with clearer labelling
- Improved Asset and Model Browsing via
- PERFORMANCE: Optimized renderer batching to reduce draw calls
-
FIXED: Selecting
<None>shader type now properly reverts brush properties - FIXED: Issue where the Play button could display an incorrect state
- FIXED: CSG subtraction failures on complex geometries
-
NEW:
Fiopakarchive import/export system fully operational - UI/UX: Added dedicated Tools menu and enhanced Property Editor performance
-
ASSETS: Updated Asset Browser with distinct
MapsandPackagesviews - IMPROVEMENTS: Upgraded OBJ loader and general code refactoring
- NEW: Procedural Liminal map generator in Tools Menu — automatically generates playable maps in one click
-
NEW: Split-screen support in Play Mode (
ssconsole command orF9) — Player 2 maps to arrow keys or connected gamepad
-
FIXED: Corruption issue when exporting certain
.fiopakarchives - ENGINE: Initial work on split-screen viewport architecture
-
FIXED:
LogicSpawnerfailing to instantiate Monster entities -
MAPS: Added
Spawner_Testmap for I/O validation
- NEW (BETA): World Portal entity for seamless non-Euclidean level design
-
NEW:
.fiopakarchive packaging format and "Play Game Package" launcher -
NEW: Fullscreen toggle (
F12during Play mode) -
TOOLS:
tools/fio_to_map.pyexporter converts Fio JSON maps to Quake/Valve 220 format -
EDITOR: Arrow key nudging for selected entities (
Shiftfor 5x multiplier) - EDITOR: Real-time 2D view camera tracking during Play mode
- FIXED: Adreno GPU flickering issues on multi-monitor configurations
- FIXED: Mover distances decreasing by 'lip' value on repeated cycles
- FIXED: Monster hit registration accuracy
- NEW: Camera and Spawner entities
- NEW: Teleporter brush mechanics fully functional
- MOVERS: Movers can now interpolate along sequential PathNodes
-
FIXED:
Preview Movementtoggle for doors and movers
- NEW: Native macOS build and precompiled binary release
- FIXED: Qt GUI crashes on macOS (special thanks to zc1036)
-
FIXED:
Monster.get_sprite_pathperforming redundant filesystem queries every frame - FIXED: Missing overlay draw calls in Face Mode
-
CLEANUP: Removed redundant
obj_loader.pymodule
-
NEW:
PathNodeentity for monsters, movers, and teleporters -
NEW:
SpatialGridpartition visualization (sgconsole command) - NEW: Real-time 2D viewport rendering during Play Mode
-
NEW:
notargetconsole command (makes player invisible to AI) -
ENGINE: Dedicated
engine/monster_ai.pylogic core
- NEW: Monster AI behaviors and console debugging suite
-
NEW: Dynamic moving light sources (see
maps/dLight_Test.json) - NEW: Mouse sculpting mode for terrain generation
- WEAPONS: Added secondary weapon type (Shotgun)
- I/O: Named brushes can now be toggled via I/O events (visibility, collision, color). Hidden brushes bypass render calls entirely.
- FIXED: Broken I/O import references and glow brush rendering
-
NEW: Visual Logic Graph Editor (
CTRL+L) and Logic Wizard (CTRL+SHIFT+W) with 25 pre-built templates - NEW: Initial Monster entity implementation
- MAP FORMAT: Upgraded to Map Format v3 with UUID-based entity identifiers (preserves I/O connections through renames)
- TERRAIN: Heightmap loading and mouse sculpting support
- FIXED: YZ viewport dragging direction flipped
- FIXED: Frame-pacing race condition causing visual flickering
-
NEW:
LevelChangerentity for inter-map transitions - ENGINE: Refactored level loading pipeline utilizing Qt signals for safe state changes
- CONSOLE: Expanded rendering engine console commands
- FIXED: Edge cases in Logic Gate evaluation
-
SHADERS: Implemented explicit mixed-precision shader qualifiers (
highpfor vertex positions,mediumpfor lighting and color calculations) -
CONSOLE: Added interactive
helpcommand and expanded runtime triggers
-
NEW: In-engine Debug Console (toggle with
~) -
ARCHITECTURE: Refactored and summarized module structure across
/editorand/enginedirectories
- SHADERS: Shader optimizations in preparation for deferred rendering pipeline
- DISPLAY: High-DPI display scaling support
- PERFORMANCE: CPU path optimizations specifically targeted for ARM processors
-
SHADERS: Upgraded shaders to
#version 330 core
- NEW: Source/Half-Life 2 style Entity I/O event system with real-time debugger
- NEW: Logic Entities (timers, gates, and switches)
- NEW: Per-face texture application
- SYSTEM: Auto-saving and recent file history
- TERRAIN: Expanded procedural terrain generation limits by 16x
- VISUALS: Enhanced untextured lo-fi geometry rendering modes
- NEW: Terrain generator tool and UI
- ENGINE: Expanded core rendering pipeline
- NEW: Initial non-beta public release
- UI: Added Toast notification system to the editor UI
"Fio was born from a simple frustration: waiting hours for BSP, VIS and RAD just to test a level. Every design decision follows one principle—edit, press Play, and iterate instantly."