Releases: Forevka/stoneshard-mod
Releases · Forevka/stoneshard-mod
Release list
Lodestone 0.4.0
Added
- Runtime content:
Content.AddSprite/ReplaceSprite(PNG, JPEG or GIF) andContent.AddSound(OGG).
Everything is owned by the mod that added it and released on unload.- A replaced sprite gets its original image back.
- A released sprite is emptied rather than deleted, and its slot is reused.
GameDraw.OnGui: draws into the game's own GUI layer each frame.- It uses the game's Draw GUI event on a live object, and moves to another object when the room changes.
- Draw state is restored after mod handlers run.
- Console Inspector tab: click any instance in the game to inspect it.
- It shows the object, its parents and every variable.
- Variables can be edited with GML expressions, frozen, and expanded as trees.
- A selection can be dumped to a file or the clipboard.
- A read-only code view lists each event's calls (scripts, events and builtins) and strings, with a callers search.
- New console commands:
inspect,dump,codeandcallers. CoreLoader.Input: pick mode. The next click outside the overlay is taken, and the game never sees it.CoreLoader.Code:DescribeandFindCallers. Builtins are named even where compiled code calls
them through the runner's helper by registry index.UI.TreeNode/TreePop,UI.SetClipboard,UI.InputTextEnter,UI.Guarded.ContentDemomod andStructProbetest mod.- Visual Studio support for interop-based projects:
<InteropGame>finds a game's generated interop automatically, using the per-machine
CoreLoader.user.propsorCORELOADER_GAME_DIRS.tools\setup-dev.ps1writes that file and aCoreLoader.Dev.slnthat includes the interop projects.
- Game-thread record, and refusal of off-thread GML calls in every native API entry point.
- Logs rotate to
coreloader.prev.log; identical repeated lines are rate-limited.
Changed
- Breaking: CoreApi version 9. It adds pick mode, tree nodes, the clipboard,
builtin_addressand
builtin_name_at. The managed runtime requires this exact version. - Breaking:
Code.FindCallerstakes a millisecond budget instead of a function count. - Mods start only once the game has loaded its assets (Stoneshard: ~16 s). Nothing a mod
registers can take a slot the game is about to fill. - A script with mod hooks on it is called with private copies of its arguments.
SetArgchanges only
what the original and later handlers see, so a multiplier can no longer compound on constant call sites. - Hot reload loads the new build first. If it cannot load yet, the running copy stays and the load is retried.
hook_installaccepts only the exact start of agml_*function, with the calling convention its name
implies.gml_GlobalScript_*andgml_RoomCC_*hook as events.- The remote command file is read only when
CORELOADER_REMOTE=1. - Interop generation collects game data a few milliseconds per frame, and writes files on a worker,
so the game no longer freezes.
Fixed
- Leaks:
- Each native variable access leaked one string.
- Legacy tools handed the game buffers that were later freed.
- Hang or crash at process exit: teardown no longer runs under the loader lock.
- Handling errors from the game:
- GML exceptions reach the game's own
try/catchwhen only native frames are in between. - After-phase handlers run when the original throws.
- Stack overflows reset the guard page.
- Dispatch depth is capped at 256.
- GML exceptions reach the game's own
- Registrations surviving unload: hooks and draw handlers registered in a mod's constructor or from
a Task outlived the mod. - Values:
Values.Freeof a pooled value freed it twice.- Struct copies no longer call the runtime's GC helpers outside game code, and kept structs are rooted.
- Self-tests:
- The value self-test proves copy and free on plain values too.
- The self-test no longer frees its own characters.
COPY_RValue__Postruntimes (Dwarf Eats Mountain) are supported.
- Console and Inspector cannot disable themselves: bad hex literals, nesting over 64 levels,
obj[expr]evaluated twice, and handler errors are all caught. - Input: pick mode swallows only its own button release; the Insert key ignores auto-repeat;
key and button releases always reach the game. - Rendering:
- The overlay restores the game's render targets.
- Mods keep ticking if the overlay cannot start.
- Nested Present calls are skipped.
- Instance and memory safety:
- The Stoneshard player pointer is forgotten when o_player stops stepping.
memory_readskips guard pages.- The current-self global is validated as an instance.
- Save rewrite is atomic; unreadable mod settings are kept as
.bad; and more from the two engine reviews.
Install: extract Lodestone-0.4.0-win64.zip into the game folder (next to the .exe), then any mod zips the same way. INSERT opens the overlay.