Redux — EA-derived Generals Zero Hour WebAssembly engine Prepared 2026-11-01 EA source: https://github.com/electronicarts/CnC_Generals_Zero_Hour Community engine and WebAssembly port: https://github.com/origami-ltd/wasm-generals Source snapshot commit: 46382a383da270e16a60a28ecf342b569b998111 Original upstream prebuilt runtime (through Redux 0.4.4.1): https://generals.wasm.ltd/GeneralsXZH.js Original upstream prebuilt module (through Redux 0.4.4.1): https://generals.wasm.ltd/GeneralsXZH.wasm Current Redux 0.4.35 desktop WASM SHA-256: ae52766d1eec399c19ac8bc934456a3d4ca72273de507ad113c0949d4ab642a7 The current WebAssembly module is a local Redux rebuild of the stated upstream snapshot, with the optional SkirmishAIBaseSide fallback, a browser feature-version export and AI test diagnostics. See redux-ai-compatibility.patch and REDUX-AI-COMPATIBILITY.md inside the source archive. The complete engine source, resources, dependency/build configuration and build scripts are included. The separately licensed upstream web frontend, screenshots and bundled original game data are excluded. Built with Emscripten 6.0.13, CMake 3.31.10 and Ninja 1.13.2; webgpu preset, z_generals target, debug logging/crashing disabled. Original game data and fonts are supplied at runtime, without an Emscripten data preload package. Redux runtime modification: removed the initial loadPackage/data preloading block, including its packaged file metadata, before the generated runtime's programArgs declaration. A modification notice was added. The runtime is instantiated asynchronously from a separately compiled WebAssembly.Module, with noInitialRun until the user supplies their game files. No upstream .data package is distributed. Redux launcher, local-file worker bridge and controls are newly written. No upstream frontend code or Proof-of-Usage frontend license is used. Original Generals/Zero Hour game archives, models, textures, maps, scripts, sounds and UI resources are not included in this engine source archive. Runtime game data is stored separately. Music assets have separate provenance at /music/RECORDINGS.txt and are not covered by this engine software license. Liberation Sans Regular 2.1.5 is an OFL replacement font, not an original game font. Software license: vendor/LICENSE.md (GPL version 3 with EA additional terms). Source: source.tar.gz, root directory redux-engine-source/. Engine source directories retained: Core, GeneralsMD, Generals, Dependencies, cmake, scripts, triplets, root CMake/vcpkg files, license, stlport patch and submodule declarations. The original English main menu and an AI Skirmish with worker training and completed buildings have been verified using personally supplied game data, including a live-production file-source test. A complete campaign, every map and every sound have not been verified. The availability of a source snapshot does not grant rights to the original game's data, trademarks or soundtrack. EA has not endorsed and does not support this product. William Rydh Redux launcher update 2026-11-01: OPFS staging before launch, optional runtime-generated skirmish configuration, community map library, original soundtrack controls, startup branding substitution in WASM linear memory, experimental original-protocol two-player transport, and an original generated splash background. At that release, the prebuilt WASM file remained unchanged. Retail data and third-party map/mod files are held in separate game storage, not this source/deployment archive. Redux 0.4.2: five original instrumentals generated through Mureka V9.5 replace the cover recordings. Public game reads and secret-protected library administration use separate access boundaries. Redux 0.4.3: the original Mureka instrumental soundtrack now contains ten tracks. The independent prototype and local file launcher also use this playlist. Redux 0.4.4: the browser edition receives a runtime-generated native main-menu skin, added project credits and original UI textures. Existing engine window IDs and navigation callbacks are retained. A generated-runtime adapter calls the launcher on native main-loop cancellation, so native Exit can return to Redux. See runtime-exit-change.txt and REDUX-RUNTIME-EXIT.txt in the source archive. At that release, the prebuilt WASM was unchanged. The theme changes the main menu; Reveal keeps its own units, strings and balance. Classic menu navigation and Reveal menu startup were tested. Redux 0.4.5: computer-controlled additional Reveal Generals without matching map AI use a configured vanilla faction template. The native faction selector and human Reveal rosters remain intact. This is vanilla-army fallback AI, not dedicated AI for the additional Reveal units. The generated runtime retains the native-exit callback adapter. Existing running sessions and old saves are not converted. Redux 0.4.7: native Options Music Volume and the browser soundtrack now synchronize through an explicit native callback and ReduxSetMusicVolume export. Effects, voices and temporary engine mute are separate. See redux-audio-controls.patch and REDUX-AUDIO-CONTROLS.md in the source archive. Map-preview cache names now flatten forward slashes as well as backslashes, avoiding invalid nested paths in the browser filesystem. The source archive contains the corresponding updated native files. Redux0.4.8 music selection: the Site music library includes user-supplied C&C USA recordings titled Follow Me and Search And Destroy, three William Rydh C&C Mureka remixes and twelve Redux original instrumentals. These are separately labeled, with original soundtrack/composition rights retained. They are not included in the engine source archive. The engine WASM is unchanged by0.4.8. Redux0.4.9: the guarded ReduxMainMenuState/ReduxMainMenuAction bridge connects a crisp browser-rendered main-menu interface to existing native navigation callbacks. Unknown actions and calls outside the ready primary main menu are rejected. The source archive includes the corresponding MainMenu.cpp, REDUX-COMMAND-DECK.md and incremental redux-command-deck.patch. The native fallback backdrop uses the full existing artwork resolution without baked-in headings. AI, game rules and networking are unchanged. Redux0.4.10: WebGPU terrain pixel shader mode1 now emits opaque coverage after using vertex alpha to blend materials. This fixes reproduced black terrain interiors in tested human Hot Snow skirmish starts. RGB material blending and fog paths remain. The corresponding source archive includes WebGPUD3D8.cpp, REDUX-TERRAIN-COVERAGE.md and the incremental redux-terrain-coverage.patch. Frontend native Options persistence and original-first soundtrack behavior are in the matching Site source repository. Redux0.4.11: fresh single-player Skirmish rules add optional human Instant Building, Unlimited Money and No Fog; native per-slot Very Hard/Super Hard/Maniac tiers retain Hard AI with production/economy bonuses. Gates exclude campaign/challenge, loaded-save, replay and network application. Custom save/replay restoration is unsupported. Corresponding source includes Common/ReduxSkirmish.h, six changed translation/header files, REDUX-SKIRMISH-RULES.md and redux-skirmish-rules.patch. All prior terrain/main-menu/AI/audio/map patches are retained. Redux0.4.12: corrected WebGPU anisotropic capability flags and valid linear anisotropic samplers; read-only session sampler diagnostics. Corresponding source includes REDUX-TEXTURE-FILTER.md and redux-texture-filter.patch. Earlier Skirmish rules, terrain coverage, main-menu, AI, audio and map fixes remain. No new texture artwork or models. Redux0.4.14: guarded native pause-menu availability and action bridge; modern browser pause chrome delegates to original native callbacks. Corresponding source includes REDUX-PAUSE-MENU.md and redux-pause-menu.patch. Earlier terrain, texture-filter, Skirmish, AI, audio and main-menu fixes retained. No new models or texture artwork. Redux0.4.15: bounded decoded resource cache for browser miniaudio effects/unit voices,64entries/32MiB retained PCM, ordinary playback fallback and read-only cache diagnostics. Corresponding source REDUX-AUDIO-CACHE.md/redux-audio-cache.patch retains all earlier fixes; no new audio recordings. Redux0.4.17: optional browser touch input overlay preserves stored desktop mouse options. Single-tap selection and double-tap context orders use the original native translators. Corresponding source REDUX-TOUCH-COMMANDS.md/redux-touch-commands.patch retains all earlier engine changes. Redux0.4.19: frame-queued local touch camera and bounded visible-object hit assistance; exact source in REDUX-FLUID-TOUCH.md/redux-fluid-touch.patch. All earlier native input/audio/AI/renderer/rules/menu patches retained. Redux0.4.19: frame-queued local touch camera and bounded visible-object hit assistance; exact source in REDUX-FLUID-TOUCH.md/redux-fluid-touch.patch. All earlier native input/audio/AI/renderer/rules/menu patches retained. Redux0.4.19: frame-queued local touch camera and bounded visible-object hit assistance; exact source in REDUX-FLUID-TOUCH.md/redux-fluid-touch.patch. All earlier native input/audio/AI/renderer/rules/menu patches retained. Redux0.4.21 Direct Command: native touch region classification and continuous frame-queued minimap camera. Supplemental delta in redux-direct-touch.patch / REDUX-DIRECT-TOUCH.md. Prior patches and original gameplay/placement rules retained. Redux0.4.24: bounded multi-batch WebGPU uploads, frustum-aware terrain coverage/culling, alpha pipeline-key correction, native mobile matching-unit selection and active special-power steering. Supplemental redux-rendering.patch / REDUX-RENDERING.md. Legacy shadow artifacts and physical phone first-load reload remain under investigation. Redux0.4.25: guarded mobile native render-aspect adaptation between frames. Supplemental redux-mobile-viewport.patch / REDUX-MOBILE-VIEWPORT.md. Full battlefield frame; original menu safe areas retained. Redux0.4.26: native window hit testing takes precedence over battlefield touch gestures. Supplemental redux-hud-touch.patch / REDUX-HUD-TOUCH.md. Redux0.4.28: bounded custom-operation launch through original single-player initialization. See REDUX-NAVAL-OPERATIONS.md and redux-naval-operations.patch in source. All prior engine fixes retained. Naval content is separately credited in the public map atlas and credits. 0.4.28 water reflection fix and map startup diagnostics: see redux-naval-operations.patch. Redux0.4.32: paced nested browser loading fade and local fade/cancellation checkpoints. See REDUX-LOAD-TRANSITION.md and redux-load-transition.patch. Physical iPhone crash cause remains unconfirmed. Redux0.4.33 Arsenal mobile WASM SHA-256: 1716cbdc471619601da6ab1f96a4073651f19586d87305bacf2a2dc6a2b8cced Mobile binary: mobile/GeneralsXZH.wasm, fixed1GiB; desktop: vendor/GeneralsXZH.wasm, fixed2GiB. Same source archive; different RTS_WEB_HEAP_MIB link setting. See MOBILE-ARSENAL.md and redux-mobile-arsenal.patch. Mobile hardware compatibility still requires playtesting. Redux0.4.34: bounded terrain texture upload. Mobile WASM SHA-256: 6c88bcce5d86f74eb97dd0d6bf32c9ea7d197d1a1885c160840e5aa1dc5a5221. Same fixed1/2GiB heaps, every texture/mip retained. See TEXTURE-UPLOAD.md and redux-texture-upload.patch. Redux0.4.35: preserve resources on pure viewport resize; correct control-bar disposal/root cleanup. Mobile WASM SHA-256: 7e1d04d0646639aa19db883a61665b655e4b1c0b9c7a61d4f45950ea391843e1. Mobile fixed1280MiB, desktop fixed2048MiB. See MOBILE-VIEWPORT-RESOURCES.md and redux-viewport-resources.patch. Physical iPhone/PWA validation still required. Redux0.4.37: draw-local matrix, normal and light preparation. Desktop fixed2048MiB SHA-256: e8c0a2c3503bf96750404718f8e58a6ba762bdde517ba144b0f14d8caa112a0f. Mobile fixed1280MiB SHA-256: 8a9ff9401df96c989965ef31ddc11db1a6f4f5d7749613fc5582441ba69928b0. See HEAVY-BATTLES.md and redux-heavy-battles.patch. Representative browser measurements do not certify physical MacBook or iPhone performance. Redux0.4.39: native result clock, AI power recipients, Impossible difficulty and menu-state presentation. Desktop fixed2048MiB SHA-256 4c1e3107913a25600b6b4b3c6d166d5d0215cc19e6599feae30754ff5024506d; mobile fixed1280MiB SHA-256 14c6950cd84e3b9c189fd8fdd95af8972fca7f504ec2a1ee089bb7051af196bd. See COMMAND-RECORDS.md.