简述什么是worlds collide下载及作用

查看: 30564|回复: 10
作者:赛特o亮
& && &&&SAGE是EA历史上第一个3D战略游戏引擎,具备了基本的3D图像功能,例如可变视角、光影特效等。出自SAGE引擎的游戏平台为数不少,比较出名的如《将军》、《绝命时刻》,《泰伯利亚战争》、《凯恩之怒》,这些游戏平台最大的特色就是抛弃了以前TS引擎的“固定集成电路式”功能结构,改为使用更加底层、更加细腻的“独立元器件式”结构,通过组合嵌套这些元器件,能实现各种各样、花样百出的效果,令游戏开发乃至MOD制作都能够更加广泛地阔宽思路,因此SAGE引擎下的游戏平台被喻为“无所不能的平台”,更适合高级游戏开发者打造王牌战略游戏,这是TS引擎下的RA2、YR甚至PD平台都望尘莫及的强大实力。
& && &&&与此同时,TS引擎正在被硬件技术的高速发展所淘汰,这个光吃CPU不吃显卡的引擎将越来越跟不上时代的步伐,而PD平台基本上也算是挖掘了TS引擎的所有潜力,难以再次焕发第三春的活力,MODER们迫切地需要一个更适合他们使用的新平台。
& && &&&因此,是时候让高级MODER们转型到SAGE领域了……
本帖最后由 yangqs 于
10:36 编辑
第一章& && &&&入门从绝命时刻开始
& && &ZH是SAGE引擎的一部巅峰之作,它几乎发挥出了SAGE引擎所有的潜力,虽然图像处理效果确实还不够理想,不能和后来的CNC3相比,但论平台功能,它绝对是最丰富的一个。当然还有最重要的一点,ZH的代码是用我们习以为常的INI来编写的,条理非常清晰是它的最大优点,这比CNC3杂乱无章、看得让人头大的XML更人性化得多。因此我们将从ZH开始入门,进行对SAGE引擎的研究。
& && &首先我们有必要了解一下ZH的文件目录结构,搞清楚它的代码系统都是如何构成的,方便日后之作MOD时能立刻找到合适的下手点。
& && &打开ZH的安装目录,我们可以看到一些BIG文件压缩包,这些文件包和RA2时代的MIX有着异曲同工的作用,我们可以用XCC MIXER 打开INI.BIG,这是存放ZH所有规则文件的压缩包,把右侧列表定位到ZH的主目录,然后在左边全选所有内容,右键——复制,不出10秒,所有内容都提取出来了。
& && &或许你发现了,INI.BIG里的内容并不是以往MIX包那样的纯文件,而是含有一定的路径,例如“Data\INI\Armor.ini”,这是因为ZH平台识别的规则文件不像RA2那样直接放在在游戏主目录下,而是在Data\INI文件夹下。因此我们需要到这个文件夹下去找我们刚才提取出来的所有INI文件。
& && &如果你看见这个目录下有一大堆INI文件,千万别被吓傻,这就是SAGE引擎的特色——功能细分,整个游戏的重要规则需要很多个INI来定义并相互嵌套调用,而不像RA2那样用一个RULES来定义,自己内部调用。因此我们现在有必要认识清楚ZH的一些常用且非常重要INI各是什么内容,都表达出了哪些定义信息。(其余INI今后遇到了再讲解)
ini文件名作用简述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为二级子函数,子函数能被主函数嵌套调用,低级子函数能被高级子函数调用,但主函数不能被任何函数调用,一个主函数内的所有子函数彼此并列,各自完成一系列功能,相互配合起来以完成一个嵌入式系统功能。
& && &综上所诉,不难看出SAGE的特点是更加底层化、更加微观化,更加独立化,适合思维宽阔的MODER使用,但正是因为它的这些特点而导致了平台的难度相当高,所以要想学好SAGE,从现在起就必须认真转变思维。
本帖最后由 yangqs 于
09:25 编辑
第二章& && &&&建立一个新单位
& && &首先我以建立一个新单位——灰熊坦克为例,来讲解SAGE基本代码的结构和相互调用规律。之所以要以灰熊为例,主要是因为这个单位没有什么特殊功能,基本上可以复制原版的现成代码,所以比较容易讲解清楚。
1、& && &&&建立单位代码
& && &比较特别的是,SAGE的Object.ini比较自由,你可以将灰熊的定义代码写在已有的那些Object.ini里,例如AmericaVehicle.ini,也可以单独建立一个全新的GrizzlyTank.ini来单独储存灰熊定义代码。理论上我比较推荐后者,因为这样方便今后迅速找到这个单位并修改其代码和功能,避免了TS里在RULES里翻来覆去地查找一个东西的烦琐。在编写代码的过程中特别要注意End,很多新手最容易犯的错误就是漏掉End,导致游戏无法正确识别函数而报错。
; 灰熊坦克
Object& &MTNK
&&;============视觉、图像部分===========
&&SelectPortrait& && && & = HEAD122_MTNK& && && && && && && && && && & 选取该单位时界面上显示的大头像
&&ButtonImage& && && && & = ICON64_MTNK& && && && && && && && && && & 生产该单位时旋转时钟图标的图像
&&UpgradeCameo1= Upgrade_SyntheticalFuel& &该单位具有的可升级科技项目图标,最多有5个,依次排列在单位大头像的右侧和下侧共5个格子里
&&Draw = W3DTankDraw ModuleTag_01& && && && && && && && && && && &模型绘制模块
& & OkToChangeModelColor&&= Yes& && && && && && && && && && && && && &&&是否将模型里凡是以HouseColor%02d命名的模型快转换成所属色
& & DefaultConditionState& && && && && && && && && && && && && && && && && && &默认状态时的模型规则,通常可以理解为初生状态
& && &Model& && && && && &= MTNK& && && && && && && && && && && && && && && && & 调用哪个W3D来显示其图像,需要自己用3DMAX来画这个模型,今后再讲如何画W3D模型
& && &Turret& && && && &&&= Turret& && && && && && && && && && && && && && && && &炮塔对应名称为“Turret”的模型块或骨骼点
& && &WeaponFireFXBone& & = PRIMARY Muzzle& && && && && && && && & 主武器炮口特效产生位置对应名称为“Muzzle%02d”的模型块或骨骼点
& && &WeaponRecoilBone& & = PRIMARY Barrel& && && && && && && && && &主武器炮管滑膛部分对应名称为“Barrel%02d”的模型块或骨骼点
& && &WeaponMuzzleFlash& &= PRIMARY Muzzle& && && && && && && && & 主武器炮口闪光产生位置对应名称为“Muzzle%02d”的模型块或骨骼点
& && &WeaponLaunchBone& & = PRIMARY Muzzle& && && && && && && && &主武器开火点位置对应名称为“Muzzle%02d”的模型块或骨骼点
& & ConditionState = REALLYDAMAGED& && && && && && && && && && && & 破损状态时的模型规则,由于已经写了默认状态,因此其他状态里凡是和默认状态相同的规则可以略掉不写,
& && &Model& && && && && &= MTNK_D& && && && && && && && && && && && && && &&&游戏平台会自动从默认状态里提取规则配给这个状态使用
& & ConditionState = RUBBLE& && && && && && && && && && && && && && && && &尸体/残骸状态时的模型规则,同样可以简略
& && &Model& && && && && &= MTNK_D
& & TrackMarks& && && && &= EXTnkTrack.tga& && && && && && && && && && & 坦克在地面上开过后将留下什么样的履带印迹贴图
;--------------------------------------------------------------------------------------------------
;============基本属性定义部分===========
&&DisplayName& && && && & = VECHILE:MTNK& && && && && && && && && &&&鼠标悬停到该单位上时,显示的单位名称,需要CSF翻译
&&Side& && && && && && &&&= GDI& && && && && && && && && && && && && && && && &&&无实际作用,仅仅为WB分类成列时作为依据,参数可以随便乱写
&&EditorSorting& && && &&&= VEHICLE& && && && && && && && && && && && && &同上,作为WB的又一个分类成列依据,但参数不能随便乱写
&&TransportSlotCount& && &= 3& && && && && && && && && && && && && && && &被装载时需要占用的空间量
&&VisionRange& && && && & = 90& && && && && && && && && && && && && && && &&&视野范围,只有进入了该单位视野范围的敌人才会引起该单位主动开火
&&ShroudClearingRange& &&&= 90& && && && && && && && && && && && && && &能揭开黑雾和灰雾的范围
&&MaxSimultaneousOfType& &= 16& && && && && && && && && && && && && & 最大名额上限,即任何一方,该单位最多只能同时拥有16个,类似TS的人口限制
&&MaxSimultaneousLinkKey&&= MTNK& &使用哪个人口空间,可以随意设置参数,通常只在特别要求该单位和别的单位共享同一个人口空间时才使用
&&BuildCost& && && && && &= 700& && && && && && && && && && && && && && && &&&造价,这个不用多说
&&BuildTime& && && && && &= 7& && && && && && && && && && && && && && && && && &生产时间,单位为秒
&&ExperienceValue& && && &= 70&&140&&210&&280& && && && && && && &&&被敌人杀死后送给敌人多少经验值,当自己为新兵、老兵、精英、王牌时分别送出70、140、210、280
&&ExperienceRequired& && &= 0& &210&&420&&630& && && && && && && & 需要积累多少经验值才能达到对应级别,新兵级需要0点,老兵级需要210,精英级需要420,王牌级需要630
&&IsTrainable& && && && & = Yes& && && && && && && && && && && && && && && &&&是否可以训练,仅当参数为Yes时,ExperienceRequired语句才有意义
&&CrusherLevel& && && && &= 2& && && && && && && && && && && && && && && && &碾压级别,通常坦克都填2,表示自己属于2级碾压者,可碾压小于2级的被碾压者
&&CrushableLevel& && && & = 2& && && && && && && && &被碾压级别,通常坦克都填2,表示自己属于2级被碾压者,凡是碾压级别大于2的碾压者都能碾压它
CommandSet = GeneralUnitCommandSet 建造栏/操作栏界面使用哪一套布局,GeneralUnitCommandSet需要在CommandSet.ini里进行编写
&&WeaponSet& && && && && && && && && && && && && && && && && && & 武器系统,类似模型绘制模块,可以利用Conditions来让单位在不同条件下使用不同的武器
& & Conditions& && && && &= None
& & Weapon& && && && && & = PRIMARY GrizzlyGun& && && && && && && & 主武器为哪个武器,GrizzlyGun需要在Weapon.ini里进行编写
&&ArmorSet& && && && && && && && && && && && && && && && && && && && && && && &&&护甲系统,和武器系统差不多的设置原理
& & Conditions& && && && &= None
& & Armor& && && && && &&&= TankArmor& & 使用哪个护甲类型,护甲设置比较复杂,所以我们暂时借用一个现成的护甲,今后再着重讲解特殊护甲的之作
& & DamageFX& && && && &&&= TankDamageFX& && && && &&&被攻击时产生什么样的受损特效(感觉是个没啥意义的花瓶功能,是把游戏变卡的重要途径)
&&Prerequisites& && && && && && && && && && && && && && && && && & 建造前提系统,可以用物体作为建造前提(不光是建筑,也可以是坦克、士兵、将军技能等)
& & Object& && && && && & = GAWEAP& && && && && && && && && && && && && && &可以做成与、或逻辑,但尚不知道能不能做出非逻辑
;--------------------------------------------------------------------------------------------------
&&;============单位语音、音效定义部分===========
&&VoiceSelect& && && && & = GrizzlyTankSelect& && && && && && && && && &&&选取时的汇报音
&&VoiceMove& && && && && &= GrizzlyTankMove& && && && && && && && && &&&移动时的汇报音
&&VoiceGuard& && && && &&&= GrizzlyTankMove& && && && && && && && && &&&自由警戒时的汇报音
&&VoiceAttack& && && && & = GrizzlyTankAttack& && && && && && && && && & 攻击时的汇报音
&&SoundMoveLoop= GrizzlyTankMoveLoop 正常移动时发出的车辆运行音效,可做成循环音效,大概就是TS里坦克启动时会发出的发动机轰鸣声
&&SoundMoveLoopDamaged& & = GrizzlyTankMoveLoop& && && && &受损后移动时发出的车辆运行音效
&&UnitSpecificSounds& && && && && && && && && && && && && && && && && && && &&&特殊语音及音效
& & VoiceCreate& && && &&&= NoSound& && && && && && && && && && && && && & 建造完毕后的汇报音,让我想起了基洛夫经典的“Kirov Reporting”
& & TurretMoveStart& && & = NoSound& && && && && && && && && && && && & 炮塔开始旋转时的音效,SAGE特有的功能,不过没啥意思
& & TurretMoveLoop& && &&&= TurretMoveLoop& && && && && && && && &&&炮塔持续旋转时的音效
& & VoiceCrush& && && && &= NoSound& && && && && && && && && && && && && & 碾压别人时发出的音效
& & VoiceEnter& && && && &= GrizzlyTankMove& && && && && && && && && && &装载时的汇报音
;--------------------------------------------------------------------------------------------------
;============基本属性定义部分===========
&&RadarPriority = UNIT& && && && && && && && &&&雷达里的标记类型,不同的标记有不同的优先权(没搞懂啥意思,难道优先权越高就越先被显示不成?)
&&KindOf = PRELOAD SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT CAN_CAST_REFLECTIONS VEHICLE INFANTRY SCORE
& && && && && && && && && && && && && && && && && && && && && && &&&属性标签,这是SAGE里的一大重点,放到后面来讲,先吊个胃口
&&Body = ActiveBody ModuleTag_02& && && && && &&&生命值模块,定义了生命值上限、初生时的生命值以及被封冻武器封锁的准备时间和持续时间
& & MaxHealth& && && && && &= 300& && && && && && && && & 生命值上限
& & InitialHealth& && && &&&= 300& && && && && && && && && &初生时的生命值,又一个没啥意思的语句,一般都设置得和上限相同,除非你有特别邪恶的目的
& & SubdualDamageCap& && &&&= 310& && && &被封冻武器封锁的准备时间,其实不叫时间,应该说封冻武器必须“打”够这么多点“血”才能封冻住它
& & SubdualDamageHealRate& &= 500& && && && && & 下面这两句没测试出啥意思,一般都填成500和50
& & SubdualDamageHealAmount = 50
;--------------------------------------------------------------------------------------------------
&&;============功能模块定义部分===========
&&Behavior = AIUpdateInterface ModuleTag_03& &智能模块,决定该单位在不受玩家人工控制时能自主干些什么事
& & Turret& && && && && && && && && && && && && && && && && && & 炮塔智能定义
& && &TurretTurnRate = 120& && && && && && && && && && &自动或手动攻击时炮塔的旋转速度,单位为度每秒
& && &ControlledWeaponSlots = PRIMARY& && && && &手动攻击时发射哪个武器,如果同时并排上PRIMARY、SECONDARY和TERTIARY则表示多种武器同时开火
& & AutoAcquireEnemiesWhenIdle = Yes& && && && &空闲时是否自动迎击敌人,当然前提是敌人必须进入它的视野范围
&&Behavior = PhysicsBehavior ModuleTag_04& && &物理特性模块,定义了单位的一些物理引擎上能够表现出来的属性
& & Mass = 40.0& && && && && && && && && && && && && && && & 重量,功能不太明显但非常重要的一个语句,今后会详细说明其作用
&&Behavior = DestroyDie ModuleTag_07& && && && & 死亡方式模块 - 消失式死亡,即被杀后将本体的模型删除,安静得什么特效都没有
DeathTypes=NONE+CRUSHED+SPLATTED 当被带有这些DeathTypes类型的武器杀死时引发这种死亡方式,NONE表示无,加号表示“逻辑或”
&&Behavior = FXListDie ModuleTag_08& && && && && &死亡方式模块 - 特效式死亡,即被杀后引发一项FXList来产生诸如爆炸烟雾的特效
& & DeathTypes = NONE +CRUSHED +SPLATTED不同的死亡方式模块可以具有相同的死亡方式,这样的结果是,同时引发两种死亡方式,产生叠加效果
& & DeathFX = FX_CarCrush& && && && && && && && && && &引发哪一个的FXList
&&Behavior = CreateObjectDie ModuleTag_09& &死亡方式模块 - OCL式死亡,即被杀后在原地刷出一系列物体,可以刷碎片甚至另一个活单位(刷活单位今后再讲)
& & DeathTypes = NONE +CRUSHED +SPLATTED& && && && && && && && && && && && && &
& & CreationList = OCL_CrusaderTank_CrushEffect 根据哪个OCL项目的内容来刷物体
&&Behavior = CreateCrateDie ModuleTag_10& && & 死亡方式模块 – 爆箱子式死亡,即被杀后在原地爆出一个垃圾箱,这跟OCL式死亡表现相似,但实际上有区别
& & CrateData = SalvageCrateData& && && && && && && &根据哪个垃圾箱规律来爆箱
&&Behavior = SlowDeathBehavior ModuleTag_11 延迟死亡模块,使该单位被杀后延迟一段时间再死,利用这段时间来做“死亡过程”的动作
& & DeathTypes = ALL -CRUSHED –SPLATTED& &ALL表示所有死亡类型,减号表示“逻辑非”
& & ProbabilityModifier = 25& && && && && && && && && && & 引发几率,单位为百分数,最大为100,即表示100%
& & DestructionDelay = 2000& && && && && && && && && & 延迟死亡时间,单位为毫秒,2000毫秒=2秒
& & DestructionDelayVariance = 1000& && && && && & 延迟时间的随机偏差为1000毫秒,使得实际的延迟时间从1秒到3秒之间随机出现
& & OCL = FINAL OCL_MTNKDebris 死亡动作完成后刷出什么东西来,作用和CreateObjectDie相同,但主要用来刷残骸,你也可以做点邪恶的构思
& & FX&&= FINAL& & FX_BattleMasterExplosionOneFinal&&死亡动作完成后引发什么FX特效,作用和FXListDie相同
&&Behavior = TransitionDamageFX ModuleTag_12& &、受损后的冒烟效果,以及从正常状态变成破损状态的破裂特效
& & ReallyDamagedParticleSystem1 = Bone:Smoke RandomBone:Yes PSys:SmokeSmallContinuous01& && && && && &
& && && && && && && && && && && && && && && && && && && && && && &&&可定义冒烟点对应W3D里哪些关节点,以及定义烟雾为哪个粒子系统
& & ReallyDamagedFXList1 = Loc: X:0 Y:0 Z:0 FXList:FX_BattleMasterDamageTransition
& && && && && && && && && && && && && && && && && && && && && && && &破裂特效的产生位置,及定义使用哪个FXList作为破裂特效
&&Behavior = FlammableUpdate ModuleTag_13& & 被火焰类武器攻击后的持续扣血控制模块
& & AflameDuration = 5000& && && && && && && && && && & 持续扣血的维持时间,单位为毫秒,5000毫秒=5秒
& & AflameDamageAmount = 3& && && && && && && && &&&每次扣除多少生命值
& & AflameDamageDelay = 500& && && && && && && && &&&相邻两次扣除生命值之间的间隔时间,可推算出整个模块为持续5秒、扣血10次,共扣除30点
&&Behavior = LocomotorSetUpgrade ModuleTag_14&&运动系统升级模块
& & TriggeredBy = Upgrade_SyntheticalFuel& && && &当获得了Upgrade_SyntheticalFuel后,该单位的运动系统将发生更换
&&End& && && && && && && && && && && && && && && && && && && && & Upgrade_SyntheticalFuel需要在Upgrade.ini里进行编写
&&Locomotor = SET_NORMAL& && && && && &GrizzlyTankLocomotor& && && && && & 初始/默认状态下的运动系统
&&Locomotor = SET_NORMAL_UPGRADED&&GrizzlyTankSFLocomotor& && &&&升级运动系统后更换为哪个运动系统,这两个运动系统需要在Locomoto.ini里进行编写
&&; 特别需要注意的是,Locomotor语句必须写在所有功能模块之后,否则很容易引起报错
;--------------------------------------------------------------------------------------------------
;============形体体积及阴影定义===========
&&Geometry = BOX& && && && && && && && && && && && && && &形体类型为长方体
&&GeometryMajorRadius = 15.0& && && && && && && && &半长度(从物体中心到头或尾的距离,即长方体长度的一半)
&&GeometryMinorRadius = 10.0& && && && && && && && &半宽度(从物体中心到左侧或右侧的距离,即长方体宽度度的一半)
&&GeometryHeight = 13& && && && && && && && && && && &&&全高度(从物体底部到顶部的距离)
&&GeometryIsSmall = Yes& && && && && && && && && && && &是否为小型形体,没搞懂有啥特殊作用
&&Shadow = SHADOW_VOLUME& && && && && && && && &阴影类型为3DMAX里最基础、最粗劣的表现形式——“体积阴影”,但最节省显卡
&&ShadowSizeX = 45& && && && && && && && && && && && && &阴影尺寸,单位为像素,似乎是个没有实际作用的垃圾语句
;--------------------------------------------------------------------------------------------------
& && &到这里,一个新单位的代码才刚刚具备雏形,因为我们还需要给它做很多相关的系统功能,例如武器系统、护甲系统、运动系统、操作栏界面、升级项目等。
2、& && &&&建立建造栏/操作界面
& && &SAGE除公用界面外,每一个物体都具有一个独立的建造栏/操作界面,例如ZH里这个界面上有14个按钮名额,CNC3为4个。你可以将一些特定的按钮放到你所想要的位置上去,形成一套界面:
& && &首先我们必须要清楚,一个单位需要什么样的界面布局,换句话说,就是指这个单位的界面上需要有些哪些按钮,各是什么功能,所以我们需要首先策划好界面布局。以这里的灰熊为例,由于它没有什么特别的功能,因此只需要具备3个基本的动作按钮就足够了,分别为“范围警戒”、“移动攻击”、“停止”。由于这3个按钮是原版就有的基本按钮,因此暂时不专门讲解按钮的做法,今后会着重讲解。
界面布局的14个按钮位置分别如下:
1& && &&&3& && &&&5& && &&&7& && && &9& && && &11& && &&&13
2& && &&&4& && &&&6& && &&&8& && &&&10& && &&&12& && &&&14
CommandSet GeneralUnitCommandSet
12 = Command_AttackMove& && && && && && && && && &移动攻击按钮,它的摆放位置在第12号空位上
13 = Command_Guard& && && && && && && && && && && &&&范围警戒按钮,它的摆放位置在第13号空位上
14 = Command_Stop& && && && && && && && && && && && & 停止按钮,它的摆放位置在第14号空位上
3、& && &&&建立武器系统
& && &和TS类似,武器系统也包括伤害值、打击范围、伤害类型(TS里称为弹头比率)、误差范围、射程、攻速、炮口动画等信息,而SAGE在TS的基础上还增加了一些新的功能,并把以前的某些宏观功能替换成了微观功能。打开Weapon.ini,在最后面添加这个武器:
Weapon& &GrizzlyGun& && && && && && && && && && && && &&&和刚才定义单位代码一样,武器系统的段首字同样需要定义函数类型和函数名
&&PrimaryDamage& && && &&&= 105.0& & 直接伤害值,SAGE还有一个SecondaryDamage和SecondaryDamageRadius,表示辅助伤害值及其范围
&&PrimaryDamageRadius& &&&= 5.0& && && && && && && &直接打击范围
&&ScatterRadiusVsInfantry& & = 10.0& && && && && &&&对付步兵时的误差上限,当攻击距离越远时,误差越明显,达到极限射程时误差也达到极限值10
&&AttackRange& && && && &&&= 150.0& && && && && && && & 射程上限
&&MinimumAttackRange& && &= 20.0& && && && && && & 射程下限
&&MinTargetPitch& && && && &= -15& && && && && && && && &能锁定到目标的最大下俯角度,通常是站在山上打山下时需要考虑,超出角度范围则不能开火
&&MaxTargetPitch& && && && &= 15& && && && && && && && &能锁定到目标的最大上仰角度,通常是站在山下打山上时需要考虑,超出角度范围则不能开火
&&DamageType& && && && &&&= ARMOR_PIERCING& &伤害类型,跟TS的弹头比率作用差不多,但原理正好相反,这个也是SAGE的难点之一,今后再讲
&&DeathType& && && && && & = NORMAL& && && && && && &死亡类型,需要根据被杀单位的死亡方式来决定被这个武器杀死后将产生什么效果或死亡动作
&&WeaponSpeed& && && && & = 800& && && && && && && & 射弹体的出膛初速度
&&WeaponRecoil& && && && & = 5& && && && && && && && &&&后坐力大小,SAGE的特色,每开一炮都能使车身向后晃动以模拟后坐力效果
&&ProjectileObject& && && &= NormalShell&&射弹体,前面说,SAGE把射弹体也视为Object,因此你甚至可以将一个活单位发射出去(仿人间大炮?)
&&FireFX& && && && && && &&&= WeaponFX_GenericTankGunNoTracerSmall& && && && && & 炮口特效
&&ProjectileDetonationFX& && &= WeaponFX_GenericTankShellDetonation& && && & 射弹体引爆时的特效,作用类似于TS的弹头爆炸动画
FireSound& && && && && &&&= GrizzlyTankFiring& && && && && && && && && && && && && && && && && &开炮时的声音
&&RadiusDamageAffects& && &= ALLIES ENEMIES NEUTRALS& && && && && &
& && && && && && && && && && && && && && && && && && && && && &该武器的伤害范围对什么目标有效,ALLIES=本方或盟友,ENEMIES=敌人,NEUTRALS=中立者
&&DelayBetweenShots& && &&&= 2000& && && && && &&&开炮间隔时间,类似于TS的ROF
&&ClipSize& && && && && && & = 0& && && && && && && && && & 一个弹夹里的弹药总数,SAGE的特殊功能,可以模拟换弹夹效果,0表示无穷大,即不需要换弹夹
&&ClipReloadTime& && && && &= 0& && && && && && && && & 换弹夹时间,通常之作枪械武器时才用,可模拟出CS里换弹夹的动作,0表示瞬间换弹夹
&&ProjectileCollidesWith& && & = STRUCTURES WALLS& &射弹体会撞到什么东西,STRUCTURES=建筑、WALLS=围墙,这里的参数是类型标签
& && &接下来还要继续为这个武器制作一个射弹体,即NormalShell,特效和语音暂时不做也没关系,我们可以暂时留空(随便写一个参数,游戏不会报错的),或临时借用原版现有的来用,今后再添加或替换也不迟。制作射弹体的方法和前面制作灰熊坦克的过程基本相似,因为它们都属于Object,你也可以专门为它建立一个INI来存放这段代码。
Object NormalShell
;============视觉、图像部分===========
&&Draw = W3DModelDraw ModuleTag_01
& & ConditionState = NONE& && && && && && && && && && && &作用相当于DefaultConditionState
& && &Model = NormalShell
;--------------------------------------------------------------------------------------------------
&&;============基本属性定义部分===========
&&DisplayName& && & = OBJECT:TankShell
&&EditorSorting& && & = SYSTEM
&&VisionRange& && &&&= 0.0& && && && && && && && && && && && &射弹体通常不应该具有视野范围及探路范围,所以弄成0& && &&&
& & Armor& && && &&&= ProjectileArmor& && && && && && && & 射弹体也可以被某种武器杀死,这是SAGE的特色,同时也是TS想都不敢想的特色
;--------------------------------------------------------------------------------------------------
&&;============功能模块定义部分===========
&&KindOf = PROJECTILE& && && && && && && && && && && && &&&被贴上了PROJECTILE(射弹体)标签的物体,以任何方式死亡都不会报告Unit Lost
&&Body = ActiveBody ModuleTag_02
& & MaxHealth& && & = 100.0& && && && && && && && && && && & 如同前面所说,射弹体是可以被杀死的,所以需要给它设置生命值
& & InitialHealth& && &= 100.0
&&Behavior = DestroyDie ModuleTag_03&&
& && && && && && && && && && && && && && && && & 没有DeathType语句,则该死亡方式默认为DeathType=ALL,即任何方式死亡都将导致这个模块指定的结果
&&Behavior = DumbProjectileBehavior ModuleTag_04&&
& && && && && && && && && && && && && && && && && && && && && && & 贝赛尔曲线弹道逻辑,可以设置特殊的参数,使抛物线变成直线,这也是TS想都不敢想的平射炮
& & FirstHeight = 0& && && && && && && && && && && && && && && & 曲线上第一点的高度
& & SecondHeight = 0& && && && && && && && && && && && && && &曲线上第二点的高度,由两个点可以控制一条贝赛尔曲线,两个点高度都为0则形成平射炮
& & FirstPercentIndent = 33%& && && && && && && && && && &第一点的位置
& & SecondPercentIndent = 66%& && && && && && && && &&&第二点的位置,0%表示炮口,100%表示落点,中间值则介于炮口到落点之间的弹道上
& & OrientToFlightPath&&= Yes& && && && && && && && && && & 使射弹体朝向飞行轨迹,没测试过填No会导致什么结果,难道射弹体会乱飞?
& & FlightPathAdjustDistPerSecond = 300& && && && &&&每秒种调整飞行轨迹多少像素,可以使飞行轨迹比较平滑
&&Behavior = PhysicsBehavior ModuleTag_05
& & Mass = 0.01& && && && && && && && && && && && && && && && &&&射弹体的重力一般设置为0.01,即“非常轻”
&&Scale = 0.95& && && && && && && && && && && && && && && && && & 模型缩放比率为W3D原形的95%
&&Geometry = Sphere& && && && && && && && && && && && && && &形体类型为球体
&&GeometryIsSmall = Yes& && && && && && && && && && && && && && && && && && && && && && && && && && && && && &
&&GeometryMajorRadius = 1.0& && && && && && && && && && &球体只一个尺寸参数,即半径
;--------------------------------------------------------------------------------------------------
4、& && &&&建立升级项目
& && &前面提到,灰熊坦克有一个切换运动系统的升级项目,因此现在我们需要在Upgrade.ini里来编写这个升级项目的代码:
Upgrade Upgrade_SyntheticalFuel
&&DisplayName& && &&&= UPGRADE:SyntheticalFuel& &&&升级提示信息时屏幕上出现的文字,需要CSF翻译
&&BuildTime& && && &&&= 60& && && && && && && && && && && && && &升级准备时间为60秒,其实可以把升级理解为“建造”,因此这个时间相当于建造时间
&&BuildCost& && && &&&= 3000& && && && && && && && && && && &&&确认此项升级需要花费的费用
&&ButtonImage& && && &= ICON64_SyntheticalFuel& && &正在升级时,旋转时钟图标上的图像,关于图标图像的之作今后再仔细讲解
&&ResearchSound& && &= NoSound& && && && && && && && &&&确认此升级时的汇报音,暂时留空,今后再修改
5、& && &&&建立运动系统
& && &通常来说,一个可移动的单位有一套运动系统就足够了,而这里的灰熊由于可以通过升级来替换运动系统,因此我们需要给它做两套运动系统,一套为初生的,另一套为升级之后的,打开Locomotor.ini写入以下这些内容:
Locomotor GrizzlyTankLocomotor& && && && && && && && & 初生时使用的运动系统
&&Surfaces& && && && &&&= GROUND& && && && && && && && && &&&可进入的地形为,平地
&&Speed& && && && && &&&= 45& && && && && && && && && && && && &&&正常时跑速为每秒45像素
&&SpeedDamaged& && && & = 22& && && && && && && && && && &&&破损时跑速为每秒22像素
&&TurnRate& && && && &&&= 50& && && && && && & 正常时车身转向速度为每秒50度(注意,车身转向速度和炮塔转向速度不再是同一个概念,切记不要混淆)
&&TurnRateDamaged& && & = 25& && && && && && && && && && & 破损时车身转向速度为每秒25度
&&Acceleration& && && & = 40& && && && && && && && && && && && & 正常时起步加速度为40像素每平方秒
&&AccelerationDamaged& &= 20& && && && && && && && && && & 破损时起步加速度为20像素每平方秒
&&Braking& && && && && &= 40& && && && && && && && && && && && && &刹车时加速度(减速速度)为40像素每平方秒
&&MinTurnSpeed& && && & = 0& && && && && && && && && && && && &最小转向速度为0,不知道有啥特别的含义,一般都设置为0
&&ZAxisBehavior& && && &= NO_Z_MOTIVE_FORCE& && &Z轴特性为“无纵方向动力”,因为是坦克,所以要保持贴地不能跑飞起来
&&Appearance& && && && &= TREADS& && && && && && && &&&运动表现为“履带式”,凡是用这种方式的单位,可在视觉、图像部分设置履带贴图的滚动效果
&&AccelerationPitchLimit = 5& && && && && && && && && && && & 突然加速时,最大前后倾覆角度为5度,模拟车辆加速或减速时的头/尾下压效果
&&PitchStiffness = 0.05& && && && && && && && && && && && && & 下压效果坚硬程度,属于物理引擎的表象,带有点NFS8的味道,暂时先不要随意乱动
&&RollStiffness = 0.025& && && && && && && && && && && && && &&&侧身倾斜效果的坚硬程度,同上
&&PitchDamping = 0.8& && && && && && && && && && && && && && &下压阻尼强度,使产生下压效果时不必一步到位,而是逐步震荡衰减知道最后稳定下来
&&RollDamping = 0.3& && && && && && && && && && && && && && &&&侧倾阻尼强度,同上
&&ForwardAccelerationPitchFactor = 0.5& && && && && && &前向加速下压比率,同样带有强烈的NFS8味道,没测试出有什么特别的效果
&&LateralAccelerationRollFactor = 0.33& && && && && && &&&侧向加速倾斜比率,同上
Locomotor GrizzlyTankSFLocomotor& && && && && && && &升级之后切换成这套运动系统,对比前后两套可看出仅仅是跑速增加了而已,其他没变
&&Surfaces& && && && &&&= GROUND& && && && && && && && && & 因此这个切换运动系统的升级实际上可以理解为“跑速加快”
&&Speed& && && && && &&&= 56
&&SpeedDamaged& && && & = 28
&&TurnRate& && && && &&&= 50
&&TurnRateDamaged& && & = 25
&&Acceleration& && && & = 40
&&AccelerationDamaged& &= 20
&&Braking& && && && && &= 40
&&MinTurnSpeed& && && & = 0
&&ZAxisBehavior& && && &= NO_Z_MOTIVE_FORCE
&&Appearance& && && && &= TREADS
&&AccelerationPitchLimit = 5
&&PitchStiffness = 0.05
&&RollStiffness = 0.025
&&PitchDamping = 0.8
&&RollDamping = 0.3
&&ForwardAccelerationPitchFactor = 0.5
&&LateralAccelerationRollFactor = 0.33
& && &到此为止,一个完整的单位就算是建立完毕,除了一些相对麻烦切暂时不易讲解的语句,我们暂时借用了原版的参数外,其他必须要新做的代码都有这么几大篇,可见在SAGE上建立一个新单位是多么的复杂,希望MODER好好体会这5大步骤的内容。
或许性急的MODER在做好一个新单位后立刻就要到游戏里去测试这个单位的效果了,但是他们迫不及待地打开了游戏,却发现找不到任何一个地方可以生产这个新单位,于是在QQ上乱叫,“为什么我做的新单位不能被建造啊?”没办法,我只好让他们回过头去看第一章关于TS和SAGE的第一条差别——建造方式了。不用我再多废口舌了吧,不知道原因的自己翻回去看。
6、& && &&&让新单位可以被建造出来
& && &为了迅速说明问题的所在,我们来做个实验,让美国重工来生产灰熊坦克,首先我们要给美国重工的建造栏/操作界面添加一个新的建造键,用这个建造键来生产灰熊坦克,首先打开CommandButton.ini来编写这个新按钮的定义:
CommandButton Command_CreateMTNK& && &&&函数名可自己随意设置,只要能被CommandSet.ini正确调用即可,如果调用失败会导致致命报错
&&Command& && && && && &= UNIT_BUILD& && && && &&&按钮动作为“生产物体”
&&Object& && && && && && &= MTNK& && && && &&&生产哪个物体,参数就是我们刚才定义的灰熊坦克MTNK,如果参数不正确,这个按钮将是灰色且不能点击
&&TextLabel& && && && && &= CONTROLBAR:CreateMTNK& &鼠标悬停到按钮上时就地显示的说明字段,需要CSF翻译
&&ButtonImage& && && && &= ICON64_MTNK& && && && && && &按钮图标
&&ButtonBorderType& && & = BUILD& && && && && && && && && &外框颜色类型为“生产类”,在原版里为蓝色
&&DescriptLabel& && && &&&= CONTROLBAR:ToolTipCreateMTNK&&鼠标悬停到按钮上时,左下方信息框里显示的解说字段,需要CSF翻译
& && &然后要在美国重工的界面布局里将这个按钮布置进去,特别注意,一个物体的界面上最多只能有14个按钮,假如原版已经占满了,我们就没地方可布置,那么就只能将原有的按钮去掉,将其位置空闲出来给这个按钮使用,打开CommandSet.ini,查找到AmericaWarFactoryCommandSet,其内容如下:
CommandSet AmericaWarFactoryCommandSet
&&1&&= Command_ConstructAmericaTankCrusader
&&2&&= Command_ConstructAmericaVehicleTomahawk
&&3&&= Command_ConstructAmericaVehicleHumvee
&&4&&= Command_ConstructAmericaVehicleMedic
&&5&&= Command_ConstructAmericaVehiclePaladin
&&6&&= Command_ConstructAmericaVehicleSentryDrone
&&7&&= Command_ConstructAmericaVehicleAvenger
&&8&&= Command_ConstructAmericaVehicleMicrowave
&&9&&= Command_UpgradeAmericaSentryDroneGun
&&11 = Command_UpgradeAmericaTOWMissile
&&13 = Command_SetRallyPoint
&&14 = Command_Sell
& && &仔细观察可见,原版已经布置好了13个按钮,唯独10号位置上尚没有被任何按钮占据,因此我们正好可以把建造灰熊坦克这个按钮布置到10号位置上去,修改后的内容如下:
CommandSet AmericaWarFactoryCommandSet
&&1&&= Command_ConstructAmericaTankCrusader
&&2&&= Command_ConstructAmericaVehicleTomahawk
&&3&&= Command_ConstructAmericaVehicleHumvee
&&4&&= Command_ConstructAmericaVehicleMedic
&&5&&= Command_ConstructAmericaVehiclePaladin
&&6&&= Command_ConstructAmericaVehicleSentryDrone
&&7&&= Command_ConstructAmericaVehicleAvenger
&&8&&= Command_ConstructAmericaVehicleMicrowave
&&9&&= Command_UpgradeAmericaSentryDroneGun
10 = Command_CreateMTNK& && && && && && &&&将刚才我们制作的那个按钮的函数名调用进来,切记必须和CommandButton.ini里设置的函数名一致
&&11 = Command_UpgradeAmericaTOWMissile&&否则的话,游戏将发生致命报错,根本无法运行
&&13 = Command_SetRallyPoint
&&14 = Command_Sell
& && &完成了这一系列设置之后,我们稍微修改一下灰熊的建造前提,以便使它在原版里能够被建造,即把Prerequisites(建造前提)里的GAWEAP更换为AmericaWarFactory,再到游戏里去测试,就能发现,美国重工可以生产这个单位了,将它建造出来看看,他的一系列功能是否都能达到你梦想中的要求。
& && &关于某些人在之作代码之后报错,我教你们一个办法,用地图编辑器WorldBuilder(月光宝盒)可以帮助你查错,启动月光宝盒后,它将自动进行查错,并将凡是有错的地方汇报给你,位置可以精确到一个确切的行上,如果你的英语水平达到了国家4级,你肯定能看懂它都说了些什么内容。当然,用月光宝盒查错,更多的时候查出来的只是一些不痛不痒,可有可无的小缺陷,这些缺陷可能是调用声音失败、调用图像失败等,并不影响游戏的运行,唯独只有出现了Run Time Error致命错误的地方才说明是这个地方导致了游戏的致命错误。
本帖最后由 yangqs 于
12:20 编辑
第三章&&常用Behavior功能模块详解
& && &在上一章里我们通过新建灰熊坦克的单位定义代码了解到了SAGE精华——功能模块的一些用法,但仅以一个灰熊根本难以穷举SAGE所有的功能,因此本章将专门列举所有的功能模块并详细解说它的作用。
& && &首先要说明的是功能模块的书写格式,SAGE规定,功能模块属于二级函数,需要有函数类型(Behavior)、函数名(各种各样的功能模块名称),以及模块编号(%s),格式如下:
Behavior = [函数名称]&&%s
& && &其中函数名称是一些平台内码,整个ZH平台一共就提供了这么多种功能,我们只需要调用即可。%s表示随意字符串,通常为ModuleTag_XX,目前尚不知道是否有多少个字符的长度限制,不过通常情况下为了保险,我们最好是按照一个统一的习惯,用ModuleTag_前缀加上两位数字来为函数排序。值得注意的是,任何物体代码中的各个模块不能使用相同的编号,否则会导致排序冲突,引起游戏和月光宝盒报错。
1、& && &&&死亡方式模块。这类模块的通用语句是DeathTypes,默认参数为ALL(随意),并可使用加减号来实现或、非逻辑,这些参数后面会着重列举讲解
Behavior = KeepObjectDie ModuleTag_XX& && && && && && && && && && && && && && && && &保留废墟式死亡,被杀后该物体已经被平台判死,但会留下该物体的RUBBLE阶段模型永远不消失
&&DeathTypes = ALL
点评:本模块通常用于中立建筑,如民房、油井等,因为这些房子被毁掉后将留下一片废墟占据着地面。因此切记,如果要使用这种死亡方式,该物体必须含有RUBBLE阶段的模型,否则什么都不会显示出来,但该地皮上却不能重建房子,于是导致了视觉BUG
Behavior = DestroyDie ModuleTag_XX& && && && && && && && && && && && && && && && && && &&&消失式死亡,即被杀后将本体的模型删除,安静得什么特效都没有
&&DeathTypes = ALL
点评:这是一种最基本的死亡方式,如果希望某个单位死亡后悄悄地消失掉,不引起玩家的注意,那么用它是最好的选择
&&Behavior = FXListDie ModuleTag_XX& && && && && && && && && && && && && && && && && && &&&FX特效式死亡,即被杀后引发一项FXList来产生诸如爆炸烟雾的特效
& & DeathTypes = ALL
& & DeathFX = FX_CarCrush& && && && && && && && && && && && && && && && && && && && && && && && && && &&&引发哪一个的FXList
点评:这种死亡方式需要专门为之制作一个FX特效,可用这个FX特效来间接调用粒子动画(例如爆炸烟雾、火焰等)、产生闪光、产生爆炸声音或产生屏幕抖动。DeathFX只能调用一个FX特效作参数,如果你需要多个特效组合起来产生效果,你可以考虑编写多个FXListDie模块,每个模块调用一个FX,以达到并列组合效果
&&Behavior = CreateObjectDie ModuleTag_XX& && && && && && && && && && && && && && && && &OCL式死亡,即被杀后在原地刷出一系列物体,可以刷碎片甚至另一个活单位
& & DeathTypes = ALL& && && && && && && && && && && && && &
& & CreationList = OCL_CrusaderTank_CrushEffect& && && && && && && && && && &&&根据哪个OCL项目的内容来刷物体
& & TransferPreviousHealth = Yes& && && && && && && && && && && && && && && && && && && && && & 刷出来的物体将继承被杀物体的剩余生命值信息
点评:这种死亡方式需要专门为之制作一个OCL列表,也就是说刷出来的物体可以是一种,也可以是多种,可以是一个,也可以是多个,可以使用碎片,也可以使用活单位(把步兵当作人间大炮打出去),总之OCL非常灵活,是SAGE的精华和强力功能之一,后面会着重讲解OCL的原理和制作方法
&&Behavior = CreateCrateDie ModuleTag_XX& && && && && && && && && && && && && && && && &爆箱子式死亡,即被杀后在原地爆出一个垃圾箱,这跟OCL式死亡表现相似,但实际上有区别
& & CrateData = SalvageCrateData& && && && && && && && && && && && && && && && && && && && && & 根据哪个垃圾箱规律来爆箱
点评:这种死亡方式需要专门为之制作一个CrateDate(垃圾箱逻辑),由于垃圾箱也是一种Object,因此假如你把爆箱子式死亡当成了OCL死亡来用,那简直就是糟蹋了它的实力。不过考虑到垃圾箱逻辑比较复杂,因此会放到后面来重点讲解
Behavior = UpgradeDie ModuleTag_XX& && && && && && && && && && && && && && && && && && &&&取消升级式死亡,即被杀后可以将原本已获得的一个升级项目删除掉,所有相关单位会恢复到没有升级之前的性能
& &UpgradeToRemove = Upgrade_AmericaHellfireDrone& && && && && && && && && && &&&取消哪个升级项目,如果该项目并没有被升级过或升级尚未完成则不会有任何影响
点评:这种死亡方式多用作后台处理,例如使某个升级键可以反复地使用多次,由于任何一个升级项目都只能升一次,但是可以通过取消来使之可以再重新升级,因此FK3D里辐射工兵的辐射爆发技能、间谍卫星的开屏技能就是用了取消升级的后台处理以实现可多次使用的目的
& && && && && && && && && && &&&
&&Behavior = RebuildHoleExposeDie ModuleTag_XX& && && && && && && && && && &&&留地洞式死亡,本体死亡后可留下一个地洞,地洞是个特殊的Object,一定时间后可以自动重建成本体
& & HoleName = GLAHoleArmsDealer& && && && && && && && && && && && && && && && && && && && && & 本体死亡后留下哪个地洞
& & HoleMaxHealth = 500.0& && && && && && && && && && && && && && && && && && && && && && && && && && &&&地洞最大生命值
点评:这是来自GLA建筑的特色能力,其作用属于一种特别的延时重生,和魔兽里血巫的火凤凰是一个原理,如果你仅仅杀死火凤凰,它会留下一个蛋,而蛋在一定时间后自动又孵化成火凤凰,反复无穷地相互转变,看起来似乎永远不会死,但实际上只要把蛋杀掉,就能够阻止它继续重生了
&&Behavior = SpecialPowerCompletionDie ModuleTag_XX& && && && && && && && &超武完结式死亡,当本体死亡后,使对应超武复位,开始新的一轮倒记时
& & SpecialPowerTemplate = SupW_SuperweaponNeutronMissile& && &&&使哪个超武开始新一轮倒记时,一次只能关联一个
点评:这种死亡方式多用于OCL式超武的射弹体,当射弹体以任何方式死亡(包括引爆)时,将使对应超武复位开始新一轮倒记时。如果不是这个模块的帮助,该超武就只能发射一次
&&Behavior = EjectPilotDie ModuleTag_XX& && && && && && && && && && && && && && && && && && &&&释放驾驶员式死亡,本体死亡后将释放出一个与自身级别相同的驾驶员,和OCL式死亡很相似,但作用有所提高
& & ExemptStatus = HIJACKED& && && && && && && && && && && && && && && && && && && && && && && && &排除状态为被盗取时,即正常状态下才能释放驾驶员,被劫持后是释放劫持犯
& & GroundCreationList = OCL_EjectPilotOnGround& && && && && && && && && && &&&根据哪个OCL列表来刷物体,当然,这里的物体特指驾驶员
& & AirCreationList = OCL_EjectPilotViaParachute& && && && && && && && && && && && && & 驾驶员可分为地面和空中二种,前者是直接刷,后者是跳伞下来
& & VeterancyLevels = ALL –REGULAR& && && && && && && && && && && && && && && && && && &&&当本体的级别不是新兵时,释放出来的驾驶员的级别将与本体相等
点评:这种死亡方式来自美军的绝大多数载具,其功能很相似于OCL式死亡,但比OCL式死亡更厉害的时,刷出来的单位可以与本体级别相等
2、& && &&&延迟死亡模块。这类模块的通用语句是DestructionDelay,控制死亡延迟的时间。虽然我将之称为延迟死亡,但千万不要误会这个模块可以让单位在变成尸体后还能继续当作骷髅兵使用,事实上当单位的血扣到0时,虽然不会马上死亡,但却已经不能再选中它,自然也就不能再使用它了,它将去做死亡过程动作。
Behavior = SlowDeathBehavior ModuleTag_XX& && && && && && && && && && && && && & 普通延迟,被杀单位将立刻停止一切动作并不再接受控制,静置原地,延迟一段时间后死亡
& & DeathTypes = ALL
& & ProbabilityModifier = 25& && && && && && && && && && && && && && && && && && && && && && && && && && &&&引发几率百分比,默认值为100,表示100%,即绝对
& & DestructionDelay = 2000& && && && && && && && && && && && && && && && && && && && && && && && && && &&&死亡延迟时间,单位为毫秒,2000毫秒=2秒
& & DestructionDelayVariance = 1000& && && && && && && && && && && && && && && && && && && && && & 延迟时间的随机偏差为1000毫秒,使得实际的延迟时间从1秒到3秒之间随机出现
OCL = INITIAL& &OCL_WorkerFlyingOffBikeDeathStart& && && && && && && && &死亡动作开始时刷出什么东西来,INITIAL表示初始,即刚开始的时候
& & OCL = FINAL& & OCL_MTNKDebris& && && && && && && && && && && && && && && && && && &&&死亡动作完成后刷出什么东西来,FINAL表示最终,即完成之后
FX&&= INITIAL& &FX_BuggyNewDeathExplosion& && && && && && && && && && &&&死亡动作开始时引发什么FX特效
& & FX&&= FINAL& & FX_BattleMasterExplosionOneFinal& && && && && && && && &死亡动作完成后引发什么FX特效
点评:常用于地面单位的一种死亡动作,用于坦克的话,被消灭的坦克不会像RA2那样立刻爆炸,而是先变成RUBBLE阶段模型,同时不再接受玩家控制、不再显示血格、不能被选中、立刻停止所有动作,静置在原地,延迟一段时间再爆炸,飞出炮塔、炮管残骸。而用于步兵的话,则通常利用这段延迟的时间让步兵做出死亡倒地的动作,逼真感十足。
Behavior = JetSlowDeathBehavior ModuleTag_XX& && && && && && && && && && && && && & 俯冲坠落延迟,被杀单位的死亡动作为从空中俯冲下来撞击地面
& & DeathTypes = ALL
& & DestructionDelay& && && && && &= 2000
& & RollRate& && && && && && && &&&= 0.0& && && && && && && && && && && && && && && && &俯冲坠落过程中本体的旋转速度,0表示不旋转
& & RollRateDelta& && && && && && &= 100%& && && && && && && && && && && && && && && && &调整旋转速度倍率的,100%表示原样速度,大于100%表示加快,反之则减慢
& & PitchRate& && && && && && && & = 0& && && && && && && && && && && && && && && && && && &&&俯冲角改变速度,0表示保持恒定的俯冲角下落
& & FallHowFast& && && && && && & = 25.0%& && && && && && && && && && && && && && && && &坠落速度百分比,100%的速度似乎是自由落体速度,和GameData里设置的重力加速度有关
& & FXInitialDeath& && && && && && &= FX_JetBigDeathInitial& && && && && & 被杀瞬间(刚开始俯冲时)引发的特效
& & OCLInitialDeath& && && && && &&&= OCL_AmericaJetCargoDeathStart& && && && && & 刚开始俯冲时刷出来的物体
& & DelaySecondaryFromInitialDeath&&= 2000& && && && && && && && && && && && && && && && &俯冲状态持续时间
& & OCLSecondary& && && && && && &= OCL_AmericaJetCargoHulkDeath& && && && && & 撞到地面后刷出来的物体
& & FXSecondary& && && && && && & = FX_BigPlaneDeath& && && && && && && && &撞到地面后产生的爆炸特效
点评:这是一个逼真度非常高的死亡动作,完美地模拟了攻击机坠毁的全过程
&&Behavior = NeutronMissileSlowDeathBehavior ModuleTag_XX& && && && && & 弹头爆炸延迟,被“杀”单位的死亡动作为连续释放出9个阶段的冲击波范围伤害
& & DeathTypes = ALL& && && && && && && && && && && && && && && && && && && && && && && && && && && && && &
& & DestructionDelay& & = 3501& && && && && && && && && && && && && && && && && && && && && && && && &
& & ScorchMarkSize& && &= 320& && && && && && && && && && && && && && && && && && && && && && && && &弹坑尺寸,由于是弹头爆炸,因此加入弹坑效果以增加逼真感
& & FXList& && && && &&&= SupW_FX_Nuke& && && && && && && && && && && && && && && && &弹头爆炸过程的FX特效,例如核弹爆炸的蘑菇云
& & Blast1Enabled& && & = Yes& && && && && && && && && && && && && && && && && && && && && && && && &启动1阶冲击波
& & Blast1Delay& && && &= 580& && && && && && && && && && && && && && && && && && && && && && && && &1阶冲击波产生延迟时间
& & Blast1ScorchDelay& &= 100& && && && && && && && && && && && && && && && && && && && && && && && &1阶冲击波导致弹坑的延迟时间
& & Blast1InnerRadius& &= 60.0& && && && && && && && && && && && && && && && && && && && && && && && &1阶冲击波内层伤害半径,凡是处于这个范围内的目标将遭受100%的伤害比率
& & Blast1OuterRadius& &= 120.0& && && && && && && && && && && && && && && && && && && && && && && && &1阶冲击波外层伤害半径,凡是介于内外层之间的目标遭受的伤害将削弱,不知道是不是按距离线性削弱
& & Blast1MaxDamage& &&&= 150.0& && && && && && && && && && && && && && && && && && && && && & 1阶冲击波最大伤害值,特别注意冲击波的DamageType默认为EXPLOSION,属于平台内定的,没办法修改和替换
& & Blast1MinDamage& &&&= 75.0& && && && && && && && && && && && && && && && && && && && && & 1阶冲击波最小伤害值,由最大和最小伤害值来产生一个随机伤害值的效果
& & Blast1ToppleSpeed& &= 0.5& && && && && && && && && && && && && && && && && && && && && && && && &1阶冲击波气浪扩散速度,冲击波可将树木冲倒
& & Blast1PushForce& &&&= 10.0& && && && && && && && && && && && && && && && && && && && && && && && &1阶冲击波气浪推力大小,冲击波可将高塔等死后会倒塌的物体推倒
& & ………………………& && && && && && && && && && && && && && && && && && && && && && && && && && && && &2-9阶冲击波的所有设置语句和1阶类似,此处略去。若不需要此阶冲击波,可以不定义
& & OCL = MIDPOINT& &OCL_NukeRadiationField& && && && && && && && && && && && && & 弹头爆炸后在爆心位置刷出什么物体,原版用它来给核弹刷辐射带,当然也可以刷活单位
点评:我不知道这个模块除了用来做核弹还能用来做什么,虽然任何武器的射弹体都能使用,但由于爆炸伤害的DamageType只能是平台内定的EXPLOSION,不能替换成我们想要的类型,因此也很让人郁闷,而要在爆心刷物体,我们不如使用简单的OCLDie,估计它唯一的作用仅仅就是实现一个能将树木和房子推倒的效果
&&Behavior = HelicopterSlowDeathBehavior ModuleTag_XX& && && && && && && && &竖直坠落延迟,被杀单位的死亡动作为竖直向下跌落至地面
& & DeathTypes = ALL
& & DestructionDelay& && && && && & = & && && && && && && && && && && && && & 搞不懂为什么竖直坠落的延迟死亡时间要设置这么长,难道是怕单位飞得过于太高,半天落不了地??
& & SpiralOrbitTurnRate& && && && &&&= 140.0& && && && && && && && && && && && && && && && &坠落过程中的公转速度,类似RA2里飞碟那种即以本体中心为圆心自转,还要以体外某个点为圆心公转的坠落动作
& & SpiralOrbitForwardSpeed& && && &= 350.0& && && && && && && && && && && && && && && && &公转轨道前进速度,没搞懂啥意思,难道公转轨道的位置不是固定的?
& & SpiralOrbitForwardSpeedDamping&&= .9999& && && && && && && && && && && && && & 公转轨道速度阻尼大小,使公转轨道的移动速度不均匀地变动
& & MaxBraking& && && && && && && &= 190& && && && && && && && && && && && && && && && &公转轨道负向加速度,类似于“刹车效果”& &
& & SoundDeathLoop& && && && && & = ComancheDamagedLoop& && &&&坠落过程中播放的音效
& & MinSelfSpin& && && && && && && &= 100& && && && && && && && && && && && && && && && &最小自转角速度,单位为度每秒
& & MaxSelfSpin& && && && && && && &= 300& && && && && && && && && &&&最大自转角速度
& & SelfSpinUpdateDelay& && && && & = 100& && && && && && && && && && && && && && && && &自转轨迹修正间隔时间
& & SelfSpinUpdateAmount& && && &&&= 10& && && && && && && && && && && && && && && && &自转轨迹修正量
& & FallHowFast& && && && && && && &= 12.0%& && && && && && && && && && && && && & 坠落速度百分比,100%的速度似乎是自由落体速度,和GameData里设置的重力加速度有关
& & MinBladeFlyOffDelay& && && && & = 750& && && && && && && && && && && && && && && && &最小碎片爆飞延迟时间,单位为毫秒
& & MaxBladeFlyOffDelay& && && && & = 1500& && && && && && && && && && && && && & 最大碎片爆飞延迟时间,同上
& & AttachParticle& && && && && && &&&= SootySmokeTrail& && && && && && && && &关联一个粒子系统,用于模拟黑烟效果
& & AttachParticleBone& && && && && &= Propeller02& && && && && && && && && && &&&关联例子系统的骨骼点,需要对应W3D模型里的模型块/骨骼点名称
& & BladeObjectName& && && && && & = ComancheBlades& && && && && && && && &碎片为什么物体,SAGE把碎片也认为是Object,因此可以替换成活单位,又一次邪恶……
& & BladeBoneName& && && && && &&&= Propeller01& && && && && && && && && && &&&关联碎片的骨骼点
& & OCLEjectPilot& && && && && && &&&= OCL_EjectPilotViaParachute& && && && && & 在半空中刷出一个物体,例如跳伞的飞行员
& & FXBlade& && && && && && && && & = FX_HelicopterBladeExplosion& && && && && & 爆出碎片时的FX特效
& & OCLBlade& && && && && && && && &= OCL_HelicopterBladeExplosion& && &&&爆出碎片时刷出什么物体,例如其余小残片、飞火等等
& & FXHitGround& && && && && && && &= FX_HelicopterHitGround& && && && && && && && &坠地时的FX特效
& & OCLHitGround& && && && && && & = OCL_HelicopterHitGround& && && && && && && && &坠地时刷出什么物体
& & FXFinalBlowUp& && && && && && &= FX_GroundedHelicopterBlowUp& && && && && & 坠地引发气浪的FX特效
& & OCLFinalBlowUp& && && && && &&&= OCL_GroundedHelicopterBlowUp& && &&&坠地引发气浪时刷出什么物体
& & DelayFromGroundToFinalDeath& & = 1500& && && && && && && && && && && && && && && && && && && && && & 从坠地到最终死亡之间的死亡延迟时间
& & FinalRubbleObject& && && && && &= ComancheRubbleHull& && && && && && && && && && &&&最终残骸物体,即死亡后地上残留的尸体
点评:这似乎是SAGE里最复杂的延迟死亡模块,常用于直升机,整个坠落过程分得特别详细,事实上有很多语句都是多余的。
&&Behavior = BattleBusSlowDeathBehavior&&ModuleTag_XX& && && && && && && && &战斗巴士爆炸延迟,不常用的模块,似乎只用于战斗巴士,因此研究不太透彻,若有错误请指出
& & DeathTypes = ALL
& & ProbabilityModifier = 5& && && && && && && && && && && && && && && && && && && && && && && && && && &&&引发几率百分比
& & ModifierBonusPerOverkillPercent = 20%& && && && && && && && && && && && && && && && &过度伤害值加成几率百分比,正值为增加几率,负值为减少几率
& & FXStartUndeath = FX_BattleBusStartUndeath& && && && && && && && && && && && && & 开始死亡过程时引发的FX特效
& & OCLStartUndeath = OCL_BattleBusStartUndeath& && && && && && && && && && &&&开始死亡过程时刷出什么物体
& & FXHitGround = FX_BattleBusHitGround& && && && && && && && && && && && && && && && &死亡过程结束时引发什么FX特效
& & OCLHitGround = OCL_BattleBusHitGround& && && && && && && && && && && && && & 死亡过程结束时刷出什么物体
& & ThrowForce = 100.0& && && && && && && && && && && && && && && && && && && && && && && && && && && && && & 爆飞力度,不知道是把自己爆飞还是把敌人爆飞??
& & PercentDamageToPassengers = 50%& && && && && && && && && && && && && && && && && && &&&本体死亡时对乘员的伤害,0%表示不伤害乘员,50%表示扣半血,100%表示直接扣死
& & EmptyHulkDestructionDelay = 1000& && && && && && && && && && && && && && && && && && &&&空残骸死亡延迟时间,没搞懂什么叫空残骸
& & DestructionDelay = 0& && && && && && && && && && && && && && && && && && && && && && && && && && &&&死亡延迟时间,这里的死亡延迟时间相对于空残骸死亡时间来说应该是前一段,设置为0表示不使用
& & DestructionDelayVariance = 200& && && && && && && && && && && && && && && && && && && && && & 后面这些语句和普通延迟一样,就不多说了
OCL = INITIAL& &OCL_WorkerFlyingOffBikeDeathStart& && && && && && && && &
& & OCL = FINAL& & OCL_MTNKDebris& && && && && && && && && && && && && && && && && && &&&
FX&&= INITIAL& &FX_BuggyNewDeathExplosion& && && && && && && && && && &&&
& & FX&&= FINAL& & FX_BattleMasterExplosionOneFinal& && && && && && && && &
点评:我对这个模块从来没有研究过,不知道有什么奥秘,而原版也只在战斗巴士上用过它,看语句似乎可以实现爆炸时一定几率的伤害值加成。有兴趣的MODER可以去研究研究。
&&Behavior = InstantDeathBehavior DeathModuleTag_XX& && && && && && && && &立即死亡(即不延迟),自然也就做不出任何死亡动作,只能产生FX特效和OCL
& & DeathTypes = NONE +LASERED
& & FX& && && &= FX_GenericMissileDisintegrate
& & OCL& && &&&= OCL_GenericMissileDisintegrate
3、& && &&&加血类模块。这类模块的通用语句为HealingAmount和HealingDelay,用于控制每次加血量与间隔时间,加血模块可以给本体加血,也可以给本体周围的其他物体加血,使用范围非常广泛,包括广播塔和紧急维修技能也是一种变相的自动加血模块,因此我将它们放到一起来解说。
Behavior = AutoHealBehavior ModuleTag_XX& && && && && && && && && && && && && && && && &普通治疗
& & HealingAmount& &&&= 5& && && && && && && && && && && && && && && && && && && && && && && && && && &&&每次加血量
& & HealingDelay& && & = 1000& && && && && && && && && && && && && && && && && && && && && && && && &加血间隔时间,单位为毫秒
& & Radius& && && && & = 100.0f& && && && && && && && && && && && && && && && && && && && && & 有效作用范围,若超过了自身体积则可以对周围物体加血,后面的“f”不知道有啥含义。默认为0,即只给自己加血
& & StartsActive& && &&&= Yes& && && && && && && && && && && && && && && && && && && && && && && && &初始时是否激活。Yes表示自动激活,No则需要Upgrade来将其激活(见下面的TriggeredBy语句),默认为Yes
& & KindOf& && && && &= VEHICLE INFANTRY& && && && && && && && && && && && && & 对含有哪些类型标签的物体有效
& & ForbiddenKindOf& &= AIRCRAFT& && && && && && && && && && && && && && && && && && && && && & 对含有哪些类型标签的物体无效
& & SkipSelfForHealing&&= Yes& && && && && && && && && && && && && && && && && && && && && && && && &是否忽略自己,Yes表示不给自己加血,No则表示可以给自己加血,默认为No。
& & TriggeredBy& && &&&= Upgrade_GLAJunkRepair& && && && && && && && && && &&&如果StartsActive = No,则需要这里设置一个Upgrade项目来将之激活才能实现加血功能,否则什么作用都不起
& & SingleBurst& && && &= Yes& && && && && && && && && && && && && && && && && && && && && && && && &是否只作用一次,紧急维修里使用的特殊语句,Yes表示只加一次血,No则会按照间隔时间产生多次加血,默认为No
StartHealingDelay& &= 15000& && && && && && && && && && && && && && && && && && && && && && && && &本体受伤后延迟多长时间再启动加血功能,单位为毫秒,一般只用于本体自加血的情况
点评:这是最基本的一个加血模块,其功能几乎涵盖了以下3种特殊加血模块的所有功能,可以实现任何加血规则和效果,但要特别注意,这个模块里存在相互关联的语句,例如StartsActive为Yes的时候,TriggeredBy将失去意义,即便设置了Upgrade项目也是多余的,还有就是KindOf和ForbiddenKindOf是相互冲突的,其参数不能存在相同标签,胡乱设置的话小心引起逻辑冲突导致加血规则一塌糊涂。顺带说一句,不知道EA是怎么想的,有AutoHealBehavior还嫌不够,还要额外做那么多功能重复的多余模块。
Behavior = BaseRegenerateUpdate ModuleTag_XX& && && && && && && && && && &&&基地恢复,这是一个宏观模块,没有参数,关于加血量和加血间隔都由GameData控制,原版里用于美军基地建筑
& & ;No data& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &&&事实上完全可以用AutoHealBehavior来代替
点评:纯属垃圾一个,我讨厌宏观功能。
&&Behavior = AutoFindHealingUpdate& &ModuleTag_XX& && && && && && && && && && &&&自动搜索加血源,我没仔细研究过这个模块,从字面意思来看似乎能使本体在受伤后自动跑到维修厂或医院去请求加血
& & ScanRate& & = 1000& && && && && && && && && && && && && && && && && && && && && && && && && && &&&搜索间隔时间,单位为毫秒
& & ScanRange&&= 300& && && && && && && && && && && && && && && && && && && && && && && && && && && && && & 搜索范围,难道说只要这个范围内存在加血源,他就要自动跑过去?
& & NeverHeal& &= 0.85& && && && && && && && && && && && && && && && && && && && && && && && && && && && && & 当本体的剩余生命值大于多少时就不用去找加血源,0.85表示85%
& & AlwaysHeal&&= 0.25& && && && && && && && && && && && && && && && && && && && && && && && && && && && && & 当本体的剩余生命值小于多少时就立刻去搜索加血源
点评:看起来挺有意思,只是我没研究过,不知道会有啥新发现。有兴趣的MODER可以去探索探索。
&&Behavior = PropagandaTowerBehavior ModuleTag_XX& && && && && && && && && && &&&广播塔加血,用来加血的话简直糟蹋了这个模块,事实上它还有更加高深的用法,就看你是不是醉翁之意不在酒了
& & Radius& && && && && && &= 150.0& && && && && && && && && && && && && && && && && && &&&有效作用范围,这个模块只能给周围物体加血(对自己无效),所以这个值必须大于自身体积
& & DelayBetweenUpdates& & = 2000& && && && && && && && && && && && && && && && && && && && && & 脉冲特效间隔时间,单位为毫秒,只控制脉冲FX特效的播放间隔,不控制加血间隔时间
& & HealPercentEachSecond&&= 2%& && && && && && && && && && && && && && && && && && && && && & 每秒钟恢复周围物体百分之多少的生命值,这不是一个固定值,而是用接受治疗物体的生命值上限计算出来的
& & PulseFX& && && && && &&&= FX_PropagandaTowerPropagandaPulse& && && && && & 初始时的脉冲FX特效
& & UpgradeRequired& && && &= Upgrade_ChinaSubliminalMessaging& && && && && & 需要哪个Upgrade来升级成效果更强烈的加血作用
& & UpgradedHealPercentEachSecond = 4%& && && && && && && && && && && && && && && && && && && && && & 升级完成后,加血作用更改为每秒百分之多少
& & UpgradedPulseFX& && &&&= FX_PropagandaTowerSubliminalPulse& && && && && &&&升级完成后的脉冲FX特效
点评:之所以说醉翁之意不在酒,就在于广播塔可以利用升级来调用两个FX特效,于是一些怀有邪恶构思的MODER就利用这两个FX特效来做一些特殊效果,比如FK3D里蝰蛇巡航机的ForceField技能效果,以及英雄标志圈等等……感觉好像只有我本人才怀有邪恶的构思一样……
4、& && &&&升级切换类模块。这类模块的通用语句包括TriggeredBy和ConflictsWith,前者表示获得了某个Upgrade后开启该模块的功能,后者表示获得了某个Upgrade后关闭该模块的功能,可见二者是相互冲突的,在实际使用时千万要注意参数,否则将把升级功能搞得一塌糊涂。
此外必须要提到的是,TriggeredBy和ConflictsWith的参数可以有多个Upgrade,如果仅仅是单纯的并列时,表示或逻辑(即只要获得了其中任意一种Upgrade就开启/关闭模块功能),而TriggeredBy可以利用RequiresAllTriggers = Yes来将并列的几个Upgrade关系变成与逻辑(即必须获得了所有这些Upgrade才能开启模块功能)
&&Behavior = MaxHealthUpgrade ModuleTag_XX& && && && && && && && && && && && && & 增加生命上限,启动模块后,该物体的生命上限增加一定数量
& & TriggeredBy& & = Upgrade_ChinaAircraftArmor
& & AddMaxHealth&&= 100.0& && && && && && && && && && && && && && && && && && && && && && && && && && &&&生命上限增量,例如原来是600,启动后就变成700了
& & ChangeType& & = ADD_CURRENT_HEALTH_TOO& && && && && && && && && && &&&同时增加当前生命值,例如生命上限600,但物体受损后生命值还剩余200,启动后,当前生命值就变成300了
&&Behavior = ExperienceScalarUpgrade ModuleTag_XX& && && && && && && && && && &&&经验值翻倍,启动模块后,该物体杀人所获得的经验值(包括贡献给将军的经验值)增加一定的倍数
& & TriggeredBy& &= Upgrade_AmericaAdvancedTraining
& & AddXPScalar& &= 1.0& && && && && && && && && && && && && && && && && && && && && && && && && && &&&翻1倍,即变成原来的2倍
&&Behavior = ObjectCreationUpgrade ModuleTag_XX& && && && && && && && && && &&&刷物体,启动模块后,该物体将在当前所在位置刷出一系列物体
& & UpgradeObject = OCL_AmericanBattleDrone& && && && && && && && && && && && && & 按照哪个OCL来刷物体
& & TriggeredBy& &= Upgrade_AmericaBattleDrone
& & ConflictsWith = Upgrade_AmericaScoutDrone Upgrade_AmericaHellfireDrone& && && && && & 当获得了这两种Upgrade里的任意一种时,该模块关闭,不再发挥作用,也就啥也刷不出来了
&&Behavior = WeaponSetUpgrade ModuleTag_XX& && && && && && && && && && && && && & 切换武器系统,启动模块后,该物体的武器系统的条件标签将更换为PLAYER_UPGRADE
& & TriggeredBy = Upgrade_AmericaSentryDroneGun
点评:这个模块单独存在是不起任何作用的,必须要配合该物体代码里的武器系统——WeaponSet代码才能发挥作用,这是由于升级后,该物体的武器系统将自动被游戏平台打上一个PLAYER_UPGRADE的条件标签,这个标签影响了WeaponSet的选取情况,于是导致了切换武器的效果。例如我们这样来设置一个物体的武器系统:
&&WeaponSet
& & Conditions&&= None& && && && && && && && && && && && && && && && && && && && && && && && && && &&&默认武器系统,即升级前使用的武器系统
& & Weapon& & = PRIMARY& && &SonicZap
& & Weapon& & = SECONDARY& &NormalMissile
&&WeaponSet
& & Conditions&&= PLAYER_UPGRADE& && && && && && && && && && && && && && && && && && &&&启动了WeaponSetUpgrade模块后使用的武器系统,同时默认武器系统将被屏蔽,暂时不被使用
& & Weapon& & = PRIMARY& &&&SteadySonicZap
Weapon& & = SECONDARY&&ExplodeMissile
& & Weapon& & = TERTIARY& &&&120mmX
那么在升级之前,这个物体将以SonicZap为主武器,NormalMissile为副武器,没有第三武器。升级之后将更换为以SteadySonicZap为主武器,ExplodeMissile为副武器,多出了一个第三武器120mmX。而之前的SonicZap和NormalMissile将暂时不再被使用(除非用邪恶的手段扣掉已经获得的这项升级,如UpgradeDie等,使武器系统的条件标签又退回到None,那么之前的武器将再次被使用,而升级后的武器将暂时不再被使用)。
&&Behavior = ArmorUpgrade ModuleTag_XX& && && && && && && && && && && && && && && && &切换护甲系统,启动模块后,该物体的护甲系统的条件标签将更换为PLAYER_UPGRADE
& & TriggeredBy = Upgrade_AmericaChemicalSuits& && && && && && && && && && && && && & 这个模块的原理和WeaponSetUpgrade差不多,也需要配合ArmorSet语句,因此不再多讲,自己去体会它是如何切换的
&&Behavior = WeaponBonusUpgrade ModuleTag_XX& && && && && && && && && && &&&武器强化,启动后,该武器的条件标签将更换为PLAYER_UPGRADE
& & TriggeredBy = Upgrade_ChinaChainGuns
点评:这个模块单独存在同样不起任何作用,必须要配合武器代码里的WeaponBonus语句才能发挥作用。例如在某个武器里加上这个语句:
WeaponBonus = PLAYER_UPGRADE&&DAMAGE&&150%
这里同样出现PLAYER_UPGRADE标签,可见WeaponBonus也是要识别标签才能发挥作用的。后面的DAMAGE表示强化伤害值,此外还可以选用RADIUS(伤害范围)、RANGE(射程)、RATE_OF_FIRE(攻速)、PRE_ATTACK(瞄准时间)。最后的150%表示变为原来的1.5倍。需要说明的是,提升攻速,填150%表示开火间隔时间缩短50%,即攻速加快,与TS正好是反的,同样瞄准时间也是如此,150%表示瞄准时间缩短50%,即更快地瞄准目标然后开火,这与TS又是反的,所以千万不要设置错了,否则就不是强化武器,而是弱化武器了。
&&Behavior = LocomotorSetUpgrade ModuleTag_XX& && && && && && && && && && && && && & 切换运动系统,启动模块后,该物体的运动系统的条件标签将更换为SET_NORMAL_UPGRADED
& & TriggeredBy = Upgrade_ChinaNuclearTanks
点评:这个模块单独存在同样不起任何作用,必须要配合物体代码里的Locomotor语句才能发挥作用。前面提到过灰熊的运动系统是这样设置的:
&&Locomotor = SET_NORMAL& && && && &&&GrizzlyTankLocomotor
&&Locomotor = SET_NORMAL_UPGRADED&&GrizzlyTankSFLocomotor
这里出现了SET_NORMAL和SET_NORMAL_UPGRADED两个标签,可见Locomotor也要识别标签来选取对应的运动模式给物体使用。有人认为运动系统的切换方向是单向的,但我认为这种说法并不十分确切,因为摩托车模块已经证明了运动模式可以来回切换,因此事实上只能说,SET_NORMAL和SET_NORMAL_UPGRADED之间的切换是单}

我要回帖

更多关于 worlds collide歌词 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信