- C++ 88.2%
- Python 6.5%
- C 3%
- Assembly 1.2%
- NASL 0.4%
- Other 0.7%
|
|
||
|---|---|---|
| analysis | ||
| config | ||
| docs | ||
| game | ||
| godot | ||
| native | ||
| runtime | ||
| tests | ||
| third_party_licenses | ||
| tools | ||
| .gitattributes | ||
| .gitignore | ||
| AGENTS.md | ||
| CMakeLists.txt | ||
| dependencies.lock.json | ||
| game-assets-manifest.json | ||
| GAME_ASSETS.md | ||
| launch.sh | ||
| README.md | ||
TWA Revival analysis
2026-10-17 batch136: 部隊加入と関連14本文の内部入口を移植し、選択43組・179,685項目が合格しました。上位処理と公開入口への接続、全ゲームの統合は未完了です。
元のTWAの解析と、Godot/C++への忠実な移植を管理する共同開発リポジトリです。 共同開発: Revival Forge
移行元GitHub: daraskme/TWA-Revival-analysis
完全解析・完全移植は未完了です。現在は格納庫での編成・保存と、原作地形上での配置・移動を検証できます。士気・命中・損害・地面効果・疲労の数値処理を復元していますが、原作戦闘への一体化と勝敗までのゲーム動作は未完了です。
別セッションでは 再開資料 と 現在地 から読み始めてください。検証済みの区切りでローカルコミットします。GitHubへの送信状態と承認範囲は再開資料に記録します。原作のゲーム本体と保存されていた復活版クライアントを game/ 配下にGit LFSで追加しました。取得方法と配置を参照してください。生成物と個人プロフィールは除外しています。既存ツールに合わせた配置・ビルド依存物・設定は別途必要です。
2026-10-11追加の mapped backendの限定chunk読込 は812正常と6変異で原本のmemory・作用順・full EAXが一致しました。関連17比較と既存9比較・Python26・native1が通過し、正式110記録のsource/library最終監査も合格しました。並列成果 は独立解放213・士気末尾306・path判定18まで原本比較済み。ゲームのworld接続と全戦闘の完成とは区別しています。
2026-10-11、建物providerの限定経路 を正式C++へ統合しました。実packのmetadata124件は通常読込・初回backend生成の双方で原本と一致(初回読込はcleanup入口まで)。provider3,683件、metadata28,142件、長いコピー427件、限定refill272件と、処理順序を崩した変異23種を確認しています。上位providerの排他解放・一般chunk/remap・圧縮backend・world/Godot統合、戦闘全体は未完了です。
2026-10-07、建物データ読み込み本体 を正式C++へ移しました。実資産と値・配置を変えた112件で、部品・状態・非空属性配列の生成から末尾通知・一時領域解放まで原版と一致しています。コピー・ストリーム等を含む10,432正常比較で全256KiB+globalsと作用順序を確認。読込待ちreceiverへの直接呼出しであり、service・生成後半との一体化・ゲーム画面への接続は残っています。
前段の2026-10-07、建物の取得・生成前半 を正式C++へ移し、5,712ケースで原本命令と比較しました。自然な入口から既存建物の取得、未登録時の確保・文字列・行列初期化、読込要求の準備まで、全256KiB+globalsと作用順序が一致しています。読込待ちの建物を返す段階で、reader・生成後半・実DB・ゲーム画面への接続は残っています。
前段の建物生成後の登録処理7,276比較 も維持しています。限定試験では原本の生成処理末尾から親の登録・復帰まで接続しましたが、前半・readerと一体化するにはserviceと生成後半の接続が必要です。
前段の建物キャッシュ登録・拡張10,633比較 と検索単体1,864比較 も維持しています。実allocator・providerの完成とは区別しています。
直近は パック索引の名前復号 を正式C++へ移し、原本命令との1,551ケースで一致を確認しました。実際の資産取得経路 は、556ファイルのキャッシュ登録に加え、自然な検索失敗・空ストリーム解放・サービス復帰地点まで確認しました。別の対象パック入力では元の通常ロードへ接続し、検索表と関係グラフの初期生成まで進んでいます。ハッシュ・検索・優先比較 の2,053ケースも維持しています。通常パック本文、provider経由の建物reader、競合資産の採用結果、画面への接続は未完了です。
前段の解析では 再計算・即時配置から全兵士とgroup内部更新までの接続 を正式比較しました。4型の隊列・兵士の候補収集・空間登録・後処理からgroupのcache・member・dirty判定・数値処理・命令更新まで、同じメモリ状態で原本命令と比較しています。正常/入力変更96件と、後段失敗64件の巻き戻しを確認しました。実worldの構築・ゲーム画面への接続は残っています。
前段の 直接通知からgroup内部まで の32成功・40拒否・旧モード互換8組も維持しています。建物readerは実データ1件で厳密EOF・正常復帰と最終field25検査を確認し、現在は実際の資産取得経路とワーカースレッドの起動を解析しています。取得経路全体や全データの原本比較は未完了です。
2026-10-02の依頼に基づき、元のTWAを再現基準とし、Revivalの変更は任意の追加設定へ分離します。既存 source/ の配布物やサーバーを移植版へ置き換える処理はありません。
起動
この環境では ./port/launch.sh で格納庫を開きます。25指揮官と317部隊の原作データを参照し、指揮官ごとの3部隊を選んで保存できます。購入や研究条件はまだ適用していない編成プレビューです。原作の初期部隊・Tier・消耗品枠を保持し、RevivalのTier-X化は適用しません。
「戦場へ」で選択した地形に20人分・60部隊を配置します。1〜3で自分の部隊を選択、Ctrl+Aで3部隊選択、右クリックで移動、Ctrl+Sで停止、WASDと中ドラッグでカメラ移動、ホイールで拡大、Spaceで一時停止、Escで格納庫へ戻ります。他の部隊は規模確認のため同じ編成を複製した表示で、AIや対戦通信はありません。移動計算自体も原作との一致が未検証の実験実装です。
「モデル資料」から以前の24モデルの検証ビューアーに移れます。Godotプロジェクトは godot/project.godot。Linux x86_64、Godot 4.5.1、C++20で確認しています。Windowsビルド・実行は未検証です。
編成保存は user://original-preview-profile.json です。この環境のラッパーでは port/.cache/data/godot/app_userdata/TWA Original Port/ に置きます。原作・Revivalのプロフィールとは別ファイルです。
再実行
以下はワークスペース直下で実行します。PythonがPATHにないNixOSでは、既存の /nix/store/*-python3-3.12.*/bin/python3 を使用できます。
python3 -B port/tools/twa_assets.py scan --root totalwar-Arena/TotalWar_Arena --out port/analysis
python3 -B port/tools/twa_baseline.py --database port/analysis/assets.sqlite --out port/analysis/baseline-report.json
python3 -B port/tools/twa_tables.py --database port/analysis/assets.sqlite --schema totalwar-Arena-Revival/work/schema_are.ron --out port/analysis
python3 -B port/tools/twa_animation.py --database port/analysis/assets.sqlite --out port/analysis/animations-report.json
python3 -B port/tools/dev.py cmake -S port -B port/build -G Ninja -DCMAKE_BUILD_TYPE=Release
python3 -B port/tools/dev.py cmake --build port/build --parallel 8
python3 -B port/tools/twa_models.py --database port/analysis/assets.sqlite --library port/build/libtwa_native.so --out port/analysis/models-report.json
python3 -B port/tools/prepare_viewer.py --database port/analysis/assets.sqlite --library port/build/libtwa_native.so --out port/godot/generated --limit 24
python3 -B port/tools/prepare_game.py
python3 -B -m unittest discover -s port/tests -v
ctest --test-dir port/build --output-on-failure
./port/launch.sh --headless --quit-after 1000 -- --smoke
./port/launch.sh --headless -- --flow-test
./port/launch.sh --headless res://assembly_test.tscn
./port/launch.sh
Godotエディターはローカルソケットを使います。このCodex環境のサンドボックス内ではエディターが異常終了したため、インポートとGPU描画は許可されたローカル実行で検証しました。通常のコマンドラインではこの制約はありません。
配置
| 場所 | 内容 |
|---|---|
tools/twa_assets.py |
PFH5の境界検査、全パック・全格納ファイルのSHA-256、衝突を拒否する抽出 |
analysis/assets.sqlite |
全資産の格納パック、パス、位置、サイズ、ハッシュ |
analysis/inventory.json |
解析対象バイナリとパックの固定されたハッシュ |
analysis/baseline-report.json |
manifestの不一致、同一パスの衝突、PEセクション・外部関数・文字列候補 |
tools/twa_tables.py |
表の抽出、全行・末尾検証、再生成とのバイト一致検証 |
tools/twa_animation.py |
TWAのv3/v4/v5/v6アニメーション、骨階層、チャンネル・フレーム構造 |
native/ |
Godotに依存しないC++モデル読込器、CLI、C API、GDExtension接続 |
tools/prepare_game.py |
元DBとの再照合、日英LOC、variant選択、14地形、格納庫マーカーと建物の抽出 |
native/include/twa/movement.hpp |
原作パラメータを入力する移動実験。原作の操舵・経路探索との同一性は未検証 |
godot/ |
格納庫の編成・保存、兵士の組立・骨格アニメーション、戦場の配置・移動、個別モデル検証 |
config/rulesets.json |
originalを既定とし、Revival変更を分離する方針。戦闘実装は未接続 |
tests/ |
破損入力、パス逸脱、資産衝突、原本変更検出、実モデル形状・ウェイトの回帰 |
analysis/ と godot/generated/ はローカル原本から生成されます。ハッシュ固定済みでも、ディレクトリが公式配布版の無改変コピーであることを証明したとは扱いません。
GPU確認画像は analysis/hangar.png と analysis/battle-deployment.png。画面保存には -- --capture-hangar または -- --capture-battle を指定します。見た目には色マスク、地表材質、建物の状態と変換などの差が残っています。342組のvariant形状を取り込んだことは、騎乗動物・将校・装備・全アニメーションを含む完全な部隊再現の証明ではありません。
依存物は dependencies.lock.json に記録しています。Godotは公式SHA-512一覧と照合し、godot-cppは godot-4.5-stable に固定しました。ダウンロード済み依存物は .tools/ にあります。C++バインディングを別の場所に置く場合はCMakeの GODOT_CPP_PATH を指定してください。
完了条件
解析の対象・未知箇所と完了条件は docs/STATUS.md を参照してください。パック内の全件ハッシュ、表の構造一致、モデルの表示、元ゲームの戦闘再現は別の達成項目です。原作の移動・戦闘・同期の比較証拠が揃うまで、port_complete をtrueにはしません。