SDL中文论坛
标题:
mod概述
[打印本页]
作者:
ancientcc
时间:
2020-11-29 11:31
标题:
mod概述
当前是用WML编写mod。
WML是Wesnoth Markup Language缩写,它用于编写Wesnoth中所有配置,包括场景、单位、存盘文件、以及用户界面布局。WML形成的文件扩展名是cfg,它和INI、XML相似,是种简单的字符文本文件。语法上,它一个主要特色是使用类似C中的宏,游戏程序可以处理这些宏。WML语法详细信息参考
wesnoth官方网站
.
在架构上,kingdom对wesnoth做了改动,但这些构动不涉及WML语法及语义,涉及到的只是多了中间文件:*.bin。
(, 下载次数: 4878)
上传
点击文件名下载附件
为什么要多出种中间形式
1:减少游戏启动时间
*.bin存的是二进制文件,设计它时会尽量做到它和最终可执行程序需要的数据结构config之间转换是“零”开销。为减少*.cfg转为config需要时间上开销,当前wesnoth使用了cache机制,即只是在检测到所需*.cfg脏时才解析*.cfg到一个cache文件,作为一般用户是不会去改动*.cfg,所以能有的也是第一次运行游戏时需要转换等待。Wesnoth这种方法自然已可以极大降低转换时间,但使用*.bin后,不能做到比这种方法更好,至少可以保征转换效率不比这个低。
2:让游戏程序模块化
Wesnoth原代码可说只有一个wesnoth.exe这么一个可执行文件。当源代码越来越大时,维护、修改、编译、链接都会变得越来越庞大。解析作为一个较明显的可以和主程序脱开的模块,把它剖离开来至少可以减少一部分工作量。
3:mod编写更快捷、简单、高效
针对wesnoth做mod,说来就是看懂wesnoth的*.cfg,然后根据自己要的写*.cfg文件。到现在,如果写mod还是停留在要用文本编辑器,要靠眼睛去严格匹配脚本语法,这是一个极重工作量,而且效率和质量都没程序高。一旦把脚本解析和主程序脱离后,就可以考虑使用像eclipse这种集编辑、编译为一体的可视化工具,输入是脚本语法,输出就是要求的*.bin。
4:编写mod可选用语言更灵活
写久了程序的人想来会有个感叹,C/C++,PHP,XML,为啥世界要有这么多种语言!WML好吗,个人认为是挺简单,但无论怎么简单它毕竟是一种“新”语言,对熟悉XML的人来说要是XML会更好。使用*.bin,可以让编mod人使用自己语言,只要这种语言都够“出来”*.bin要求的数据。
作者:
ancientcc
时间:
2020-11-29 11:31
标题:
编写mod
编写mod分为编辑和转换两个步骤。
编辑
选择一种自己喜欢文本编辑器,像Visutal Studio,UlterEdit,按WML语法生成相应文件。
要制作一个战役,一般要生成的文件。
场景:用于描述战役。它定义了战斗目标,使用的音乐,阵营及阵营中单位,要触发事件,总之可说是所有事情。除了*.cfg,场景还需要至少一张地图。wesnoth提供了专门地图编辑器以生成地图。
功能上说,只要编写出场景就可做完一个mod了。
兵种:系统自带了不少兵种,但如果你希望有自己兵种,那就需要生成那个兵种的*.cfg文件。
除了场景和兵种,你还可以做很多很多,像地形(显示出来的图像,抗性等等),界面布局,AI特色,系统默认参数。
对于多人对战mod,和单机mod区别不大。
编辑后将生成*.cfg和地图文件,它们默认放在<kingdom>\data\core目录下。这些文件被提供”转换”输入,运行时不需要。
转换
转换是把由编辑生成的*.cfg(包括战场地图)转换为*.bin。
当前转换是由可执行程序kingdom.exe完成,是的,它和主程序kingdom.exe是同一个,只是它们使用的命令行参数不一样而已。
转换后将生成若干*.bin,它们默认放在运行时要求的<kingdom>\xml目录下。
以上生成的mod只支持英文。如果要支持多国语言,像中文,除了编辑和转换还需要编写*.pot和*.po,然后用小软件,像Poedit,生成相应的*.mo文件。运行时*.mo要被放在<kingdom>\translations目录下。
作者:
ancientcc
时间:
2020-11-29 11:32
标题:
FAQ
使用cache后带来的副作用
A:第一次生成*.bin中包含“空”值attribute,之后生成却没有这些attribute?
Q:第一次生成*.bin时,它没有对应cache文件,直接由WML生成,这个生成的config直接存入文件,这时存入的config是容许有“空”值attribute。
程序会以这个config生成cache文件,
在生成时,“空”值attribute会被丢弃
。
第二次或接下次生成对应的*.bin时,它检测到有cache文件,不从WML生成而这读对应cache文件以生成config,这时cache文件中已是没了“空”值attribute,由它生成的config自然不再包含这些attribute。致使以这个config生成的*.bin也不会有“空”值attribute。
处理这个问题方法,程序认为空值attribute等同该attribute不存在。
欢迎光临 SDL中文论坛 (http://www.libsdl.cn/bbs/)
Powered by Discuz! X3.3