リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
DQ3風「道具袋」アイテム詳細画面の追加(使用・装備・捨てる操作をモーダルで実現)
## 1. 目的
現在のインベントリ表示は「ハーブ×2」のようなラベル一覧のみで、アイテムを選んで「使う」「装備する」「捨てる」などの操作ができない。DQ3の「道具袋」コマンドに相当する選択式アイテム操作モーダルを追加し、戦闘外でもアイテムを能動的に活用できるようにする。
## 2. 具体的な仕様
### 2-1. 「どうぐ」ボタンの追加
- play.php のコマンドボタン群(ステータス・冒険の書などが並ぶ行)に **「どうぐ」** ボタンを追加する。
- スマホ用仮想ボタンエリアにも同ボタンを配置する。
- 押下で `#modal-item-bag` モーダルを開く(JS のみ、サーバー通信なし)。
### 2-2. モーダルレイアウト(DQ3風)
```
┌──────────────────────────┐
│ どうぐ │
├──────────────────────────┤
│ ▶ やくそう × 2 │
│ まほうのたまご × 1 │
│ てつのたて 装備 │
│ (空き) │
│ (空き) │
│ (空き) │
├──────────────────────────┤
│ [つかう] [そうび] [すてる] [もどる] │
└──────────────────────────┘
```
- 最大8スロット表示(縦スクロール対応)。SFC風ピクセルフォント・黒背景・白文字。
- 選択中アイテムをカーソル(▶)でハイライト。キーボード↑↓キーおよびタップで選択。
- 右側に所持数 or「装備中」バッジを表示。
### 2-3. アイテム操作コマンド
| コマンド | 条件 | 動作 |
|----------|------|------|
| つかう | 消耗品(herb/torch/antidote等)のみ有効 | フォームPOST `action=use_item&item_id=XXX` を送信 |
| そうび | 武器・防具カテゴリのみ有効 | フォームPOST `action=equip_item&item_id=XXX` を送信 |
| すてる | 全アイテム有効 | 確認ダイアログ後 `action=discard_item&item_id=XXX` を送信 |
| もどる | 常時 | モーダルを閉じる |
有効でないコマンドはグレーアウトして押せない状態にする。
### 2-4. サーバー側(pages/play.php および lib.php)
- `use_item` : 既存の `use_item` アクション処理が lib.php にあれば流用。なければ `rpgsf_apply_action()` 内に追加。消耗品を1個消費しHP/MPを回復してログに記録する。戦闘外(`$state['battle'] === null`)のみ受け付ける。
- `equip_item` : インベントリ内の武器・防具を主人公に装備させ、既存装備をインベントリに戻す。`rpgsf_effective_atk` / `rpgsf_effective_def` は既存関数をそのまま使用。
- `discard_item` : インベントリから該当アイテムを1個削除してログに記録。
- いずれも `rpgsf_save_state()` で即時保存し `redirect_to('play', ['key' => $key])` でリダイレクト。
### 2-5. アイテムメタ情報(lib.php の rpgsf_item_by_id 拡張)
- 既存の `rpgsf_item_by_id()` に `'category'` キー(`'consumable'` / `'weapon'` / `'armor'` / `'key_item'`)がなければ追加する。
- カテゴリに応じてモーダル側でボタン有効/無効を切り替える(JS側で `data-category` 属性を参照)。
## 3. 既存機能との整合
- 戦闘中(`$state['battle'] !== null`)は「どうぐ」ボタンを非表示にするか、押しても「戦闘中は使えません」とメッセージ表示のみ行う(既存の戦闘フローを破壊しない)。
- ショップ購入・既存のアイテム一覧表示ラベルはそのまま残す。モーダルはその上位操作UIとして追加するだけ。
- 冒険の書セーブ/ロード・ステータス画面モーダルとのzIndex競合を避けるため `z-index: 1100` 以上を割り当て、既存モーダルと同じ開閉パターン(`display:none` → `display:flex`)を踏襲する。
- スマホ対応: モーダル幅は `min(90vw, 360px)`、ボタンは `min-height:44px` のタップ領域を確保する。
現在のインベントリ表示は「ハーブ×2」のようなラベル一覧のみで、アイテムを選んで「使う」「装備する」「捨てる」などの操作ができない。DQ3の「道具袋」コマンドに相当する選択式アイテム操作モーダルを追加し、戦闘外でもアイテムを能動的に活用できるようにする。
## 2. 具体的な仕様
### 2-1. 「どうぐ」ボタンの追加
- play.php のコマンドボタン群(ステータス・冒険の書などが並ぶ行)に **「どうぐ」** ボタンを追加する。
- スマホ用仮想ボタンエリアにも同ボタンを配置する。
- 押下で `#modal-item-bag` モーダルを開く(JS のみ、サーバー通信なし)。
### 2-2. モーダルレイアウト(DQ3風)
```
┌──────────────────────────┐
│ どうぐ │
├──────────────────────────┤
│ ▶ やくそう × 2 │
│ まほうのたまご × 1 │
│ てつのたて 装備 │
│ (空き) │
│ (空き) │
│ (空き) │
├──────────────────────────┤
│ [つかう] [そうび] [すてる] [もどる] │
└──────────────────────────┘
```
- 最大8スロット表示(縦スクロール対応)。SFC風ピクセルフォント・黒背景・白文字。
- 選択中アイテムをカーソル(▶)でハイライト。キーボード↑↓キーおよびタップで選択。
- 右側に所持数 or「装備中」バッジを表示。
### 2-3. アイテム操作コマンド
| コマンド | 条件 | 動作 |
|----------|------|------|
| つかう | 消耗品(herb/torch/antidote等)のみ有効 | フォームPOST `action=use_item&item_id=XXX` を送信 |
| そうび | 武器・防具カテゴリのみ有効 | フォームPOST `action=equip_item&item_id=XXX` を送信 |
| すてる | 全アイテム有効 | 確認ダイアログ後 `action=discard_item&item_id=XXX` を送信 |
| もどる | 常時 | モーダルを閉じる |
有効でないコマンドはグレーアウトして押せない状態にする。
### 2-4. サーバー側(pages/play.php および lib.php)
- `use_item` : 既存の `use_item` アクション処理が lib.php にあれば流用。なければ `rpgsf_apply_action()` 内に追加。消耗品を1個消費しHP/MPを回復してログに記録する。戦闘外(`$state['battle'] === null`)のみ受け付ける。
- `equip_item` : インベントリ内の武器・防具を主人公に装備させ、既存装備をインベントリに戻す。`rpgsf_effective_atk` / `rpgsf_effective_def` は既存関数をそのまま使用。
- `discard_item` : インベントリから該当アイテムを1個削除してログに記録。
- いずれも `rpgsf_save_state()` で即時保存し `redirect_to('play', ['key' => $key])` でリダイレクト。
### 2-5. アイテムメタ情報(lib.php の rpgsf_item_by_id 拡張)
- 既存の `rpgsf_item_by_id()` に `'category'` キー(`'consumable'` / `'weapon'` / `'armor'` / `'key_item'`)がなければ追加する。
- カテゴリに応じてモーダル側でボタン有効/無効を切り替える(JS側で `data-category` 属性を参照)。
## 3. 既存機能との整合
- 戦闘中(`$state['battle'] !== null`)は「どうぐ」ボタンを非表示にするか、押しても「戦闘中は使えません」とメッセージ表示のみ行う(既存の戦闘フローを破壊しない)。
- ショップ購入・既存のアイテム一覧表示ラベルはそのまま残す。モーダルはその上位操作UIとして追加するだけ。
- 冒険の書セーブ/ロード・ステータス画面モーダルとのzIndex競合を避けるため `z-index: 1100` 以上を割り当て、既存モーダルと同じ開閉パターン(`display:none` → `display:flex`)を踏襲する。
- スマホ対応: モーダル幅は `min(90vw, 360px)`、ボタンは `min-height:44px` のタップ領域を確保する。
💬 返信 (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