リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
フィールド種別分離:町・村内マップにはモンスターを出現させず、屋外フィールド・ダンジョンのみでランダムエンカウントを発生させる
## 1. 目的
現状はサブマップ(村・神殿含む)でもランダムエンカウントが発生しうる設計になっているが、SFC時代のRPGらしさ・ゲームバランス的に「町・村の中は安全、フィールド・ダンジョンは危険」という区分けが自然である。本改善では**マップ種別フラグ**を導入し、エンカウントが起きるマップ種別を明示的に制御する。あわせてモンスター画像の生成タイミングを「屋外フィールド・ダンジョン進入時」に限定して毎回新規生成することでリッチな体験を提供する。
## 2. 具体的な仕様
### 2-1. マップ種別フラグの追加(lib.php / rpgsf_assets())
`maps`(ワールドマップ・屋外フィールド)と `submaps` に `field_type` キーを追加する。
```php
// maps(屋外フィールド)
['id' => 'forest', ..., 'field_type' => 'outdoor'], // エンカウントあり
['id' => 'desert', ..., 'field_type' => 'outdoor'],
// submaps
['id' => 'village', ..., 'field_type' => 'town'], // エンカウントなし
['id' => 'sanctuary', ..., 'field_type' => 'town'], // エンカウントなし
['id' => 'cave', ..., 'field_type' => 'dungeon'], // エンカウントあり
['id' => 'fort', ..., 'field_type' => 'dungeon'], // エンカウントあり
```
シナリオ生成時(`rpgsf_create_scenario` 内)、選択したマップ・サブマップの `field_type` を `scenario_json` の `map.field_type` および `submaps[*].field_type` として保存する。
### 2-2. エンカウント判定の分岐(rpgsf_apply_action / 移動処理)
移動アクション(`move` 等)処理内でランダムエンカウント判定を行う箇所に以下を追加する。
```php
$current_field_type = $state['current_submap']
? ($scenario['submaps'][$state['current_submap']]['field_type'] ?? 'outdoor')
: ($scenario['map']['field_type'] ?? 'outdoor');
$encounter_enabled = in_array($current_field_type, ['outdoor', 'dungeon'], true);
if (!$encounter_enabled) {
// エンカウント判定をスキップ
goto skip_encounter;
}
// 既存のエンカウント乱数判定...
skip_encounter:
```
`goto` が避けたい場合は条件ブロックで囲む形でも可。
### 2-3. タウンマップのUX改善
- `field_type === 'town'` のマップ内では、進行ログに「ここは安全な場所だ。」の一文を初回進入時のみ表示する。
- ミニマップのCanvas描画時、`town` 種別のタイルには薄い黄色の安全色オーバーレイ(rgba(255,240,100,0.08)程度)をかける。
- ワールドマップ(outdoor)と洞窟/神殿(dungeon)の地名ラベルには既存の地名表示に加え、小さな剣アイコン⚔️を付与して「危険エリア」であることを示す。
### 2-4. モンスター画像の毎回生成(屋外・ダンジョン進入時)
Canvas上のモンスタースプライト描画に用いる「モンスター識別シード」を、`outdoor` または `dungeon` フィールドへの進入イベント発火時に毎回リセットして再生成する。
- `state['monster_sprite_seed']` に `uniqid('', true)` + モンスター種別名を連結した文字列をセットする。
- JavaScript側では `monster_sprite_seed` が変化するたびにCanvasモンスタースプライトを再描画する(既存の描画ロジックに seed 変化検知を追加)。
- サブマップ遷移(`enter_submap` / `exit_submap` アクション)のタイミングで seed を更新する処理を `rpgsf_apply_action` に追加。
### 2-5. 既存機能との整合
- `field_type` が未設定の既存シナリオは `outdoor` をデフォルトとし、後方互換を維持する。
- 戦闘シーンへの遷移・戦闘ロジック・ショップ・NPC会話など、エンカウント以外の既存処理は一切変更しない。
- セーブ/ロードの `state_json` 構造は変えず、`current_submap` の既存フィールドを参照するだけなので互換性を保つ。
- スマホ/PCどちらでも動作する(JS側の変更はCanvas再描画判定のみ)。
## 3. 実装ファイル
- `lib.php`:`rpgsf_assets()` の `maps`/`submaps` に `field_type` 追加、`rpgsf_create_scenario()` でシナリオに保存、`rpgsf_apply_action()` のエンカウント判定に分岐追加+seed更新処理追加
- `pages/play.php`:初回進入メッセージ出力、`monster_sprite_seed` をJSへ渡す変数に追加
- Canvas描画JS(play.php内インラインJS):seed変化検知でスプライト再描画
現状はサブマップ(村・神殿含む)でもランダムエンカウントが発生しうる設計になっているが、SFC時代のRPGらしさ・ゲームバランス的に「町・村の中は安全、フィールド・ダンジョンは危険」という区分けが自然である。本改善では**マップ種別フラグ**を導入し、エンカウントが起きるマップ種別を明示的に制御する。あわせてモンスター画像の生成タイミングを「屋外フィールド・ダンジョン進入時」に限定して毎回新規生成することでリッチな体験を提供する。
## 2. 具体的な仕様
### 2-1. マップ種別フラグの追加(lib.php / rpgsf_assets())
`maps`(ワールドマップ・屋外フィールド)と `submaps` に `field_type` キーを追加する。
```php
// maps(屋外フィールド)
['id' => 'forest', ..., 'field_type' => 'outdoor'], // エンカウントあり
['id' => 'desert', ..., 'field_type' => 'outdoor'],
// submaps
['id' => 'village', ..., 'field_type' => 'town'], // エンカウントなし
['id' => 'sanctuary', ..., 'field_type' => 'town'], // エンカウントなし
['id' => 'cave', ..., 'field_type' => 'dungeon'], // エンカウントあり
['id' => 'fort', ..., 'field_type' => 'dungeon'], // エンカウントあり
```
シナリオ生成時(`rpgsf_create_scenario` 内)、選択したマップ・サブマップの `field_type` を `scenario_json` の `map.field_type` および `submaps[*].field_type` として保存する。
### 2-2. エンカウント判定の分岐(rpgsf_apply_action / 移動処理)
移動アクション(`move` 等)処理内でランダムエンカウント判定を行う箇所に以下を追加する。
```php
$current_field_type = $state['current_submap']
? ($scenario['submaps'][$state['current_submap']]['field_type'] ?? 'outdoor')
: ($scenario['map']['field_type'] ?? 'outdoor');
$encounter_enabled = in_array($current_field_type, ['outdoor', 'dungeon'], true);
if (!$encounter_enabled) {
// エンカウント判定をスキップ
goto skip_encounter;
}
// 既存のエンカウント乱数判定...
skip_encounter:
```
`goto` が避けたい場合は条件ブロックで囲む形でも可。
### 2-3. タウンマップのUX改善
- `field_type === 'town'` のマップ内では、進行ログに「ここは安全な場所だ。」の一文を初回進入時のみ表示する。
- ミニマップのCanvas描画時、`town` 種別のタイルには薄い黄色の安全色オーバーレイ(rgba(255,240,100,0.08)程度)をかける。
- ワールドマップ(outdoor)と洞窟/神殿(dungeon)の地名ラベルには既存の地名表示に加え、小さな剣アイコン⚔️を付与して「危険エリア」であることを示す。
### 2-4. モンスター画像の毎回生成(屋外・ダンジョン進入時)
Canvas上のモンスタースプライト描画に用いる「モンスター識別シード」を、`outdoor` または `dungeon` フィールドへの進入イベント発火時に毎回リセットして再生成する。
- `state['monster_sprite_seed']` に `uniqid('', true)` + モンスター種別名を連結した文字列をセットする。
- JavaScript側では `monster_sprite_seed` が変化するたびにCanvasモンスタースプライトを再描画する(既存の描画ロジックに seed 変化検知を追加)。
- サブマップ遷移(`enter_submap` / `exit_submap` アクション)のタイミングで seed を更新する処理を `rpgsf_apply_action` に追加。
### 2-5. 既存機能との整合
- `field_type` が未設定の既存シナリオは `outdoor` をデフォルトとし、後方互換を維持する。
- 戦闘シーンへの遷移・戦闘ロジック・ショップ・NPC会話など、エンカウント以外の既存処理は一切変更しない。
- セーブ/ロードの `state_json` 構造は変えず、`current_submap` の既存フィールドを参照するだけなので互換性を保つ。
- スマホ/PCどちらでも動作する(JS側の変更はCanvas再描画判定のみ)。
## 3. 実装ファイル
- `lib.php`:`rpgsf_assets()` の `maps`/`submaps` に `field_type` 追加、`rpgsf_create_scenario()` でシナリオに保存、`rpgsf_apply_action()` のエンカウント判定に分岐追加+seed更新処理追加
- `pages/play.php`:初回進入メッセージ出力、`monster_sprite_seed` をJSへ渡す変数に追加
- Canvas描画JS(play.php内インラインJS):seed変化検知でスプライト再描画
💬 返信 (4)
🛠 開発を開始しました (機能追加 rpg-story-forge)
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「」の機能追加を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo//
ご利用ありがとうございます!
ご要望いただいた「」の機能追加を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo//
ご利用ありがとうございます!
✅ リリース補足
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
今回の変更内容:
町・村・安全施設ではランダムエンカウントが起きないようにし、屋外フィールドとダンジョンを危険エリアとして明示しました。
危険エリア進入時はモンスター表示の生成シードを更新し、ミニマップにも安全エリアの表示を追加しました。
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=rpg-story-forge
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
今回の変更内容:
町・村・安全施設ではランダムエンカウントが起きないようにし、屋外フィールドとダンジョンを危険エリアとして明示しました。
危険エリア進入時はモンスター表示の生成シードを更新し、ミニマップにも安全エリアの表示を追加しました。
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=rpg-story-forge
Echo
Iris