本教程将详细讲解如何在《红色警戒2》及《尤里的复仇》中制作并导入动态视频广告牌。整个过程涵盖从视频素材处理、色盘制作、SHP文件生成到游戏内规则代码编写的全套流程。
一、 准备工具
在开始制作前,请确保您的电脑已安装并熟悉以下工具:
- XCC Mixer:用于素材转换与提取。
- PaletteStudio:用于编辑和管理游戏色盘。
- ImageShaper:用于将图片序列转换为游戏识别的SHP格式。
- Photoshop:用于处理视频帧图片及调整广告牌样式。
- Premiere Pro:用于视频素材的剪辑与比例调整。
- FinalAlert2 (FA2):用于编辑地图与触发规则。
二、 视频素材处理
1. 调整视频比例
使用 Premiere Pro 打开需要播放的视频素材,将其画面比例裁剪为 3:2。此阶段无需过度关注视频分辨率,后续步骤会进行针对性调整。
使用 Premiere Pro 打开需要播放的视频素材,将其画面比例裁剪为 3:2。此阶段无需过度关注视频分辨率,后续步骤会进行针对性调整。

2. 视频逐帧导出
将处理好的视频导入 Photoshop,通过“文件 > 导入 > 视频帧到图层”功能,将视频逐帧导入。
将处理好的视频导入 Photoshop,通过“文件 > 导入 > 视频帧到图层”功能,将视频逐帧导入。

随后,利用 PS 的“文件 > 导出 > 图层到文件”功能,将所有图层导出为独立的图片序列。

3. 图片样式转换
使用 Photoshop 脚本对导出的图片序列进行批量处理,将其转换为广告牌动画所需的特定尺寸与样式。
使用 Photoshop 脚本对导出的图片序列进行批量处理,将其转换为广告牌动画所需的特定尺寸与样式。

三、 制作专属色盘
注:默认的建筑色盘(如
unittem.pal)已包含丰富颜色,多数情况下可直接使用。若需自定义,请参考以下步骤。1. 导入与提取颜色
导入全部透视图并截取颜色表。
导入全部透视图并截取颜色表。

2. 编辑与转换颜色表
将颜色表裁切后,在 Photoshop 中转为“索引颜色”模式并另存为。
将颜色表裁切后,在 Photoshop 中转为“索引颜色”模式并另存为。

随后,使用 XCC Mixer 将该图片转换为游戏可识别的色盘文件。

3. 色盘参数微调
使用 PaletteStudio 打开生成的色盘文件,按照需求编辑颜色参数,完成后保存。
使用 PaletteStudio 打开生成的色盘文件,按照需求编辑颜色参数,完成后保存。

四、 生成 SHP 动画文件
打开 ImageShaper,将处理好的透视图图片序列批量导入,并将其转换为
.shp 格式文件。
五、 编写游戏内规则代码
1. 注册建筑与动画(rulesmd.ini)
在
在
rulesmd.ini 文件中注册新的建筑单位及对应的动画:[BuildingTypes]
800=UAFAIR ; 注册新广告牌
[Animations]
1500=UAFAIR_A ; 注册完整状态动画(名称第二个字母应为A)
1501=UAFAIR_AD ; 注册破损状态动画(名称第二个字母应为A)
[UAFAIR] ; 新广告牌属性设置
UIName=Name:CAMOV01 ; 游戏内显示名称
Name=Drive In Movie Screen ; 内部注释
TechLevel=-1 ; 科技等级(-1为不可建造)
Strength=500 ; 生命值
Insignificant=yes ; 标记为无关紧要的建筑
Nominal=yes ; 未知属性
Points=5 ; 经验值
Armor=steel ; 装甲类型
Explosion=TWLT070,S_BANG48,S_BRNL58,S_CLSN58,S_TUMU60 ; 爆炸效果
MaxDebris=15 ; 最大碎片数
MinDebris=5 ; 最小碎片数
DebrisAnim=Dbris3sm,Dbris2sm,Dbris3lg,Dbris4lg,Dbris4sm,Dbris6sm,Dbris7lg,Dbris7sm,Dbris8sm,Dbris9lg ; 碎片动画
BaseNormal=no ; 不能作为连接基础
Sight=6 ; 视野范围
ClickRepairable=no ; 不可维修
CanBeOccupied=no ; 不可被步兵进驻
IsSelectableCombatant=no ; 不可作为战斗单位选中
Selectable=no ; 不可被玩家选中
Immune=yes ; 免疫所有伤害
2. 设置贴图与动画参数(artmd.ini)
在
在
artmd.ini 中配置建筑的显示参数与动画播放逻辑:[UAFAIR] ; 建筑主体配置(贴图文件例:UTFAIR.shp)
Foundation=1x4 ; 占地面积(宽x长)
Height=6 ; 建筑高度
NewTheater=yes ; 是否随气候调用贴图(U=城市,T=温和,D=沙漠,L=月球,默认G)
DemandLoad=true ; 是否在地图载入时预加载贴图
;Palette=UAFAIR ; 自定义色盘文件名(例:UAFAIRTEM.pal)
ActiveAnim=UAFAIR_A ; 满血状态播放的动画
ActiveAnimDamaged=UAFAIR_AD ; 血量低于50%播放的破损动画
ActiveAnimZAdjust=-60 ; 动画Z轴图层调整(默认为0)
ActiveAnimYSort=724 ; Y轴排序(用于升级模块绘制顺序)
DamageFireOffset0=-85,-2 ; 受损状态着火点坐标1
DamageFireOffset1=-4,-56 ; 受损状态着火点坐标2
CanHideThings=true ; 是否遮挡后方单位
CanBeHidden=false ; 是否会被前方更高建筑遮挡
OccupyHeight=3 ; 进驻高度
AddOccupy1=-2,0 ; 进驻偏移坐标1
AddOccupy2=-2,1 ; 进驻偏移坐标2
AddOccupy3=-2,-1 ; 进驻偏移坐标3
AddOccupy4=-2,-2 ; 进驻偏移坐标4
[UAFAIR_A] ; 完整状态动画配置(贴图例:UTFAIR_A.shp)
NewTheater=yes ; 是否随气候调用贴图
Normalized=yes ; 动画速度是否随游戏速度改变
LoopStart=0 ; 循环播放的起始帧
LoopEnd=101 ; 循环播放的结束帧
LoopCount=-1 ; 循环次数(-1为无限循环)
Rate=280 ; 播放速度(数值越大越快)
Layer=ground ; 渲染图层(Top=最上层,Ground=战场层)
Shadow=yes ; 是否生成阴影
DemandLoad=true ; 是否预加载贴图
[UAFAIR_AD] ; 破损状态动画配置
Image=UNFAIR_A ; 指定贴图文件名(若与破损动画同名可省略此项)
Normalized=yes ; 动画速度是否随游戏速度改变
Start=0 ; 动画起始帧
LoopStart=0 ; 循环播放的起始帧
LoopEnd=101 ; 循环播放的结束帧
LoopCount=-1 ; 循环次数(-1为无限循环)
Rate=200 ; 播放速度
Layer=ground ; 渲染图层
Shadow=yes ; 是否生成阴影
DemandLoad=true ; 是否预加载贴图
六、 编辑触发规则
使用 FinalAlert2 打开地图,根据实际需求添加并配置简单的触发规则,以控制广告牌的显示与播放。

补充说明
本教程主要展示了动态广告牌的完整制作流程。关于广告牌破损动画的制作,其核心原理与完整状态动画完全一致,仅需在 ImageShaper 导出及
artmd.ini 中单独配置破损动画的帧数与播放速率即可。
















