Level Craft
⚔️
← Back to Blog

⚔️ Edeny Arcadia 誕生記
「金の亡者が気づいたら英雄になってた」ショートRPGを3フェーズで作り上げた日

MISSION

🎯 今日のミッション

のっぱらに楽園を作る神様の真似事」——EdenCodeのテーマをそのままショートRPGで体験させる。プレイ時間は5〜10分。難しくしない。むしろ死なない設計。ゆるくて愛嬌があって、最後はちょっといい話になってる、そんなゲームを1ファイルHTMLで作り切る。

主役は エデニー(Edeny)——自称勇者・金の亡者。相棒は クラナ(Clana)——AIエルフ・ツッコミ専門。なんだかんだ二人でボスを倒して、気づいたら英雄になってた、というコンセプト。

🏷️ ゲーム名 「Edeny Arcadia」〜のっぱらに楽園を〜

STEPS

🛠️ 3フェーズでやったこと

PHASE 1 — 骨格

タイルマップ・カメラ・移動・バトル・スクリプトシステム

20×24タイル(TS=32px)のマップをゼロから設計。カメラはキャンバス中心にプレイヤーを追いかけて、マップ端でクランプ。移動はLERP(係数0.14)でぬるぬる滑らか。壁衝突はT.WALLタイルチェック。

統一スクリプトシステム runScript(lines, onDone) を最初に設計したのが最大の正解。宝箱・ツボ・看板・NPC・バトル後——全部同じ仕組みでセリフを流せる。

// 統一スクリプトシステム — 全インタラクションはこれを通る function runScript(lines, onDone) { script = lines; scriptIdx = 0; scriptProg = 0; scriptDone = onDone || null; } // ターン制バトル: player_select → player_attack → enemy_attack → victory_dialog // 死なない設計: Math.max(1, playerHp - dmg)
PHASE 2 — 味付け

Web Audio BGM・SE・パーティクル・状況対応NPCセリフ

BGMはライブラリゼロ。Web Audio APIで音符データ配列をルックアヘッドスケジューラ(80msインターバル・0.3s先読み)で鳴らす自作シンセ。SE(攻撃・魔法・宝箱・撃破など)は全部 beep(freq, dur, vol, type) 1関数で完結。

パーティクルはワールド座標系で管理。重力あり・ライフ減衰あり。NPCのセリフはボス出現前・バトル中・撃破後で自動的に変わる getLines() 設計。

PHASE 3 — 磨く

画面シェイク・歩行アニメ・タイトル画面フル刷新

ヒット時・魔法時・撃破時に画面シェイク。指数関数減衰(0.78倍)で自然なゆれ。歩行はsin波アニメ——足と腕が逆位相でスイングする。

タイトル画面はゼロから描き直し。ユートピア都市シルエット・140個の星・流れ星・エデニーとクラナのキャライラスト。全部 Canvas 2D だけで描いた。

// 画面シェイク — 指数関数減衰 let shakeAmt = 0; function shake(amt) { shakeAmt = Math.max(shakeAmt, amt); } function updateShake() { shakeAmt *= 0.78; if (shakeAmt < 0.4) shakeAmt = 0; } // 強さ: 攻撃=4, 魔法=6, 敵ヒット=8, 撃破=14
BUGS

🐛 ハマったバグ集

BUG ①
勝利ダイアログ後にゲームが完全停止する
endBattle() 内で bt.victoryIdx が配列長を超え TypeError → ゲームループが完全停止。
修正: if (bt.victoryIdx >= bt.victoryLines.length) return; をフェーズ冒頭に追加。
BUG ②
NPCがツボへのアクセスを塞いでいた
村人Bがツボの隣に立っており古い判定が先に発火。修正: 「プレイヤーの向いている方向にいるNPCだけ」に変更。foff = [[0,-1],[0,1],[-1,0],[1,0]][player.dir]
RENAME
「EDEN QUEST」は商標上使えないことが判明
同名の商標が存在するため急遽リネーム。EDEN QUEST → EDEN ROAD → Edeny Arcadia に落ち着いた。キャラ名も CLONA → Clana/クラナ に統一。
NEXT

📋 次にやること

SUMMARY

Edeny Arcadia」——金の亡者エデニーが気づいたら英雄になってた短編RPGを、HTML5 Canvas 1ファイルで3フェーズかけて完成させた。骨格→味付け→磨くの順で作ったのでバグが最小限で済んだ。特に「runScript() で全セリフ統一」「Web Audioルックアヘッド」は今後も使い回せる強力な設計。タイトルのユートピア都市シルエットは、EdenCodeのテーマ「のっぱらから楽園を作る神様の真似事」そのものが絵になった瞬間だった。🏛️⚔️