本文へ移動
cccskills
無料GitHub で公開日本語紹介

blitz3d-decomp

Blitz3D製ゲームのコードをB3DDecompで読み解き、実行時の挙動やアニメーションモデルを確認しながら、権利のある内容を別エンジンへ移植するスキルです。

原文原文の説明を見る

Decompile a Blitz3D game to readable Blitz source with B3DDecomp and port what it does to another engine. Covers SCP - Containment Breach-era and other .bb games, B3DDecomp, Blitz3D runtime behaviour (fixed tick, Animate, CurveValue, Euler angles, quaternions, Rnd), animated .b3d models (viewmodels with bones and keyframes) into Roblox, and where to stop (builds protected against decompiling, games and assets the user has no rights to). Use when a Blitz3D game's code or animated models are needed.

rehan-remade/universal-modderスター 9,190(GitHub 9,190 + cccskills 0)

実行スコア 未検証

インストール方法を見る

こんなときに便利

  • Blitz3Dゲームのコードを調べたいとき
  • ゲームの処理を別エンジンへ移植したいとき
  • `.b3d`モデルをRoblox向けに変換したいとき
  • 移植結果を元ゲームと数値で比較したいとき

日本語での紹介

できること

Blitz3D製ゲームの実行ファイルから、B3DDecompでコードを読みやすいBlitzソースに展開し、移植時の仕様として調べます。文字列や初期化処理を手掛かりに、数値がどこで設定され、どこで使われるかを追跡します。固定更新間隔、Animate、CurveValue、角度や乱数など、Blitz3D特有の実行時の挙動を踏まえて別エンジンへ移植し、元のゲームで測定した値と比較します。アニメーション付き.b3dモデルのボーンやキーフレームをRoblox向けに変換する手順も扱います。

こんなときに便利

Blitz3D製ゲームの仕組みやモデルを調べたいとき、または権利のあるゲームを別エンジンへ移したいときに役立ちます。ソースが公開されているゲームでは、そのライセンスや各アセットのクレジット条件も確認しながら作業できます。

使い方の例

  • 「このBlitz3DゲームをB3DDecompで展開し、移植に必要な処理と数値を整理してください」
  • 「この.b3dモデルのボーンとキーフレームをRoblox向けに変換してください」
  • 「移植した処理を元ゲームの更新間隔や数値と照らして確認してください」

注意点

B3DDecompのビルドには.NET 8 SDKが必要です。逆コンパイルを防ぐ保護があるビルドは解析を中止します。権利のないゲームやアセットは非公開の学習用途に限られ、公開・アップロードできません。SCP: Containment Breach由来の内容を公開する場合はCC BY-SA 3.0に従い、クレジット表記と個別アセットの条件確認が必要です。

この紹介文は、公開されている SKILL.md をもとに AI(OpenAI Codex)が作成しました。正確な仕様は下の原文を確認してください。

含まれるファイル(8)

  • SKILL.md5.2 KB
  • references/b3d-to-roblox.md4.4 KB
  • references/b3ddecomp-skip-failures.patch3.7 KB
  • references/blitz-runtime.md4.8 KB
  • scripts/roblox/b3d_skin.py5.9 KB
  • scripts/roblox/vm_anim_data.py5.1 KB
  • scripts/roblox/vm_build.py6.6 KB
  • scripts/roblox/vm_render.py1.0 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Blitz3D decompile and port

Blitz3D games ship as one exe: the runtime in .text and the compiled game in a resource module that the runtime links at load. Ghidra on the exe shows only the runtime. The route that works: B3DDecomp disassembles the module and decompiles it to Blitz source. Then the source is the spec for the port, and the original game stays the oracle.

Keep every disassembly and decompile outside any repo (convention: ~/<game>-decomp/), and never publish them; the scripts here are fine to keep. Leave proprietary DLLs that forbid decompiling alone: their export names in the exe are enough. Journal in the mod's MODLOG.md.

Read the source when there is one: SCP: Containment Breach (Regalis11/scpcb) and its Ultimate Edition Reborn fork (Jabka666/scpcb-ue-my) are open source under CC BY-SA 3.0.

What a port may use. A port that re-expresses a game's logic, or converts its models, keyframes, textures or sounds, redistributes that game once it is published or uploaded (to Roblox too). Port only what the user has the rights to: their own game, or an openly licensed one on its terms (SCP: Containment Breach: credit it and keep the port under CC BY-SA 3.0, and check each asset's credits, since fan games mix licences). Anything else stays a private study: nothing from it is uploaded or published.

1. Tools

  • B3DDecomp (juanjp600/B3DDecomp, C#, GPL-3): clone outside the repo, then dotnet build Blitz3DDecomp.sln -c Release. It needs a .NET 8 SDK; a user-local one installs without admin (dotnet-install.ps1 -Channel 8.0 -InstallDir <dir>). Run with DOTNET_ROLL_FORWARD=Major and bin/Release/net8.0 on PATH: the decompiler starts Blitz3DDisasm by name.
  • If one function aborts the whole run, apply references/b3ddecomp-skip-failures.patch (git apply; made on commit 2b3148b): the decompiler then skips a function it can't finish, with a step5 failed line, instead of stopping.

Done when Blitz3DDecomp.exe and Blitz3DDisasm.exe build.

2. Disassemble and decompile

Blitz3DDecomp.exe <copy of game.exe> writes <game>_disasm/ (Code/ per function, Type/, Strings.txt, BuiltIn/, Libs/, BuiltInSymbols.txt), then decompiles it to <game>_decomp/. Games built from SCP: Containment Breach's code need the game's fmod.decls as a second argument (B3DDecomp's README: the shipped decls drop a parameter from FSOUND_Stream_Open).

When it still aborts, the exception names the construct. Never make a type setter silently ignore writes to get past one: the type propagation then loops forever with no output.

Protected builds: stop. Some builds are protected against this step: a modified compiler and runtime hash every function, type and builtin name (B3DDecomp stops with Unrecognized function: @_builtIn_f<garbled>; SCP: Containment Breach 2's client is built this way), or the module is encrypted. Those are protections the developer added against decompiling. Don't reverse them: tell the user and stop (skills/mod-any-game/references/safety.md). Current B3DDecomp undoes one of them by itself, without saying so: an XOR on a .b3dmod section. List the exe's sections first (objdump -h, or any PE viewer) and stop if it has one.

Done when <game>_decomp/ holds Main.bb, Functions/, Types/ and Decls/ and the run prints at most a handful of step5 failed lines.

3. Find the system

  • Strings first: an asset path or sound the system loads (grep -l StringConstant_<n> Code/*).
  • Data-driven templates: the init function stores constants into a template per item. If the game has an addon/JSON loader, it names every field.

Done when every number the port will use is traced to the line that sets it and the line that reads it.

4. Port

Read references/blitz-runtime.md before writing port code: Blitz3D's clock, Animate, CurveValue, Euler angles, Rnd and entity calls behave in ways a straight transcription gets wrong. For animated .b3d models (viewmodels, rigs, keyframes) into Roblox, follow references/b3d-to-roblox.md; its scripts are in scripts/roblox/.

Port step for step: same order, same constants, same tick. Mark every deviation in a comment with the reason. The rights rule above covers the code as much as the models.

5. Verify against the oracle

Measure the port against the decompiled numbers in the engine, not by eye: rates (shots per second at the fixed tick), durations (frames / speed / ticks per second), aim (the sight's dot on the screen centre), ammo on the server. Record each check and its result in the journal.

Done when every ported behaviour has a measured number next to the decompiled one.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

コメント

ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。

まだコメントはありません。最初のコメントを書いてみませんか。

送信するとすぐに公開されます。メールアドレスや電話番号などの個人情報は書かないでください。URL は 2 つまでです。

0 / 1000 文字

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

同じリポジトリのスキル

asset-pipeline

無料概要あり

生成画像や手描き素材を、ゲームが読み込めるサイズ・配色・配置に整えるスキル。背景の透過、スプライトシート作成、3Dモデルからの多方向画像の書き出しを扱います。

  • 画像をゲーム指定の寸法に整えたいとき
  • アニメーション画像をシート化したいとき
  • 3Dユニットの多方向画像を作りたいとき
rehan-remade/universal-modder9,1902026年10月29日 更新

fal-assets

無料概要あり

ゲームやMOD用の画像、3Dモデル、効果音、音楽、動画をfal.aiで生成するスキル。素材の見た目をそろえる作り方や形式変換、生成条件の記録まで扱います。

  • MOD用の透過スプライト制作
  • 繰り返し使えるテクスチャ生成
  • 画像から3Dキャラクター制作
rehan-remade/universal-modder9,1902026年10月29日 更新

game-automation

無料概要あり

実際のゲームを起動・操作し、画面とログでMODの動作を確かめるスキル。メニュー操作、キー入力、撮影を自動化し、繰り返し使えるテストやデモの場面を組み立てます。

  • ゲーム内でMODの動作を確かめたいとき
  • メニューやキー・マウス操作の自動化
  • 再現可能なテストやデモを作りたいとき
rehan-remade/universal-modder9,1902026年10月29日 更新

game-recon

無料概要あり

インストール済みゲームのエンジンや改造手段、動作環境を調べ、MOD制作の計画書にまとめるスキル。既存ローダーや保存先、不正対策も確認し、着手前の判断を助けます。

  • ゲームを改造できるか調べたいとき
  • エンジンとMODローダーの確認
  • 別OSでのゲーム動作を調べたいとき
rehan-remade/universal-modder9,1902026年10月29日 更新

game-research-websearch

無料概要あり

ゲーム改造の手法や既存ツールを、公開サイトと過去の保存ページから調べるスキル。消えたフォーラムもたどり、出典URL、対応バージョン、情報の信頼性を整理します。

  • ゲーム改造の先行事例を探したいとき
  • リンク切れの掲示板情報を調べたいとき
  • ツールの対応バージョンを確認したいとき
rehan-remade/universal-modder9,1902026年10月29日 更新

mashup-mods

無料概要あり

異なるゲームの敵や仕組み、世界を組み合わせるMODを設計・実装するスキル。素材の移植から二つのゲームの連携、ルールの再実装まで、目的に合う方法と検証手順を整理します。

  • 別作品の敵や武器を移植したいとき
  • 二つのゲームを連携させたいとき
  • 別作品のルールを再実装したいとき
rehan-remade/universal-modder9,1902026年10月29日 更新

rehan-remade のスキルをすべて見る

このスキルの問題を報告する