关于ARES平台下红警2抢点机制的实现方案
蓝色曳光
2024年02月16日 10:45

首先说明:红警2的据点争夺机制已有开发实例,但依靠的是大佬们自己改的平台,公开的据点争夺机制可以说是没有。本人为民间MO3战役制作者(或许会回去水YR任务),在上一年心心念念的要搞这个机制……好了,正文开始——


不知道大家玩没玩过《战地风云》系列游戏,其中的最核心的玩法当属据点争夺了,本着都是游戏就互相抄的态度(bushi),UP在上一年尝试使用YR的ARES扩展平台模拟了一下这个玩法,自认为还算成功吧,所以今天就来复盘一下究竟如何模拟该机制的。

目前该机制实装地图为UP自制的厄普西隆合作任务:眼中钉(BV1mA4m1G73q),就用它来进行实例分析:

A点抢夺前后效果概览

①废墟逻辑

一开始我只想着让据点内有个一直显示的动画来表示占领进度,不过只有改平台什么的才能实现。所以说我退而求其次,并且也刚好是在翻阅ARES说明书的时候得到的灵感:废墟逻辑。关于废墟逻辑,说明书内是这么说的:当建筑被摧毁时,会变成另外一种建筑,通常是披着废墟的外衣,工程师可以把废墟建筑恢复成原来的建筑。更可以定义生成的废墟归那个所属方,废墟生成时的初始血量等等。所以说,直接拿两个占地相同的无敌建筑作为据点中心建筑,且工程师不可占领与修复就好了(不同占地的建筑互为废墟逻辑时会导致游戏弹框)。故此,以据点建筑的血条作为占领进度也算是个不错的折中方法。以下为废墟逻辑的关键INI展示(这就需要稍微懂些INI了):

 

[ArmorTypes]——护甲定义

EPSFSbuild=0%(让所有武器对该护甲伤害都为0)

PFSFSbuild=0%

 

[CAPFFLG]——PF旗子,中立所属

Armor=PFSFSbuild(上文的新护甲)

UIName=DMEPCOOP:45

Strength=1000

Repairable=no

Insignificant=yes

ClickRepairable=no

Rubble.Destroyed=CAYBAN(被摧毁后变成EP旗子)

Rubble.Destroyed.Strength=650(生成该旗子时的初始血量)

 

[CAYBAN]——EP旗子同上,不再展示重复的INI

Armor=EPSFSbuild(上文的新护甲)

UIName=DMEPCOOP:46

Rubble.Destroyed=CAPFFLG(被摧毁后变成PF旗子)

②通过单位数量伤害/治愈据点建筑

不同于战地按照敌我据点内人数及人数比例综合判断实现的抢点机制,UP当前只搞出了按照单位数量计算来实现该机制,不过鉴于红警是个更加宏观的游戏,所以也无所谓了。

先说说具体实现思路,权当抛砖引玉:当不同势力的单位进入据点附近(半径6格)时,挂载不同的AE动画,这些动画在art文件内定义伤害与弹头,弹头范围为据点争夺范围(半径5格),只对据点中心建筑起效。让我们来看看是怎么实现的(实际上来讲,大佬看到这儿基本就明白了)。

首先是地图内注册两个假单位,两个武器,四个弹头,游戏内让假单位攻击据点中心的地板,为的是赋予靠近据点的单位们动画。以下为关键INI展示(为方便看武器弹头的注册名,将 据点争夺 一词缩写为SFS),让我们开始吧:

 

[SPORTG]——属于PF的假单位

Primary=PFSFScannon(新注册的武器A地板)

 

[SPORTB]——同上,也是PF的假单位

Primary=EPSFScannon

 

[PFSFScannon]——[SPORTG]的武器

ROF=12

Range=16

Speed=100

Damage=1

Report=none

Warhead=PFSFScannonWH(新注册弹头)

Projectile=InvisibleHigh

OpenToppedAnim=none

 

[EPSFScannon]——[SPORTB]的武器

ROF=12

Range=16

Speed=100

Damage=1

Report=none

Warhead=EPSFScannonWH(新注册弹头)

Projectile=InvisibleHigh

OpenToppedAnim=none

 

[PFSFScannonWH]——该弹头为PF单位挂动画

Verses=1%,1%,1%,1%,1%,1%,1%,1%,1%,1%,0%

CellSpread=6(最好大于据点争夺范围)

AffectsOwner=yes(能影响其发射者的阵营)

PercentAtMax=1(溅射边界受到的伤害比例)

AffectsAllies=yes(能影响发射者阵营的友军)

AffectsEnemies=no(不能影响敌军)

PreventScatter=yes(不会让受击单位乱跑)

AttachEffect.Duration=15(属性持续时间)

AttachEffect.Animation=ALLSFS(挂个1帧的空动画)

 

[EPSFScannonWH]——该弹头为PF的敌人挂动画,重复INI不再赘述

Verses=1%,1%,1%,1%,1%,1%,1%,1%,1%,1%,0%

AffectsOwner=no(不影响其发射者的阵营)

AffectsAllies=no(不影响发射者阵营的友军)

AffectsEnemies=yes(能影响敌军)

AttachEffect.Duration=15(属性持续时间)

AttachEffect.Animation=EPSFS(挂个1帧的空动画)

以上书写INI的关键在于使用AffectsOwner/Allies/Enemies区分不同势力的单位,并为其挂载动画。完成这些后,让我们暂时转到art文件内看看动画INI怎么写的:

[ALLSFS]——PF自己人头顶的动画

Damage=1(单位头上挂载的动画的伤害)

Warhead=ALLSFSWH(新注册弹头)

Normalized=no

UseNormalLight=yes

ZAdjust=-9000

YSortAdjust=9000

Layer=top

Rate=60(原1帧的动画让它播放15帧)

YDrawOffset=-42

CustomPalette=dmmark.pal

 

[EPSFS]——PF的敌人头顶的动画

Damage=1(单位头上挂载的动画的伤害)

Warhead=EPSFSWH(新注册弹头)

Normalized=no

UseNormalLight=yes

ZAdjust=-9000

YSortAdjust=9000

Layer=top

Rate=60(原1帧的动画让它播放15帧)

YDrawOffset=-42

CustomPalette=dmmark.pal

以上两个动画由于挂载在单位身上,建议使用透明的空动画,否则在混战时显得很乱。

最后再回到地图内置INI定义一下ALLSFSWH、EPSFSWH这两个弹头:

[ALLSFSWH]——该弹头会恢复PF旗子的血量,削减EP旗子的血量

Verses=0%,0%,0%,0%,0%,0%,0%,0%,0%,0%,0%(打不了任何东西)

Versus.EPSFSbuild=100%(仅对EP旗子造成正伤害)

Versus.PFSFSbuild=-100%(仅对PF旗子造成负伤害)

CellSpread=5(据点争夺范围)

PercentAtMax=1

AffectsOwner=yes(能影响其发射者的阵营)

AffectsAllies=yes(能影响发射者阵营的友军)

AffectsEnemies=yes(能影响敌军)

PreventScatter=yes(不会让受击单位乱跑)

 

[EPSFSWH]——与上面的弹头伤害属性相反,不再赘述

Verses=0%,0%,0%,0%,0%,0%,0%,0%,0%,0%,0%

Versus.EPSFSbuild=-100%(仅对EP旗子造成负伤害)

Versus.PFSFSbuild=100%(仅对PF旗子造成正伤害)

CellSpread=5

Conventional=no

PercentAtMax=1

AffectsOwner=yes

AffectsAllies=yes

AffectsEnemies=yes

PreventScatter=yes

 

INI就这些东西,把与据点相关的判定触发/奖惩触发一写,就大功告成了!

UP这么一剖析相信大伙都能很快把思路串起来,在书写的时候一定要注意关乎敌我区分的INI,以及据点建筑掉血/治愈的速度是否符合游戏节奏。具体效果请打开UP的B站视频​(BV1mA4m1G73q)并根据评论区置顶目录空降到对应坐标即可。

 

祝你我都能有新的奇思妙想!

哔哩哔哩-蓝色曳光

UP UID:353107980