「対決-ミリタリークロニクル」(1996-1997、Doka)を分析します

エントリー



みなさんに親切に、私は暖かくてチューブの子供時代の戦略-対立について話したいです。 このゲームは、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で入手できます。



ウォークスループレイリスト:

- ソ連のキャンペーン

- ドイツのキャンペーン

- 追加ミッション-焦げた雪



All Articles