リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
ダンジョン・屋外フィールド専用エンカウントテーブルの分離と、モンスタードット絵のフィールド別毎回Canvas再生成
## 1. 目的
現在の実装では `rpgsf_play_enemy_biome()` でフィールド種別を判定しているが、町(field_type=town)での戦闘抑制はロジック上存在するものの、JS側のエンカウント判定(移動時のランダム遭遇)でフィールド種別チェックが不完全なケースがある。加えて、モンスターのCanvas画像は生成後キャッシュ流用されており、フィールド別の色調・パレットが反映されない。本改善では以下を一括対応する。
## 2. 具体的仕様
### 2-1. フィールド別エンカウントテーブル分離(PHP側)
- `rpgsf_assets()` の enemies 配列に `field_types` キーを追加し、各敵が出現可能なフィールド種別を配列で指定する(例: `['outdoor','dungeon']`、町専用NPCは `[]`)
- `rpgsf_create_scenario()` 内のシナリオ生成時、現在アクティブなマップの `field_type` を参照し、`town` では enemies を空配列にしてシナリオJSONへ格納する
- すでに生成済みのシナリオについては、play.php のJSONロード後にPHP側で `$state['current_map']['field_type']` を確認し、town の場合は `$scenario['enemies']` を空配列で上書きしてからJSへ渡す
### 2-2. JS側エンカウント判定の明示的ガード
- play.php の移動処理JS内(`handleMove` 相当関数)で、`currentMapFieldType` 変数を保持し、値が `'town'` または `'village'` の場合はエンカウント判定ロジック自体をスキップする
- サブマップ遷移時(村・神殿入場)に `currentMapFieldType` を更新し、退出時にワールドマップの `field_type` へ戻す
### 2-3. モンスタードット絵のフィールド別毎回Canvas再生成
- 戦闘開始時に呼ぶ `drawMonster()` 関数を拡張し、引数に `fieldType`(`'outdoor'`/`'dungeon'`/`'town'`)と `biome`(`'grassland'`/`'forest'`/`'desert'`/`'swamp'`/`'volcano'`/`'coast'`)を追加する
- biome別カラーパレット定数を追加:
- grassland: 緑系ベース
- forest: 深緑・苔色
- desert: 黄土・橙
- swamp: 紫・暗緑
- volcano: 赤・黒・灰
- coast: 青・水色・白
- dungeon: 灰・暗紫・骨白
- 毎ターン呼び出す `redrawMonsterCanvas()` に上記paletteを渡し、前回描画との seed を `Date.now() % 1000` で変化させることで毎回微妙に異なるドット絵を生成する(既存の HP段階・怒り・状態異常反映と組み合わせる)
- 戦闘画面の `<canvas id="monsterCanvas">` は毎ターン `clearRect` してから再描画する(既存実装を踏襲)
### 2-4. 画面表示
- 戦闘ウィンドウ上部にフィールドアイコン(biomeのicon文字)と biome名ラベルを小さく表示し、どのフィールドで遭遇したかを示す
- 例: `「🌋 火山地帯で遭遇!」`
## 3. 既存機能との整合
- 既存の `rpgsf_play_enemy_biome()` はそのまま残し、図鑑グループ分類に引き続き使用する
- 既存モンスター画像の生成ロジック(パレット・部位別)は上書きせず、biome palette を追加レイヤーとして色合成(globalAlpha等)で適用する
- town判定でenemiesを空にするのはplay.php内の一時的な上書きのみで、DBのscenario_jsonは変更しない(後方互換)
- スマホ・PC両対応:Canvas再描画はrequestAnimationFrameを使わずターン処理内の同期呼び出しで完結させ、スマホ低速環境でも問題なく動作する
現在の実装では `rpgsf_play_enemy_biome()` でフィールド種別を判定しているが、町(field_type=town)での戦闘抑制はロジック上存在するものの、JS側のエンカウント判定(移動時のランダム遭遇)でフィールド種別チェックが不完全なケースがある。加えて、モンスターのCanvas画像は生成後キャッシュ流用されており、フィールド別の色調・パレットが反映されない。本改善では以下を一括対応する。
## 2. 具体的仕様
### 2-1. フィールド別エンカウントテーブル分離(PHP側)
- `rpgsf_assets()` の enemies 配列に `field_types` キーを追加し、各敵が出現可能なフィールド種別を配列で指定する(例: `['outdoor','dungeon']`、町専用NPCは `[]`)
- `rpgsf_create_scenario()` 内のシナリオ生成時、現在アクティブなマップの `field_type` を参照し、`town` では enemies を空配列にしてシナリオJSONへ格納する
- すでに生成済みのシナリオについては、play.php のJSONロード後にPHP側で `$state['current_map']['field_type']` を確認し、town の場合は `$scenario['enemies']` を空配列で上書きしてからJSへ渡す
### 2-2. JS側エンカウント判定の明示的ガード
- play.php の移動処理JS内(`handleMove` 相当関数)で、`currentMapFieldType` 変数を保持し、値が `'town'` または `'village'` の場合はエンカウント判定ロジック自体をスキップする
- サブマップ遷移時(村・神殿入場)に `currentMapFieldType` を更新し、退出時にワールドマップの `field_type` へ戻す
### 2-3. モンスタードット絵のフィールド別毎回Canvas再生成
- 戦闘開始時に呼ぶ `drawMonster()` 関数を拡張し、引数に `fieldType`(`'outdoor'`/`'dungeon'`/`'town'`)と `biome`(`'grassland'`/`'forest'`/`'desert'`/`'swamp'`/`'volcano'`/`'coast'`)を追加する
- biome別カラーパレット定数を追加:
- grassland: 緑系ベース
- forest: 深緑・苔色
- desert: 黄土・橙
- swamp: 紫・暗緑
- volcano: 赤・黒・灰
- coast: 青・水色・白
- dungeon: 灰・暗紫・骨白
- 毎ターン呼び出す `redrawMonsterCanvas()` に上記paletteを渡し、前回描画との seed を `Date.now() % 1000` で変化させることで毎回微妙に異なるドット絵を生成する(既存の HP段階・怒り・状態異常反映と組み合わせる)
- 戦闘画面の `<canvas id="monsterCanvas">` は毎ターン `clearRect` してから再描画する(既存実装を踏襲)
### 2-4. 画面表示
- 戦闘ウィンドウ上部にフィールドアイコン(biomeのicon文字)と biome名ラベルを小さく表示し、どのフィールドで遭遇したかを示す
- 例: `「🌋 火山地帯で遭遇!」`
## 3. 既存機能との整合
- 既存の `rpgsf_play_enemy_biome()` はそのまま残し、図鑑グループ分類に引き続き使用する
- 既存モンスター画像の生成ロジック(パレット・部位別)は上書きせず、biome palette を追加レイヤーとして色合成(globalAlpha等)で適用する
- town判定でenemiesを空にするのはplay.php内の一時的な上書きのみで、DBのscenario_jsonは変更しない(後方互換)
- スマホ・PC両対応:Canvas再描画はrequestAnimationFrameを使わずターン処理内の同期呼び出しで完結させ、スマホ低速環境でも問題なく動作する
💬 返信 (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