リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
島ごとの「宝の地図」アイテム追加:特定座標に埋蔵宝を示す手書き風マップをゲーム内で入手・解読できる機能
## 1. 目的
現在の島探索は敵遭遇・NPC会話・宝箱開封が主な報酬だが、「宝の地図」アイテムを導入することで、島内の特定座標を調査しに行くという能動的な探索動機を追加する。DQシリーズの宝の地図・秘密の場所発見に近い体験を、外部API不要で実現する。
## 2. 仕様
### 2-1. 宝の地図アイテムの生成
- シナリオ生成時(`rpgsf_create_scenario`)に、島ごとに0〜2枚の「宝の地図」データをシナリオJSONの `treasure_maps` 配列に格納する。
- 各エントリの構造:
```json
{
"map_id": "tmap_001",
"island_id": 2,
"island_name": "炎の島",
"hint_text": "北の岩山を越えた先、焦げた木の根元に眠る",
"target_x": 42,
"target_y": 18,
"reward_gold": 300,
"reward_item": "炎の護符",
"reward_item_effect": "fire_resist",
"found": false
}
```
- `hint_text` はPHP配列のテンプレート(「北の〜を越えた先」「〜の근元に眠る」「〜の中央に刻まれた石の下」など20パターン)から島バイオーム・地形に応じてランダム選択。外部APIは使用しない。
- `target_x` / `target_y` はワールドマップの歩行可能タイル(`walk: true`)からランダムに選択し、既存の村・洞窟・神殿タイルと重複しない座標を選ぶ。
### 2-2. 宝の地図の入手方法
以下3通りのいずれかで `state['inventory']` に追加される(既存アイテム管理と同じ仕組みを使用):
- NPCとの会話時に一定確率(テーマ「海賊」「謎」タグ優先)でドロップ
- 宝箱開封時に通常アイテムの代わりに一定確率で入手
- 賞金首モンスター討伐報酬の追加選択肢として付与
入手時のログ例:「古びた地図の切れ端を手に入れた!」
### 2-3. 宝の地図の表示(ゲーム内UI)
- ふくろ(インベントリ)画面に「宝の地図」カテゴリ行を追加。クリック/タップで地図モーダルを開く。
- モーダルはCanvas要素(280×280px)で描画:
- 背景:羊皮紙風の薄茶グラデーション(`#d4a96a` → `#b8894e`)
- 島の外形を単純な多角形で黒線描画(ワールドマップの島座標範囲をスケールダウン)
- ヒントテキストを手書き風フォント(`font-family: serif; font-style: italic`)で中央上部に表示
- 目標座標付近に「×」マークを赤で描画(地図を入手済みで `found: false` の場合のみ表示)
- 「×」の座標は実際の `target_x/y` を島座標範囲にスケール変換した位置に描く
- 地図モーダルの下部に「閉じる」ボタン
### 2-4. 宝の発見判定
- プレイヤーが `target_x / target_y` タイルに移動したとき(既存の移動処理の接触チェックに追加)、`state['treasure_maps']` を走査して未発見(`found: false`)の地図の目標座標と一致すれば発見イベントを起動。
- 発見時:
- ログに「💎 宝を発見した!〔炎の護符〕と〔300G〕を手に入れた!」を追加
- `reward_gold` を `state['gold']` に加算
- `reward_item` を `state['inventory']` に追加(既存アイテム追加ロジック流用)
- `found: true` にセットしてセーブ
- Canvas上に短時間(2秒)のキラキラエフェクト(`requestAnimationFrame` で黄色い粒子を散らす)
- 発見済みの地図はふくろ内で「✔ 発見済み」と表示し、効果は灰色に
### 2-5. 旅の記憶帳との連携
- 既存の「旅の記憶帳」タブに「発見した埋蔵宝」セクションを追加し、発見済み地図の島名・アイテム名・座標を一覧表示する。
## 3. 既存機能との整合
- 既存のインベントリ・セーブロード・ログシステムをそのまま流用し、新キーは `treasure_maps` のみ追加。
- 地図データが存在しないシナリオ(旧シナリオ)では `treasure_maps` が空配列となり、発見チェックをスキップするためゲームへの影響なし。
- ふくろUIへの追加はオプション行として末尾に挿入し、地図が0枚の場合は非表示にする。
- スマホ対応:地図モーダルはmax-width: 320pxで中央表示、コマンド/ログタブ切替には影響しない。
## 4. 実装ファイル
- `lib.php`:`rpgsf_create_scenario` に地図生成ロジック追加、発見チェック関数 `rpgsf_check_treasure_map_discovery(state, x, y)` 追加
- `pages/play.php`:移動処理の接触チェック末尾に発見判定呼び出し追加、ふくろUIに地図行追加、地図モーダルHTML追加
- JS(play.php内 `<script>`):Canvas地図描画関数、粒子エフェクト関数、モーダル開閉処理を追加
現在の島探索は敵遭遇・NPC会話・宝箱開封が主な報酬だが、「宝の地図」アイテムを導入することで、島内の特定座標を調査しに行くという能動的な探索動機を追加する。DQシリーズの宝の地図・秘密の場所発見に近い体験を、外部API不要で実現する。
## 2. 仕様
### 2-1. 宝の地図アイテムの生成
- シナリオ生成時(`rpgsf_create_scenario`)に、島ごとに0〜2枚の「宝の地図」データをシナリオJSONの `treasure_maps` 配列に格納する。
- 各エントリの構造:
```json
{
"map_id": "tmap_001",
"island_id": 2,
"island_name": "炎の島",
"hint_text": "北の岩山を越えた先、焦げた木の根元に眠る",
"target_x": 42,
"target_y": 18,
"reward_gold": 300,
"reward_item": "炎の護符",
"reward_item_effect": "fire_resist",
"found": false
}
```
- `hint_text` はPHP配列のテンプレート(「北の〜を越えた先」「〜の근元に眠る」「〜の中央に刻まれた石の下」など20パターン)から島バイオーム・地形に応じてランダム選択。外部APIは使用しない。
- `target_x` / `target_y` はワールドマップの歩行可能タイル(`walk: true`)からランダムに選択し、既存の村・洞窟・神殿タイルと重複しない座標を選ぶ。
### 2-2. 宝の地図の入手方法
以下3通りのいずれかで `state['inventory']` に追加される(既存アイテム管理と同じ仕組みを使用):
- NPCとの会話時に一定確率(テーマ「海賊」「謎」タグ優先)でドロップ
- 宝箱開封時に通常アイテムの代わりに一定確率で入手
- 賞金首モンスター討伐報酬の追加選択肢として付与
入手時のログ例:「古びた地図の切れ端を手に入れた!」
### 2-3. 宝の地図の表示(ゲーム内UI)
- ふくろ(インベントリ)画面に「宝の地図」カテゴリ行を追加。クリック/タップで地図モーダルを開く。
- モーダルはCanvas要素(280×280px)で描画:
- 背景:羊皮紙風の薄茶グラデーション(`#d4a96a` → `#b8894e`)
- 島の外形を単純な多角形で黒線描画(ワールドマップの島座標範囲をスケールダウン)
- ヒントテキストを手書き風フォント(`font-family: serif; font-style: italic`)で中央上部に表示
- 目標座標付近に「×」マークを赤で描画(地図を入手済みで `found: false` の場合のみ表示)
- 「×」の座標は実際の `target_x/y` を島座標範囲にスケール変換した位置に描く
- 地図モーダルの下部に「閉じる」ボタン
### 2-4. 宝の発見判定
- プレイヤーが `target_x / target_y` タイルに移動したとき(既存の移動処理の接触チェックに追加)、`state['treasure_maps']` を走査して未発見(`found: false`)の地図の目標座標と一致すれば発見イベントを起動。
- 発見時:
- ログに「💎 宝を発見した!〔炎の護符〕と〔300G〕を手に入れた!」を追加
- `reward_gold` を `state['gold']` に加算
- `reward_item` を `state['inventory']` に追加(既存アイテム追加ロジック流用)
- `found: true` にセットしてセーブ
- Canvas上に短時間(2秒)のキラキラエフェクト(`requestAnimationFrame` で黄色い粒子を散らす)
- 発見済みの地図はふくろ内で「✔ 発見済み」と表示し、効果は灰色に
### 2-5. 旅の記憶帳との連携
- 既存の「旅の記憶帳」タブに「発見した埋蔵宝」セクションを追加し、発見済み地図の島名・アイテム名・座標を一覧表示する。
## 3. 既存機能との整合
- 既存のインベントリ・セーブロード・ログシステムをそのまま流用し、新キーは `treasure_maps` のみ追加。
- 地図データが存在しないシナリオ(旧シナリオ)では `treasure_maps` が空配列となり、発見チェックをスキップするためゲームへの影響なし。
- ふくろUIへの追加はオプション行として末尾に挿入し、地図が0枚の場合は非表示にする。
- スマホ対応:地図モーダルはmax-width: 320pxで中央表示、コマンド/ログタブ切替には影響しない。
## 4. 実装ファイル
- `lib.php`:`rpgsf_create_scenario` に地図生成ロジック追加、発見チェック関数 `rpgsf_check_treasure_map_discovery(state, x, y)` 追加
- `pages/play.php`:移動処理の接触チェック末尾に発見判定呼び出し追加、ふくろUIに地図行追加、地図モーダルHTML追加
- JS(play.php内 `<script>`):Canvas地図描画関数、粒子エフェクト関数、モーダル開閉処理を追加
💬 返信 (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