Files
mod_rpg/docs/ja.md
T

96 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# RPG World — タイルマップを歩き、話し、開け、戦う
RPG World は、ゲームをクラシックな 2D RPG の趣のあるタイルマップ式 RPG に変えます。キーボードでマス目状のマップを歩き、人と話し、宝箱を開け、ドアをくぐり、モンスターと戦う——そして戦いのあとは元の場所へ戻ります。マップはゲームのごく普通のシーンなので、会話ウィンドウもシナリオもセーブも音楽も時間の流れも、ビジュアルノベルと同じようにマップ上で働きます。
**RPG Plus** の村、森、砂漠はこの仕組みで動いています。マップや登場人物そのものは RPG Demo のようなコンテンツ Mod が担い、この Mod がルールを提供します。
![RPG Plus で村を探索したところ。左上にマップ名、右上にツールバー、左下に操作ヒント。](assets/village.jpg)
## マップでの遊び方
- **移動**は WASD か矢印キー。**Shift** を押している間は走ります。
- **操作**は **E** または **F**。向いている人に話しかける、宝箱を開ける、看板を読む。
- **ドアやマップの端に歩いて乗ると**、次のマップへ移動します。
- 場所によっては、歩いているだけで**ランダムエンカウント**が起こります(森など)。
- 戦闘が終わると、同じマップの同じマスへ戻ります。
- ゲームは立っている位置をセーブします。ロードすればそこへ戻れます。
操作できるマスは枠で囲まれ、左下のヒントが **E / F · Interact** に変わります。
## 例:開いたままの宝箱
長老の家の宝箱は、同じマスに置かれた 2 つのイベントです。ストーリーフラグ `rpg_house_chest` が立っていない間は閉じた宝箱が表示され、そのシナリオは硬貨 3 枚を渡してフラグを立てます。以降は、代わりに開いた宝箱が表示されます。
![変更前:正午の長老の家。閉じた宝箱のそばに主人公が立っている。](assets/chest-before.jpg)
![宝箱の中身のテキスト:古い靴下、「さわるな」というメモ、そしてその下の硬貨 3 枚。](assets/chest-text.jpg)
![変更後:同じマスには開いた宝箱が表示され、インタラクションマーカーの枠が付く。左下のヒントは「E / F · Interact」。](assets/chest-after.jpg)
```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` が必要です。