DESIGN DOCUMENT

Aether Frame ゲーム設計書

1. 技術スタック

カテゴリ 技術
フロントエンドHTML5 Canvas + Vanilla JavaScript
スタイリングCSS3(カスタムプロパティ、Grid、Flexbox)
バックエンドNode.js + Express
リアルタイム通信Socket.IO
ホスティングRailway
画像生成Gemini API (gemini-3-pro-image-preview)
効果音生成ElevenLabs API

2. アーキテクチャ概要

  • SPAアーキテクチャ(シングルページアプリ)
  • クライアントサイドにゲームロジック配置(サーバーはリレー)
  • Canvas APIでゲームボード描画
  • Screen切替方式のUI管理

通信フロー

ブラウザ (index.html) Express静的配信 Socket.IOリレー 相手ブラウザ

3. ファイル構造

tactical-commander/
├── package.json
├── .env / .env.example
├── spec.md
│
├── public/                    (フロントエンド)
│   ├── index.html             (メインHTML - 全画面定義)
│   ├── rules.html             (ルール説明)
│   ├── design.html            (設計書)
│   ├── proposal.html          (企画書)
│   ├── css/
│   │   ├── style.css          (ゲームUI全スタイル)
│   │   └── docs.css           (ドキュメントページスタイル)
│   ├── js/
│   │   ├── main.js            (エントリポイント - 138行)
│   │   ├── gameClient.js      (ゲームロジック - 1826行)
│   │   ├── renderer.js        (Canvas描画 - 448行)
│   │   ├── ui.js              (UI管理 - 759行)
│   │   ├── npcAI.js           (NPC AI - 626行)
│   │   ├── assetManager.js    (アセット管理 - 186行)
│   │   ├── input.js           (入力処理 - 31行)
│   │   ├── network.js         (ネットワーク - 7行)
│   │   └── data/
│   │       ├── units.js       (ユニット定義 - 58行)
│   │       ├── weapons.js     (武装定義 - 84行)
│   │       ├── abilities.js   (アビリティ定義 - 57行)
│   │       └── commanders.js  (指揮官定義 - 79行)
│   └── assets/
│       ├── units/             (ユニット画像 x5)
│       ├── weapons/           (武装画像 x8)
│       ├── abilities/         (アビリティ画像 x6)
│       ├── ui/                (UI素材 x2)
│       └── sfx/               (効果音 x29)
│
├── server/                    (バックエンド)
│   ├── server.js              (Express+Socket.IO - 235行)
│   └── game/
│       └── MapData.js         (マップデータ - 1134行)
│
└── scripts/                   (ビルドツール)
    ├── generate_images.py     (画像生成)
    └── generate_sounds.py     (効果音生成)

4. JSモジュール一覧

ファイル 行数 役割
gameClient.js1826ゲーム状態管理、ターン処理、戦闘計算、オンライン同期
ui.js759DOM操作、生産モーダル、パネル更新、ログ管理
npcAI.js626NPC敵AIの意思決定(優先度ベース)
renderer.js448Canvas描画(マップ、ユニット、エフェクト)
assetManager.js186画像・効果音プリロード、再生管理
main.js138初期化、画面遷移、Socket.IOイベント接続
input.js31マウス入力のCanvas座標変換
network.js7Socket.IO接続ラッパー
合計4021

5. データ定義テーブル

ユニット定義

ID 名前 HP AT DEF AGI コスト 移動力
scoutスカウト320824
soldierソルジャー531533
heavyGuardヘヴィガード823533
sniperスナイパー340442
engineerエンジニア411633

武装定義

ID 名前 射程 AT修正 コスト 特殊効果
assaultRifleアサルトライフル2+00なし
shotgunショットガン1+21なし
sniperRifleスナイパーライフル4+12noAttackAfterMove
rocketLauncherロケットランチャー3+23splash(隣接4方向1ダメ)
machineGunマシンガン2-12doubleAttack
empBlasterEMPブラスター2+02empSlow(AGI-3)
repairToolリペアツール1+01repair(HP2回復)
plasmaSwordプラズマソード1+32defPierce(DEF1無視)

アビリティ定義

ID 名前 コスト タイプ 効果
overdriveオーバードライブ1active1回、移動力+2
shieldWallシールドウォール2passive初回被弾-2
stealthステルス2passive2ターン射程3+対象外
miningBoost採掘ブースト1passive採掘AP+1
counterカウンター1passive射程1被弾時反撃
blitz電撃戦2passive攻撃後1マス移動

指揮官定義

ID 名前 肩書き パッシブ スキル
valkyrieヴァルキリー突撃司令官戦果報酬(撃破時AP)一斉射撃(全軍AT+2)
ironwallアイアンウォール鉄壁司令官鉄壁陣形(隣接DEF+1)緊急修復(全軍HP3回復)
shadowシャドウ電撃司令官電光石火(移動+1)奇襲作戦(再配置)
technomancerテクノマンサー補給司令官効率改善(AP+1/ラウンド)緊急生産(コスト半額)

6. 画像アセットギャラリー

ユニット画像(5枚)

武装画像(8枚)

アビリティ画像(6枚)

UI画像(2枚)

7. 効果音アセット一覧

攻撃(7種)

ファイル名説明
attack_rifleライフル攻撃音
attack_shotgunショットガン攻撃音
attack_sniperスナイパー攻撃音
attack_rocketロケット攻撃音
attack_machinegunマシンガン攻撃音
attack_empEMP攻撃音
attack_plasmaプラズマ攻撃音

移動(3種)

ファイル名説明
unit_moveユニット移動音
unit_deployユニット配置音
unit_produceユニット生産音

採掘・修理(4種)

ファイル名説明
mining採掘音
repair修理音
heal回復音
wait待機音

進行(5種)

ファイル名説明
game_startゲーム開始音
round_startラウンド開始音
enemy_turn敵ターン開始音
phase_production生産フェーズ音
phase_action行動フェーズ音

勝敗(2種)

ファイル名説明
victory勝利音
defeat敗北音

UI(6種)

ファイル名説明
ui_clickクリック音
ui_hoverホバー音
ui_confirm確定音
ui_cancelキャンセル音
ui_errorエラー音
ui_menu_openメニュー開閉音

特殊(2種)

ファイル名説明
skill_activateスキル発動音
unit_destroyユニット撃破音

8. オンライン通信プロトコル

クライアント → サーバー

イベント名 データ 説明
createRoom-部屋作成
joinRoom{ roomId }部屋参加
leaveRoom-部屋退出
commanderPick{ commanderId }指揮官選択
gameStateSync{ state }ゲーム状態送信
gameLog{ message, type }ログ送信

サーバー → クライアント

イベント名 データ 説明
opponentJoined-対戦相手入室
gameStart{ p1Commander, p2Commander }ゲーム開始
stateSync{ state }状態同期受信
remoteLog{ message, type }ログ受信
opponentLeft-対戦相手退出

9. NPC AI ロジック概要

優先度ベースの意思決定フロー

  1. 攻撃可能な敵がいれば攻撃(HP最小の敵を優先)
  2. 資源マス上なら採掘
  3. 攻撃不可なら敵方向へ移動
  4. 移動不可なら待機

NPC戦略

項目内容
指揮官選択ランダム
生産戦略コスト効率重視でユニットを生産