2003年版ゲームのバイナリから2週間で逆コンパイルし、書き換えました。

2026/02/01 22:32

2003年版ゲームのバイナリから2週間で逆コンパイルし、書き換えました。

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:


要約

Crimson Land は、フィンランドのスタジオ 10tons2003 年にリリースしたシングルプレイヤー上から見下ろすシューティングゲームで、後に 2014 年に Steam へ再マスターされ、GOG、OS X、Linux、PS4、および Xbox に移植された。ゲームの初期無料版(v1.0.2 – 2002年5月、v1.3.0 – 2002年7月で音楽追加、v1.4.0 – 2002年9月)が集結し、カルト的な人気を博した v1.9.8 シェアウェア版(2003年4月)へと至った。10tons がカジュアルモバイルタイトルに移行した後、続編は実現しなかった。

2026年1月16日 に、著者がクラシック v1.9.93 ビルド(2011年2月)を完全再作成するプロジェクトを開始し、「完全忠実」を目指してすべてのバグと奇妙な挙動を正確に再現することを目的としている。元の実行ファイルは Visual Studio 2003(VC++ 7.1 SP1)で構築された DirectX 8.1 のゲームで、カスタムエンジン

grim.dll
をロードし、Direct3D 8、DirectInput、および2Dスプライトレンダラーの84メソッド vtable を公開していた。

リバースエンジニアリングに使用されたツールは Ghidra(無料、ヘッドレス)、Binary Ninja(有料、スクリプタブル)、IDA Pro、およびランタイムデバッガー Windbg(cdb)と Frida であり、関数フックやデータキャプチャに利用された。アセットパッケージングには PAQ アーカイブ(

paq\0
ヘッダー)が使用され、Windows スタイルのパスを含む。テクスチャは JAZ ファイルとして保存されており、zlib 圧縮 JPEG にカスタムランレングスエンコードアルファチャンネルがラップされている。オリジナルで確認されたフォントは
Xirod Regular
Armor Piercing Regular
Pixel Arial 11
、および
Courier New Bold
であり、これらまたはベクター代替が再作成に使用される。

再作成の対象は raylib である。raylib は DirectX 8 の低レベルレンダリングをエミュレートしつつ、ウィンドウ管理、入力、オーディオ、およびテクスチャ描画を処理できるベアボーンエンジンだ。ゲームプレイロジックは完全に再実装され(約 46,800 行の C/C++ と ~16,000 行のドキュメント)、すべてのモード、武器、特典、およびクエストを網羅している。残存するバグはクレジットや隠しコンテンツなどコア以外の領域に限定される。

将来の拡張としては、ソフトシャドウ付き夜間モード(符号付き距離関数ラーニング)や、オリジナルで約束された機能をベースとしたオンラインハイスコア追跡またはネットワークマルチプレイヤーの可能性がある。コミュニティ参加は Telegram グループ、GitHub リポジトリ、およびナレッジベースを通じて奨励され、残存する不整合点を発見し忠実な再現をテストすることが期待される。


この改訂要約は、一覧の主要ポイントすべてを取り入れつつ、主旨を明確に保ち、曖昧な表現を排除しています。

本文

あるゲームは静かに消えてしまう。
それらはリストから外され、マルチプレイサーバーを失い、デジタルの虚無へと漂っていく。別のゲームはオリジナル作者によって少しだけグラフィックが上げられたバージョンでリメイクされ、バトルパスも付与される。
そして第三の道――Ghidra でバイナリを開き、関数に名前をつけ始める方法。


歴史

バージョン備考
Crimsonland2003トップダウンシューター。インディー「shareware」時代の最初のゲーム、フィンランドのスタジオ 10tons によるもの。
Remastered2014グラフィックを更新し、新エンジンへ移行。
Resurrected2026完全リライト(この記事の対象)。

元々のフリーウェア版

  • v1.0.2 – 2002年5月:コアメカニクスを持つ初期プロトタイプ。
  • v1.3.0 – 2002年7月:以降は聞かれない3曲の音楽が追加。
  • v1.4.0 – 2002年9月:出版社の興味が湧く前の最終フリーバージョン。

shareware シリーズ

  • v1.8.x–1.9.x – 2003年4月にリリース、CDカバーで広く配布。
  • v1.9.8 – 2003年9月:過剰なコンボで愛好家に人気。
  • v1.9.93 – Reflexive が2010年に閉鎖した後、ワイドスクリーン(960×800)が追加され、後に GOG.com の無料ボーナスとしても提供。

続編噂とリリース

  • 2010–2013:『Crimsonland 2』は実現せず、モバイル casual ゲームへシフト。
  • 2014年6月11日:Steam 上でリメイク版がリリース。
  • 2014年7月:GOG.com のリリースに続き macOS、Linux、PS4、Xbox が登場。

私の心は2003年にある ― オリジナルのメカニクスはまだ最も新鮮に感じる。


プロジェクト

目標

オリジナル Windows バイナリと完全に一致するリライト(バグやピクセルレベルの細部まで)。
三つのルール:

  1. 完全忠実 – GOG クラシックビルド (v1.9.93, 2011年2月) と同じ挙動。
  2. 推測不可 – 実装した全関数はデコンパイルコードまたはランタイム証拠に遡れる。
  3. オリジナル依存なし – アセットはアーカイブからロードし、コードは一から書く。

ツールとワークフロー

ツール用途
Ghidra静的解析・初期デコンパイル(101 k 行 → 114 k 行へリネーム)。
Binary Ninjaヘッドレス探索、MCP を使った動的クエリ。主にクロスチェック用。
Windbg / CDBランタイムブレークポイント、メモリ検査、ヘッドレスサーバ/クライアント設定。
FridaJS フックを注入し呼び出し追跡、フレームバッファ取得、引数変更を即時に実行。

Windbg コマンド例

cdb -server tcp:port=5005,password=secret -logo C:\windbg.log \
    -pn crimsonland.exe -noio

cdb -remote tcp:server=127.0.0.1,port=5005,password=secret -bonc

Frida の使い方

frida -n crimsonland.exe -l scripts/frida/unlock_secrets.js

カスタムフォーマット

PAQ アーカイブ

from construct import Bytes, Const, CString, GreedyRange, Int32ul, Struct

MAGIC = b"paq\x00"

PAQ_ENTRY = Struct(
    "name" / CString("utf8"),
    "size" / Int32ul,
    "payload" / Bytes(lambda ctx: ctx.size),
)

PAQ = Struct(
    "magic" / Const(MAGIC),
    "entries" / GreedyRange(PAQ_ENTRY),
)

JAZ テクスチャ

JAZ = JPEG + RLE エンコードされたアルファチャンネル、次に zlib 圧縮。
抽出方法:

uv run paq extract crimsonland/ assets/ dumps everything --convert jaz png

文字列レンダリングとフォント

確認済みフォント(dafont.com から取得):

用途フォント
ロゴXirod Regular
メニューラベルArmor Piercing Regular
小さいテキストPixel Arial 11
レベル名Courier New Bold

ピクセルフォントはオリジナルと同一バリアントを使用し、JPEG 圧縮のアーティファクトを回避。


エンジン選択

Raylib を採用した理由?

  • シンプルで抽象化が少ない – DirectX 8 の直接描画に近い。
  • ウィンドウ作成、テクスチャ描画、サウンド、入力などを扱う。
  • エンジンの内部構造よりもゲームロジックに集中できる。

リライト進捗

指標
コード行数46 800
ドキュメント行数16 000
ゲームプレイ完全接続✔︎
全モードが終盤までプレイ可能✔︎
武器・パーク機能✔︎

残作業:ロジックバグ、クレジット、隠れた「宇宙動物園管理者」ゲーム。


次のステップ

  1. オンラインハイスコア – 復活または再実装。
  2. ネットワークマルチプレイ – Crimsonland 2 の約束通りに実装。
  3. オプションナイトモード – Signed‑distance field ラーニングを用いた柔らかい影(プロトタイプあり)。

グラフィックの大幅変更は行わず、忠実な保存が目的。


どうやって手伝える?

  • 微妙な不整合点を指摘(例:クモに対する「フレンドリー・ファイア」)。
  • Telegram グループで最新情報を受け取る。
  • GitHub リポジトリを閲覧し、コードと知識ベースを研究。
  • uv
    パッケージマネージャー経由で現在のバージョンをプレイ。

スクリーンショット「Crimsonland 2003」 – 実際は私のリライト版から取得。

同じ日のほかのニュース

一覧に戻る →

2026/02/02 5:01

**私の初めてのハードウェア製品を500台出荷して得た教訓**

## Japanese Translation: 著者は、明るい光を放つ高輝度ランプ「Brighter」を立ち上げた経験を語り、アイデアを大量生産製品に変える際の障壁を概説しています。ソフトウェア職を辞めた後、チームはクラウドファンディングで40万ドルを調達し、設計を39,000ルーメンから60,000ルーメンへと反復改良しました。早期のウェブサイト預金により需要が証明されました。生産は10月に開始され、毎日UPS配送が行われましたが、中国での製造ではヒートシンクピンのずれやPCBラベルの入れ替えなどの問題が発覚し、現地で修正を要しました。関税変更(「Liberation Day」)により輸入税率は50%から150%へと上昇し、利益率を圧迫し、コスト管理を厳格化せざるを得ませんでした。著者は今後もノブの間隔やワイヤ長、ネジサイズなどの品質調整を継続するとともに、定期的なサプライヤー訪問と徹底したテストを強調し、将来のリスクを軽減する計画です。これらの経験は、ハードウェアスタートアップがサプライチェーンの混乱、関税の変動、および詳細な計画をどのように乗り越えて収益性と製品信頼性を維持するかを示しています。

2026/02/04 4:37

宇宙でデータセンターを設置することは意味がありません。

## Japanese Translation: **概要** 宇宙ベースの AI インフラ―(SpaceX が最近取得した xAI など、Google、Lonestar、Axiom、Starcloud の類似プロジェクトを含む)については、打ち上げ価格が予測通り下落しても実用化や費用対効果を達成する可能性は低い。主張の根拠は硬直した技術的制限(放射線被害、冷却要件、遠距離での遅延)と GPU 必要数の膨大さにある:最先端 AI は何十万から数百万台の GPU を必要とし、xAI のプロトタイプ「Colossus」はすでに約 20 万台を搭載している。 そのようなハードウェアを支えるためには、新たな衛星編成が不可欠だ。既存の宇宙船は簡単にアップグレードまたは交換できないため、AI チップの各新世代ごとに完全に新しいコンステレーションが必要になる。この結果、現在約 15,000 台の衛星を大幅に上回る数が投入され、軌道混雑とケスラー・スペクトラムリスクが増大する。 Google の 2023 年研究では、打ち上げコストが 2035 年頃までに 200 米ドル/キログラムに下がる(Starship の成功に依存)場合にのみ競争力を持つ 81 台の衛星ネットワークが想定されている。これら最適的仮定でも、宇宙データセンターは安価な太陽光発電と急速に下落するハードウェア価格から恩恵を受ける地上ベースサーバーより遅れる。 投資家は、特に SpaceX の今年度 IPO 計画を踏まえ、ハイプサイクル中の転売利益を期待してこれらプロジェクトへの資金提供を継続する可能性がある。しかし、事業は相応の性能向上をもたらさずに資本支出を膨張させ、デブリリスクを増大させ、より実現可能な地上ソリューションから資源を逸らすリスクを抱えている。広範囲にわたる影響は、テック企業、投資家、および宇宙/AI 業界全体に及ぶでしょう。

2026/02/02 2:25

**Show HN:** *Craftplan ― 私は妻のベーカリー向けに製造管理ツールを作りました*

## Japanese Translation: (すべての主要ポイントを反映し、推論は追加せず) Craftplan は、小規模な職人製造業やクラフトビジネス向けに構築された無料でオープンソースの ERP プラットフォームです。コア機能は以下のとおりです: 1. **カタログ管理** – 写真付きの商品リストとラベル 2. **BOM(部品表)** – バージョン管理された BOM が自動的にコストを集計し、労務ステップを追跡 3. **受注処理** – カレンダー方式のスケジューリング、請求書生成、生産バッチへの割り当て 4. **生産** – バッチング、材料消費自動化、バッチごとのコストサマリー、および生産完了時に数量を記録するワークフロー 5. **在庫管理** – 原料ロットトレーサビリティ;在庫移動(消費・受入・調整);アレルゲン/栄養成分追跡;需要予測;再発注計画 6. **購買** – 発注書、仕入先管理、ロット作成を伴う在庫受け取り 7. **CRM** – 顧客・仕入先データ保存、注文履歴、統計情報 8. **インポート/エクスポート** – 商品、材料、顧客の CSV インポート;CSV エクスポート対応 9. **メール連携** – SMTP、SendGrid、Mailgun、Postmark、Brevo、Amazon SES を使用したトランザクションメール配信(暗号化された API キー) 10. **カレンダー フィード** – 注文納品と生産バッチスケジュールを含む iCal (.ics) URL。設定で生成・取り消しが可能 11. **プログラム的アクセス** – JSON:API と GraphQL エンドポイントは暗号化された API キーで認証され、CORS 設定は可変 12. **アクセス制御** – 役割ベースの権限(管理者・スタッフ)とすべてのリソースに対するポリシーベース認可 これら全機能は、特に食品関連製造業で詳細な商品一覧、バージョン管理された BOM、アレルゲン追跡、およびリーン生産計画用の自動コスト算出が必要とされるクラフト企業の独自ニーズを満たすよう設計されています

2003年版ゲームのバイナリから2週間で逆コンパイルし、書き換えました。 | そっか~ニュース