93 lines
6.5 KiB
Markdown
93 lines
6.5 KiB
Markdown
# 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.
|
||
|
||

|
||
|
||
## 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.
|
||
|
||

|
||
|
||

|
||
|
||

|
||
|
||
## 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`.
|