エントリー
みなさんに親切に、私は暖かくてチューブの子供時代の戦略-対立について話したいです。 このゲームは、1996年から98年にかけてロシアの会社Dockによってリリースされました。
このゲームは、第二次世界大戦に関するリアルタイム戦略です。 数年後、私は最初にそれを調べてパッセージを記録し、ゲームの楽しさを最大限に引き出し、リソースを展開してゲームのロジックを理解しようとすることにしました。
カットの下で、音楽、グラフィックスを抽出するプロセスを説明しますが、少しはマップエディターに到達しません。
また、この説明には、8ビットカラーパレット、疑似アーカイブ、RLE圧縮、および16進数のHEXエディターへの参照が含まれます。 コード自体では、RLEで圧縮された画像のデコードアルゴリズムのみを調べました。
元々の計画は音楽を入手し、戦争の霧を消すことでした。その後、私は少し夢中になって9個のファイル(.ADW、.DAW、.RUS)を解凍しました。
私は、5つのCDオーディオトラックを備えた完全な2in1バージョン( Confrontation:Military Chronicle )をお勧めします。つまり、ゲームオールインワンの最新バージョンの完全なリッピングです。
機会があれば、98gで購入した元のディスクが保存されなかったため、再度購入しました。
ミュージック
明白で簡単な解決策は、ゲームをdosboxの下で実行し、すべての音楽を録音することです。 音楽付きのプレイリスト 。
それから私はそれが間違っていると思った。 この音楽はオリジナルではなく、dosboxフィルターを通過したことが判明しました。 元のデータを取得して、wav状態に解凍することにしました。
winhexでmusic.datファイルを開きました。 音楽には音声の挿入があるため、デジタルストリームがあることを提案しました。
古いゲームフォーラムのおかげで、ほとんどの場合、オーディオに非圧縮の「生の」データストリームを使用し、特定のパラメーター(最もよく使用されるのは11025 Hz / 22050 Hz、8-16ビット、モノ/ステレオ、Intel / Motorola )サウンドカードに直接送信されました。
ヘックスで開くと、次のことがわかりました。
ファイルの先頭-4バイトには番号20(00 00 00 14h)が含まれます。 ゲームには20のトラックがあり、それぞれ4バイトの次の20のグループは、メロディーの先頭の変位です。 最後の4バイト(33 A5 4B 01 = 01 4B A5 33h)はmusic.datファイルのサイズに等しく、各トラックのサイズは2つのオフセットの差です。 すべてが素晴らしく、簡単であることが判明しました。
オフセットテーブルは簡単に決定できます。数字は連続して増加する可能性がありますが、ファイルテーブルに一貫性のないオフセットが含まれる場合があります(たとえば、ゲームのフォントテーブルに口がなく、悲鳴を上げる必要があります)。 オフセット番号の範囲は0からファイルサイズです。 この場合、テーブルは増加しています。
各トラックのヘッダーでは、トラック名は+16の固定オフセットで追跡されます:Maintune、Technoish、Terrible、Requiem、Track 0、Lazy reggae、U97:Was is das、Hold、GETDOWN!、Scramble、Gone、Rainman、Guitar song、Cool Jazz、モミプレート工場、後悔。
Game Audio Player(GAP)プログラムの一部の実験では、音楽が次のパラメーター(22kHz、8ビット、モノラル、符号なし)で再生されることが示されました。 さらに、11 kHzに設定すると、音楽は再生されますが、2倍遅くなります。 モノラル/ステレオは、再生テンポも変更します。
結果に触発されて、私はゲームのすべてのファイルを聴き始めました...私はそれらを3日間聴きました。 サウンドは、Spectrumのカセットからゲームをダウンロードしたり、アナログモデムのノイズをダウンロードしたりするのに非常に似ています。 ゲームのサウンドは11kHz、8ビット、モノラルとして再生されることがわかりました。 また、ゲーム内のすべてのサウンド、ビデオインサートのサウンド、音楽は生のポインター付きの生データであることがわかりました。
各トラックのタイトルは68バイトです。ドロップする必要があります。それ以外の場合は、音楽の前でクリックします。
その結果、unpacker-parser music.datが書きました。
結果のファイルはGAPでリッスンし、任意の形式に変換できます。
オリジナルの音楽抽出クエストが完了しました。
グラフィックス
すべてがグラフィックと少し混同されることが判明しました。 一部の画像はRLE圧縮されていることが判明し、一部は圧縮されていません。ファイルヘッダーの一部には画像解像度があり、X、YまたはY、Xのシーケンスがキャッチされる場合があります。 一部の画像にはヘッダーが含まれておらず、サイズは32x32ピクセルでした。
疑似アーカイブおよびRLE圧縮の内容:
最初にヘッダーがあります-これらは4バイトのグループで、データブロックの先頭へのオフセットが示されています。
最後の数字67 A9 07 00は、ファイルの長さ、つまり最初のブロックの終わりの数に等しくなります。
次に、特にadddata.adwファイル用の2番目のデータブロックがあります。これは、通常のキャンペーンと焦げた雪の「ディスク挿入」イメージです。
(ファイル数)と4つのオフセット、
04 00 00 00-10 00 00 00-C3 A3 01 00-C3 A6 01 00-52 40 03 00-8002 E001
最後の数字0280hおよび01E0hは、数字640および480、つまり解像度です。 数値は、RLE圧縮を使用したブロックのデコード手順のサイクルを指定します。
デコードアルゴリズム:
7Fh(127)以下の数は、次に進むバイトの繰り返し数を設定します。上記の例では、7Fh(127)x 0です。
最初の数値が80hより大きい場合、次の(X-80h)バイトは、新しい場所にコピーする必要がある単なるバイトです。
シーケンス82h 01 02は、これらが圧縮なしの数値01および02であることを意味します。
繰り返し数がゼロで置き換えられている場合は、スキップします。
数80hの運命については、私は理解していませんでした。 80と80の差はゼロになります)。
理論的には、画像自体とパレットの2つのブロックが必要です。
block2の先頭はゼロとみなされ、さらに進むすべてのオフセットはゼロから示されます。 つまり、16進エディタを見ると、最初の24バイトと4バイト(04 00 00 00)を追加する必要があります。 合計+28バイトまたは+ 1Ch
04 00 00 00-4ファイル。
10 00 00 00 + 1Chは、イメージブロック8002(640)、E001(480)の始まりを示します。つまり、デコードサイクルを設定します。640×480以下です。
C3 A3 01 00 + 1Chは、256 RGB色、768バイトのパレットを指します。 詳細はこちら 。
C3 A6 01 00 + 1Chが画像を指す、再び640x480
52 40 03 00 + 1Chはパレットを示します
残っているのは小さく、ファイルをブロックに解析し、圧縮されたセクションをアンパックしてパレットで接着します。
デコードされた圧縮画像:
ゲームスプライト:
リソースから取得した画像は暗いことが判明したため、各チャネルR、G、Bで左に2ずつシフトする必要があります。
r = r shl 2; (まあ、または4を掛ける方が好きです)
g = g shl2;
b = b shl 2;
リラックスするためのいくつかの写真。 オリジナル、フィルターなし、労働
これらの画像は、ユニットを選択するとパネルの右側に描かれます。
映像
次のファイルはビデオとともに出てきました。また、生のデータストリーム、画像(問題の形式)と音声が混在しています。 movie.adwから最初のビデオを1.64MBで取得し、GAP(22kHz、8ビット、モノラル、符号なし)に入れました-ノイズ-サウンド-ノイズ-サウンドが混ざり合っています。
ファイルの周りを慎重に探し回ると、音は何らかの変位によって分離されるはずです。 ビデオはDLMの文字で始まり、簡単に見つけることができます。また、movie.adwのオフセットの初期テーブルをチェックすると、それらはDLMを指します。
ビデオ:
-ヘッダー4バイト-「DLM」+ 00
-ビデオ+サウンドのサイズ-4バイト(切り取りビデオ部分と一致)
-理解できない4バイト(タイプ、E3 00 00 00 = 227、オフセット数)
-水平サイズ、4バイト、40 01 00 00 = 320
-垂直サイズ、4バイト、C8 00 00 00 = 200
-4バイトの区切り記号= 04 00 00 00
-次に、4バイトのファイルで227オフセット
-再びセパレータ04 00 00 00
-そして、それはデータストリームの終わりのようです
そして、それはすべてビデオです。
少しの地図エディター
ファイルCDを選択しました:\ DATA \ MISSIONS \ 73 \ UNITS.DAT、以下が見つかりました
[DEUTCHE]
[タイガー]
6,80,3,50,100,0,142
マップ上のユニットに関する情報:
-コンマで区切られた最初の2つの数値は、ユニットの座標XとYであり、ゼロは左上隅から始まります。 最大値は128、カードサイズは128x128で、修正されているようです。 整数、0-128
-3番目の数字はユニット回転スプライトです。8方向にあるはずです+タワーの回転もアニメーション化されます。 整数0-7。 タワーはユニットの視線の方向に向けられます。
-4番目の数字は、ユニットの寿命の数、整数0-100です。これは、各ユニットの最大の割合のようです。
-5番目の数字は弾薬の量であり、最大の割合として表示されます。 0-100。
-最後の2人は、数字が何であるかを理解していませんでした。1、142および2、12に変更され、ユニットでは何も変更されませんでした。 攻撃/防御なし、チェック済み。 (6番目、最後から2番目-敵ユニットの場合は可視性、0-プレイヤーには見えない、1-目に見える)
-これまでの最後の7番目の数値xs。 どういうわけかパトロールに関連しているようです。ゲームの最初から、敵の戦車はさまざまな方法で移動します。 数字では、動作スクリプトのように見えます。 0からxs 255まで
家の場合、次のパラメーター:
[ドーム]
29,33,70,100,1
1)建物のタイプ、0〜35の値。
2.3)建物の左上隅のX、Y座標は、右下に描かれます。 値は約1〜128です。
4)建物の「生存」数(%)。 0-100。 また、私は1000%を試しましたが、通常の大きなダイナマイトでは2つではなく、6つのダイナマイトで建物を破壊することができます。
5)条件は、ミッションに勝つために建物を破壊する必要があるかどうかです。 1-通常の建物、破壊に対するボーナスはありません、2-ミッションに勝つために建物を破壊する必要があります。
units.datファイルのユニットの説明
[ロシア語]-ロシア軍ユニットの説明のためのブランチ、セクション
[RBTANK]-ソビエトT34、中戦車、
[RLTANK]-軽戦車、T26、
[RGUN]-歩兵と戦車に対するロシアの大砲、
[RTROOP]-ロシア歩兵、
[RSAMO]-ロシアPT、タイプs100
[IS]-ロシアの重戦車IS
[BAT]-連射可能な無誘導砲、
[RGAUB]-ロシアが管理するhow弾砲、
[KATYA]-カチューシャ、
[RBTR]-機関銃装甲兵員輸送車、小型機、
[RFURG]-歩兵トラック、
[タワー]-機関銃の砲塔、
[RZENIT]-飛行機に対するロシアの対空砲、
[CAR]-VIPの人がいる車、
[RMZ]-航空機に対する対空砲を搭載したロシアのモバイルマシン
[DEUTCHE]-ドイツ軍ユニットの説明セクション、セクション
[DGUN]-ドイツの大砲、
[DLTANK]-ドイツの軽戦車、
[DBTANK]-ドイツの中戦車、
[TIGER]-タイガー、
[DBIKE]-オートバイ、
[DTROOP]-歩兵、
[RFURG]-ロシアのトラックバンをつかむか、自分のトラックバンとして使用できます。
[DBTR]-マシンガンBTRマシン
[DSAMO]-フェルディナンドなどのドイツの金
[DGAUB]-ドイツmanaged弾砲
[ART]-制御可能な高速で正確な銃。
[DZENIT]-航空機に対する対空砲、
[DMZ]-対空モバイル対空砲、
[STIG]-強力な銃と弱い装甲を備えたドイツの超戦車、Sturmtigr、
それでも、たとえば、ドイツ人のためにプレイする場合、ISの説明ブランチを[DEUTCHE]の下の説明の下に置くと、すべてのISが制御下になります。
その結果、彼はミニモードをスケッチしました-人々の友情:
そしてクレイジーなビデオ:
しかし、最終的に、カードのフォーマットが完全に理解されていなかったため、手は編集者に届きませんでした。
フォーラムの古いゲームのトピック 、突然誰かが未完成を終了するのを手伝います。 ソースは、残念ながらDelphi7で入手できます。
ウォークスループレイリスト:
- ソ連のキャンペーン 、
- ドイツのキャンペーン 、
- 追加ミッション-焦げた雪 。