万能MOD开发平台,初学者必看

SAGE是战略动作引擎Strategy Action Game Engine的英文首字母缩写,是一款基于Dirext8.1的上古引擎,非常适宜于制作RTS。虽然画面效果已经跟不上目前主流的次世代标准,但官方提供的MODSDK开放度非常高,开发者可以随意使用各种中间层功能模块代码来搭建属于自己的特色逻辑体系,以实现千变万化的应用场景和功能。由于整个SDK基于英语语境编写,对于英语基础比较好的学者,基本可以达到见字明意的程度,进而快速掌握使用方法,但代码语法结构相对比较复杂,类似于XML,没有可视化的代码编译幻境,一切编码都只能纯靠文本编写,仅适合具有软件开发基础知识的学者使用。

本人于2007年正式使用SAGE进行MOD制作,由于本人英语水平还算将就,并且本职工作属于软件开发领域,总的来说基本功还算够用,因此学习时并没有遇到多少困难,经过多年的摸索,基本算是熟练掌握了该引擎的各项使用技巧,并总结了一系列的学习笔记,将很早以前自己制作的一款2DMOD重制成了3D版,暂定名为FK3D,并在此基础上翻新旧模型,更换场景道具,升级光影特效,最终实现了一套万能MOD开发平台,分享给其他学习者参考和研究。一部分学习者通过参考FK3D的应用案例也逐渐掌握了SAGE的用法技巧,陆续制作出了他们自己的应用案例。

近年来发现有很多新入坑的初学者在学习MODSDK时都遇到了英语基础差、语法理解困难等问题。为了帮助他们尽快掌握MODSDK的用法,我特意将过去总结的学习笔记按功能模块进行分类整理,并为几乎每一条语句标注了中文注视,希望能提高初学者的学习效率。同时一些参与研究的爱好者们也提供了大量应用案例及DEMO演示。

在此欢迎每一位来访的学习者!

SAGE关键代码分类

CommandButton   按钮定义:定义各种界面按钮的功能和相关说明字段及图标图像
CommandSet     界面布局:定义各种物体的界面按钮布局,需要调用CommandButton里定义的那些按钮
FXList        视觉效果列表:定义各种视觉特效的动画效果、声音、震动等元素,例如核弹爆炸效果
Locomotor      运动系统:定义各种单位的移动模式,决定了该单位是走还是飞、速度快还是慢、能去哪些区域
ObjectCreationList  物体生成列表:定义各种OCL所生成的具体物体种类和数量(什么叫OCL?后面会讲解)
ParticleSystem    粒子系统:3D引擎里95%的动画都是用粒子系统完成的,所以这是SAGE引擎的一大重点
Science       将军技能:定义各种将军技能的学习前提及学习费用,是ZH的一大特色
SpecialPower     超级武器:定义各种特殊能力及超武的类型、倒记时、范围圈等信息,和TS的原理相似
Upgrade       升级项目:定义各种升级项目的研发费用、消耗时间等信息
Weapon       武器系统:定义各种武器的伤害值、打击范围、伤害类型、死亡类型等信息,和TS的原理相似

从这个表可以看出,SAGE和TS的差距是非常大的,所以有必要先转换自己的思维来对待这个外表熟悉,但实际上却陌生的新引擎,千万不要用TS的旧思维去对待SAGE、想当然而行、认为只要向以前那样做就行。如果不能转换思维,就很容易走进一条死胡同,让你成为又一个被SAGE吓倒的MODER。
要转换自己的思维,首先必须要了解SAGE引擎的操作方式,而多玩ZHMOD或CNC3MOD是掌握它们的最佳途径。以下我列出了SAGE和TS的几大差别:
1、 建造方式:
TS的建造方式称为“宏观型”,特点是不管你有几个工厂,所有这些工厂都关联到同一个建造栏上,建造物体时只有被设置为“默认”的那个工厂在开工,其他工厂处于空闲状态。宏观型的建造方式决定了TS系列平台将自动建立单位和工厂之间的关联,你只需要制作好单位,这个单位的建造按钮就会被平台自动放置到建造栏上。
SAGE的建造方式称为“微观型”,特点是各个工厂具有独立的建造栏,生产物体时相互不干涉,可以同时开工建造各自的单位。微观型的建造方式决定了SAGE系列平台不会插手单位和工厂之间的关联,这个关联是需要你自己去编写的,你不光要制作好单位,还必须要为对应的工厂添加生产这个单位的按钮,否则这个工厂是没办法生产这个单位的。
2、 物体分类:
TS对物体的分类是“注册法”,即将建筑、车辆、步兵、飞机等物体分类注册以获得不同的基本属性。注册法决定了一个单位只能属于其中一种类型,要么是建筑,就只能是建筑,不能即是建筑也是车辆,换言之,就是说不能获得所有你想要的基本属性,这一点无疑是限制了MOD的构思范围。
SAGE对物体的分类是“标签法”,即笼而统之将建筑、车辆、步兵、飞机等物体统称为Object,换句话说,建筑其实就是不能移动的坦克,而坦克同时也可以视为可以移动的房子。那么一个Object到底具有什么样的基本属性呢?这就是标签法的意义,一个物体可以拥有多种标签,每种标签代表一种基本属性,因此一个物体可以同时具有建筑、车辆、步兵、飞机的基本属性而成为一种全兼容的怪异单位,使MOD构思可以无限制的扩宽。
3、 阵营结构:
TS的阵营结构称为“共享模式”,这也是由于宏观型建造方式的一大特色,几个不同的国家可以属于同一个阵营,使用相同的建造栏、拥有相同的科技树,仅仅替换几种特殊兵种。例如RA2的3阵营10国家。
SAGE的阵营结构称为“独立模式”,这也是由于微观型建造方式带来的后遗症,一个国家只能属于一个阵营,使用各自独立的建造欠,拥有各自独立的科技树,虽然ZH里同一个阵营下属3个将军看起来好像科技树是相互差不多,但实际上他们却是3个完全不相关的独立阵营,拥有不同的建造栏和科技树,只不过是开发者故意把它们做得来比较相似而已,这是一个障眼法。
4、 图像格式:
TS支持的图像格式有SHP动画图片和PCX静态图片,其中SHP使用非常广泛,这是一种256色索引图,需要对应的PAL调色板才能正确显示图像,否则将显示为乱色。SHP适合直接用作效果动画,例如弹头爆炸的动画可以直接用一个动画SHP来表现,使用现成的SHP比较方便,但制作新的SHP就麻烦得要死。
SAGE支持的图像格式只有TGA静态图片(DDS被系统识别为TGA的压缩格式),这是一种32位真彩图,不需要调色板就能直接显示。TGA只能用作3D贴图及界面图片,由于其是静态图片的原因导致了不能直接制作成效果动画,必须依靠粒子系统的调用和运算才能表现出弹头爆炸动画。
5、 模型格式:
TS是一个含有半3D属性的2D引擎(假3D引擎),支持的模型格式为VXL像素体,这是一种依靠堆细小的像素点来构成形成一定的外形,用VXLSE来制作模型需要一个点一个点地描绘,虽然技术含量低但非常麻烦,虽然有3DS2VXL工具可以直接将3D模型转换成VXL,但由于TS引擎的低端性能,没办法做出精致的VXL模型。此外不得不提的是,TS的单位开火点、烟雾产生位置全靠RULES里的坐标来设置,因此非常难以调准确。
SAGE是真正的3D引擎,支持的模型结构为W3D和W3X模型,这是一种用3DMAX制作而成的模型,不需要经过任何转换及后期处理,所有工作都在3DMAX里完成,因此制作过程相当简练,但并不简单,这需要扎实的3DMAX建模功夫及贴图功夫才能做出精致的模型。顺带要提的是,SAGE的单位开火点、炮塔指定、炮管指定、烟雾产生位置等直接由3DMAX里模型块或关节点来关联,因此不需要设置任何坐标,只要把模型画好,然后把这个模型块的名称拿给INI调用即可调节准确。
6、 摄像机:
TS的视角是固定的,摄像机机体的XYZ位置大约在(60:60:49)的点上,离地高度永远固定,焦距为无穷大,因此渲染出来的场景也是毫无景深感的二维直观图。
SAGE的视角是可变的,摄像机的位置虽然有个默认值,但可以通过设置参数来改变它,同时在运行时也可以利用小键盘的8246来变换视角,这样更容易贴近物体,近距离观察精致的模型结构。
7、 代码结构:
TS的代码类型很少,而主要发挥作用的只有Rules和Art,因此平台插手了大部分代码间的对应和关联,不需要你去人工编写,就像一个建筑的皮肤能自适应5种地形来现实不同的图像,完全是底层内核管理了所有对应规律,你不能去改变它,因此工作量很小,只需要按照规律命名即可,使用方便但扩展性很小。
SAGE的代码类型非常多,光ZH的主要INI就有10种(表1.01),因此平台基本上是不理会这些代码之间的对应和关联,99%的对应和关联需要MODER自己去编写。因此难度相对较大,工作量也提高了不少,但MODER可以自由发挥,扩展性非常大。
8、 语句功能:
TS的语句好比集成电路,一条语句实现一个固定的功能,只需要设置一个参数就能获得特定的功能,几条语句共存就能组成一套系统,使用起来相当简便,但由于集成电路的功能单调,因此系统的扩展性不高,也难以实现花样百出的功能效果,限制了MOD的构思范围。
SAGE的语句好比元器件,一条语句、一个参数只能实现一个细节定义,似乎根本就体现不出SAGE的潜力到底有多强大。但如果用SAGE特有的Behavior模块将一系列语句和参数按照一定的规律组合,就能制作出你自创的集成电路,多个自创的集成电路相互组合嵌套,就能实现花样百出的强大系统,但由于使用元器件要求MODER具备更加扎实的底层技术,因此使用起来容易摸不着头绪,要做出优秀而高效的系统,难度也相当高。
9、 语法特点:
TS的语法称为“汇编级”,即用方括号表示段首字(如[MTNK]),没有结束字的概念,一个段落的内容从段首字开始,到下一个相邻的段首字结束,中间并列的所有语句都只能是单行,只实现一个功能,没有功能模块的概念,彼此不能相互嵌套。
SAGE的语法称为“C语言级”,将单位代码、按钮代码、升级项目等所有内容都视为函数,每个函数都都必须有函数类型+函数名来作为段首字(如Object MTNK、Draw = W3DTankDraw ModuleTag_01、ConditionState = REALLYDAMAGED等)以及结束字End,和C语言里的花括号很相似,夹在段首字和End之间的所有内容便是这个函数的所有定义。而SAGE的函数还分为主函数和子函数,例如Object MTNK就是一个主函数,而Draw = W3DTankDraw ModuleTag_01则是一级子函数,ConditionState = REALLYDAMAGED为二级子函数,子函数能被主函数嵌套调用,低级子函数能被高级子函数调用,但主函数不能被任何函数调用,一个主函数内的所有子函数彼此并列,各自完成一系列功能,相互配合起来以完成一个嵌入式系统功能。

基础入门知识

地图编辑知识

蜀ICP备 18034156号