Compare commits

...
7 Commits
32 changed files with 1428 additions and 524 deletions

No files matched your search

+38
View File
@@ -0,0 +1,38 @@
# Godot 4.x
.godot/
.idea/
sdk/
bin/
obj/
#ai
.omo/
.opencode/
gen/
obj/
bin/
art_sources/
*.tres~
*.tscn~
# GDScript LSP
.godot/
# Export
*.exe
*.dmg
*.apk
*.aab
*.pck
*.zip
*.log
# OS
.DS_Store
Thumbs.db
# Editor
*.import
*.godot.uid
Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

+92
View File
@@ -0,0 +1,92 @@
# RPG Demo — a small tile-map world
RPG Demo is a short, complete tile-map adventure: a village by the Grey Forest, the elder's house and the forest with a wolf living at the cave. You walk with the keyboard, talk to people, open chests, gather things in the forest, sell them to the merchant and fight. It is made only of data files and scenarios — no code — so it doubles as a working example of how a tile-map game is put together.
The demo has no game card of its own: it is the world of the **RPG Plus** game, which includes this mod and builds on it. Start it from **Play → RPG Plus → New game**: after the short crossroads prologue of RPG Plus you arrive in this village. The screenshots below come from RPG Plus, so some people and goods you see there are added by that game.
![The village by the Grey Forest at night: houses, a cobbled square with lamps, villagers, a pond and the hero on the path.](assets/village.jpg)
## How to play
- **Walk** with WASD or the arrow keys, **run** with Shift.
- **Talk, open, read** with E or F while facing a person or an object.
- Walking onto a doorway or the edge of a path takes you to the next map.
The story: the elder asks you to drive off the wolf at the cave east of the village. Go past the pond, along the forest path, deal with the slime blocking the way and face the wolf. When it is beaten, the elder thanks you — in his own way.
## What is in the world
- **Three maps.** The village (32×18 tiles), the elder's house and the Grey Forest, all drawn with the village tileset of Village Pack.
- **People.** The elder gives and finishes the quest, villagers chat, a sign names the village; one door is locked.
- **Chests.** A chest in the elder's house and one in the forest; once opened they stay open.
- **Gathering in the forest.** Brushwood, stones and forest mushrooms lie along the paths; each spot can be picked once. A mushroom restores 5 health.
- **The merchant.** Sells the Elixir (restores 20 health) for 10 coins and buys brushwood for 1 coin and stones for 2.
- **Battles.** The slime on the path and the wolf at the cave are visible on the map and start a fight when you talk to them. In the forest, random encounters with one or two slimes happen about every 48 steps.
![The Grey Forest: the path to the cave with the wolf, a chest, stones, mushrooms and the slime on the path.](assets/forest.jpg)
![The merchant's shop: goods on the left, the selected Elixir with its price and the Buy button, your bag on the right. RPG Plus adds more goods to this shop.](assets/shop.jpg)
![A battle against a slime: the hero at the bottom left, the slime at the top, the battle log on the right.](assets/battle.jpg)
## For authors: how it is built
```filestree
rpg_demo_game/
├── maps/ rpg_village.json, rpg_elder_house.json, rpg_forest.json
├── map_events/<map>/events.json people, doors, chests, pickups, monsters
├── scenes/ one scene per map
├── scenarios/rpg_demo/ intro, map entries and events/*.scenario
├── characters/ the hero, the slime and the wolf
├── items/rpg_demo/ brushwood, stones, mushroom, elixir and their icons
├── shops/village_merchant.json
└── locale/ names and scenario translations in seven languages
```
A **map** is a grid of tile numbers in layers over a tileset, with its own name, size and zoom. The forest map also lists its random encounters:
```json
"Encounters": {
"Steps": 48,
"Groups": ["rpg_slime", "rpg_slime,rpg_slime"]
}
```
An **event** is something placed on a tile. A door with `"Trigger": "Touch"` teleports; a monster runs a scenario and disappears once its flag is set:
```json
{
"Id": "wolf_boss",
"X": 25,
"Y": 8,
"Sprite": "village/wolf",
"Dir": "Left",
"Scenario": "rpg_demo/events/wolf_boss",
"Condition": "rpg_wolf_dead != 1"
}
```
The **scenario** says the lines and starts the fight; winning sets the flag:
```scenario
ptext "A wolf sits by the cave. It looks you over the way it looks at the elder's goats." key=rpg_demo/wolf/line1
text "— Grrr." key=rpg_demo/wolf/line2
action rpg.battle enemies=rpg_wolf,rpg_slime win_flag=rpg_wolf_dead
end
```
In the mod's scenario files these lines are written in Russian; the listing shows them in English. Every line has a `key=` with its translation in `locale/scenarios_<lang>.properties`, so the game shows them in your interface language:
```properties
rpg_demo/wolf/line1 = A wolf sits by the cave. It looks you over the way it looks at the elder's goats.
```
Other pieces work the same way: a chest runs `action item.add`, sets a flag and is replaced by an open-chest event with the opposite `Condition`; the merchant runs `action trade.open shop=rpg_demo/village_merchant`; the first visit to the village runs the intro scenario, which puts the hero in the party with `action party.add id=rpg_hero`.
To change the maps and events visually, use the map editor of the RPG editor tools.
## If something goes wrong
1. **A door does nothing.** A `Touch` door works when you step on it; an `Action` one needs E or F while facing it.
2. **A monster or chest came back.** Its `Condition` must test the same flag the scenario sets.
3. **The shop is empty.** The trading mod must be in the game, and the shop id in the scenario must match `shops/village_merchant.json`.
+92
View File
@@ -0,0 +1,92 @@
# RPG Demo — un pequeño mundo de tiles
RPG Demo es una aventura corta y completa sobre un mapa de tiles: una aldea junto al Bosque Gris, la casa del anciano y el bosque, con un lobo viviendo junto a la cueva. Caminas con el teclado, hablas con la gente, abres cofres, recoges cosas en el bosque, se las vendes al mercader y luchas. Está hecho solo de archivos de datos y escenarios — ni una línea de código —, así que sirve de paso como ejemplo funcional de cómo se monta un juego de mapa de tiles.
La demo no tiene tarjeta de juego propia: es el mundo del juego **RPG Plus**, que incluye este mod y construye sobre él. Empiézalo desde **Jugar → RPG Plus → Nueva partida**: tras el breve prólogo del cruce de caminos de RPG Plus llegas a esta aldea. Las capturas de abajo vienen de RPG Plus, así que algunas personas y mercancías que se ven las añade ese juego.
![La aldea junto al Bosque Gris de noche: casas, una plaza adoquinada con farolas, aldeanos, un estanque y el héroe en el camino.](assets/village.jpg)
## Cómo se juega
- **Caminar** con WASD o las flechas, **correr** con Shift.
- **Hablar, abrir, leer** con E o F estando de frente a una persona o un objeto.
- Pisar una puerta o el borde del camino te lleva al siguiente mapa.
La historia: el anciano te pide echar al lobo que vive junto a la cueva al este de la aldea. Pasa el estanque, sigue el sendero del bosque, resuelve el limo que bloquea el paso y enfréntate al lobo. Cuando cae, el anciano te lo agradece — a su manera.
## Qué hay en el mundo
- **Tres mapas.** La aldea (32×18 tiles), la casa del anciano y el Bosque Gris, todos dibujados con el tileset de aldea de Village Pack.
- **Gente.** El anciano da y cierra la misión, los aldeanos charlan, un cartel nombra la aldea; una puerta está cerrada con llave.
- **Cofres.** Uno en la casa del anciano y otro en el bosque; una vez abiertos, siguen abiertos.
- **Recolectar en el bosque.** Por los senderos hay leña, piedras y setas del bosque; cada punto se recoge una sola vez. Una seta restaura 5 de salud.
- **El mercader.** Vende el Elixir (restaura 20 de salud) por 10 monedas y compra leña a 1 moneda y piedras a 2.
- **Combates.** El limo del sendero y el lobo de la cueva se ven en el mapa y empiezan una pelea cuando les hablas. En el bosque, encuentros aleatorios con uno o dos limos ocurren más o menos cada 48 pasos.
![El Bosque Gris: el sendero hacia la cueva del lobo, un cofre, piedras, setas y el limo en el camino.](assets/forest.jpg)
![La tienda del mercader: mercancías a la izquierda, el Elixir seleccionado con su precio y el botón de comprar, tu bolsa a la derecha. RPG Plus añade más mercancías a esta tienda.](assets/shop.jpg)
![Un combate contra un limo: el héroe abajo a la izquierda, el limo arriba, el registro de combate a la derecha.](assets/battle.jpg)
## Para autores: cómo está construido
```filestree
rpg_demo_game/
├── maps/ rpg_village.json, rpg_elder_house.json, rpg_forest.json
├── map_events/<map>/events.json personas, puertas, cofres, objetos recogibles, monstruos
├── scenes/ una escena por mapa
├── scenarios/rpg_demo/ introducción, entradas de mapa y events/*.scenario
├── characters/ el héroe, el limo y el lobo
├── items/rpg_demo/ leña, piedras, seta, elixir y sus iconos
├── shops/village_merchant.json
└── locale/ nombres y traducciones de escenarios en siete idiomas
```
Un **mapa** es una cuadrícula de números de tile en capas sobre un tileset, con su propio nombre, tamaño y zoom. El mapa del bosque también enumera sus encuentros aleatorios:
```json
"Encounters": {
"Steps": 48,
"Groups": ["rpg_slime", "rpg_slime,rpg_slime"]
}
```
Un **evento** es algo colocado sobre un tile. Una puerta con `"Trigger": "Touch"` teletransporta; un monstruo ejecuta un escenario y desaparece cuando su bandera queda activada:
```json
{
"Id": "wolf_boss",
"X": 25,
"Y": 8,
"Sprite": "village/wolf",
"Dir": "Left",
"Scenario": "rpg_demo/events/wolf_boss",
"Condition": "rpg_wolf_dead != 1"
}
```
El **escenario** dice las líneas y empieza la pelea; ganar activa la bandera:
```scenario
ptext "Un lobo está sentado junto a la cueva. Te mira igual que mira a las cabras del anciano." key=rpg_demo/wolf/line1
text "— Grrr." key=rpg_demo/wolf/line2
action rpg.battle enemies=rpg_wolf,rpg_slime win_flag=rpg_wolf_dead
end
```
Las líneas de los escenarios de este mod están escritas en ruso; cada línea lleva un `key=` con su traducción en `locale/scenarios_<lang>.properties`, así el juego las muestra en el idioma de tu interfaz:
```properties
rpg_demo/wolf/line1 = Un lobo está sentado junto a la cueva. Te mira igual que mira a las cabras del anciano.
```
Las demás piezas funcionan igual: un cofre ejecuta `action item.add`, activa una bandera y es sustituido por el evento del cofre abierto con la `Condition` contraria; el mercader ejecuta `action trade.open shop=rpg_demo/village_merchant`; la primera visita a la aldea lanza el escenario de introducción, que mete al héroe en el grupo con `action party.add id=rpg_hero`.
Para cambiar los mapas y eventos visualmente, usa el editor de mapas de las herramientas de edición del RPG.
## Si algo falla
1. **Una puerta no hace nada.** Una puerta `Touch` funciona al pisarla; una `Action` necesita E o F estando de frente.
2. **Un monstruo o un cofre volvió a aparecer.** Su `Condition` debe comprobar la misma bandera que activa el escenario.
3. **La tienda está vacía.** El mod trading debe estar en el juego, y el id de la tienda en el escenario debe coincidir con `shops/village_merchant.json`.
+92
View File
@@ -0,0 +1,92 @@
# RPG Demo — 小さなタイルマップの世界
RPG Demo は短くて完成しているタイルマップの冒険です。灰色の森のそばの村、村長の家、そして洞窟に狼の住む森。キーボードで歩き、人と話し、宝箱を開け、森で物を集め、商人に売り、戦います。データファイルとシナリオだけでできていて、コードは一行もない。だからこそ、タイルマップのゲームがどう組み上がるのかを示す実際に動く例にもなっています。
このデモには自分のゲームカードがありません。**RPG Plus** ゲームの世界であり、RPG Plus がこの MOD を含んで、その上に作り上げています。開始は **プレイ → RPG Plus → ニューゲーム** から。RPG Plus の短い岐路のプロローグを過ぎると、この村に着きます。下のスクリーンショットは RPG Plus で撮ったものなので、そこに見える人や商品の一部はあちらのゲームが追加したものです。
![夜の灰色の森のそばの村:家々、灯りのともった石畳の広場、村人たち、池、そして小道の上の勇者。](assets/village.jpg)
## 遊び方
- **歩く** は WASD か矢印キー、**走る** は Shift。
- **話す・開ける・読む** は、人や物に正面から向かって E か F。
- 扉や小道の端に足を踏み入れると、次のマップへ移ります。
物語:村長は、村の東にある洞窟のそばに住みついた狼を追い払ってほしいと頼んできます。池を過ぎ、森の小道を進み、道をふさぐスライムを片付けて、狼と対面します。狼を倒すと、村長がお礼を言います — その流儀で。
## 世界の中身
- **マップは三つ。** 村(32×18 タイル)、村長の家、灰色の森。すべて Village Pack の村のタイルセットで描かれています。
- **人々。** 村長はクエストを出して終わらせ、村人は雑談し、看板が村の名を告げます。扉が一つ、鍵がかかっています。
- **宝箱。** 村長の家に一つ、森に一つ。開けた宝箱は開いたまま残ります。
- **森で集める。** 小道に沿って柴、石、森のキノコが落ちています。それぞれの場所は一度だけ採取できます。キノコは体力を 5 回復します。
- **商人。** エリクサー(体力を 20 回復)を硬貨 10 枚で売り、柴を 1 枚、石を 2 枚で買います。
- **戦闘。** 小道のスライムと洞窟の狼はマップ上に見えていて、話しかけると戦闘が始まります。森では、スライム一〜二匹とのランダムエンカウンターがおよそ 48 步ごとに起きます。
![灰色の森:狼のいる洞窟への小道、宝箱、石、キノコ、そして道をふさぐスライム。](assets/forest.jpg)
![商人の店:左に商品、選択したエリクサーの価格と購入ボタン、右に自分のインベントリ。RPG Plus はこの店にさらに商品を追加します。](assets/shop.jpg)
![スライムとの戦闘:左下に勇者、上にスライム、右に戦闘ログ。](assets/battle.jpg)
## 作者向け:組み立て方
```filestree
rpg_demo_game/
├── maps/ rpg_village.json、rpg_elder_house.json、rpg_forest.json
├── map_events/<map>/events.json 人、扉、宝箱、拾い物、モンスター
├── scenes/ マップごとに 1 つのシーン
├── scenarios/rpg_demo/ イントロ、マップ入り口、events/*.scenario
├── characters/ 勇者、スライム、狼
├── items/rpg_demo/ 柴、石、キノコ、エリクサーとそのアイコン
├── shops/village_merchant.json
└── locale/ 7 言語の名前とシナリオ翻訳
```
**マップ**はタイルセットの上に層として重なるタイル番号の格子で、名前・サイズ・ズームを持ちます。森のマップはランダムエンカウンターも列挙します:
```json
"Encounters": {
"Steps": 48,
"Groups": ["rpg_slime", "rpg_slime,rpg_slime"]
}
```
**イベント**はタイルの上に置かれた何かです。`"Trigger": "Touch"` の扉はテレポートし、モンスターはシナリオを実行し、自分のフラグが立つと消えます:
```json
{
"Id": "wolf_boss",
"X": 25,
"Y": 8,
"Sprite": "village/wolf",
"Dir": "Left",
"Scenario": "rpg_demo/events/wolf_boss",
"Condition": "rpg_wolf_dead != 1"
}
```
**シナリオ**が台詞を言い、戦闘を始めます。勝つとフラグが立ちます:
```scenario
ptext "洞窟のそばに狼が座っている。村長のヤギを見るような目つきで、こちらを値踏みしている。" key=rpg_demo/wolf/line1
text "グルルル。" key=rpg_demo/wolf/line2
action rpg.battle enemies=rpg_wolf,rpg_slime win_flag=rpg_wolf_dead
end
```
この MOD のシナリオの台詞はロシア語で書かれています。各行には `key=` が付き、翻訳は `locale/scenarios_<lang>.properties` から取られるため、ゲームはインターフェースの言語で表示します:
```properties
rpg_demo/wolf/line1 = 洞窟のそばに狼が座っている。村長のヤギを見るような目つきで、こちらを値踏みしている。
```
他の部品も同じ仕組みです。宝箱は `action item.add` を実行してフラグを立て、逆の `Condition` を持つ「開いた宝箱」イベントに置き換わる。商人は `action trade.open shop=rpg_demo/village_merchant` を実行する。村へ初めて入るとイントロのシナリオが走り、`action party.add id=rpg_hero` で勇者をパーティに入れます。
マップやイベントを目で見て変えるには、RPG エディター道具のマップエディターを使います。
## うまくいかないとき
1. **扉が何もしない。** `Touch` の扉は踏んだ瞬間に働きます。`Action` の扉は正面から E か F が必要です。
2. **モンスターや宝箱が戻ってきた。** その `Condition` は、シナリオが立てるのと同じフラグを見なければなりません。
3. **店が空いている。** trading MOD がゲームに必要です。また、シナリオの店 id は `shops/village_merchant.json` と一致しなければなりません。
+92
View File
@@ -0,0 +1,92 @@
# RPG Demo — 작은 타일맵 세계
RPG Demo는 짧고 완결된 타일맵 모험입니다. 잿빛 숲 옆의 마을, 촌장의 집, 그리고 동굴에 늑대가 사는 숲. 키보드로 걷고, 사람들과 말하고, 상자를 열고, 숲에서 물건을 모아 상인에게 팔고, 싸웁니다. 데이터 파일과 시나리오만으로 이루어져 있고 코드가 한 줄도 없어서, 타일맵 게임이 어떻게 조립되는지 보여 주는 살아 있는 예이기도 합니다.
이 데모에는 자기 게임 카드가 없습니다. **RPG Plus** 게임의 세계이며, RPG Plus가 이 모드를 포함하고 그 위에 지어 올립니다. **플레이 → RPG Plus → 새 게임**에서 시작하세요. RPG Plus의 짧은 갈림길 프롤로그를 지나면 이 마을에 도착합니다. 아래 스크린샷은 RPG Plus에서 찍었으므로, 그 안의 일부 사람과 물품은 그 게임이 추가한 것입니다.
![밤의 잿빛 숲 옆 마을: 집들, 가로등이 켜진 자갈 광장, 마을 사람들, 연못, 그리고 길 위의 영웅.](assets/village.jpg)
## 하는 법
- **걷기**는 WASD 또는 방향키, **달리기**는 Shift.
- 사람이나 물건을 마주 본 채 E 또는 F로 **말하기, 열기, 읽기**.
- 문이나 길 끝에 발을 디디면 다음 맵으로 이동합니다.
이야기: 촌장이 마을 동쪽 동굴 옆에 자리 잡은 늑대를 쫓아 달라고 부탁합니다. 연못을 지나 숲길을 따라가고, 길을 막은 슬라임을 처리하고, 늑대와 마주 섭니다. 늑대가 쓰러지면 촌장이 감사를 전합니다 — 제 방식대로.
## 세계에 있는 것
- **맵 세 개.** 마을(32×18 타일), 촌장의 집, 잿빛 숲. 모두 Village Pack의 마을 타일셋으로 그려져 있습니다.
- **사람들.** 촌장은 퀘스트를 주고 끝내고, 마을 사람들은 수다를 떨고, 표지판이 마을 이름을 알립니다. 문 하나는 잠겨 있습니다.
- **상자.** 촌장의 집에 하나, 숲에 하나. 열린 상자는 열린 채로 남습니다.
- **숲에서 채집.** 오솔길을 따라 땔감, 돌, 숲 버섯이 놓여 있습니다. 각 자리는 한 번만 챙길 수 있습니다. 버섯은 체력을 5 회복합니다.
- **상인.** 엘릭서(체력 20 회복)를 동전 10 닢에 팔고, 땔감을 1 닢에, 돌을 2 닢에 삽니다.
- **전투.** 오솔길의 슬라임과 동굴의 늑대는 맵에 보이며, 말을 걸면 싸움이 시작됩니다. 숲에서는 슬라임 한두 마리와의 랜덤 인카운터가 대략 48 걸음마다 일어납니다.
![잿빛 숲: 늑대가 있는 동굴로 가는 오솔길, 상자, 돌, 버섯, 그리고 길을 막은 슬라임.](assets/forest.jpg)
![상인의 가게: 왼쪽에 물품, 선택한 엘릭서의 가격과 구매 버튼, 오른쪽에 내 가방. RPG Plus는 이 가게에 물품을 더 추가합니다.](assets/shop.jpg)
![슬라임과의 전투: 왼쪽 아래 영웅, 위에 슬라임, 오른쪽에 전투 기록.](assets/battle.jpg)
## 모드 작성자를 위해: 어떻게 지어졌나
```filestree
rpg_demo_game/
├── maps/ rpg_village.json, rpg_elder_house.json, rpg_forest.json
├── map_events/<map>/events.json 사람, 문, 상자, 줍는 아이템, 몬스터
├── scenes/ 맵마다 장면 하나
├── scenarios/rpg_demo/ 인트로, 맵 입구, events/*.scenario
├── characters/ 영웅, 슬라임, 늑대
├── items/rpg_demo/ 땔감, 돌, 버섯, 엘릭서와 그 아이콘
├── shops/village_merchant.json
└── locale/ 7개 언어의 이름과 시나리오 번역
```
**맵**은 타일셋 위에 층으로 놓인 타일 번호 격자이며, 자체 이름, 크기, 확대 배율을 가집니다. 숲 맵은 랜덤 인카운터도 나열합니다:
```json
"Encounters": {
"Steps": 48,
"Groups": ["rpg_slime", "rpg_slime,rpg_slime"]
}
```
**이벤트**는 타일 위에 놓인 무언가입니다. `"Trigger": "Touch"` 문은 순간이동을 하고, 몬스터는 시나리오를 실행하다가 자기 플래그가 세워지면 사라집니다:
```json
{
"Id": "wolf_boss",
"X": 25,
"Y": 8,
"Sprite": "village/wolf",
"Dir": "Left",
"Scenario": "rpg_demo/events/wolf_boss",
"Condition": "rpg_wolf_dead != 1"
}
```
**시나리오**는 대사를 말하고 싸움을 시작합니다. 이기면 플래그가 세워집니다:
```scenario
ptext "동굴 옆에 늑대가 앉아 있다. 촌장네 염소를 보는 눈빛으로 당신을 훑어본다." key=rpg_demo/wolf/line1
text "크르르." key=rpg_demo/wolf/line2
action rpg.battle enemies=rpg_wolf,rpg_slime win_flag=rpg_wolf_dead
end
```
이 모드 시나리오의 대사는 러시아어로 쓰여 있습니다. 각 줄에는 `key=`가 붙고 번역은 `locale/scenarios_<lang>.properties`에서 오기 때문에, 게임은 인터페이스 언어로 보여 줍니다:
```properties
rpg_demo/wolf/line1 = 동굴 옆에 늑대가 앉아 있다. 촌장네 염소를 보는 눈빛으로 당신을 훑어본다.
```
나머지 조각들도 같은 방식입니다. 상자는 `action item.add`를 실행하고 플래그를 세운 뒤, 반대 `Condition`을 가진 열린 상자 이벤트로 바뀝니다. 상인은 `action trade.open shop=rpg_demo/village_merchant`를 실행합니다. 마을 첫 방문에서는 인트로 시나리오가 돌며 `action party.add id=rpg_hero`로 영웅을 파티에 넣습니다.
맵과 이벤트를 눈으로 보며 바꾸려면 RPG 편집 도구의 맵 편집기를 사용하세요.
## 문제가 생겼을 때
1. **문이 아무 반응이 없습니다.** `Touch` 문은 밟는 순간 작동합니다. `Action` 문은 마주 본 채 E 또는 F가 필요합니다.
2. **몬스터나 상자가 돌아왔습니다.** 그 `Condition`은 시나리오가 세우는 것과 같은 플래그를 검사해야 합니다.
3. **가게가 비어 있습니다.** trading 모드가 게임에 있어야 하고, 시나리오의 가게 id는 `shops/village_merchant.json`과 일치해야 합니다.
+92
View File
@@ -0,0 +1,92 @@
# RPG Demo — маленький мир на тайлах
RPG Demo — короткое законченное приключение на тайлах: деревня у Серого леса, дом старосты и лес, у пещеры которого живёт волк. Вы ходите с клавиатуры, разговариваете с людьми, открываете сундуки, собираете в лесу припасы, продаёте их торговцу и сражаетесь. Мод состоит только из файлов данных и сценариев — ни строчки кода, так что заодно это работающий пример того, как собирается игра на тайловой карте.
У демки нет собственной карточки игры: это мир игры **RPG Plus**, которая включает этот мод и достраивает его поверх. Запуск — **Играть → RPG Plus → Новая игра**: после короткого пролога на перекрёстке вы оказываетесь в этой деревне. Скриншоты ниже сделаны в RPG Plus, поэтому часть людей и товаров в них добавила та игра.
![Деревня у Серого леса ночью: дома, мощёная площадь с фонарями, деревенские, пруд и герой на тропинке.](assets/village.jpg)
## Как играть
- **Ходить** — WASD или стрелки, **бежать** — Shift.
- **Говорить, открывать, читать** — E или F, стоя лицом к человеку или предмету.
- Шаг на дверной проём или край тропинки переносит на следующую карту.
Сюжет: староста просит прогнать волка, поселившегося у пещеры к востоку от деревни. Мимо пруда, по лесной тропе, разделаться со слизнем, перегородившим путь, и лицом к лицу с волком. Когда волк побеждён, староста благодарит вас — по-своему.
## Что есть в мире
- **Три карты.** Деревня (32×18 тайлов), дом старосты и Серый лес, все нарисованы деревенским тайлсетом из Village Pack.
- **Люди.** Староста выдаёт и закрывает задание, деревенские болтают, табличка называет деревню; одна дверь заперта.
- **Сундуки.** Один в доме старосты, один в лесу; открытые остаются открытыми.
- **Сбор в лесу.** Вдоль троп лежат хворост, камни и лесные грибы; каждое место можно обобрать один раз. Гриб восстанавливает 5 здоровья.
- **Торговец.** Продаёт Эликсир (восстанавливает 20 здоровья) за 10 монет и покупает хворост по 1 монете и камни по 2.
- **Бои.** Слизень на тропе и волк у пещеры видны на карте и вступают в бой, когда вы с ними заговорите. В лесу примерно каждые 48 шагов случаются случайные бои с одним или двумя слизнями.
![Серый лес: тропа к пещере с волком, сундук, камни, грибы и слизень на тропе.](assets/forest.jpg)
![Лавка торговца: товары слева, выбранный Эликсир с ценой и кнопкой покупки, ваша сумка справа. RPG Plus добавляет в эту лавку больше товаров.](assets/shop.jpg)
![Бой со слизнем: герой внизу слева, слизень вверху, журнал боя справа.](assets/battle.jpg)
## Авторам: как это устроено
```filestree
rpg_demo_game/
├── maps/ rpg_village.json, rpg_elder_house.json, rpg_forest.json
├── map_events/<map>/events.json люди, двери, сундуки, подбираемые предметы, монстры
├── scenes/ по одной сцене на карту
├── scenarios/rpg_demo/ вступление, входы на карты и events/*.scenario
├── characters/ герой, слизень и волк
├── items/rpg_demo/ хворост, камни, гриб, эликсир и их значки
├── shops/village_merchant.json
└── locale/ имена и переводы сценариев на семи языках
```
**Карта** — это сетка номеров тайлов по слоям поверх тайлсета, со своим именем, размером и зумом. Карта леса также перечисляет случайные встречи:
```json
"Encounters": {
"Steps": 48,
"Groups": ["rpg_slime", "rpg_slime,rpg_slime"]
}
```
**Событие** — нечто, размещённое на тайле. Дверь с `"Trigger": "Touch"` телепортирует; монстр запускает сценарий и исчезает, когда выставлен его флаг:
```json
{
"Id": "wolf_boss",
"X": 25,
"Y": 8,
"Sprite": "village/wolf",
"Dir": "Left",
"Scenario": "rpg_demo/events/wolf_boss",
"Condition": "rpg_wolf_dead != 1"
}
```
**Сценарий** произносит строки и начинает бой; победа выставляет флаг:
```scenario
ptext "У пещеры сидит волк. Он оглядывает тебя, как старостину козу." key=rpg_demo/wolf/line1
text "— Р-р-р." key=rpg_demo/wolf/line2
action rpg.battle enemies=rpg_wolf,rpg_slime win_flag=rpg_wolf_dead
end
```
Строки в сценариях этого мода написаны по-русски; у каждой строки есть `key=`, по которому перевод берётся из `locale/scenarios_<lang>.properties`, поэтому игра показывает их на языке интерфейса:
```properties
rpg_demo/wolf/line1 = У пещеры сидит волк. Он оглядывает тебя, как старостину козу.
```
Остальные куски работают так же: сундук выполняет `action item.add`, ставит флаг и заменяется событием открытого сундука с обратным `Condition`; торговец выполняет `action trade.open shop=rpg_demo/village_merchant`; первое посещение деревни запускает вступительный сценарий, который ставит героя в отряд действием `action party.add id=rpg_hero`.
Чтобы менять карты и события наглядно, используйте редактор карт из инструментов RPG-редактора.
## Если что-то пошло не так
1. **Дверь не реагирует.** Дверь `Touch` срабатывает, когда вы на неё наступаете; двери `Action` нужны E или F, стоя к ней лицом.
2. **Монстр или сундук вернулся.** Его `Condition` должен проверять тот же флаг, который выставляет сценарий.
3. **Лавка пуста.** В игре должен быть мод trading, а идентификатор лавки в сценарии должен совпадать с `shops/village_merchant.json`.
+92
View File
@@ -0,0 +1,92 @@
# RPG Demo — một thế giới tile-map nhỏ
RPG Demo là một cuộc phiêu lưu tile-map ngắn gọn và trọn vẹn: một ngôi làng bên Rừng Xám, nhà của trưởng làng, và khu rừng có con sói trú ở bên hang. Bạn đi lại bằng bàn phím, nói chuyện với mọi người, mở rương, hái lượm trong rừng, bán cho thương nhân rồi chiến đấu. Nó chỉ gồm các tệp dữ liệu và kịch bản — không một dòng mã — nên đồng thời cũng là một ví dụ sống động về cách một trò chơi tile-map được ghép lại.
Bản demo không có thẻ trò chơi riêng: nó là thế giới của trò **RPG Plus**, trò chơi này chứa mod và xây tiếp trên nền nó. Bắt đầu từ **Chơi → RPG Plus → Trò chơi mới**: đi qua phần mở đầu ngắn ở ngã tư của RPG Plus là bạn đến ngôi làng này. Các ảnh chụp bên dưới lấy từ RPG Plus, nên một số người và món hàng nhìn thấy là do trò đó thêm vào.
![Ngôi làng bên Rừng Xám về đêm: những ngôi nhà, quảng trường lát đá có đèn, dân làng, cái ao và anh hùng trên con đường mòn.](assets/village.jpg)
## Cách chơi
- **Đi lại** bằng WASD hoặc phím mũi tên, **chạy** bằng Shift.
- **Nói chuyện, mở, đọc** bằng E hoặc F khi đang quay mặt về phía người hoặc vật.
- Bước lên một cánh cửa hoặc mép đường sẽ đưa bạn sang bản đồ kế tiếp.
Cốt truyện: trưởng làng nhờ bạn đuổi con sói trú ở hang phía đông làng. Đi qua cái ao, men theo đường mòn trong rừng, giải quyết con slime chặn đường rồi đối mặt với con sói. Khi nó gục ngã, trưởng làng cảm ơn bạn — theo kiểu của ông ta.
## Trong thế giới có gì
- **Ba bản đồ.** Ngôi làng (32×18 ô), nhà trưởng làng và Rừng Xám, tất cả vẽ bằng tileset ngôi làng của Village Pack.
- **Con người.** Trưởng làng giao và kết thúc nhiệm vụ, dân làng tám chuyện, tấm biển gọi tên ngôi làng; một cánh cửa bị khóa.
- **Rương.** Một cái trong nhà trưởng làng, một cái trong rừng; mở rồi thì vẫn mở.
- **Hái lượm trong rừng.** Dọc các đường mòn có củi khô, đá và nấm rừng; mỗi chỗ chỉ nhặt được một lần. Một cây nấm hồi 5 máu.
- **Thương nhân.** Bán Thuốc tiên (hồi 20 máu) giá 10 đồng, mua củi khô 1 đồng và đá 2 đồng.
- **Chiến đấu.** Con slime trên đường mòn và con sói bên hang hiện rõ trên bản đồ và bắt đầu trận đánh khi bạn nói chuyện với chúng. Trong rừng, những trận ngẫu nhiên với một hai con slime xảy ra khoảng sau mỗi 48 bước chân.
![Rừng Xám: đường mòn tới hang của con sói, một cái rương, đá, nấm và con slime chắn đường.](assets/forest.jpg)
![Cửa hàng của thương nhân: hàng hóa bên trái, Thuốc tiên đang chọn kèm giá và nút mua, túi của bạn bên phải. RPG Plus thêm nhiều hàng hơn vào cửa hàng này.](assets/shop.jpg)
![Một trận đánh với slime: anh hùng ở dưới bên trái, slime ở phía trên, nhật ký chiến đấu bên phải.](assets/battle.jpg)
## Dành cho tác giả: nó được dựng thế nào
```filestree
rpg_demo_game/
├── maps/ rpg_village.json, rpg_elder_house.json, rpg_forest.json
├── map_events/<map>/events.json con người, cửa, rương, vật nhặt được, quái vật
├── scenes/ mỗi bản đồ một cảnh
├── scenarios/rpg_demo/ phần mở đầu, lối vào bản đồ và events/*.scenario
├── characters/ anh hùng, slime và sói
├── items/rpg_demo/ củi khô, đá, nấm, thuốc tiên và biểu tượng của chúng
├── shops/village_merchant.json
└── locale/ tên và bản dịch kịch bản bằng bảy ngôn ngữ
```
Một **bản đồ** là lưới số ô xếp thành các lớp trên một tileset, kèm tên, kích thước và mức thu phóng riêng. Bản đồ rừng còn liệt kê các trận ngẫu nhiên:
```json
"Encounters": {
"Steps": 48,
"Groups": ["rpg_slime", "rpg_slime,rpg_slime"]
}
```
**Sự kiện** là một thứ được đặt lên một ô. Cửa có `"Trigger": "Touch"` thì dịch chuyển; quái vật chạy một kịch bản và biến mất khi cờ của nó được bật:
```json
{
"Id": "wolf_boss",
"X": 25,
"Y": 8,
"Sprite": "village/wolf",
"Dir": "Left",
"Scenario": "rpg_demo/events/wolf_boss",
"Condition": "rpg_wolf_dead != 1"
}
```
**Kịch bản** nói các câu và bắt đầu trận đánh; thắng thì bật cờ:
```scenario
ptext "Một con sói ngồi bên hang. Nó nhìn bạn từ đầu đến chân như nhìn đàn dê của trưởng làng." key=rpg_demo/wolf/line1
text "Grừ." key=rpg_demo/wolf/line2
action rpg.battle enemies=rpg_wolf,rpg_slime win_flag=rpg_wolf_dead
end
```
Các câu trong kịch bản của mod này viết bằng tiếng Nga; mỗi câu có một `key=`, bản dịch nằm trong `locale/scenarios_<lang>.properties`, nên trò chơi hiện chúng theo ngôn ngữ giao diện của bạn:
```properties
rpg_demo/wolf/line1 = Một con sói ngồi bên hang. Nó nhìn bạn từ đầu đến chân như nhìn đàn dê của trưởng làng.
```
Các mảnh khác cũng hoạt động y như vậy: cái rương chạy `action item.add`, bật cờ rồi bị thay bằng sự kiện rương mở với `Condition` ngược lại; thương nhân chạy `action trade.open shop=rpg_demo/village_merchant`; lần đầu ghé làng sẽ chạy kịch bản mở đầu, đưa anh hùng vào đội bằng `action party.add id=rpg_hero`.
Muốn sửa bản đồ và sự kiện bằng hình ảnh trực quan, hãy dùng trình soạn bản đồ trong bộ công cụ soạn thảo RPG.
## Nếu có trục trặc
1. **Cửa không phản ứng.** Cửa kiểu `Touch` phát hiệu khi bạn giẫm lên; cửa kiểu `Action` cần E hoặc F khi đang đối mặt.
2. **Quái hay rương quay lại.** `Condition` của nó phải kiểm tra đúng lá cờ mà kịch bản bật.
3. **Cửa hàng trống rỗng.** Mod trading phải có trong trò chơi, và id cửa hàng trong kịch bản phải khớp `shops/village_merchant.json`.
+92
View File
@@ -0,0 +1,92 @@
# RPG Demo — 一个小小的图块世界
RPG Demo 是一段短小而完整的图块地图冒险:灰森林旁的一座村庄、村长的家,以及洞穴里住着一只狼的森林。你用键盘行走、与人们交谈、开宝箱、在森林里采集,再把东西卖给商人,然后战斗。它只由数据文件和剧本构成——没有一行代码——因此同时也是“一款图块地图游戏是如何组装起来的”的现成示例。
这个演示没有自己的游戏卡片:它是 **RPG Plus** 游戏的世界,RPG Plus 包含本模组并在其之上扩建。从“开始游戏 → RPG Plus → 新游戏”进入:走完 RPG Plus 简短的岔路口序章后,你就会抵达这座村庄。下面的截图来自 RPG Plus,所以其中一些人和商品是那个游戏加上的。
![夜晚的灰森林旁村庄:房屋、亮着灯的石板广场、村民、池塘,以及小路上的英雄。](assets/village.jpg)
## 玩法
- 用 WASD 或方向键**行走**,按 Shift **奔跑**。
- 面对人物或物件时按 E 或 F **交谈、打开、阅读**。
- 走到门口或路的边缘,就会被传送到下一张地图。
剧情:村长请你赶走盘踞在村庄东边洞穴旁的狼。经过池塘,沿着林间小路,解决挡路的史莱姆,然后与狼正面对决。狼被击败后,村长会谢谢你——用他自己的方式。
## 世界里有什么
- **三张地图。** 村庄(32×18 图块)、村长的家和灰森林,全部用 Village Pack 的村庄图块集绘制。
- **人物。** 村长发放并完结任务,村民闲聊,一块路牌写着村庄的名字;有一扇门锁着。
- **宝箱。** 村长家里一个、森林里一个;打开后保持敞开。
- **森林采集。** 小路沿线散落着柴火、石头和森林蘑菇;每个采集点只能采一次。一朵蘑菇恢复 5 点生命。
- **商人。** 以 10 枚硬币出售药剂(恢复 20 点生命),并以 1 枚收购柴火、2 枚收购石头。
- **战斗。** 挡路的史莱姆和洞穴旁的狼都显示在地图上,与之交谈就会开战。在森林里,大约每走 48 步会遇到一次随机战斗,对手是一到两只史莱姆。
![灰森林:通向狼所在洞穴的小路,一个宝箱、石头、蘑菇,以及挡路的史莱姆。](assets/forest.jpg)
![商人的店:左边是商品,中间是选中的药剂及其价格和购买按钮,右边是你的背包。RPG Plus 给这家店添加了更多商品。](assets/shop.jpg)
![一场与史莱姆的战斗:英雄在左下角,史莱姆在上方,战斗记录在右侧。](assets/battle.jpg)
## 给模组作者:它是怎么搭起来的
```filestree
rpg_demo_game/
├── maps/ rpg_village.json、rpg_elder_house.json、rpg_forest.json
├── map_events/<map>/events.json 人物、门、宝箱、可拾取物、怪物
├── scenes/ 每张地图一个场景
├── scenarios/rpg_demo/ 开场、地图入口和 events/*.scenario
├── characters/ 英雄、史莱姆和狼
├── items/rpg_demo/ 柴火、石头、蘑菇、药剂及其图标
├── shops/village_merchant.json
└── locale/ 七种语言的名称和剧本翻译
```
**地图**是叠在图块集上的多层图块编号网格,带有自己的名称、尺寸和缩放。森林地图还列出了它的随机遭遇:
```json
"Encounters": {
"Steps": 48,
"Groups": ["rpg_slime", "rpg_slime,rpg_slime"]
}
```
**事件**是放在图块上的东西。带 `"Trigger": "Touch"` 的门负责传送;怪物会运行一段剧本,并在自己的标志位被设置后消失:
```json
{
"Id": "wolf_boss",
"X": 25,
"Y": 8,
"Sprite": "village/wolf",
"Dir": "Left",
"Scenario": "rpg_demo/events/wolf_boss",
"Condition": "rpg_wolf_dead != 1"
}
```
**剧本**说出台词并开始战斗;获胜后设置标志位:
```scenario
ptext "一只狼坐在洞穴旁。它打量你的眼神,就像打量村长的山羊。" key=rpg_demo/wolf/line1
text "嗷呜——" key=rpg_demo/wolf/line2
action rpg.battle enemies=rpg_wolf,rpg_slime win_flag=rpg_wolf_dead
end
```
本模组剧本中的台词以俄语写成;每行都有一个 `key=`,对应的翻译放在 `locale/scenarios_<lang>.properties` 中,所以游戏会按界面语言显示它们:
```properties
rpg_demo/wolf/line1 = 一只狼坐在洞穴旁。它打量你的眼神,就像打量村长的山羊。
```
其余部分都是同一个套路:宝箱执行 `action item.add`、设置标志位,然后被一个带相反 `Condition` 的“已开宝箱”事件替换;商人执行 `action trade.open shop=rpg_demo/village_merchant`;首次进入村庄会运行开场剧本,用 `action party.add id=rpg_hero` 把英雄放进队伍。
想以可视化方式修改地图和事件,请使用 RPG 编辑器工具中的地图编辑器。
## 出问题了怎么办
1. **门没有反应。** `Touch` 门在你踩上去时触发;`Action` 门需要面向它按 E 或 F。
2. **怪物或宝箱复活了。** 它的 `Condition` 必须检查剧本所设置的同一个标志位。
3. **商店是空的。** 游戏中必须包含 trading 模组,且剧本里的商店 id 必须与 `shops/village_merchant.json` 一致。
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

+1 -1
View File
@@ -1,5 +1,5 @@
mod_rpg_demo_game_name = RPG Demo mod_rpg_demo_game_name = RPG Demo
mod_rpg_demo_game_desc = Content of the RPG demo: a village, the elder's house and a forest with a wolf by the cave. Maps, events and scenarios only. mod_rpg_demo_game_desc = A small tile-map adventure: a village, the elder's house and a wolf at the forest cave — data and scenarios only, a working example of a tile-map game.
rpg_demo/map/village = Village by the Grey Forest rpg_demo/map/village = Village by the Grey Forest
rpg_demo/map/elder_house = Elder's house rpg_demo/map/elder_house = Elder's house
rpg_demo/map/forest = Grey Forest rpg_demo/map/forest = Grey Forest
+17
View File
@@ -0,0 +1,17 @@
mod_rpg_demo_game_name = RPG Demo
mod_rpg_demo_game_desc = Una pequeña aventura de mapa de tiles: una aldea, la casa del anciano y un lobo en la cueva del bosque. Solo datos y escenarios, un ejemplo funcional de un juego de tiles.
rpg_demo/map/village = Aldea junto al Bosque Gris
rpg_demo/map/elder_house = Casa del anciano
rpg_demo/map/forest = Bosque Gris
rpg_demo/character/hero = Héroe
rpg_demo/character/slime = Limo
rpg_demo/character/wolf = Lobo
rpg_demo/item/branches/name = Leña
rpg_demo/item/branches/desc = Ramas secas del Bosque Gris. Basura, pero el mercader paga una moneda por brazada.
rpg_demo/item/stones/name = Piedras
rpg_demo/item/stones/desc = Piedras lisas del bosque. Por algún motivo el mercader las compra a dos monedas cada una.
rpg_demo/item/mushroom/name = Seta del bosque
rpg_demo/item/mushroom/desc = Una seta comestible. Restaura 5 de salud.
rpg_demo/item/elixir/name = Elixir
rpg_demo/item/elixir/desc = Un elixir curativo rojo de la tienda de la aldea. Restaura 20 de salud.
rpg_demo/shop/village_merchant = Tienda del mercader
+17
View File
@@ -0,0 +1,17 @@
mod_rpg_demo_game_name = RPG Demo
mod_rpg_demo_game_desc = 小さなタイルマップの冒険:村、村長の家、森の洞窟にいる狼。データとシナリオだけの、実際に動くタイルマップゲームの例。
rpg_demo/map/village = 灰色の森のそばの村
rpg_demo/map/elder_house = 村長の家
rpg_demo/map/forest = 灰色の森
rpg_demo/character/hero = 勇者
rpg_demo/character/slime = スライム
rpg_demo/character/wolf = 狼
rpg_demo/item/branches/name = 柴
rpg_demo/item/branches/desc = 灰色の森の枯れ枝。ガラクタだが、商人はひと抱えにつき硬貨 1 枚で買ってくれる。
rpg_demo/item/stones/name = 石
rpg_demo/item/stones/desc = 森のすべすべした石。なぜか商人は 1 つ硬貨 2 枚で買い取る。
rpg_demo/item/mushroom/name = 森のキノコ
rpg_demo/item/mushroom/desc = 食べられるキノコ。体力を 5 回復する。
rpg_demo/item/elixir/name = エリクサー
rpg_demo/item/elixir/desc = 村の店で売っている赤い回復のエリクサー。体力を 20 回復する。
rpg_demo/shop/village_merchant = 商人の店
+17
View File
@@ -0,0 +1,17 @@
mod_rpg_demo_game_name = RPG Demo
mod_rpg_demo_game_desc = 작은 타일맵 모험: 마을, 촌장의 집, 숲 동굴의 늑대. 데이터와 시나리오만으로 이룬, 실제 작동하는 타일맵 게임의 예시.
rpg_demo/map/village = 잿빛 숲 옆 마을
rpg_demo/map/elder_house = 촌장의 집
rpg_demo/map/forest = 잿빛 숲
rpg_demo/character/hero = 영웅
rpg_demo/character/slime = 슬라임
rpg_demo/character/wolf = 늑대
rpg_demo/item/branches/name = 땔감
rpg_demo/item/branches/desc = 잿빛 숲의 마른 나뭇가지. 잡동사니지만 상인이 한 아름에 동전 하나를 쳐 준다.
rpg_demo/item/stones/name = 돌
rpg_demo/item/stones/desc = 숲의 매끈한 돌. 어째서인지 상인은 하나에 동전 두 닢에 사들인다.
rpg_demo/item/mushroom/name = 숲 버섯
rpg_demo/item/mushroom/desc = 먹을 수 있는 버섯. 체력을 5 회복한다.
rpg_demo/item/elixir/name = 엘릭서
rpg_demo/item/elixir/desc = 마을 상점에서 파는 붉은 치유 엘릭서. 체력을 20 회복한다.
rpg_demo/shop/village_merchant = 상인의 가게
+1 -1
View File
@@ -1,5 +1,5 @@
mod_rpg_demo_game_name = RPG-демо mod_rpg_demo_game_name = RPG-демо
mod_rpg_demo_game_desc = Содержимое RPG-демо: деревня, дом старосты и лес с волком у пещеры. Только карты, события и сценарии. mod_rpg_demo_game_desc = Небольшое приключение на тайловой карте: деревня, дом старосты и волк у пещеры в лесу. Только данные и сценарии — работающий пример игры на тайлах.
rpg_demo/map/village = Деревня у Серого леса rpg_demo/map/village = Деревня у Серого леса
rpg_demo/map/elder_house = Дом старосты rpg_demo/map/elder_house = Дом старосты
rpg_demo/map/forest = Серый лес rpg_demo/map/forest = Серый лес
+22
View File
@@ -0,0 +1,22 @@
rpg_demo/chest/empty = Vacío. Ya te lo llevaste todo.
rpg_demo/elder/quest_1 = "Así que has venido. Escucha: un lobo se ha instalado junto a la cueva del bosque. Mata cabras, aúlla de noche y me mira raro."
rpg_demo/elder/quest_2 = "Ve al este, pasado el estanque, por el sendero. Échalo y, qué remedio, dejaré de despertarte."
rpg_demo/elder/thanks_1 = "¿Ya no está el lobo? Vaya, vaya. No creía en ti, y vas tú y lo estropeas."
rpg_demo/elder/thanks_2 = "Anda, vete. Ahora puedes dormir hasta mediodía. Ni un minuto más."
rpg_demo/chest/forest = Un cofre en el bosque. Dentro: setas secas y la esperanza perdida de alguien. Te llevas las setas.
rpg_demo/chest/house = En el cofre: calcetines viejos y una nota que dice "No tocar". Demasiado tarde. Debajo de los calcetines: tres monedas.
rpg_demo/door/locked = Cerrado. Tras la puerta alguien se esfuerza mucho en fingir que no hay nadie en casa.
rpg_demo/merchant/line1 = "¡Oh, un cliente! Elixires frescos, casi sin poso. Y tráeme la basura del bosque, lo compro todo. Bueno, casi."
rpg_demo/slime/line1 = Un limo bloquea el sendero y gorgotea desafiante.
rpg_demo/sign/village = "Al este: el Bosque Gris. Al oeste: también un bosque, pero allí no vamos."
rpg_demo/villager/line1 = "Dicen que en el bosque hay limos. Pequeños, pero fastidia cuando se te meten en la bota."
rpg_demo/wolf/line1 = Un lobo está sentado junto a la cueva. Te mira igual que mira a las cabras del anciano.
rpg_demo/wolf/line2 = "Grrr."
rpg_demo/house/enter = La casa huele a hierbas, a cera y, un poco, al anciano.
rpg_demo/forest/enter = El Bosque Gris. Está en silencio, como solo lo está donde se están comiendo a alguien.
rpg_demo/intro/title = La aldea junto al Bosque Gris
rpg_demo/intro/line1 = Mañana. Los gallos se quedaron roncos antes del alba, y el anciano ya ha mandado tres veces al chico a buscarte.
rpg_demo/intro/controls = Camina con WASD o las flechas. Habla, abre y lee con E o F.
rpg_demo/pickup/branches = Una brazada de leña seca. El mercader de la aldea la aceptará: él lo compra todo.
rpg_demo/pickup/stones = Un par de piedras lisas. No sirven para nada, así que se pueden vender.
rpg_demo/pickup/mushroom = Una seta firme del bosque. Cómetela y te sentirás mejor.
+22
View File
@@ -0,0 +1,22 @@
rpg_demo/chest/empty = 空っぽだ。もう全部持っていった。
rpg_demo/elder/quest_1 = 「来たか。いいか、森の洞窟のそばに狼が住みついた。ヤギを殺すし、夜は吠えるし、わしを妙な目で見る。」
rpg_demo/elder/quest_2 = 「東へ行け、池を過ぎて小道沿いにな。追い払ってくれたら、まあ仕方ない、もうお前を起こしに行くのはやめてやる。」
rpg_demo/elder/thanks_1 = 「狼がいなくなった? ほう、ほう。お前のことなど信じておらんかったのに、台無しにしてくれおって。」
rpg_demo/elder/thanks_2 = 「さあ行け。これで昼まで寝ていいぞ。一分たりとも長くはならんがな。」
rpg_demo/chest/forest = 森の中の宝箱。中には干しキノコと、誰かの失われた希望。キノコをいただく。
rpg_demo/chest/house = 宝箱の中には古い靴下と「さわるな」と書かれたメモ。もう遅い。靴下の下には硬貨が 3 枚。
rpg_demo/door/locked = 鍵がかかっている。扉の向こうで誰かが、留守のふりを必死にしている。
rpg_demo/merchant/line1 = 「おや、お客さんだ! エリクサーは新鮮、沈殿もほとんどなし。森のガラクタも持ってきな、何でも買い取るよ。まあ、ほとんど何でもね。」
rpg_demo/slime/line1 = スライムが小道をふさぎ、挑むようにごぼごぼ鳴っている。
rpg_demo/sign/village = 「東:灰色の森。西:こっちも森だが、そっちへは行かない。」
rpg_demo/villager/line1 = 「森にはスライムがいるらしい。小さいけど、ブーツに入り込まれると腹が立つんだ。」
rpg_demo/wolf/line1 = 洞窟のそばに狼が座っている。村長のヤギを見るような目つきで、こちらを値踏みしている。
rpg_demo/wolf/line2 = 「グルルル。」
rpg_demo/house/enter = 家の中は薬草と蝋と、少しだけ村長の匂いがする。
rpg_demo/forest/enter = 灰色の森。誰かが食べられている場所にしかない静けさだ。
rpg_demo/intro/title = 灰色の森のそばの村
rpg_demo/intro/line1 = 朝。ニワトリは夜明け前に声がかれ、村長はもう三度も少年をあなたを呼びによこした。
rpg_demo/intro/controls = WASD か矢印キーで歩く。E か F で話す、開ける、読む。
rpg_demo/pickup/branches = ひと抱えの乾いた柴。村の商人なら引き取ってくれる。何でも買う人だ。
rpg_demo/pickup/stones = すべすべした石がいくつか。役に立たない、つまり売り物だ。
rpg_demo/pickup/mushroom = しっかりした森のキノコ。食べれば元気になる。
+22
View File
@@ -0,0 +1,22 @@
rpg_demo/chest/empty = 비어 있다. 이미 다 가져갔다.
rpg_demo/elder/quest_1 = "왔구나. 잘 들어라. 숲의 동굴 옆에 늑대가 자리를 잡았다. 염소를 물어 죽이고, 밤마다 울부짖고, 나를 이상하게 쳐다본다."
rpg_demo/elder/quest_2 = "동쪽으로 가거라, 연못을 지나 오솔길을 따라. 쫓아내 주면, 뭐 어쩔 수 없지, 더는 널 깨우지 않으마."
rpg_demo/elder/thanks_1 = "늑대가 사라졌다고? 이런, 이런. 널 믿지 않았는데 기어이 다 망쳐 놨구나."
rpg_demo/elder/thanks_2 = "어서 가 봐라. 이제 정오까지 자도 된다. 단 1분도 더는 안 돼."
rpg_demo/chest/forest = 숲속의 상자. 안에는 말린 버섯과 누군가의 잃어버린 희망. 버섯을 챙긴다.
rpg_demo/chest/house = 상자 안에는 낡은 양말과 '만지지 마시오'라고 쓴 쪽지. 이미 늦었다. 양말 밑에 동전 세 닢.
rpg_demo/door/locked = 잠겨 있다. 문 너머에서 누군가 아무도 없는 척하려고 무척 애쓰고 있다.
rpg_demo/merchant/line1 = "오, 손님이다! 엘릭서 신선해요, 앙금도 거의 없어요. 숲의 잡동사니도 가져와요, 전부 사들일게요. 뭐, 거의 전부."
rpg_demo/slime/line1 = 슬라임이 오솔길을 막고 도전적으로 꾸르륵거린다.
rpg_demo/sign/village = "동쪽: 잿빛 숲. 서쪽: 거기도 숲이지만 우리는 가지 않는다."
rpg_demo/villager/line1 = "숲에 슬라임이 있대. 작긴 한데 부츠 속에 기어들어 오면 짜증 나."
rpg_demo/wolf/line1 = 동굴 옆에 늑대가 앉아 있다. 촌장네 염소를 보는 눈빛으로 당신을 훑어본다.
rpg_demo/wolf/line2 = "크르르."
rpg_demo/house/enter = 집 안에서 약초와 밀랍 냄새, 그리고 촌장 냄새가 살짝 난다.
rpg_demo/forest/enter = 잿빛 숲. 누군가가 먹히고 있는 곳에서만 나는 고요함이다.
rpg_demo/intro/title = 잿빛 숲 옆 마을
rpg_demo/intro/line1 = 아침. 수탉들은 동트기 전에 목이 쉬었고, 촌장은 벌써 세 번이나 소년을 보내 당신을 불렀다.
rpg_demo/intro/controls = WASD 또는 방향키로 걷는다. E 또는 F로 말하고, 열고, 읽는다.
rpg_demo/pickup/branches = 마른 땔감 한 아름. 마을 상인이 받아 줄 것이다. 그는 뭐든 산다.
rpg_demo/pickup/stones = 매끈한 돌 몇 개. 쓸모없다, 그러니까 팔 물건이다.
rpg_demo/pickup/mushroom = 단단한 숲 버섯. 먹으면 기운이 날 것이다.
+22
View File
@@ -0,0 +1,22 @@
rpg_demo/chest/empty = Trống không. Bạn đã lấy hết rồi.
rpg_demo/elder/quest_1 = "Cậu đến rồi à. Nghe đây: có một con sói đã làm ổ bên hang trong rừng. Nó giết dê, đêm thì tru, lại còn nhìn ta rất lạ."
rpg_demo/elder/quest_2 = "Đi về phía đông, qua cái ao, theo con đường mòn. Đuổi nó đi, rồi thì thôi, ta sẽ thôi đánh thức cậu."
rpg_demo/elder/thanks_1 = "Con sói đi rồi à? Chà, chà. Ta chẳng tin cậu, thế mà cậu lại làm hỏng mất."
rpg_demo/elder/thanks_2 = "Đi đi. Giờ cậu có thể ngủ đến trưa. Không thêm một phút nào."
rpg_demo/chest/forest = Một cái rương trong rừng. Bên trong: nấm khô và niềm hy vọng đã mất của ai đó. Bạn lấy nấm.
rpg_demo/chest/house = Trong rương: tất cũ và một mẩu giấy ghi "Đừng động vào". Muộn rồi. Dưới đống tất: ba đồng xu.
rpg_demo/door/locked = Đã khóa. Sau cánh cửa có ai đó đang rất cố giả vờ là không có ai ở nhà.
rpg_demo/merchant/line1 = "Ồ, có khách! Thuốc tiên mới, hầu như không cặn. Mang cả đồ bỏ đi trong rừng tới đây, tôi mua hết. Ờ, gần như hết."
rpg_demo/slime/line1 = Một con slime chắn lối và kêu ọc ọc đầy thách thức.
rpg_demo/sign/village = "Phía đông: Rừng Xám. Phía tây: cũng là rừng, nhưng chúng ta không đi đến đó."
rpg_demo/villager/line1 = "Người ta bảo trong rừng có slime. Bé thôi, nhưng chui vào ủng thì bực lắm."
rpg_demo/wolf/line1 = Một con sói ngồi bên hang. Nó nhìn bạn từ đầu đến chân như nhìn đàn dê của trưởng làng.
rpg_demo/wolf/line2 = "Grừ."
rpg_demo/house/enter = Ngôi nhà thoang thoảng mùi thảo mộc, sáp ong và một chút mùi trưởng làng.
rpg_demo/forest/enter = Rừng Xám. Ở đây yên tĩnh theo cái kiểu chỉ có ở nơi ai đó đang bị ăn thịt.
rpg_demo/intro/title = Ngôi làng bên Rừng Xám
rpg_demo/intro/line1 = Buổi sáng. Lũ gà trống đã khản giọng từ trước bình minh, còn trưởng làng đã sai thằng bé đi gọi bạn ba lần.
rpg_demo/intro/controls = Di chuyển bằng WASD hoặc phím mũi tên. Nói chuyện, mở và đọc bằng E hoặc F.
rpg_demo/pickup/branches = Một ôm củi khô. Thương nhân trong làng sẽ nhận, ông ta mua mọi thứ.
rpg_demo/pickup/stones = Vài viên đá nhẵn. Vô dụng, nghĩa là bán được.
rpg_demo/pickup/mushroom = Một cây nấm rừng chắc nịch. Ăn vào sẽ thấy khỏe hơn.
+22
View File
@@ -0,0 +1,22 @@
rpg_demo/chest/empty = 空的。你已经全拿走了。
rpg_demo/elder/quest_1 = "你来了。听着:有只狼在森林的洞穴旁安了家。它咬死山羊,夜里嚎叫,还用奇怪的眼神看我。"
rpg_demo/elder/quest_2 = "往东走,经过池塘,沿着小路。把它赶走,那就算了,我不再叫你起床。"
rpg_demo/elder/thanks_1 = "狼没了?哎呀呀。我本来不信你,结果你还真给办砸了。"
rpg_demo/elder/thanks_2 = "去吧。现在你可以睡到中午了。一分钟也不许多。"
rpg_demo/chest/forest = 森林里的一个箱子。里面有干蘑菇和某人失落的希望。你拿走了蘑菇。
rpg_demo/chest/house = 箱子里:旧袜子和一张写着"别碰"的纸条。太迟了。袜子下面有三枚硬币。
rpg_demo/door/locked = 锁着。门后有人正拼命假装家里没人。
rpg_demo/merchant/line1 = "哦,来客人了!药剂新鲜,几乎没有沉淀。把森林里的破烂也带来,我全收。嗯,差不多全收。"
rpg_demo/slime/line1 = 一只史莱姆挡住了小路,挑衅地咕嘟作响。
rpg_demo/sign/village = "东边:灰森林。西边:也是森林,但我们不去那儿。"
rpg_demo/villager/line1 = "听说森林里有史莱姆。个头不大,可钻进靴子里可真气人。"
rpg_demo/wolf/line1 = 一只狼坐在洞穴旁。它打量你的眼神,就像打量村长的山羊。
rpg_demo/wolf/line2 = "嗷呜——"
rpg_demo/house/enter = 屋里有草药、蜡烛的味道,还有一点村长的味道。
rpg_demo/forest/enter = 灰森林。这里安静得只有正在吃掉某人的地方才会这样安静。
rpg_demo/intro/title = 灰森林旁的村庄
rpg_demo/intro/line1 = 早晨。公鸡在天亮前就叫哑了,村长已经派那个男孩来找你三次了。
rpg_demo/intro/controls = 用 WASD 或方向键行走。用 E 或 F 交谈、打开和阅读。
rpg_demo/pickup/branches = 一捆干柴。村里的商人会收的,他什么都收。
rpg_demo/pickup/stones = 几块光滑的石头。毫无用处,所以拿去卖。
rpg_demo/pickup/mushroom = 一朵结实的森林蘑菇。吃下去会舒服些。
+17
View File
@@ -0,0 +1,17 @@
mod_rpg_demo_game_name = RPG Demo
mod_rpg_demo_game_desc = Một cuộc phiêu lưu tile-map nhỏ: một ngôi làng, nhà trưởng làng và con sói bên hang trong rừng. Chỉ dữ liệu và kịch bản — một ví dụ chạy được của trò chơi tile-map.
rpg_demo/map/village = Ngôi làng bên Rừng Xám
rpg_demo/map/elder_house = Nhà trưởng làng
rpg_demo/map/forest = Rừng Xám
rpg_demo/character/hero = Anh hùng
rpg_demo/character/slime = Slime
rpg_demo/character/wolf = Sói
rpg_demo/item/branches/name = Củi khô
rpg_demo/item/branches/desc = Cành khô từ Rừng Xám. Đồ bỏ đi, nhưng thương nhân trả một đồng cho mỗi ôm.
rpg_demo/item/stones/name = Đá
rpg_demo/item/stones/desc = Những viên đá rừng nhẵn nhụi. Chẳng hiểu sao thương nhân mua mỗi viên hai đồng.
rpg_demo/item/mushroom/name = Nấm rừng
rpg_demo/item/mushroom/desc = Một cây nấm ăn được. Hồi 5 máu.
rpg_demo/item/elixir/name = Thuốc tiên
rpg_demo/item/elixir/desc = Thuốc chữa thương màu đỏ từ cửa hàng trong làng. Hồi 20 máu.
rpg_demo/shop/village_merchant = Cửa hàng của thương nhân
+17
View File
@@ -0,0 +1,17 @@
mod_rpg_demo_game_name = RPG Demo
mod_rpg_demo_game_desc = 一段小型的图块地图冒险:一座村庄、村长的家,以及森林洞穴旁的一只狼。只有数据和剧本,一个可运行的图块地图游戏示例。
rpg_demo/map/village = 灰森林旁的村庄
rpg_demo/map/elder_house = 村长的家
rpg_demo/map/forest = 灰森林
rpg_demo/character/hero = 英雄
rpg_demo/character/slime = 史莱姆
rpg_demo/character/wolf = 狼
rpg_demo/item/branches/name = 柴火
rpg_demo/item/branches/desc = 灰森林里的干树枝。是破烂,但商人每捆给一枚硬币。
rpg_demo/item/stones/name = 石头
rpg_demo/item/stones/desc = 森林里光滑的石头。不知为何,商人每块出两枚硬币收购。
rpg_demo/item/mushroom/name = 森林蘑菇
rpg_demo/item/mushroom/desc = 一种可食用的蘑菇。恢复 5 点生命。
rpg_demo/item/elixir/name = 药剂
rpg_demo/item/elixir/desc = 村里商店卖的红色治疗药剂。恢复 20 点生命。
rpg_demo/shop/village_merchant = 商人的店
+2 -2
View File
@@ -3,7 +3,7 @@
"name": "RPG Demo", "name": "RPG Demo",
"version": "1.0.0", "version": "1.0.0",
"author": "ct", "author": "ct",
"description": "Content of the RPG demo (collection rpg_demo): a village, the elder's house and a forest with a wolf at the cave, made of rpg_map files over the village_pack tileset. Shows teleports, talking NPCs, events that change with story flags, chests, things to gather in the forest (brushwood, stones, mushrooms that heal), a merchant who sells elixirs and buys the junk, a map monster with a win flag and random encounters in the forest. Only data and scenarios, no C#.", "description": "A small tile-map adventure: a village, the elder's house and a wolf at the forest cave — data and scenarios only, a working example of a tile-map game.",
"category": "story", "category": "story",
"depends": ["rpg>=1", "village_pack>=1", "characters_base>=1", "dialog_base>=1", "items_base>=1", "trading>=1"] "depends": ["rpg>=1", "village_pack>=1", "characters_base>=1", "dialog_base>=1", "items_base>=1", "trading>=1", "music_pack>=1"]
} }
+50
View File
@@ -0,0 +1,50 @@
{
"Events": [
{
"Id": "exit",
"X": 6,
"Y": 9,
"Trigger": "Touch",
"Teleport": {
"Map": "rpg_village",
"X": 6,
"Y": 7,
"Dir": "Down"
}
},
{
"Id": "elder_quest",
"X": 6,
"Y": 3,
"Sprite": "village/elder",
"Dir": "Down",
"Scenario": "rpg_demo/events/elder_quest",
"Condition": "rpg_wolf_dead != 1"
},
{
"Id": "elder_thanks",
"X": 6,
"Y": 3,
"Sprite": "village/elder",
"Dir": "Down",
"Scenario": "rpg_demo/events/elder_thanks",
"Condition": "rpg_wolf_dead == 1"
},
{
"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"
}
]
}
+259
View File
@@ -0,0 +1,259 @@
{
"Events": [
{
"Id": "to_village",
"X": 0,
"Y": 8,
"Trigger": "Touch",
"Teleport": {
"Map": "rpg_village",
"X": 30,
"Y": 9,
"Dir": "Left"
}
},
{
"Id": "wolf_boss",
"X": 25,
"Y": 8,
"Sprite": "village/wolf",
"Dir": "Left",
"Scenario": "rpg_demo/events/wolf_boss",
"Condition": "rpg_wolf_dead != 1"
},
{
"Id": "chest",
"X": 16,
"Y": 3,
"Tile": 14,
"Scenario": "rpg_demo/events/forest_chest",
"Condition": "rpg_forest_chest != 1"
},
{
"Id": "chest_open",
"X": 16,
"Y": 3,
"Tile": 15,
"Scenario": "rpg_demo/events/chest_empty",
"Condition": "rpg_forest_chest == 1"
},
{
"Id": "slime",
"X": 10,
"Y": 8,
"Sprite": "village/slime",
"Scenario": "rpg_demo/events/slime",
"Condition": "rpg_path_slime != 1"
},
{
"Id": "pick_branches_1",
"X": 6,
"Y": 5,
"Tile": 32,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_branches",
"Commands": [
"flag rpg_pick_branches_1 1",
"end"
],
"Condition": "rpg_pick_branches_1 != 1"
},
{
"Id": "pick_branches_2",
"X": 9,
"Y": 2,
"Tile": 32,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_branches",
"Commands": [
"flag rpg_pick_branches_2 1",
"end"
],
"Condition": "rpg_pick_branches_2 != 1"
},
{
"Id": "pick_branches_3",
"X": 20,
"Y": 6,
"Tile": 32,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_branches",
"Commands": [
"flag rpg_pick_branches_3 1",
"end"
],
"Condition": "rpg_pick_branches_3 != 1"
},
{
"Id": "pick_branches_4",
"X": 12,
"Y": 12,
"Tile": 32,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_branches",
"Commands": [
"flag rpg_pick_branches_4 1",
"end"
],
"Condition": "rpg_pick_branches_4 != 1"
},
{
"Id": "pick_branches_5",
"X": 23,
"Y": 14,
"Tile": 32,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_branches",
"Commands": [
"flag rpg_pick_branches_5 1",
"end"
],
"Condition": "rpg_pick_branches_5 != 1"
},
{
"Id": "pick_stones_1",
"X": 11,
"Y": 3,
"Tile": 33,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_stones",
"Commands": [
"flag rpg_pick_stones_1 1",
"end"
],
"Condition": "rpg_pick_stones_1 != 1"
},
{
"Id": "pick_stones_2",
"X": 21,
"Y": 7,
"Tile": 33,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_stones",
"Commands": [
"flag rpg_pick_stones_2 1",
"end"
],
"Condition": "rpg_pick_stones_2 != 1"
},
{
"Id": "pick_stones_3",
"X": 24,
"Y": 12,
"Tile": 33,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_stones",
"Commands": [
"flag rpg_pick_stones_3 1",
"end"
],
"Condition": "rpg_pick_stones_3 != 1"
},
{
"Id": "pick_stones_4",
"X": 26,
"Y": 15,
"Tile": 33,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_stones",
"Commands": [
"flag rpg_pick_stones_4 1",
"end"
],
"Condition": "rpg_pick_stones_4 != 1"
},
{
"Id": "pick_stones_5",
"X": 14,
"Y": 9,
"Tile": 33,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_stones",
"Commands": [
"flag rpg_pick_stones_5 1",
"end"
],
"Condition": "rpg_pick_stones_5 != 1"
},
{
"Id": "pick_mushroom_1",
"X": 10,
"Y": 3,
"Tile": 34,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_mushroom",
"Commands": [
"flag rpg_pick_mushroom_1 1",
"end"
],
"Condition": "rpg_pick_mushroom_1 != 1"
},
{
"Id": "pick_mushroom_2",
"X": 23,
"Y": 7,
"Tile": 34,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_mushroom",
"Commands": [
"flag rpg_pick_mushroom_2 1",
"end"
],
"Condition": "rpg_pick_mushroom_2 != 1"
},
{
"Id": "pick_mushroom_3",
"X": 21,
"Y": 14,
"Tile": 34,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_mushroom",
"Commands": [
"flag rpg_pick_mushroom_3 1",
"end"
],
"Condition": "rpg_pick_mushroom_3 != 1"
},
{
"Id": "pick_mushroom_4",
"X": 2,
"Y": 13,
"Tile": 34,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_mushroom",
"Commands": [
"flag rpg_pick_mushroom_4 1",
"end"
],
"Condition": "rpg_pick_mushroom_4 != 1"
},
{
"Id": "pick_mushroom_5",
"X": 20,
"Y": 5,
"Tile": 34,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_mushroom",
"Commands": [
"flag rpg_pick_mushroom_5 1",
"end"
],
"Condition": "rpg_pick_mushroom_5 != 1"
}
]
}
+77
View File
@@ -0,0 +1,77 @@
{
"Events": [
{
"Id": "door_elder",
"X": 6,
"Y": 6,
"Tile": -1,
"Dir": "Down",
"Trigger": "Touch",
"Teleport": {
"Map": "rpg_elder_house",
"X": 6,
"Y": 8,
"Dir": "Up"
},
"IsSolid": false
},
{
"Id": "door_merchant",
"X": 21,
"Y": 6,
"Tile": -1,
"Dir": "Down",
"Trigger": "Action",
"Solid": true,
"Scenario": "rpg_demo/events/locked_door",
"IsSolid": true
},
{
"Id": "to_forest",
"X": 31,
"Y": 9,
"Tile": -1,
"Dir": "Down",
"Trigger": "Touch",
"Teleport": {
"Map": "rpg_forest",
"X": 1,
"Y": 8,
"Dir": "Right"
},
"IsSolid": false
},
{
"Id": "sign",
"X": 16,
"Y": 11,
"Tile": 13,
"Dir": "Down",
"Trigger": "Action",
"Scenario": "rpg_demo/events/village_sign",
"IsSolid": true
},
{
"Id": "villager",
"X": 9,
"Y": 10,
"Sprite": "village/villager",
"Tile": -1,
"Dir": "Down",
"Trigger": "Action",
"Scenario": "rpg_demo/events/villager",
"IsSolid": true
},
{
"Id": "merchant",
"X": 22,
"Y": 8,
"Sprite": "village/merchant",
"Tile": -1,
"Dir": "Left",
"Trigger": "Action",
"Scenario": "rpg_demo/events/merchant",
"IsSolid": true
}
]
}
+22 -69
View File
@@ -8,30 +8,31 @@
"Width": 12, "Width": 12,
"Height": 10, "Height": 10,
"Zoom": 2, "Zoom": 2,
"Ambient": "#e0d2b8",
"Layers": { "Layers": {
"Back": [ "Back": [
"7 7 7 7 7 7 7 7 7 7 7 7", "1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011",
"7 7 7 7 7 7 7 7 7 7 7 7", "1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023",
"7 7 7 7 7 7 7 7 7 7 7 7", "1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035",
"7 7 7 7 7 7 7 7 7 7 7 7", "1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047",
"7 7 7 7 6 6 6 6 7 7 7 7", "1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059",
"7 7 7 7 6 6 6 6 7 7 7 7", "1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071",
"7 7 7 7 6 6 6 6 7 7 7 7", "1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083",
"7 7 7 7 7 7 7 7 7 7 7 7", "1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095",
"7 7 7 7 7 7 7 7 7 7 7 7", "1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107",
"7 7 7 7 7 7 7 7 7 7 7 7" "1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119"
], ],
"Main": [ "Main": [
"16 16 16 16 16 16 16 16 16 16 16 16", ". . . . . . . . . . . .",
"16 16 16 17 16 16 16 16 17 16 16 16", ". . . . . . . . . . . .",
"16 31 31 . . . . . . . 31 16", ". . . . . . . . . . . .",
"16 . . . . . . . . . . 16", ". . . . . . . . . . . .",
"16 . . . . . . . . . . 16", ". . . . . . . . . . . .",
"16 . . . . . . . . . . 16", ". . . . . . . . . . . .",
"16 . . . . . . . . . . 16", ". . . . . . . . . . . .",
"16 . . . . . . . . . . 16", ". . . . . . . . . . . .",
"16 . . . . . . . . . . 16", ". . . . . . . . . . . .",
"16 16 16 16 16 16 18 16 16 16 16 16" ". . . . . . . . . . . ."
], ],
"Front": [ "Front": [
". . . . . . . . . . . .", ". . . . . . . . . . . .",
@@ -51,55 +52,7 @@
"X": 6, "X": 6,
"Y": 8, "Y": 8,
"Dir": "Up" "Dir": "Up"
}, }
"Events": [
{
"Id": "exit",
"X": 6,
"Y": 9,
"Trigger": "Touch",
"Teleport": {
"Map": "rpg_village",
"X": 6,
"Y": 7,
"Dir": "Down"
}
},
{
"Id": "elder_quest",
"X": 6,
"Y": 3,
"Sprite": "village/elder",
"Dir": "Down",
"Scenario": "rpg_demo/events/elder_quest",
"Condition": "rpg_wolf_dead != 1"
},
{
"Id": "elder_thanks",
"X": 6,
"Y": 3,
"Sprite": "village/elder",
"Dir": "Down",
"Scenario": "rpg_demo/events/elder_thanks",
"Condition": "rpg_wolf_dead == 1"
},
{
"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"
}
]
} }
] ]
} }
+67 -323
View File
@@ -10,355 +10,99 @@
"Zoom": 2, "Zoom": 2,
"Layers": { "Layers": {
"Back": [ "Back": [
"24 24 24 24 24 24 26 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 26 24 24", "24 24 24 24 24 24 0 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 0 24 24",
"24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", "24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24",
"24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", "24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24",
"24 24 24 26 24 24 24 24 24 24 24 24 3 3 3 3 3 24 24 24 24 24 24 24 24 24 24 24", "24 24 24 0 24 24 24 24 24 24 24 24 3 3 3 3 3 24 24 24 24 24 24 24 24 24 24 24",
"24 26 24 24 26 24 24 24 24 24 24 24 3 24 26 24 24 24 24 24 24 24 24 24 24 24 24 24", "24 0 24 24 0 24 24 24 24 24 24 24 3 24 0 24 24 24 24 24 24 24 24 24 24 24 24 24",
"24 26 24 24 24 24 24 24 24 24 24 24 3 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", "24 0 24 24 24 24 24 24 24 24 24 24 3 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24",
"24 24 24 24 24 24 24 24 24 24 24 24 3 24 24 24 26 24 24 24 24 24 24 24 24 24 24 24", "24 24 24 24 24 24 24 24 24 24 24 24 3 24 24 24 0 24 24 24 24 24 24 24 24 24 24 24",
"24 24 24 24 24 24 24 24 24 24 24 24 3 24 26 24 24 24 24 24 24 24 24 24 24 24 24 24", "24 24 24 24 24 24 24 24 24 24 24 24 3 24 0 24 24 24 24 24 24 24 24 24 24 24 24 24",
" 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3", "3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3",
"24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", "24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24",
"24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 26 24 24 24 24 24", "24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 0 24 24 24 24 24",
"24 24 26 24 24 24 24 24 24 24 24 26 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", "24 24 0 24 24 24 24 24 24 24 24 0 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24",
"24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", "24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24",
"24 24 24 24 24 24 24 24 24 24 24 26 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", "24 24 24 24 24 24 24 24 24 24 24 0 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24",
"24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", "24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24",
"24 24 26 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", "24 24 0 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24",
"24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", "24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24",
"24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24" "24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24"
], ],
"Main": [ "Main": [
" . . . . . . . . . . . . . . . . . . . . . . . . . . . .", ". . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8", ". . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" 8 . . . . . . . . . . . . . . . . . . . . . . . . . . 8", "70 71 72 70 71 72 70 71 72 . . . 70 71 72 70 71 72 70 71 72 70 71 72 70 71 72 .",
" 8 . . . . . . 8 . . . . . . . . . . . . . . 11 . . . . 8", ". . . . . . . . . . . . . . . . . . . . . . 11 . . . . .",
" 8 . . 8 . . . . . . . . . . . . . . . . . . . . . . . 8", ". . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" 8 . . . . . . . . 25 . . . . . . . . . . . 8 . . . . . 8", "70 71 72 . . . . . . 25 . . . . . . . . . . . . . . . 70 71 72",
" 8 . . . . 8 . . . . . . . . 8 . . . . . . . . . 11 11 11 8", ". . . . . . . . . . . . . 70 71 72 . . . . . . . . 11 11 11 .",
" 8 . . . . . . . . . . . . . . . . 25 . . . . . . 11 11 11 8", ". . . . . . . . . . . . . . . . . 25 . . . . . . 11 11 128 129",
" . . . . . . . . . . . . . . . . . . . . . . . . . . 27 8", ". . . . . . . . . . . . . . . . . . . . . . . . . . 27 130",
" 8 . . . . . . . . . . . . . . . . . . . . . . . 11 11 11 8", ". . . . . . . . . . . . . . . . . . . . . . . . 11 11 11 .",
" 8 . . . . . 8 . . . . . . . . 11 . . . 8 . . . . 11 11 11 8", ". . . . . 70 71 72 . . . . . . . 11 . . . . . . . . 11 11 11 .",
" 8 . . . . . . . . . 8 . . . . . . . . . . . . . . . . 8", ". . . . . . . . . 70 71 72 . . . . . . . . . . . . . . . .",
" 8 . . . 8 . . . . . . . . . . . 8 . . . . . . 8 . . . 8", "70 71 72 . . . . . . . . . . . . . . . . . . . . . . . . .",
" 8 . . . . . . . . . . . . . . . . . . . 25 . . . . . . 8", ". . . . . . . . . . . . . . . . . . . . 25 . . . . 70 71 72",
" 8 . 25 . . . . . 8 . . . . . . . . . . . . . . . . . . 8", ". . 25 . . . . 70 71 72 . . . . . . . . . . . . . . . . . .",
" 8 . . . . . . . . . . . . . . . . . 8 . . . . . . 8 . 8", ". . . . . . . . . . . . . . . . . 70 71 72 . . . . . . . .",
" 8 . . . . . . . . . . . . . . . . . . . . . . . . . . 8", ". . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8" "70 71 72 70 71 72 70 71 72 70 71 72 70 71 72 . . . . . . 70 71 72 . . . ."
], ],
"Front": [ "Front": [
" 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9", "64 65 66 64 65 66 64 65 66 . . . 64 65 66 64 65 66 64 65 66 64 65 66 64 65 66 .",
" 9 . . . . . . . . . . . . . . . . . . . . . . . . . . 9", "67 68 69 67 68 69 67 68 69 . . . 67 68 69 67 68 69 67 68 69 67 68 69 67 68 69 .",
" 9 . . . . . . 9 . . . . . . . . . . . . . . . . . . . 9", ". . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" 9 . . 9 . . . . . . . . . . . . . . . . . . . . . . . 9", "64 65 66 . . . . . . . . . . . . . . . . . . . . . . 64 65 66",
" 9 . . . . . . . . . . . . . . . . . . . . 9 . . . . . 9", "67 68 69 . . . . . . . . . . 64 65 66 . . . . . . . . . 67 68 69",
" 9 . . . . 9 . . . . . . . . 9 . . . . . . . . . . . . 9", ". . . . . . . . . . . . . 67 68 69 . . . . . . . . . . . .",
" 9 . . . . . . . . . . . . . . . . . . . . . . . . . . 9", ". . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", ". . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" 9 . . . . . . . . . . . . . . . . . . . . . . . . . . 9", ". . . . . 64 65 66 . . . . . . . . . . . . . . . . . . . .",
" 9 . 22 22 . . 9 . . . . . . . . . . . . 9 . . . . . . . 9", ". . 22 22 . 67 68 69 . 64 65 66 . . . . . . . . . . . . . . . .",
" 9 . . . . . . . . . 9 . . . . . . . . . . . . . . . . 9", "64 65 66 . . . . . . 67 68 69 . . . . . . . . . . . . . . . .",
" 9 . . . 9 . . . . . . . . . . . 9 . . . . . . 9 . . . 9", "67 68 69 . . . . . . . . . . . . . . . . . . . . . . 64 65 66",
" 9 . . . . . . . . . . . . . . . . . . . . . . . . . . 9", ". . . . . . . 64 65 66 . . . . . . . . . . . . . . . 67 68 69",
" 9 . . . . . . . 9 . . 22 22 22 . . . . . . . . . . . . . 9", ". . . . . . . 67 68 69 . 22 22 22 . . . 64 65 66 . . . . . . . .",
" 9 . . . . . . . . . . . . . . . . . 9 . . . . . . 9 . 9", ". . . . . . . . . . . . . . . . . 67 68 69 . . . . . . . .",
" 9 . . . . . . . . . . . . . . . . . . . . . . . . . . 9", "64 65 66 64 65 66 64 65 66 64 65 66 64 65 66 . . . . . . 64 65 66 . . . .",
" 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9", "67 68 69 67 68 69 67 68 69 67 68 69 67 68 69 . . . . . . 67 68 69 . . . .",
" . . . . . . . . . . . . . . . . . . . . . . . . . . . ." ". . . . . . . . . . . . . . . . . . . . . . . . . . . ."
] ]
}, },
"Collision": [ "Collision": [
"............................", "............................",
"............................", "#..........................#",
"............................", "#..........................#",
"............................", "#..........................#",
"............................", "#..........................#",
"............................", "#..........................#",
"............................", "#..........................#",
"............................", "#..........................#",
"..........................#.", "..........................##",
"............................", "#..........................#",
"............................", "#..........................#",
"............................", "#..........................#",
"............................", "#..........................#",
"............................", "#..........................#",
"............................", "#..........................#",
"............................", "#..........................#",
"............................", "#..........................#",
"............................" "############################"
], ],
"Spawn": { "Spawn": {
"X": 1, "X": 1,
"Y": 8, "Y": 8,
"Dir": "Right" "Dir": "Right"
}, },
"Events": [
{
"Id": "to_village",
"X": 0,
"Y": 8,
"Trigger": "Touch",
"Teleport": {
"Map": "rpg_village",
"X": 30,
"Y": 9,
"Dir": "Left"
}
},
{
"Id": "wolf_boss",
"X": 25,
"Y": 8,
"Sprite": "village/wolf",
"Dir": "Left",
"Scenario": "rpg_demo/events/wolf_boss",
"Condition": "rpg_wolf_dead != 1"
},
{
"Id": "chest",
"X": 16,
"Y": 3,
"Tile": 14,
"Scenario": "rpg_demo/events/forest_chest",
"Condition": "rpg_forest_chest != 1"
},
{
"Id": "chest_open",
"X": 16,
"Y": 3,
"Tile": 15,
"Scenario": "rpg_demo/events/chest_empty",
"Condition": "rpg_forest_chest == 1"
},
{
"Id": "slime",
"X": 10,
"Y": 8,
"Sprite": "village/slime",
"Scenario": "rpg_demo/events/slime",
"Condition": "rpg_path_slime != 1"
},
{
"Id": "pick_branches_1",
"X": 6,
"Y": 5,
"Tile": 32,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_branches",
"Commands": [
"flag rpg_pick_branches_1 1",
"end"
],
"Condition": "rpg_pick_branches_1 != 1"
},
{
"Id": "pick_branches_2",
"X": 9,
"Y": 2,
"Tile": 32,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_branches",
"Commands": [
"flag rpg_pick_branches_2 1",
"end"
],
"Condition": "rpg_pick_branches_2 != 1"
},
{
"Id": "pick_branches_3",
"X": 20,
"Y": 6,
"Tile": 32,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_branches",
"Commands": [
"flag rpg_pick_branches_3 1",
"end"
],
"Condition": "rpg_pick_branches_3 != 1"
},
{
"Id": "pick_branches_4",
"X": 12,
"Y": 12,
"Tile": 32,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_branches",
"Commands": [
"flag rpg_pick_branches_4 1",
"end"
],
"Condition": "rpg_pick_branches_4 != 1"
},
{
"Id": "pick_branches_5",
"X": 23,
"Y": 14,
"Tile": 32,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_branches",
"Commands": [
"flag rpg_pick_branches_5 1",
"end"
],
"Condition": "rpg_pick_branches_5 != 1"
},
{
"Id": "pick_stones_1",
"X": 11,
"Y": 3,
"Tile": 33,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_stones",
"Commands": [
"flag rpg_pick_stones_1 1",
"end"
],
"Condition": "rpg_pick_stones_1 != 1"
},
{
"Id": "pick_stones_2",
"X": 21,
"Y": 7,
"Tile": 33,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_stones",
"Commands": [
"flag rpg_pick_stones_2 1",
"end"
],
"Condition": "rpg_pick_stones_2 != 1"
},
{
"Id": "pick_stones_3",
"X": 24,
"Y": 12,
"Tile": 33,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_stones",
"Commands": [
"flag rpg_pick_stones_3 1",
"end"
],
"Condition": "rpg_pick_stones_3 != 1"
},
{
"Id": "pick_stones_4",
"X": 26,
"Y": 15,
"Tile": 33,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_stones",
"Commands": [
"flag rpg_pick_stones_4 1",
"end"
],
"Condition": "rpg_pick_stones_4 != 1"
},
{
"Id": "pick_stones_5",
"X": 14,
"Y": 9,
"Tile": 33,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_stones",
"Commands": [
"flag rpg_pick_stones_5 1",
"end"
],
"Condition": "rpg_pick_stones_5 != 1"
},
{
"Id": "pick_mushroom_1",
"X": 10,
"Y": 3,
"Tile": 34,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_mushroom",
"Commands": [
"flag rpg_pick_mushroom_1 1",
"end"
],
"Condition": "rpg_pick_mushroom_1 != 1"
},
{
"Id": "pick_mushroom_2",
"X": 23,
"Y": 7,
"Tile": 34,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_mushroom",
"Commands": [
"flag rpg_pick_mushroom_2 1",
"end"
],
"Condition": "rpg_pick_mushroom_2 != 1"
},
{
"Id": "pick_mushroom_3",
"X": 21,
"Y": 14,
"Tile": 34,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_mushroom",
"Commands": [
"flag rpg_pick_mushroom_3 1",
"end"
],
"Condition": "rpg_pick_mushroom_3 != 1"
},
{
"Id": "pick_mushroom_4",
"X": 2,
"Y": 13,
"Tile": 34,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_mushroom",
"Commands": [
"flag rpg_pick_mushroom_4 1",
"end"
],
"Condition": "rpg_pick_mushroom_4 != 1"
},
{
"Id": "pick_mushroom_5",
"X": 20,
"Y": 5,
"Tile": 34,
"Trigger": "Touch",
"Solid": false,
"Scenario": "rpg_demo/events/pick_mushroom",
"Commands": [
"flag rpg_pick_mushroom_5 1",
"end"
],
"Condition": "rpg_pick_mushroom_5 != 1"
}
],
"Encounters": { "Encounters": {
"Steps": 28, "Steps": 48,
"Groups": [ "Groups": [
"rpg_slime", "rpg_slime",
"rpg_slime,rpg_slime" "rpg_slime,rpg_slime"
] ]
} },
"Atmosphere": "woodland"
} }
] ]
} }
+72 -128
View File
@@ -10,148 +10,92 @@
"Zoom": 2, "Zoom": 2,
"Layers": { "Layers": {
"Back": [ "Back": [
" 1 0 0 0 0 0 0 0 1 2 0 0 0 2 0 0 0 0 0 2 2 0 0 0 0 0 2 0 0 0 0 0", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0",
" 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0",
" 0 0 0 0 0 0 0 2 2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0",
" 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 1 0 0 0 0 0 0 0 0 1 2 2 0 0", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0",
" 1 0 0 1 1 0 1 0 0 0 0 0 2 0 0 0 1 0 0 0 0 0 2 2 1 0 1 0 0 0 0 0", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0",
" 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 2 0 2 0 0 0 1 0 0 0 0 0 0", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0",
" 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0",
" 0 0 0 0 0 0 3 0 0 0 1 6 6 6 6 6 6 6 6 6 0 3 0 0 1 0 0 0 0 0 0 0", "0 0 0 0 0 0 3 0 0 0 0 3 3 3 3 3 3 3 3 3 0 3 0 0 0 0 0 0 0 0 0 0",
" 0 2 0 1 1 0 3 0 0 0 1 6 6 6 6 6 6 6 6 6 0 3 1 0 2 2 0 0 0 0 0 1", "0 0 0 0 0 0 3 0 0 0 0 3 3 3 3 3 3 3 3 3 0 3 0 0 0 0 0 0 0 0 0 0",
" 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3", "3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3",
" 0 2 0 1 0 1 1 0 0 0 0 6 6 6 6 6 6 6 6 6 0 0 1 0 0 0 0 1 0 2 0 0", "0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0",
" 0 0 0 0 0 1 0 1 0 0 0 6 6 6 6 6 6 6 6 6 0 2 0 0 0 1 0 1 1 0 0 0", "0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0",
" 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 2 1 0 30 30 30 30 30 30 30 0 0", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 40 40 40 40 40 0 0 0",
" 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 3 1 0 2 0 0 0 0 5 5 5 5 5 5 5 0 0", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 40 40 40 40 40 40 40 0 0",
" 0 0 0 0 1 0 1 0 0 1 0 0 1 0 0 3 2 0 0 2 0 0 0 5 5 5 5 5 5 5 0 0", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 40 40 40 40 40 40 40 40 0 0",
" 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 3 1 0 0 0 0 0 0 5 5 5 5 5 5 5 0 0", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 40 40 40 40 40 40 40 0 0",
" 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 2 0 0 0 5 5 5 5 5 5 5 0 0", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 40 40 40 40 0 0 0 0",
" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 0" "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"
], ],
"Main": [ "Main": [
" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" 8 . . . 19 19 19 19 19 19 . . . . . . . . . 19 19 19 19 19 19 . . . . . . 8", "70 71 72 . 80 81 82 83 84 85 . . 70 71 72 70 71 72 . 80 81 82 83 84 85 . . 70 71 72 . .",
" 8 . . . 19 19 19 19 19 19 . . . . . . . . . 19 19 19 19 19 19 . . . . . . 8", ". . . . 86 87 88 89 90 91 . . . . . . . . . 86 87 88 89 90 91 . . . . . . .",
" 8 . . . 20 20 20 20 20 20 . . . . . . . . . 20 20 20 20 20 20 . . 10 . . . 8", ". . . . 92 93 94 95 96 97 . . . . . . . . . 92 93 94 95 96 97 . . 10 . . . .",
" 8 . . . 16 17 16 16 17 16 . . . . . . . . . 16 17 16 16 17 16 . . . . . . 8", "70 71 72 . 98 99 100 101 102 103 . . . . . . . . . 98 99 100 101 102 103 . . . . . . .",
" 8 . . . 16 16 18 16 16 16 . . . . . . . . . 16 16 18 16 16 16 . . . 10 . . 8", ". . . . 104 105 106 107 108 109 . . . . . . . . . 104 105 106 107 108 109 . . . 10 70 71 72",
" 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" 8 . . . . . . . . . . . 28 . . . . . 28 . . . . . . . . . . . . 8", "70 71 72 . . . . . . . . . 28 . . . . . 28 . . . . . . . . . . . . .",
" 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" 8 . . . . . . . . 10 . . . . . . . . . 31 31 . . . . . . . . . . 8", "70 71 72 . . . . . . 10 . . . . . . . . . . . . . . . . . . . . . .",
" 8 . . . . . . . . . . . . . 23 . . . . . . . . . . . . . . . . 8", ". . . . . . . . . . . . . . 23 . . . . . . . . . . . . . . 70 71 72",
" 8 . 12 12 12 12 12 12 12 . . . . . . . . . . . . . . . . . . . . . . 8", ". . 12 12 12 12 12 12 12 . . . . . . . . . . . . . . . . . . . . . . .",
" 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" 8 . . 10 . . . . . . 10 . . . . . . . . . . . . . . . . . . . . 8", ". . . 10 . . . . . . 10 . . . . . . . . . . . . . . . . . . 70 71 72",
" 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8", "70 71 72 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 . 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8" ". . . . . . . . . . . . 70 71 72 70 71 72 . . . 70 71 72 70 71 72 . . . . ."
], ],
"Front": [ "Front": [
" 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9", "64 65 66 . . . . . . . . . 64 65 66 64 65 66 . . . . . . . . . 64 65 66 . .",
" 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", "67 68 69 . . . . . . . . . 67 68 69 67 68 69 . . . . . . . . . 67 68 69 . .",
" 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", "64 65 66 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", "67 68 69 . . . . . . . . . . . . . . . . . . . . . . . . . . 64 65 66",
" 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 68 69",
" 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", "64 65 66 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" 9 . . . . . . . . . . . 29 . . . . . 29 . . . . . . . . . . . . 9", "67 68 69 . . . . . . . . . 29 . . . . . 29 . . . . . . . . . . . . .",
" 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", "64 65 66 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", "67 68 69 . . . . . . . . . . . . . . . . . . . . . . . . . . 64 65 66",
" 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 68 69",
" 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .",
" 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 65 66",
" 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", "64 65 66 . . . . . . . . . . . . . . . . . . . . . . . . . . 67 68 69",
" 9 . . . . . . . . . . . . . . . . . . . 22 . . . . . . . . . . 9", "67 68 69 . . . . . . . . . 64 65 66 64 65 66 . . 22 64 65 66 64 65 66 . . . . .",
" 9 9 9 9 22 22 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9", ". . . . 22 22 . . . . . . 67 68 69 67 68 69 . . . 67 68 69 67 68 69 . . . . .",
" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ." ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ."
] ]
}, },
"Collision": [ "Collision": [
"................................", "................................",
"................................", "#..............................#",
"................................", "#..............................#",
"................................", "#..............................#",
"................................", "#..............................#",
"................................", "#..............................#",
"................................", "#.....o..............o.........#",
"................................", "#..............................#",
"................................", "#..............................#",
"................................", "o...............................",
"................................", "#..............................#",
"................................", "#..............................#",
"................................", "#..............................#",
"................................", "#..............................#",
"................................", "#..............................#",
"................................", "#..............................#",
"................................", "#..............................#",
"...............#................" "################################"
], ],
"Spawn": { "Spawn": {
"X": 15, "X": 15,
"Y": 14, "Y": 14,
"Dir": "Up" "Dir": "Up"
}, },
"Events": [ "Atmosphere": "woodland"
{
"Id": "door_elder",
"X": 6,
"Y": 6,
"Trigger": "Touch",
"Teleport": {
"Map": "rpg_elder_house",
"X": 6,
"Y": 8,
"Dir": "Up"
}
},
{
"Id": "door_merchant",
"X": 21,
"Y": 6,
"Trigger": "Action",
"Solid": true,
"Scenario": "rpg_demo/events/locked_door"
},
{
"Id": "to_forest",
"X": 31,
"Y": 9,
"Trigger": "Touch",
"Teleport": {
"Map": "rpg_forest",
"X": 1,
"Y": 8,
"Dir": "Right"
}
},
{
"Id": "sign",
"X": 16,
"Y": 11,
"Tile": 13,
"Scenario": "rpg_demo/events/village_sign"
},
{
"Id": "villager",
"X": 9,
"Y": 10,
"Sprite": "village/villager",
"Dir": "Down",
"Scenario": "rpg_demo/events/villager"
},
{
"Id": "merchant",
"X": 22,
"Y": 8,
"Sprite": "village/merchant",
"Dir": "Left",
"Scenario": "rpg_demo/events/merchant"
}
]
} }
] ]
} }