データのロード順序

data/jsonディレクトリ内のすべてのファイルは最終的に読み込まれますが、それらが読み込まれる順序は非常に重要です。特定のオブジェクト(例:レシピ)が、他の種類のオブジェクト(例:そのレシピで必要とされるスキル)に依存している場合、依存されている側のオブジェクトが先にロードされている必要があります。 もし依存関係が満たされないまま(例:スキルがロードされる前に、そのスキルに依存するレシピをロードしようとする)オブジェクトを処理しようとすると、プログラムが未定義のメモリ領域にアクセスしようとするなどの予期せぬ事態が発生します。

この問題は、多くの場合、セグメンテーション違反として現れ、プログラムが強制終了します。これはユーザー体験を著しく損なう「非常に悪いこと」であり、適切なロード順序を確保することが、この種の強制終了を防ぐ鍵となります。

CataclysmがJSONファイルを検索およびロードする方法は、ディレクトリツリーdata/json/内で幅優先探索(Breadth-First Search, BFS)を実行することです。これは、data/json/whatever.jsondata/json/subdir/whatever.jsonよりも必ず先に読み込まれることを意味します。この動作は、依存関係のロード順序を確保する方法を示しています。

たとえば、シナリオが職業に依存し、その職業がスキルに依存している場合、以下のようなディレクトリ構造にすることが推奨されます。

data/json/
  skills.json
  professions/
    professions.json
    scenarios/
      scenarios.json

これにより、ロード順序は skills.json、次にprofessions.json、そして scenarios.jsonとなります。

同一階層でのロード順序

ファイル(またはディレクトリ)が同一階層にある場合(つまり、すべてdata/json/内にある場合など)、それらは辞書的順序で読み込まれることに注意してください。これは、ASCII文字のみを使用するファイル名にとっては、ほぼアルファベット順に相当します。UTF-8またはその他の非ASCIIファイル名の場合、ファイル名はコードポイントによって順序付けられます。