目录

📚 模组开发流程

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

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

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

📒 开发准备

沙盘引擎在尽可能简化开发思维的基础上,为开发者提供了尽可能简便的开发流程和脚本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等指令进行重连,更多请参考==控制台指令==文档。

📒 打包发布

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