# Assets

`Background.png`は画面全体へ表示する背景画像です。地形やキャラクターとは異なり、当たり判定を持ちません。

実行時に読み込む画像、音声、ステージデータをまとめています。画像と音声の読み込みは`Source/Platformer`のManagerが担当します。

## Stage01.csvの値

| CSV値 | `StageCell` | 意味 |
| --- | --- | --- |
| `0` | `Empty` | 空白 |
| `1` | `Goal` | ゴール |
| `2` | `PlayerSpawn` | プレイヤーの開始位置 |
| `10` | `Brick` | レンガ地形タイル |
| `11` | `Moss` | 苔石地形タイル |
| `20` | `Spike` | 棘トラップ |
| `90` | `EnemySpawn` | 敵の配置位置 |

`Goal`と`PlayerSpawn`は、各ステージCSVに1つずつ置きます。どちらかがない場合や2つ以上ある場合は読み込みエラーになります。

CSV値と意味の対応は`StageCell`へ集約します。`1`～`9`は進行・ギミック、`10`～`19`は通常地形・障害物、`20`～`29`はトラップ、`90`～`99`は敵配置の値域です。整数値は配布済みCSVとの約束なので、列挙子を追加するときも既存値は変更しません。

値域はCSVを整理するための規約です。プログラムでは数値の範囲で種類を判断せず、`StageCell::Goal`のような名前と定義表を使います。`TryParseStageCell()`は未定義値を拒否します。

CSVを読み込めない場合は、エラー画面へ可能な限り行、列、原因を表示します。数値以外、空セル、列数不一致、未定義値、`Goal`または`PlayerSpawn`の不足・重複を区別します。

画像タイルの種類は`StageCell`と`tileDefinitions`の対応表で管理します。新しい種類を増やす場合は、画像、`ImageId`と画像パス、`StageCell`の未使用値、タイル定義、CSVの順に登録します。表示はタイル内座標の`drawRect`、地形判定は`isSolid`、即死判定は`isHazard`と`hazardRect`を参照します。
