作者fhy093,师承蜘蛛星云、戴子玲,在此向感谢两位大佬致以崇高敬意。
红警地形修改很少有moder去研究,这主要是因为修改地形是一项非常繁重的工程,它是个苦力活,你想完成整套地形,是需要付出大量心血的,没有坚定的信心和毅力就不要去做这件事。网上提供的教程是蜘蛛星云提供的远古教程,该教程有很多地方说的不是明白,导致一些领悟力差的学习者一头雾水。所以为防红警地形制作失传,有必要将此教程发扬光大。当然此教程编写仓促,难免有一些错误,还请各位mod大佬和学习者批评指正。
教程包含基础知识、地形制作、地形动画制作、地形对象制作,还附有实例教学。
有红警mod制作基础的学者可以较快入门,对于初学者可以按照实例教学进行操作。
这里以红色警戒2尤里的复仇平台(以下简称YURI)为例,红色警戒2原版平台(以下简称RA2)与YURI大同小异,有区别的地方在于两者对文件的命名规则差异。YURI比RA2多了“md”两个字母,如YURI的Ra2md.mix文件在RA2里对应Ra2.mix文件。
一、基础知识
二、替换原版地形
三、地形的扩充与注册
四、地形对象的制作
五、地形动画的制作
六、高级修改
红警地形的制作需要用到以下工具:
TMP Builder(以下简称TMP) 地形文件制作软件,用于制作地形文件。
Photo Shop(以下简称PS) 绘图软件,用于绘制地形图像。
XCC Mixcer(以下简称XCC) mix文件修改器,用于导入或导出地形、ini文件。
Final Alert 2(以下简称地编) 红警地图编辑器,用于绘制地图和测试地形。
SHP Builder(以下简称SB) SHP文件制作软件,用于生成地形动画和地形对象文件。
一个合格的moder应能基本掌握后四种软件的使用,而能驾驭高级绘图工具软件的moder是再好不过。
红警地图的地形分为六大类型:TEMPERATE(温带)、SNOW(雪地)、URBAN(城市)、NEWURBAN(新城市)、LUNAR(月球)、DESERT(沙漠)。前三种为RA2、YURI都能使用的地形,后三种为YURI专用地形。
1.温带地形: 例如RA2盟军第7、9、11关,RA2苏联第2、6、10关,YURI苏联第5、7关
2.雪地地形: 例如RA2盟军第2、5、10、12关,RA2苏联第4、7、11、12关,YURI盟军第7关,YURI苏联第2关
3.城市地形: 例如RA2盟军第1、3、4、6、8关,RA2苏联第1、3、5、8、9关,YURI盟军第5关
4.新城市地形:例如YURI盟军第1、2、3、6关,YURI苏联第1、3关
5.月球地形: 例如YURI苏联第6关
6.沙漠地形: 例如YURI盟军第4关,YURI苏联第4关
红警平台限制,定死了这6种类型,你无法新增第7种类型。所以我们制作地形的方向有两种:第一种是直接修改替换原版地形,如著名的TX地形。第二种是扩充原版地形,如YURI盟军第7关南极冰川地形是YURI平台扩充的,但类型仍为雪地。
每种地形类型又可细分为Clear、Road、Water、Rock、Wall、Tiberium、Beach、Rough、Ice、Railroad、Tennel、Weeds共12种类型。
Clear:水泥地、土泥地、草地等
Road:高速公路、小路等
Water:水面
Rock:岩石、悬崖
Wall:墙体
Tiberium:泰伯利亚平台类型,红警平台弃用
Beach:海滩
Rough:人行道、停车场、农场、足球场等
Ice:冰
Railroad:铁路
Tennel:隧道
Weeds:草地
每种地图的地形类型都对应不同的地形文件,这些文件会被游戏加载,游戏里的地形是由这些文件图像的组合拼接而成的。使用XCC打开Ra2md.mix,这些文件藏在Ra2md.mix里的一堆形如iso***md.mix的子mix文件里。RA2的地形文件藏在Ra2.mix里的一堆形如iso***.mix的子mix文件里。两种平台使用同样的文件类型和色盘文件。
文件名的格式形如****XX.tem(温带)、****XX.sno(雪地)、****XX.urb(城市)、****XX.ubn(新城市)、****XX.lun(月球)、****XX.des(沙漠)。
每种文件对应的色盘文件分别是:isotem.pal(温带)、isosno.pal(雪地)、isourb.pal(城市)、isoubn.pal(新城市)、isolun.pal(月球)、isodes.pal(沙漠)。
每种地形的文件命名规则及一部分属性是由对应的temperatmd.ini(温带)、snowmd.ini(雪地)、urbanmd.ini(城市)、urbannmd.ini(新城市)、lunarmd.ini(月球)、desertmd.ini(沙漠)来决定的。RA2对应的是temperat.ini、snow.ini(雪地)、urban.ini(城市)。
使用XCC打开Ra2md.mix,再打开localmd.mix可以找到并释放这6种地形ini文件。RA2是打开Ra2.mix,再打开local.mix找到并释放RA2的3种地形ini文件。
以NEWURBAN(新地形)的地形ini文件urbannmd.ini为例,用记事本打开后可以看到很多类似的段落:
[TileSetXXXX]
SetName = Alien Shooter Wall
FileName = aswa
TilesInSet = 30
ToSnowTheater = 37
LowRadarColor = 128,128,192
HighRadarColor = 192,192,255
MarbleMadness=65
AllowBurrowing=false
RequiredForRMG = true
每个段落决定了这种地形的部分属性和地形文件的命名规则。
接下来的章节RA2不再赘述,方法与YURI一样。
编辑地形要用到TMP。以NEWURBAN(新城市)地形为例,这里也建议大家修改NEWURBAN地形,因为NEWURBAN的色盘色彩比较丰富,做出的地形更真实多彩。
准备工作:使用XCC找到“iso***md.mix”里的“****XX.ubn”,然后选择你喜欢的地形文件并释放出来。
安装TMP后,双击TMP_Builder.exe启动软件进入编辑界面。

TMP Builder的编辑界面组成。
在菜单栏File(文件)选项里找到Open(打开,快捷键Ctrl+O),然后打开刚才释放出来的.ubn文件。此时屏幕中央的预览窗口会显示出地形图像,就和你游戏里、地编里和XCC预览里看到的一样。
不管是平地还是悬崖,这些图像都可以分为两种:
Normal Image(普通图像,或称水平图像)和Extra Image(额外图像,或称垂直图像)。
Normal Image(普通图像):与水平面一致、几乎没有倾斜的图像
Extra Image(额外图像):悬崖等的额外图像与水平面有一定夹角的图像,往往接近90度
Normal Image图像呈上下窄,左右宽的标准菱形。Extra Image呈上下长,左右窄的平行四边形。 这两种图像基本呈现以上说明的情况,但也有例外: Normal Image的例外,比如修改过Ramp Type的草地斜坡、水泥地斜坡、沙漠斜坡等。 Extra Image的例外,比如山脉、山脉斜坡等复杂的悬崖。
不管哪种地形一定会有Normal Image,但是可以没有Extra Image。简单的地形,如草地,道路等只有Normal Image;悬崖、隧道等一定是同时拥有Normal Image和Extra Image;所以Extra Image只是Normal Image的从属图像。悬崖斜坡是两种Image最复杂的拼合,做出一个合格的悬崖斜坡是衡量TMP操作的金标准。你可以打开各种原版的地形文件观察他们两种图像的特点。
地形文件预览窗口下方的操作栏是对地形文件的分解,操作栏会将地形文件分解为Normal Image和Extra Image。假如地形被分解的部分同时有Normal Image和Extra Image,则它一定是同时显示在同一个区域,并且每个区域右上角上角会标有:
Number 被分解部分的序号
X= Y= 地形位置的XY坐标
Height= 地表高度
Terrain Type 地形类型,基本知识里讲过
Z 暂不了解此含义,好像没什么用
这些参数指定了Normal Image的属性,可以在图像显示区域左边属性栏“Properties”里的选项编辑,我们现在要学的是修改原版地形文件,在你没有充分了解软件之前不要随意修改这些参数。
1.对地形所有图像的整体修改。
在菜单栏Tools(工具)选项里,Export Title Image: 一次性把所有Normal Image和Extra Image都提取出来,你可以逐个进行修改,比较繁琐,不推荐
在菜单栏Tools(工具)选项里,Export Template: 将整个地形图像变为一整张图片拿出来用PS修改,这个对于改大面积的地表非常便利
在菜单栏Tools(工具)选项里,Import Template: 插入整张图片,图片大小有限制,根据地形类型而定,如果尺寸不对,软件会提示你正确的大小
在菜单栏Edit(编辑)选项里,Paste Normal Image: 从你的剪贴板图像截取一部分作为Normal Image贴进去,PS做好图像后再用这个功能有时可以提高效率。
2.对图像分解部分的局部修改。
鼠标右键点击操作栏里的其中一块被分解部分,会出现一些选项:
Edit Normal Image:出现一个可以手绘画图的编辑窗口,鸡肋功能,微调时偶尔用用,还不如用PS
Auto Color:全自动色彩,没什么用
Export Normal Image:输出普通图像,可以把Normal Image提取保存便于PS修改,格式为PNG
Export Extra Image:输出额外图像,可以把Extra Image提取保存便于PS修改,格式为PNG
Import Normal Image:插入普通图像,插入一个PS修改后新图像替换原来的Normal Image,格式为PNG
Import Extra Image:插入额外图像,插入一个PS修改后的新图像替换原来的Extra Image,格式为PNG
Delete Extra Image:删除额外图像
Delete Tiles:同时删除Normal Image和Extra Image
3.地形文件的常用修改流程:
先用Export Template把原版地形图像导出,使用PS将图像修改好。再用Import Template将修改好的图像导入,此时,Normal Image已经替换完毕,但像悬崖这类的地形的Extra Image还需要你重新插入来替换掉原版的Extra Image。注意:如果你的Extra Image有白边或者透明这些不需要的部分,你还需要用PS使用色盘的0号色(ubn文件为深蓝色)替换掉,不然游戏里会显示为白色。你可以随便找一个Normal Image鼠标右键,打开Edit Normal Image里的图像编辑器,颜色列表左上角第一个颜色就是你需要的颜色。这个0号色相当于透明的效果。
Export Template,Import Template是地形制作的灵魂所在,这里提供一个批量制作技巧:
你可以先用PS画一张图(你不会真的手绘一张完整地形的图吧?聪明的人都先找素材,然后尽可能大的截图,例如戴子玲大佬对RA3地形的复刻)。再用图片批量截取或者图片平均分切功能将图片划分为该地形需求的大小,最后再用Import template功能一导入,一张完美拼接的图就出来了。如果你要做几张可以拼接的地形,你得稍微用一下数学知识了。
地形制作完成后,在菜单栏File(文件)找到Save(保存,快捷键Ctrl+S)或Save As...(另存为...),将文件保存好。最后把文件用XCC拖进原来的iso***md.mix文件里(否则地编无法读取)。此时就可以打开地编和游戏查看替换地形后的效果了。
以NEWURBAN(新城市)地形为例,用记事本打开urbannmd.ini。首先注册一个地表,就仿照原版的地形注册新地形。
[TileSetXXXX] 地形注册代号,XXXX是数字,必须跟之前是相连的,否则游戏和地编无法读取
SetName = Alien-Shooter-Wall 对应地编里的名字,随意写
FileName = aswa 地形文件名,使用英文字母,与地形文件命名有关
TilesInSet = 30 这个地形选项卡包含的地形数量,与地形文件命名有关
ToSnowTheater = 37 不用改
LowRadarColor = 128,128,192 地编小地图的颜色,可以无视
HighRadarColor = 192,192,255 地编小地图的颜色,可以无视
MarbleMadness=65 不用改
AllowBurrowing=false 不用改
RequiredForRMG = true 不用改
注册好后,将你在第二章学习并制作好的地形文件保存为特定的文件格式。
基础知识里讲到地形文件的格式为****XX.tem(温带)、****XX.sno(雪地)、****XX.urb(城市)、****XX.ubn(新城市)、****XX.lun(月球)、****XX.des(沙漠)。
****是英文字母,写的是FileName =****的内容。XX是数字,从01命名到TilesInSet = XX里的数字,XX原则上不大于99。****和XX总位数不可超过8位,否则游戏可能弹框。
地形命名方式又可细分为2种:
1、单样式地形
这种地形命名为 aswa01、aswa02、aswa03…… 例如原版的停车场地形、道路。地编画图和游戏显示的时候,只会使用你选的那个地形。
2、多样式地形
这种地形命名为 aswa01、aswa01a、aswa01b、aswa01c…… asfloor02、asfloor02a、asfloor02b、asfloor02c…… 例如原版的深色草地地形。地编画图和游戏显示的时候,会随机使用你选的同种地形。 例如你选取了asfloor01,他绘制时会随机使用asfloor01、asfloor01a、asfloor01b……的其中一个。 这种地形你是无直接法用TMP制作的,你需要复制一个原版的这种地形, 然后再用TMP修改,否则编辑器不会在绘制时随机选取。
将做好的文件保存好,然后把文件用XCC拖进mix文件里(可以不是iso***md.mix,否则地编无法读取)。并将urbannmd.ini放在游戏目录以便于修改测试,此时就可以打开地编用上新的扩充地形制作地图了,做好后在游戏中检查拼接问题反复测试,等地形稳定后将ini文件也拖进mix。打包进mix文件时要注意mix文件的优先级,expandmdXX.mix,表示数字,XX不能超过99,数字越大优先级越高,里面的文件会优先被地编和游戏读取。
实例教学:做一个孤胆枪手墙壁
第一步,注册孤胆枪手墙壁。 在urbannmd.ini里注册一个新地形。
[TileSet0122];0112是地形注册代号,必须跟之前是相连的,这里接着原版的[TileSet011]后面写
SetName = Alien-Shooter-Wall;对应地编里的名字,取名为孤胆枪手墙壁英文
FileName = aswa ;地形文件名,使用英文字母,随意写,但建议系统命名:as表示孤胆枪手,w表示墙,a表示第一种墙
TilesInSet = 45 ;这个地形选项卡包含的地形数量,一套完整的悬崖差不多需要做30-50种地形。
ToSnowTheater = 37;不用改
LowRadarColor = 128,128,192;地编小地图的颜色,可以无视
HighRadarColor = 192,192,255;地编小地图的颜色,可以无视
MarbleMadness=65;不用改
AllowBurrowing=false;不用改
RequiredForRMG = true;不用改
第二步,制作地形文件。我们先做第一个地形文件aswa01.ubn。 孤胆枪手墙壁的本质是悬崖,悬崖地形有Normal Image和Extra Image两种图像,制作难度适中。熟练者可在十分钟内完成一个文件,初学者可能需要半小时以上。 首先我们需要在孤胆枪手游戏里寻找墙壁素材,万能方法是进入孤胆枪手游戏,然后对游戏截屏,用PS的多边形套索、魔棒、仿制图章工具将需要的素材抠出来,然后用将其改成红警对应的角度。这里我使用的方法是使用孤胆枪手地图编辑器提取单个墙壁,将背景改为黑色,然后用PS魔棒工具提取墙壁图像后改为红警相应的角度和大小,因为我需要的素材较多,我一般会把多个素材放在一张图里批量将素材修改为红警相应的角度和大小,比对物是红警的1x1水面和孤胆枪手的1x1地砖,找一个参照物作比对是很有用的。当然像帝国时代2这种与红警相机角度一致的素材就没有必要这么做。 用XCC提取一个YURI的高地悬崖.ubn文件,用TMP打开文件,用Export Template将地形的整个图像导出,用PS打开这个图像,将做好的素材以另一个图层粘进去,通过比对修改做出TMP里能使用的图像。用Import Template将做好的图片导入,然后右键点击分解部分的区域,导入Extra Image图像,这时可能需要裁剪,需要填的裁剪参数从左到右依次为:图像左上角起始X坐标(一般写0,30,60),图像左上角起始Y坐标(一般写0,15,30,45),图像宽度(一般为30),图像高度(一般为75)。裁剪后在图像预览里检查拼接问题和白图问题,有问题还需要重新导入裁剪或用0号色修图。 然后将做好的地形文件保存为aswa01.ubn,同理做其他地形文件,一直做到aswa45.ubn。 第三步,测试。进入地编,正常地编地形列表里应该有Alien Shooter Wall这个选项,里面应该有45种地形。如果不显示新地形选项,先保证你建的地图类型是NEWURBAN,然后检查ini文件里地形的注册无误并确保放在游戏根目录,还要检查地形文件格式是否为.ubn、命名是否正确,并且确保将他们打包在优先级较高的mix里。 在地图里把一圈墙壁画出来,检查拼接和显示问题,有问题还要用PS重新修正和用TMP重制。
地形对象的本质是shp,制作方法与shp素材一样,区别在于要使用对应地形的色盘,文件格式不是.shp而是相应地形后缀名。 需要使用SB软件,用该地形的色盘制作一个shp, 原图1帧 ,影子1帧,做好后保存为相应地形后缀名【.tem(温带)、.sno(雪地)、.urb(城市)、.ubn(新城市)、.lun(月球)、.des(沙漠)】
实例教学:做一个孤胆枪手电脑桌
第一步,注册孤胆枪手电脑桌和填写孤胆枪手电脑桌的Rules
在Rulesmd.ini文件里的[TerrainTypes]注册孤胆枪手电脑桌,并新建一个[ASTABLE01]项目填写孤胆枪手电脑桌的Rules
[TerrainTypes];注册孤胆枪手电脑桌
...
XX=ASTABLE01
[ASTABLE01];填写孤胆枪手电脑桌的Rules
Name=Ailen Shooter Table 01;随便写,无实际意义
IsFlammable=no
RadarColor=255,255,255
TemperateOccupationBits=4
SnowOccupationBits=7
Imunue=yes;根据需要写,加了这句该地形对象就是无敌不可破坏的
在Artmd.ini文件里填写孤胆枪手电脑桌的Art
[ASTABLE01]
Theater=yes
Foundation=1x1;电脑桌的长X宽
第二步,制作地形对象文件 使用SB软件,用该地形的色盘isoubn.pal制作一个shp,原图1帧,影子1帧,做好后保存。要在NEWURBAN地形里用,就命名为astable01.ubn,然后打包进mix。
第三步,进入地编测试,正常地编地形对象列表里应该有ASTABLE01这个选项,你可以把它安置在地图上。如果不显示ASTABLE01选项,先保证你建的地图类型是NEWURBAN,然后检查ini文件里地形对象是否注册无误并确保放在游戏根目录,还要检查地形文件格式是否为.ubn、命名是否正确,并且确保将他们打包在优先级较高的mix里。
第四步,检查地形对象的位置和高度。SB提供的RA2Grids网格是做建筑素材用的,按照SB提供的RA2Grids网格做出来的地形对象,其高度在地编里显示为实际高度,但在游戏里实际显示是要低3个像素左右的,你在做shp的时候要把整个图像抬高3个左右像素,然后再保存。此时,地编里显示会高出来,但在游戏里显示是正确的。
原版地形里的瀑布地形是动态的,而且还有水声。这就涉及到地形动画的制作,是一种高级技巧。 地形动画的本质是shp动画,制作方法与shp动画一样,区别在于要使用对应地形的色盘,文件格式不是.shp而是相应地形后缀名。 需要使用SB软件,用该地形的色盘制作一个shp,原图1帧 ,影子1帧,做好后保存为相应地形后缀名【.tem(温带)、.sno(雪地)、.urb(城市)、.ubn(新城市)、.lun(月球)、.des(沙漠)】
实例教学:制作一个孤胆枪手墙壁上的动态灯光
第一步,注册孤胆枪手动态灯光
我们还是要在urbannmd.ini里注册的孤胆枪手墙壁。
[TileSet0122]
SetName = Alien-Shooter-Wall
FileName = aswa
TilesInSet = 45
ToSnowTheater = 37
LowRadarColor = 128,128,192
HighRadarColor = 192,192,255
MarbleMadness=65
AllowBurrowing=false
RequiredForRMG = true
这里的SetName是关键,我们再用SetName里的“Alien-Shooter-Wall”在urbannmd.ini里注册一个动态灯光动画项,TilesInSet决定了墙壁地形的个数,假设我们要给第1个墙壁地形配上动画,则这么写:
[Alien-Shooter-Wall]
Tile01Anim=aslight;动画的文件名
Tile01XOffset=0;动画的X坐标
Tile01YOffset=0;动画的Y坐标
Tile01AttachesTo=0
Tile01ZAdjust=-10;动画的Z坐标,Z坐标代表动画层的遮盖位置
此时,urbannmd.ini里已经注册完毕,再在Rulesmd.ini里注册墙壁灯光动画:
[Animations]
...
X=aslight
最后在在Art.ini里写入aslight的Art:
[aslight]
Theater=yes
Normalized=yes
Loopstart=0;开始帧
LoopEnd=1;结束帧
LoopCount=-1;循环次数,-1表示无限循环
Rate=320;播放速度
Flat=yes
Layer= ;
DetailLevel=2
DemandLoad=true
ShouldUseCellDrawer=true
StartSound=lightsound;可以定义地形周围的环境声音
如果你要在一个地表选项卡里面加入多个地形动画,你可以将Tile01改为Tile02,Tile03,Tile04然后接着写参数,如果动画位置相同就无需再改参数了。
第二步,制作地形动画文件。 使用SB软件,用该地形的色盘isoubn.pal制作一个动态灯光的动画,做好后保存为aslight.ubn,然后打包进mix。 这里说一个高级技巧:想让地形只带环境声音,不需要动画的话可以把动画改成1帧1像素的,尤其是这个像素你使用了和地形一样的颜色后在游戏里几乎看不见动画,典型的障眼法。
第三步,进入游戏测试,正常游戏里第一个aswa01地形就应该带有动画了,如果你添加了声音还能听见声音。 如果不显示动画,先保证你建的地图类型是NEWURBAN,然后检查ini文件里地形对象是否注册无误并确保放在游戏根目录,还要检查地形文件格式是否为.ubn、命名是否正确,并且确保将他们打包在优先级较高的mix里。 如果听不到声音,那就要检查sound.ini文件里是否注册了lightsound且无误,并确保sound.ini放在游戏根目录,然后检查声音文件格式是否为.wav、命名是否正确、频率是否为22050Hz,并且确保将声音文件打包在优先级较高的mix里。
1.某种地形在多种地图类型中的使用:
有时候,我们需要一种地形在多个地图类型里使用,比如让温带地形使用停车场,让新城市地形使用农场、小土路。这其实也很简单,需要的是大量的批量化操作。 第一种方法是随便打开一个该地图类型的地形文件,然后将Normal Image和Extra Image保存为对应的地形文件格式。 第二种方法是在TMP里的Palette(色盘)里的Load...(载入)导入相应地形的色盘文件,然后将Normal Image和Extra Image保存为对应的地形文件格式。 第三种方法,由于月球色盘颜色较为单一,几乎是灰白的。所以可以直接导入月球的色盘文件isolun.pal,保存为****XX.lun就可以了。
2.如何让单位走到悬崖下:
原版红警悬崖地形文件悬崖的底部是Rock(岩石)属性,所以单位不能走,拥有这样属性的地形还有铁丝网。 你需要修改悬崖地形文件的Normal Image属性,TMP打开悬崖地形文件后,点击一下悬崖地形被分解的底部部分,在左侧的Terrain Type将Rock(岩石)改为Road(道路),顶部可以不用改,还是Rock(岩石)属性,因为感觉单位走到悬崖边怪怪的。
3.如何制作沼泽地形
根据让单位走到悬崖下原理,你可以把水面改成Rock(岩石),让所有单位都不能走,比如原版地形的水中礁石。也可以把草地改为Water(水)属性变为沼泽地。
4.太空地形的制作
前辈蜘蛛星云其实已经做过太空地形了,这里给点提示,太空站改为Road,太空站的边缘改为Rcok,太空改为Rock或Water,这样陆地单位和两栖单位就只能在空间站活动,同时不影响空中单位的活动。太空改为Rock或Water各有优缺点,Rock属性空中单位可以在纯太空活动,但是从空间站往太空走就走不了。Water属性可以解决这个问题,但是炮击水面的时候可能会穿帮。
七、地形色盘的修改
原版色盘色彩表现力差,如果你制作的地形有很多颜色与原版地形不匹配,可以将所有做好的地形图片用PS合并为一张图,改为索引颜色后保存。用XCC将保存的文件转化生成为pal色盘文件,然后把文件命名为ISO***.PAL,***代表地形类型。然后把这个色盘文件替换原版的,在TMP里也需要在它的安装目录plaettes文件夹里替换为新的色盘文件,然后用新色盘制作你的地形。
需要注意的是,一旦使用新色盘就要把原版此类型的所有地形都重新用新色盘做一遍,文件的数量是成百上千个,这个工作量是非常巨大的,所以就如前言里所说,做地形是个苦力活,你想完成整套地形,是需要付出大量心血的,没有坚定的信心和毅力就不要去做这件事。
红警地形实例制作教程 作者fhy093 2022年05月30日