開発記:Robloxゲーム「灯火の島」ができるまで

なぜRobloxで作り直したのか
「灯火の島」は、もともとブラウザで遊ぶひとり用の3D探索ゲームとして作っていたものです。日没までに7つの精霊ランタンを灯して、最後に祠のビーコンに火をつける。このルールを気に入っていたので、「これ、友達と手分けして遊べたらもっと楽しいのでは?」と思ったのがきっかけでした。
友達と同じ島に集まるなら、サーバーもアカウントもフレンド機能もそろっているRobloxがいちばん近道です。そこで、ルールはそのままに、Roblox向けの協力ゲームとして作り直しました。
島は「地形ごと」コードで組み立てた
Roblox Studioで手で地形を盛っていくこともできますが、今回はサーバーが起動したときに島をまるごと組み立てる方式にしました。島の形は、中心からの距離でなだらかに海へ落ちていく高さに、ノイズで起伏を足したもの。北側には尾根を一本通して、どこから見ても「あの山の向こう側」と言える目印にしています。
そのうえで、
- 中央の祠のまわりは平らな台地に
- 7つのランタンの足もとも小さく平らにならす
- 祠から各ランタンへ向かう道だけ土の色にする
という3つの「ならし」を入れました。特に土の道は効果が大きくて、迷ったら道をたどれば次のランタンに着きます。石灯籠、鳥居、木、海辺の小屋、桟橋も、全部Robloxの基本パーツの組み合わせです。

コードはRojoでファイルとして管理していて、島の形やランタンの位置を決める部分はRobloxの外でもテストできるように分けてあります。「7つのランタンが全部陸の上にあるか」「お互い離れすぎず近すぎないか」をすぐ確かめられるので、島の形をいじるのが怖くなくなりました。
鬼火は「少しだけ遅い」
鬼火(青い光の玉)は、近くにいるプレイヤーを追いかけてきます。いちばん悩んだのが速さでした。速すぎると理不尽、遅すぎると緊張感がない。
最終的には「プレイヤーの歩く速さよりほんの少し遅い」に落ち着きました。まっすぐ逃げれば振り切れるけれど、ランタンを灯している1秒ちょっとの間に追いつかれる、というくらいです。日が傾くほど少しずつ速くなり、数も増えます。人数が多いときは鬼火も多めに出るので、ひとりでも大人数でも同じくらいの忙しさになります。
もうひとつ大事なのが「灯したランタンのまわりには入れない」というルール。鬼火から逃げるときの行き先がはっきりするので、灯すほど島が自分たちの陣地になっていく感覚が出ました。

タイマーの代わりに、空を暮れさせる
制限時間は約4分。でも画面の数字をにらみながら走るのは味気ないので、ゲーム内の時刻そのものを動かすことにしました。昼過ぎから始まって、時間がたつほど太陽が傾き、夕焼けになり、夜になったら時間切れです。画面下にも「日没まで」の残り時間は出していますが、空の色だけで「そろそろまずい」がわかるようにしています。
島に浮かぶオレンジの「残り火」を拾うと、日没が12秒延びます。寄り道するか、まっすぐランタンへ向かうか、ちょっとした判断ポイントです。

確認のしかた
協力ゲームは、ひとりで遊んでいるだけでは確かめきれないところがあります。そこで、ラウンドの始まりから「ランタンを灯す → 鬼火に触れると灯火が減る → 残り火で時間が延びる → 7つそろうまでビーコンは点火できない → 点火でクリア → 次のラウンドで全部元に戻る」までを、変更のたびに同じ手順で確認できるテストを用意しました。今のバージョンは33項目すべて通っています。
スマホでも遊びやすいように、画面の表示はすべて画面下の中央にまとめました。右上はRobloxのプレイヤー一覧、左下と右下はスマホの移動スティックとジャンプボタンが来る場所なので、そこを避けています。

これから
次にやりたいのは、クリアタイムの記録とランキング、霧や雪の別の島、そして効果音とBGMです(どれもまだ予定です)。遊んでみた感想や「こうしてほしい」は、X(@kiritolab_)に気軽に送ってください。
Dev log: making the Roblox game Lantern Isle

Lantern Isle started as a single-player 3D exploration game in the browser: light seven Spirit Lanterns before sunset, then ignite the beacon at the shrine. I wanted to play it with friends, so I rebuilt it as a co-op game on Roblox, which already has servers, accounts and friends built in.
The island is built in code
When a server starts it builds the whole island: a height field that slopes down to the sea, noise for hills, a ridge in the north as a landmark, a flat plateau for the shrine, flat pads for the lanterns and dirt paths from the shrine to every lantern. Lanterns, the torii, trees, cottages and the pier are all made from basic parts. The island-shape code is kept separate so it can be tested outside Roblox.
Wisps are just a little slower than you
Wisps chase nearby players. I set them slightly slower than a walking player: you can outrun them in a straight line, but they catch up while you're holding the button to light a lantern. They grow faster and more numerous towards sunset, and scale with the number of players. Lit lanterns are safe zones they can't enter.
The sky is the timer
A round lasts about four minutes, and the in-game clock moves from afternoon to sunset to night. Orange embers push sunset back by 12 seconds.
Checking a round
A repeatable test walks through a whole round — lighting, wisp hits, embers, the locked beacon, winning and resetting — and all 33 checks pass in this version. The HUD sits at the bottom centre so it doesn't collide with Roblox's player list or the touch controls.
Next
Planned: clear-time records and a leaderboard, misty and snowy islands, and sound and music. Feedback is welcome on X (@kiritolab_).