<おしらせ1>
またまた、いつの間にか掲示板がダウンしていたようですね。ログを見ると、およそ2年半ぶりの改修です。
この間、何度かメールでご要望があったようですが、この度ようやく重い腰を上げて掲示板を修復いたしました。
管理不行き届きで申し訳ありません。

<おしらせ2>
サイト管理を楽にするために体裁を変更しています。
本サイトのメインコンテンツであったSPWAWの解説記事は以下からアクセス可能です。
SPWAW解説記事一覧


<5分で調べたSPWAW界の近況>

びっくりしたことーその1「Depot リニューアル」
SPWAW界を長年牽引してきた世界最大のファンサイトSPWAW DEPOTが、昨年の4月に閉鎖、13年の歴史に幕を下ろしたようです。
と同時にDepotメンバーの一人 Falconさんが新たなサイトSPWAW DEPOTを立ち上げたようですね(笑)。
まあ、中心メンバーが入れ替わって、こじんまりした感はありますが、実質的にはリニューアルって感じですかね。
旧DEPOTの遺産は相続されているようで、今後ともがんばって欲しいところです。
https://www.tapatalk.com/groups/spwawdepot/

びっくりしたことーその2「砲撃要請画面ラグ解消」
マルチコアCPUが普及した頃でしょうか、ある程度以上のスペックのPCでは、砲撃要請画面で挙動がおかしくなる不具合がありましたね。
それが原因でSPWAWを離れた・・という方もおられたような記憶がありますが、どうやらこの不具合、ついに修正されたようです。
これもDEPOTメンバーのおかげみたいですね。Matrix Games 公認(というか黙認ですね)のもと 、本体ファイル MECH.EXE をいじることに成功したようです。
https://www.tapatalk.com/groups/spwawde ... -t277.html


というわけで、この機会にもう一度SPWAWをやってみようかな、と思われた方は次のリンクからダウンロードをどうぞ。
DEPOTで全てのファイルのホスティングも始めたようです。
https://www.tapatalk.com/groups/spwawde ... es-t6.html

セーブデータエディター

SPWaWに関する質問に誰かが答えるはず
Post Reply
島風
暗号解読部長
Posts: 58
Joined: 2007.Mar.12(Mon) 21:51

セーブデータエディター

Post by 島風 » 2007.Mar.12(Mon) 21:58

 初めまして、島風です。
SPWAWは、数年前から断続的に楽しんでおり、そのころから本HPの情報は大変役に立っております。本HPの運営・管理者をはじめ、記事投稿されている諸兄方に敬意を表します。
 さて、僕は大部隊を平面的に指揮することや敵防衛拠点を正面から攻略していくことが苦手です。そこで、歩兵を戦車や輸送車に乗せて、戦闘正面を4〜8ヘックスに絞り込んで、煙幕スクリーンと砲撃に頼りまくって戦線を突き抜け、後方で展開して後ろから攻めることが多いです(スターリングラードキャンペーンのママエフ・クルガン丘もこれで攻略したのですが、それでもかなりの損害を出すへっぴり腰ぶりです。こんな指揮官の下では僕は戦いたくありません)。ですので、素早く移動する必要があるのですが、敵歩兵の近接強襲と地雷が障害となります。そこでオートバイ兵などの偵察部隊は、かわいそうですが、目視による能動的な敵発見や、発砲されることでの敵発見、それから、踏んで爆発することによる地雷発見という、大切な役割があります。ところが、ダス・ライヒキャンペーンで、ふと気がつくとオートバイ兵のリーコンユニット属性が消え、代わりに Fast response artillery が付いてしまい、大変困ったことになりました。結局バイナリエディターで、他のオートバイ兵とデータを比較して修正することができましたが、これはかなり面倒です。
 枕が長くなりましたが、SPWAWのセーブデータエディターはないのでしょうか。一応、webの検索をかけてみましたがそれらしきものを探すことができませんでした(どこかの英語のHPでは「チートにつながるからダメよ」らしきことが書いてありましたが)。
 どなたかご存じの方がおられれば、教えて頂けませんか。よろしくお願いします。

島風
暗号解読部長
Posts: 58
Joined: 2007.Mar.12(Mon) 21:51

自己レスです

Post by 島風 » 2007.May.14(Mon) 21:23

 こんばんは、島風です。
ダスライヒのキャンペーン中に、今度は Sdkfz 251/2 の砲撃要請時間が突然長くなってしまい、おかしいなとユニットデータをみたら、Fast response artillery が無くなって、recon unit になっていました。どうやらセーブゲームエディターはなさそうです(見つけられなかった)ので、再びバイナリエディターでデータを修復しました。
 いろいろと迷いましたが、同じような症状でお困りの方もおられるかと思いますので、少しだけデータ修復のヒントを書くことにしました。ただし、バイナリエディターでファイルの書き換えを行う場合、間違った所を書き換えたり、間違った操作をすると、データが読み込めなかったり、ゲームがクラッシュしたり等、予期しないことが起きる可能性がありますので、あくまでも自己責任でお願いします。
1. 0ターン目のデータを修復する。
2. データは、ユニット名+ユニットの様々なデータ、の順に並んでいる、と思われる。
3. ユニットの様々なデータの終わりの方に、recon unit 等のユニットの特性がある。
 ご参考まで。
Last edited by 島風 on 2007.May.19(Sat) 12:56, edited 1 time in total.

User avatar
Nor
大佐
大佐
Posts: 783
Joined: 2004.Feb.08(Sun) 05:09
Location: 日本

はじめまして

Post by Nor » 2007.May.15(Tue) 10:36

はじめまして。

ご質問の件ですが、いちおうSPWAWにもセーブデータエディタらしきものは同梱されています。WAW EDというプログラムです。

・WAW EDの開き方
「スタート」→「すべてのプログラム」→「Steel Panthers World At War」→「World At War Game Editor」


もともとこのツールはシナリオ作成者用のもので、シナリオデータやセーブデータを読み込んで、基本的な項目(経験・士気など)を一括で簡単に変更できるというのがウリです。

しかし残念ながら、簡単に変更できる項目の中には、ユニットの特殊能力は入っておりません。したがって、ユニットの特殊能力を変更するには、別途バイナリエディタを使用するしかなさそうです。

実は、WAW EDにはバイナリエディタ機能もついているのですが、非常に使いにくいのでお勧めできません。また、WAW EDの目玉機能として、読み込んだシナリオ・セーブデータをCSV形式に変換して出入力できる機能があるのですが、これが不思議なことに出力はできても入力ができない(ごくごく稀に入力に成功する場合はある)という致命的な欠陥があります。なので、今回のご質問の件については、WAW EDはあまり役に立たないでしょう。 :mad:

バイナリエディタでセーブファイルを覗いて見ると、各ユニットは256個のデータ項目を持っています。↓の記事でも言及されていますが、各項目が何を意味するかは今のところまだはっきりとしていません。
viewtopic.php?t=539

そこで、Fast response artillery や recon unit という特殊能力を規定する項目が「どこ」で、「値は何」なのかを公表していただければ、後に続く方にもきっと役立つと思われます(例えば、B7はユニットの状態で、値は0=ready,1=in-Cover,2=Entrenhedなど)。

ちなみに、Fast response artillery や recon unit という属性は、フォーメーション単位で指定する特殊能力のようです(ユニット単位で指定する特殊能力は Engineer Ability)。キャンペーンの最中にユニットを他のクラスにアップグレードすると、特殊能力がおかしくなってしまうのは、どうやらこの辺りが原因のようです。

このバグ(というよりプログラム上の制限)を発生させないようにするには、違うクラスのユニットにはアップグレードしないという縛りを自らに課すくらいしか方法が無いようです。

以上、あまりお役に立たない情報ばかりですが・・・。 :porc
Image

島風
暗号解読部長
Posts: 58
Joined: 2007.Mar.12(Mon) 21:51

ユニットの特殊能力が示されている場所について

Post by 島風 » 2007.May.16(Wed) 00:12

島風です。
 Norさん、レスありがとうございます。直接お返事をいただけて光栄です。WAW ED の存在は知りませんでした。大変参考になりました。
 前回あまり細かいことを書かなかったのは、最初の文章に書いた「チートにつながるからダメよ」というのが頭のどこかに引っかかっていたためです。皆さんのお役に立てるなら、しょぼい知識でお恥ずかしい限りですが、これまでにわかったことを書きます。

 まず、 WAW EDで出力されるCSVファイルでは、
EA
がユニットの特殊能力を表しているようです。一の位が一桁が特殊能力(0がなにもなし、1がRecon unit、2がFast response artillery)、十の位が部隊の質(何も表示がなければ通常部隊、1が経験値にボーナスがある部隊(SSや特殊部隊)、2は二線級のユニット(Opel Command Carや捕虜など))のようです。例えば、12は経験値にボーナスがあるFast response artilleryで、SS部隊にいる50mm迫撃砲などです。

 0ターンの.datファイルをバイナリーエディターで開くと、まず、各部隊のユニットデータが、最初に部隊を購入した順番に並んでいます。特定の部隊を探し出すには、連続して並んでいる経験値とモラルの値(16進法になおした数字)を利用すると便利です。ユニットの名前から、次のユニットの名前の1バイト前までがそのユニットのデータのようで、ユニットごとにデータの長さが異なっているようです(5/18に修正しました)。また、分隊長等の人物のデータはもっと後ろ方に固まっています。ユニットデータについては、名前の後に、経験値、モラル、装甲、砲弾の数、攻撃目標座標などが並んでいます。さて、特殊能力ですが、後ろから、数バイト〜十数バイトの範囲に1バイトのデータとして存在します。場所はユニットの種類などによって異なっているようです。ユニットのデータの長さが同じであれば同じ位置にありますが、長さが異なっている場合は異なる位置にあるようです。データは、例えば01は経験値にボーナスがないRecon unit、 0C(10進法に直すと12)は験値にボーナスがあるFast response artilleryを示しています。
 僕はこの値を、バイナリエディターで書き換えてユニットの特殊能力を修正しました。今のところデータを読み込めなかったり、ゲームがクラッシュしたりはありませんが、もし何か異常に気づいたら報告します。

 僕もいつか、Norさんが書いておられる縛りを自らに課したり、「戦闘中に負傷して以前の能力を無くしたり、戦闘経験を積んだおかげで新しい能力に目覚めた」と解釈してそのまま続ける、ようになれるよう、がんばってみます。

島風
暗号解読部長
Posts: 58
Joined: 2007.Mar.12(Mon) 21:51

ユニットの特殊能力の修正方法について

Post by 島風 » 2007.May.19(Sat) 13:02

島風です。

 ユニットの特殊能力の修正方法についてまとめてみました。

1. バイナリエディターでdatファイルを開く。
2. ユニット名(文字列)や、連続している経験値とモラルの値(16進法の数字)でユニットを検索。
3. 後ろから24番目(csvファイルのEAに相当)に相当するデータを探す。
4. 以下の値に修正。
  何もなし                      = 00
  経験値ボーナスなしの Recon unit          = 01
  経験値ボーナスなしの Fast responce artillery     = 02
  経験値プラスボーナスありの通常ユニット       = 0A
  経験値プラスボーナスありの Recon unit       = 0B
  経験値プラスボーナスありの Fast responce artillery = 0C

 1.2.について、ユニットデータはユニット名の最初の文字から始まり(過去の投稿も修正しました)、次のユニット名の1つ前まで、csvファイルでは 00〜FF,100,101 の合計258個で構成されているようです。  

 3.については、単純に後ろから24番目になっていないのでご注意ください。csvファイルとバイナリーファイルを比較したところ、csvファイルで同じ数字が3つ以上連続しているデータを、バイナリーファイルでは基本的には3バイトに省略してありました。その書式は

80+繰り返し数 繰り返される数字 1バイトの数字

で、3番目の数字が何を意味しているのかは突き止めることができていません。例えば、256(16進法でFF)が10(16進法ではA)回連続、0(16進法データとしては00)が20(16進法では14)回連続のばあい、それぞれ、

8A FF 02
94 00 0D

となっています。また、連続している数字が繰り返される場合、例えば、256が6回、0が4回、1が4回、0が4回繰り返しで、次が90(16進法で5A)の場合、

86 FF 84 00 84 01 84 00 01 5A

となっています。さて、僕のWurfrahmen 40のバイナリーデータの最後の部分を書き出してみると、

04 00 00 02 00 00 1E 8E 00 03 15 00 0B 83 00 0D

となっています。後ろから見ていくと、「83 00 0D」は00が3回繰り返しで3個分のデータ、「15 00 0B」はそのまま3個分のデータ(合計後ろから6個分)、「8E 00 03」は00が14回繰り返しで14個分のデータ(合計後ろから20個分)、「00 00 1E」はそのまま3個分のデータ(合計後ろから23個分)、で、つぎの「02」が後ろから24個目のデータで、これがcsvファイルのEAに相当する、ユニットの特殊能力の値です。ここでは「02」なので、経験値ボーナスなしの Fast responce artilleryです。ちなみに、ドイツのSS中隊に含まれる「GE 50mm Mortar」はこの値が「0C」で経験値プラスボーナスありのFast responce artillery になっているのに対し、分隊単位で別途購入した「GE 50mm Mortar」は同じ名前でもこの値が「02」で経験値プラスボーナスなしのFast responce artillery となっていました。また、03〜09までの数字は無視されるようで、特殊能力がつくことはありませんでした。

viewtopic.php?t=539

を読ませていただきましたが、Norさんもデータの解析をされたそうですね。今回いろいろと見てみましたが、どうしてもわからなかったのが「ユニットの現在位置」を示している箇所です。わからなかったからといって、ゲームを楽しむ上では特に関係ないのですが、やっぱり気になります。ご存じの方がおられましたら、教えていただけませんか。

User avatar
Nor
大佐
大佐
Posts: 783
Joined: 2004.Feb.08(Sun) 05:09
Location: 日本

多謝!

Post by Nor » 2007.May.19(Sat) 16:34

非常に丁寧な説明ありがとうございます!私はもっぱらWAW Edで出力するcsvデータばかり見ていたので、バイナリデータとの違いの件について初耳でした。需要は少ないでしょうが、役立つ人にはきっと役立つ情報だと思います。 :pirat
ちなみに、ドイツのSS中隊に含まれる「GE 50mm Mortar」はこの値が「0C」で経験値プラスボーナスありのFast responce artillery になっているのに対し、分隊単位で別途購入した「GE 50mm Mortar」は同じ名前でもこの値が「02」で経験値プラスボーナスなしのFast responce artillery となっていました。
"elite"属性は、Formation単位で付加されるものだということは確かなようですね。
どうしてもわからなかったのが「ユニットの現在位置」を示している箇所です。
お礼のつもりでちょっと探してみたのですが、私もわかりませんでした。 :oops:

WAW Edには、"position/Property Editor"という機能があり、セーブファイルを読み込めば、各ユニットの現在位置座標(x,y)が一覧表示されます。この機能を使って、あるユニットの座標を変更し、そのデータをcsvで出力して、変更前のcsvと比較してみましたが・・・

結果は全項目で完全一致してしまいました。つまり、どうやらWAW Edで出力できるcsvデータには、ユニットの座標データは含まれていないようです。WAW Edで見る限り、セーブファイルは49個のセクションにわかれているようで、CSVで出力できるユニット関連データはそのごく一部でしかないようです。

というわけで、全くお役にたてず申し訳ないです。しかし、WAW Ed上で任意のユニット座標を変更し、それをセーブファイルに保存して、元ファイルとバイナリエディタ上で比較すれば・・・とっても面倒そうですが、こうすればわかるかもしれません。 :porc
Image

島風
暗号解読部長
Posts: 58
Joined: 2007.Mar.12(Mon) 21:51

ありがとうございました

Post by 島風 » 2007.May.20(Sun) 21:49

島風です。
 Norさんのご提案を受け、「WAW Ed上で任意のユニット座標を変更し、それをセーブファイルに保存して、元ファイルとバイナリエディタ上で比較」したところ、それらしき場所(ユニットの座標の数値が並んでいる箇所)がありました。ですが、この場所は、Norさんご指摘の通り、CSVでは出力されないようです。また、座標以外にも、ファイルのサイズを含め、実に広範囲にデータが変わっていました。どうやら、素人が手をつけては行けない、禁断の領域のようです。
 Norさん、いろいろとありがとうございました。これからも、このHPを参考に、SPWAWを楽しんでいきたいと思います。

User avatar
Nor
大佐
大佐
Posts: 783
Joined: 2004.Feb.08(Sun) 05:09
Location: 日本

遅レス失礼

Post by Nor » 2007.May.26(Sat) 17:29

え〜、超遅レスですが、WAWEdの話です。

どうやら今年二月に新バージョンが出ていた模様です。
http://www.militarygamer.com/Hosted/Chl ... /index.htm

そして、このバージョンではCSVファイルの読込不具合が解消されています。私も試してみましたが、全く問題なくCSVが読めるようになりました。

そこで、4年前に作成したもののお蔵入りとなっていた「経験・士気修正マクロ」を再度引っ張り出し、新たにいくつかの手を加えて「修正君壱号」としてリリースすることにしました。

詳しくは同梱の取説を見ていただくとして、この「修正君壱号」では、島風さんが当初お悩みであったユニット特殊能力の修正機能を装備しました。これを使えば、バイナリエディタを使うよりは多少楽になると思います。

この機能が実装できたのは、島風さんが特殊能力データのありかを探ってくれたおかげなので、改めて感謝します。 :salut

「修正君壱号」の簡単な説明は↓
http://headquarters.s4.xrea.com/spwaw/know/tech.html#04
「修正君壱号」のダウンロードは↓
http://headquarters.s4.xrea.com/spwaw/spwaw_down.html
Image

島風
暗号解読部長
Posts: 58
Joined: 2007.Mar.12(Mon) 21:51

すばらしい

Post by 島風 » 2007.May.27(Sun) 22:35

こんばんは、島風です。
 Norさん、「修正君壱号」をアップして頂きありがとうございます。バイナリーエディターをいじることなく特殊能力の維持ができるというのは、僕を含め多くの方にとって大変有用な機能だと思います。僕の情報が少しでもお役にたてて嬉しいです。今ちょうどDRのチタデレ作戦の真っ最中で、いつになったら終わることやらわかりませんが、次回アップグレード時から使わせて頂きます。

User avatar
Nor
大佐
大佐
Posts: 783
Joined: 2004.Feb.08(Sun) 05:09
Location: 日本

WAWEdのヘキサエディタを使った特殊能力値の変更方法

Post by Nor » 2007.May.31(Thu) 00:46

え〜、ほとんどの人は興味ない話題でしょうが・・・

島風さんがセーブデータ圧縮法則の一部を解読してくれ、久々にマクロなんか触ったこともあって、あわよくばWAWEdを介さずにエクセルでセーブデータを読み込んで圧縮解除するマクロを組めないものかと、ここ数日ずっとセーブデータのダンプを眺めておりました。 :oops:

結論から言うと、やっぱ無理! :porc

Code: Select all

80+繰り返し数 繰り返される数字 1バイトの数字
確かに、圧縮されているデータはこの法則に従って圧縮解除できるのですが、じゃあ80以上の値なら全て圧縮開始バイトなのかというとそうでもありません。
例えば、

Code: Select all

98 00 01
というバイト列は、いかにも圧縮指定っぽいのですが、実は変換なしです。どうやら、3バイト目の謎が解けない限り圧縮解除は無理だろうという結論に落ち着きました。 :porc


で、ここからが本題。この探索過程でWAWEdに関する資料を探っていたところ、WAWEdを使って簡単に特殊能力が変更できる方法が分かったのでお知らせしておきます。

今のところ、「修正君」はあくまで特殊能力を前面から維持する機能しかもっておらず、経験・士気値も修正してしまうので、何らかの事情で特殊能力だけを自由に変更したいという場合に使えるかもしれません。

***************************

<手順1>
WAWEdを起動して任意のシナリオorセーブデータをLoadする。

<手順2>
メニューの「Tool」-「HEX Editor」から内臓バイナリエディタを起動。

<手順3>
「Section」項目を "1"「Size」項目を "258" にする(添付図参照)。
これでデータがユニット単位で綺麗に並びます。

<手順4>
「Display」項目を任意に設定。
バイナリエディタの知識がない方は "Dec" (10進数表示)がオススメ。

<手順5>
特殊能力を示す "EA" 列までスクロールし、
変更したいユニットの該当セルをクリックして、
手順4で選択した表示形式に従って任意の値を入力する。

<手順6>
値を変更したセルがアクティブになっている状態で、「Retain」ボタンを押す

<手順7>
エディタ画面を閉じて、セーブデータを書き戻す。

***************************

操作は以上です。実質的にはバイナリエディタを使っているのですが、SPWAWに同梱されているWAWEd(旧バージョンでも可)だけで完結できるのが最大の特徴です。おそらく、慣れればこの方法が一番簡単だと思います。

注意点は、表示形式に応じて入力値を変更しなければならないこと。
例えば、「エリートで特殊能力は無し」にしたいなら、
  • "Dec"表示の場合、値は10進数で入力するので、"10"
    "Hex"表示の場合、値は16進数で入力するので、"0A"
    "Combo"表示の場合も、16進数なので、"0A"
となります。16進数入力で"A"と入力すると、文字列の”A”と認識されてしまうので、必ず二桁で入力する必要があります。

もう一つの注意点は、入力したら必ずセルがアクティブな状態で「Retain」ボタンを押すこと。これを忘れると変更が反映されません。

ちなみに、このセクション1のデータは、CSVファイルで出力されるユニットデータと全く同一です。セーブファイルをバイナリエディタで覗いた場合との違いは、圧縮が解除されてるかどうかだけです。
Attachments
wawed_hex.gif
WAWEdのヘキサエディタを使った特殊能力値の変更方法
wawed_hex.gif (16.74 KiB) Viewed 8183 times
Image

User avatar
Nor
大佐
大佐
Posts: 783
Joined: 2004.Feb.08(Sun) 05:09
Location: 日本

WAWEdのヘキサエディタを使ったユニット座標の変更方法

Post by Nor » 2007.May.31(Thu) 23:36

え〜、ほとんど誰の役にも立たないエディットシリーズ第二回です。 :cool:
今回のテーマは、島風さんよりリクエストのあった「ユニット座標の変更」です。

地道な試行錯誤でついに発見しましたよ!!
例によってWAWEdで全ての操作を行います。

詳細手順は省略しますが、WAWEdのHEXエディタで、

「Section」項目を "17"「Size」項目を "20" にする。
これでデータがユニット単位で綺麗に並びます。

このセクション17のデータは、
  • 00列 ユニットのX座標
    02列 ユニットのY座標
    0E列 被発見フラグ(0=被発見、1=未発見)
となっているようです。この3つは確かでしょう。残り17個のバイト列が何を指すかは未だ解読できておりませんが・・・。
Image

島風
暗号解読部長
Posts: 58
Joined: 2007.Mar.12(Mon) 21:51

3バイト目の意味

Post by 島風 » 2007.Jun.02(Sat) 11:37

島風です。
 「ほとんど誰の役にも立たないエディットシリーズ」って、これ、いいですね、とてもコアな感じて。

 さて、圧縮データの3バイト目の意味がわかりました(たぶん)。これは、

次の圧縮データが何バイト後にくるか-1

の数字のようです。例えば

86 00 02 09 01 83 00 01

の場合、3番目の 02 は次の繰り返しのデータが 2+1=3 バイト後の 83 から始まっていることを表しています。また、繰り返しが連続する場合、すなわち、3番目に相当する値が 0 の時は、以前に書いたように、省略されます。Norさんが書かれていた

98 00 01

の前がどうなっているか、検証していただけませんか。

 それから、紹介していただいた HEX Editor による修正ですが、「Section」項目は直接数字を入れのではなくて、上下矢印で変えてやらないとだめなんですね。気づくのに小一時間かかってしましました。
 それにしても、「ユニット座標の変更」をよく見つけられましたね。「地道な試行錯誤」と簡単に書いてありますが、かなりの時間をかけられたのではないでしょうか。
残り17個のバイト列が何を指すかは未だ解読できておりませんが・・・。
 うわぁ、とても気になりますね。なんたがうずうずしてきました。悪魔のおいでおいでが........。いやいや、Kurskで待っている戦友たちをほっとくわけにはいきません。まずはチタデレを終えてから、に、します。

User avatar
Nor
大佐
大佐
Posts: 783
Joined: 2004.Feb.08(Sun) 05:09
Location: 日本

Re: 3バイト目の意味

Post by Nor » 2007.Jun.04(Mon) 00:14

島風 wrote:さて、圧縮データの3バイト目の意味がわかりました(たぶん)。これは、
次の圧縮データが何バイト後にくるか-1
の数字のようです。例えば
86 00 02 09 01 83 00 01
の場合、3番目の 02 は次の繰り返しのデータが 2+1=3 バイト後の 83 から始まっていることを表しています。また、繰り返しが連続する場合、すなわち、3番目に相当する値が 0 の時は、以前に書いたように、省略されます。Norさんが書かれていた
98 00 01
の前がどうなっているか、検証していただけませんか。
もはやいちいち書くまでもありません。私の手元のデータも全てこの法則で圧縮解除できました!!!:shocked
う〜む・・・言われてみればむちゃむちゃ簡単な・・・しかし自分では絶対気づかなかった・・・

この件を調べるにあたって、Matrix GamesやDepotの掲示板も検索しまくったのですが、似たような質問はあったものの、答えられる人は皆無。データ圧縮の仕組みを知っているのは、開発陣を除けばごくごく少数(WAWEdやCampaign Watcherなど関連ツールの作者)だけらしいです。

というわけで、島風さん・・・・あ、あんた・・・・天才だ!!
この功績を称して「暗号解読主任」の称号を贈ります。 :cheers


これで「セーブデータをエクセルで読み込み計画」も何とかなりそうな気がします。
セーブデータの構造でわからないことはまだまだ無数にあるので、これからも頼りにしてまっせ。 :pirat

というわけで、早速質問です。 :cool:

**********************
WAWEdで出力できるダンプテーブル情報(圧縮解除済み)によれば、
セーブデータのセクション0は0〜20バイト目まで、セクション1は34バイト目から800ユニット分(258×800=206400バイト)のようです。

セクション0は単なるヘッダ情報のようで、どのセーブファイルでも完全に同一だと思われます。セクション1はご存知の通りユニット情報です。セーブファイルでは常に800ユニット分の容量が確保されているようです。

ここで気になるのが、セクション0と1の間にあるデータです。
WAWEdではダンプできないこのセクション0.5とでも言うべきわずか13バイトのデータは、バイナリエディタでみると次のようになっています。

Code: Select all

01 00 00 00 FD 17 00 00 01 00 00 00 05
いくつかのセーブファイルを比較してみると、先頭から5〜6バイト(例では"FD 17")の値だけが変化するようです。

さてさて、私の素人予想としては、この値は何かのオフセット値ではないか?と愚考しているのですが、果たしてどんなもんでしょ??

ちなみに、セクション1と2の間にも、WAWEdでダンプできないこのようなデータ部があるようです。もしかすると、WAWEdはセーブデータを圧縮解除する際にこういう部分の情報を使っており、ゲームとは直接関係ないのでダンプ可能範囲から外しているんじゃないかと・・。

いやいや、この意味がわからないと困るというわけではないし、全く急がないので、もしもお暇があればちらっと見てやってください。 :salut
Image

島風
暗号解読部長
Posts: 58
Joined: 2007.Mar.12(Mon) 21:51

身に余る光栄です

Post by 島風 » 2007.Jun.05(Tue) 00:56

島風です。
 Norさん、この身には過ぎるお褒めの言葉をいただき、ありがとうございます。謹んで「暗号解読主任」の称号を受けさせていただきます。微力ですが、精一杯つとめさせていただきます。
 ですが、これは、僕一人の力で解明できたわけではありません。バイナリーファイルと WAW ED の出力ファイルを見比べて、たまたま気づいただけで、Norさんに WAW ED を紹介してもらわなければ全くお手上げでした。また、僕は全く知らなかったデータ解析のヒント(csvファイルのことやHex エディターのsection, sizeなど)をいただけたのもたいへん参考になりました。


 では、早速第1回目の任務(宿題への回答)、

セクション間のデータはどのような情報を含んでいるのか

ですが、先頭から5〜7(〜8)バイトの数字は、そのセクションのデータのバイト数のようです。
 データはセクション0からセクション48までの合計49セクションから構成されています。そして、セクション0を除く各セクションの前には、Norさんご指摘のような各セクションのデータの「ヘッダー」の様な部分が12バイトあります。書式は例えば、

01 00 00 00 61 E6 01 00 01 00 00 00 ; セクション1の前

04 00 00 00 F4 02 00 00 01 00 00 00 ; セクション4の前

となっています。最初の数字はセクション番号で、そのあとの3バイトは必ず「00 00 00」です。次から3(〜4)バイトがそのセクションデータの大きさをバイト数で表したもので、セクション4の例では「F4 02 00」の部分で、これは16進法で「2F4」10進法で「756」バイトの大きさがあることを示しています。DRのチタデレのような大規模シナリオだと、セクション1の例のように「61 E6 01」となり、これは16進法で「1E661」10進法で「124513」バイトの大きさがあることを示しています。
 また、9バイト目は「00」と「01」の場合があります。「00」の場合、セクションの最初のバイトデータはそのまま数字データとして扱われ、Hex エディターでダンプされます。「01」の場合、セクションの最初のバイトデータは数字データとしては扱われず、例えば繰り返し書式の最初の 80+# であったりして、Hex エディターでダンプされません。また、9バイト目が「01」で、セクションの最初のバイトデータが繰り返し書式の 80+# ではない場合もあります。例えばセクション1の最初のバイトデータは 「05」 ですが、これは、5+1=6 バイト後から繰り返し書式の 80+# が始まることを意味しています(070605修正)。
 続く10〜12バイトは全セクションで「00 00 00」でした。

 各セクションは1バイトと短いものから、セクション1のように大きいものまでさまざまです。Norさんはセクション0, 1, 17が、それぞれ、ファイルのヘッダー、ユニットの基本データ、位置座標を示すことを明らかにされました。ですが、それ以外のセクションが何を意味するかはまだ不明です。うーん、まだまだ奥が深いですね。
Last edited by 島風 on 2007.Jun.05(Tue) 08:07, edited 1 time in total.

User avatar
Nor
大佐
大佐
Posts: 783
Joined: 2004.Feb.08(Sun) 05:09
Location: 日本

Re: 身に余る光栄です

Post by Nor » 2007.Jun.05(Tue) 02:39

またしても・・なんという完璧な回答!!それもこんな短時間で!!私はモニタの前で一人、狂喜乱舞しております!!いやあ、マジで鳥肌立ちました! :gun
わずか一日ですが、この功績を称えて「暗号解読部長」に格上げです。 :cheers

そうか、各セクションのヘッダは12バイトですか!そして1バイト目が「セクション番号」とは!!!こんな単純なことにも気づかなかった自分が情けない。 :pale
さらに注目の5~7バイト目はデータ容量か!バイナリエディタで計算がピタリとあって大感激でゴザイマス。
さらにさらに、9バイト目の謎まであっさり解いてしまうとは!!さぞや名のある本職さんなのでしょうね。いやあもう感激に耐えません。 :cool:

Norさんはセクション0, 1, 17が、それぞれ、ファイルのヘッダー、ユニットの基本データ、位置座標を示すことを明らかにされました。ですが、それ以外のセクションが何を意味するかはまだ不明です。
え〜と、現時点で私が知っているのは、実はもうちょっとありまして・・・・

セクション34   レコード長32   リーダー関連(指揮官技能、階級など)
セクション35   レコード長46   編隊構造(編隊番号、構造など)
セクション37   レコード長なし? シナリオ情報(年月、場所、対戦国、VHデータなど)

という具合です。そしておそらくセクション2はマップデータじゃないかと思っております。今後も何か発見があればお知らせします。


さてさて、最後にまたしても質問でございます。 :oops:
**************************

単刀直入に疑問点を言うと、セクション1の終わり方の規則を知りたいのです。

セクション1の容量は800ユニット分のデータに相当する206400バイトが確保されているようです。しかし、実際にデータとして記録されているユニット数はまちまちです。

そして、最終ユニットのデータの後には、"FF 00" という値が繰り返され、さらにその後に "C9 00" というような2バイト分のデータが存在します。その後は、今回教えていただいたセクション2のヘッダが来ます。

例えば、手元のデータでは最終ユニットのデータ終了部分は次のようになっています。

Code: Select all

8D 00 01 01 FF 00 FF 00 ...
最初の3バイトは、例の圧縮情報です。その後に"01"が立って、"FF 00" が繰り返されています。ですが、1ユニットは258バイト分のデータを持つので、実際には"01"の後にさらに9バイト分の"00"が存在することを確認しています。

このことから、最終ユニットのデータ末尾に"00"が連続する場合は、"80+α"という圧縮情報を示さずに、"FF 00" の繰り返しでデータを埋めていくようです。

この例では、登場ユニットは22個なので、理屈で言えば残り778ユニット分のデータ(200724バイト)と最終ユニットの末尾にある9バイト分の"00"の合計200733バイトが、全て”00”で埋められるはずです。で、とりあえずアホみたいに"FF 00"の数を数えてみました。 :porc

その結果、ユニット数22の場合は、"FF 00"の繰り返しは3160バイトありました。つまり、"FF"は1580個、"00"が1580個です。さらに、ユニット数20の場合は3168バイト。ユニット数140の場合は2680バイトでした。

どうやら実ユニット数が多いほど、"FF 00"の繰り返し回数が減っていくのは間違いない。で、単純に繰り返しバイト数を残りユニット数(800−実ユニット数)で割り算してみると、いずれも4.06くらいになります。つまり、"FF 00 FF 00"という4バイト程度で1ユニット分258バイトのデータを埋めている勘定になりますが・・・・こんぴゅーたーがこんなアバウトな計算をしてるわけがない!! :evil:


というわけで、今度は是非この謎を解いてくださいませ。セクション2のヘッダ直前にある2バイト分のデータが鍵を握っているような気がするのですが・・・・・ :salut
Image

Post Reply