リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
島ごとの固有モンスター図鑑カード表示(島名・生息バイオーム・出現率バッジ付き)
## 1. 目的
現在の図鑑タブはエリア別(バイオーム別)のモンスター一覧を表示しているが、ワールドマップが複数の島で構成されているにもかかわらず「どの島で出会ったモンスターか」が図鑑上で分からない。島単位で図鑑を整理することで、島ごとの攻略進捗や収集達成感を高める。
## 2. 具体的な仕様
### 2-1. 図鑑タブのUI変更
- 図鑑タブ上部に島セレクタ(タブまたはプルダウン)を追加する。島名は `scenario_json` の islands 配列から取得し、「全島」「島1: ○○島」「島2: △△島」… と並べる。
- 島セレクタで絞り込むと、その島に紐づくモンスターカードだけが表示される。
- 「全島」選択時は現行と同じく全モンスターをバイオーム別に表示する(既存動作を維持)。
### 2-2. モンスターカードへの追加情報
各モンスターカードに以下のバッジを追加する(CSS のみ、既存カードレイアウトを崩さない)。
- **島名バッジ**: 「○○島」を金色ラベルで右上に表示。
- **出現率バッジ**: state_json の撃破回数から「レア(1〜2回)」「普通(3〜9回)」「多い(10回以上)」を3段階のアイコン(★☆☆ / ★★☆ / ★★★)で表示。
- **未遭遇モンスター**: 島ごとに「???」でシルエット表示(名前・画像を非表示、ドット絵をグレーアウト)。既訪問の島に生息するが未遭遇のモンスターのみ対象とする。
### 2-3. PHP側の変更
- `rpgsf_play_bestiary_groups()` の戻り値に `island_id` / `island_name` フィールドを追加する。
- モンスターの island_id は、`scenario_json` の `islands` 配列内の `monster_table` または `enemy_table` キーを参照して解決する。マッチしない場合は「不明の島」として扱う。
- 既存の `bestiary_groups` 構造はそのまま残し、island フィルタは JS 側でクライアント描画時に適用する(PHP の出力 JSON は変更しない)。
### 2-4. JS側の変更
- 図鑑描画関数に `renderBestiaryByIsland(islandId)` を追加し、既存の `renderBestiary()` を内部から呼び出す形でラップする。
- 島セレクタの change イベントで再描画するだけなので、ページ遷移・Ajax は不要。
### 2-5. スマホ対応
- 島セレクタはスクロール可能な横スクロールタブ(`overflow-x: auto; white-space: nowrap;`)とし、タップしやすいよう最小高さ 44px を確保する。
## 3. 既存機能との整合
- 図鑑タブの既存バイオーム別表示は「全島」選択時にそのまま動作し、壊れない。
- 撃破回数・ドット絵・モンスター画像の表示ロジックは変更しない。
- セーブデータ(state_json)のスキーマ変更は不要。island_id は scenario_json から読み取るだけ。
- MySQL スキーマ変更なし。
現在の図鑑タブはエリア別(バイオーム別)のモンスター一覧を表示しているが、ワールドマップが複数の島で構成されているにもかかわらず「どの島で出会ったモンスターか」が図鑑上で分からない。島単位で図鑑を整理することで、島ごとの攻略進捗や収集達成感を高める。
## 2. 具体的な仕様
### 2-1. 図鑑タブのUI変更
- 図鑑タブ上部に島セレクタ(タブまたはプルダウン)を追加する。島名は `scenario_json` の islands 配列から取得し、「全島」「島1: ○○島」「島2: △△島」… と並べる。
- 島セレクタで絞り込むと、その島に紐づくモンスターカードだけが表示される。
- 「全島」選択時は現行と同じく全モンスターをバイオーム別に表示する(既存動作を維持)。
### 2-2. モンスターカードへの追加情報
各モンスターカードに以下のバッジを追加する(CSS のみ、既存カードレイアウトを崩さない)。
- **島名バッジ**: 「○○島」を金色ラベルで右上に表示。
- **出現率バッジ**: state_json の撃破回数から「レア(1〜2回)」「普通(3〜9回)」「多い(10回以上)」を3段階のアイコン(★☆☆ / ★★☆ / ★★★)で表示。
- **未遭遇モンスター**: 島ごとに「???」でシルエット表示(名前・画像を非表示、ドット絵をグレーアウト)。既訪問の島に生息するが未遭遇のモンスターのみ対象とする。
### 2-3. PHP側の変更
- `rpgsf_play_bestiary_groups()` の戻り値に `island_id` / `island_name` フィールドを追加する。
- モンスターの island_id は、`scenario_json` の `islands` 配列内の `monster_table` または `enemy_table` キーを参照して解決する。マッチしない場合は「不明の島」として扱う。
- 既存の `bestiary_groups` 構造はそのまま残し、island フィルタは JS 側でクライアント描画時に適用する(PHP の出力 JSON は変更しない)。
### 2-4. JS側の変更
- 図鑑描画関数に `renderBestiaryByIsland(islandId)` を追加し、既存の `renderBestiary()` を内部から呼び出す形でラップする。
- 島セレクタの change イベントで再描画するだけなので、ページ遷移・Ajax は不要。
### 2-5. スマホ対応
- 島セレクタはスクロール可能な横スクロールタブ(`overflow-x: auto; white-space: nowrap;`)とし、タップしやすいよう最小高さ 44px を確保する。
## 3. 既存機能との整合
- 図鑑タブの既存バイオーム別表示は「全島」選択時にそのまま動作し、壊れない。
- 撃破回数・ドット絵・モンスター画像の表示ロジックは変更しない。
- セーブデータ(state_json)のスキーマ変更は不要。island_id は scenario_json から読み取るだけ。
- MySQL スキーマ変更なし。
💬 返信 (4)
[AI企画部]
画像生成が完了しました。次の開発サイクルで開発に進みます。
画像生成が完了しました。次の開発サイクルで開発に進みます。
🛠 開発を開始しました (機能追加 (rpg-story-forge))
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「RPGストーリーフォージ AI風ドット絵冒険」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=rpg-story-forge
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/rpg-story-forge/
ご利用ありがとうございます!
ご要望いただいた「RPGストーリーフォージ AI風ドット絵冒険」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=rpg-story-forge
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/rpg-story-forge/
ご利用ありがとうございます!
Echo
Iris