Files
mod_rpg_demo_game/docs/zh.md
T

5.2 KiB

RPG Demo — 一个小小的图块世界

RPG Demo 是一段短小而完整的图块地图冒险:灰森林旁的一座村庄、村长的家,以及洞穴里住着一只狼的森林。你用键盘行走、与人们交谈、开宝箱、在森林里采集,再把东西卖给商人,然后战斗。它只由数据文件和剧本构成——没有一行代码——因此同时也是“一款图块地图游戏是如何组装起来的”的现成示例。

这个演示没有自己的游戏卡片:它是 RPG Plus 游戏的世界,RPG Plus 包含本模组并在其之上扩建。从“开始游戏 → RPG Plus → 新游戏”进入:走完 RPG Plus 简短的岔路口序章后,你就会抵达这座村庄。下面的截图来自 RPG Plus,所以其中一些人和商品是那个游戏加上的。

夜晚的灰森林旁村庄:房屋、亮着灯的石板广场、村民、池塘,以及小路上的英雄。

玩法

  • 用 WASD 或方向键行走,按 Shift 奔跑。
  • 面对人物或物件时按 E 或 F 交谈、打开、阅读。
  • 走到门口或路的边缘,就会被传送到下一张地图。

剧情:村长请你赶走盘踞在村庄东边洞穴旁的狼。经过池塘,沿着林间小路,解决挡路的史莱姆,然后与狼正面对决。狼被击败后,村长会谢谢你——用他自己的方式。

世界里有什么

  • 三张地图。 村庄(32×18 图块)、村长的家和灰森林,全部用 Village Pack 的村庄图块集绘制。
  • 人物。 村长发放并完结任务,村民闲聊,一块路牌写着村庄的名字;有一扇门锁着。
  • 宝箱。 村长家里一个、森林里一个;打开后保持敞开。
  • 森林采集。 小路沿线散落着柴火、石头和森林蘑菇;每个采集点只能采一次。一朵蘑菇恢复 5 点生命。
  • 商人。 以 10 枚硬币出售药剂(恢复 20 点生命),并以 1 枚收购柴火、2 枚收购石头。
  • 战斗。 挡路的史莱姆和洞穴旁的狼都显示在地图上,与之交谈就会开战。在森林里,大约每走 48 步会遇到一次随机战斗,对手是一到两只史莱姆。

灰森林:通向狼所在洞穴的小路,一个宝箱、石头、蘑菇,以及挡路的史莱姆。

商人的店:左边是商品,中间是选中的药剂及其价格和购买按钮,右边是你的背包。RPG Plus 给这家店添加了更多商品。

一场与史莱姆的战斗:英雄在左下角,史莱姆在上方,战斗记录在右侧。

给模组作者:它是怎么搭起来的

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/                   七种语言的名称和剧本翻译

地图是叠在图块集上的多层图块编号网格,带有自己的名称、尺寸和缩放。森林地图还列出了它的随机遭遇:

"Encounters": {
  "Steps": 48,
  "Groups": ["rpg_slime", "rpg_slime,rpg_slime"]
}

事件是放在图块上的东西。带 "Trigger": "Touch" 的门负责传送;怪物会运行一段剧本,并在自己的标志位被设置后消失:

{
  "Id": "wolf_boss",
  "X": 25,
  "Y": 8,
  "Sprite": "village/wolf",
  "Dir": "Left",
  "Scenario": "rpg_demo/events/wolf_boss",
  "Condition": "rpg_wolf_dead != 1"
}

剧本说出台词并开始战斗;获胜后设置标志位:

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 中,所以游戏会按界面语言显示它们:

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 一致。