LambdaMod 0.6.0 Release
5th March 2022
This version didn't quite go as initially planned but here's LambdaMod 0.6.0! Here's what was worked on in the past three months:
- Added named anchors.
- Improved render engine to not use large numbers of command buffers, improving performance.
- Expanded cut, copy and paste to support other sound and animation editors.
- Added support for binding input release events.
- Refactored control context to be slightly less of all-purpose god class.
- Added IK pivot limiting.
- Fixed render corrupting on swapchain reinitialization.
- Added VR hip-directed movement using a waist tracker.
- Added server splash.
- Fixed syntax highlighting issues.
- Fixed with popups rendering over all windows.
- Added prefab system.
- Added placeholders for grip anchors.
- Removed entity reference counting system.
- Improved text panel performance.
- Fixed text signal not displaying upon reconnect.
- Enforced string sanitization.
- Added UI to create text events.
- Added admin indicator to user settings.
- Added system settings.
- Added anchor socket system.
- Added UI for editing predictors.
- Added user color control to user settings.
- Added user account security.
- Documented security topics.
- Added storing of connection details between sessions.
- Added new plane types.
- Made character creation tools scriptable.
- Added physical/visible/audible flags to entities.
- Suppressed unnecessary physics events.
- Improved rendering performance for mobile entities.
- Added host flag to entities.
- Added startup splash.
- Fixed configuration parsing failure causing a freeze.
- Expanded syntax highlighting to include the standard library.
- Made entities start enabled to reduce confusion.
- Updated initial camera position to reduce confusion.
- Added Blender-style duplicate keybind.
- Improved documentation of keybindings.
- Removed
super
from the scripting language. - Split scripting language errors into two kinds, internal and external, and added the ability to throw and catch internal errors.
- Improved scripting language to accept multiple body expressions in many places.
- Added new scripting language functions.
- Switched to OpenSSL for networking.
- Added aliases to scripting languages to improve ease of use.
- Added hidden information features for entity and stash settings panels.
- Improved IK to take target rotation into account.
- Added post processing support.
- Improved quickstart guide.
- Added indicator of camera mode.
- Increased log message display time.
- Removed camera snap.
- Added perspective orbit camera.
- Fixed orthographic camera controls.
- Added editing snap.
- Added color to log messages.
- Added perspective grid.
- Added bracket pairing indicator.
- Reworked entire text system.
- Cleaned up code.
- Refactored entire panel UI system.
- Improved number range safety.
- Added orthographic grid.
- Added HTC Vive Focus 3 controller support.
- Added orthographic input mode for users without numpads.
- Added facial tracking support.
- Reworked entire parenting system.
- Improved many parts of the look and feel.
- Completed tether control.
- Completed confinement control.
- Added quit button to the main menu.
- Fixed
.desktop
file. - Fixed multi-part commands not working in the text editor.
- Added fade control.
- Added render decorations for user device, bounds and camera indication.
- Reworked entire codebase to remove C-style APIs.
- Added knowledge system.
- Fixed rendering without anti-aliasing.
- Added goto control.
- Added UI for user controls.
- Added VR reference grid.
- Fixed rendering on very small screens.
- Added support for basic controls necessary to play with a gamepad.
- Added attach and detach sounds.
- Reworked saving of users, making it possible to save text events.
- Added panel interaction hinting.
- Added theme customization.
- Improved YAML parsing correctness.
- Added input customization.
- Added join-by-URL support.
- And many other refactors and bug fixes!
This version didn't quite go as planned. My initial plan was to focus on improved rendering primitives and continue to extend VR functionality with grip and socket-based parenting (allowing you to pick up objects and snap them together). This steadily got derailed by a number of platform issues coming to a head. Design decisions taken when LambdaMod was first written in the name of rapidly written flexible testing code (i.e. the heavy use of C-style APIs to enable parts of the system to talk to each other) had to be removed. Some previous design decisions that were once good enough (i.e. the parenting system, the text system) turned out to not support new features very well and so had to be restructured. In a move that compounded the problem I decided to clean up a bunch of quality issues, particularly large piles of features that had been started but not finished, which further slowed things down.
This sort of thing seems to keep happening. In particular, the three big issues (render, sound and animation) repeatedly end up taking a backseat to platform improvements once the chaos of daily patching sets in. For the next version I'm going to try something a little different to combat this. Rather than working on LambdaMod directly, I will work on an temporary "extension", added to the client's code. This testing module, called "Dawn's Light" because I hope a cool thematic name will inspire me to stick with it, will experimentally implement different render, sound and animation primitives separate from the regular codebase. There will be no controls in the editors to use these primitives and they will not be synced over the network. Once good approaches have been found for fixing the problems of render, sound and animation, the process of integrating those techniques into the main application can begin.