リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
ワールドマップ上の昼夜・天候に連動したモンスタースポーン演出と、バイオーム別モンスタードット絵のCanvas毎回再生成強化
## 1. 目的
現在のエンカウントシステムはバイオーム別テーブルで敵を決定しているが、モンスタードット絵はシナリオ生成時に一度だけ生成されるため、同じ敵が天候・時間帯・バイオームによらず常に同じ見た目で出現する。本改善では「エンカウント発生のたびにCanvas上でモンスタードット絵をフルリセット&再描画」し、さらに昼夜・天候状態をドット絵パレットに反映することで、毎回異なる戦闘演出を実現する。あわせて町・村・神殿ではエンカウントを完全抑制する既存ロジックを維持しつつ、屋外(grassland/forest/desert/swamp/coast/volcano)とダンジョン(dungeon)の2系統で別々のドット絵カラーパレットを適用する。
## 2. 具体的な仕様
### 2-1. モンスタードット絵の毎回Canvas再描画
- `pages/play.php` のJavaScript側に `drawMonsterSprite(ctx, enemy, biome, weather, timeOfDay)` 関数を新設する。
- この関数はエンカウント発生時(戦闘シーン切り替えアニメーション直前)に必ず呼び出し、Canvas全体をクリア→再描画する。
- モンスターの「基本シルエット(頭部・胴体・四肢・尻尾等の部位別ブロック)」は既存のカラーパレット生成ロジックを踏襲しつつ、以下の変数を毎回シードとして混入することで描画結果を変化させる:
- `enemy.id`(固定シード)
- `biome`(バイオーム種別)
- `weather`(clear/rain/snow/fog)
- `timeOfDay`(day/dusk/night)
- `Math.floor(Date.now() / 60000) % 256`(1分単位の微変化)
- シードはすべてXOR合成してLCG擬似乱数のseed値として使用し、外部APIなしで毎回異なるドット絵を生成する。
### 2-2. 天候・時間帯によるパレット変化
| 条件 | パレット変化 |
|------|--------------|
| night | 全色を約40%暗化(HSL lightness -40%)、目の部分のみ赤または黄で発光表現 |
| dusk | 全色に橙味を加算(hue +15°)、影を濃く |
| rain | 彩度を下げ(saturation -25%)、青みを加算 |
| snow | 全体を白飛び気味に(lightness +20%)、輪郭を太く |
| fog | 透明度を下げてCanvasのglobalAlphaを0.75に設定 |
| dungeon | 全体を暗化(lightness -20%)、石灰色の影を追加 |
| volcano | 赤・橙系バイアス(hue 0-30°に引き寄せ)、発光エフェクト |
### 2-3. 屋外とダンジョンの描画系統分離
- `rpgsf_play_enemy_biome()` が返す `field_type` を戦闘シーンのJSに渡す(既存のPHP変数 `$env_weather` / `$env_time` と同様にinlineで埋め込む)。
- 屋外系(grassland/forest/desert/swamp/coast)はモンスターの背景に対応バイオームの簡易風景(草・砂・木・水面)を4pxドット絵で描画。
- ダンジョン系(dungeon)は背景を岩壁タイルパターンで描画。
- 町・村・神殿(town)はエンカウントなしのため描画不要(既存ロジック維持)。
### 2-4. 実装範囲(既存機能を壊さない点)
- PHPのエンカウント判定ロジック(`rpgsf_play_enemy_biome`等)は変更しない。
- 既存の `rpgsf_play_fx_pct` 等の関数定義ガードは維持する。
- モンスター図鑑(bestiary)への記録は変更しない。
- スマホ対応:Canvas描画はviewport幅に合わせてスケーリングする既存ロジックを継承。
- BGM・SE・レトロ演出タイミングは変更しない。
### 2-5. 実装ファイル
- `pages/play.php` のJS部分にのみ変更を加える(PHP側は変数追加のみ)。
- 追加するJS関数:`drawMonsterSprite()`, `lcgRand(seed)`, `applyWeatherPalette(baseColor, weather, timeOfDay)`, `renderBiomeBackground(ctx, biome)`
## 3. 既存機能との整合
- モンスタードット絵の「待機・攻撃・被弾・撃破ポーズアニメーション」は既存のスプライトシートアニメーション処理の上に本機能を重ねる形で実装し、アニメーション処理自体は変更しない。
- シナリオ生成時の `generated_visual` フィールドは引き続き使用し、本機能はその描画フェーズのみを拡張する。
現在のエンカウントシステムはバイオーム別テーブルで敵を決定しているが、モンスタードット絵はシナリオ生成時に一度だけ生成されるため、同じ敵が天候・時間帯・バイオームによらず常に同じ見た目で出現する。本改善では「エンカウント発生のたびにCanvas上でモンスタードット絵をフルリセット&再描画」し、さらに昼夜・天候状態をドット絵パレットに反映することで、毎回異なる戦闘演出を実現する。あわせて町・村・神殿ではエンカウントを完全抑制する既存ロジックを維持しつつ、屋外(grassland/forest/desert/swamp/coast/volcano)とダンジョン(dungeon)の2系統で別々のドット絵カラーパレットを適用する。
## 2. 具体的な仕様
### 2-1. モンスタードット絵の毎回Canvas再描画
- `pages/play.php` のJavaScript側に `drawMonsterSprite(ctx, enemy, biome, weather, timeOfDay)` 関数を新設する。
- この関数はエンカウント発生時(戦闘シーン切り替えアニメーション直前)に必ず呼び出し、Canvas全体をクリア→再描画する。
- モンスターの「基本シルエット(頭部・胴体・四肢・尻尾等の部位別ブロック)」は既存のカラーパレット生成ロジックを踏襲しつつ、以下の変数を毎回シードとして混入することで描画結果を変化させる:
- `enemy.id`(固定シード)
- `biome`(バイオーム種別)
- `weather`(clear/rain/snow/fog)
- `timeOfDay`(day/dusk/night)
- `Math.floor(Date.now() / 60000) % 256`(1分単位の微変化)
- シードはすべてXOR合成してLCG擬似乱数のseed値として使用し、外部APIなしで毎回異なるドット絵を生成する。
### 2-2. 天候・時間帯によるパレット変化
| 条件 | パレット変化 |
|------|--------------|
| night | 全色を約40%暗化(HSL lightness -40%)、目の部分のみ赤または黄で発光表現 |
| dusk | 全色に橙味を加算(hue +15°)、影を濃く |
| rain | 彩度を下げ(saturation -25%)、青みを加算 |
| snow | 全体を白飛び気味に(lightness +20%)、輪郭を太く |
| fog | 透明度を下げてCanvasのglobalAlphaを0.75に設定 |
| dungeon | 全体を暗化(lightness -20%)、石灰色の影を追加 |
| volcano | 赤・橙系バイアス(hue 0-30°に引き寄せ)、発光エフェクト |
### 2-3. 屋外とダンジョンの描画系統分離
- `rpgsf_play_enemy_biome()` が返す `field_type` を戦闘シーンのJSに渡す(既存のPHP変数 `$env_weather` / `$env_time` と同様にinlineで埋め込む)。
- 屋外系(grassland/forest/desert/swamp/coast)はモンスターの背景に対応バイオームの簡易風景(草・砂・木・水面)を4pxドット絵で描画。
- ダンジョン系(dungeon)は背景を岩壁タイルパターンで描画。
- 町・村・神殿(town)はエンカウントなしのため描画不要(既存ロジック維持)。
### 2-4. 実装範囲(既存機能を壊さない点)
- PHPのエンカウント判定ロジック(`rpgsf_play_enemy_biome`等)は変更しない。
- 既存の `rpgsf_play_fx_pct` 等の関数定義ガードは維持する。
- モンスター図鑑(bestiary)への記録は変更しない。
- スマホ対応:Canvas描画はviewport幅に合わせてスケーリングする既存ロジックを継承。
- BGM・SE・レトロ演出タイミングは変更しない。
### 2-5. 実装ファイル
- `pages/play.php` のJS部分にのみ変更を加える(PHP側は変数追加のみ)。
- 追加するJS関数:`drawMonsterSprite()`, `lcgRand(seed)`, `applyWeatherPalette(baseColor, weather, timeOfDay)`, `renderBiomeBackground(ctx, biome)`
## 3. 既存機能との整合
- モンスタードット絵の「待機・攻撃・被弾・撃破ポーズアニメーション」は既存のスプライトシートアニメーション処理の上に本機能を重ねる形で実装し、アニメーション処理自体は変更しない。
- シナリオ生成時の `generated_visual` フィールドは引き続き使用し、本機能はその描画フェーズのみを拡張する。
💬 返信 (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