リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
職業転職システム:冒険の節目でキャラクターが職業を変更できる転職所機能の追加
## 目的
現在、職業はパーティ編成時に一度だけ選択でき、その後変更できない。DQ3のように「転職所」サブマップを用意し、一定レベル到達後にキャラクターが職業を変更できる転職システムを追加する。これによりリプレイ性と育成の深みが増し、ユーザーが長くゲームを楽しめるようになる。
## 具体的な仕様
### 1. 転職所タイルの追加
- `rpgsf_assets()` の `submaps` に `job_shrine`(転職の神殿)タイプを追加
- タイルタイプ `J`(転職神殿入口)を `terrain` に追加: `walk=true`, `mark='転'`
- ワールドマップ生成時、既存の神殿(`N`タイル)とは別に1箇所 `J` タイルを自動配置
### 2. 転職条件
- 転職神殿に入ると、パーティメンバーのうちレベル10以上のキャラクターに転職選択肢を提示
- 転職後はレベルが1に戻るが、元職業の習得呪文・特技の半数(切り捨て)を引き継ぐ
- 転職済みフラグ `transferred: true` と元職業 `prev_job` を `state['party'][i]` に保存
- 同じ職業への転職は不可
### 3. UI(play.php 内のモーダル)
- 転職神殿タイルに接触したとき、既存のショップモーダルと同様の `div.modal` を表示
- レベル条件未達のメンバーはグレーアウトして選択不可、条件達成メンバーのみ職業セレクトを表示
- 「転職する」ボタン押下で `POST action=job_change` を送信
### 4. PHPアクション処理(`rpgsf_apply_action`)
```
case 'job_change':
$slot = (int)($_POST['member_slot'] ?? 0); // 0=主人公, 1-3=仲間
$new_job = (string)($_POST['new_job'] ?? '');
// バリデーション: レベル>=10, 同一職業でない, 有効な職業ID
// state更新: level=1, job=new_job, prev_job=旧job, transferred=true
// 引き継ぎ呪文: 旧jobのspellsの前半半数をhero/partyメンバーのinherited_spellsに保存
// ログ出力: 「○○は○○に転職した!」
```
### 5. スプライト・ステータス表示への反映
- 転職済みキャラは `transferred=true` の場合、ステータスHUDに元職業名を `(元:○○)` と小さく表示
- 既存のスプライト描画ロジックは `job` キーを参照しているため、転職後の `job` に自動的に切り替わり既存表示が壊れない
### 6. 既存機能との整合
- 転職前後でセーブスロットの構造は変わらない(`job`, `level`, `hp`, `mp`, `exp` は既存キー)
- `inherited_spells` キーを新規追加するだけで、既存の呪文処理ロジックは `job['spells']` + `inherited_spells` のマージで動作
- 転職所は既存の神殿(`N`タイル)とは別タイルで独立するため、既存サブマップ遷移に影響しない
現在、職業はパーティ編成時に一度だけ選択でき、その後変更できない。DQ3のように「転職所」サブマップを用意し、一定レベル到達後にキャラクターが職業を変更できる転職システムを追加する。これによりリプレイ性と育成の深みが増し、ユーザーが長くゲームを楽しめるようになる。
## 具体的な仕様
### 1. 転職所タイルの追加
- `rpgsf_assets()` の `submaps` に `job_shrine`(転職の神殿)タイプを追加
- タイルタイプ `J`(転職神殿入口)を `terrain` に追加: `walk=true`, `mark='転'`
- ワールドマップ生成時、既存の神殿(`N`タイル)とは別に1箇所 `J` タイルを自動配置
### 2. 転職条件
- 転職神殿に入ると、パーティメンバーのうちレベル10以上のキャラクターに転職選択肢を提示
- 転職後はレベルが1に戻るが、元職業の習得呪文・特技の半数(切り捨て)を引き継ぐ
- 転職済みフラグ `transferred: true` と元職業 `prev_job` を `state['party'][i]` に保存
- 同じ職業への転職は不可
### 3. UI(play.php 内のモーダル)
- 転職神殿タイルに接触したとき、既存のショップモーダルと同様の `div.modal` を表示
- レベル条件未達のメンバーはグレーアウトして選択不可、条件達成メンバーのみ職業セレクトを表示
- 「転職する」ボタン押下で `POST action=job_change` を送信
### 4. PHPアクション処理(`rpgsf_apply_action`)
```
case 'job_change':
$slot = (int)($_POST['member_slot'] ?? 0); // 0=主人公, 1-3=仲間
$new_job = (string)($_POST['new_job'] ?? '');
// バリデーション: レベル>=10, 同一職業でない, 有効な職業ID
// state更新: level=1, job=new_job, prev_job=旧job, transferred=true
// 引き継ぎ呪文: 旧jobのspellsの前半半数をhero/partyメンバーのinherited_spellsに保存
// ログ出力: 「○○は○○に転職した!」
```
### 5. スプライト・ステータス表示への反映
- 転職済みキャラは `transferred=true` の場合、ステータスHUDに元職業名を `(元:○○)` と小さく表示
- 既存のスプライト描画ロジックは `job` キーを参照しているため、転職後の `job` に自動的に切り替わり既存表示が壊れない
### 6. 既存機能との整合
- 転職前後でセーブスロットの構造は変わらない(`job`, `level`, `hp`, `mp`, `exp` は既存キー)
- `inherited_spells` キーを新規追加するだけで、既存の呪文処理ロジックは `job['spells']` + `inherited_spells` のマージで動作
- 転職所は既存の神殿(`N`タイル)とは別タイルで独立するため、既存サブマップ遷移に影響しない
💬 返信 (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