無料AIだけで2DアクションとFPSゲームを作りこんでみた!

# FPSエディタ v41 → v42 高低差マップ実装依頼

添付の「261024-FPS v41 壁上着地・自然落下.zip」をベースに、高低差マップ・ジャンプ・半透明のブロック配置ガイドを実装してください。

## 1. 最重要条件

v41では、すでに以下の処理を追加しています。

- 壁の上面を接地面として判定する処理
- 壁の上に着地して立つ処理
- 壁の端から移動すると、ジャンプしなくても自然に落下する処理

**この3つの動作を維持してください。**

特に、従来発生した次の不具合を再発させないでください。

- ジャンプしても壁の上に乗れない
- 壁の上に立つと、ジャンプしない限り降りられない
- 足元に壁がないのに空中で立ち続ける
- 壁上に着地するとプレイヤーが壁内部に埋まる

接地・落下・ジャンプの処理を別々の矛盾した判定にしないでください。

## 2. 既存の5ファイル構成を維持

以下の5ファイルだけを修正してください。

- `index.html`:画面構造
- `style.css`:デザイン
- `game.js`:マップ・プレイヤー・武器・敵・エフェクト
- `editor.js`:編集操作・保存処理
- `main.js`:起動・全体制御

新しいファイルやフォルダは追加しないでください。

変更は原則として `game.js` と `editor.js` に限定し、必要な場合のみ `main.js` を変更してください。

既存コードの全面的な書き直しは禁止します。

## 3. 高低差のあるブロック配置

現在の「壁を置く」機能を拡張してください。

既存の通常壁の高さを1.00として、0.25(4分の1)刻みでブロックの高さを変更できるようにします。

同じマスを続けて左クリックすると、以下のように高さが増加します。

| クリック回数 | 高さ |
|---|---|
| 1回 | 0.25 |
| 2回 | 0.50 |
| 3回 | 0.75 |
| 4回 | 1.00 |
| 5回 | 1.25 |
| 6回 | 1.50 |

- マップの既存グリッドに吸着すること
- 高さの変化は即時に3D表示へ反映すること
- ブロック同士に隙間を作らないこと
- ブロックには既存の壁テクスチャを使用すること
- 高さの上限は原則として設けないこと
- 高さの内部管理は0.25単位の整数段数を推奨すること
- 既存のマップや壁の形状を勝手に変えないこと

従来の壁は高さ1.00として扱い、旧データとの互換性を維持してください。

## 4. ブロックの削除操作

「壁を消す」モードには次の操作を実装してください。

- 左クリック:高さを0.25ずつ減らす
- Shift+左クリック:そのマスのブロックをすべて削除
- 左ドラッグ:複数マスを連続して削除
- 高さが0になったらブロックを完全に消す
- 高さがマイナスにならないようにする
- 同じマスにマウスを置き続けても、ドラッグ操作で連続して削らない

既存のマップNo、フロア移動地点、プレイヤー初期位置を破壊しないでください。

## 5. 半透明ガイドブロック

マップ編集時、ブロックが配置・削除される位置を事前に表示してください。

### 配置モード

- マウスカーソルが指しているマスに、薄い青色の半透明ブロックを表示
- ガイドは高さ0.25の1段分
- 既存ブロックがある場合は、その真上に表示
- マウス移動に追従
- グリッドに吸着
- ガイドと実際の配置結果を一致させる

### 削除モード

- 通常時は削除対象の最上段0.25を赤色の半透明で表示
- Shiftキーを押した場合は、削除対象の高さ全体を赤色表示
- 削除できない場所にはガイドを表示しない

ガイドブロックは、ゲーム内の衝突判定や保存データに含めないでください。

## 6. ジャンプ機能

Spaceキーでジャンプできるようにしてください。

ジャンプ可能な最大段差は、通常壁の高さ1.00に対して **0.75(4分の3)** とします。

- 0.25の段差:ジャンプで登れる
- 0.50の段差:ジャンプで登れる
- 0.75の段差:ジャンプで登れる
- 1.00以上の段差:一度のジャンプでは直接登れない
- 二段ジャンプは禁止
- 空中でもWASD移動可能
- 着地したら再びジャンプ可能
- 重力により自然に落下する
- Shiftダッシュを維持する
- 移動速度やマウス感度は変更しない

ジャンプ速度と重力は、フレームレートに依存しない方式で計算してください。

## 7. 壁上着地・自然落下の維持

**今回の実装で最も重要な部分です。**

v41で追加した壁上面への着地と、端からの自然落下を基礎にして、高低差を実装してください。

### 上に乗る処理

- 足元の支持面の高さを正確に求める
- プレイヤーが落下してきたとき、通過した最も適切な上面で着地する
- ブロックに着地したらその高さで安定する
- ブロックの側面を通り抜けない
- 高い場所から落下しても正常に着地できる

### 降りる処理

- 水平移動でブロックの端から出たら、支持面を再判定する
- 足元に支持面がなくなったら、自動的に落下する
- 落下開始にジャンプ操作を必要としない
- 空中で以前の地面の高さに固定されない
- 下のブロックまたは地面に接触したら着地する

### 衝突判定の統一

- 横方向の衝突判定
- 上面への着地判定
- 足元の支持判定
- 重力・落下処理
- 天井・下面との衝突判定

これらが矛盾しないようにしてください。

特に、**水平方向への移動後に足元の支持面を再評価すること**を重視してください。

既存v41の着地・落下処理を無条件で削除し、別の不完全な処理に置き換えることは禁止します。

## 8. JSON保存・読み込み

高低差情報を現在のJSON保存機能に追加してください。

- マスごとの高さを保存
- 0.25刻みの高さを正確に復元
- 複数マップNoごとに独立した高さ情報を保持
- フロアを切り替えても高さを維持
- 保存後に読み込んでも地形が一致
- 旧v39~v41形式のJSONとの互換性を維持
- 古いJSONでは既存壁を高さ1.00として復元
- 敵アニメーション・画像ライブラリ・武器・発射地点設定に影響させない

現在の「名前を付けて保存」「上書き保存」の動作も維持してください。

## 9. 動作テスト

少なくとも以下を検証してください。

1. 同じ場所を4回クリックすると高さ1.00になる
2. クリックを重ねるとさらに高くなる
3. 削除で0.25ずつ低くなる
4. Shift+クリックで全削除できる
5. 半透明ガイドが正しい位置に表示される
6. 0.25・0.50・0.75の段差にジャンプして乗れる
7. 1.00の段差には直接ジャンプで乗れない
8. 高い場所から落下して壁の上に着地できる
9. 壁の上で安定して立てる
10. **壁の端から歩くだけで降りられる**
11. ジャンプせず降りても空中で停止しない
12. 横から壁をすり抜けない
13. 複数マップNoで高さが正しく保持される
14. JSON保存・読み込み後に形状が完全復元される
15. 既存の武器・敵・画像・編集機能にデグレードがない

ジャンプで壁に登るテストと、ジャンプせず壁から降りるテストは、必ず別々に確認してください。

## 10. 納品

- v42として完成版を出力する
- 5ファイル構成を維持する
- ZIPにまとめて納品する
- ファイル名先頭の日付には実際の開発日を使う
- 修正したファイル・関数を報告する
- 実行したテスト結果を報告する
- ブラウザで未確認の動作は未確認と明記する

**最重要:今回は高低差マップ・ジャンプ・半透明ガイドだけを追加してください。v41の壁上着地・自然落下の機能を維持し、その他の既存機能を変更しないでください。**
# アクションエディタ v89 → v90 改修依頼

## 1. 対象ファイル


261031-v89-アクションエディタ-移動アニメーション統合.html

## 2. 改修の基本方針

プレイヤーの武器切り替えと、それに連動するキャラ画像の切り替えを実装する。

想定する武器は、マシンガン・ミサイル・爆弾・ドリルなど。

重要なのは、以下の2種類の使い方に対応すること。

- 同じキャラ画像のまま武器だけ変更する。
- 武器を変更すると同時にキャラ画像も変更する。

武器の種類が増えても、専用の管理画面・タブ・重複する設定項目を増やさない。

**すべて既存の「攻撃設定」で管理する。**

## 3. 武器切り替え

既存の各攻撃に「武器切替キー」の設定を追加する。

### 切替キーを設定した場合

同じ切替キーを持つ武器は排他制御する。

例:

| 武器 | 切替キー | 発動キー |
|---|---|---|
| マシンガン | Q | X |
| ミサイル | Q | X |
| ドリル | Q | X |
| 爆弾 | 未設定 | C |

Qを押すたびに、

マシンガン → ミサイル → ドリル → マシンガン…

と登録順に循環切り替えする。

- Qを押しただけでは攻撃しない。
- Xを押すと、選択中の武器だけが発動する。
- 同一切替キーに属する武器は同時に使用可能にならない。
- 異なる切替キーのグループは、それぞれ独立して管理する。
- キーを押しっぱなしにしただけで連続切り替えされないようにする。

### 切替キーを設定しない場合

**発動キーを優先する。**

例:爆弾の切替キーが未設定で、発動キーがCなら、Cを押すだけで爆弾攻撃が発動する。

- 武器切り替え操作を要求しない。
- 従来の複数攻撃の直接発動を維持する。
- 切替キー未設定の攻撃は、排他グループに含めない。
- 既存の発動キー設定や操作を壊さない。

## 4. 武器とキャラ画像の切り替え

各攻撃設定内で、武器に対応したアニメーションを管理する。

v89で配置した以下の構成を利用する。

- 攻撃アニメーション
- 移動アニメーション
  - 停止
  - 移動
  - ジャンプ
  - その他、既存の移動系アニメーション

武器切り替え時は、必要に応じてキャラの移動アニメーションも切り替わる。

同じキャラのまま武器だけ変更したい場合も対応すること。

現状のv89では、移動アニメーションを攻撃設定内に移動しただけで、内部データは共通管理のままである。この部分を実際に武器別に管理・適用できるようにする。

ただし、共通画像を使いたい武器のために、同じ画像を何度も登録する必要がない構造とする。

プレイヤーの位置・HPなどは、武器を変更しても維持する。

## 5. 「詳細設定」ウィンドウの追加

既存の攻撃設定にある、ダメージから下の数値パラメータを別ウィンドウへ移動する。

**ウィンドウ名称は「詳細設定」。**

「数値設定」という名称にはしないこと。

敵オブジェの「行動設定」ウィンドウのUIを参考にする。

### 表示仕様

- ウィンドウ形式(ダイアログ)
- パラメータは3列に配置
- アイコン不要
- 無駄な説明文や余白を増やさない
- 攻撃方式に対応する設定項目を表示
- 数値設定を元の画面と二重に配置しない

### 対象項目

既存の攻撃設定に存在する数値パラメータを移動する。

例:

- ダメージ
- 攻撃間隔
- 攻撃範囲
- 判定持続時間
- 攻撃中の移動距離・速度
- ウェイ数
- 拡散角度
- 弾速
- 弾の寿命
- 弾の幅・高さ

実際のv89に存在する項目を確認し、漏れなく移すこと。

**移動対象は攻撃の数値パラメータのみ。**

攻撃アニメーション・移動アニメーション・弾画像・画像編集機能は、別ウィンドウに移動しない。アニメーション編集に付随するFPSなどの設定も、従来のアニメーション編集側に残す。

## 6. 弾の大きさ・色の変更

プレイヤーの弾設定を、敵オブジェの弾設定と統一する。

- 弾の色:カラーピッカー
- W:幅(px)
- H:高さ(px)

従来の単一の「弾の大きさ(px)」は廃止し、W・Hの独立設定にする。

W・Hは「詳細設定」ウィンドウに配置する。

色は数値パラメータではないため、既存の攻撃設定側に置く。

弾の色・W・Hが実際のテストプレイに反映されること。描画だけでなく当たり判定や保存・読込も整合させる。

既存データに単一の弾サイズしかない場合も、読み込み時にW・Hへ適切に引き継ぐこと。

## 7. UI構造

既存の「攻撃設定」を中心に、必要最小限の変更だけを行う。

構成の目安:

```text
攻撃設定
 ├ 攻撃1
 │  ├ 攻撃名
 │  ├ 発動キー
 │  ├ 武器切替キー
 │  ├ 攻撃方式
 │  ├ 詳細設定[開く]
 │  ├ 攻撃アニメーション
 │  ├ 移動アニメーション
 │  └ 弾画像・アニメーション
 │
 ├ 攻撃2
 │  └ 同じ構成
 │
 └ 攻撃追加
```

既存の攻撃設定画面を流用し、不要な独立パネル・専用武器一覧・キャラ管理タブなどを追加しない。

## 8. 実装上の注意

- v89の既存機能を削除しない。
- 既存の保存データとの互換性を維持する。
- 攻撃設定のデータとアニメーションの対応関係を壊さない。
- 武器切り替え時に別武器の攻撃設定が混ざらないようにする。
- キー競合、武器切り替え中の攻撃、攻撃アニメーション再生中の切り替えも検証する。
- 攻撃が複数ある場合の保存・読込・再編集を検証する。
- 新しい管理機構を作る前に、既存の `playerAttacks` とアニメーション管理処理を最大限流用する。
- UI配置だけでなく、ゲーム実行時の動作まで実装すること。
- 余計な機能追加や大規模なUI再設計をしないこと。

## 9. 完了条件

最低限、以下をテストすること。

1. 同一Qキーで登録した3種類の武器が循環切り替えできる。
2. Xキーで選択中の武器だけが発動する。
3. 切替キー未設定の攻撃が発動キーで直接使える。
4. 武器切り替えに合わせて、設定したキャラ画像も切り替わる。
5. 同じキャラ画像を共有する武器も正常に動作する。
6. 詳細設定ウィンドウの3列配置と各設定値が正常に動作する。
7. 弾の色・W・Hがテストプレイへ反映される。
8. 既存プロジェクトの保存・読込に問題がない。
9. JavaScriptエラーが発生しない。

## 10. 納品

改修後はv90として、日付・バージョン付きのHTML単体ファイルで保存する。

コメント