リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
DQ3風「モンスター図鑑」機能の追加(倒した敵の記録・閲覧)
## 1. 目的
ドラゴンクエスト3の「モンスター図鑑」と同様に、プレイヤーが倒したモンスターを記録し、いつでも閲覧できる機能を追加する。既存のCanvas描画モンスタースプライトと組み合わせることで、コレクション要素と探索意欲を高める。
## 2. 具体的な仕様
### 2-1. データ構造(state_json への追記)
```json
{
"monster_book": {
"slime": { "count": 3, "first_seen_at": "2025-01-01" },
"bat": { "count": 1, "first_seen_at": "2025-01-02" }
}
}
```
- キーは enemies の `id`(例: `slime`, `bat`, `shadow_lord`)
- `count`:累計撃破数(上限999)
- `first_seen_at`:初遭遇日(Y-m-d)
- state_json に追記するのみで既存フィールドは変更なし
### 2-2. 記録タイミング(lib.php の rpgsf_apply_action 内)
- 戦闘勝利(battle_win相当)処理の末尾で、倒した敵の `id` を `monster_book` に記録
- 既存の戦闘ログ・経験値付与処理の後に追記するだけで既存ロジックに影響なし
### 2-3. 図鑑モーダルUI(play.php に追加)
- 既存の「世界地図」「ふしぎなオーブ」モーダルと同じスタイルで、ボタン1つで開閉するモーダルを追加
- ボタンラベル:「👾 図鑑」(画面下部のツールバー or サイドパネルに配置)
- モーダル内レイアウト:
- タイトル「モンスター図鑑」
- 「発見済み X / Y体」の進捗表示(Xは図鑑登録数、Yは全敵種数 = `count(rpgsf_assets()['enemies'])`)
- 各モンスターカードを2列グリッドで表示
- 未発見:シルエット表示(canvas でグレーの塗りつぶしスプライト)+「???」テキスト
- 発見済み:Canvas描画スプライト+名前+初遭遇日+撃破数
- スマホ対応:1列グリッドにフォールバック(media query)
### 2-4. Canvas スプライト再利用
- 既存の `drawMonsterSprite(ctx, sprite_id, x, y, scale)` 関数(または相当する描画ロジック)をそのまま利用
- 未発見モンスターは `ctx.globalAlpha = 0.15` でグレースケールフィルタをかけてシルエット化
- 各カードに `<canvas width="48" height="48">` を置き、JS で描画
### 2-5. PHP側の変更(lib.php)
- `rpgsf_normalize_state()` に `monster_book` キーの初期化(空配列)を追記
- `rpgsf_apply_action()` の戦闘勝利分岐に撃破記録処理を追記(数行)
- 既存の勝利処理・経験値・ゴールド付与の順序は変えない
### 2-6. 全体アセット一覧のPHP出力
- play.php で `rpgsf_assets()['enemies']` を JS 変数 `RPGSF_ALL_ENEMIES` として出力(JSON化)
- 図鑑モーダルJS側はこの配列を使って「未発見スロット」を含む全一覧を描画
## 3. 既存機能との整合
- `state_json` への追記のみ。既存フィールド(hero, battle, party, bag等)は無変更
- `rpgsf_normalize_state()` で `monster_book` キーを初期化するため、旧セーブデータの後方互換を維持
- DBスキーマ変更なし
- 戦闘ロジック・移動・ショップ・セーブ/ロードは一切変更しない
- モーダルはJSのみで開閉制御し、既存モーダルと排他表示(他モーダルを閉じてから開く)
## 4. 実装規模の目安
- lib.php:+15〜20行(normalize + apply_action追記)
- play.php:+30〜40行(JS変数出力 + モーダルHTML)
- インラインJS/CSS:+60〜80行(モーダル開閉 + Canvas描画ループ)
- 合計150行以内で完結する現実的な規模
ドラゴンクエスト3の「モンスター図鑑」と同様に、プレイヤーが倒したモンスターを記録し、いつでも閲覧できる機能を追加する。既存のCanvas描画モンスタースプライトと組み合わせることで、コレクション要素と探索意欲を高める。
## 2. 具体的な仕様
### 2-1. データ構造(state_json への追記)
```json
{
"monster_book": {
"slime": { "count": 3, "first_seen_at": "2025-01-01" },
"bat": { "count": 1, "first_seen_at": "2025-01-02" }
}
}
```
- キーは enemies の `id`(例: `slime`, `bat`, `shadow_lord`)
- `count`:累計撃破数(上限999)
- `first_seen_at`:初遭遇日(Y-m-d)
- state_json に追記するのみで既存フィールドは変更なし
### 2-2. 記録タイミング(lib.php の rpgsf_apply_action 内)
- 戦闘勝利(battle_win相当)処理の末尾で、倒した敵の `id` を `monster_book` に記録
- 既存の戦闘ログ・経験値付与処理の後に追記するだけで既存ロジックに影響なし
### 2-3. 図鑑モーダルUI(play.php に追加)
- 既存の「世界地図」「ふしぎなオーブ」モーダルと同じスタイルで、ボタン1つで開閉するモーダルを追加
- ボタンラベル:「👾 図鑑」(画面下部のツールバー or サイドパネルに配置)
- モーダル内レイアウト:
- タイトル「モンスター図鑑」
- 「発見済み X / Y体」の進捗表示(Xは図鑑登録数、Yは全敵種数 = `count(rpgsf_assets()['enemies'])`)
- 各モンスターカードを2列グリッドで表示
- 未発見:シルエット表示(canvas でグレーの塗りつぶしスプライト)+「???」テキスト
- 発見済み:Canvas描画スプライト+名前+初遭遇日+撃破数
- スマホ対応:1列グリッドにフォールバック(media query)
### 2-4. Canvas スプライト再利用
- 既存の `drawMonsterSprite(ctx, sprite_id, x, y, scale)` 関数(または相当する描画ロジック)をそのまま利用
- 未発見モンスターは `ctx.globalAlpha = 0.15` でグレースケールフィルタをかけてシルエット化
- 各カードに `<canvas width="48" height="48">` を置き、JS で描画
### 2-5. PHP側の変更(lib.php)
- `rpgsf_normalize_state()` に `monster_book` キーの初期化(空配列)を追記
- `rpgsf_apply_action()` の戦闘勝利分岐に撃破記録処理を追記(数行)
- 既存の勝利処理・経験値・ゴールド付与の順序は変えない
### 2-6. 全体アセット一覧のPHP出力
- play.php で `rpgsf_assets()['enemies']` を JS 変数 `RPGSF_ALL_ENEMIES` として出力(JSON化)
- 図鑑モーダルJS側はこの配列を使って「未発見スロット」を含む全一覧を描画
## 3. 既存機能との整合
- `state_json` への追記のみ。既存フィールド(hero, battle, party, bag等)は無変更
- `rpgsf_normalize_state()` で `monster_book` キーを初期化するため、旧セーブデータの後方互換を維持
- DBスキーマ変更なし
- 戦闘ロジック・移動・ショップ・セーブ/ロードは一切変更しない
- モーダルはJSのみで開閉制御し、既存モーダルと排他表示(他モーダルを閉じてから開く)
## 4. 実装規模の目安
- lib.php:+15〜20行(normalize + apply_action追記)
- play.php:+30〜40行(JS変数出力 + モーダルHTML)
- インラインJS/CSS:+60〜80行(モーダル開閉 + Canvas描画ループ)
- 合計150行以内で完結する現実的な規模
💬 返信 (3)
🛠 開発を開始しました (機能追加 (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