load.nut constructed about thirty modules by name, so any build that trimmed
one crashed at bind time. That is the only reason the browser runtime needed a
second root script, load_web.nut, listing the WASM-surviving subset by hand:
two files to keep in step with the link list, and no way to express any other
subset.
The boot script now walks eve.moduleList, generated at configure time from the
same manifest that produces the link list, and guards optional modules with
has_module(). The two frame drivers share one eve_frame(): desktop runs the
while loop at the bottom of load.nut, the browser leaves it to
emscripten_set_main_loop through the new eve.hostDrivesFrames flag rather than
a separate script. load_web.nut is gone.
EVENGINE_WEBGPU_TRIM is gone as well. What was a special case is now the "web"
profile, and the two remaining uses that really meant "is this Emscripten" say
so directly. Third-party groups the WASM aggregate does not build resolve to
nothing there, matching the list it linked before.
graphics now treats font as an optional dependency rather than a hard one:
graphics/Font.cpp is its only user and was already excluded on WASM. Turning
font off excludes that file everywhere, so the rule no longer depends on the
platform.
Verified: full-profile link line still identical to before the manifest work;
web profile resolves to exactly the module set the old REMOVE_ITEM list left;
a 3d-profile binary boots and runs the basic example, reporting avatar and
dialogue absent and the rest present; example smoke suite unchanged at 19/9.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
Add a development-server based remote hot reload so script/resource changes
made on the host are synced and reloaded live on devices whose game bundle is
read-only (iOS app bundle, Android APK).
- Implement the previously stubbed `eve dev` command as a small HTTP file
server (GET /manifest, /raw/<path>, /ping) serving a game directory.
- Extend HotReload with a background remote-sync client: poll the server
manifest, compare mtime/size, download changed files into a writable overlay
directory mounted at "/" via the new Filesystem::mountRealDirectory, and
queue changed virtual paths for the script layer to dofile/reload.
- Wire it into load.nut: config.devServer/devSyncMs, shared handle_change(),
poll_remote_reload(), and a `eve run --dev-server <url>` CLI override.
- Add iOS/Android hot-reload dir helpers and cleartext-HTTP platform config
(iOS ATS + NSLocalNetworkUsageDescription, Android usesCleartextTraffic).
- Add test/remotesync.cpp covering overlay shadowing, end-to-end sync, and
unreachable-recovery; update docs.
Add the scene_director Squirrel kit (src/scripts/scene_director.nut) with
spawn/move/scale/rotate/remove/material/lighting/camera/cameras/info/modify/
reset, embedded into the engine and exposed to host games as
eve.sceneDirectorScript. New MCP tools (eve_scene_director_install/status,
eve_scene_reset, eve_scene_modify, eve_scene_info, eve_camera_generate) are
thin dispatchers over the kit, so agents can place props, set lighting,
frame cameras, inspect truth and reset the stage through MCP alone.
The kit's cross-references are written explicitly as scene_director.<field>
to avoid Squirrel table-closure his resolution, and cameras() uses a
fixed 6-way compass table (no math-lib dependency) so it works both in the
engine and in plain ssq test VMs.
- Add eve zip <game> to compress a game directory into a .eve archive
(custom streaming ZIP writer, DEFLATE via zlib, PhysFS-readable).
- Add eve package <game> -o <out> --sdk <sdk> to assemble a runnable
Windows game folder from the target SDK: eve.exe + game.eve + runtime
(vulkan + VC CRT) DLLs + platform template. SDK auto-detected from the
running binary, --sdk, or \.
- Run a packaged game entirely from memory: detect game.eve, mount it via
PHYSFS_mountMemory (no extraction to disk) and route Squirrel's
file/dofile/loadfile through PhysFS so scripts load from the archive.
- Link eve to eve.html via --shell-file so the shell template is actually applied and regenerated on every build; track the shell as a link dependency.
- Keep C++ exception catching enabled under ASYNCIFY so expose() failures abort cleanly instead of asserting on __cxa_throw.
- ModuleManager::exposeVM no longer find()+catch for the eve table: Runtime::initialize() guarantees expose() runs once, and ASYNCIFY-wrapped frames can drop the catch and leak NotFoundException.
- Expose window.hideEVELoading and call it on the first presented frame so the shell's loading overlay is dismissed.
- FileWatch.h includes common/config.h so EVENGINE_WEBGPU is defined before the Poco guard.
- Added support for the WebGPU backend in the CMake configuration, enabling builds for Emscripten and native Dawn.
- Implemented conditional compilation for WebGPU-specific features, including shader management and file system handling.
- Updated the build process to exclude unnecessary modules and dependencies for WebGPU, optimizing the engine for browser environments.
- Enhanced the installation script to include WebGPU-related files and directories in the output.
- Refactored existing modules to accommodate WebGPU, ensuring compatibility and performance improvements across the engine.
- Introduced new compile options and configurations tailored for WebGPU builds, including handling of third-party libraries and assets.
Forward-declare McpServer/AiPanel in DevTool.hpp, bridge MCP away from
DevTool.hpp inside DebugAdapter's TU, emit tools/resources/prompts lists
as static JSON (fewer Poco template exports), and drop the ImGuiBackend
AI drawer that instantiated more imgui inlines under WINDOWS_EXPORT_ALL_SYMBOLS.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
Expose a localhost MCP JSON-RPC server (--mcp-port) alongside DAP so AI
agents can pause, eval, snapshot, and slice errors on a live session.
Add DevTools AI session log/ImGui panel (eve.dev.ai, F9) and a Cursor
stdio bridge under tools/eve-mcp.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
- Added support for DAP (Debug Adapter Protocol) in the DebugAdapter, allowing for better integration with IDEs like VS Code.
- Implemented new debugging commands: stepInto, stepOver, and stepOut, enhancing script execution control.
- Updated CallGraph to use a fixed ring buffer for event storage, improving performance and memory management.
- Introduced methods for resolving source paths and managing script aliases, facilitating smoother debugging experiences.
- Enhanced documentation to reflect new features and usage instructions for debugging tools.
These changes significantly improve the debugging workflow and provide developers with more robust tools for script management and error tracing.
* feat(devtools): pause, breakpoints, watches, snapshots, and VS Code DAP
Add a script-centric debugger: Pause key / DAP frame pause, Squirrel
breakpoints with watches, JSON snapshot of script state (stateless
engine), TCP Debug Adapter Protocol server, and a VS Code extension
under tools/vscode-eve-debug.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* fix(devtools): correct Snapshot JSON (Poco Ptr) and DAP includes
Use Poco::JSON::Object/Array::Ptr for script-state capture/restore so
round-trips no longer BadCast; include TimeoutException via Exception.h.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* fix(devtools): move DebugAdapter ctor to cpp for MSVC unique_ptr
MSVC rejects unique_ptr of forward-declared Poco sockets when the
default constructor is defined in the header (incomplete-type delete).
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* fix(devtools): disable Poco auto-link on EVDevTools for MSVC
Including Poco Net/JSON without POCO_NO_AUTOMATIC_LIBS makes the
Windows linker request PocoFoundationd.lib instead of PocoFoundationmdd.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
* feat(devtools): add dynamic slicer for script error tracing
Record call/return/line and Def/Use data-flow in CallGraph, attach a
Squirrel native debug hook via DevTool, and emit a Weiser-style backward
slice report on failures when running with `eve run --debug`.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* fix(devtools): use one-in-one-out ring buffer for trace events
Replace half-window drops with a deque ring buffer: when full, each new
event evicts exactly one oldest event, with monotonic ids and index cleanup.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* feat(devtools): add render-pipeline error tracing
Introduce common RenderTrace hooks and a RenderFlow slicer so Graphics
passes/binds/draws are attributed on failure. Wire RenderSystem 2D/3D,
mark Exception sites, and merge render reports into DevTool --debug output.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* test(devtools): expand CallGraph and RenderFlow coverage
Add extensive unit tests for source locations, data-flow slicing,
ring-buffer eviction, nested passes/binds, Exception hooks, and RAII
scopes (54 cases / 202 assertions under ^devtools\.).
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
- Updated the math module to include vector and matrix operations, noise generation, Bezier curves, and random number utilities.
- Introduced the tensor module, providing TensorFlow 2-style eager execution and graph building capabilities.
- Enhanced documentation to reflect the new features in the math and tensor modules, including usage examples and API references.
- Modified CMakeLists.txt to include the new math and tensor modules, ensuring proper build configurations.
Co-authored-by: Cursor <cursoragent@cursor.com>
- Added support for soft hot-reloading of scripts and assets in the engine, allowing for dynamic updates without restarting.
- Introduced new functions in the load.nut script to track and reload modified scripts and assets.
- Enhanced the filesystem module with a HotReload class to manage asset reloading based on file changes.
- Updated CMakeLists.txt to include new timidity share data for desktop platforms.
- Improved the audio module to support MIDI playback with dynamic asset loading.
Co-authored-by: Cursor <cursoragent@cursor.com>
- Introduced a new optional demo module that includes procedural sound effects and planet texture generation.
- Updated the build system to support the demo module with the `EVENGINE_BUILD_DEMO` option.
- Enhanced the Makefile to synchronize game assets into the APK during the build process.
- Modified the AndroidManifest to set the screen orientation to portrait for better compatibility.
- Improved documentation to reflect the new demo features and asset synchronization process.
Co-authored-by: Cursor <cursoragent@cursor.com>
Inject bundle game launch args, share Android-style resume surface rebuild, and skip validation layers for the first device bring-up.
Co-authored-by: Cursor <cursoragent@cursor.com>
Unpack APK game assets into internal storage, route SDL_main into the engine cmdline entry, and keep Android filesystem paths aligned with the runtime root.
Co-authored-by: Cursor <cursoragent@cursor.com>
- Added new methods for event polling and handling in the Event module, including `pollName` for retrieving message names.
- Introduced new graphics functions for clearing the screen and drawing solid rectangles with RGBA support.
- Updated the Window module to expose new settings and graphics functionalities.
- Refactored the main script to utilize the new graphics and event features, improving the example game structure.