数日前の5月15日に、ポイントアンドクリックアドベンチャー向けの有名なクロスプラットフォームゲームエンジンのセットであるScummVMで、古典的なクエストのジャンルであるゲームThe Neverhoodをサポートするエンジンを備えたコードブランチが追加されました。
ScummVMで最もエキサイティングで長いプロジェクトの1つでした。 この傑作についての話は数年間続き、フォーラムはこのゲームのサポートを追加するよう定期的に求めました。 エンジンの開発には2年かかりましたが、これがどのように起こったかを簡単に説明したいと思います。
ScummVMにゲームを追加することは簡単な作業ではないことに注意してください。 今日、エンジンの約半分について、著者からソースを取得することができましたが、これらの場合でも、コードを常に書き換える必要があります。 そのため、最近PascalとAssemblerで作成された多くのゲームがプロジェクトに登場しました。それらを追加するには、すべてをC ++に翻訳する必要があります。 エンジンの残りの半分は、ハードコアリバースエンジニアリングによって判明しました(別の言い方はできません)。IDAが採用され、ゆっくりと元のエンジンに関数名、変数、コメントをマークアップし始めます。
The Neverhoodで強制的に使用された2番目のアプローチでした。 著者と連絡を取ろうとする試みは特に成功せず、彼らの手は傷つき、2011年6月にプロジェクトが開始されました。
プロジェクトクロニクル
ソースデータ:
* 800 kbバイナリコード
* C ++のオリジナル
* 7.2千の機能
* 340の仮想クラス
2人の2年間の作業の後、結果が得られます。
* 36千行のコード
* 2,000のメソッド
* 320クラス
最初のコミットは簡単でした:
作成者:johndoe 日付:2011年6月22日水曜日22:58:51 2011 +0000 NEVERHOOD:基本的な検出を備えた最初のコード、これまでのところ
このスケルトンは基本的に標準であり、各エンジンの開発は通常それから始まります。 ああ、ScummVMのゲームを逆にしようとする試みは何回も終わりました! しかし、今回も、今回もそうではありません。 2日後、BLBアーカイブにアクセスするためのコードが作成され、2日後にグラフィックがデコードされ、ゲームの紹介であるModule1500で作業が開始されました。
ゲームがハードコードであるという事実にとどまりませんでした。 ScummVMがサポートするアドベンチャーゲームのエンジンのほとんどは仮想マシンであり(これについては別の投稿を書くことができます)、その構造はそれほど複雑ではありません。 元の開発者は、プログラミング言語でゲームスクリプトを直接作成することがあります。これにより、作業の反転の量と複雑さが数十倍になります。 特に難しいのは、C ++で作業することです。 この言語のコンパイラーは高度な最適化を使用することが多く、仮想クラスも暗黙的な呼び出しとしてアセンブラーに変換されるため、さらに頭痛の種になります。 また、IDAとHex-Raysがプラスの操作方法をまだ知らず、多くの松葉杖を使用する必要があるという事実は、作業を単純化しません。
ただし、7月4日にゲームの最初のスプラッシュスクリーンが開始されました。 Smacker形式のクリップのセットですが、これでもメッセージシステムを実装し、画面を更新し、キーボードを処理し、パレットを暗くし、シーンを切り替え、一般に約3000行のコードを記述する必要がありました。 1週間後、最初のシーンが完成し、ゲームの2番目のシーンであるScene1002の作業が開始されました。
その後、シーンが毎週追加されました。 ちなみに、ゲームには71個あります。
シーンの約半分が実現した2011年9月中旬までに、リファクタリングが開始されました。 予想どおり、元のコードにはかなり多くの麺が含まれていました。 ScummVMの標準は非常に高く、コードの品質を改善するために、私たちは常に、元のエンジンの構造、そして多くの場合、アーキテクチャの改善に取り組んでいます。 ここでは、Neverhoodも例外ではありません。オブジェクトジェネレーター、ラッパーが追加され、多くの機能が統合されました。
2012年1月から7月まではほとんど作業が行われず、8月にはさらに12シーンが追加され、サウンドの作業が開始されました。 Neverhoodでは、サウンドは独自のRLEエンコーダーでエンコードされており、バックグラウンドミュージックに加えて最大3つのサウンドを同時に再生する必要があります。 10月の初めまでに、対応する課題がゲームのすべてのシーンに追加され、内部アルファテストが開始されました。
リファクタリングの2番目の波の後、複製されたコードの大部分が破棄され、エンジンが「重量を失った」とき、ブランチがメインのScummVMコードとマージする準備が始まりました。 これを行うには、メニュー、最終クレジット、殿堂の部屋、ゲームの状態の記録と復元を追加する必要がありました。
開発の1年半後の2013年1月21日、英語の文法に従って論理的であるため、元のヒーローはクレイマンではなくクレイメンと呼ばれることが突然わかりました。 。
いくつかのリファクタリング、バグ修正、および2013年5月5日にメインのScummVMブランチに対してプルリクエストが行われました。
これがプロジェクトの歴史です。
簡単に未来について
エンジンでの作業は完全にはほど遠い。 次に、サポートされているすべてのプラットフォーム、特にビッグエンディアンのARMでゲームが動作することを確認する必要があります。
また、残念ながら、ロシア語版のゲームはまだサポートされていません。翻訳者がよくあるように、あちこちで形式をわずかに変更し、最初のスプラッシュ画面の後にScummVMのエンジンがクラッシュします。 現在取り組んでいます。 PSXバージョンのゲームのサポートの追加に取り組む可能性があります。
特に、悪意のあるグローバルコンストラクターを削除するには、リファクタリング作業を行う必要があります。 そして最後に、パブリックベータテストを発表します。
参照:
ScummVMプロジェクトサイト 、The Neverhoodを起動するには、毎日のビルドバージョン1.7.0が必要です。
エンジンのソースコード
ゲームの開始方法
ゲームを元のディスクからコピーし、ScummVMで[ゲームを追加]ボタンをクリックし、ゲームのコピー先のパスを指定すると、ゲームがリストに表示されます(これまでは英語版とデモのみが機能しています)。 次に、ゲームの名前をダブルクリックすると、ゲームが開始されます。
デモはこちらからダウンロードできます 。 AmazonのeBayでゲーム全体を購入することもできますが、Russificationストアの棚でも購入できます。