リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
DQ3風パーティ編成システムの追加(職業・能力値・仲間3人まで)
## 1. 目的
ドラゴンクエスト3の最大の特徴である「職業×パーティ編成」システムを導入する。現在は主人公(勇者)1人のみだが、戦士・魔法使い・僧侶・武道家の4職業から最大3人の仲間を選べるようにし、職業ごとに異なるHP/MP/ATK/DEF係数と固有スペルを持たせる。これによりシナリオの繰り返しプレイ価値と戦略性が大幅に向上する。
## 2. 具体的な仕様
### 2-1. 職業データ(lib.php の rpgsf_assets() に追加)
```php
'jobs' => [
'warrior' => ['name'=>'戦士', 'hp'=>1.4, 'mp'=>0.3, 'atk'=>1.3, 'def'=>1.4, 'spells'=>[]],
'mage' => ['name'=>'魔法使い','hp'=>0.7, 'mp'=>1.8, 'atk'=>0.7, 'def'=>0.6, 'spells'=>['spark','flame']],
'priest' => ['name'=>'僧侶', 'hp'=>0.9, 'mp'=>1.5, 'atk'=>0.8, 'def'=>0.9, 'spells'=>['heal']],
'monk' => ['name'=>'武道家', 'hp'=>1.2, 'mp'=>0.2, 'atk'=>1.5, 'def'=>1.0, 'spells'=>[]],
],
```
各係数はレベル1時のベース値(HP:20, MP:8, ATK:10, DEF:5)に乗算する。
### 2-2. パーティ編成画面(pages/party.php を新規作成)
- シナリオ生成後、play.php に遷移する前に party.php を挟む
- 仲間は0〜3人(0人=主人公のみ、従来互換)
- 各スロットで「職業」と「名前(最大8文字)」を入力
- 決定ボタン押下で POST → play.php へリダイレクト(party_json をセッションに保存)
- スマホ対応: 各スロットはflex縦並び、select+inputの組み合わせ
### 2-3. state_json のパーティ拡張
```json
"party": [
{"name":"アーサー", "job":"warrior", "hp":28, "max_hp":28, "mp":2, "max_mp":2, "atk":13, "def":7, "spells":[], "level":1, "exp":0, "alive":true},
{"name":"マリア", "job":"priest", "hp":18, "max_hp":18, ...}
]
```
- 既存の `hero` オブジェクトはそのまま残し、party 配列を追加(後方互換)
- party が空配列の場合は従来の単体戦闘ロジックを使用
### 2-4. ターン制戦闘の拡張(rpgsf_apply_action() 内)
- `action` が `attack_1` / `attack_2` / `attack_3` の場合、対応する party[n] が攻撃
- 敵のカウンター攻撃は全員に分散(対象をランダムで選択)
- party メンバーが全員 alive:false かつ hero も hp≤0 で敗北
- play.php の戦闘UIに仲間ボタン行を追加(仲間が生存中のみ表示)
### 2-5. 戦闘UIの変更(pages/play.php)
```html
<!-- 仲間攻撃ボタン(battle中・party存在時) -->
<div class="party-actions">
<?php foreach ($state['party'] as $i => $m): ?>
<?php if ($m['alive']): ?>
<button name="action" value="attack_<?= $i ?>">
<?= h($m['name']) ?>(<?= h($m['job_name']) ?>) 攻撃
</button>
<?php endif; ?>
<?php endforeach; ?>
</div>
```
### 2-6. パーティHUD表示
- play.php のサイドパネル `hud` 下部に仲間のHP/MPをコンパクトに追加
- 1行 = 名前・職業・HP・alive状態
### 2-7. create.php → party.php → play.php フロー変更
- create.php の POST 成功後、`redirect_to('party', ['key' => $created['public_key']])` に変更
- party.php で「ひとりで冒険」ボタン(パーティなし)も用意し、従来通り play.php に遷移できる選択肢を残す
## 3. 既存機能との整合(壊さない点)
- `hero` オブジェクトと既存の `rpgsf_apply_action()` ロジックはそのまま温存
- party が空配列のときは従来の単体ロジックが動作するため、既存保存データも問題なく読み込める
- 共有URL経由でのプレイ時は party.php を挟むため、新しい共有プレイヤーも職業選択できる
- Canvas マップ描画・音声・共有URL・ライブラリ一覧などは無変更
- MySQL スキーマ変更不要(party 情報は state_json 内に収める)
## 4. 実装規模の見積もり
- lib.php: 職業データ追加 + rpgsf_apply_action() に仲間攻撃分岐を追加(約100行)
- pages/party.php 新規作成(約80行)
- pages/play.php: 戦闘UIと仲間HUDの追加(約40行)
- create.php: リダイレクト先1行変更
- 合計 約220行の追加・変更で完結
ドラゴンクエスト3の最大の特徴である「職業×パーティ編成」システムを導入する。現在は主人公(勇者)1人のみだが、戦士・魔法使い・僧侶・武道家の4職業から最大3人の仲間を選べるようにし、職業ごとに異なるHP/MP/ATK/DEF係数と固有スペルを持たせる。これによりシナリオの繰り返しプレイ価値と戦略性が大幅に向上する。
## 2. 具体的な仕様
### 2-1. 職業データ(lib.php の rpgsf_assets() に追加)
```php
'jobs' => [
'warrior' => ['name'=>'戦士', 'hp'=>1.4, 'mp'=>0.3, 'atk'=>1.3, 'def'=>1.4, 'spells'=>[]],
'mage' => ['name'=>'魔法使い','hp'=>0.7, 'mp'=>1.8, 'atk'=>0.7, 'def'=>0.6, 'spells'=>['spark','flame']],
'priest' => ['name'=>'僧侶', 'hp'=>0.9, 'mp'=>1.5, 'atk'=>0.8, 'def'=>0.9, 'spells'=>['heal']],
'monk' => ['name'=>'武道家', 'hp'=>1.2, 'mp'=>0.2, 'atk'=>1.5, 'def'=>1.0, 'spells'=>[]],
],
```
各係数はレベル1時のベース値(HP:20, MP:8, ATK:10, DEF:5)に乗算する。
### 2-2. パーティ編成画面(pages/party.php を新規作成)
- シナリオ生成後、play.php に遷移する前に party.php を挟む
- 仲間は0〜3人(0人=主人公のみ、従来互換)
- 各スロットで「職業」と「名前(最大8文字)」を入力
- 決定ボタン押下で POST → play.php へリダイレクト(party_json をセッションに保存)
- スマホ対応: 各スロットはflex縦並び、select+inputの組み合わせ
### 2-3. state_json のパーティ拡張
```json
"party": [
{"name":"アーサー", "job":"warrior", "hp":28, "max_hp":28, "mp":2, "max_mp":2, "atk":13, "def":7, "spells":[], "level":1, "exp":0, "alive":true},
{"name":"マリア", "job":"priest", "hp":18, "max_hp":18, ...}
]
```
- 既存の `hero` オブジェクトはそのまま残し、party 配列を追加(後方互換)
- party が空配列の場合は従来の単体戦闘ロジックを使用
### 2-4. ターン制戦闘の拡張(rpgsf_apply_action() 内)
- `action` が `attack_1` / `attack_2` / `attack_3` の場合、対応する party[n] が攻撃
- 敵のカウンター攻撃は全員に分散(対象をランダムで選択)
- party メンバーが全員 alive:false かつ hero も hp≤0 で敗北
- play.php の戦闘UIに仲間ボタン行を追加(仲間が生存中のみ表示)
### 2-5. 戦闘UIの変更(pages/play.php)
```html
<!-- 仲間攻撃ボタン(battle中・party存在時) -->
<div class="party-actions">
<?php foreach ($state['party'] as $i => $m): ?>
<?php if ($m['alive']): ?>
<button name="action" value="attack_<?= $i ?>">
<?= h($m['name']) ?>(<?= h($m['job_name']) ?>) 攻撃
</button>
<?php endif; ?>
<?php endforeach; ?>
</div>
```
### 2-6. パーティHUD表示
- play.php のサイドパネル `hud` 下部に仲間のHP/MPをコンパクトに追加
- 1行 = 名前・職業・HP・alive状態
### 2-7. create.php → party.php → play.php フロー変更
- create.php の POST 成功後、`redirect_to('party', ['key' => $created['public_key']])` に変更
- party.php で「ひとりで冒険」ボタン(パーティなし)も用意し、従来通り play.php に遷移できる選択肢を残す
## 3. 既存機能との整合(壊さない点)
- `hero` オブジェクトと既存の `rpgsf_apply_action()` ロジックはそのまま温存
- party が空配列のときは従来の単体ロジックが動作するため、既存保存データも問題なく読み込める
- 共有URL経由でのプレイ時は party.php を挟むため、新しい共有プレイヤーも職業選択できる
- Canvas マップ描画・音声・共有URL・ライブラリ一覧などは無変更
- MySQL スキーマ変更不要(party 情報は state_json 内に収める)
## 4. 実装規模の見積もり
- lib.php: 職業データ追加 + rpgsf_apply_action() に仲間攻撃分岐を追加(約100行)
- pages/party.php 新規作成(約80行)
- pages/play.php: 戦闘UIと仲間HUDの追加(約40行)
- create.php: リダイレクト先1行変更
- 合計 約220行の追加・変更で完結
💬 返信 (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