SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 6001|回复: 2
打印 上一主题 下一主题

[MOD] mod概述

[复制链接]

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
跳转到指定楼层
楼主
发表于 2020-11-29 11:31:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
当前是用WML编写mod。

WML是Wesnoth Markup Language缩写,它用于编写Wesnoth中所有配置,包括场景、单位、存盘文件、以及用户界面布局。WML形成的文件扩展名是cfg,它和INI、XML相似,是种简单的字符文本文件。语法上,它一个主要特色是使用类似C中的宏,游戏程序可以处理这些宏。WML语法详细信息参考wesnoth官方网站.

在架构上,kingdom对wesnoth做了改动,但这些构动不涉及WML语法及语义,涉及到的只是多了中间文件:*.bin。

为什么要多出种中间形式

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要求的数据。
回复

使用道具 举报

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
沙发
 楼主| 发表于 2020-11-29 11:31:38 | 只看该作者

编写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目录下。
回复 支持 反对

使用道具 举报

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
板凳
 楼主| 发表于 2020-11-29 11:32:02 | 只看该作者

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不存在。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2025-5-1 22:45 , Processed in 0.040041 second(s), 22 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表