沙盘引擎 (SEngine)

创意诞生沙盘世界,不止如此想象!

用户工具

站点工具


侧边栏

developer:mod:constitute

📚 模组开发流程

在《沙盘引擎》开发中,每个由开发者创造的衍生作品(游戏)均被习惯性称之为【模组】(或衍生作品)。

尽管《沙盘引擎》在尽可能的基础上简化了传统创意开发的流程,但是仍然需要开发者在准备开始制作之前,至少要理解部分沙盘引擎的思路和框架,以及最好可以自制思维导图等方式,以来对自己即将创作的玩法有一个相对系统的设计。

简单来讲,沙盘引擎为开发者封装好了许多方法和解决方案,但由于每个创意的细节都有不同的地方,所以需要开发者提前规划好应该使用哪种方式、功能来实现,尤其是针对世界端和客户端脚本方面的开发。

📒 开发准备

沙盘引擎在尽可能简化开发思维的基础上,为开发者提供了尽可能简便的开发流程和脚本API。

尽管如此,开发者仍然需要根据自身准备制作游戏的体量来进行预估,通常越复杂的游戏玩法可能需要考虑的情况越多。

举例:如果只想实现一个类似《绝地求生》的游戏,那么相对就简单很多,开发者只需要提前制作好地图(或使用其他适合的地图,引擎内通用),然后在编写脚本时设定角色复活后生成在一辆降落伞(载具)上,然后只需要运用引擎内置的默认机制,就可以实现绝大部分功能(因为沙盘引擎默认玩法就是RPG、开放世界生存),其他方面也可以使用API进行很方便的功能扩展。

再次强调,沙盘引擎更多意义上是一个工具,只有开发者基本熟悉了工具后,才能事半功倍的快速制作出游戏成品。

📒 模组目录及文件

在《沙盘引擎》游戏中,每个衍生模组(作品)都是以独立模组文件夹的方式存在的。

引擎目录下的Mods文件夹内放置着本地所有已存在的模组,你可以理解为每个文件夹就是一个不同的模组(虽然有可能内容一样或相似)。

特别注意:Mods文件夹内模组遵循com.example.app的命名标准(全英文),如果非此方式命名则无法被引擎识别。同时,此命名也是官方及大众认定模组的标准,建议正式发布后不要进行此名称的任何修改!

同时,必须避免和已存在的其他模组命名完全重复(尽管很难出现exampleapp名称都重复的情况)。

com example app
默认com(或拥有其他真实域名后缀,否则可保持默认) 开发者昵称或团队昵称(代号等) 模组名称(游戏通用统一名称)

例如:com.jackstudio.killer表示由jackstudio工作室制作的killer游戏。

📘 模组目录及文件

文件夹名 说明
Language 存放模组语言文件的目录
模组语言文件是在《沙盘引擎》原生语言基础上的扩展(详情可见游戏语言适配文档)
Map 存放模组必备地图文件的目录
Module 存放模组插件模块的目录
这是一个未来版本计划功能,可以把他暂时理解为代码功能性的MOD
当前版本无效
Script 存放模组脚本的目录,与代码相关的内容在这里
具体参考脚本开发——脚本开发说明文档
Store 存放模组内可能用到的扩展资源
通常指的是自定义图片、文本、音频、视频、其他文件等
文件名 说明
Config.json 模组的关键配置文件,一切和模组相关的配置内容
Cover.png 模组的封面图片,没有具体的尺寸要求,但比例最好接近
沙盘引擎将会在可能出现的地方或创意工坊使用此封面
(请遵守基础的规范和规定,不要出现令人不适的内容)
Developer.txt 模组的开发者名单,可以使用基础的HTML相关代码
此处文本内容主要是显示在由模组开发者调用API调出的沙盘引擎开发者界面
也就是引擎内置好的一个通用的开发者界面,当然开发者也可以自己使用UI的方式实现
除此之外,此文件暂时没有其他的作用
Icon.ico 模组的图标文件(ico格式)
会在模组加载完成后自动修改程序进程的图标
Licence.txt 模组自述&版权信息,当玩家本地检测此文件发生更新时,将会在下次进入主菜单时自动弹出
同时,也可以通过主菜单右下角按键点击查看

每个引擎的衍生模组文件夹内,都有着一些必要的文件组成,如果文件丢失可能会导致异常。

📘 Language文件夹

Language文件夹内包含着当前模组配置的语言文件,具体的语言文件其实要由开发者自行编写。

具体可参考模组开发——游戏语言适配文档。

📘 Map文件夹

有些模组可能玩法本身就支持绝大部分地图,而有些模组可能就需要特定地图才能发挥玩法(例如火车游戏,就必须要求地图内有火车内容)。

这就需要开发者将“模组官方地图”筛选放置到此文件夹内,届时引擎将会优先从此文件夹读取地图,而不是根目录下的Maps文件夹

为了用户角度考虑,如果开发者的模组没有专用地图要求,或者需求的地图是引擎内置地图(常规玩家本地Maps文件夹内存在),那么最好不要将这种重复性的地图放置到Map文件夹内,因为这可能会造成用户游戏目录最终的臃肿。

举例:《反恐精英1.6》是基于《半条命》衍生的模组,但显然半条命的地图大多不适合CS1.6的玩法,那么CS1.6开发者就将更适合CS玩法的地图放置到模组内的Map文件夹下。

反之亦然,如果某个游戏玩法并不挑选地图类型,那么就无须在模组Map文件夹内放置任何地图,只需要引导用户加载游戏目录Maps文件夹内的通用地图即可。

如果开发者只想限制模组仅使用指定的几个地图组,可通过代码或UI筛选等方式,限制玩家地图列表UI只出现期望的地图。

📘 Script文件夹

Script文件夹内通常只有关键的两个入口脚本,具体可参考脚本开发——脚本开发说明文档。

📘 Store文件夹

Store文件夹内放置着多个子文件夹及文件,通常包含模组内任何可能用到的外部自定义资源

考虑实际开发阶段,模组衍生作品肯定需要许多自定义的内容(如图片、二进制资源、音频、视频等),这就需要统一放置在Store文件夹内,并且按照指定的方式或规范进行文件命名。

文件夹名 说明
Font 字体文件夹
命名规范:与字体文件同名
GUI 游戏UI关键配置相关的文件夹
并不表示和UI有关的素材放到这里,UI素材仍然属于Texture(除非是FGUI的特定资源,需要放到这里)
命名规范:按具体引擎功能要求命名
Sound 声音、音频资源文件夹
只应该存放常见音频格式的文件(.mp3、.ogg、.wav等)
命名规范:s10000_SoundName.mp3(或其他格式)
为了区分引擎内声音和外部声音,所以自定义音频ID要求至少从10000开始
Texture 图片、贴图资源文件夹
命名规范:标准命名方式即可,最好是不会被轻易更改的文件名(因为引擎内直接用文件名查找使用)
Video 视频类资源文件夹
只应该存放常见视频格式的文件(.mp4、.ogv等)
命名规范:v10000_VideoName.mp4(或其他格式)
为了区分引擎内视频和外部视屏,所以自定义视频ID要求至少从10000开始
Model 模型资源文件夹
命名规范:m10000_ModelName.gltf

📒 Engine引擎目录

上文已经介绍过了不同模组的独立目录,实际上在引擎的根目录下还有一个Engine文件夹目录。

此目录内部结构几乎与模组目录结构完全一致,你可以简单理解为这个Engine也是一个模组文件夹,只不过是在没有加载任何模组或模组缺省内容的代替。

例如:如果独立模组目录没有icon.ico图标文件,那么实际上沙盘引擎就会读取在Engine文件夹下的icon.ico文件。

需要注意的是,Engine文件夹是十分关键的,除非你知道自己在做什么,否则不建议对此文件夹进行任何修改,因为此文件夹不止针对某个模组,而是任何基于引擎的模组都会生效。

除此之外,类似图标、开发者名单、默认文件(如NativeGUI)可能会在这里放置,有些关键内容并不会在这里放置(或修改无效)。

📒 模组工作空间

在实际模组开发或玩家运行过程中,模组始终是运行在一个“相对独立”的工作空间内的,无论是内存还是硬盘范围。

📘 内存空间

当沙盘引擎读取到模组内容后,会将关键的资源和信息存储到内存中,其中就包括JavaScript脚本文件。

除非模组\引擎内重新加载脚本,否则加载后即使外部有对脚本的修改,也不会进行更新。

📘 硬盘空间

当沙盘引擎读取到模组内容后,会将模组对本地资源的修改限制到一个“硬盘空间范围”内

这是为了尽可能避免模组内容对玩家本地造成恶意修改,也就是说模组的许多有关System.IO功能的修改,都将被限定在模组工作目录下,而不允许模组任意修改操作文件路径。

每个模组的工作文件夹就是其模组根目录。同时不允许使用C:\.\等字符进行外部目录的读写。

例如模组com.sengine.example,其模组目录是沙盘引擎目录\Mods\com.sengine.example,同时也是模组工作文件夹

比如开发者的模组可能有“存档功能”,这实际上就可以在工作文件夹内新建一个Saved文件夹,所有有关存档的内容均放置在此目录下(也就是模组工作文件夹\Saved目录)。

注意:有关任何非模组内置的IO文件、文件夹读写操作,均需要开发者自行设计文件命名及读写逻辑,这不在沙盘引擎内置的考虑范畴内。

📒 玩法API编程

当开发者设计好游戏思路,并且确保沙盘引擎内API交互功能足以实现需求,这时就可以开始着手建立模组了。

开发者可通过bat文件或手动拷贝其他模组等方式来进行“新建一个模组”,简单来讲,模组目录下一个文件夹就代表一个游戏模组。

沙盘引擎的优势在于原生API的简单易用,也就是说想要创建一个“爆炸”效果,只需要一行代码执行指定API即可实现,并且在通用范围内允许通过参数等方式进行如爆炸范围、效果、反馈等操作。

更多情况下,开发者只需要考虑应该在哪里实现代码,而不是考虑如何实现这个功能(因为很多常见功能已经内置)。

📒 测试及调试

推荐的测试方式:修改脚本文件后,直接按下[ESC]点击右下角[重连按钮],即可以最新的脚本加载建立服务器。

注意:有关模组配置文件\外部导入文件等(除脚本文件外)的更新测试,必须通过重新加载模组来实现测试

在《沙盘引擎》系统环境中,实际上已经内置了许多控制台指令以供使用,其中就包括一些加载卸载的指令。

通过一些控制台指令,你甚至可以直接在游戏内切换指定模组(而不需要重启游戏)。

也可以进行场景的重载以及disconnectreconnect等连接指令,可以配合多种情况进行测试和调试。

举例:开发者在编写Client.js时,可能需要反复调试例如主菜单界面,这时并不需要手动反复切换场景,只需要在控制台输入相关指令,具体参考控制台功能文档即可重载场景及Client.js。

反之亦然,开发者编写World.js时也可进行快速reconnect等指令进行重连,更多请参考控制台指令文档。

📒 打包发布

详情参考打包发布及分享文档。

developer/mod/constitute.txt · 最后更改: 2024/03/31 16:12 由 bibiboxs