• Modularity-7.0-PreRelease 2720c34557

    Anemunt released this 2026-07-27 13:25:41 -04:00 | 5 commits to main since this release

    image
    Modularity 7.0 brings major stability fixes, real Android APK builds, an Android-ready editor UI, a much more touch-friendly experience on smaller screens, and a large batch of new engine features: the Map Maker toolset, a modular audio FX system, a fast-compile C backend for ModuCPP, and a renderer pass that roughly doubles 1080p framerates.


    image

    Android

    • Added full Android .apk builds through ./build.sh --Android, covering both a bare player, a packaged game (--project=Game.modu), and the editor itself (--editor). The CLI reuses the same export pipeline as the Build Settings panel, so both produce identical APKs.
    • Added ahead-of-time cross-compilation of ModuCPP scripts with the NDK clang for the target ABI, packaged into lib/<abi>/ and loaded by soname at runtime, working around Android's refusal to dlopen libraries from app data.
    • Added an on-device compiler bundle for the editor APK, staging a verified Termux-derived aarch64 clang/lld payload plus the NDK sysroot and engine headers, so scripts can be recompiled directly on the phone.
    • Added a platform-agnostic touch facade to ModuInput (touch.IsActive(), touch.Primary(), touch.Tapped(), touch.Drag(), touch.Count()). On desktop, the left mouse button reports as a single touch, so the same script runs everywhere.
    • Added Android system file picker support to the File Browser's Import Assets action, including multi-file selection.
    • Added an Android storage permission flow in Project Settings, with a Documents folder option for projects in shared storage.
    • Added a Quick Tools pop-out menu on Android, making it easier to access common toolbar actions without relying on the top-left toolbar tabs.
    • Added a Runtime Dev Overlay that ships inside the player, so objects can be selected, nudged, and toggled live on device without the full editor.
    • Added mobile-friendly global texture formats (RGB565 for opaque, RGBA4 for blended) in Project Settings.

    Map Maker

    • Added the Map Maker toolset: MapRoot, MapSector, MapTransition, MapPortal and MapMesh components, all ordinary scene objects, so undo and both scene formats work with them.
    • Added the Sector Map window, a graph view for creating sectors and transitions, jumping between them, and running map validation.
    • Added Carve Mode to the mesh editing tools, with cut-through, pocket, frame and polygon carves, plus rectangle, circle, hexagon and octagon shapes.
    • Added room shell presets (small, medium, large, corridor, empty sector) and a Connect Sector workflow that carves the opening and links the sectors in one action.
    • Added mesh edit selection helpers: Select All, Deselect All, Select Connected, Grow/Shrink Selection, Duplicate Faces and Center On Face.

    Audio

    • Added the Audio FX component: chainable audio effects with Low Pass, High Pass, Bass Boost, Distortion, Reverb, Echo, Pitch, Wow/Flutter and Noise Hiss, plus stereo width control.
    • Added 8 built-in effect presets, and an Apply to All Sources (Global) switch that routes a chain to the master bus for every source.

    Scripting

    • Added a C backend to the ModuCPP transpiler. Qualifying scripts lower to plain C against a ~100-line include surface instead of the ~95k-line C++ script API, so they compile in milliseconds instead of seconds. It is fully automatic with a silent fallback to the C++ backend, and MODUCPP_DISABLE_C_BACKEND=1 turns it off.
    • Added ModuMAKO language integration, with a new script type in the File Browser, inspector support, diagnostics, and LSP completion.
    • Added child process bindings to ScriptContext (StartProcess, WriteProcessStdin, PollProcess, CancelProcess, plus blocking RunProcess and ReadProcessLine), which is what makes script-driven terminals and MCP clients possible.
    • Added angle bracket escapes ([/L] and [/R]) for keyboards that make < and > awkward to type.
    • Added the shipped CameraFX example script (shake, wind sway, idle bob with a master intensity) and Spinny, the living demo of a script that qualifies for the C fast path.

    Rendering and lighting

    • Added a baked sky cache (Environment > Skydome), collapsing the procedural sky and its reflection capture into a single cubemap fetch per pixel.
    • Added shipped 2D lighting settings to Build Settings, so exported players finally honor them: Lighting Resolution with Auto/Fixed modes, a Pixel (Nearest) Lighting Filter for crisp pixel-art light, and an SDR 8-bit Lighting Depth option that halves lighting bandwidth.
    • Added per-light Cull Off-Screen and Screen Margin controls to the 2D light inspector.
    • Added .mmesh to .rmesh conversion so the RMesh editing tools work on 2.5D mesh assets.
    • Added UI parent rotation inheritance, so children of a rotated UI element now orbit and spin with their parent across all viewport paths.

    Editor

    • Added Glass Blur window backgrounds, plus Pill Sliders and Pill Switches as toggleable UI styles.
    • Added Save Scene As, Duplicate (Ctrl+D), Rename and Frame in Viewport to the hierarchy, along with live script compile status per object.
    • Added copy, cut, paste, rename, and delete to the File Browser.
    • Added Copy Component Values to the Inspector.
    • Added MODULARITY_FPS_LOG=1 for headless benchmarking and MODU_TIME_PANEL panel timings that feed straight into the Game Profiler.
    • Added tools/verify-cpu-isa.sh, which scans every shipped binary and fails the build if anything requires a higher x86 ISA level than the release targets.
    • Added a carve geometry self-test harness under tools/carve-selftest/.

    image

    • Fixed Android builds not matching the device's native resolution.
    • Fixed an issue where Modularity could occasionally crash when opening a parent object.
    • Fixed Jolt Physics rejecting most CPUs in use today, and fixed the missing Jolt submodule entry that caused the related build error.
    • Fixed public Linux releases crashing on older CPUs. The build now pins every target and vendored dependency to baseline x86-64 and strips the .note.gnu.property ISA notes that the toolchain's startup objects stamp onto binaries regardless of -march.
    • Fixed dangling font pointers surviving an ImGui context destroy and recreate, where a reused address would resurrect stale entries.
    • Fixed exported and standalone players ignoring the 2D lighting resolution entirely, which left them locked to a hardcoded scale.
    • Fixed the 2D lighting resolution setting being silently multiplied down by resolution and light count even when set explicitly.
    • Fixed 2D settings being hidden in hybrid 3D and 2.5D projects. They now key off the installed 2D World package instead of the project pipeline.
    • Fixed the sky reflection capture re-rendering all six cubemap faces every single frame during a day/night cycle.
    • Fixed the compile popup never auto-dismissing, since its hide timer was written but never read.
    • Fixed stale sector visibility flags surviving an undo.
    • Fixed stale face indices being used after undo, redo, or a mesh edit.
    • Fixed a stale focus flag from a closed viewport rerouting input.
    • Fixed relocated or stale script output paths failing the up-to-date check forever, which caused endless background recompiles and repeating toasts for both native and C# scripts.
    • Fixed text on 3D canvas targets never rotating, which had been a leftover stub.
    • Fixed scene object reallocation dangling pointers held across a draw pass.
    • Fixed a persisted project path being reused even when it is no longer writable on the current device.

    image

    • Improved the editor UI to be more touch-friendly.
    • Improved Android UI scaling with proper DPI scaling support.
    • Improved touch navigation with finger drag-to-scroll for long panels like the Inspector, hierarchy, and File Browser, a swallowed click so scrolling does not also poke widgets, and long-press as right-click so touch can reach context menus.
    • Improved 3D renderer performance substantially. The skybox is now deferred until after opaque geometry so early-Z rejects occluded sky pixels, per-pixel matrix inversions moved to uniforms, and the baked sky cache landed on top. Measured on the same scene at 1080p: roughly 340 FPS before, ~470 after the first pass, ~700 with the sky cache.
    • Improved physics smoothness with fixed-step simulation and render-time interpolation, removing the freeze-then-jump jitter on high refresh rate displays.
    • Improved ModuCPP compile times for simple scripts by orders of magnitude via the C backend.
    • Improved 2D light culling cost, since the pixel filter option also drops each light buffer sample from a 4-tap bilinear fetch to a single nearest fetch.
    • Improved Project Settings with a reorganized tabbed layout (Lighting Manager, Rendering Path, Shadows, Player/Viewport, Debug/Developer, File Access) and clearer per-section descriptions.
    • Improved the build scripts with 7z packaging, sanitizer, generator, job count, and CPU target options, plus automatic ISA verification after packaging.
    • Improved the documentation set: Modularity.md was rewritten as a beginner-friendly tour, Build.md and AndroidRuntime.md were rewritten against the shipping pipeline, the ModuCPP Language Reference was expanded, and the repository finally has a proper README.
    • Improved the license to allow clearer engine modification and community use.

    Other notes:

    • The native script ABI ModuCPP uses has moved from 31 to 38. That means scripts compiled against 6.9 will be rejected at load with an ABI mismatch message. No worries! You can simply recompile every script in your project after updating.
    • Android builds default to arm64-v8a and require the NDK and SDK with ANDROID_NDK_ROOT and ANDROID_SDK_ROOT set. minSdk is 26; player APKs target SDK 34 and the editor APK targets SDK 28 so it can run the bundled compiler.
    • The Android build is not a pure cross-compile. It builds the desktop editor first and then runs it headlessly, so the first --Android build is slow. Editor APK packaging additionally needs javac and SDK build-tools with d8.
    • Interactive script process stdio is POSIX only. Windows builds fall back to a read-only path.
    • Known Map Maker limitations: a carve plus connect-sector counts as two undo steps, the L-shaped corridor preset is not in yet, and hide/reveal selected faces is not implemented.
    • Known 2D lighting limitation: off-screen culling still pops at the margin edge rather than fading across it.

    Overall:

    Modularity 7.0 has grown into a substantial stability-focused update, while also marking a major step toward making the engine usable directly on Android devices, and quietly turning into one of the largest feature releases the engine has had.

    Downloads