# 機能設計書 84-描画品質設定

## 概要

本ドキュメントは、K-ShootManiaにおけるHIGH/MEDIUM/SMALLの3段階描画品質設定機能の設計を記述する。オプション設定画面のページ0(画面設定)のselnow=4として提供される。

### 本機能の処理概要

**業務上の目的・背景**：K-ShootManiaはさまざまなスペックのPCで動作する必要があり、低スペック環境でも快適なプレイ体験を提供するために描画品質の段階的調整が必要である。高品質設定はリッチな視覚効果を提供し、低品質設定はフレームレート維持を優先する。

**機能の利用シーン**：オプション設定画面のページ0でselnow=4を選択し、左右キーで描画品質を切り替える。設定はゲームプレイ時のテクスチャ解像度、エフェクト表示、背景描画に影響する。

**主要な処理内容**：
1. lowquality変数の3段階(0:HIGH/1:MEDIUM/2:SMALL)切替
2. 設定変更時にテクスチャキャッシュの再構築を伴う（Esc押下時にlowquality変更が検出された場合）
3. config.iniへのlowquality値の保存

**関連システム・外部連携**：テクスチャキャッシュシステム、プレイ画面描画エンジン(play_graphics.hsp)

**権限による制御**：特になし。全プレイヤーが変更可能。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 8 | オプション設定画面 | 主画面 | lowquality変数によるHIGH(0)/MEDIUM(1)/SMALL(2)の3段階描画品質設定 |

## 機能種別

設定変更

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| lowquality | int | Yes | 描画品質レベル(0:HIGH/1:MEDIUM/2:SMALL) | 0, 1, 2 |

### 入力データソース

- オプション設定画面上の左右キー操作
- config.iniのlowquality設定値

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| lowquality | int | 描画品質レベル(0:HIGH/1:MEDIUM/2:SMALL) |

### 出力先

- config.ini（lowquality設定値）
- テクスチャキャッシュ（変更時に再構築）

## 処理フロー

### 処理シーケンス

```
1. 左キー押下時（pagenow=0, selnow=4）
   └─ lowquality++ (最大2でクランプ: lowquality>2の場合2)
2. 右キー押下時
   └─ lowquality-- (最小0でクランプ: lowquality<0の場合0)
3. 表示
   └─ lowquality値に対応するラベル表示
      ├─ 0: lang.3.3 (LARGE/きれい)
      ├─ 1: lang.3.4 (MEDIUM/ふつう)
      └─ 2: lang.3.5 (SMALL/軽量/非推奨)
4. Esc押下時
   └─ lowquality変更検出(lowquality!=lowqualityp)でキャッシュ再構築
```

### フローチャート

```mermaid
flowchart TD
    A[selnow=4選択] --> B{左右キー?}
    B -->|左| C[lowquality++ クランプ2]
    B -->|右| D[lowquality-- クランプ0]
    C --> E[表示更新]
    D --> E
    E --> F{Esc押下?}
    F -->|No| B
    F -->|Yes| G{lowquality変更?}
    G -->|Yes| H[キャッシュ再構築]
    G -->|No| I[通常遷移]
    H --> I
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-84-01 | 品質範囲制限 | 0(HIGH)〜2(SMALL)の3段階に制限 | 左右キー操作時 |
| BR-84-02 | 変更検出 | lowqualitypに変更前の値を保持し、Esc時に比較 | Esc押下時 |
| BR-84-03 | キャッシュ再構築 | 品質変更時にテクスチャキャッシュを削除し再構築 | 品質変更が検出された場合 |
| BR-84-04 | デフォルト値 | lowquality=1(MEDIUM) | 初回起動時 |

### 計算ロジック

特になし。単純な値の増減とクランプ。

## データベース操作仕様

本機能はデータベースを使用しない。

### 操作別データベース影響一覧

| 操作 | 対象ファイル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| 設定保存 | config.ini | WRITE | lowquality値の保存 |

## エラー処理

### エラーケース一覧

特になし。値はクランプにより常に有効範囲内に収まる。

### リトライ仕様

なし。

## トランザクション仕様

config.iniへの保存は*saveconfigサブルーチンによる一括書き込み。

## パフォーマンス要件

品質変更時のテクスチャキャッシュ再構築で一時的な処理遅延が発生する。

## セキュリティ考慮事項

特になし。

## 備考

- 左キーで品質が下がり(lowquality増加)、右キーで品質が上がる(lowquality減少)点に注意。直感に反する操作感だが、設定項目の矢印表示との整合性を保つ設計である。
- lowqualityはプレイ画面の描画処理(play_graphics.hsp, play_draw_frame.hsp)で参照され、テクスチャ解像度やエフェクト描画の品質を制御する。

---

## コードリーディングガイド

本機能を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | kshootmania.hsp | `kshootmania.hsp` | **283行目**: lowquality=1のデフォルト値 |

#### Step 2: エントリーポイントを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | option.hsp | `src/scene/option.hsp` | **240-242行目**: 左キーでlowquality++、**391-393行目**: 右キーでlowquality-- |

**主要処理フロー**:
1. **240行目**: `lowquality++` と2でのクランプ
2. **391行目**: `lowquality--` と0でのクランプ
3. **541-547行目**: 表示処理（品質ラベル表示）
4. **52行目**: `lowqualityp=lowquality` で変更前値を保持
5. **1089行目**: `lowquality!=lowqualityp` で変更検出

### プログラム呼び出し階層図

```
on_update_option (option.hsp:1)
    │
    ├─ 左右キー処理 (selnow=4)
    │      └─ lowquality増減 + クランプ
    │
    ├─ 表示処理 (pagenow=0)
    │      └─ *drawconfigitem (品質ラベル表示)
    │
    └─ Esc押下時
           ├─ *saveconfig → config.ini保存
           └─ lowquality!=lowqualityp → キャッシュ再構築
```

### データフロー図

```
[入力]                     [処理]                        [出力]

左右キー操作        ───> lowquality変更(0-2)       ───> 画面表示更新

config.ini          ───> lowquality読み込み         ───> lowquality設定
(起動時)                  (505行目)

Escキー押下         ───> *saveconfig               ───> config.ini更新
                         変更検出                        キャッシュ再構築
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| option.hsp | `src/scene/option.hsp` | ソース | 描画品質設定の操作処理 |
| kshootmania.hsp | `kshootmania.hsp` | ソース | 変数初期化・config読み込み・保存 |
| play_graphics.hsp | `src/scene/play/play_graphics.hsp` | ソース | プレイ時のlowquality参照による描画品質制御 |
| play_draw_frame.hsp | `src/scene/play/play_draw_frame.hsp` | ソース | プレイ時の描画処理(品質依存) |
| config.ini | `config.ini` | 設定 | lowquality設定値の保存 |
