7.4 KiB
7.4 KiB
RPG World — タイルマップを歩き、話し、開け、戦う
RPG World は、ゲームをクラシックな 2D RPG の趣のあるタイルマップ式 RPG に変えます。キーボードでマス目状のマップを歩き、人と話し、宝箱を開け、ドアをくぐり、モンスターと戦う——そして戦いのあとは元の場所へ戻ります。マップはゲームのごく普通のシーンなので、会話ウィンドウもシナリオもセーブも音楽も時間の流れも、ビジュアルノベルと同じようにマップ上で働きます。
RPG Plus の村、森、砂漠はこの仕組みで動いています。マップや登場人物そのものは RPG Demo のようなコンテンツ Mod が担い、この Mod がルールを提供します。
マップでの遊び方
- 移動は WASD か矢印キー。Shift を押している間は走ります。
- 操作は E または F。向いている人に話しかける、宝箱を開ける、看板を読む。
- ドアやマップの端に歩いて乗ると、次のマップへ移動します。
- 場所によっては、歩いているだけでランダムエンカウントが起こります(森など)。
- 戦闘が終わると、同じマップの同じマスへ戻ります。
- ゲームは立っている位置をセーブします。ロードすればそこへ戻れます。
操作できるマスは枠で囲まれ、左下のヒントが E / F · Interact に変わります。
例:開いたままの宝箱
長老の家の宝箱は、同じマスに置かれた 2 つのイベントです。ストーリーフラグ rpg_house_chest が立っていない間は閉じた宝箱が表示され、そのシナリオは硬貨 3 枚を渡してフラグを立てます。以降は、代わりに開いた宝箱が表示されます。
{ "Id": "chest", "X": 9, "Y": 7, "Tile": 14,
"Scenario": "rpg_demo/events/house_chest",
"Condition": "rpg_house_chest != 1" },
{ "Id": "chest_open", "X": 9, "Y": 7, "Tile": 15,
"Scenario": "rpg_demo/events/chest_empty",
"Condition": "rpg_house_chest == 1" }
ptext "宝箱の中には古い靴下と「さわるな」と書かれたメモ。もう遅い。靴下の下には硬貨が 3 枚。" key=rpg_demo/chest/house
action item.add id=money/coin count=3
flag rpg_house_chest 1
end
作者向け:マップ
マップは Mod の maps/ フォルダーにある JSON ファイルです。戦闘の背景と環境音のために、scenes/ にも同名のシーンを置きます。
- 描画レイヤー 3 枚。それぞれタイル番号の行のリスト(
.は空)です。Backは地面・床・水、Mainはキャラクターと同じ高さの物体(壁、幹、柵)、Frontはキャラクターの上に描かれるもの(樹冠、軒、アーチ)。 - 衝突(コリジョン) — 必要な場所でタイル自身の通行可否を上書きする行レイヤー。崖際の見えない壁や生け垣の抜け道に使います。
- タイルセット — タイルアトラスと、各タイルの属性(solid かどうか、地面の種類、物体)。
- Spawn — 新しく来た者が出現する位置。Zoom。屋内用の任意の Ambient カラー(なければ時間の流れがマップを照らします)。そして Atmosphere(
woodlandは落ち葉・蛍・水のさざ波を追加)。 - Encounters — ランダムエンカウント。平均して
Steps歩ごとに 1 回、Groupsのいずれかと戦います。
"Encounters": { "Steps": 48, "Groups": ["rpg_slime", "rpg_slime,rpg_slime"] }
作者向け:イベント
イベントは、どの Mod の map_events/<マップ id>/*.json にも置けます。イベントは見た目と効果を独立して選べます。
- 見た目:キャラクターの
Sprite、アトラスのTile1 枚、地面に置いたアイテムのIcon、あるいは何もなし(見えないトリガー)。 - 効果:このマップか別のマップのマスへの
Teleport、またはScenarioとそこに書ける任意のCommands——action rpg.battle、フラグ、クエストを含むシナリオ言語のすべて。 Trigger:Action(正面から E/F)かTouch(乗る)。Solid: 通行を妨げるか(描画されるイベントは既定で妨げます)。Condition: 条件を満たさない間、イベントを隠します。Pages: 条件つきの別の見た目と効果。条件を満たす最後のページが使われます。Route: 自律的な動き。{"Steps": ["left", "wait", "right"], "Every": 0.8}のように、up/down/left/right、random、toward/away(プレイヤーに向かって/離れて)、wait、face_…が使えます。Light: イベントのまわりの光。{"Radius": 3, "Color": "#ffd8a0"}。夕暮れと夜に見えます。
他の Mod のマップに追加・変更を加える。 イベントファイルは読み込み順にマージされます。新しい Id はそのマップへイベントを追加し、所有者に依存する Mod が同じ Id を置けば置き換わります。RPG Plus がデモの長老に新しい会話を与えているのはこの仕組みです。
シナリオアクション
action rpg.battle enemies=rpg_wolf,rpg_slime win_flag=rpg_wolf_dead
action rpg.teleport map=rpg_forest x=1 y=8 dir=right
rpg.battleはゲームのバトルコアで戦闘を始め、同じマスへ戻します。勝つとwin_flagが 1 になるので、そのフラグを条件で見ているマップ上のモンスターは消えます。このアクションのあとでシナリオを終えてください。rpg.teleportはプレイヤーを、このマップまたは別のマップのマスへ移動させます。
ゲーム設定
- 外見(
rpg.player_charset)— マップ上で主人公に使うスプライト。ゲームのチャーセットから選びます。 - マップ投影(
tile.renderer)— トップダウンかアイソメトリック。Tile Rendering を参照。
うまくいかないとき
- 人物や宝箱が反応しない。 正面から E か F を押してください。
Touchイベントは乗ったときにしか反応しません。 - モンスターや宝箱が元に戻る。 その
Conditionは、シナリオやwin_flagが立てるフラグを見ている必要があります。 - 開けて見える場所を歩けない。 そのマスは solid なタイルかマップの衝突レイヤーに塞がれています。
- 戦闘の背景がない。
scenes/<map>.jsonにあるマップのシーンにdefaultBackgroundが必要です。



