リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
戦闘画面の全画面化とモンスター大型ドット絵Canvas表示(横幅最大化+アニメーション強化)
## 1. 目的
戦闘シーンをブラウザ全画面レイアウトの中央エリアで最大限に活用し、モンスタードット絵をより大きく・迫力あるサイズで表示する。現状のモンスターCanvas描画を拡張し、戦闘中のモンスターを画面中央に大型(最大320×320px)で描画、HP低下・攻撃・撃破の各フェーズで視覚的インパクトを高める。
## 2. 具体的な仕様
### 2-1. 戦闘エリアのレイアウト変更
- play.php の戦闘セクションを `position:absolute; inset:0` で全画面レイアウトの中央カラム全体に広げる(既存の四隅パネルは維持)
- 戦闘Canvas要素を `id="battleMonsterCanvas"` として `width=320 height=320`(スマホは `width=200 height=200`)に拡大
- 戦闘背景として地形タイプ(森・砂漠・城・沼・海岸)に応じたグラデーション背景をCanvas下レイヤーに描画する(`id="battleBgCanvas"`)
### 2-2. モンスター大型ドット絵の描画ロジック(JS)
- 既存のモンスタードット絵描画関数を拡張し、スケール係数 `scale = canvas.width / 64` でピクセルアートをアップスケール描画する
- モンスター種別タグ(`dragon`, `undead`, `slime`, `boss`, `humanoid`, `beast`, `magic` など)ごとに頭部・胴体・腕・脚・翼などのパーツ定義を64×64ピクセルグリッドで定義し、`scale`倍して描画
- ボスモンスター(`is_boss: true` または名前に「王」「魔王」「竜王」を含む)は追加パーツ(王冠・翼・オーラ)を描画し、サイズを1.25倍にする
### 2-3. 戦闘フェーズ別アニメーション
- **通常時**: 0.8秒周期で ±4px の上下浮遊アニメーション(`requestAnimationFrame`)
- **攻撃受け時** (`fx-damage` クラス付与時): 0.15秒間、赤フラッシュオーバーレイ(`rgba(255,0,0,0.5)`)+ 左右シェイク ±8px
- **HP50%以下**: モンスター描画に `globalAlpha` 0.85 + パレットをダーク寄りにシフトして傷ついた演出
- **HP25%以下**: 追加で小さな煙パーティクル(Canvas上で半径3pxの灰色円を毎フレーム散布)
- **撃破時**: 爆発パーティクル(16個の円が外側に飛散、0.6秒で `globalAlpha` 0→消滅)後にCanvasをクリア
### 2-4. 戦闘背景Canvas
- `id="battleBgCanvas"` を `id="battleMonsterCanvas"` の背後に重ねて配置(`position:absolute; z-index:0`)
- `state.map_type`(現在地の地形タイプ)に応じた背景を描画:
- 森 → 濃緑グラデーション + 木シルエット
- 砂漠 → 黄土グラデーション + 砂丘シルエット
- 城/遺跡 → 灰青グラデーション + 石柱シルエット
- 沼 → 暗緑グラデーション + 霧エフェクト(半透明白円)
- 海岸 → 青グラデーション + 波シルエット
- デフォルト → 暗青グラデーション
- 背景は静止画(`drawImage` 相当のCanvas描画)でアニメーションなし(パフォーマンス確保)
### 2-5. スマホ対応
- `window.innerWidth < 640` の場合 Canvas を `200×200`、スケール係数を `200/64` に自動切り替え
- 戦闘エリアの縦幅は `min(50vh, 320px)` で制限し、コマンドボタンが画面外に出ないよう確保
### 2-6. PHP側の変更
- play.php の戦闘セクションHTMLに `<canvas id="battleBgCanvas">` を追加(既存の `battleMonsterCanvas` の背後)
- `state['map_type']` をJSに渡す変数として `battleMapType` を追加(既存の `rpgsf_assets()['terrain']` から現在地タイプを取得)
- 既存の `$state['battle']` 構造・`rpgsf_apply_action` は一切変更しない
## 3. 既存機能との整合
- ターン制戦闘のPHPロジック(`rpgsf_apply_action`)は変更しない
- 既存のモンスタードット絵生成JS関数を上書きせず、`scale` 引数を追加した新関数 `drawMonsterScaled(ctx, monster, x, y, scale)` として拡張
- 既存の `fx-attack`, `fx-damage`, `fx-levelup` CSSクラスによるエフェクトはそのまま維持し、Canvasアニメーションは並行して動作
- 四隅パネル(ステータス・ミニマップ・ログ・コマンド)のレイアウトは変更しない
- セーブ・ロード・BGM・音量調整などの既存機能に影響なし
戦闘シーンをブラウザ全画面レイアウトの中央エリアで最大限に活用し、モンスタードット絵をより大きく・迫力あるサイズで表示する。現状のモンスターCanvas描画を拡張し、戦闘中のモンスターを画面中央に大型(最大320×320px)で描画、HP低下・攻撃・撃破の各フェーズで視覚的インパクトを高める。
## 2. 具体的な仕様
### 2-1. 戦闘エリアのレイアウト変更
- play.php の戦闘セクションを `position:absolute; inset:0` で全画面レイアウトの中央カラム全体に広げる(既存の四隅パネルは維持)
- 戦闘Canvas要素を `id="battleMonsterCanvas"` として `width=320 height=320`(スマホは `width=200 height=200`)に拡大
- 戦闘背景として地形タイプ(森・砂漠・城・沼・海岸)に応じたグラデーション背景をCanvas下レイヤーに描画する(`id="battleBgCanvas"`)
### 2-2. モンスター大型ドット絵の描画ロジック(JS)
- 既存のモンスタードット絵描画関数を拡張し、スケール係数 `scale = canvas.width / 64` でピクセルアートをアップスケール描画する
- モンスター種別タグ(`dragon`, `undead`, `slime`, `boss`, `humanoid`, `beast`, `magic` など)ごとに頭部・胴体・腕・脚・翼などのパーツ定義を64×64ピクセルグリッドで定義し、`scale`倍して描画
- ボスモンスター(`is_boss: true` または名前に「王」「魔王」「竜王」を含む)は追加パーツ(王冠・翼・オーラ)を描画し、サイズを1.25倍にする
### 2-3. 戦闘フェーズ別アニメーション
- **通常時**: 0.8秒周期で ±4px の上下浮遊アニメーション(`requestAnimationFrame`)
- **攻撃受け時** (`fx-damage` クラス付与時): 0.15秒間、赤フラッシュオーバーレイ(`rgba(255,0,0,0.5)`)+ 左右シェイク ±8px
- **HP50%以下**: モンスター描画に `globalAlpha` 0.85 + パレットをダーク寄りにシフトして傷ついた演出
- **HP25%以下**: 追加で小さな煙パーティクル(Canvas上で半径3pxの灰色円を毎フレーム散布)
- **撃破時**: 爆発パーティクル(16個の円が外側に飛散、0.6秒で `globalAlpha` 0→消滅)後にCanvasをクリア
### 2-4. 戦闘背景Canvas
- `id="battleBgCanvas"` を `id="battleMonsterCanvas"` の背後に重ねて配置(`position:absolute; z-index:0`)
- `state.map_type`(現在地の地形タイプ)に応じた背景を描画:
- 森 → 濃緑グラデーション + 木シルエット
- 砂漠 → 黄土グラデーション + 砂丘シルエット
- 城/遺跡 → 灰青グラデーション + 石柱シルエット
- 沼 → 暗緑グラデーション + 霧エフェクト(半透明白円)
- 海岸 → 青グラデーション + 波シルエット
- デフォルト → 暗青グラデーション
- 背景は静止画(`drawImage` 相当のCanvas描画)でアニメーションなし(パフォーマンス確保)
### 2-5. スマホ対応
- `window.innerWidth < 640` の場合 Canvas を `200×200`、スケール係数を `200/64` に自動切り替え
- 戦闘エリアの縦幅は `min(50vh, 320px)` で制限し、コマンドボタンが画面外に出ないよう確保
### 2-6. PHP側の変更
- play.php の戦闘セクションHTMLに `<canvas id="battleBgCanvas">` を追加(既存の `battleMonsterCanvas` の背後)
- `state['map_type']` をJSに渡す変数として `battleMapType` を追加(既存の `rpgsf_assets()['terrain']` から現在地タイプを取得)
- 既存の `$state['battle']` 構造・`rpgsf_apply_action` は一切変更しない
## 3. 既存機能との整合
- ターン制戦闘のPHPロジック(`rpgsf_apply_action`)は変更しない
- 既存のモンスタードット絵生成JS関数を上書きせず、`scale` 引数を追加した新関数 `drawMonsterScaled(ctx, monster, x, y, scale)` として拡張
- 既存の `fx-attack`, `fx-damage`, `fx-levelup` CSSクラスによるエフェクトはそのまま維持し、Canvasアニメーションは並行して動作
- 四隅パネル(ステータス・ミニマップ・ログ・コマンド)のレイアウトは変更しない
- セーブ・ロード・BGM・音量調整などの既存機能に影響なし
💬 返信 (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