Repository navigation
Releases
october_061_build
LibRealSpace Release Notes
Overview
This release completes the music and audio foundation for LibRealSpace, bringing the project much closer to the original game’s behavior and sound architecture. The update introduces a full XMIDI-compatible music system, advanced sequencing and transition logic, and native OPL3 synthesis with a complete timbre and voice management pipeline.
It also fixed the windows building bugs in 0.6.0
Highlights
Added a complete Nuked-OPL3 FM synthesis backend for authentic AdLib/OPL3 audio output.
Implemented a Strike Commander-style music system:
- AIL-compatible AdLib driver
- XMIDI driver
- Music sequencer
- Music set and transition handling
- Added support for timbre libraries and music data structures used by the original game.
- Improved audio rendering and synchronization with the game loop.
- Introduced support for music transitions, phrase timing, and linked passages from game data files.
- Refactored mixer and music handling to support a native XMIDI + OPL3 pipeline without reliance on external MIDI backends.
Key Features
Music System
Added a native OPL3 synthesizer based on Nuked-OPL3.
Implemented AIL voice allocation and channel management for music playback.
Added XMIDI sequence interpretation and timing control.
Added sequencer logic to handle:
- direct track switching
- waiting for phrase completion
- transition passages
- track commitment after transition
Built support for music sets and track matrices to reproduce original game-style music flow.
Timbre and Sound Data
Added support for OPL timbre banks and timbre cache handling.
Implemented support for both simple OPL timbre entries and time-varying FX definitions.
Added data parsing and installation logic for music-related files used by the game.
Audio Pipeline
Reworked the mixer and music rendering pipeline for real-time OPL3 output.
Integrated SDL-based music mixing support.
Added synchronized render/update paths for music, voices, and synthesis.
Added support for sound effects channels and per-channel volume control.
Technical Improvements
Refactored mixer code to handle the new XMIDI and OPL3 stack.
Improved music data loading and archive support.
Added native structures for music sets, timbre libraries, and track metadata.
Improved compatibility and stability across multiple files by resolving platform macro conflicts and general build cleanup.
Notable Files Added or Updated
Nuked-OPL3 source and build integration
AIL voice management and AdLib driver implementation
XMIDI driver implementation
Music sequencer implementation
Timbral library and music set support
Mixer and music system refactoring
october_060_build
Major update focused on flight dynamics, AI behavioral systems, and camera management. Significant improvements to weapon handling, navigation, and mission control systems.
Major Features
Flight Dynamics System
- New Flight Model: Implemented
SCJetpPlaneandSCJdynPlanewith advanced physics - Aerodynamics: Added parasite drag calculations and improved lift computations
- Air Density Calculations: Integrated
RSAirdensfor realistic altitude-dependent aerodynamics - Stall Mechanics: Implemented hard stall conditions and attitude control for enhanced flight realism
- Takeoff & Landing: Complete takeoff and landing operation sequences
AI Brain System
- New SCAIBrain Class: Comprehensive AI behavior management system
- Combat Behaviors:
- Fire control mechanisms with attitude-based aiming
- Pursuit and evasion tactics
- Ground attack functionality with dynamic target selection
- Missile loading, locking, and threat assessment
- Decision Making: Fixed cadence AI decision-making with improved response timing
- Wingman System: Implemented active wingman management and ally following mechanics
- Navigation: Enhanced waypoint logic and steer-to-waypoint calculations
Camera System Overhaul
- Camera Director: Implemented SCCameraDirector with procedural camera sequences
- Multiple Camera Types:
- Chase Camera for following aircraft
- Target Camera for focused tracking
- Rota Camera for rotational perspectives
- Cockpit view mapping
- Time Model: Simplified time handling with improved counter management
- Mission Integration: Full integration with mission actors and event handling
Mission & Control Systems
- Event System: Complete event-driven architecture with subscription/publication pattern
MessageBusclass for event managementMissionEventActorHitand related event classes- Enhanced event handling in mission and actor systems
- Pilot Control:
PlaneControlEventfor improved aircraft command input - Objective Management: New
setObjectivemethod for mission targeting - Order Execution: Streamlined order system for mission-critical commands
Weapon System Enhancements
- Improved weapon category classification
- Radar domain targeting refinements
- Weapon timers and cooldown management
- Seeker logic enhancements
- Difficulty scaling for weapon effectiveness
Graphics & Rendering
- Palette System: Fixed colorFlag conditional setting based on palette size
- Color Rendering: Updated to use palette texel values for accurate color reproduction
- Camera Opcodes: Implemented RSCameraCOMP camera opcode definitions and decoding
Improvements & Optimizations
- Code Organization: Refactored event classes to separate headers for better maintainability
- Performance: Optimized control input processing and position synchronization
- Linux Support: Multiple fixes to ensure cross-platform compatibility
- Vector Operations: Enhanced vector operation calculations for flight dynamics
- Waypoint System: Fixed waypoint navigation to prevent aircraft ground collisions
- CMake Build: Simplified target linking configuration
Bug Fixes
- Fixed RSPalette colorFlag handling
- Corrected weapon category and radar type assignments
- Fixed target domain checks for missile threat assessment
- Refined destruction detection in mission updates
- Resolved velocity alignment issues between mission and plane systems
- Removed debug print statements
- Linux build compatibility fixes
Technical Improvements
- Fixed-Point Representation: Updated JDYN structure for improved numerical stability
- AI Parameters: Restructured RSEntity JDYN fields for better AI integration
- Event Handling: Introduced
onEventpattern for cleaner event management - Data Structure: Replaced radar arrays with std::map for improved COMP shape handling
- Build System: Enhanced CMakeLists configuration for better cross-platform support
Testing Notes
This release includes significant changes to flight dynamics and AI systems. Testing recommendations:
- Validate flight model behavior across different altitude ranges
- Test AI combat scenarios in various mission configurations
- Verify camera transitions and sequences
- Confirm weapon targeting in multiplayer and single-player modes
- Cross-platform testing on Linux and supported systems
Full Changelog: august_050_build...october_060_build
august_050_build
Release Notes 0.5.0
Summary
This release significantly expands gameplay systems and visual fidelity while fixing critical mission-flow, scoring, and UI issues. Major additions include pilot ejection/crash flow, aircraft subsystem damage and warnings, chaff/flare mechanics, cloud and skydome rendering improvements, text/midgame animation tooling, and game-over/balance logic updates.
Highlights
- Added full ejection and crash-related gameplay flow with animations and camera behavior updates.
- Introduced aircraft subsystem health/damage handling with improved cockpit feedback.
- Added defensive countermeasures (chaff/flare) and associated timing/render logic.
- Expanded rendering features: skydome, cloud rendering, LOD controls, view-distance tuning, FXAA, fog toggle, and widescreen ambilight.
- Improved mission/economy/game-flow logic (balance checks, game-over conditions, cost and replacement accounting).
- Fixed multiple killboard/end-mission scoring and display issues.
- Added macOS x86 CMake preset and compatibility improvements.
New Features
-
Gameplay systems
- Implemented ejection functionality and related animations across cockpit/strike/state/simulated object systems.
- Added crash animation rendering and camera mode handling for crash scenarios.
- Added chaff/flare mechanics with timers and rendering updates.
- Added lost-aircraft tracking and updated replacement logic.
- Added balance-check game flow effect and game-over logic tied to cash/scene conditions.
- Added scene-specific asset loading/animation handling for scene 107.
-
Combat/AI/physics
- Added tracer drawing.
- Improved pilot/autopilot dynamics (turning, pitch control, heading error handling, PID/autopilot refactors).
- Enhanced collision and lift calculation behavior in simulated objects.
- Refined trajectory and speed-based computations.
-
Rendering/visuals
- Implemented skydome rendering with progressive quality/depth/gradient improvements.
- Added cloud rendering support, generation improvements, dynamic cloud placement, and distance culling.
- Added/expanded LOD and view-distance controls, including stitching/triangulation improvements.
- Added FXAA support and fog visibility toggle.
- Added widescreen ambilight feature and configuration options.
- Added master warning rendering and cockpit data structure updates.
-
UI/text/tooling
- Introduced MIDGAME text-line parsing/writing/integration in animation archive/player.
- Added text width calculation, centering, grouping/formatting improvements.
- Added label prefix utility in main.
- Improved debug animation player text/talking handling.
-
Build/config
- Added macOS x86 CMake preset.
- Added compatibility update using Boost.
Fixes
-
Game flow and mission state
- Stop game when player is dead during frame execution.
- Fixed cash/project cost accounting updates.
- Initialized
player_deadstate reset path. - Updated thrust initialization to use dynamic limits in debug/mission flows.
- Prevented camera mode changes during ejection.
-
Scoring/killboard/end mission
- Corrected score calculation and kill buffer assignments.
- Corrected ground/air kill assignment during load.
- Fixed killboard/end-mission display bugs and reverted problematic intermediate killboard changes.
- Added scoring sprite sequence index validation.
-
Rendering and cockpit
- Corrected LOD references/handling and simplified/adjusted related rendering paths.
- Adjusted texture dimensions and removed unnecessary resizing.
- Adjusted MFD blit positioning.
- Corrected health handling when applying damage.
- Disabled color clamping for intended dithering effect.
- Updated widescreen ambilight configuration handling.
-
Text/animation
- Restored wingman text replacement in
DrawText. - Updated small-font handling for character
A. - Fixed
music_idstatic lifetime issue in debug animation player shot editing.
- Restored wingman text replacement in
-
Timing/performance
- Updated VRTimer target FPS for improved consistency.
Refactors and Internal Improvements
- Math utilities: angle normalization refactor and InvSqrt improvement.
- Renderer internals: skirt building/triangulation optimization for LOD.
- Animation/text pipeline cleanup and integration improvements.
- Randomization improvements for cloud generation (
rand()replacement with uniform distribution).
Build and Toolchain
- Added macOS x86 preset.
- Version bump fix in CMake (
0.5.0). - Compatibility adjustments with Boost.
Breaking Changes / Behavior Changes
- Game-over behavior now depends on cash/balance flow conditions introduced in SCGameFlow updates.
- Camera and death/ejection flow behavior changed in strike/cockpit pipelines.
- Visual defaults/options may differ due to added LOD/view-distance/AA/fog/cloud/ambilight controls.
little steps near the end
libRealSpace v0.4 — config_build_040
Release date: 2026-05-31
Previous release:fixes_031_build(v0.3.1)
New: Graphical Configuration Tool (config)
A brand-new standalone executable has been added — config — a lightweight ImGui-based configuration editor that lets users tweak all game settings without editing files by hand.
- General tab: resolution picker (auto-populated from SDL display modes), fullscreen toggle, object/world detail sliders, video effects checkboxes (CPC palette, scanlines, pixel scale, Super Eagle 2×).
- Controls tab: full input binding UI (see below).
- Settings are saved back to
config.iniwith a single click. - Replaces the old
[Controler]section inconfig.iniwith a proper[Input]section pointing to a bindings file.
New: Control Mapping UI (DebugControlMapping)
A dedicated control-remapping system is now available, shared between the config tool and the debugger.
- Lists all mappable sim actions (flight, combat, views, MFD, radio, etc.).
- Supports keyboard, joystick axis, joystick button, gamepad axis, and gamepad button bindings.
- Live capture mode: press a button or move an axis to bind it to an action (5-second timeout).
- Displays currently connected joysticks with their GUID.
- Bindings are saved/loaded from
default_bindings.cfg. - Keyboard bindings file path is now configurable via
config.ini([Input] bindings_file).
New: Post-Processing Shader Pipeline (RSScreen)
A new GLSL post-processing pipeline has been introduced, driven by config.ini [Video] settings:
| Option | Effect |
|---|---|
fx_cpc_palette |
Quantises colours to the Amstrad CPC 6128 palette using ordered (Bayer 4×4) dithering |
fx_scanlines |
Adds CRT scanline darkening every other logical pixel row |
fx_pixel_scale |
Pixel-art upscaling — snaps UV sampling to a grid of N×N pixels |
- OpenGL extension loading is handled by the new
GLExtensions.h/.cpp, with a no-op fallback on macOS/Linux where extensions are available natively. - Logical vs. drawable window sizes are now tracked separately (
logical_width/logical_height) to support HiDPI/Retina displays correctly.
macOS Build Support
The project can now be built on Apple Silicon (arm64) and macOS in general:
- A new
macosCMake preset targetsclangwithvcpkg. - All OpenGL includes now branch on
__APPLE__to use<OpenGL/gl.h>/<OpenGL/glu.h>instead of<GL/gl.h>. GL_SILENCE_DEPRECATIONis set where needed.vrstrikeis excluded from the macOS build (not supported).-Wl,-no_fixup_chainslinker option added for Apple Silicon targets (neosc,debugger,config).
Gameplay features
- update the Indiana jones map
- end mission screen now show air and ground kills
- new weapon GBU_15 is working
- new weapon Rocket POD (LAU3) is working
- new weapon physics, better gun aiming and bomb droping, better missile (they can now miss the targets, beware)
HUD & Cockpit Overhaul (SCCockpit)
The cockpit and HUD system has been significantly reworked:
- HUD data-driven rendering: HUD element positions (altitude band, speed band, heading compass, pitch ladder, all text tags) are now read from the binary HUD data (
TTAG,HINF,ALTI,ASPD,HEAD,LADD), making the HUD faithful to the original game assets. - Pitch ladder (
RenderPitchLadder): proper roll-rotated bars, dashed lines below the horizon, tick marks, and degree labels. - Altitude & speed bands (
RenderAltiBandRoll,RenderSpeedBandRoll): scrolling tape instruments reading from asset-defined step sizes. - Heading compass (
RenderHeadingCompas): scrolling compass tape with waypoint marker. - Text tags (
RenderTextTags/printTTAG): all HUD text fields (closure speed, range, weapon name/count, HUD mode, G-force, Mach, waypoint, radar altitude, gear/flaps/airbrake/throttle) are now drawn using the position data embedded in the game's HUD file. - CP_BIG (large HUD) support: the zoomed cockpit view now uses the large HUD asset and a 30° FOV camera, while the standard view keeps 45°.
- Weapon mode rendering: a proper
weapon_modeenum dispatches toRenderTargetingReticle(LCOS),RenderBombSight(CCIP),RenderMissileHud(SRM/LRM),RenderIrTargetHud(IRST), andRenderStraffingReticle(STRAF). - Lead-angle & target prediction: the gun reticle now iteratively predicts target position at time-of-flight with target velocity compensation, and draws both a lead diamond (predicted position) and a target box (current position).
- RAWS improvements: the radar-warning receiver now uses per-contact icon indices for both the normal and zoomed views, based on the aircraft type name.
current_targetfiltering: the cockpit now only sets a valid target for the current radar mode (AARD for air targets, AGRD for ground targets).- Camera: cockpit camera is now a proper
Camerainstance (cockpit_camera) separate from the renderer's camera, correctly positioned and oriented each frame from the player plane's attitude. project_to_screennow delegates to the plane-to-world matrix for 3D cockpit mode.
Config System Enhancements
Config::setIntandConfig::setBoolwrite-back methods added.Config::savesaves the current config to a file.Config.hppinclude guard fixed (<SimpeIni.h>→<SimpleIni.h>for case-sensitive file systems).config.iniis now installed to the root of the install directory (not justassets/), and copied to the build directory for Debug builds.- New
config.inisections:[Game],[Video],[Input]— the old[Controler]section has been removed.
Performance: FrameBuffer Blit Optimisation
All four blit variants (blit, blitWithMask, blitWithMaskAndOffset, blitLargeBuffer) have been rewritten to:
- Pre-compute clipped row/column ranges outside the inner loop.
- Use
memcpyfor contiguous opaque spans instead of per-pixel copies. - Eliminate redundant per-pixel bounds checks inside hot loops.
RLEShape: Pre-decoded Sprite Cache
RLEShapenow decodes sprite data once at load time into anexpand_buffer.- Subsequent
Expand/ExpandWithBoxcalls blit directly from the pre-decoded buffer usingmemcpyfor opaque spans. - Proper copy constructor and assignment operator added.
rightDistandbotDistare now incremented by 1 at load time to match expected sprite extents.- Validity checks guard against out-of-range shape dimensions.
RSImageSet Refactor
InitFromPakEntryrewritten: correctly parses the palette offset (first DWORD) and image offset table (subsequent DWORDs until the first image).InitFromTreEntryandInitFromRamremoved (replaced by the unifiedInitFromPakEntrylogic).GetShapeboundary check fixed (>→>=).removeFirstEmptyShapethreshold changed from== 0to<= 1to handle 1-pixel placeholder shapes.
SCRenderer: LOD & Config Integration
- LOD level is now read from
config.ini([Game] object_detail) instead of being hardcoded toLOD_LEVEL_MAX. - All
drawModelcall sites passthis->lodLevelcorrectly. - Palette loading is now guarded (
if (entries)). cameramadepublicfor external access.fovandlodLevelexposed as public fields.
Math / Vector Additions
Vector3D::rotateByAxis(const Vector3D& w)— Rodrigues' rotation formula for angular velocity integration.Vector3D::rotateByAxisInPlaceconvenience wrapper.Vector3D::Length()now has aconstoverload.Vector3D::Norm()removed; all callers updated to useLength().Vector2D::operator-subtraction operator added.Point2D::rotateAroundPointnow casts coordinates tofloatbefore trigonometry (fixes implicit-conversion warnings).
Timer: FPS Auto-Calibration
DesktopTimer now runs a 90-frame warm-up phase to measure the actual display refresh rate, then snaps to a standard FPS value (60, 30, 20, or 15) before engaging the spike-detection / smoothing logic. This prevents the first few seconds of play from having incorrect delta times.
Bug Fixes
- RSArea:
GetAreaBlockByIDnow also validateslodbounds (not justblockID). - RSCockpit:
parseMONI_INST_RAWS_INFOnow readszoom_x/zoom_ycorrectly; ARTP/EJEC/GUNF always initialise from PAK archive. - RSHud: All
TTAGsub-records (CLSR,TARG,NUMW,HUDM,IRNG,GFRC,MAXG,MACH,WAYP,RALT,LNDG,FLAP,SPDB,THRO,CALA) now read theirzfield beforex/y.CIRCis now a typedMISD_CIRCstruct instead of a raw byte vector. ASPD/ALTI/HEAD/LADD INFO blocks now parse their structured fields before the raw byte dump. - DebugGameFlow: null-pointer guard added before accessing shape dimensions in mission info rendering.
- DebugStrike:
Vector3D::Norm()replaced withLength(); AI pilot format string fixed (%dfor integer speed). - DebugPacificStrikeMISN:
setMissionnow correctly markedoverride. - DebugScreen:
logical_width/logical_heightinitialised; local variable renamed to avoid shadowingwidth;Setup Mappingmenu item added. - GameEngine::pumpEvents: mouse-to-legacy-space conversion uses
logical_width/logical_heightinstead of physical pixel dimensions. - sc/main.cpp and debugger/main.cpp:
GameEngine::init()and activity setup moved outside the loader thread to avoid race conditions. - vrstrike/main.cpp:
config.iniis now loaded before initialising the VR screen. - ByteStream:
constcopy constructor and assignment operator added. - FrameBuffer::printText_SM: space character now advances cursor without attempting to look up a shape; newline line-height reduced by 1 pixel; inter-letter spacing reduced by 1 pixel; fixed-width advance corrected.
- **RSVGA...
fixes_031_build
libRealSpace 0.3.1 — Release notes (from lcos_030_build → fixes_031_build)
Compare: lcos_030_build...fixes_031_build
Date: 2026-02-28
Highlights
- Bumped version to 0.3.1.
- New INI-based configuration support (SimpleIni) + shipped default
assets/config.ini. - Input system improvements: joystick (raw SDL joystick) axis/button bindings + persistent default bindings file.
- Cockpit/HUD & MFD improvements: new radar single-target view, damage MFD page, better targeting indicators, gunsight HUD offset adjustable in debugger.
- Parser robustness & format coverage: IFF lexer bounds fix; additional REAL/MISN chunk handlers.
Added
- Config system (SimpleIni)
- Added
src/engine/Config.cppandsrc/engine/Config.hpp(singleton wrapper around SimpleIni). vcpkg.jsonnow depends on simpleini.- Engine CMake now locates and exposes SimpleIni include dir.
- Added
- Default config file
- Added
resources/config.ini, copied into assets at build/install time.
- Added
- Joystick support (raw SDL joystick)
- New input types:
JOYSTICK_BUTTON,JOYSTICK_AXIS. - Keyboard bindings expanded with
bindJoystickButtonToAction/bindJoystickAxisToAction. - Debugger controller UI now enumerates joystick axes/buttons dynamically when not using SDL game controller mapping.
- New input types:
- Persistent default bindings
GameEngine::initKeyboard()loadsdefault_bindings.cfgif present, otherwise generates bindings and saves them.
Changed / Improved
- Window sizing now configurable
GameEngine::init()readsWindow.width/Window.heightfrom config (with defaults).src/executables/sc/main.cpploads./assets/config.iniand appliesWindow.width/height/fullscreen.- Debugger main also loads config (note: it reads
Display.Width/Heightkeys—see “Notes / Potential follow-ups”).
- SDL initialization
RSScreenandDebugScreennow initialize SDL withSDL_INIT_JOYSTICKin addition to game controller support.- Fullscreen window flags now include
SDL_WINDOW_ALLOW_HIGHDPI.
- Rendering
SCRenderer::renderWorldToTexture()now renders additional neighboring blocks aroundblock_id(9 renders total).
- Cockpit / HUD / MFD
- Target projection code refactored into
SCCockpit::project_to_screen. - HUD target indicator now uses shape assets (
TARG->SHAPSET) and displays “in range” marker (MISD->SHAP) when applicable. - Added tracking of
targetImpactPointWorldand optional debug drawing hooks. - Radar mode
ASSTnow uses a dedicated single-target radar rendering implementation that shows only the current target and prints altitude/heading/speed next to it. - Added Damage MFD page (
RenderMFDSDamage) and integrated it into both 2D and virtual cockpit rendering paths. - Camera MFD width calculation fixed (was incorrectly using height).
- Gunsight HUD angular offset is now adjustable via a new debugger menu panel (“GunSight HUD angular offset”) and used in virtual cockpit.
- Target projection code refactored into
- Mission / audio behavior
SCMissiontracks anin_combatflag set when an AI actor targets the player.SCStrike::runFrame()switches music to track 5 during combat, otherwise uses mission tune.
- Target selection
SCStrike::findTarget()now:- filters enemies within 30,000 units,
- sorts candidates by distance,
- cycles to the next target (instead of always snapping to nearest).
- Camera look-at
setCameraLookat()now:- if target is very far (> 20000), uses plane forward direction instead of target framing,
- passes an explicit up vector into
camera->lookAt(...).
- Palette LUT
BuildPaletteLUT()now searches only the green ramp[128..159](instead of all 0..255) and uses 128 as the starting best index.
Fixed
- IFFSaxLexer bounds/size handling
- If the computed
chunk_size + 8exceeds available buffer at the start of parsing, the code now allocates a larger buffer, copies data, and reinitializes the stream to avoid overrun.
- If the computed
- ByteStream destructor
- Clears
cursorpointer in destructor.
- Clears
- HUD shape parsing
RSHud::parseREAL_CHUD_LARG_TARG_SHAP()now builds anRSImageSetviaPakArchive(and assignsSHAPSET) instead of manually LZW-decoding into anRLEShape.
- Removed noisy debug prints
- RSMapTextureSet texture dump spam removed; palette transparency print removed; some mission parsing prints removed.
Format / content parsing coverage
RSEntitynow registers/accepts additional REAL chunk handlers (stubs added):REAL:INFOOBJT/TRCR:INFOMISS/DYNM:{ATMO,GRAV,AGRV}APPR/POLY/TRIS:LNTHOBJT/ORNT:SIGNhandler wiring added
RSMissionnow registersMISN:CACH(parser stub) andLOADparsing was cleared out (now empty).
Packaging / build system
- Top-level
CMakeLists.txt- project version 0.3.0 → 0.3.1
- assets now also copy
MID_36.IFFandconfig.ini.
vcpkg.json- added dependency: simpleini
lcos_030_build
Release notes — lcos_030_build (from vr_build_020)
Highlights
- Version bump: project version updated to 0.3.0 (
CMakeLists.txt). - New timing system (desktop + VR): introduced a unified
GameTimerabstraction with:Timerbase interface (src/engine/timer.h)DesktopTimerwith spike smoothing (src/engine/desktoptimer.h)VRTimerwith OpenXR predicted timing + frame limiting (src/executables/vrstrike/vrtimer.h)- Engine loops now call
GameTimer::update()(e.g.GameEngine, debugger) - Desktop executables initialize
DesktopTimer; VR initializesVRTimer.
VR / OpenXR
- ImGui timing/debug overlay in VR:
- ImGui context initialization in
VRScreen - Offscreen rendering of ImGui into an OpenXR swapchain
- Presented as a quad layer alongside the stereo projection.
- ImGui context initialization in
- Added missing GL extension proc for
glCheckFramebufferStatusEXTand FBO completeness checks. - More robust OpenXR frame end composition: projection layer + optional ImGui quad layer.
Rendering / UI
- Render-to-texture resolution changed from 800×600 to 128×128 (
SCRenderer::initRenderToTexture, viewport + copy). - Camera zoom support:
Cameranow haszoom,SetZoom()/GetZoom()- perspective calculation uses zoom-adjusted FOV.
HUD / Cockpit improvements (Strike Commander)
- HUD LCOS shapes switched to image sets (
RSImageSet) rather than singleRLEShapeforLCOS_SHAP, enabling richer shape usage. - Gun pipper / CCIP-like reticle improvements:
- Refined cannon impact prediction and HUD projection
- Uses LCOS shapes and draws distance-to-target indicators via shape selection.
- Added MFD camera view rendering:
- Reads the OpenGL texture, rescales, converts RGBA → VGA palette via LUT, blits into the cockpit MFD.
- Includes palette LUT builder for faster conversion.
- Virtual cockpit changes:
- Cleanup routine for cockpit textures to avoid buildup across frames.
- Slight HUD placement tweak and cannon angular offset adjustment.
Input / Gameplay toggles
New bindings added in GameEngine:
- F10 / F11:
SPEC_KEY_1,SPEC_KEY_2 - G: weapon mode toggle (
WEAPON_MODE_TOGGLE) - I: infinite ammo toggle (
INFINIT_AMMO_TOGGLE) - K: single target / assist mode (
SINGLE_TARGET_MODE)
In SCStrike:
- Toggle air weapons mode, infinite ammo, single target radar mode, and camera-on-MFD.
Simulation / Physics
- Flight simulation moved to delta-time (
dt) driven updates (not SDL tick-derived TPS) inSCJdynPlane. - Gravity/thrust/speed-of-sound computations updated to scale with
dt. - Added angular velocity tracking for better weapon prediction / trajectory correction.
AI / Mission logic
- Team filtering and friendly-fire avoidance:
SCSimulatedObject::CheckCollisionignores same-team hits.SCMissionActors::defendTarget/defendArealogic now iterates all actors and filters by team.
- Ground-attack behavior expanded (weapon selection, range heuristics for bombs, approach logic).
SCMission::update()early-exits whenmission_endedis set.- Runway entity support:
- New entity type
rnwy - Parsing
RNWYchunk in RealSpace entity parsing - Runway bounding boxes/orientation derived from overlay data during mission load/update/activation.
- New entity type
Core math / utilities
InvSqrt()now uses1/sqrtf(x)(replaces the Quake-style fast inverse sqrt code).Point2Dconverted from struct → class with built-inrotate()/rotateAroundPoint().Vector2DgainedrotateAroundPoint().- Matrix utilities:
- Added
Matrix::invertRigidBodyMatrixLocal() - Added
Vector3D::transformPoint(const Matrix&) - Removed older inline rotation helper from header.
- Added
Parsing / data
RSAreanow stores previously “unknown bytes” for objects intoMapObject::unknowns(vector), and debugger displays them.PSGameFlowParseropcode name updated:EFECT_OPT_U15→EFECT_IF_LAST_MISS_SUCCESS, with corresponding handling inSCGameFlow.
Assets
- Added
resources/MID_36.IFF.
Tests
- Added new unit tests:
tests/MathTests.cpptests/MatrixTests.cpp
- Updated
ByteStreamTestsexpectations for fixed-float reads and test data. - Fixed
ByteStream::ReadByte()bounds check (>→>=) andReadFixedFloatBE()integer type.
vr_build_020
What's Changed
This pull request introduces significant improvements to the build system, asset management, and script parsing for the project. The most important changes are grouped below by theme.
Build System & Testing Enhancements:
Added Google Test support and enabled unit testing in the CMakeLists.txt, making it easier to write and run C++ tests.
Included the tests directory in the build, integrating unit tests into the project structure.
Updated the project version and added a new executable target (vrstrike) to the build (CMakeLists.txt). [1] [2]
Features:
Added pacific strike mission, objects, and gameplay functions.
Added Wings of glory objects loading
Added Strike Commander MidGames parser and playing to GamePlay
VR support
add new VRScreen to use OpenXR for VR rendering on compatible helmet.
Camera and Rendering Enhancements (VR/Custom Matrices):
Added support for custom projection and view matrices in the Camera class, enabling direct matrix injection (useful for VR and advanced rendering scenarios). This includes new methods for setting, clearing, and querying custom matrices, and logic to use them when enabled (src/engine/Camera.h, src/engine/Camera.cpp). [1] [2] [3] [4]
Extended RSScreen with virtual methods and structures for optional VR stereo rendering, and refactored window/context management to use member variables instead of statics (src/engine/RSScreen.h, src/engine/RSScreen.cpp). [1] [2] [3] [4] [5]
Added a new drawModel overload in SCRenderer that accepts a scale parameter, improving flexibility for model rendering (src/engine/SCRenderer.cpp, src/engine/SCRenderer.h). [1] [2]
Refactored renderer viewport binding logic to support custom viewport sizes, with a helper for the default window-sized viewport (src/engine/SCRenderer.cpp). [1] [2]
Input Handling Improvements:
Added a new RADAR_MODE_TOGGLE action to the input system, with corresponding bindings for keyboard and mouse, improving control mapping flexibility (src/engine/GameEngine.h, src/engine/GameEngine.cpp). [1] [2] [3]
Math/Utility Improvements:
Made several Vector3D operators const-correct, allowing usage with const objects and improving code safety (src/commons/Matrix.h).
Loader and UI Improvements:
Improved loading screen visuals by using RGBA color fills and corrected font asset pathing. Also made minor thread and initialization fixes in the loader (src/engine/Loader.cpp). [1] [2] [3] [4] [5] [6] [7]
Included RSScreen.h in the loader header for improved encapsulation (src/engine/Loader.h).
Other Minor Fixes:
Minor code organization and bugfixes, including static-to-member refactoring in RSScreen, and a fix for the SCMouse class member ordering (src/engine/SCMouse.h). [1] [2]
playable_build_with_debug_tools
Release Notes – v0.1.0
Highlights
- More realistic missile smoke generation via
SCSmokeSet::generateMissileSmokeTextures. - Kill board now renders with a dedicated palette and dynamic updates in
KillBoardScene::Render. - Enhanced key binding load/save support through
InputActionSystem::saveBindingsandInputActionSystem::loadBindings.
UI & UX
- Refined file loading navigation in
SCFileRequester. - Armament menu improvements in
WeaponLoadoutScene::updateWeaponDisplayfor clearer loadout summaries.
Simulation & Gameplay
- Adjusted flight physics in
SCJdynPlane::computeLiftfor more consistent lift behavior. - Mission statistics now update during post-flight evaluation in
SCStrike::runFrame.
Tooling & Debugging
- Expanded entity inspection within the debugger via
DebugStrike::renderMenu, including mass, thrust, and armament details. - Custom polygon and debug-line rendering support added in
SCPlane::renderPlaneLinedfor visual analysis.
Quality & Infrastructure
- Improved PAK archive management through
PakArchive::Parseand related helpers. - Stabilized palette handling and image rendering in
RSImage::SyncTextureandRSImage::UpdateContent.
Documentation
- Expanded technical guides and specs (IFF format, mission structures, conversation flow) in doc/.
cd_voice_features
What's Changed
- Cddata by @remileonard in #5
- Intro MidGames
- Better mission script support
- wide screen
- Legder / Catalog
- Load save files from Strike commander
- Bomb sight
- Cannon
- many bug fixes
Full Changelog: first_gameplay...cd_voice_features
Alpha build 0.0000002
Neo Strike Commander Alpha build 0.0000002
First build with in mission gameplay, first mission is okish.
What's Changed
- Implementation of the mission scripting system
- Implementation of the scene system in missions
- AI implementation
- New simplified flight model for AI
- Music improvement
- Font usage improvement
- Gameflow script implementation improvement
- Creation of the weapon selection screen
- Creation of the catalog presentation screen
- Creation of the accounts presentation screen
- Refactoring tasks
Full Changelog: very_alpha_build_01...first_gameplay
how to use
- unarchive neosc.zip
- copy the datafile from strike commander floppy disk version to the assets directory
- double click on neosc.exe
- enjoy :)