HN 日本語サマリー

← 一覧へ戻る
プログラミング

SimCity 2000 のセーブゲームをハックする

Hacking SimCity 2000 saved games (log.schemescape.com)

45 pointsby zdw25 コメント

要約

著者が子供の頃、MS-DOS時代のSimCity 2000のセーブゲームファイルをバイナリ編集(ヘキサデシマルエディタを使用)してゲーム内のお金を不正に増やす方法を学んだ体験談です。この経験を通じて、バイト、ヘキサデシマル、ファイル操作の概念を理解し、後のコンピューター学習の基礎となったことを振り返っています。

全文翻訳

コンピューターとの個人的な歴史を続けるにあたり、Commodore 64の後、ディスクに保存されるバイトとヘキサデシマルについて学んだ話です。あまり魅力的でも重要でもない逸話ですが、私の旅路において十分に鮮明な記憶なので、記録しておきたいと思いました。 Packard Bellデスクトップ 私たちの家族は、CRTモニターを備えたPackard Bell 386 SXデスクトップコンピューター(もちろんベージュ色)を持っており、MS-DOS(バージョン5や6から始まったと記憶しています)を実行していました。子供だったので、もちろんコンピューターを単なるゲームマシンとして考えていました。Carmen Sandiego、Operation Neptune、Oregon Trail、Scorched Earth、SimCity 2000、その他多くのゲームをプレイしたのを覚えています。 Scorched Earth (1991) いや、実際には、コンピューターを単なるゲームデバイスとして扱っていなかったことがわかりました。Dinosaur Adventure(素晴らしい音楽が入っていました)やOrbitsなどの教育ソフトウェアも使用していたのを覚えています。Orbitsは、各惑星の重力の影響を視覚的に楽しくデモンストレーションしており、シミュレートされた重力で同時に卵を落とし、どれが最も速く落ちるかを見ることができました。どうやら、冥王星に落とした卵は割れもしなかったようです!現代の読者への注意:Orbitsは冥王星がまだ惑星と見なされていた頃に作成されました。 Orbits (1992) 記憶は少し曖昧ですが、Egghead SoftwareやElectronics Boutiqueに行って、魅力的なボックスアートを備えた「ビッグボックス」形式と、むき出しの3-1/2インチフロッピーディスクのスタックの両方で提供されていたゲームやソフトウェアを見ていたのを覚えています。フロッピーディスクは遅く、最終的には動作しなくなりましたが、ソフトウェアを実際に所有できたという事実(今日では一般的な、限定的なライセンスが付与されているか、単にすべてをレンタルするのではなく)は今でも好きです。初期に購入したゲームの1つがSimCity 2000でした。 SimCity 2000 実際には、SimCity 2000をそれほど多くプレイしたわけではありませんが、私のオリジンストーリーにおける(後から考えると)重要な瞬間につながりました。SimCity 2000はアイソメトリックな都市建設ゲームでした。評価が高かったかどうかはわかりませんが、グラフィックスはきれいだと思いましたし、サンドボックスゲームの楽しさを初めて体験させてくれました。表向きは、ゲームで達成しようとする目標がありましたが、私はただいじくり回して、都市を建設して何が起こるかを見るのが好きでした。 SimCity 2000 (1993) 残念ながら、私はゲームがあまり得意ではなかったので、目標を達成する前にすぐにお金がなくなってしまいました。 セーブゲーム SimCity 2000は、セーブゲーム(都市)をコンピューター上のファイルに保存していました。ある時点で、ディスク上のそれらのセーブゲームファイルが編集できることを知りました。どうやってこれを知ったのか覚えていればいいのですが、正直なところ全くわかりません。私が言えるのは、セーブゲームがディスク上のファイルに保存されていることの意味を自分で理解したわけではないと90%確信しているということです。とにかく、あなたができたことは次のとおりです。 ゲーム内のお金に注意してください ゲームをセーブしてください そのセーブゲームファイルを開いてください その値を(バイナリで)検索してください その値を増やして保存してください セーブゲームをロードしてください 利益を得る! しかし、待ってください。MS-DOSの組み込みEDITコマンドはテキストファイルしか編集できませんでした。 ヘキサデシマル 「ヘキサデシマルエディタ」の登場です。ヘキサデシマルエディタは、バイナリ用のEDITのようなものです。通常、コンパクトでバイトアラインされた表示のためにヘキサデシマルをデフォルトとし(しばしば横にASCII表示があります)、私は確信がありませんが、Norton Utilitiesのヘキサデシマルエディタ、DiskEditを使ったと思います。ヘキサデシマルが10進数と基本的に同じで、「A」から「F」が追加されて基数がきれいな2のべき乗になったことを学んだ後、私は「お金」の値を(ヘキサデシマルで)検索し、「F」すべてに置き換えることができ、それによってお金を最大化することができました。最後に1つのトリックがありました。セーブゲームのフォーマットは、可能な限り少ないバイト数で金額を書き出すように見えました(まあ、実際にはそうではありませんでした。以下の注を参照してください)。20,000ドル(ヘキサデシマルで「4E20」)で始めた場合、2バイトしか書き込まれず、それを「FFFF」に増やすと65,535ドルになります。起業家精神のある個人として、私はそのゲームをロードし、追加の数ドルを得るために些細なアクションを行い、その後上記の手順を繰り返しました。今回は「FFFFFF」(約1600万ドル)まで得ることができました。 SimCity 2000のセーブファイルをヘキサデシマル編集 注:上記の説明(当時の私の理解)は完全には正確ではありません。誰かがSimCity 2000のファイルフォーマットをリバースエンジニアリングしましたが、実際にはデータはランレングスエンコードされていますが、金額の値は常に(符号付き!)32ビット値です。たまたま、上位2バイト(ヘキサデシマルで「0000」)が「8100」(「00」という2番目のバイトをさらに1回繰り返すことを意味します)に変換されるだけです。それにもかかわらず、私の子供時代の方法は広告通りに機能しました(おそらく、ビッグエンディアンの金額の値に繰り返しのバイトが含まれる不運に見舞われない限りは!)。 SimCity 2000での$INT_MAXのお金 ヘキサデシマル変換 詳細を覚えていればよかったのですが、おそらく私の父が、私たちの要望で10進数からヘキサデシマルへのコンバーターを作成してくれたと思います。それはC言語で書かれていた可能性があり、おそらくPower Cコンパイラを使用していました。forループを使っていたかもしれません。私が今やっているような洗練されたプログラマーなので、ここに私の現代的な再実装を示します。C標準ライブラリに大きく依存しています。 #include <stdio.h> int main(int, const char**) { unsigned int n; scanf("%d", &n); printf("%X\n", n); } これは10進数からヘキサデシマルへの変換のみを行います。ヘキサデシマルから10進数への変換は気にしませんでした。すべてのヘキサデシマル数字を「F」で上書きしていただけだからです! チートの再訪 ところで、前のセクションは完全に不要でした。私の記憶をダブルチェックしている間に、Norton DiskEditにはすでに組み込みのヘキサデシマルコンバーターが含まれていることに気づきました。なぜそれに気づかなかったのか不思議です!すみません、もう一つ余談ですが、もし自分でこれをすべて試したいなら、DiskEditはオリジナルのDosBoxではなくDosBox-Xでのみ動作し、生のイメージファイル(IMGMOUNT経由)をマウントする必要があったことに注意してください。DiskEditは、おそらく存在するであろうDOSファイルAPIを経由するのではなく、ハードドライブを直接操作するようです。 SimCity以外に ビット、バイト、ヘキサデシマルは今では私にとって第二の天性なので、これは些細な演習でした。しかし、当時は画期的な出来事でした!SimCityでチートできたのです!ああ、そしてバイトとヘキサデシマルについても学びました。その知識を武器に、他にどんなゲームを「ハック」できるだろうかと思いました。おそらく、その後プレイしたすべてのゲームでこれを試したでしょう。最終的には、ゲーム中にメモリのバイトを検索および変更できるツールさえ見つけました。そのツールはGame Wizardと呼ばれていたと思います。これにより、例えばヘルス値がどこに保存されているかを見つけ、いつでも満タンに戻すことができました。任天堂エンターテイメントシステム用のGame Genieがどのように機能したのか、おそらくこれと同じ方法だったと推測しています。残念ながら、このツールを見つけて、記憶通りに機能したかどうかを確認するには、私は怠惰すぎます。 学び ゲームでのチートは、以下のことを理解するのに役立ちました。 ヘキサデシマルは生のバイトを表示するのに便利です ディスク上のファイルは容易にアクセスできます(少なくともDOS下では。現代の電話ではそれほどではありません!)。 メモリやディスク上のバイトは変更可能です この流暢さは、おそらく私のコンピューターでの最終的な成功に貢献しました。これは開始するにはかなり小さな基盤でしたが、それだけで十分だったと思います。SimCity 2000で「勝つ」方法を学んだので、コンピューターをより野心的な目標、つまり自分でゲームを作ることに役立てたいと思いました。