リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
DQ3風「仲間モンスター勧誘」システムの追加(戦闘後にモンスターが仲間になる演出とパーティ管理)
## 1. 目的
DQ3のスライムやホイミスライムが仲間になるような「モンスター仲間化」システムを追加する。戦闘勝利後に一定確率でモンスターが「なかまになりたそうにこちらをみている!」と話しかけ、承諾するとパーティに加わる。既存のターン制戦闘・パーティ管理・ステータス画面と整合しつつ、後方互換で追加できる規模に絞る。
---
## 2. 具体的な仕様
### 2-1. 勧誘判定ロジック(PHP: lib.php の rpgsf_apply_action 内)
- 戦闘勝利処理の直後に `rpgsf_monster_recruit_check()` を呼ぶ
- 勧誘確率 = 基本15% × 難易度係数(easy:1.5、normal:1.0、hard:0.5)
- ただし以下の条件をすべて満たす場合のみ発動:
- パーティ人数(hero + 人間仲間 + モンスター仲間)が3人未満
- 倒した敵が `shadow_lord` / `ancient_dragon`(ボス)でない
- `state['monster_party']` の配列長が2未満(モンスター仲間は最大2体)
- 勧誘対象は倒した敵データをそのまま流用。HPを初期値の50%で加入
- `state['pending_recruit']` にモンスターデータをセットし、保存してリダイレクト
### 2-2. 勧誘UIの表示(play.php / JS)
- `state['pending_recruit']` が存在する場合、マップ描画後に固定モーダルを表示
- モーダル内容:
- Canvas でモンスターのドット絵(既存の `rpgsf_draw_monster_sprite()` 流用)
- テキスト「{モンスター名} はなかまになりたそうにこちらをみている!」
- ボタン「なかまにする」「ことわる」
- フォームで `action=recruit_yes` / `action=recruit_no` を POST
### 2-3. 加入処理(PHP)
- `recruit_yes`: `state['monster_party'][]` に以下の構造で追加
```json
{
"id": "slime",
"name": "あおスライム",
"is_monster": true,
"hp": 8, "max_hp": 8,
"mp": 0, "max_mp": 0,
"atk": 5, "def": 1,
"level": 1, "exp": 0
}
```
- `recruit_no`: `state['pending_recruit']` を削除するだけ
- どちらの場合も `state['pending_recruit']` を unset してセーブ
- ログに「{名前} がなかまになった!」または「{名前} はさっていった。」を追記
### 2-4. 戦闘への参加(既存ターン制戦闘の拡張)
- `rpgsf_battle_round()` 内で `state['monster_party']` が存在する場合、人間仲間と同様に自動攻撃を追加
- 攻撃力・防御力は加入時の値をそのまま使用(装備なし固定)
- モンスター仲間がHPゼロになった場合は `state['monster_party']` から除外し、ログに「{名前} はたおれた。」を表示
- 経験値・ゴールドの分配には加算しない(既存ロジック変更なし)
### 2-5. ステータス画面への表示
- 既存の `status_cards` 配列の末尾に `monster_party` を追加(`is_monster: true` フラグ付き)
- モーダル内でモンスター仲間は「👾 モンスター仲間」と種別表示し、装備欄は「—」固定
### 2-6. UIテキスト・演出
- 勧誘モーダル背景:半透明ブラック、SFC風ウィンドウ枠(既存 `.modal` クラス流用)
- 「なかまになった!」時に既存の `fx-levelup` クラスを一時付与してフラッシュ演出
- スマホ対応:ボタンは縦並び、モーダル幅は `min(320px, 90vw)`
---
## 3. 既存機能との整合(壊さない点)
- `state['party']`(人間仲間)は一切変更しない。モンスター仲間は別キー `monster_party` で管理
- 冒険の書セーブ・ロード:`state_json` にそのまま含まれるため追加対応不要
- ショップ・どうぐ袋・オーブトラッカーには影響しない
- パーティ編成画面(party.php)には手を加えない(モンスター仲間は戦闘後のみ加入)
- DB スキーマ変更なし(state_json 内で完結)
- ボスモンスターは勧誘対象外のため、シナリオのクリア判定に影響しない
---
## 4. 実装ファイル一覧
| ファイル | 変更内容 |
|---|---|
| lib.php | `rpgsf_monster_recruit_check()` 追加、`rpgsf_apply_action()` に recruit_yes/no 追加、`rpgsf_battle_round()` にモンスター仲間攻撃追加 |
| pages/play.php | `pending_recruit` の検出とモーダル変数の準備、`status_cards` へのモンスター仲間追加 |
| play.php(HTML部) | 勧誘モーダルHTML、Canvas描画呼び出し |
| style.css(既存) | `.recruit-modal` スタイル追加(既存モーダルクラスを継承) |
DQ3のスライムやホイミスライムが仲間になるような「モンスター仲間化」システムを追加する。戦闘勝利後に一定確率でモンスターが「なかまになりたそうにこちらをみている!」と話しかけ、承諾するとパーティに加わる。既存のターン制戦闘・パーティ管理・ステータス画面と整合しつつ、後方互換で追加できる規模に絞る。
---
## 2. 具体的な仕様
### 2-1. 勧誘判定ロジック(PHP: lib.php の rpgsf_apply_action 内)
- 戦闘勝利処理の直後に `rpgsf_monster_recruit_check()` を呼ぶ
- 勧誘確率 = 基本15% × 難易度係数(easy:1.5、normal:1.0、hard:0.5)
- ただし以下の条件をすべて満たす場合のみ発動:
- パーティ人数(hero + 人間仲間 + モンスター仲間)が3人未満
- 倒した敵が `shadow_lord` / `ancient_dragon`(ボス)でない
- `state['monster_party']` の配列長が2未満(モンスター仲間は最大2体)
- 勧誘対象は倒した敵データをそのまま流用。HPを初期値の50%で加入
- `state['pending_recruit']` にモンスターデータをセットし、保存してリダイレクト
### 2-2. 勧誘UIの表示(play.php / JS)
- `state['pending_recruit']` が存在する場合、マップ描画後に固定モーダルを表示
- モーダル内容:
- Canvas でモンスターのドット絵(既存の `rpgsf_draw_monster_sprite()` 流用)
- テキスト「{モンスター名} はなかまになりたそうにこちらをみている!」
- ボタン「なかまにする」「ことわる」
- フォームで `action=recruit_yes` / `action=recruit_no` を POST
### 2-3. 加入処理(PHP)
- `recruit_yes`: `state['monster_party'][]` に以下の構造で追加
```json
{
"id": "slime",
"name": "あおスライム",
"is_monster": true,
"hp": 8, "max_hp": 8,
"mp": 0, "max_mp": 0,
"atk": 5, "def": 1,
"level": 1, "exp": 0
}
```
- `recruit_no`: `state['pending_recruit']` を削除するだけ
- どちらの場合も `state['pending_recruit']` を unset してセーブ
- ログに「{名前} がなかまになった!」または「{名前} はさっていった。」を追記
### 2-4. 戦闘への参加(既存ターン制戦闘の拡張)
- `rpgsf_battle_round()` 内で `state['monster_party']` が存在する場合、人間仲間と同様に自動攻撃を追加
- 攻撃力・防御力は加入時の値をそのまま使用(装備なし固定)
- モンスター仲間がHPゼロになった場合は `state['monster_party']` から除外し、ログに「{名前} はたおれた。」を表示
- 経験値・ゴールドの分配には加算しない(既存ロジック変更なし)
### 2-5. ステータス画面への表示
- 既存の `status_cards` 配列の末尾に `monster_party` を追加(`is_monster: true` フラグ付き)
- モーダル内でモンスター仲間は「👾 モンスター仲間」と種別表示し、装備欄は「—」固定
### 2-6. UIテキスト・演出
- 勧誘モーダル背景:半透明ブラック、SFC風ウィンドウ枠(既存 `.modal` クラス流用)
- 「なかまになった!」時に既存の `fx-levelup` クラスを一時付与してフラッシュ演出
- スマホ対応:ボタンは縦並び、モーダル幅は `min(320px, 90vw)`
---
## 3. 既存機能との整合(壊さない点)
- `state['party']`(人間仲間)は一切変更しない。モンスター仲間は別キー `monster_party` で管理
- 冒険の書セーブ・ロード:`state_json` にそのまま含まれるため追加対応不要
- ショップ・どうぐ袋・オーブトラッカーには影響しない
- パーティ編成画面(party.php)には手を加えない(モンスター仲間は戦闘後のみ加入)
- DB スキーマ変更なし(state_json 内で完結)
- ボスモンスターは勧誘対象外のため、シナリオのクリア判定に影響しない
---
## 4. 実装ファイル一覧
| ファイル | 変更内容 |
|---|---|
| lib.php | `rpgsf_monster_recruit_check()` 追加、`rpgsf_apply_action()` に recruit_yes/no 追加、`rpgsf_battle_round()` にモンスター仲間攻撃追加 |
| pages/play.php | `pending_recruit` の検出とモーダル変数の準備、`status_cards` へのモンスター仲間追加 |
| play.php(HTML部) | 勧誘モーダルHTML、Canvas描画呼び出し |
| style.css(既存) | `.recruit-modal` スタイル追加(既存モーダルクラスを継承) |
💬 返信 (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