cginfo.cgs

cginfo.cgsは、HLG設計画面における船体以外のパーツについて、その画像や当たり判定を定義しているファイルです。
なお、厳密には個々のパーツではなく、パーツの形毎の定義になります。
ファイル長:1,174,000byte(固定)

現状ではわからない部分だらけですが、実用(パーツの改変)上問題ないと判断し、解析データを公開します。

仮作成

データ構造

cginfo.cgsには全体のヘッダがありません。単純に各画像のデータが並んでいます。
各々のパーツのデータについては、定義ブロック、側面図当たり判定ブロック、上面図当たり判定ブロックの3ブロックに分かれます。
1パーツあたり、0x024B=587byteのデータサイズになります。

定義ブロック

まだわからない部分が多いです。
注意点として、側面図、上面図の画像ID(読み込み画像の左上の座標)が挙げられます。
例えば元の画像が640x640のサイズであれば、640x640=409,600pixel存在することになりますが、0x20-0x23及び0x24-0x27の値は、この中の何番目のpixelに当たるかを指しています。
仮に0x20-0x23の値が0x00024F32であった場合、0x00024F32=151346番目のpixelを指していることになります。画像の横のサイズが640であれば、
151346÷640=236余り306なので、この場合、座標(305,236)のpixelを指している事になります。
次の注意点は画像読み込み範囲です。
兵装の前後、高さ、幅が定義されており、その値に従います。側面図なら縦=高さ、横=前後、上面図なら縦=幅、横=前後です。
また、HLGにおける1マスは4pxになります。このため、例えばHLG上での高さ=10なら、読み込まれる画像の高さは40pxになります。
address 説明
0x00-0x1B? パーツの名称ですが、正確なサイズがわかりません。
短いものは9byte程度で終わり、すぐにデータ列が続きます。
一方長いものは24byte以上あります。
0x0A ?名前の短いものはデータが始まります。ダミーデータの可能性もあります。
0x0B-0x0E ?名前の短いものはデータが始まります。ダミーデータの可能性もあります。
0x0F ?名前の短いものはデータが始まります。ダミーデータの可能性もあります。
0x10-0x13 ?名前の短いものはデータが始まります。ダミーデータの可能性もあります。
0x14-0x17 ?名前の短いものはデータが始まります。ダミーデータの可能性もあります。
0x18-0x1B ?名前の短いものはデータが始まります。ダミーデータの可能性もあります。
0x1C-0x1F ?名前の短いものはデータが始まります。ダミーデータの可能性もあります。
0x20-0x23 パーツの側面図の画像IDです。※厳密には画像の左上の座標です。
0x24-0x27 パーツの上面図の画像IDです。※厳密には画像の左上の座標です。
0x28-0x2B ほとんど0xFFFFFFFFだが、一部例外有り。何かのフラグ?
0x2C-0x2D 0x0000
0x2E 画像読み込み範囲(前後長)※この値*4pxの範囲を読み込む
0x2F 画像読み込み範囲(高さ)※この値*4pxの範囲を読み込む
0x30 画像読み込み範囲(幅)※この値*4pxの範囲を読み込む
0x31 ?おそらくは、前向き後ろ向き兵装の違いに由来する何か
0x32 甲板からの高さ。※但し使われている気配がない
0x33
0x34
0x35
0x36 甲板から沈み込む深さ。砲塔基部やVLSなど、甲板下が存在するものに利用。
一応定義上0x32+0x36=0x2Fになる。但し0x32は使われている気配なし
0x37
0x38 画像の読み込みファイルを指定。0:駆逐兵装-FR、1:空母兵装-FR.bmp、2:巡洋兵装-FR.bmp、3:戦艦兵装-FR.bmp等
画像変更の際はかならずこれもセットで。
0x39 ?0x00?
0x3A ?0x00?



側面図当たり判定ブロック

アドレス0x3B~0xBAにかけて記述されます。
側面図を横に短冊切りにして、右の方から構造物の存在フラグをつけていくような感じです。
(後日画像での説明)
短冊切り1行分のデータは4byteで構成され、最大で32列分のデータが存在します。
面倒なのは、この存在フラグはbit単位(つまり1行32bit)で管理されていることです。すなわち、以下のようになります。
例:0x001FC03C(バイナリエディタ上では3CC01F00)なら以下のとおりです。※下の黒四角にあたり判定あり
0x00 0x1F 0xC0 0x3C
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0
注意すべき点は、0x2Fで定義された分の行データが存在しないと、その分当たり判定が沈み込んでいってしまう点です。
例えば砲塔の基部が邪魔だなと思って、基部のデータを除去すると、砲塔自体が船体に沈み込んでしまいます。
これを回避するには、0x2Fの高さと0x36の沈み込み深さを書き換えてやる必要があります。

以下、さらに実際の例を示します。
100cmⅠR1(100cm砲、前向きの画像)側面図の当たり判定(全高12、甲板上高さ5、深さ7)
バイナリデータ:00FFFF01FFFFFF01FFFFFFFF00E0FFFF00C0FFFF00C0FFFF00C0FFFF00C0FFFF00C0FFFF00C0FFFF00C0FFFF00C0FFFF00C0FFFF
→0x01FFFF00、0x01FFFFFF、0xFFFFFFFF、0xFFFFE000、0xFFFFC000、0xFFFFC000、0xFFFFC000、0xFFFFC000、0xFFFFC000、0xFFFFC000、0xFFFFC000、0xFFFFC000、0xFFFFC000
□□□□□□□■■■■■■■■■■■■■■■■■□□□□□□□□
□□□□□□□■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■□□□□□□□□□□□□□
■■■■■■■■■■■■■■■■■■□□□□□□□□□□□□□□↑ここから上が甲板上の構造物
■■■■■■■■■■■■■■■■■■□□□□□□□□□□□□□□↓ここから下は甲板の下の砲塔基部
■■■■■■■■■■■■■■■■■■□□□□□□□□□□□□□□
■■■■■■■■■■■■■■■■■■□□□□□□□□□□□□□□
■■■■■■■■■■■■■■■■■■□□□□□□□□□□□□□□
■■■■■■■■■■■■■■■■■■□□□□□□□□□□□□□□
■■■■■■■■■■■■■■■■■■□□□□□□□□□□□□□□
■■■■■■■■■■■■■■■■■■□□□□□□□□□□□□□□



上面図当たり判定ブロック

アドレス0x00CF~0x014Eにかけて記述されます。
側面図と同様、上面図を上から(艦の左側面から)短冊切りにして、右の方から構造物の存在フラグをつけていくような感じです。
(後日画像での説明?側面図だけにするかも)
短冊切り1行分のデータは4byteで構成され、最大で32列分のデータが存在します。
側面図の場合と異なり、当たり判定の中央部に気をつけて記述していく必要があります。

以下、実際の例を示します。
100cmⅠR1(100cm砲、前向きの画像)上面図の当たり判定(当たり判定のある部分のみ抜粋)
バイナリデータ:0000C0010000F80F0000FC1F0000FE3F0000FF7F0000FF7F0080FFFF00F8FFFFFFFFFFFF
FFFFFFFF00F8FFFF0080FFFF0000FF7F0000FF7F0000FE3F0000FC1F0000F80F0000C001
→0x01C00000、0x0FF80000、0x1FFC0000、0x3FFE0000、0x7FFF0000、0x7FFF0000、0xFFFF8000、0xFFFFF800、0xFFFFFFFF
0xFFFFFFFF、0xFFFFF800、0xFFFF8000、0x7FFF0000、0x7FFF0000、0x3FFE0000、0x1FFC0000、0x0FF80000、0x01C00000
□□□□□□□■■■□□□□□□□□□□□□□□□□□□□□□□
□□□□■■■■■■■■■□□□□□□□□□□□□□□□□□□□
□□□■■■■■■■■■■■□□□□□□□□□□□□□□□□□□
□□■■■■■■■■■■■■■□□□□□□□□□□□□□□□□□
□■■■■■■■■■■■■■■■□□□□□□□□□□□□□□□□
□■■■■■■■■■■■■■■■□□□□□□□□□□□□□□□□
■■■■■■■■■■■■■■■■■□□□□□□□□□□□□□□□
■■■■■■■■■■■■■■■■■■■■■□□□□□□□□□□□
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■□□□□□□□□□□□
■■■■■■■■■■■■■■■■■□□□□□□□□□□□□□□□
□■■■■■■■■■■■■■■■□□□□□□□□□□□□□□□□
□■■■■■■■■■■■■■■■□□□□□□□□□□□□□□□□
□□■■■■■■■■■■■■■□□□□□□□□□□□□□□□□□
□□□■■■■■■■■■■■□□□□□□□□□□□□□□□□□□
□□□□■■■■■■■■■□□□□□□□□□□□□□□□□□□□
□□□□□□□■■■□□□□□□□□□□□□□□□□□□□□□□

なお、0xBB~0xCE、0x014E~0x24Aにはデータがありません。



実際の当たり判定

実際の当たり判定は、あるパーツの側面図、上面図の両方の当たり判定のあるマスに、別のパーツの両方の当たり判定のあるマスが重なった時に「重なった」と判定されます。
逆に言えば、側面図だけでの重なりや上面図だけでの重なりは「重なり」と判定されません。
よって、当たり判定を減らしたい時には、上面図、または側面図のいずれかの当たり判定を減らすだけで十分であると考えられます。
(※色々考える必要がないという点では上面図の当たり判定編集がオススメ)
逆に、当たり判定を追加したい時には、上面図、側面図両方の編集が必要であると考えられます。

また、これらの仕様上、思っても見なかった場所や、邪魔な部分にも当たり判定が出てきてしまう場合があります。
具体的に、ここまで例として出してきた100cm砲が、3次元的にはどのような当たり判定を持っているか示します(甲板上のみ)
HLG上の100cm砲と比べて、ターンテーブル上に巨大な張り出し部分が出てきている事が分かります。
このため、一見何もない部分にもパーツが配置出来ない事になってしまうのです。
(「リアルに」考えるなら砲身の旋回部分に余計な物のっけようとする方がアレなのですが・・・)



可能っぽい改造の一例

  • 煙突の内部の当たり判定削って、内部にVLS仕込めるようにする。(煙突ミサイル化)
  • 波動砲をいっその事甲板下に沈めてしまう(宇宙戦艦ヤ●ト)
  • 艦橋の重ねあわせ(現代型艦橋等)


タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2015年04月01日 21:10
添付ファイル