Skip to content

Releases: Forevka/stoneshard-mod

Release list

Lodestone 0.4.0

Choose a tag to compare

@github-actions github-actions released this 30 Sep 15:21

Added

  • Runtime content: Content.AddSprite / ReplaceSprite (PNG, JPEG or GIF) and Content.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, code and callers.
  • CoreLoader.Input: pick mode. The next click outside the overlay is taken, and the game never sees it.
  • CoreLoader.Code: Describe and FindCallers. 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.
  • ContentDemo mod and StructProbe test mod.
  • Visual Studio support for interop-based projects:
    • <InteropGame> finds a game's generated interop automatically, using the per-machine
      CoreLoader.user.props or CORELOADER_GAME_DIRS.
    • tools\setup-dev.ps1 writes that file and a CoreLoader.Dev.sln that 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_address and
    builtin_name_at. The managed runtime requires this exact version.
  • Breaking: Code.FindCallers takes 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. SetArg changes 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_install accepts only the exact start of a gml_* function, with the calling convention its name
    implies. gml_GlobalScript_* and gml_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/catch when 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.
  • Registrations surviving unload: hooks and draw handlers registered in a mod's constructor or from
    a Task outlived the mod.
  • Values:
    • Values.Free of 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__Post runtimes (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_read skips 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.