Skip to content

Releases

october_061_build

october_061_build Pre-release
Pre-release

Choose a tag to compare

@remileonard remileonard released this 10 Oct 10:39

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

october_060_build Pre-release
Pre-release

Choose a tag to compare

@remileonard remileonard released this 03 Oct 16:56
82d1878

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 SCJetpPlane and SCJdynPlane with advanced physics
  • Aerodynamics: Added parasite drag calculations and improved lift computations
  • Air Density Calculations: Integrated RSAirdens for 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
    • MessageBus class for event management
    • MissionEventActorHit and related event classes
    • Enhanced event handling in mission and actor systems
  • Pilot Control: PlaneControlEvent for improved aircraft command input
  • Objective Management: New setObjective method 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 onEvent pattern 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

august_050_build Pre-release
Pre-release

Choose a tag to compare

@remileonard remileonard released this 09 Aug 17:12

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_dead state 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_id static lifetime issue in debug animation player shot editing.
  • 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

Pre-release

Choose a tag to compare

@remileonard remileonard released this 31 May 17:29

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.ini with a single click.
  • Replaces the old [Controler] section in config.ini with 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 macos CMake preset targets clang with vcpkg.
  • All OpenGL includes now branch on __APPLE__ to use <OpenGL/gl.h> / <OpenGL/glu.h> instead of <GL/gl.h>.
  • GL_SILENCE_DEPRECATION is set where needed.
  • vrstrike is excluded from the macOS build (not supported).
  • -Wl,-no_fixup_chains linker 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_mode enum dispatches to RenderTargetingReticle (LCOS), RenderBombSight (CCIP), RenderMissileHud (SRM/LRM), RenderIrTargetHud (IRST), and RenderStraffingReticle (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_target filtering: 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 Camera instance (cockpit_camera) separate from the renderer's camera, correctly positioned and oriented each frame from the player plane's attitude.
  • project_to_screen now delegates to the plane-to-world matrix for 3D cockpit mode.

Config System Enhancements

  • Config::setInt and Config::setBool write-back methods added.
  • Config::save saves the current config to a file.
  • Config.hpp include guard fixed (<SimpeIni.h> → <SimpleIni.h> for case-sensitive file systems).
  • config.ini is now installed to the root of the install directory (not just assets/), and copied to the build directory for Debug builds.
  • New config.ini sections: [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 memcpy for contiguous opaque spans instead of per-pixel copies.
  • Eliminate redundant per-pixel bounds checks inside hot loops.

RLEShape: Pre-decoded Sprite Cache

  • RLEShape now decodes sprite data once at load time into an expand_buffer.
  • Subsequent Expand / ExpandWithBox calls blit directly from the pre-decoded buffer using memcpy for opaque spans.
  • Proper copy constructor and assignment operator added.
  • rightDist and botDist are now incremented by 1 at load time to match expected sprite extents.
  • Validity checks guard against out-of-range shape dimensions.

RSImageSet Refactor

  • InitFromPakEntry rewritten: correctly parses the palette offset (first DWORD) and image offset table (subsequent DWORDs until the first image).
  • InitFromTreEntry and InitFromRam removed (replaced by the unified InitFromPakEntry logic).
  • GetShape boundary check fixed (> → >=).
  • removeFirstEmptyShape threshold changed from == 0 to <= 1 to handle 1-pixel placeholder shapes.

SCRenderer: LOD & Config Integration

  • LOD level is now read from config.ini ([Game] object_detail) instead of being hardcoded to LOD_LEVEL_MAX.
  • All drawModel call sites pass this->lodLevel correctly.
  • Palette loading is now guarded (if (entries)).
  • camera made public for external access.
  • fov and lodLevel exposed as public fields.

Math / Vector Additions

  • Vector3D::rotateByAxis(const Vector3D& w) — Rodrigues' rotation formula for angular velocity integration.
  • Vector3D::rotateByAxisInPlace convenience wrapper.
  • Vector3D::Length() now has a const overload.
  • Vector3D::Norm() removed; all callers updated to use Length().
  • Vector2D::operator- subtraction operator added.
  • Point2D::rotateAroundPoint now casts coordinates to float before 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: GetAreaBlockByID now also validates lod bounds (not just blockID).
  • RSCockpit: parseMONI_INST_RAWS_INFO now reads zoom_x/zoom_y correctly; ARTP/EJEC/GUNF always initialise from PAK archive.
  • RSHud: All TTAG sub-records (CLSR, TARG, NUMW, HUDM, IRNG, GFRC, MAXG, MACH, WAYP, RALT, LNDG, FLAP, SPDB, THRO, CALA) now read their z field before x/y. CIRC is now a typed MISD_CIRC struct 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 with Length(); AI pilot format string fixed (%d for integer speed).
  • DebugPacificStrikeMISN: setMission now correctly marked override.
  • DebugScreen: logical_width/logical_height initialised; local variable renamed to avoid shadowing width; Setup Mapping menu item added.
  • GameEngine::pumpEvents: mouse-to-legacy-space conversion uses logical_width/logical_height instead 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.ini is now loaded before initialising the VR screen.
  • ByteStream: const copy 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...
Read more

fixes_031_build

fixes_031_build Pre-release
Pre-release

Choose a tag to compare

@remileonard remileonard released this 28 Feb 15:59

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.cpp and src/engine/Config.hpp (singleton wrapper around SimpleIni).
    • vcpkg.json now depends on simpleini.
    • Engine CMake now locates and exposes SimpleIni include dir.
  • Default config file
    • Added resources/config.ini, copied into assets at build/install time.
  • 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.
  • Persistent default bindings
    • GameEngine::initKeyboard() loads default_bindings.cfg if present, otherwise generates bindings and saves them.

Changed / Improved

  • Window sizing now configurable
    • GameEngine::init() reads Window.width / Window.height from config (with defaults).
    • src/executables/sc/main.cpp loads ./assets/config.ini and applies Window.width/height/fullscreen.
    • Debugger main also loads config (note: it reads Display.Width/Height keys—see “Notes / Potential follow-ups”).
  • SDL initialization
    • RSScreen and DebugScreen now initialize SDL with SDL_INIT_JOYSTICK in addition to game controller support.
    • Fullscreen window flags now include SDL_WINDOW_ALLOW_HIGHDPI.
  • Rendering
    • SCRenderer::renderWorldToTexture() now renders additional neighboring blocks around block_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 targetImpactPointWorld and optional debug drawing hooks.
    • Radar mode ASST now 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.
  • Mission / audio behavior
    • SCMission tracks an in_combat flag 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 + 8 exceeds available buffer at the start of parsing, the code now allocates a larger buffer, copies data, and reinitializes the stream to avoid overrun.
  • ByteStream destructor
    • Clears cursor pointer in destructor.
  • HUD shape parsing
    • RSHud::parseREAL_CHUD_LARG_TARG_SHAP() now builds an RSImageSet via PakArchive (and assigns SHAPSET) instead of manually LZW-decoding into an RLEShape.
  • Removed noisy debug prints
    • RSMapTextureSet texture dump spam removed; palette transparency print removed; some mission parsing prints removed.

Format / content parsing coverage

  • RSEntity now registers/accepts additional REAL chunk handlers (stubs added):
    • REAL:INFO
    • OBJT/TRCR:INFO
    • MISS/DYNM:{ATMO,GRAV,AGRV}
    • APPR/POLY/TRIS:LNTH
    • OBJT/ORNT:SIGN handler wiring added
  • RSMission now registers MISN:CACH (parser stub) and LOAD parsing 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.IFF and config.ini.
  • vcpkg.json
    • added dependency: simpleini

lcos_030_build

lcos_030_build Pre-release
Pre-release

Choose a tag to compare

@remileonard remileonard released this 21 Feb 16:11

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 GameTimer abstraction with:
    • Timer base interface (src/engine/timer.h)
    • DesktopTimer with spike smoothing (src/engine/desktoptimer.h)
    • VRTimer with 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 initializes VRTimer.

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.
  • Added missing GL extension proc for glCheckFramebufferStatusEXT and 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:
    • Camera now has zoom, SetZoom()/GetZoom()
    • perspective calculation uses zoom-adjusted FOV.

HUD / Cockpit improvements (Strike Commander)

  • HUD LCOS shapes switched to image sets (RSImageSet) rather than single RLEShape for LCOS_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) in SCJdynPlane.
  • 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::CheckCollision ignores same-team hits.
    • SCMissionActors::defendTarget/defendArea logic now iterates all actors and filters by team.
  • Ground-attack behavior expanded (weapon selection, range heuristics for bombs, approach logic).
  • SCMission::update() early-exits when mission_ended is set.
  • Runway entity support:
    • New entity type rnwy
    • Parsing RNWY chunk in RealSpace entity parsing
    • Runway bounding boxes/orientation derived from overlay data during mission load/update/activation.

Core math / utilities

  • InvSqrt() now uses 1/sqrtf(x) (replaces the Quake-style fast inverse sqrt code).
  • Point2D converted from struct → class with built-in rotate() / rotateAroundPoint().
  • Vector2D gained rotateAroundPoint().
  • Matrix utilities:
    • Added Matrix::invertRigidBodyMatrixLocal()
    • Added Vector3D::transformPoint(const Matrix&)
    • Removed older inline rotation helper from header.

Parsing / data

  • RSArea now stores previously “unknown bytes” for objects into MapObject::unknowns (vector), and debugger displays them.
  • PSGameFlowParser opcode name updated: EFECT_OPT_U15 → EFECT_IF_LAST_MISS_SUCCESS, with corresponding handling in SCGameFlow.

Assets

  • Added resources/MID_36.IFF.

Tests

  • Added new unit tests:
    • tests/MathTests.cpp
    • tests/MatrixTests.cpp
  • Updated ByteStreamTests expectations for fixed-float reads and test data.
  • Fixed ByteStream::ReadByte() bounds check (> → >=) and ReadFixedFloatBE() integer type.

vr_build_020

vr_build_020 Pre-release
Pre-release

Choose a tag to compare

@remileonard remileonard released this 03 Jan 18:15

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

Pre-release

Choose a tag to compare

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::saveBindings and InputActionSystem::loadBindings.

UI & UX

  • Refined file loading navigation in SCFileRequester.
  • Armament menu improvements in WeaponLoadoutScene::updateWeaponDisplay for clearer loadout summaries.

Simulation & Gameplay

  • Adjusted flight physics in SCJdynPlane::computeLift for 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::renderPlaneLined for visual analysis.

Quality & Infrastructure

  • Improved PAK archive management through PakArchive::Parse and related helpers.
  • Stabilized palette handling and image rendering in RSImage::SyncTexture and RSImage::UpdateContent.

Documentation

  • Expanded technical guides and specs (IFF format, mission structures, conversation flow) in doc/.

cd_voice_features

cd_voice_features Pre-release
Pre-release

Choose a tag to compare

@remileonard remileonard released this 09 Apr 17:48

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

Alpha build 0.0000002 Pre-release
Pre-release

Choose a tag to compare

@remileonard remileonard released this 06 Mar 08:43

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 :)