リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
島ごとの「天気・地形・レベル帯」に応じたランダムエンカウント敵パーティ編成の多様化
## 1. 目的
現在、ランダムエンカウントで出現する敵は単体または固定の組み合わせが中心で、どの島でも似たような戦闘体験になりがちです。島のバイオーム・天候・時間帯・プレイヤーの平均レベルを組み合わせた「敵グループ編成テーブル」を追加し、「火山島の夜に毒沼付近を歩いたら炎系モンスターとゴーレムが2体で出現する」といった状況依存の編成を実現します。これにより各島の個性が戦闘面でも体感でき、周回プレイの新鮮さが増します。
## 2. 具体的な仕様
### 2-1. 敵グループ編成テーブル (PHP配列・lib.phpまたはgenerator内)
- `rpgsf_encounter_groups()` 関数を新設し、以下のキーで構成された配列を返す
- `biome` : grassland / desert / snow / volcano / swamp / coast / forest / dungeon
- `weather` : clear / rain / snow / fog (省略時は全天候)
- `time_of_day` : day / dusk / night (省略時は全時間帯)
- `level_min` / `level_max` : パーティ平均レベルの適用範囲
- `group` : 出現する敵スロット配列。各スロットは `{ sprite_id, name, count_min, count_max }` の形式
- `weight` : 抽選重み (デフォルト10)
- 例: `['biome'=>'volcano','time_of_day'=>'night','level_min'=>6,'level_max'=>15,'group'=>[['sprite_id'=>'fire_lizard','name'=>'ファイアリザード','count_min'=>1,'count_max'=>2],['sprite_id'=>'golem','name'=>'ゴーレム','count_min'=>1,'count_max'=>1]],'weight'=>8]`
- 最低30グループ程度をPHP配列として内蔵する (外部APIなし)
### 2-2. エンカウント解決ロジックの変更 (lib.php内のエンカウント処理)
- 既存の単体敵選出ロジックを維持しつつ、新テーブルが条件にマッチした場合は `weight` に基づいてグループを抽選
- 条件一致グループがゼロの場合は従来ロジックにフォールバック (後方互換)
- 選出されたグループの各スロットから `rand(count_min, count_max)` 体を生成し、`state['battle']['enemies']` 配列にセット
- 同一グループ内の複数敵はそれぞれ独立したHPを持ち、戦闘ログに「Aが2体、Bが1体現れた!」と表示
### 2-3. 戦闘画面のUI対応 (play.phpおよびJS)
- `battle.enemies` が複数の場合、戦闘Canvasに敵を横並びで描画 (最大3体。既存の単体描画を `enemies[0]` で継続し、2体目以降を右にオフセット配置)
- 攻撃コマンド選択時に「対象選択」UIを追加: 敵が複数の場合は敵名ボタンを横並びで表示し、選択した1体に攻撃
- 全体魔法(フレイム等)は全敵に一括ダメージを与え、ログに「A・Bに○ダメージ!」と表示
- 全敵撃破で勝利判定(既存ロジックを enemies 配列のすべてが hp<=0 になった時点に変更)
- スマホ対応: 対象選択ボタンはコマンドタブ内に縦並びで表示
### 2-4. 経験値・ゴールドの計算
- 複数敵撃破時は各敵のexp/goldを合算して付与(既存の単体計算を配列合算に変更するだけ)
### 2-5. 図鑑との整合
- グループ内の各敵は個別に撃破カウントを図鑑に記録(既存の図鑑記録処理を enemies 配列ループに対応させる)
## 3. 既存機能との整合
- 単体エンカウント(従来)はフォールバックとして完全に残るため、既存シナリオで生成された敵テーブルが壊れない
- `state['battle']` のデータ構造は `enemies` を配列化するだけで、既存の `enemy` 単体参照箇所は `enemies[0]` へのエイリアスでラップして互換性を保つ
- セーブ/ロード(冒険の書スロット)はstate_jsonをそのまま使うため変更不要
- 町・村エリアのランダムエンカウント停止ルールは引き続き有効
現在、ランダムエンカウントで出現する敵は単体または固定の組み合わせが中心で、どの島でも似たような戦闘体験になりがちです。島のバイオーム・天候・時間帯・プレイヤーの平均レベルを組み合わせた「敵グループ編成テーブル」を追加し、「火山島の夜に毒沼付近を歩いたら炎系モンスターとゴーレムが2体で出現する」といった状況依存の編成を実現します。これにより各島の個性が戦闘面でも体感でき、周回プレイの新鮮さが増します。
## 2. 具体的な仕様
### 2-1. 敵グループ編成テーブル (PHP配列・lib.phpまたはgenerator内)
- `rpgsf_encounter_groups()` 関数を新設し、以下のキーで構成された配列を返す
- `biome` : grassland / desert / snow / volcano / swamp / coast / forest / dungeon
- `weather` : clear / rain / snow / fog (省略時は全天候)
- `time_of_day` : day / dusk / night (省略時は全時間帯)
- `level_min` / `level_max` : パーティ平均レベルの適用範囲
- `group` : 出現する敵スロット配列。各スロットは `{ sprite_id, name, count_min, count_max }` の形式
- `weight` : 抽選重み (デフォルト10)
- 例: `['biome'=>'volcano','time_of_day'=>'night','level_min'=>6,'level_max'=>15,'group'=>[['sprite_id'=>'fire_lizard','name'=>'ファイアリザード','count_min'=>1,'count_max'=>2],['sprite_id'=>'golem','name'=>'ゴーレム','count_min'=>1,'count_max'=>1]],'weight'=>8]`
- 最低30グループ程度をPHP配列として内蔵する (外部APIなし)
### 2-2. エンカウント解決ロジックの変更 (lib.php内のエンカウント処理)
- 既存の単体敵選出ロジックを維持しつつ、新テーブルが条件にマッチした場合は `weight` に基づいてグループを抽選
- 条件一致グループがゼロの場合は従来ロジックにフォールバック (後方互換)
- 選出されたグループの各スロットから `rand(count_min, count_max)` 体を生成し、`state['battle']['enemies']` 配列にセット
- 同一グループ内の複数敵はそれぞれ独立したHPを持ち、戦闘ログに「Aが2体、Bが1体現れた!」と表示
### 2-3. 戦闘画面のUI対応 (play.phpおよびJS)
- `battle.enemies` が複数の場合、戦闘Canvasに敵を横並びで描画 (最大3体。既存の単体描画を `enemies[0]` で継続し、2体目以降を右にオフセット配置)
- 攻撃コマンド選択時に「対象選択」UIを追加: 敵が複数の場合は敵名ボタンを横並びで表示し、選択した1体に攻撃
- 全体魔法(フレイム等)は全敵に一括ダメージを与え、ログに「A・Bに○ダメージ!」と表示
- 全敵撃破で勝利判定(既存ロジックを enemies 配列のすべてが hp<=0 になった時点に変更)
- スマホ対応: 対象選択ボタンはコマンドタブ内に縦並びで表示
### 2-4. 経験値・ゴールドの計算
- 複数敵撃破時は各敵のexp/goldを合算して付与(既存の単体計算を配列合算に変更するだけ)
### 2-5. 図鑑との整合
- グループ内の各敵は個別に撃破カウントを図鑑に記録(既存の図鑑記録処理を enemies 配列ループに対応させる)
## 3. 既存機能との整合
- 単体エンカウント(従来)はフォールバックとして完全に残るため、既存シナリオで生成された敵テーブルが壊れない
- `state['battle']` のデータ構造は `enemies` を配列化するだけで、既存の `enemy` 単体参照箇所は `enemies[0]` へのエイリアスでラップして互換性を保つ
- セーブ/ロード(冒険の書スロット)はstate_jsonをそのまま使うため変更不要
- 町・村エリアのランダムエンカウント停止ルールは引き続き有効
💬 返信 (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