
开发者制作的快速自定义关卡指南 概述 《Recursed》中的关卡以简单的Lua脚本形式存储。你可以使用文本编辑器创建和编辑这些脚本,且无需具备深入的Lua知识。了解基本的脚本编写、文本编辑以及文件/目录操作知识会有所帮助。 提示:本指南包含大量剧透! 创建简单关卡 将脚本添加到游戏的自定义任务目录即可制作简单关卡。 在你的Steam库中右键点击《Recursed》,然后点击属性。进入浏览本地文件...并点击它以打开《Recursed》的安装文件夹。

从这里开始,你需要导航到自定义任务目录。 如果你使用的是MacOS系统,需要进入Recursed.app程序包,然后在Recursed.app/Contents/Resources/custom/missions路径下找到自定义任务文件夹。 如果你使用的是Windows或Linux系统,数据文件夹应位于custom/missions目录下。 在自定义任务文件夹中,创建一个文本文件并命名,例如mylevel.lua。扩展名为.lua是必须的。 在该文本文件中,复制粘贴以下起始脚本: local wip = { o = "solid", ["-"] = "ledge", w = "water", a = "acid", b = "buoy" } function start() oooooooooooooooooooo o..................o o..................o o..................o o..................o o..................o o..................o o..................o o..................o o..................o o..................o o..................o o..................o oooooooooooooooooooo oooooooooooooooooooo ]]) 生成【玩家】,坐标6,12 生成【水晶】,坐标14,8.5 结束 游玩关卡 游玩关卡很简单。 如果你开始游戏,并进入【枢纽】(从第一组关卡右上角可进入的区域选择宝箱),会出现一个新的罐子。在这个罐子里你可以找到你的自定义任务。


提示:当存在自定义关卡时,枢纽点将始终开放! 关卡脚本说明 上面的关卡脚本非常简单。它只是一个包含玩家和水晶的空房间。让我们了解它的工作原理。 local wip = { o = "solid", ["-"] = "ledge", w = "water", a = "acid", b = "buoy" } 关卡的图形和行为由方块定义。如果某个关卡未指定方块,将使用“wip”(工作进度)方块。这些方块在tiles目录下名为wip.lua的文件中声明。它声明了以下方块: solid - 无法穿过。 ledge - 此方块的顶部边缘会阻挡玩家。 water - 水方块,进入此方块的宝箱会被淹没。 acid - 遗迹关卡中的酸液。浮标 - 另一种实体方块,用于在被淹没的关卡中标出漂浮方块。 故障块 - 另一种实体方块,用于设计悖论区域和故障区域的样式。 湿壁架 - 看起来像水下壁架,但属于实体方块,以便物品在被淹没环境中正常运作。 脚本的第一行创建了一个包含五个实用方块的表格。表格将这些方块映射为单个字符名称。这样关卡就可以用ASCII艺术风格绘制。注意,在Lua中创建带有非字母名称的表格条目时,需要使用["#"]形式的特殊语法(例如,壁架方块通过这种方式映射为减号字符)。 function start() ... end 脚本的下一部分是一个名为start的函数。每个房间都是一个函数,而关卡总是从名为start的房间开始。提示:绘制所有方块的地图会很有用,即使你在本关卡中不会全部用到它们。 ——第一关。基础堆叠与水晶收集。 local cave = { ["7"] = "box_ul", ["8"] = "box_u", ["9"] = "box_ur", ["4"] = "box_l", ["o"] = "box_c1", ["O"] = "box_c2", ["6"] = "box_r", ["1"] = "box_dl", ["2"] = "box_d", ["3"] = "box_dr", ["u"] = "stal_cap", ["|"] = "stal_c", ["v"] = "stal_d", ["x"] = "block" } function start() |v|v||.|v.v.v|v||.|| |.v.|v.v.....v.|v.v| u...v..........v...| 9..................u 6..................7 6..................4 6..................4 3..................1 9..................7 6..................4 6.....78897889.....4 3.....4oo64oO6.....4 9...794oO64Oo6..7891 37894612234Oo6xx4o67 94o64679791223791234 ]]) 生成玩家,坐标2.5,9 生成箱子,坐标6.5,9 生成箱子,坐标11.5,9 生成箱子,坐标11.9,8 生成水晶,坐标10,2.75 生成唱片,坐标15,12.5,路径为sounds/voices/c1 结束 tiles = "tiles/cave" pattern = "backgrounds/checker" dark = { 0.17, 0.19, 0.48 } light = { 0.22, 0.24, 0.62 } 关卡设计提示 玩家可以跳三个方块高,持有物品时能跳两个方块高。 玩家身高为两个方块,但所有物品都能放入单个方块空间。 如果关卡中有绿色箱子(或绿色软泥),则很可能需要一个废弃房间。 如果关卡中有软泥和罐子,则需要一个故障房间。在悬垂下方添加水时,如果先放置悬垂再放置水,水面效果将不会出现。 钥匙/锁、箱子和水的机制都非常相似,通常可以互换使用以解决设计问题。 保持关卡宽敞,而非杂乱。 保持背景色调柔和,以便 puzzle 元素清晰可见。 由于关卡是脚本,因此可以使用标准的 Lua 语法,如循环和条件语句。 如果房间未显示,游戏仅显示背景,这是因为房间不存在或玩家卡在墙内。 将关卡添加到枢纽 游戏运行一个名为 nexus.lua(其他语言版本为 nexus-xx.lua)的脚本来填充菜单。该脚本可以调用其他脚本,更新任务就是通过这种方式添加的。菜单脚本包含每个屏幕的功能。这些功能会添加各种“钉桩”,它们可以是宝箱、返回按钮、书籍等。脚本中的示例行如下: Add(4, 7.5, Peg.Level, 0, "missions/basic1", "Entryway") 此行会在坐标4, 7.5(屏幕尺寸为20, 15)处添加一个关卡(宝箱)。解锁该关卡需要收集0个水晶。它会运行“missions/basic1”关卡,并在游戏中显示名称“Entryway”。 每个独立脚本分别追踪水晶和钻石。 总结 如果您有任何问题或意见,或者有任何精彩关卡想要展示,请在Recursed讨论区发布。创建房间时可调用三个函数。 它还接收坐标参数,不过通常使用坐标0,0。 Spawn函数用于创建对象。在我们的示例中,它被调用两次,分别创建玩家和水晶。该函数接收对象类型(字符串)和坐标作为参数。 Global函数与Spawn函数作用相同,但创建的对象会带有绿色附魔效果。并非所有对象都能通过Global函数正确生成。 尽量避免将瓦片映射到字符[和],因为它们是Lua使用的分隔符。确保【[分隔符后没有空格字符,否则系统会将其视为关卡的第一行。 提示:任何未映射的字符都不会对关卡产生影响。在此示例中,我使用了句点。 添加另一个房间 示例关卡过于简单。让我们让它变得稍微复杂一些。 在起始房间的生成区域添加以下行: Spawn("chest", 10, 12.5, "pool") 这将添加一个箱子,该箱子会尝试进入一个名为“pool”的新房间。这个关卡中可以有一个水池。如果你需要,这里有一个示例,但我鼓励你尝试自己设计。 function pool() oooooooooooooooooooo o..................o o..................o o..................o o..................o o..................o o生成玩家(6,8) 结束 添加可淹没房间 当房间被淹没时,其运行方式会略有不同。系统会向函数传递一个变量,该变量在宝箱处于水下时会判定为真。之后可以调整房间的构建方式,使其呈现出“被淹没”的外观。 提示:无法判断宝箱是被酸液还是水淹没,因为我觉得同时出现两种液体可能会让玩家感到有些困惑。 如果缺少该参数,或者房间未对该参数做出反应,那么当在水下打开房间时,房间将不会被淹没。这是一个可被淹没房间的示例。尝试将其添加回同一关卡来创建一个简单谜题:将一个箱子放入水池中并淹没它,然后游向水晶。 提示:你可以多次调用【应用砖块】功能。先创建关卡布局,然后在其上方放置水,这样可能会更简单。 函数 bucket(wet) 如果 wet 为真 应用砖块(wip, 0, 0, [[ oooooooooooooooooooo owwwwwwwwwwwwwwwwwwwo owwwwwwwwwwwwwwwwwwwo owwwwwwwwwwwwwwwwwwwo owwwwwwwwwwwwwwwwwwwo owwwwwwwwwwwwooowwwo owwwwwwwwwwwwwwwwwwwo owwwwwwwwwwwwwwwwwwwo owwwwwwwwwwwwwwwwwwwo owwwwwwwwwwwwwwwwwwwo owwwwwwwwwwwwwwwwwwwo owwwwwwwwwwwwwwwwwwwo owwwwwwwwwwwwwwwwwwwo oooooooooooooooooooo oooooooooooooooooooo ]]) 否则 应用砖块(wip, 0, 0, [[ oooooooooooooooooooo o..................o o..................o o..................物体 可放置多种不同物体。以下是相关参考。 物体名称 描述 是否可全局 离地高度 参数 玩家 玩家,在子房间中为粉色光晕。 否 1 无 方块 供玩家站立的灰色方块。 是 0.5 无 钥匙 标准金钥匙。 是 0.5 无 锁 上锁的门。 是 1.5 无 箱子 通往另一个房间(或同一房间)的箱子。 是 0.5 房间名称。产出物:产生罐子的绿色光芒。否 1 无 水晶:结束关卡的紫色水晶。否 1.5 无 钻石:在悖论区域结束关卡的白色钻石。否 1.5 无 唱片:叙事环。否 0.5 叙事资源的路径 风扇:来自悖论区域的风扇。是 0.5 无 飞鸟:重生飞鸟的生成位置。否 1 一个包含对象ID的表格,只有当这些对象ID存在时飞鸟才不会生成 核心:最终谜题的能量核心。否(但实际上是)0.5 无 通用物:欧泊莱克。是 0.5 无 特殊房间名称 有三个特殊房间名称。 名称 使用场景 start 关卡开始的房间。 reject 发生悖论时关卡重启的房间。故障:当通过黏液生成一个无法通向任何地方的罐子时,会被推入的房间。 这些房间和其他房间一样普通。例如,你可以制作一个能递归回到起始房间的箱子。 让关卡更具风格 当你使用WIP tiles设计好一个不错的关卡后,下一步就是让它看起来更美观多彩。这分为两个步骤。 tiles WIP tileset位于data/tiles/wip.lua和wip.png中。你可以使用游戏中的其他tiles,或者以同样的方式创建自己的tiles。要使用替代tiles,你需要执行以下步骤: 选择或创建一个tile图像/脚本。 为你想要使用的tiles添加映射,将它们分配给单个字符。你可以使用多个映射。 在脚本的顶层,必须将tiles变量设置为脚本文件的名称。默认情况下为【tiles/wip】。 背景 可以通过向脚本添加三个额外变量来设置背景。 pattern应设置为背景图像的位置。背景图像是一个垂直排列的方形图像列表,其中第一个是亮/暗图案,其余是在背景中平铺的图案。此图像仅使用红色通道。 dark给出背景暗区的RGB值(归一化形式)。 light给出亮区的RGB值。 举个例子,这是游戏中第一关的脚本。通过查看其他关卡脚本可以找到更多示例。
2026-03-20 01:00:15 发布在
Recursed
说点好听的...
收藏
0
0
