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_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 编辑器工具中的地图编辑器。
出问题了怎么办
- 门没有反应。
Touch门在你踩上去时触发;Action门需要面向它按 E 或 F。 - 怪物或宝箱复活了。 它的
Condition必须检查剧本所设置的同一个标志位。 - 商店是空的。 游戏中必须包含 trading 模组,且剧本里的商店 id 必须与
shops/village_merchant.json一致。



