Files
mod_rpg/docs/ja.md
T

7.4 KiB
Raw Blame History

RPG World — タイルマップを歩き、話し、開け、戦う

RPG World は、ゲームをクラシックな 2D RPG の趣のあるタイルマップ式 RPG に変えます。キーボードでマス目状のマップを歩き、人と話し、宝箱を開け、ドアをくぐり、モンスターと戦う——そして戦いのあとは元の場所へ戻ります。マップはゲームのごく普通のシーンなので、会話ウィンドウもシナリオもセーブも音楽も時間の流れも、ビジュアルノベルと同じようにマップ上で働きます。

RPG Plus の村、森、砂漠はこの仕組みで動いています。マップや登場人物そのものは RPG Demo のようなコンテンツ Mod が担い、この Mod がルールを提供します。

RPG Plus で村を探索したところ。左上にマップ名、右上にツールバー、左下に操作ヒント。

マップでの遊び方

  • 移動は WASD か矢印キー。Shift を押している間は走ります。
  • 操作は E または F。向いている人に話しかける、宝箱を開ける、看板を読む。
  • ドアやマップの端に歩いて乗ると、次のマップへ移動します。
  • 場所によっては、歩いているだけでランダムエンカウントが起こります(森など)。
  • 戦闘が終わると、同じマップの同じマスへ戻ります。
  • ゲームは立っている位置をセーブします。ロードすればそこへ戻れます。

操作できるマスは枠で囲まれ、左下のヒントが E / F · Interact に変わります。

例:開いたままの宝箱

長老の家の宝箱は、同じマスに置かれた 2 つのイベントです。ストーリーフラグ rpg_house_chest が立っていない間は閉じた宝箱が表示され、そのシナリオは硬貨 3 枚を渡してフラグを立てます。以降は、代わりに開いた宝箱が表示されます。

変更前:正午の長老の家。閉じた宝箱のそばに主人公が立っている。

宝箱の中身のテキスト:古い靴下、「さわるな」というメモ、そしてその下の硬貨 3 枚。

変更後:同じマスには開いた宝箱が表示され、インタラクションマーカーの枠が付く。左下のヒントは「E / F · Interact」。

{ "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、アトラスの Tile 1 枚、地面に置いたアイテムの 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 を参照。

うまくいかないとき

  1. 人物や宝箱が反応しない。 正面から E か F を押してください。Touch イベントは乗ったときにしか反応しません。
  2. モンスターや宝箱が元に戻る。 その Condition は、シナリオや win_flag が立てるフラグを見ている必要があります。
  3. 開けて見える場所を歩けない。 そのマスは solid なタイルかマップの衝突レイヤーに塞がれています。
  4. 戦闘の背景がない。 scenes/<map>.json にあるマップのシーンに defaultBackground が必要です。