マップデータが肥大化しました

with コメントはまだありません

毎回お伝えしているC++版Cities Boxの進捗報告です。

Cities Boxのマップデータは今まで独自形式のガラパゴス仕様でしたが、今回からJSON形式にします。

 

JSON形式にすることで、

・可変長配列が使えるようになる

・OSによる改行コードの違いを気にする必要がなくなる

・データが壊れにくい

・パーサーが使えるので、管理が楽

といったメリットがあります。

 

一方で、ファイルサイズが肥大化するというデメリットがあります。

今まで1.9MBだったマップデータは、JSON形式にすることで9.5MBにまで増えました。ちょうど5倍です。

それでもメリットのほうが多いので、ファイルサイズについては目をつむるということにさせてください。

なるべく無駄な項目(空の配列など)を除くように工夫しようと思います。

 

ついでに暗号化も行うようにしました。簡単なXOR暗号を用いています。

オープンソースなので改造すれば容易にデータの改変が可能ですが、

オフラインゲームごときで誰かが困るわけではないのでこれで良しとします。

マップデータの新形式の拡張子はcbjです。Cities Box Json map dataの略です。

旧形式のcbdファイルも読み込めますが、保存はcbjのみとなっています。

cbdとcbjの内容はほぼ互換性がありますが、一部配列の名前が変わったり可変長配列になったり、

アドオンの始点からの距離を示す配列の各数値の算出方法が変わったりしています。

 

旧形式ではそれぞれの配列ごとにまとめて記述していましたが、新形式ではマスごとにまとめて記述しています。

実はこれはゲーム本体でのマップの扱い方に由来していて、

HSP版ではアドオンの名前はアドオンの名前の配列、カテゴリ名はカテゴリ名の配列、といった具合に

データの種類ごとに配列として扱っていました。

しかし、C++版では各マスに構造体を生成し、その構造体にアドオンの名前なりカテゴリ名なりを格納する方式になりました。

今まではデータが横の繋がりだったのに対し、C++版では縦の繋がりになった、といった具合です。

 

ついでにメニューも作りました。

HSP版と見比べると、

 

だいぶスッキリしましたね。

アイコンが全部白いと見ずらい気がするので、今後色を付けるかもしれません。

 

そうそう、表示関連のバグも直ったんですよ。

ようやく正常に1×2、2×1、2×2などの複数のマスを使うアドオンが正常に表示できました。いやあ、長かった…

実は水路の表示もバグってたんですが、それも直りました。

 

今後はいよいよマップ操作の部分に入っていきたいと思います。

が、その前にアドオンファイルもJSON形式化しようと思います。

実は、アドオンに新しい役割や機能をもたせようと思っていて、それに向けてのことです。

Leave a Reply