Skip to content

tsuzukima/rpg_rt_container

Repository files navigation

RPG_RT_container

RPG_RT_container は、RPG Maker 2000 製ゲームの RPG_RT.exe を disk 上で書き換えずに起動し、外部 DLL の runtime hook で互換性補助を行う 非公式ツールです。

このプロジェクトは RPG Maker 2000 / RPGツクール2000 専用です。 RPG Maker 2003、XP、VX、MV、MZ、EasyRPG Player など、他の runtime は対象外です。

Gotcha Gotcha Games Inc. の公式 runtime ではありません。

License

この repository のソースコードは MIT License で提供されます。 RPG Maker 2000 / RPGツクール2000 製ゲームと一緒に配布する場合の注意は RPG_RT_CONTAINER_LICENSE.txt を参照してください。

Releases

https://github.com/tsuzukima/rpg_rt_container/releases

最新版はここから入手できます。

作成について

GPT-5.5 および Opus 4.7 の補助を用いて編集されています。

できること

  • 正規の RPG_RT.exe を suspended 起動し、rt_hook.dll を注入してから再開
  • OGG を必要時に一時 WAV へ変換して Music / Sound から読み込ませる
  • 既存の .wav / .mp3 / .mid がある場合は、互換性優先で元 file を使う
  • .mid 要求は横取りせず、RPG_RT 本来の MIDI 処理へ任せる
  • F1 で 描画 FPS 表示
  • F2 で vintage color filter
  • F3 で CRT display 風 post process を切り替え
  • F4 で borderless fullscreen 風表示へ切り替え
  • F5 で 1x/2x/3x/4x window size 切り替え
  • F6 で window の高さを維持したまま 4:3 / 16:9 を切り替え
  • F7 で Screenshot フォルダへ PNG screenshot を保存
  • F8 で System 画像由来の背景 pattern 表示を on/off

実験的・開発中の機能

  • iniを通じた任意設定で、現実の年月日時分秒を RM2K 変数へ毎秒オーバーライド

できないこと

  • RPG_RT.exe 以外への注入
  • RPG Maker 2003 / XP / VX / MV / MZ など、他の runtime への対応
  • EasyRPG Player への対応
  • .mid 要求を同名 .ogg に差し替えること

editor 側の OGG 対応は rpg2000_ogg_hooker を使ってください。

Build

Windows の 32-bit Visual Studio toolchain が必要です。

cmake -S . -B build -A Win32
cmake --build build --config Release

生成される主な成果物:

  • build\Release\RPG_RT_container.exe
  • build\Release\rt_hook.dll

ゲームフォルダへの配置

正規に配布・利用できる RPG Maker 2000 / RPGツクール2000 製ゲームのフォルダに、次を置きます。

  • RPG_RT_container.exe
  • rt_hook.dll
  • rt_container.ini

同じフォルダに、ゲーム側の正規 RPG_RT.exe が存在する必要があります。

動作確認済みの RPG Maker 2000 / RPGツクール2000 用 RPG_RT.exe の SHA256 は d2409dcf5a0f24197a0556b206d7a3d5fce47780f2e959fd6a689b3d9a1f1a52 です。 rt_container.ini[compat] expected_rpg_rt_sha256 にこの値を入れると、 想定外の RPG_RT.exe では起動を止められます。

起動

通常起動:

上記のファイル配置を行ったあとに RPG_RT_container.exe を起動して下さい。

RPG_RT.exe へ追加の引数を渡したい場合は、container にそのまま渡せば転送されます。 container 側の test flag (--stb-only 等の decoder chain flag) は launcher 側で 消費され、RPG_RT.exe には渡されません。

通常起動でも rt_container.log を launcher folder に書き出します。

OGG overlay

Music\foo.wav / Music\foo.mp3 または Sound\foo.wav / Sound\foo.mp3 が無く、同名の .ogg が ある場合だけ、一時 WAV に変換して RPG_RT に読ませます。

既存の WAV/MP3/MID がある場合は、互換性優先で元 file を使います。 .mid だけがある場合は、RPG_RT 本来の MIDI 再生に任せます。 .mid 要求を同名 .ogg へ解決することはありません。

..\Music\foo.wav../Sound/hoge のような相対 path も、ゲームフォルダ直下の Music / Sound として試します。

Sound は RPG_RT 内部の TWaveBuffer 読み込み入口でも補助し、DirectSound buffer 作成前に 一時 WAV へ差し替えます。

既定の game-local cache:

temp\music\<pid>\Music\...
temp\sound\<pid>\Sound\...

[audio] cache_mode=session_temp を使うと、保存先は %TEMP%\RPG_RT_container\<pid>\ になります。

cache 合計は [audio] max_temp_mb (既定 2048 MB) を上限に、超過時は古い WAV から削除します。 正常終了時には当該 pid の cache を削除します。 異常終了で残った古い cache は、次回起動時に掃除します。

設定

OGG overlay 以外の設定は rt_container.ini で行います。

Screenshot

F7 で Screenshot フォルダへ PNG を保存します。 [screenshot] mode=display では、CRT/color filter/FPS overlay/外側背景を描き終えた container の論理表示領域を保存します。 通常 window では game frame だけ、wide では game frame と左右背景、borderless では monitor 本体を保存します。 mode=frame_4_3 では、従来通り 4:3 固定・ノーエフェクトで保存します。 この場合の倍率は [screenshot] scale で、1 から 4 まで指定できます。

CRT / color filter

F2 で vintage color filter を切り替えます。 warmambergreen_phosphorsepiafaded_printntsc_bleedcool_fademonochromehigh_contrast を巡回します。 F3 で CRT display 風 post process を切り替えます。 処理は RPG_RT の DirectDraw surface ではなく、BitBlt / StretchBlt hook で捕まえた 最終 game frame に対して行います。

[crt] max_render_pixels=0 は自動設定です。 CPU core 数と画面サイズを見て内部処理解像度を決め、必要なら最後だけ GDI で表示サイズへ伸ばします。 重い場合は 524288 など小さめの値を指定します。

System graphic background

System 画像 hook で、../System/bar.pngSystem/bar.png のような相対 path は ゲームフォルダ直下の System として解決します。F8 で背景 pattern 表示を on/off できます。

RM2K clock variables

[rm2k_clock] enabled=true のとき、現実のローカル時刻を RM2K 変数へ 毎秒オーバーライドして書き込みます。

割り当ては項目ごとに指定します。 未指定または 0 の項目は書き込みません。

実験的機能であり、RPG_RT 側の変数操作処理との衝突は未検証です。

Troubleshooting

container 起動時の log は launcher folder の rt_container.log に出ます。 追加で stage 別の挙動を切り分けたい場合は decoder chain test flag を使ってください。

よくある問題:

  • RPG_RT.exe was not found next to RPG_RT_container.exe
    • 同じフォルダに RPG_RT.exe を置いてください。
  • rt_hook.dll was not found next to RPG_RT_container.exe
    • 32-bit rt_hook.dll が同じフォルダにあるか確認してください。
  • RPG_RT.exe sha256 mismatch; launch aborted
    • rt_container.ini[compat] expected_rpg_rt_sha256 が想定外の RPG_RT.exe を指しています。 値を確認するか、行を消して hash check を無効化してください。
  • OGG が鳴らない
    • rt_container.log に decoder の decode_ms / error / message が記録されます。
    • decoder chain test flag (--stb-only 等) で原因 stage を切り分けられます。

decoder chain test flags

OGG decode は stb_vorbis -> Media Foundation -> ffmpeg fallback の 3 段で動きます。 依存環境テスト目的で、任意の段に絞って起動できます。flag は launcher が消費し、 RPG_RT_CONTAINER_DECODE_CHAIN env var として hook DLL に伝わります。

利用可能な test flag (/ 形式と -- 形式どちらも可):

  • --stb-only / --stbonly — stage 1 (stb_vorbis) のみ。Web Media Extensions も ffmpeg も 入っていない PC で OGG が鳴るかを検証する用途。
  • --no-ffmpeg — stage 1+2 のみ (stb_vorbis + Media Foundation)。ffmpeg.exe 不在環境を再現。
  • --mf-only / --mfonly — stage 2 (Media Foundation) のみ。Windows OS の OGG codec 同梱状況を直接確認。
  • --ffmpeg-only / --ffmpegonly — stage 3 (ffmpeg.exe) のみ。bundle 以前の挙動を再現。
  • --no-stb — stb_vorbis 同梱前と同じ chain (MF -> ffmpeg) に戻して比較。
  • --no-mf — stb_vorbis + ffmpeg のみ。
  • --decode-chain=<spec> — comma 区切りで stb / mf / ffmpeg を任意に組合せ (例: --decode-chain=stb,ffmpeg)。

複数指定された場合は最後の引数が反映されます。

Source Layout

  • src/container/launcher.cpp
    • RPG_RT.exe を suspended 起動し、rt_hook.dll を注入する入口
  • src/container/hook_dll.cpp
    • Win32 API hook、DirectDraw hook、内部関数 hook の中心
  • src/container/hook_audio_temp.inc
    • OGG overlay と一時 WAV 処理
  • src/container/mf_ogg_decoder.*
    • 同梱 stb_vorbis -> Media Foundation -> ffmpeg fallback の 3 段 OGG -> WAV decode
  • src/container/third_party/stb_vorbis.c
    • public-domain Vorbis decoder (Sean Barrett v1.22)、Windows の codec 構成に依存しない primary 経路
  • src/container/hook_window_size.inc
    • window size、4:3 fitting、外側背景 fill
  • src/container/hook_window_ratio.inc
    • F6 の 4:3 / 16:9 window 切り替え
  • src/container/hook_fullscreen.inc
    • F1/F2/F3/F4/F5/F8 hotkey、borderless fullscreen 風表示、GDI 拡大
  • src/container/crt_effect.*
    • GDI で捕まえた最終 frame への CRT / color filter / FPS overlay 後処理
  • src/container/hook_screenshot.inc
    • F7 screenshot 保存
  • src/container/hook_system_graphic.inc
    • RPG_RT が読み込んだ System 画像の検知と背景 pattern
  • src/container/variable_override.cpp
    • RM2K 変数配列への clock value 書き込み
  • src/container/config.*
    • rt_container.ini 読み込み
  • src/container/paths.*
    • path、temp directory、CP932/Unicode 変換
  • src/container/log.*
    • launcher / hook log 出力

About

Unofficial runtime helper for RPG Maker 2000 games.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors