Skip to content

Releases: TomXV/dragnwash-modframework

Drag'n Wash ModFramework 1.6.0

Choose a tag to compare

@github-actions github-actions released this 26 Sep 06:28
3c0d754

Drag'n Wash ModFramework 1.6.0

Mods can be brought up to date before you play now. A small launcher runs before the game from Steam's launch options, shows what's new, and updates the mods you pick. The Mods screen gets Update now for the same thing from inside the game, and the installer's window is rebuilt to look like the launcher. On top of 1.5.0; for mods, everything is additive, as before.

The core, the preloader patcher and every library are 1.6.0.

A launcher before the game

Launcher.exe starts from Steam's launch options ("<game>\BepInEx\DragNWash.Installer\Launcher.exe" %command%). When the game's own update check found newer versions last time, it lists them before the game starts: tick the ones you want and press Update and play, or Play without updating. When there's nothing new, you only see the logo for a moment and the game starts.

  • It goes online only when you press Update, and only to github.com and release-assets.githubusercontent.com.
  • It installs only mods the installer put in, from the release's zip, checked by size and SHA-256. Everything it replaces is backed up first, and if a step fails, the files are put back.
  • It stays the game's parent while you play, so Steam keeps counting play time.
  • It's Windows only and needs the WebView2 runtime. Without it, the game simply starts as usual. Whatever fails in the launcher, the game still starts.

Update from the Mods screen

A mod the installer put in gets Update now next to Open release page when there's a newer release. It asks first: Quit and update closes the game, the launcher updates the mod, and after a 10-second countdown (or Start now) the game starts again.

The framework's settings have a Launcher section too: the switch that puts the launcher into Steam's launch options or takes it out, and how the logo screen looks (handwritten or typewriter lettering, where the progress bar sits).

The installer, rebuilt

Install.exe looks like the launcher now: one window, the same logo, one board at a time, each step with its own picture and the mod's icon. It puts the launcher into the game folder and sets the Steam launch option for you (a checkbox, on to begin with). Steam rewrites its settings while it runs, so when Steam is open, the installer asks to close it first. Uninstall shows its real progress and takes the launcher out of the launch options again.

It's still one file. Without WebView2, or when the new window can't come up, the old window opens as before. The command line hasn't changed; --launch-option on|off|keep is new.

macOS

The F1 window draws its text on macOS now. Unity 6's text engine couldn't load the macOS Japanese font, so the window stayed blank; it now skips a font that engine can't load. Thanks to 223n (#84). Running the game with mods on macOS still needs a Doorstop build that isn't released yet; Drag'n Wash Localization has an experimental install script for it. Progress: #85.

For mod authors

  • mod-install.json can name an icon (a PNG or JPEG in the payload). The launcher and the installer show it while your mod is installed or updated.
  • updates.json in BepInEx/cache/DragNWash.ModFramework/ now carries each mod's release notes, page, date and files, for tools that want to show updates without going online.

Who needs this

Everyone who plays on Windows gets the launcher and Update now; the installer sets them up. Mods built for 1.5.0 keep working. If you'd rather not use the launcher, untick the checkbox in the installer, or switch it off in the framework's settings.

The full list of changes is in CHANGELOG.md. The artwork in the zip is not under the code's licence; CREDITS.txt says whose it is.


日本語

遊ぶ前に Mod を最新にできるようになりました。Steam の起動オプションから小さなランチャーがゲームより先に動いて、新しい版を見せ、選んだ Mod を更新します。ゲームの中からは、Mods 画面の 更新する で同じことができます。インストーラーの窓も、ランチャーに合わせて作り直しました。1.5.0 に続く更新で、Mod から見た変更はこれまでどおりすべて追加です。

中核、プリローダーのパッチャー、全部のライブラリが 1.6.0 になりました。

ゲームの前に動くランチャー

Launcher.exe は、Steam の起動オプション("<ゲーム>\BepInEx\DragNWash.Installer\Launcher.exe" %command%)から動きます。前回ゲームの更新確認で新しい版が見つかっていれば、ゲームの前に一覧を出します。入れたいものにチェックを入れて 更新して起動、または このまま起動 を押してください。新しいものがなければ、ロゴが少し出てゲームが始まります。

  • ネットにつなぐのは、更新を押したときだけです。行き先は github.com と release-assets.githubusercontent.com だけです。
  • 更新するのは、インストーラーで入れた Mod だけです。リリースの zip を、サイズと SHA-256 で確かめてから入れます。置き換えるファイルは先にバックアップを取り、途中で失敗したら元に戻します。
  • 遊んでいるあいだもゲームの親として残るので、Steam のプレイ時間はそのまま数えられます。
  • Windows だけで、WebView2 ランタイムが要ります。なければ、ゲームはいつもどおり起動します。ランチャーで何かが失敗しても、ゲームは起動します。

Mods 画面から更新

インストーラーで入れた Mod は、新しいリリースがあると リリースページを開く の横に 更新する が出ます。押すと確認が出て、終了して更新 でゲームを閉じ、ランチャーが Mod を更新して、10 秒のカウントダウン(または 今すぐ起動)のあとゲームを起動し直します。

フレームワークの設定には ランチャー の項目も増えました。Steam の起動オプションにランチャーを入れる・外すスイッチと、ロゴの画面の見た目(手書きかタイプライターの文字、進み具合のバーの位置)です。

インストーラーを作り直しました

Install.exe はランチャーと同じ見た目になりました。1 つの窓に同じロゴ、画面は 1 枚ずつ、手順ごとの絵と Mod のアイコンが出ます。ランチャーをゲームのフォルダーに入れて、Steam の起動オプションも設定します(チェックボックス、最初はオン)。Steam は起動中に自分の設定を書き直すので、Steam が開いているときは、先に閉じてよいか聞きます。アンインストールも本当の進み具合が出て、起動オプションからランチャーを外します。

今までどおり 1 つのファイルです。WebView2 がないときや新しい窓が出せないときは、今までの窓が開きます。コマンドラインは変わらず、--launch-option on|off|keep が増えました。

macOS

macOS でも F1 の窓の文字が出るようになりました。Unity 6 の文字の仕組みが macOS の日本語フォントを読み込めず、窓が真っ白になっていたので、読み込めないフォントは飛ばすようにしました。223n さん、ありがとうございます(#84)。macOS でゲームを Mod 付きで動かすには、まだリリースされていない Doorstop が要ります。Drag'n Wash Localization に、そのための試験版のインストールスクリプトがあります。進み具合:#85

Mod を作る人へ

  • mod-install.json で icon(payload の中の PNG か JPEG)を指定できます。ランチャーとインストーラーが、Mod を入れる・更新するときに出します。
  • BepInEx/cache/DragNWash.ModFramework/ の updates.json に、Mod ごとのリリースノート、ページ、日付、ファイルが入るようになりました。ネットにつながずに更新を見せたいツール向けです。

更新したほうがいい人

Windows で遊ぶ人は全員です。ランチャーと 更新する が使えるようになり、インストーラーが設定します。1.5.0 向けの Mod はそのまま動きます。ランチャーを使いたくないときは、インストーラーのチェックを外すか、フレームワークの設定でオフにしてください。

変更の全部は CHANGELOG.md にあります。zip の中の絵はコードのライセンスの対象外です。誰のものかは CREDITS.txt にあります。

Drag'n Wash ModFramework 1.5.0

Choose a tag to compare

@github-actions github-actions released this 23 Sep 13:03
54e63dd

Drag'n Wash ModFramework 1.5.0

A new look for everything you see: the Mods screen is rebuilt on frosted glass, and every tab of the F1 window was gone through one by one. Starts are faster, the installer fetches ModFramework from its own release, and a few ways to lose a save snapshot are gone. On top of 1.4.3; for mods, everything is additive, as before.

The core, the preloader patcher and every library are 1.5.0 now. Until this release each library counted on its own (Tool window 1.2.0, Bridge 0.1.2 and so on); from here on the whole framework shares one number.

The Mods screen, rebuilt

It looks like a settings app now. Your own mods come first; the framework and its libraries fold into Libraries at the bottom. Each row shows the icon, version, author, the switch and every tag that applies (Not loaded, Conflict, Online, Update, Needs restart), so a library's conflict shows from the list too. There's a search field, and the filters All, On, Off and Needs attention say how many mods each holds.

The details have a header that stays put, and every note about the mod gets a band of its own, so nothing gets pushed out any more. The mod's pages are tabs: About, Settings, Internet and every page the mod adds. In Settings, each setting is a row with its name and description on the left and its control on the right: a switch, a slider, - and +, choices side by side, a key with Change. A changed value has a dot and a way back to the default.

The panels are frosted glass: a blurred, dimmed copy of the game shows through them. [Mods screen] Glass picks Snapshot (the default, five times a second), Every frame, or Off. Nothing runs while the screen is closed.

The gamepad (LB/RB for tabs, Y for search, B steps back one level) and the keyboard (arrows and Enter) both work all the way through.

The F1 window, tab by tab

  • Everywhere: a notice strip with a colour for info, warnings and errors; questions right where you pressed ("Clear history? Yes / Cancel"); the window opens where you left it; one row of tabs with More.
  • Inspector: its keys can be changed (the "?" panel, or the Mods screen), a filter for members, a "..." menu on every row for the gamepad, enums as a list, and search that says what it found.
  • Assets: the toolbar wraps instead of running off the edge, and each replacement says whether it's in use and, when it isn't, why.
  • Bridge: one panel says whether it's listening and, if not, why in plain words, with Use a free port and Try again. Connection details are a row each with Copy; the token is still never shown.
  • Console: the level toggles show clearly whether they're on or off.

Faster and safer

  • Characters the fallback fonts drew are kept between starts, so with the Localization mod's 17 languages on Direct3D 12 that part of the start goes from about 1.2 s to about 0.4 s.
  • The F1 window's font is made when you first open it, not at every start.
  • A restore with a full snapshot history could delete the very snapshot being restored, and two snapshots in the same second overwrote each other. Both are fixed.

Installing

Install.exe can now fetch ModFramework from its own GitHub release instead of the mod's zip carrying it. It asks first, says where it connects and why, checks the size and SHA-256, and only installs the libraries the mod needs. If another mod loader is already in the game folder, it stops before changing anything. Every install keeps a backup and puts everything back if a step fails halfway.

For mod authors

New: ToolWindow.ShowNotice(text, NoticeKind, secs), Busy, AskConfirm/Confirm, Hint, Elide, FlowButton, Underline, FilterField; ModsScreenLook for a Mods-screen page; ModFramework.SharedKeyNote; SafeFile.Write; public CsvReader; GameSaves.Keep. The Wiki has the details.

Who needs this

Everyone. The Mods screen and the F1 window change for everybody, and the save fixes matter to anyone who edits saves. Mods built for 1.4.x keep working.

The full list of changes is in CHANGELOG.md. The artwork in the zip is not under the code's licence; CREDITS.txt says whose it is.


日本語

見た目をまるごと新しくしました。Mods 画面はすりガラスの上に作り直し、F1 のウィンドウはタブを 1 つずつ見直しています。起動は速くなり、インストーラーは ModFramework を専用のリリースから取ってくるようになりました。セーブのスナップショットが消えてしまう原因もいくつか直しています。1.4.3 に続く更新で、Mod から見た変更はこれまでどおりすべて追加です。

中核、プリローダーのパッチャー、全部のライブラリが 1.5.0 になりました。これまではライブラリごとに番号を数えていましたが(Tool window 1.2.0、Bridge 0.1.2 など)、これからはフレームワーク全体で 1 つの番号にそろえます。

Mods 画面をつくり直しました

設定アプリのような見た目になりました。自分の Mod が先に並び、フレームワークとライブラリは一番下の「ライブラリ」にたたんであります。各行にアイコン、バージョン、作者、スイッチ、それに当てはまるタグ(読み込まれていない・競合・オンライン・更新あり・再起動が必要)が全部出るので、ライブラリの競合も一覧から分かります。検索欄があり、「すべて・オン・オフ・要確認」の絞り込みには件数が出ます。

詳細の上の部分は固定で、Mod についてのお知らせは 1 つずつ帯になって並びます。はみ出して消えることはもうありません。Mod のページはタブになりました(概要・設定・インターネット、それに Mod が足したページ全部)。設定は 1 項目 1 行で、左に名前と説明、右に操作があります。スイッチ、スライダー、- と +、横に並んだ選択肢、キーと「変更」です。既定から変えた値には点が付き、既定に戻すボタンも出ます。

パネルはすりガラスで、ぼかして暗くしたゲームの画面が透けて見えます。[Mods screen] Glass で「Snapshot」(既定、1 秒に 5 回)、「Every frame」、「Off」を選べます。画面を閉じているあいだは何も動きません。

ゲームパッド(LB/RB でタブ、Y で検索、B で 1 段戻る)とキーボード(矢印と Enter)で最後まで操作できます。

F1 のウィンドウ、タブごとに

  • 全体: 情報・警告・エラーを色で分けたお知らせの帯。押した場所でそのまま聞く確認(「履歴を消しますか? はい / キャンセル」)。ウィンドウは前に閉じた場所で開きます。タブは 1 列で、入りきらない分は More に入ります。
  • Inspector: キーを変えられるようになりました(「?」のパネルか Mods 画面から)。メンバーの絞り込み、ゲームパッド用に各行の「...」メニュー、enum は一覧から選べ、検索は何件見つかったかを言います。
  • Assets: ツールバーが折り返して、はみ出さなくなりました。置き換えは、使われているか、使われていないならなぜかを言います。
  • Bridge: 待ち受けているか、いないならその理由を、1 つのパネルにふつうの言葉で出します。「空いているポートを使う」と「もう一度試す」のボタンもあります。接続情報は 1 行ずつコピーできます。トークンはこれまでどおり画面には出しません。
  • Console: レベルの切り替えが、オンかオフかひと目で分かるようになりました。

速く、安全に

  • 予備フォントが描いた文字を起動をまたいで取っておくようにしました。Localization Mod の 17 言語を Direct3D 12 で使う場合、その部分が約 1.2 秒から約 0.4 秒になります。
  • F1 のウィンドウのフォントは、毎回の起動時ではなく、初めて開いたときに作ります。
  • スナップショットの履歴がいっぱいのときに復元すると、復元しようとしたスナップショット自体が消えることがありました。同じ秒に 2 つ撮ると上書きされる問題もありました。どちらも直しました。

インストール

Install.exe が、ModFramework を Mod の zip に入れてもらう代わりに、ModFramework 専用の GitHub リリースから取ってこられるようになりました。つなぐ前に、どこに・なぜつなぐかを聞き、サイズと SHA-256 を確かめ、Mod に必要なライブラリだけを入れます。ゲームのフォルダーに別の Mod ローダーがあるときは、何も変えずに止まります。インストールのたびにバックアップを取り、途中で失敗したら全部元に戻します。

Mod を作る人へ

新しく入ったもの:ToolWindow.ShowNotice(text, NoticeKind, secs)、Busy、AskConfirm/Confirm、Hint、Elide、FlowButton、Underline、FilterField、Mods 画面のページ用の ModsScreenLook、ModFramework.SharedKeyNote、SafeFile.Write、公開になった CsvReader、GameSaves.Keep。くわしくは Wiki にあります。

アップデートが必要な人

全員です。Mods 画面と F1 のウィンドウはみんなに関わりますし、セーブの修正はセーブを編集する人には大事です。1.4.x 向けに作った Mod はそのまま動きます。

変更の全部の一覧は CHANGELOG.md にあります。zip に入っている絵はコードのライセンスとは別のもので、誰のものかは CREDITS.txt に書いてあります。

Drag'n Wash ModFramework 1.4.3

Choose a tag to compare

@github-actions github-actions released this 21 Sep 04:48

Drag'n Wash ModFramework 1.4.3

The graphs editor as a tool somebody can work in, and a way into it from the game. On top of 1.4.2; additive, as before.

Plugin Version
Drag'n Wash ModFramework (core) 1.4.3 No change; follows the release
Preloader patcher 1.4.3 No change; follows the core
Bridge 0.1.2 Open page and Graphs buttons; the editor's own doing
Graphs 0.1.2 Rename, Delete, Reload, and Run on a graph that was stopped
Inspector 1.1.2 Opening a scene or a level from the console or the page
Everything else unchanged Same as 1.4.2

Getting to the editor

The page could only be opened from a method in the Inspector's Code view — which makes sense for reading the game's code, and none at all for writing a graph. The Bridge tab of the F1 window now has two buttons: Open page (the code graph, as before) and Graphs (the same page with the editor already in front). Both views still switch inside the page, and the row of buttons wraps instead of walking off the edge of a narrow window.

The editor, whole

Going through every button in it turned up a set of things that made it half a tool. All of them are here now:

  • Variables. A set statement may only use a name the graph declares, and there was no way to declare one — so set could not be used at all. The graph block now lists them, with what each starts as.
  • Rename and Delete. Renaming moves the file instead of leaving a copy behind, and Save always means "write this graph where it is". Delete keeps the file beside its mod as <name>.json.bak.
  • Reload, for files added, changed or removed outside the editor. A graph whose file has gone says so in the list instead of failing when it is opened.
  • Which handler Run starts — it was always the first one.
  • A handler's only if and again while running, and the graph's description for the Mods screen.
  • Clear for the log panel.
  • A colour picker beside a value that is a colour, and the type of the member (Color, Single) read from the game. Dragging the picker shows the colour in the game as you choose it.

Fixed while going through it: New graph kept the last graph's name, so Save wrote over it; a key.pressed handler drew F6 into its field without writing it into the file, so the check said the key was missing while it was there on screen (and F6 is Drag'n Wash Localization's dump key — the default is F8 now); fields were wide enough to push a block's own buttons onto a line of their own; after a save the bar still said not saved yet and Rename stayed off; Run refused a graph that had been stopped, which is right for an event arriving and wrong for a person pressing the button; and a new block's id climbed for ever, so a file whose blocks had all been removed started again at h12.

A page that fits its window

Below 1000 px the problems and the log go under the blocks; below 640 px it is one column, with the list of graphs on top. A window of 700 px used to leave the blocks 30 px wide.

Opening the place a graph is about

inspector.level.get (read), inspector.scene.load and inspector.level.start (writes): what the game is playing, and loading the scene or starting the level a graph is about without going back to the game to click through a menu. The two writes are for the console and the page alone — an AI client never sees them, and neither does a graph.

Who needs this

Anyone writing graphs. For playing, none of this is needed: developer tools are off by default, and so is the Bridge.

The full list of changes is in CHANGELOG.md. The artwork in the zip is not under the code's licence; CREDITS.txt says whose it is.


日本語

グラフのエディターを「実際に作業できる道具」にし、ゲームからそこへ入る道を付けました。1.4.2 に続く更新で、変更はすべて追加です。

プラグイン バージョン
Drag'n Wash ModFramework(中核) 1.4.3 変更なし。リリースに合わせる
プリローダーのパッチャー 1.4.3 変更なし。中核に合わせる
Bridge 0.1.2 Open page と Graphs のボタン、エディター本体
Graphs 0.1.2 Rename・Delete・Reload、止めたグラフの Run
Inspector 1.1.2 Console とページからシーン・レベルを開く
そのほか 変更なし 1.4.2 と同じ

エディターへの入り口

これまでページは、Inspector の Code 表示のメソッドからしか開けませんでした。ゲームのコードを読むにはそれでよいのですが、グラフを書きたい人には何の助けにもなりません。F1 のウィンドウの Bridge タブに、Open page(これまでどおりコードのグラフ)と Graphs(エディターを開いた状態)の 2 つを置きました。ページの中で表示は切り替えられます。ボタンの列も折り返すようにしました。

エディター、ひととおり

ボタンを端から押して回ったところ、「これが無いと成立しない」ものがいくつも見つかりました。全部入れてあります。

  • 変数。set 文はグラフが宣言した名前しか使えないのに、宣言する場所がありませんでした(=set が使えなかった)。グラフのブロックに、名前と初期値が並びます。
  • Rename と Delete。改名はファイルを移動します(複製が残りません)。Save は常に「いまの場所に書く」です。削除したファイルは <名前>.json.bak として同じ場所に残ります。
  • Reload。エディターの外で増減・変更されたファイルを読み直します。ファイルが消えたグラフは、開いて失敗する代わりに一覧でそう表示します。
  • どのハンドラーを Run するか(これまでは常に先頭でした)。
  • ハンドラーの only if(条件)と again while running(重なったときの動き)、グラフの 説明(Mods 画面に出ます)。
  • ログの Clear。
  • 値が色ならカラーピッカー、そして member の型(Color、Single)をゲームに聞いて表示します。ピッカーをドラッグすると、その色がゲームに即座に反映されます。

回りながら直したもの:New graph が前のグラフの名前を引き継いでいて、そのまま保存すると上書きになっていた/key.pressed のキーが画面に F6 と見えているのに、ファイルには書かれておらず「キーが無い」と検査で怒られた(しかも F6 は Drag'n Wash Localization のダンプキーなので、既定は F8 にしました)/入力欄が広すぎてブロックのボタンが次の行に落ちていた/保存後もバーが「not saved yet」のままで Rename も無効だった/Run が、止めたグラフを「このセッションはオフ」と断っていた(イベントが来たときは正しく、人がボタンを押したときには違います)/新しいブロックの id が増え続け、全部消したファイルで h12 から始まっていた。

窓の幅に合わせるページ

1000px を下回ると Problems と Log がブロックの下へ、640px を下回ると 1 カラムになり、グラフの一覧が上に来ます。700px の窓では、ブロックの領域が 30px しかありませんでした。

グラフが対象にしている場面を開く

inspector.level.get(読み取り)、inspector.scene.load と inspector.level.start(書き込み)。いまゲームが何を再生しているか、そしてグラフが対象にしているシーンやレベルを、ゲームに戻ってメニューを操作せずに開けます。書き込みの 2 つは Console とページ専用で、AI クライアントにもグラフにも出しません。

アップデートが必要な人

グラフを書く人です。遊ぶだけなら、ここにあるものは何も要りません。開発者ツールは既定でオフ、Bridge も既定でオフです。

変更の全部の一覧は CHANGELOG.md にあります。zip に入っている絵はコードのライセンスとは別のもので、誰のものかは CREDITS.txt に書いてあります。

Drag'n Wash ModFramework 1.4.2

Choose a tag to compare

@github-actions github-actions released this 20 Sep 12:49

Drag'n Wash ModFramework 1.4.2

Which mod has which key. A small one, on top of 1.4.1 from earlier today; additive, as before.

Plugin Version
Drag'n Wash ModFramework (core) 1.4.2 ModFramework.WhoElseUses
Preloader patcher 1.4.2 No change; follows the core
Graphs 0.1.1 A graph says who else answers its key
Everything else unchanged Same as 1.4.1

Two mods, one key

Every BepInEx plugin keeps its keyboard shortcuts in its own settings, and nobody asks anybody else. So two mods can sit on one key, each answer it, and neither of them know — which is the kind of thing a person spends an evening on before working out what is going on.

The framework can see all of them, so now it says so. A graph that answers key.pressed names the others:

F6 is also Drag'n Wash Localization: [Debug] DumpDialogueKey; both answer it.

It appears in the log, in the console's graphs, on the mod's Graphs page (Key shared) and in what the editor's page reads. It is worked out again at every reload, so it follows a key you change in the settings.

Nothing is refused. A player may well want one key to do two things, and only they can say; the framework's own F1 is still the one exception, because the window has to be reachable.

Found while setting up a demo: the two keys that were being used for it, F6 and F7, turned out to be Drag'n Wash Localization's dump keys — and nothing said so.

Who needs this

Anyone writing graphs. If you use Drag'n Wash Localization, keep the framework that came with its v1.4.0; nothing here changes how that mod behaves. For playing, none of this is needed.

The full list of changes is in CHANGELOG.md. The artwork in the zip is not under the code's licence; CREDITS.txt says whose it is.


日本語

どの Mod がどのキーを使っているかを、言うようになりました。今日の1.4.1に続く小さな更新で、変更はすべて追加です。

プラグイン バージョン
Drag'n Wash ModFramework(中核) 1.4.2 ModFramework.WhoElseUses
プリローダーのパッチャー 1.4.2 変更なし。中核に合わせる
Graphs 0.1.1 同じキーを使う Mod の名前を出します
そのほか 変更なし 1.4.1 と同じ

2 つの Mod が、同じキーを使っていたら

BepInEx の Mod は、ショートカットキーをそれぞれ自分の設定に持っていて、互いに聞き合うことはありません。ですから、2 つの Mod が同じキーに乗っていて、両方が反応していて、どちらもそれを知らない、ということが起こります。原因にたどり着くまでに一晩かかるたぐいの話です。

フレームワークからは全部見えるので、言うようにしました。key.pressed に答えるグラフは、同じキーを使っているほかの Mod の名前を出します。

F6 is also Drag'n Wash Localization: [Debug] DumpDialogueKey; both answer it.

出る場所は、ログ、Console の graphs、その Mod の Graphs ページ(Key shared)、そしてエディターのページです。読み込み直すたびに調べ直すので、設定でキーを変えれば表示も追いかけます。

拒否はしません。 1 つのキーに 2 つの仕事をさせたい人もいますし、それを決められるのは遊ぶ人だけだからです。フレームワーク自身の F1 だけは今までどおり使えません(窓が開けなくなるので)。

きっかけは、デモの準備でした。使おうとしていた F6 と F7 が、実は Drag'n Wash Localization のダンプ用のキーで、しかもそれを教えてくれるものが無かった、というだけの話です。

アップデートが必要な人

グラフを書く人です。Drag'n Wash Localization を使っている人は、その v1.4.0 に同梱されているものをそのままお使いください。今回の変更で、あの Mod の動きは変わりません。遊ぶだけなら、ここにあるものは何も要りません。

変更の全部の一覧は CHANGELOG.md にあります。zip に入っている絵はコードのライセンスとは別のもので、誰のものかは CREDITS.txt に書いてあります。

Drag'n Wash ModFramework 1.4.1

Choose a tag to compare

@github-actions github-actions released this 20 Sep 12:11

Drag'n Wash ModFramework 1.4.1

Mods with no code that do things, and the three things 1.4.0's notes promised about who changed what and did not deliver. Everything is additive: mods built on 1.4.0 need no change, and everything new is experimental — it may change, or go away, in a later version.

Plugin Version
Drag'n Wash ModFramework (core) 1.4.1 OperationArgs.Caller, and a take-back that can say it put nothing back
Preloader patcher 1.4.1 No change; follows the core
Graphs 0.1.0 (new) Runs mods with no code that do things
Overrides 0.1.1 The first three writes a graph may call, and one ledger of who changed what
Bridge 0.1.1 The editor on the page: blocks, nodes, and the page-only writes it needs
Inspector 1.1.1 The History lists what other mods change, and puts one back
Tool window, Dialogue, Assets, Text, Flags and saves unchanged Same as 1.4.0
Installer (installer/) unchanged Same Install.exe as 1.3.0

Graphs: mods with no code that do things (experimental)

A graph says when this happens, do these things: "when a scene loads, wait a second, count what it has, write a line to the log", "when this dialogue node starts, hide that object". It is a JSON file in a folder with a mod.json, like an overrides mod — and one mod can have both. Nothing is compiled and none of your code runs: a graph can only call the operations the libraries registered, the same ones the console's op offers.

What a player sees before it runs, on the mod's Graphs page: what each graph answers, what it reads, what it changes, what it needs, whether it is running, and a Stop for this session button that puts back what it changed. A graph cannot call a method by name, use reflection, read or write files of its own, open a connection or run forever; all the graphs together get a millisecond a frame, and one that fails three times in a row is switched off with its changes put back. Nothing it does outlives the session.

The first writes are the three the Overrides library already knew how to make and to put back, at a moment the graph chooses: objects.member.set, objects.material.set and objects.active.set.

Graphs (wiki)

The editor, on the Bridge's page (experimental)

The page the Bridge serves on your own computer has a Graphs tab beside the code graph. It lists the graphs, shows one as blocks — a hat block per handler, every operation of the registry with its parameters as slots, writes in their own colour — and checks as you type, with the same rules the game uses, naming the problem by statement id. Save writes the file into a data mod's graphs/ folder (making the mod when it does not exist, keeping what it replaced as .bak); Run starts a handler without waiting for its event; Stop ends the graph; and the log panel shows what the library is doing as it happens.

A block is picked up by its head and dropped where it should go — into an if's then, out of a loop, onto the + add row at the end of a list. The Nodes view draws the same file as boxes, with the flow running down the edges and a result named with as as a dashed wire to whatever reads it; a node opens its block, where the fields are.

Who changed what (the part 1.4.0 got wrong)

1.4.0's notes said a write operation's change would be listed in the Inspector's History, that two mods changing one value would be named, and that a change would be put back safely. The first two were not built, and the third could undo somebody else's change. All three are here now, and were tried in the game — on Windows and on the Steam Deck — with two graphs set on one value:

  • The Inspector's History lists what another mod changed, with who asked for it (graph:<mod>/<file>, console, page). One change can be put back from its row without stopping the graph. Undo last and Ctrl+Z pass them over — they are for your own edits — and they are not exported as overrides.
  • Two mods on one value are named once, in the log and on the mod's Graphs page: Also changed: cars/car_3 (2) active: Clash Test graphs/second.json. An overrides row and a graph meet in the same ledger, whatever path each of them spelled.
  • A take-back puts back only what it wrote itself. If somebody else has written that value since, it leaves it alone and says so, and what a stop reports is what it really put back.

Who needs this

People who make mods, and anyone who wants to try a mod with no code. If you use Drag'n Wash Localization, keep the framework that came with its v1.4.0 — nothing here changes how that mod behaves. For playing, none of this is needed: developer tools are off by default, and so is the Bridge.

The full list of changes is in CHANGELOG.md. The artwork in the zip is not under the code's licence; CREDITS.txt says whose it is.


日本語

コードのない Mod で、**何かを「する」**ものが作れるようになりました。あわせて、1.4.0 のリリースノートが「こうなります」と書いていながら実際には入っていなかった 3 つを直しています。変更はすべて追加で、1.4.0 向けに作った Mod はそのまま動きます。新しいものはすべて実験的な扱いで、あとのバージョンで変わることも、無くなることもあります。

プラグイン バージョン
Drag'n Wash ModFramework(中核) 1.4.1 OperationArgs.Caller と、「何も戻さなかった」と言える取り消し
プリローダーのパッチャー 1.4.1 変更なし。中核に合わせる
Graphs 0.1.0(新規) 何かを「する」コードのない Mod を動かします
Overrides 0.1.1 グラフが呼べる最初の書き込み 3 つと、誰が何を変えたかの台帳
Bridge 0.1.1 ページ上のエディター(ブロックとノード)と、そのためのページ専用の書き込み
Inspector 1.1.1 History にほかの Mod の変更が並び、1 件だけ戻せます
Tool window、Dialogue、Assets、Text、Flags and saves 変更なし 1.4.0 と同じ
インストーラー(installer/) 変更なし 1.3.0 と同じ Install.exe

Graphs:何かを「する」コードのない Mod(実験的)

グラフは「これが起きたら、これをする」を書いたものです。「シーンが読み込まれたら、1 秒待って、何があるか数えて、ログに 1 行書く」「この会話のノードが始まったら、あのオブジェクトを隠す」。mod.json のあるフォルダーに置く JSON のファイルで、overrides の Mod と同じ形です(1 つの Mod に両方入れられます)。コンパイルするものも、あなたのコードが走ることもありません。グラフが呼べるのは、各ライブラリが登録した操作だけ。Console の op が出しているものと同じです。

動く前に、遊ぶ人はその Mod の Graphs ページで中身を読めます。何のイベントに答えるか、何を読むか、何を変えるか、何が必要か、動いているかどうか。Stop for this session のボタンで止めれば、変えたものは元に戻ります。グラフには、メソッドを名前で呼ぶことも、リフレクションも、自前のファイルの読み書きも、通信も、終わらない実行もできません。すべてのグラフで 1 フレームあたり 1 ミリ秒を分け合い、3 回続けて失敗したものは変更を戻してオフになります。セッションを越えて残るものもありません。

最初の書き込みは、Overrides ライブラリがすでに「書き方と戻し方」を知っていた 3 つです。グラフが選んだときに実行されます:objects.member.set、objects.material.set、objects.active.set。

Graphs(wiki)

エディターは Bridge のページに(実験的)

Bridge がこの PC の中で出しているページに、コードのグラフと並んで Graphs タブが増えました。読み込まれているグラフが一覧され、1 つをブロックで表示します(ハンドラーごとの帽子ブロック、登録簿の操作と引数の差し込み口、書き込みは別の色)。入力のたびにゲームと同じ規則で検査し、問題は文の id で示します。Save はデータ Mod の graphs/ にファイルを書き(Mod が無ければ作り、置き換えたものは .bak で残します)、Run はイベントを待たずにハンドラーを始め、Stop はグラフを止めます。ログの欄には、ライブラリの動きがそのまま流れます。

ブロックは頭をつかんでドラッグし、置きたいところに落とせます(if の then の中へ、ループの外へ、並びの末尾の + add の行へ)。Nodes 表示は同じファイルを箱で描き、流れは辺をたどって下りていき、as で名前を付けた結果は、それを読む文への破線のワイヤーになります。ノードをクリックすると、そのブロックが開きます。

誰が何を変えたか(1.4.0 で間違えていたところ)

1.4.0 のリリースノートには、書き込み操作の変更が Inspector の History に並ぶこと、2 つの Mod が同じ値を変えたら知らせること、変更は安全に戻せることが書いてありました。前の 2 つは実装されておらず、3 つ目は他人の変更まで戻してしまう状態でした。3 つとも入れて、Windows と Steam Deck の両方で、同じ値を触る 2 つのグラフを使って確認しています。

  • Inspector の History に、ほかの Mod が変えたものが「誰が頼んだか」つきで並びます(graph:<mod>/<ファイル>、console、page)。その行から、グラフを止めずに 1 件だけ戻せます。Undo last と Ctrl+Z は自分の編集だけを対象にし、Export as overrides にも入りません。
  • 2 つの Mod が同じ値を変えたときは、ログとその Mod の Graphs ページで、1 度だけ両方の名前が出ます(Also changed: cars/car_3 (2) active: Clash Test graphs/second.json)。overrides の行とグラフも同じ台帳で出会うので、パスの書き方が違っていても気づきます。
  • 取り消しは、自分が書いた値だけを戻します。 あとから誰かが書き換えていたら、そこには触らずログに残します。停止したときに出る件数も、実際に戻した数です。

アップデートが必要な人

Mod を作る人と、コードのない Mod を試したい人です。Drag'n Wash Localization を使っている人は、その v1.4.0 に同梱されているものをそのままお使いください。今回の変更で、あの Mod の動きは変わりません。遊ぶだけなら、ここにあるものは何も要りません。開発者ツールは既定でオフ、Bridge も既定でオフです。

変更の全部の一覧は CHANGELOG.md にあります。zip に入っている絵はコードのライセンスとは別のもので、誰のものかは CREDITS.txt に書いてあります。

Drag'n Wash ModFramework 1.4.0

Choose a tag to compare

@github-actions github-actions released this 20 Sep 05:56

Drag'n Wash ModFramework 1.4.0

Mods with no code, a registry of what every library can do, and a door for AI clients on your own computer. Released together with Drag'n Wash Localization v1.4.0. Everything new is additive: mods built on 1.3 need no change, and everything new is experimental — it may change, or go away, in a later version.

Plugin Version
Drag'n Wash ModFramework (core) 1.4.0 The operations registry and its events, one loader for mods with no code, Json, ModFramework.NameOf
Preloader patcher 1.4.0 No change; follows the core
Tool window 1.2.0 The console's op, log.read, real mouse and key input on the Steam Deck
Dialogue 1.2.0 A speaker for lines the script does not name, and its read operations
Assets 1.2.0 Texture replacements per language, which can be taken back
Text 1.1.0 Read operations: the rewriters, and the text on screen
Flags and saves 1.1.0 Read operations: the slots, the flags and what the catalog says
Inspector 1.1.0 The object explorer, Animators, Rigidbodies, scenes and levels, Export as overrides, the code graph
Overrides 0.1.0 (new) Runs mods that have no code
Bridge 0.1.0 (new) The read operations for AI clients over MCP, and the code graph's page
Installer (installer/) unchanged Same Install.exe as 1.3.0

Mods with no code (experimental)

A folder in BepInEx/plugins with a mod.json and an overrides/ folder changes values in the game — a light's colour, a speed, a material — with no DLL and no code at all. It is listed on the Mods screen like any other mod, with an on/off switch, and it is taken back cleanly: nothing is patched, and what the game had comes back when you switch it off.

  • When two such mods change the same thing, the later one wins and the log names both.
  • The Inspector's Export as overrides turns what you changed in a session into one of these mods, ready to share.
  • Overrides (wiki)

The operations registry (experimental)

Every library now registers what it can do as a named operation — inspector.objects.find, saves.flags.list, scene.list — with its parameters, whether it reads or changes something, and who may call it. One registry, and everything else reads from it: the console's op command, the Bridge below, and the graphs that come next.

op                        every operation, by library
op help scene.list        what it does and what it takes
op saves.flags.list slot=1

Operations (wiki)

The Bridge, and the game's code as a graph (experimental)

The Bridge offers the read operations to AI clients on this computer over MCP (http://127.0.0.1:47821/mcp). It is off by default, needs the developer tools, listens only to this computer, and checks a token and the caller on every request. It declares itself on the Mods screen like any mod that goes online.

It also serves the code graph: a method of the game's own code drawn as blocks and branches, with the calls, the fields, the Harmony patches other mods put on it and the UnityEvent listeners that lead to it. Open it from the Inspector's Graph buttons, in your browser or in CodeGraph.exe beside the Bridge.

Bridge (wiki) · Code graph (wiki)

The Inspector, a good deal wider (experimental)

  • Objects: every loaded object by kind — textures, sprites, materials, shaders, meshes, sounds, animations, fonts, the game's own data — with a fact per row, a search by name or t:Type, and Used by, which finds every place an object is used. About 8,500 objects listed in under 120 ms.
  • Animators: parameters and layer weights as editable rows, what each layer plays and how far through, pause and step.
  • Rigidbodies: centre of mass and velocity in the game view, a list fastest first, Stop / Kinematic / Sleep, and pause physics with a single step.
  • Scenes and levels: the level running, its dragon and weather, start any level, load any scene. While you do, the game's saves are held back until the title screen, so trying things cannot move your progress.
  • The left pane's lists are walked with the arrow keys, and the tree keeps names in view in a narrow window.
  • Inspector (wiki)

On the Steam Deck

The F1 window takes real input there now: a trackpad click (or A, or R2) is a real mouse button, the sticks are the wheel, and the d-pad walks a list a row at a time. Text fields, drags, sliders and scroll bars all work — before, only buttons did. Checked on the Deck.

Who should update

Mod makers, and anyone who wants to try a mod with no code. Players who use Drag'n Wash Localization get this with its v1.4.0. Nothing here is needed to play: the developer tools stay off by default, and so does the Bridge.

The full list of changes is in CHANGELOG.md. The artwork in this zip is not under the code's licence; CREDITS.txt says whose it is.


日本語

コードのない Mod、各ライブラリができることの登録簿、そして自分の PC の AI クライアント向けの窓口です。Drag'n Wash Localization v1.4.0 と一緒にリリースしました。新しいものはすべて追加なので、1.3 向けに作った Mod は変更なしで動きます。そして今回の新機能はすべて実験的な扱いです(あとのバージョンで変わることも、無くなることもあります)。

プラグイン バージョン
Drag'n Wash ModFramework(中核) 1.4.0 操作の登録簿とそのイベント、コードのない Mod の共通ローダー、Json、ModFramework.NameOf
プリローダーのパッチャー 1.4.0 変更なし。中核に合わせる
Tool window 1.2.0 Console の op、log.read、Steam Deck での本物のマウス・キー入力
Dialogue 1.2.0 脚本が名前を書いていない行の話者の推定と、読み取り操作
Assets 1.2.0 言語ごとのテクスチャ差し替え(元に戻せます)
Text 1.1.0 読み取り操作:書き換えている Mod の一覧と、画面に出ている文字
Flags and saves 1.1.0 読み取り操作:セーブスロット、フラグ、フラグ表の説明
Inspector 1.1.0 オブジェクトエクスプローラー、Animator、Rigidbody、シーンとレベル、Export as overrides、コードのグラフ
Overrides 0.1.0(新規) コードのない Mod を動かします
Bridge 0.1.0(新規) 読み取り操作を MCP で AI クライアントへ。コードのグラフのページも
インストーラー(installer/) 変更なし 1.3.0 と同じ Install.exe

コードのない Mod(実験的)

BepInEx/plugins に mod.json と overrides/ フォルダーを置いたフォルダーが、ゲームの値を書き換えます(ライトの色、速さ、マテリアルなど)。DLL もコードも要りません。ほかの Mod と同じように Mods 画面に出て、オン・オフもできます。コードを書き換えるわけではないので、オフにすればゲーム本来の値がそのまま戻ります。

  • 2 つの Mod が同じところを書き換えたときは、あとに読まれたほうが勝ち、ログに両方の名前が出ます。
  • Inspector の Export as overrides で、そのセッションでいじった結果を、この形の Mod として書き出せます。そのまま配れます。
  • Overrides(wiki)

操作の登録簿(実験的)

各ライブラリが、できることを名前つきの操作として登録するようになりました(inspector.objects.find、saves.flags.list、scene.list など)。引数、読むだけか変えるか、誰が呼んでよいかも一緒です。登録簿は 1 つで、ほかはそこから読むだけです。Console の op コマンド、下の Bridge、そして次に来るグラフも同じ登録簿を見ます。

op                        ライブラリごとの操作の一覧
op help scene.list        何をする操作で、何を受け取るか
op saves.flags.list slot=1

操作の登録簿(wiki)

Bridge と、ゲームのコードのグラフ(実験的)

Bridge は、読み取りの操作を、この PC の AI クライアントに MCP で渡します(http://127.0.0.1:47821/mcp)。既定はオフで、開発者ツールが要り、この PC の中だけを聞き、毎回トークンと呼び出し元を確かめます。外と通信する Mod として、Mods 画面にもそう出ます。

コードのグラフもここが出します。ゲーム自身のコードのメソッドを、ブロックと分岐で描き、呼び出し、フィールド、ほかの Mod が当てている Harmony のパッチ、そこへつながる UnityEvent の呼び先まで見られます。Inspector の Graph ボタンから、ブラウザか、Bridge の隣にある CodeGraph.exe で開きます。

Bridge(wiki) · コードのグラフ(wiki)

ぐっと広がった Inspector(実験的)

  • Objects:読み込まれているものを種類別に全部(テクスチャ、スプライト、マテリアル、シェーダー、メッシュ、音、アニメーション、フォント、ゲーム自身のデータ)。行ごとにひと言の事実、名前や t:Type での検索、そして Used by でどこで使われているかを探せます。約 8,500 個を 120 ms 以内で一覧にします。
  • Animator:パラメーターとレイヤーの重みを行として編集でき、各レイヤーが何をどこまで再生しているかも見えます。一時停止とコマ送りも。
  • Rigidbody:重心と速度をゲーム画面に描き、速い順の一覧、Stop / Kinematic / Sleep、物理の一時停止と 1 ステップ送り。
  • シーンとレベル:いま動いているレベル、その竜と天気。好きなレベルを始め、好きなシーンを読み込めます。その間はタイトル画面に戻るまでゲームのセーブを書き込まないので、試しても進行状況は動きません。
  • 左の欄の一覧は矢印キーでたどれます。狭い窓でも、ツリーの名前が見えるようになりました。
  • Inspector(wiki)

Steam Deck では

F1 の窓が、本物の入力を受け取るようになりました。トラックパッドの押下(A や R2 でも)は本物のマウスボタン、スティックはホイール、十字キーは一覧を 1 行ずつ移動します。入力欄・ドラッグ・スライダー・スクロールバーも使えます(以前はボタンだけでした)。Deck の実機で確認しています。

アップデートが必要な人

Mod を作る人と、コードのない Mod を試したい人です。Drag'n Wash Localization を使っている人は、その v1.4.0 に同梱されています。遊ぶだけなら、ここにあるものは何も要りません。開発者ツールは既定でオフ、Bridge も既定でオフです。

変更の全部の一覧は CHANGELOG.md にあります。zip に入っている絵はコードのライセンスとは別のもので、誰のものかは CREDITS.txt に書いてあります。

Drag'n Wash ModFramework 1.3.0

Choose a tag to compare

@github-actions github-actions released this 19 Sep 01:31

Drag'n Wash ModFramework 1.3.0

Crash reports with a window that tells you what happened, the fix for the Direct3D 12 crash they found, and sliders for the game's Options screen. Released together with Drag'n Wash Localization v1.3.0. Everything new is additive: mods built on 1.2 need no change.

Plugin Version
Drag'n Wash ModFramework (core) 1.3.0 Crash reports and their window, the Direct3D 12 font atlas fix, GameOptions.AddSlider
Preloader patcher 1.3.0 No change; follows the core
Tool window 1.1.1 The Console shows translated text on Direct3D 12
Assets 1.1.1 Tells the crash reports which language is in use
Dialogue, Text, Flags and saves, Inspector unchanged
Installer (installer/) unchanged Same Install.exe as 1.2.0

Crash reports (experimental)

  • Each session keeps a short record in BepInEx/CrashReports: versions, graphics, the mods loaded, scene changes, errors, the language in use. When the game crashes or freezes, it becomes a report folder with report.txt, and Unity's crash dump or a dump of the freeze.
  • A window outside the game (CrashReporter.exe, Windows) opens right after a crash: "Oops, the kobold slipped!", what most likely happened, what you can do, and buttons to open the report folder or copy the report for a bug report. It speaks the language you chose in the game (English, Japanese, Chinese for now). After a normal exit, nothing appears.
  • Nothing is sent anywhere. Attach report.txt to a bug report; share dumps only privately, as they hold part of the game's memory.
  • Settings under Options → Mods → Drag'n Wash ModFramework → Diagnostics. Mods can add their own notes with CrashReports.Note. docs/CRASH_REPORTS.md

The Direct3D 12 crash (Unity UUM-140564)

The crash reports caught it: opening the Tool window made Unity's text engine send the same font atlas to the graphics card 32 times in one frame, and Unity crashed while tidying up after that burst. On Direct3D 12 the framework now sends each changed font atlas once per frame, for the IMGUI text and the game's TextMeshPro text alike. With it, the Console shows translated text instead of ?.

Switching windows in Exclusive fullscreen on Direct3D 12 can still freeze the game; that is the game's and Unity's, and the framework leaves your choice alone. If it happens, the crash report window suggests Fullscreen or -force-d3d11.

Sliders in the game's Options screen

GameOptions.AddSlider (#39) adds a slider row built by the game itself, following its Options flow (preview, Save, Back, Set Default). Thanks to Extrudeous-101 for the request.

GameOptions.AddSlider("com.example.mymod.speed", "Speed", 0.1f, 0.1f, 10f,
    getSaved: () => _speed.Value, save: value => _speed.Value = value);

Who should update

Everyone on Direct3D 12 (the Windows default), and mod makers who want sliders or crash reports. If you use Drag'n Wash Localization, install its v1.3.0, which includes this.


日本語

クラッシュのときに何が起きたかを知らせるクラッシュレポートと、それで突き止めた Direct3D 12 のクラッシュの修正、ゲームのオプション画面のスライダーです。Drag'n Wash Localization v1.3.0 と一緒にリリースしました。新しいものはすべて追加なので、1.2 向けに作った Mod は変更なしで動きます。

プラグイン バージョン
Drag'n Wash ModFramework(中核) 1.3.0 クラッシュレポートとそのウィンドウ、Direct3D 12 のフォントのアトラスの修正、GameOptions.AddSlider
プリローダーのパッチャー 1.3.0 変更なし。中核に合わせる
Tool window 1.1.1 Direct3D 12 でも Console に訳が表示される
Assets 1.1.1 使っている言語をクラッシュレポートに伝える
Dialogue、Text、Flags and saves、Inspector 変更なし
インストーラー(installer/) 変更なし 1.2.0 と同じ Install.exe

クラッシュレポート(実験的)

  • セッションごとに、短い記録を BepInEx/CrashReports に残します(バージョン、グラフィックス、読み込んだ Mod、シーンの切り替え、エラー、使っている言語)。ゲームが落ちたり固まったりすると、それが report.txt と、Unity のクラッシュダンプかフリーズ時のダンプの入ったレポートになります。
  • ゲームの外のウィンドウ(CrashReporter.exe、Windows)が、クラッシュのすぐあとに開きます。「おっと、コボルトが足をすべらせた!」と、何が起きたと考えられるか、できること、レポートのフォルダーを開くボタンと、不具合の報告用にレポートをコピーするボタン。ゲームで選んだ言語で表示します(今は英語・日本語・中国語)。普通に終了したときは何も出ません。
  • どこにも送信しません。不具合の報告には report.txt を添えてください。ダンプにはゲームのメモリの一部が入るので、個別にだけ渡してください。
  • 設定は オプション → Mods → Drag'n Wash ModFramework → Diagnostics にあります。Mod は CrashReports.Note で自分の記録を足せます。docs/CRASH_REPORTS.ja.md

Direct3D 12 のクラッシュ(Unity UUM-140564)

クラッシュレポートが原因を捉えました。Tool window を開くと、Unity の文字の仕組みが同じフォントのアトラスを 1 フレームに 32 回グラフィックスカードへ送り、その後片付けの途中で Unity が落ちていました。Direct3D 12 では、変わったフォントのアトラスを 1 フレームに 1 回だけ送るようにしました(IMGUI の文字も、ゲームの TextMeshPro の文字も)。あわせて、Console で訳が ? ではなく表示されるようになりました。

Direct3D 12 の排他的フルスクリーンでウィンドウを切り替えると、固まることがまだあります。これはゲームと Unity の問題で、フレームワークは選んだ設定を変えません。起きたときは、クラッシュレポートのウィンドウがフルスクリーンか -force-d3d11 を案内します。

ゲームのオプション画面にスライダー

GameOptions.AddSlider(#39)で、ゲーム自身が作るスライダーの行を足せます。オプション画面の流れ(試しに反映、保存、戻る、既定に戻す)にそのまま従います。要望をくれた Extrudeous-101 さんに感謝します。

アップデートが必要な人

Direct3D 12(Windows の標準)で遊んでいる人全員と、スライダーやクラッシュレポートを使いたい Mod の作者です。Drag'n Wash Localization を使っている場合は、これを含む v1.3.0 を入れてください。

Drag'n Wash ModFramework 1.2.1

Choose a tag to compare

@github-actions github-actions released this 18 Sep 17:32

Drag'n Wash ModFramework 1.2.1

A fix for saves made after the game update of September 14, 2026. Released together with Drag'n Wash Localization v1.2.1.

Plugin Version
Flags and saves 1.0.1 Finds saves in the game's new save folder; slots in order
Drag'n Wash ModFramework (core) 1.2.1 No change; carries the release version
Preloader patcher 1.2.1 No change; follows the core
Tool window, Assets, Dialogue, Text, Inspector unchanged
Installer (installer/) unchanged Same Install.exe as 1.2.0

Flags and saves 1.0.1

Saves made after the game update show up again (#40). The game's update of September 14 moved each slot's save from <SteamID>_slot<N>/savegame.dgn to <SteamID>/slot<N>/savegame.dgn, and reads the old place only for a slot that has no new save yet. The Saves tab looked only in the old place, so a slot disappeared from it as soon as it was saved in game, and it could show "No save files found" while the game itself had every save. Your saves were never lost; the tab simply did not see them.

  • GameSaves.Slots() finds saves in both places, under the same slot names as before, so each slot's snapshot history carries on across the update.
  • GameSaves.SavePath() returns the file the game actually reads.
  • Restoring a snapshot taken before the update into a slot that uses the new place adds the {"version":1} entry the game now expects, so the game loads it.
  • Slots are listed in slot order (1, 2, 3) instead of most recently written first.

Thanks to kawanimono for the report and for tracking down the folder change.

Who should update

Anyone who uses the Saves tab. Nothing else changed. If you use Drag'n Wash Localization, install its v1.2.1, which includes this.


日本語

2026 年 9 月 14 日のゲームのアップデート以降に作ったセーブについての修正です。Drag'n Wash Localization v1.2.1 と一緒にリリースしました。

プラグイン バージョン
Flags and saves 1.0.1 ゲームの新しいセーブの場所からもセーブを見つける。スロットを番号順に
Drag'n Wash ModFramework(中核) 1.2.1 変更なし。リリースのバージョンに合わせただけ
プリローダーのパッチャー 1.2.1 変更なし。中核に合わせる
Tool window、Assets、Dialogue、Text、Inspector 変更なし
インストーラー(installer/) 変更なし 1.2.0 と同じ Install.exe

Flags and saves 1.0.1

ゲームのアップデート以降に作ったセーブが、また表示されるようになりました(#40)。9 月 14 日のゲームのアップデートで、各スロットのセーブの置き場所が <SteamID>_slot<N>/savegame.dgn から <SteamID>/slot<N>/savegame.dgn に変わりました。古い場所は、新しいセーブがまだないスロットを読むときだけ使われます。Saves タブは古い場所しか見ていなかったので、ゲームで一度保存するとそのスロットがタブから消え、ゲームにはすべてのセーブがあるのに「No save files found」と出ることがありました。セーブが失われたことはありません。タブから見えていなかっただけです。

  • GameSaves.Slots() は新旧どちらの場所のセーブも、今までと同じスロット名で見つけます。スロットごとのスナップショットの履歴は、アップデートをまたいで続きます。
  • GameSaves.SavePath() は、ゲームが実際に読むファイルを返します。
  • アップデート前に取ったスナップショットを、新しい場所を使うスロットに戻すときは、ゲームが今必要とする {"version":1} を足すので、ゲームで読み込めます。
  • スロットは、最後に保存した順ではなく番号順(1、2、3)に並びます。

報告と、フォルダーの変化を突き止めてくれた kawanimono さんに感謝します。

アップデートが必要な人

Saves タブを使う人です。ほかの変更はありません。Drag'n Wash Localization を使っている場合は、これを含む v1.2.1 を入れてください。

Drag'n Wash ModFramework 1.2.0

Choose a tag to compare

@github-actions github-actions released this 17 Sep 13:45

Drag'n Wash ModFramework 1.2.0

The framework's second feature release. The core goes to 1.2.0 and three of the five libraries to 1.1.0. Nothing a mod built on 1.0.0 or 1.1.x uses has changed; every addition is new API. Released together with Drag'n Wash Localization v1.2.0, which needs this version.

Plugin Version
Drag'n Wash ModFramework (core) 1.2.0 Developer tools switch, text and key settings on the Mods screen, GameEvents, SettingMeta, reloading a mod while the game runs, mods that go online say so, a new logo and Mods button
Preloader patcher 1.2.0 Unchanged; follows the core
Tool window 1.1.0 Console tab, drawing over the game
Assets 1.1.0 Texture replacements, reloading, the Assets tab with previews
Dialogue 1.1.0 Stable line keys
Inspector 1.0.0, experimental New library: an Inspector tab in the Tool window, with a Code view and a debug view
Text, Flags and saves 1.0.0 Unchanged
Installer (installer/) unchanged Same Install.exe as 1.1.0

Core 1.2.0

One switch for everything meant for mod makers. Options → Mods → Drag'n Wash ModFramework → Developer tools, off by default. While it is off, the F1 window stays closed, texture reloading is refused, and the mods built on the framework keep their own exports and hot reload off too. Someone who only installed a mod to play never sees a debug window or gets a folder of exported files. For authors: DeveloperTools.Enabled, Changed, WhenEnabled, and GUIDE rule 8.

The Mods screen edits more. A mod's settings page used to handle on/off, numbers and choices; strings, key bindings, colours and anything else BepInEx stores as text could only be changed in the config file. Now they get a text field (Enter applies; a value the config parser refuses is put back with the reason), and a key binding also gets Capture key: press the key you want, with the modifiers held.

Mods can shape their settings page. SettingMeta and SectionMeta in a ConfigDescription's tags give an entry a display name, an order, an Advanced flag (hidden until Show advanced settings at the top of the page is on) and a RequiresRestart note; a section gets a display name, a description and an order. ConfigurationManager's IsAdvanced, DispName and Order are read the same way, so a mod that already has them needs no change. The framework's own settings use it. Wiki: Settings meta

GameEvents: the game's events, one mod at a time. A handler subscribed straight to SceneManager.sceneLoaded that throws stops every mod that subscribed after it, and nobody can tell which mod it was. GameEvents.OnSceneLoaded, OnSceneUnloaded, OnGameStarted and OnQuitting take the mod's GUID and run each handler on its own: one that throws is logged, named on the Mods screen under its mod, and switched off after three failures in a row, while the others keep running. There is no per-frame event on purpose. The Assets library uses it; GUIDE rule 9 asks other mods to. Wiki: Game events

Mods that go online say so. A mod with network features is also where malware could hide, so going online is now something a mod states openly. ModInfo.Network lists each host a mod connects to, what for, what is sent and how to turn it off. The Mods screen tags such mods Online and gives them an Internet page, and NetworkWatch (on by default, Watch connections) notes which mod actually connected where and marks, in warning colour, a connection nobody declared. It only watches: nothing is blocked, and it is not a security boundary. The framework declares its own once-a-day update check. GUIDE rule 11, Wiki: Going online.

Reload a mod without restarting the game (developer tools). A mod that says it is reloadable (ModInfo.Reloadable) is swapped for its new build while the game runs: its registrations and Harmony patches are taken out by its GUID, and the new plugin is started in its place. Build to <Mod>.dll.new next to the DLL and it is picked up by itself; mods reload <guid> does it by hand. Libraries are never reloaded. GUIDE rule 10, docs/MOD_RELOAD.md.

GameHooks.Require also takes Harmony's "Type:Method" in one string, the form the Inspector copies.

GameHooks.Unavailable(guid, feature, reason) marks a feature unavailable for a reason other than a missing game member (refused on this renderer, switched off after a crash), shown on the Mods screen like a failed check.

A new logo, and a drawn Mods button

The framework has a new logo and Mods screen icon, a sponge and a gear, drawn by NotaGames (@NotaGames) after the game's own logo, with the developers' OK. The Options screen's Mods button is drawn now, in the game's menu style, by Mister ERIO (@mistererio). Thank you!

Tool window 1.1.0

Console tab. Every BepInEx log line as it happens, from every mod and from Unity, with its level and source, in colour, the last 2,000 kept. Which levels and sources are shown is the user's choice, from the tab's buttons, from commands or from the Mods screen, and it is remembered. Below the log, a command line with completion: help, log, mods, scene, clear; the Assets library adds assets, and any mod adds its own with ToolWindow.AddCommand(guid, name, help, run). A command that throws prints the error in red with the mod that owns it. mods network lists what each mod declares online and what it was seen connecting to; mods reload and mods watch drive reloading. There is no scripting language. docs/CONSOLE.md

Drawing over the game. ToolWindow.AddOverlay, BlockGameInput and Drawable are public, for tabs that work in the game view, as the Inspector does.

Assets 1.1.0

Texture replacements. A mod ships BepInEx/plugins/<Mod>/assets/textures/<texture name>.png and the library puts it into every material and sprite that used the game texture of that name, read at startup (when uploads are safe on Direct3D 12) and applied at each scene load. Two mods replacing the same texture are both named in the log and on the Assets tab; nothing is overridden silently. Meshes and shaders are not covered yet.

The Assets tab (F1) lists loaded textures with a filter, shows which replacements are in place and where two mods clashed, and has Apply replacements and Reload files. Reloading re-reads changed PNGs while the game runs; [Reload] WatchFiles does it by itself when a file changes, never on Direct3D 12. A crash during a reload is caught at the next start through a marker file: the Mods screen says so and reloading stays off until turned back on. Clicking a texture shows a preview of it, and Inspect opens the material that uses it in the Inspector. AssetCatalog gives mods the same listings. docs/ASSET_TOOL.md

Inspector 1.0.0 (experimental, and it stays that way)

A new library on top of the Tool window, for people who make mods: an Inspector tab with the scene's objects (a tree with search, or Pick to click one in the game), their components and materials, and every field and property, readable live and editable (numbers by typing or by dragging the field, vectors and colours per component, a colour picker with a square and a hue bar). A transform gizmo (Move / Rotate / Scale) in the game view, a History of every edit with Revert / Redo and Undo, Reset per row and per axis, keyboard shortcuts as in Unity's scene view (W/E/R/Q, P, H, T, Ctrl+Z). Nothing is saved: an edit lasts until the scene reloads or the game quits.

  • Code view per component: its type, its methods, the Harmony patches other mods put on them and whose they are, its UnityEvents' listeners, and a method's IL. Copy gives Type:Method; Patch copies a whole Harmony patch, the GameHooks.Require check included, with the parameters Harmony fills in, ready to paste into a mod.
  • Debug view: every renderer the camera sees, the selection's children or what the search matches, outlined at once, plus colliders, triggers and lights drawn in their own shape. A mesh collider that only the physics engine can describe is scanned with rays and labelled as an estimate.
  • Bones (click a joint to select it), Wireframe, a free camera, and Edit mesh vertices, which is experimental even within the Inspector.

The Inspector is experimental and marked so on the Mods screen: it may change or go away, and an edit made with it can break the running session. docs/INSPECTOR.md

Installing it by hand. The Inspector is not in the installers that mods ship, and Drag'n Wash Localization leaves it out, so it has to be installed by hand: download DragNWash.ModFramework-1.2.0.zip from this page and copy its BepInEx/plugins/DragNWash.ModFramework.Inspector folder into the game's BepInEx/plugins folder. Then turn on Developer tools (Options → Mods → Drag'n Wash ModFramework) and press F1. To remove it, delete that folder.

Dialogue 1.1.0

Stable line keys. A translation or any per-line mod used to lose a line whenever a game update edited its English. LineKey and LineResolver identify a line by its Yarn line ID first, then by the exact t...

Read more

Drag'n Wash ModFramework 1.1.2

Choose a tag to compare

@TomXV TomXV released this 15 Sep 09:17
c50116e

Drag'n Wash ModFramework 1.1.2

A small update: the Mods screen icon (BepInEx/plugins/DragNWash.ModFramework/icon.png) is now the "Dg" monogram from the new hand-made logo. Released together with Drag'n Wash Localization v1.1.2.

Plugin Version
Drag'n Wash ModFramework (core) 1.1.2 Hand-made Mods screen icon
Preloader patcher 1.1.2 Unchanged; follows the core
Text, Dialogue, Tool window, Assets, Flags and saves 1.0.0 Unchanged
Installer (installer/) unchanged Same Install.exe as 1.1.0

Everything else is as in 1.1.0: update notices, the shared installer and uninstalling from the Mods screen.

This is an unofficial fan project, not affiliated with Gator Dragon Games, and contains no game files.


Drag'n Wash ModFramework 1.1.2(日本語)

小さな更新です。Mods 画面のアイコン(BepInEx/plugins/DragNWash.ModFramework/icon.png)を、新しい手作りのロゴの「Dg」に差し替えました。Drag'n Wash Localization v1.1.2 と一緒にリリースします。

プラグイン バージョン
Drag'n Wash ModFramework(中核) 1.1.2 手作りの Mods 画面のアイコン
プリローダーのパッチャー 1.1.2 変更なし。中核に合わせる
Text、Dialogue、Tool window、Assets、Flags and saves 1.0.0 変更なし
インストーラー(installer/) 変更なし 1.1.0 と同じ Install.exe

そのほかは 1.1.0 と同じです(更新のお知らせ、共通インストーラー、Mods 画面からのアンインストール)。

非公式のファン制作物で、Gator Dragon Games とは関係ありません。ゲームのファイルは含みません。