工具软件在此下载
http://yrmod-tools.ys168.com/
必须下载其中的《代码词典》
代码词典是必要性工具文件,需要通读而非仅仅查阅
一.总体观念
0.什么是mod
新手口中的“版本”,modification的缩写。直观来说就是游戏内容和原版游戏不同的对于游戏内容的修改。
1.ts平台(也称游戏引擎)介绍
要做mod,必须了解游戏的构成,否则绝无可能对游戏的内容进行目的明确的修改。
ra2的游戏主程序由c&c2泰伯利亚之日平台修改而来,和ts相比区别不大。熟悉ra2平台的人一定可以看得懂ts的代码。两者的差距在于游戏内容上。通称ts平台。尤里复仇不过是在ts平台改版上的又一次修改,本质还是ts引擎。尤里平台上还有修改,英国的RockPatch,通称rp平台和之后的NewPatch,通称np平台。np又有秋季版npae和特别版npse。最后最新一代是中国的np extension 172,在本吧网盘就有。因为红警2平台的局限性,现在的mod基本都是尤里和更高级平台上的。
游戏平台通常指ra2的game.exe,尤里复仇的gamemd.exe(md,mission disk)。他们并不大,5m不到。占据游戏主要体积的是各种素材,如地形,音效文件,游戏主界面,各种单位的素材等。在绘制素材的基础上由游戏引擎根据ini设定进行数据赋值,就是我们看的到的游戏。素材的区别也正是游戏内容的区别。modder有能力改动的不过是游戏内容,对于游戏主程序通常无能为力。什么是主程序功能呢?最简单来说,ra2平台没有盖特系统,尤里平台才出现,所以把尤里的盖特机炮代码放入原版平台是没有效果的。平台的局限性要有所了解,才可以根据平台来实现设定。
所以说,如果你打算做一个有趣的mod,至少要是基于NPext平台,原版平台的mod除非你有极高的水平来制作出超越平台限制的功能,否则基本做不出亮点来。
2.游戏资源读取
modder如何修改游戏内容?在游戏目录里根本看不到可以修改的东西。最大的就是大量的.mix文件了。mix是westwood的游戏素材包,就像暴雪的mpq文件,可以简单当作rar压缩包。当然,winrar是打不开mix文件的。专用于ts平台mod开发的工具是xcc系列,在尤里mod吧网盘里可以找到下载。将素材解压,就可以用专门的素材处理软件处理了。如果要修改ini,更加简单,提取到游戏根目录,记事本修改后保存,对游戏内容有立竿见影的效果。游戏的各种资源读取顺序是首先地图覆盖游戏目录的ini,游戏根目录ini覆盖所有mix文件的ini,expand,ecache这两类扩展mix覆盖原装mix所有同名内容。expand(md),ecache(md)是westwood为开发mod内定的文件名,在此mix中的文件在使用中会覆盖原装mix中的同名者。
所以,moder的工作就是替换游戏设定和游戏资源文件,营造出不同的效果。
在展开一切的修改之前,要理解的是[注册名]这一概念。注册名以下的内容直到下一个注册名的开始,都是一个代码段,其中的设定会作为整体发挥作用。对于有编程基础的人来说,很容易理解。如果毫无经验,简单了解这是个相当于一切类型的代码段『真正名字』的东西,而且是整段调用的符号即可。
另外,注册名只是一种说法,有些内容是不存在注册表不需要注册的。Ini内部的注册表的相关内容下文中会提到。
一切对于注册名的引用都要严格大小写区分,且不要出现同字母不同大小写构成的重复注册名。详细原因不加探究,总之规范的INI书写让你永远不会犯一些傻逼错误。不规范犯错的时候,告诉你这个限制,你可别惊讶。不规范的后果自负。提倡所有注册名第一个字母大写,其他部分参考原注册表的大小写格式。
3.游戏资源简介
游戏内容由各种资源决定。尤里的ini和mix文件名都比原版多出了md二字,以后不再多说,如果无特殊解释,请视为举例的对象适合红警2和尤里。但是图像素材没有此类规定,它们只要注册就可以使用。某些尤里专有内容只有在md的mix和ini中才能生效。
基础能力:照抄。原版ini是最好的老师,当不知该如何制作框架时,复制原版的一个代码段,修改注册名使游戏认为它是一段新内容,注册并修改具体内容。有关注册,后面会有讲解。
ini体系简述如下
rules:基础之基础。会专门重点讲解系统。
art:游戏内部图像设定,语句很少,体系简单。在此注册素材和碎片,设置粒子关联和导弹尾烟。
ai:人工智能定义文件
sound:定义游戏内声音的ini,只要照抄原有内容即可。
eva:对指挥官的语音播报
其他看得见听得着的素材:
wav:声音素材,采样率352KBPS,单声道,22KHz,否则无法播放。建议打开原始的一段音频,修改内容并重命名。必须打包进audio.bag。xcc mixer-launch-xcc soundeditor可以打开声音包。拖进去并在sound中注册。
shp和vxl:图像素材。新素材在使用之前必须在art中注册。注册方式参考原版素材。
不懂参考????那么,是个SHP车的就复制蜘蛛的代码,是个步兵就复制动员兵代码,是个VXL就复制鸡落夫代码,复制出来的把注册名改成素材的名字,全大写就行了
shp
游戏内动画,步兵,建筑,炮弹和蜘蛛的图形文件。本质是索引,需要对应的色盘。索引就是只告知游戏某点是某号颜色,游戏自动挑选色盘,读取颜色并绘制。如果色盘错误,就会花掉,如共辉里雌鹿的图标。shp文件是ts引擎的古老落后的一个方面。色盘是.pal文件,photoshop可以生成,但是和红警的色盘不一样。xcc mixer自动载入色盘的快捷键是ctrl+q,或者手工选择。反正找pal这三字母就行。SHP修改软件:OSShpBuilder
不同于vxl的缩放,shp的缩放是不可逆的,因为直接改变了素材本身,vxl的缩放只是设定了游戏中的显示方式。
载入画面的名字是glslmd,对应色盘是glsmd.pal。很多人被这玩意东西的制作困惑着,介绍一种简单的办法:
以前moder们主要使用XCC来制作这些界面,因为直接粘贴进SHP BUILDER(通常说的SB)会花掉。而到了SB3.36的时代,一切图形都可以粘贴,由SB自动对应色盘上的点。所以有什么看中的图想做成载入界面,只要做成800X600,然后在SB里挑好色盘,粘贴后保存即可。而色盘则直接去原mix里提取刚才选定的。当然,这是偷懒的做法,如果想要色盘和封面的契合度高还是自己另行制作色盘吧。
制作色盘的办法是先用PS转换图片为索引色PNG,然后在XCC里找到,右键,复制为PAL即可。然后在SB里新建一个1帧单像素文件,载入好色盘,把原图粘贴进去,然后把所有0号色换成白色,就行了。这样做出来的载入图之类质量较高。
详细如下
http://tieba.baidu.com/f?kz=1013755765
同理,制作图标也可以直接粘贴了。因为图标色盘是锁定的cameo.pal,所以这是最最省事的办法。但是,图标色盘缺少紫色色系,粘贴进去会掉色。
建筑素材:在art中书注册了某素材是“MACNST”,素材MACNST也有,但是只有在雪地里才能看见。这是因为游戏是按照一个特定的格式读取建筑素材(无论是建筑本体还是建筑动画)的。目前,最保险的办法是所有素材的art注册的第二个字母都是A,而后规则如下:
雪地:*A****,温和*T****,街区*U****,如果没有的话默认使用*G****。
此方法只适用于NP,原版素材开头的字母必须是NGY三者之一
vxl
游戏内绝大多数车辆,所有飞机和少部分碎片的图形文件,假3d,因为基本构成是点,真3d基本构成是平面。vxl可以简单看作堆好的像素积木。作为积木,游戏需要了解在游戏中如何放置。用设定软件设定。同时也可以设定vxl动画,炮塔位置和在游戏中的缩放。
一切新的VXL素材的引入都必须有一个配套的HVA来标定在游戏中的显示方式,否则无法显示。此外,注册为aircraft的所有单位的素材都必须是VXL。
VXL单位的动画在HVA中设定。
修改(堆积木)软件:vxlse
HVA生成软件:HVABuilder
简单VXL教程
http://tieba.baidu.com/f?kz=690182833
对于SHP和VXL的调用使用Image=标签,所有素材都必须先在ART中声明,比如有一个素材叫shit.shp,则在ART中必须至少写入
[SHIT]
才可以在rules中调用Image=SHIT。
如果有一个VXL叫fucker.vxl,在有配套的HVA的同时,在ART里至少要有
[FUCKER]
Voxel=yes
然后才可以在rules里调用。
游戏原版rules里很多单位并没有写Image=,因为rules注册名和art注册名相同,便直接调用了。
单位炮塔的调用是通过游戏自动配对的,假如一个vxl素材叫bitch.vxl,那么它的炮塔就是bitchtur.vxl,炮管是bitchbarl.vxl。
建筑炮塔则是专门的语句设定,参考哨戒炮(小白们,你们得懂点鹰语啊!里面有一句“炮塔是否是VXL素材”,无数小白根本看不见这一句,不显示还问我为什么)
建筑使用SHP炮塔的话,SHP炮塔需要在ART里注册,似乎按照蜘蛛的格式书写就可以了
给单位设定图像的唯一方法是Image=填写ART里某个注册名。冷晓辉编辑器新增单位没有图像基本都是因为不会填Image。
飞行器必须使用vxl素材,否则立刻IE(什么是IE?不是浏览器,详细见下文)
游戏界面
一系列shp。尤里载入界面是glslmd.shp和glsmd.pal色盘。红警2的去掉md。
汉化文件:ra2(md).csf,用专门的语言编辑器修改。任何单位都有一句代码为其在CSF文件里的条目名,修改此条目的内容就可以修改游戏中显示的名字。
modder所能改变的就是以上各类资源。
二
1.xccmixer
xcc的操作很简单,双击打开mix,预览shp素材,退格键返回上级目录,右键菜单复制,解压等。此外xcc mixer的launch菜单里可以调用大量其它工具。
练习:从ra2mdlocalmd里解压出rulesmd和artmd
2.ini基础
标签类型:
浮点,填写数字,如生命值,造价
是否,填写yes或no,如是否可以被碾压。很多特殊功能代码都是专门的一句是否型代码
特殊项目,填写游戏中一些内定的值,如装甲类型和运动数据,最好从其它单位里复制
直接关联,填写其它注册名或素材的注册名,严格区分大小写。也称为对其它代码和素材的引用。一切涉及单位创建的代码都会涉及注册名的引用。
ini修改中的基础意识:修改的是代码,有代码必定有功能,有功能必定存在对应【关键的】【功能决定性的】【一两句】代码,而和单位名称毫无关系。整个ini体系中,一切注册名基本是可以胡乱填写的,对效果毫无影响。唯一例外是多功能步兵车,只有注册名为FV时才能变换炮塔,这是游戏平台内定的。ini修改并不是不可捉摸的,但是它的体系并非是新手想像的样子,比如改个名字就能改变功能之类“魔法”。游戏的本质不过是一系列动画和其内部算法,是两种独立的系统,要功能就改自己需要的部分。简单说,核蛋动画并不代表核蛋的威力。首先倡议新手在动手修改前把所有ini教程通读,并结合原始ini的示例,而非刻意冲着某看中的功能。在通读教程的过程中基本可以了解到要什么效果需要修改何处。通读教程之前不提倡大量修改,这样只会产生大量关于修改位置的低级问题。
rules体系介绍
对象类型:
以下内容并非人为划分,而是按照ini体系整理。moder要有透过现象看本质的能力。决定对象类型的关键是注册表位置和引用位置。
建筑物。一切使用建筑方格血条的物体都可以认为是建筑。除了电厂之类基地建筑,防御塔,超武建筑,民房,连公园长椅和垃圾桶都是建筑。
步兵。一切使用步兵短血条的单位都是步兵。蜘蛛因为使用长血条,所以是车辆。
车辆:一切非机场建造的车辆血条单位,包括海豚,飞艇,都是车辆。夜莺,飞艇,武直是『车辆型飞行器』,典型特征之一就是从战车工厂,而非机场生产。
飞行器:机场战机,航母子机,可击毁的飞弹
最简单最稳定的新增办法是复制照抄一段代码,改注册名,在注册表填写新的注册名,然后修改单位具体参数。参考示例尤里mod吧教程《飞行尤里》
http://tieba.baidu.com/f?kz=566799923
动画
覆盖物:矿石,弹坑。此部分基本无法修改。
矿石的价值是25,宝石价值是50,搜索Value=25可以在ini快结尾的地方找到矿石的价值,附近就是宝石。矿车单位时间采矿的数量是内定的,不存在任何可以修改的语句。
围墙是一种覆盖物,也是一种建筑。围墙的ART里可以看到变成覆盖物的语句。宝箱也是覆盖物,这样可以实现特别邪恶的功能。
在此,简单给一些注册名的直观认识。之前没有看懂的新手请仔细阅读。
每个ini段的开头是由“[]”框起的注册名,从一段注册名到下一段注册名的开始是一个ini段的全部内容,空行没有影响。相互的引用必须完全符合注册名,严格区分大小写。
动员兵的注册名
伞兵类型,填写步兵的注册名,就是对其的引用
大兵
美国伞兵的设置,也是直接引用注册名。
打开代码词典,第一面就是大量的单位及其对应的注册名。请适应这种单位不叫游戏中的名字,而用注册名标定的体系。
开头段是[general],是关于游戏内一些全局功能和默认值的设定,如伞兵内容,部队升级,可击毁导弹的威力,飞行数据等。general部分的功能多且杂,需要自行通读原始ini。这个部分通常新手望而却步,但是不允许害怕!对新手来说讲buildspeed,建造速度很有用。如果代码词典没有详解,则看鹰文注释。鹰文不好的话,可以以后看。
基础能力:代码含义测试&代码用法测试。在不看代码词典和鹰文注释的前提下,通过多次修改数值,弄清楚buildspeed数值大小对于游戏的影响。
作业:对照代码词典通读general部分
随后是注册表。游戏会首先读取注册表,在有注册的情况下才会读取某字段的详细内容。新建物体,粒子,弹头,超武必须注册
注册的方法是添加数字并填写注册名。
基础能力:参考填写规范。在不知ini应该怎么写的时候,随便挑选一个原版存在的代码段,作为示例学习。如不知建筑是否需要注册,且没有看到上文的建筑注册表,则随便抽取一个建筑的注册名,记事本查找是否存在对应的注册表。
作业:弄清楚步兵和坦克是否需要注册
即是否存在一张编号单,其中列举了坦克和步兵的注册名
如果你实在智力不够,那就告诉你,就是在查找框里输入随便什么类型条目的注册名,查看全文中所有它出现的地方有没有一个注册单。笨到这个份上的话基本可以右上角X了
有趣的是,不仅注册位置影响游戏对于对象类型的判断。如果将伞兵类型中的任意一个位置填写例如光棱塔的注册名,游戏也会认为光棱塔是一种步兵。在兵营里会出现光棱塔的建造选项。这相当于双重注册。有兴趣者可以试试看。
注册之后是粒子系统设定。什么是粒子?病毒狙击手的病毒云,共灰里中国喷火碉堡的火焰,ifv维修时的火花,就是粒子。很多代码,查询代码词典,并自己动手实验即可。此部分新手可以暂时不学。其实粒子系统代码量低,而且基本都有原版注释,随便抄一句粒子的代码,查找全文,基本都有注释。
轨道炮系统的解释在此
http://tieba.baidu.com/f?kz=865014555
粒子系统的调用方法:
关联在武器上直接输出,如轨道炮,火焰,火花,在武器代码中。
关联在建筑和单位上,如矿场和坦克冒烟,直接在建筑和坦克中设定。
关联动画,如病毒巨鸡手打死步兵后播放的动画结束后会刷出两个粒子。在art中设定。
基础能力:代码定位。ini中的代码可没有中文注释。按照一种关联的关键字搜索,可以定位代码。比如知道灰熊坦克是grizzly tank,不知注册名的状态下可以直接搜索“griz”,通常可以直接跳到灰熊的部分。如果失败,再加字母直到一次找到为止。
练习:在artmd找到病毒巨鸡手打死步兵的动画代码段。此动画代码段中包括的关键字有virus,particle。
选做:阅读完整个教程后,给动员兵的机枪的子弹动画关联上病毒巨鸡手的粒子,然后在游戏中查看效果。
然后是单位设定。建筑,步兵,车辆,飞行器都是“单位”,只有注册位置的区别和代码适用性的区别,不需要作刻意的区分。在单位设定中设定了武器关联,生命,价格等项目。代码繁多,请参考代码词典。如果有什么单位的特殊属性你看上了,到它的代码里挖。哪一句?这是基础操作,自己搞定!
有些代码只能用于建筑,有些又只能用于坦克。写错位置的代码不会导致出错,只是没有效果。比如给建筑加上运动代码,建筑照样不会跑起来
基础能力:代码使用范围。查询代码词典,并找到“可升级”。通过实验,弄清楚此代码在建筑类对象上是否有效。
基础能力:关键句代码查询。这是苦功夫。面对包含自己想要特效的单位全部代码,一句一句查询代码词典,并最终找到其发挥作用的关键代码。
练习:已知油井的关联关键字是oil,定位油井的代码段并在其中找到油井提供资金的关键句(两句),复制到基地,进游戏查看效果。
武器系统是ini的最大亮点,难点,武器基本可以随意装载到任何单位上,并不受单位类型的限制。少数例外可以自己尝试。一切攻击有关的代码,都在武器系统,而非单位里。除了极少数稀有的非常规单位外,它们自己就是武器。武器在单位和建筑中的引用是primary=,secondary=,eliteprimary=,elitesecondary=,deathweapon=。盖特是一套独立系统。
美国大兵的武器
此武器的全设置,请对照代码词典翻看解释
这是两句引用型代码,后面填写的内容是直接引用
详细代码请看代码词典
作业:找到武直,辐射兵,动员兵的武器
武器系统中设定了威力射程间隔爆炸效果炮弹形状是否对空等。
作业:查看上一题的武器代码的三个组成部分,思考每一句的意义,并对照教程修改
1.把动员兵的武器改成光棱坦克的精英武器
2.动员兵原始武器的威力,开火间隔,射程,改成允许对空并修改子弹的动画为MININUKE
基础能力:代码效果
面对不知具体含义且无法查到解释的代码时,没有必要问。在ini中适当位置写入,进游戏检验效果。
练习:已知Lobber=yes用于武器主体,通过实验弄清楚它的效果。
超武设置。以下内容是ini结构而非人为指定。
超武并非单纯的六大阵营超武。伞兵,侦察机,都是超武。所谓超武,最科学的说法是所有注册入超武注册表的代码段。直观说来,所有在武器栏出现,需要倒计时,可以在全图释放的东西都是超武。
超武也就是代码多,并无系统架构上的费解处。超武的调用方法是建筑代码superweapon=和superweapon2=。
特殊提示
在非原版平台上你不能新增任何超武,新增超武需要至少NP平台。
一个超武必须对应一个独立的action鼠标动作,一个action也只能对应一个超武,详细内容参考NP说明书。
如果你太笨无法理解,你就这么添加
[MouseCursors]
A=259,10,4,516,-1,12345,12345
B=259,10,4,516,-1,12345,12345
C=259,10,4,516,-1,12345,12345
D=259,10,4,516,-1,12345,12345
E=259,10,4,516,-1,12345,12345
……
然后超武xx写Action=A,oo写Action=B,fsakfhas写Action=C
作业:对照代码词典修改核蛋的冷却时间
箱子设置
没什么好说的,自己看看鹰文注释吧。
vxl动画设置
对于绝大多数人没什么用处,无视吧
NP介绍:
PD首先开发了ROCK PATCH,随后因为个人事务中断开发,由CNCVK在未获得“许可”的情况下进行了进一步开发,放出了NewPatch,(所谓的版权问题,其实都是没有WW许可的修改)。然后因为VK在开发中的管理问题,比如什么代码突然无效,提建议的丢黑名单之类,口碑极差,老外一提VK就咬牙切齿。NP又分为AE(秋季版)和SE(特别版),其实除了新阵营之外没有什么大的区别。NPAE最高“官方”版本0011,NPSE最高0022。NP,RP的功能区别也不大,国内通常使用NP。因为VK那神鬼莫测的数据结构,NP不太稳定。到了国内,LH_Mouse在NP基础上进行了下一步开发,使NP多了更多功能,称为NPEXTENDED 工程。由于VK做出的基础部分太过费解,NPEXT已经终止更新。NPExt并非NPAE,NPSE之外的另一型号,而是NP的延续,所以有NPAEExt和NPSEExt
NP的功能主要在于“解锁”,使很多旧的全局代码可以用于局部。如闪电风暴,玩家在原始平台中闪电风暴的参数只能有一组,NP可以无限添加。如基因突变,原始平台只能定义一种突变兵,而NP可以定义很多很多。原版飞机无法空战,而NP可以;原版无法添加新阵营和国家,moder只好用伪阵营,而NP可以真正添加新的国家和阵营。诸如此类,详见NP说明书,现在mod界不知道NP基本就算没文化了。
NP的使用方法很简单,全部解压,全部覆盖。总是有人对着NP说明书在原版平台上用NP代码然后说什么什么NP怎么没用
NP的本质是修改主程序。国内的NP基本都是免CD整合版,只有到NP官网才能找到“补丁”安装包,而且必须要正版YR1.001才能打上,国内显然是不可能的,所以还是老老实实用破解版吧。
在使用上,不要把NP当成什么了不起的东西,只不过是一种平台的升级。就像RA2平台升级到YR一样,NP不过是YR升级到NP,支持的代码和功能又多了点罢了。
此外,PD又开始了更新的平台开发,为Ares。功能据说很多,但是都是极低开放度的细枝末节性质功能,安装起来也麻烦,尝尝鲜也就罢了。
关于弹框:正式说法是internalerror,简称ie,就是弹框踢出。
ie是mod开发中必定会经过的环节,作为moder害怕ie是不该出现的。发生ie基本都是因为ini编写的不完善,所以发生一次ie就应当立刻修正ini,否则ie仍然会在那个时候发生。菜鸟不敢尝试的一大原因就是怕ie,所以这部分的内容应该知道。
在ra2diy的ini研究区置顶了某人翻译的eip表(http://bbs.ra2diy.com/viewthread.php?tid=583&extra=page=1),在发生ie时,游戏根目录会产生except.txt,如果没有,用np平台,一定会产生。请根据eip表确定ie原因(EIP表仅适用于YR1.001及其衍生出的NP版本),便于纠正ini的错误。eip表没有收录的eip暂时没有良好的解决办法,可以上传lh_mouse的小黑屋由耗神分析。查表是最最有效的办法,在熟悉之后就应该养成不怕一切ie的心态了
而且EIP表的意义在于自己查询,不是让意味着可以贴出整个Except坐等别人帮忙,尤其是因为本身ini基础不好,编写的ini错误百出时。因为基础太差犯的错EIP表基本全部收录,别懒!对于可查到的IE,使用LH_Mouse的查错脚本即可。
另外本人对于那些新手根本懒得查错的行为感到愤怒,出错了EIP查不到就不管了,EIP一丢就算完事。我提醒各位,查错是moder的基础能力,有IE就再现IE,看具体什么单位什么武器什么操作引发了IE,给我一个变量一个变量排查,别一查不到就上传,让人鄙夷!