【饥荒mod】饥荒系列教程-地图制作方法

声明

本文所述皆为实践过程中产生的经验,基本覆盖了从零开始构建mod的相关方法以及思路,文中所介绍的所有内容皆出自作者理解,有可取之处也有一定局限性,请读者以实践所得结论为准。

文章从如何解决一个问题的角度记录mod制作过程中可能遇到的问题以及解决方案,因此文章适合任意一个同学,当然有编程基础食用更佳,对于没有编程基础的同学,建议结合菜鸟教程-lua一起食用。

写作时间:2022/10/22

游戏版本(生成版本ID):Don't Starve Togather-9775009

[编程接口版本(API)](应用程序编程接口_百度百科 (baidu.com)):10

tips:

游戏版本查看方式:

抛砖引玉

相信上一篇文章在坐的各位都懂了,那此时若要请各位同学按自己的想法自己造一个地图出来这合理么?显然不合理。为什么?这就好比给我一堆铁矿然后要让我造一个挖掘机去把张三家的房子推平了。

这不合理.gif

为了推张三的房子还必须去一波蓝翔,但想自己造一个地图只需要关注计算机技工。先欣赏一下成果:

221031-1.png
221031-2.png

开门见山

将饥荒的地图视为一张画布,在上边描绘自己脑海里的风景的前提就是这张画布是空的,是一张白纸,这样被饥荒耽误的画家门才有机会大展拳脚。那么如何清理就是需要思考的问题。这里提供两种清理画布的方式,一种是创建法,另一种是覆盖法。限于篇幅,本文中主要给出创建法的描述。涉及的完整代码及资源可与博主联系,详见签名。

创建法

我愿称这种方法为“无中生有”。这种方法其实就是重建一个level,怎么创建呢?那就用到了到《【饥荒mod】你的舞台你做主- DIY地图》中知识,文中具体说明了创建一个新的level所需的资源以及创建没种资源的方法,这片文章中不再重复,我们需要把重点放在细节处理上,具体包括:代码组织、系统依赖两个方面。

  • 代码组织

    通常情况下为了代码易于维护和管理,会将代码根据模块进行划分,比如创建地图时需要的资源有room、task、taskset等,而这些资源都是可以随意添加和修改的,因此将没种资源单独命名为一个文件夹,每种具体的资源又根据资源名创建资源文件,比如这样:

221031-3.png

而每个具体的资源文件中的所有内容其实就是调用接口创建相关的资源,说白了就是copy & paste且不需要添加任何东西(斗宗强者可以修改),对于新手来说,建议除了对象的名称之外不要修改任何东西,可以获得更快的成就感。当然不按这种结构来划分代码也是可以的,即使所有代码全放在一个文件里也没问题,毕竟自己看着爽才是真的爽。

  • 系统依赖

    当把资源文件都开发(copy)完成后,就需要让各种资源都能互相看到,这涉及到一个关键性的文件:modworldgenmain.lua。这个文件是官方提供的mod加载入口,文件名一定不能写错,在这个文件中添加资源的请求会将mod中自定义的资源加载到全局,这样无论是游戏本身的逻辑还是mod中的逻辑想要访问mod中自定义的资源就都莫得问题了,请求类似这种:

    modimport("scripts/map/layouts/z_default_start")
    modimport("scripts/map/layouts/z_start_layout")
    modimport("scripts/map/location/z_location")
    modimport("scripts/map/rooms/z_room_1")
    modimport("scripts/map/tasks/z_task_1")
    modimport("scripts/map/tasksets/z_taskset_1")
    modimport("scripts/map/levels/z_level")
    

    由于自定义的mod中也会使用到系统的资源,比如WORLD_TILES对象,因此还需要在modworldgenmain.lua中导入相关的系统资源:

    require("constants")
    require("map/rooms")
    require("map/tasks")
    require("map/level")
    require("map/network")
    

    注意:require的路径是相对路径,该路径是相对于Don't Starve Together\data\scripts的。

    通常为了修改系统中已有的对象(增加一个属性或者修改某个属性的值或者删除属性),需要在modworldgenmain.lua中加入这样代码:

    GLOBAL.setmetatable(env,{__index=function(t,k) return GLOBAL.rawget(GLOBAL,k) end})
    

    当然一个完整的mod还需要一个描述文件:modinfo.lua,这个文件没啥好说的,建议联系博主(参见签名)获取完整的mod文件看一下。

就这么简单,创建法创建了使用创建法创建了一个属于你自己的map。那么,这就结束了么?

加载mod&选择预设

对于新手同学来说,如何将自己开发的mod运行起来似乎也是一个脑阔疼的问题。或许部分有基础的同学知道需要将mod根目录拷贝到Don't Starve Together\mods目录下即可,但是进入游戏勾选mod并自豪感爆棚的进入游戏想要验收一下胜利的果实的时候,却发现生成的地图还是系统自带的:

221031-4.png

这个时候先别骂我写的辣鸡教程毁青春,建议在勾选mod后进入森林界面选择预设之后再生成世界:

221031-5.png

注意:mod根目录指的是modworldgenmain.lua所在的目录

本篇内容到此结束。没错是真的结束,你问我怎么跟成果图不一致?别急,下篇文章就见分晓~

Happy Playing,我们下篇文章见~

你可能感兴趣的:(【饥荒mod】饥荒系列教程-地图制作方法)