# 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単体ファイルで保存する。
コメント