96 lines
7.4 KiB
Markdown
96 lines
7.4 KiB
Markdown
# 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 枚を渡してフラグを立てます。以降は、代わりに開いた宝箱が表示されます。
|
||
|
||

|
||
|
||

|
||
|
||

|
||
|
||
```json
|
||
{ "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" }
|
||
```
|
||
|
||
```scenario
|
||
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` のいずれかと戦います。
|
||
|
||
```json
|
||
"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 がデモの長老に新しい会話を与えているのはこの仕組みです。
|
||
|
||
## シナリオアクション
|
||
|
||
```scenario
|
||
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` が必要です。
|