Skip to content

v1.6.2

Pre-release
Pre-release

Choose a tag to compare

@jarlbrak jarlbrak released this 28 Sep 21:17
Immutable release. Only release title and notes can be modified.

FTK Mod Framework 1.6.2 (preview)

Framework 1.6.2 fixes two problems: automatic bug reports were never
delivered from a real install, and resuming a save that uses content that
isn't installed
hung on "Crafting adventure". It adds no new tweaks. Everything
else in 1.6.1
and 1.6.0
applies unchanged.

This is a preview release. It is published as a GitHub pre-release, so the
Stable update channel does not install it. Preview-channel installations,
including 1.6.0 and 1.6.1, receive it; you can also pin v1.6.2 in
Mods > Updates.

Fixes

Automatic bug reports are delivered

Automatic bug reports (on by default under Mods > Settings & Help) send
detected errors and unexpected exits to the public GitHub tracker. Until now none
of them arrived. There were three causes:

  • The queue was in a folder the helper refuses. Automatic reports were queued
    in BepInEx/ReportingAutomaticDelivery, and the helper only sends requests from
    BepInEx/ReportingDelivery. The queue is now
    BepInEx/ReportingDelivery/Automatic, with its own lock, pending copy and
    receipt. Every helper already shipped accepts it, so no launcher update is
    needed.
  • One stuck report blocked every later one. A saved automatic report now gets
    one attempt per launch, with its original ID and bytes. Once it has failed in the
    current launch, a newer unexpected-exit or error report replaces it. An
    unexpected exit is sent before an error. A report that the helper or the service
    can never accept is deleted instead of retried.
  • A game error used up the allowance. The game's sound engine throws a
    NullReferenceException in AkInitializer.OnApplicationFocus at startup on
    every launch, with or without mods. It took the only pending slot and one of the
    three reports allowed per launch, so later real errors were not reported. It is
    no longer reported and no longer counts. Errors already reported in the last 30
    days are also skipped before they count. Both stay in the log dump of any
    report.

A replaced report that might already have reached GitHub, for example after a
timeout, is never resent under a new ID. See
Reporting a problem.

Saves with missing content are refused instead of hanging

Resuming a save that refers to an enemy, map encounter, item, class, quest or
adventure that is not installed used to stop on "Crafting adventure" for good.
Now, before anything loads, the framework reads the save from Resume or from
Load, checks those identifiers against the installed content and, if any are
missing, shows the game's own dialog Can't load this save. The dialog reads,
for example, "This save uses content that isn't installed: 1 enemy type, 1 map
encounter, 1 item", names the mod when it can, and says the save file has not been
changed. OK returns you to the title screen or the Load menu. LogOutput.log
gets one [save-guard] warning that lists the missing identifiers.

The check only reads the save. If it cannot read a save, it logs a warning and
lets the game load as before. Limits are in
Save compatibility.

Upgrade notes

  • Automatic reports from 1.6.1 and earlier were never delivered. The first
    launch of 1.6.2 deletes the old queue's files in
    BepInEx/ReportingAutomaticDelivery, and the empty folder, without sending
    them
    , and logs one line. Unrecognized files there are left in place. If you
    want a problem from an earlier version looked at, use Options > Report Bugs.
  • While automatic reports are on, an unexpected exit from the last seven days that
    was never reported can be reported on the first launch of 1.6.2.
  • Old saves that use removed content now show "Can't load this save" instead
    of hanging. This mostly affects development saves and saves made with a mod that
    has since been removed. Reinstall the mod, start a new adventure, or pick another
    save from Load.
  • Stable users stay on 1.5.1 until a later stable release is published.
    Preview-channel installations from 0.1.0 up to 1.6.1 on the verified game build
    are in the automatic update range; other game builds keep their bundled version.
  • Tweak choices, Session records and save keys are unchanged from 1.6.1. Make a
    backup before testing a preview.
  • Use a full game restart after updating.

Verification and limits

Game-free checks. The Release build and the full game-free matrix pass:
framework, Tweaks, save content guard, reporting (including the automatic queue),
player-mod and performance tests, installer fixtures, Go helper and catalog
checks, launcher and release-manifest checks, harness tests and the packaging dry
run. The reporting tests' stand-in helper enforces the real helper's path rule, so
a queue the helper would refuse fails them. Both the 1.6.1 helper and the new one
accepted the new queue in an offline run. A build or a game-free test does not
prove in-game behavior.

Live evidence for the save check comes from one macOS test copy, solo
offline, keyboard and mouse (live batch 7):

  • Resume refuses a copy of a development save that uses a removed enemy, map
    encounter and item: the dialog appears, one warning is logged, OK returns to the
    title with Resume selected, and a second attempt refuses again.
  • Load, then Start, refuses the same way, and OK keeps the Load menu open.
  • The save file is unchanged after four refusals.
  • A valid save loads through Resume and through Load, and reaches the map. The
    check took 45 to 176 ms.
  • The old automatic queue's removal line was logged once. No SELF-TEST FAIL, no
    [Error] line and no exception from the new code.

Known limitations:

  • Save check: classes are stored by position, so a class ID now used by a
    different class loads as that class. Only the identifier kinds above are
    checked. A co-op client that lacks content the host has is not checked before
    the load. Co-op host refusal and title-screen activation mode have not been
    played.
  • Automatic reports: sending is best effort. An automatic error report has
    not been delivered live, and Windows and Linux delivery has not been exercised.
  • Session tweaks are off in online co-op until the co-op contract ships.
  • Open live gates from 1.6.0 and 1.6.1: the watchdog's host acknowledgement check
    with a real remote client; each softlock signature firing live; a vanilla load
    of a save that carries records (#253 L8); a second Find Herb in the same dungeon;
    the group shield icon clearing; the Petrified and Dazed icons; the skip-turn
    popup fix, which only the Scourge triggers; Skip intro on a platform where the
    intro plays; controllers; local multiplayer and online co-op.
  • Controllers are not supported for Refund movement focus or One-press
    inventory
    .
  • Windows and Linux/Proton gameplay is unverified. Windows launcher availability
    remains a preview; Linux arm64 is helper tooling, not a native ARM game port.
    macOS downloads are not notarized and may require right-click > Open. Steam may
    need one restart to refresh shortcut artwork.

Known issue, not caused by the framework: on macOS the game can hang when you
quit, inside the game's own sound engine while it unloads its sound banks. Force
quit the game if it does not close.

The verified game assembly remains
94cab5f9be9633f7f85f6f072e0b5b919c605bbecb3414422f8f008d9b2bc1c8.