新增或增强的逻辑
此页面列出了所有火卫一引入的新逻辑或扩展逻辑。
新类型/游戏内实体
自定义辐射类型
Mixing different radiation types
Any weapon can now have a custom radiation type. More details on radiation here.
There are several new properties available to all radiation types.
RadApplicationDelay.Building
can be set to value higher than 0 to allow radiation to damage buildings.RadSiteWarhead.Detonate
can be set to makeRadSiteWarhead
detonate on affected objects rather than only be used to dealt direct damage. This enables most Warhead effects, display of animations etc.RadHasOwner
, if set to true, makes damage dealt by the radiation count as having been dealt by the house that fired the projectile that created the radiation field. This means that Warhead controls such asAffectsAllies
will be respected and any units killed will count towards that player’s destroyed units count.RadHasInvoker
, if set to true, makes the damage dealt by the radiation count as having been dealt by the TechnoType (the ‘invoker’) that fired the projectile that created the radiation field. In addition to the effects ofRadHasOwner
, this will also grant experience from units killed by the radiation to the invoker. Note that if the invoker dies at any point during the radiation’s lifetime it continues to behave as if not having an invoker.
By default
UseGlobalRadApplicationDelay
is set to true. This makes game always useRadApplicationDelay
andRadApplicationDelay.Building
from[Radiation]
rather than specific radiation types. This is a performance-optimizing measure that should be disabled if a radiation type declares different application delay.
在rulesmd.ini
中:
[RadiationTypes]
0=SOMERADTYPE
[Radiation]
UseGlobalRadApplicationDelay=true ; boolean
[SOMEWEAPON] ; WeaponType
RadType=Radiation ; RadType to use instead of default of [Radiation]
[SOMERADTYPE] ; RadType
RadDurationMultiple=1 ; integer
RadApplicationDelay=16 ; integer
RadApplicationDelay.Building=0 ; integer
RadLevelMax=500 ; integer
RadLevelDelay=90 ; integer
RadLightDelay=90 ; integer
RadLevelFactor=0.2 ; floating point value
RadLightFactor=0.1 ; floating point value
RadTintFactor=1.0 ; floating point value
RadColor=0,255,0 ; integer - Red,Green,Blue
RadSiteWarhead=RadSite ; WarheadType
RadSiteWarhead.Detonate=false ; boolean
RadHasOwner=false ; boolean
RadHasInvoker=false ; boolean
激光尾迹
Laser trails used in Rise of the East
单位,抛射体和VXL碎片现在可以拥有多条不同透明度、厚度和颜色的彩色尾迹,这些尾迹是由引擎绘制的。
单位,抛射体和VXL碎片的尾迹可以设置其每一条尾迹的类型,以及相对车体或炮塔的FHL偏移。
警告
激光尾迹非常消耗资源!由于游戏不使用GPU,因此如果设置了大量激光尾迹,即使在很好的电脑上也会迅速降低FPS。你可以通过以下方式减少这种影响:
不要在单位和抛射体上放置太多激光尾迹;
在尾迹不过于参差不齐的情况下设置尽可能高的
SegmentLength
值。尽量使尾迹长度最小(可以通过设置较小的
FadeDuration
值实现)。
在artmd.ini
中:
[LaserTrailTypes]
0=SOMETRAIL
[SOMETRAIL] ; LaserTrailType name
IsHouseColor=false ; boolean
Color=255,0,0 ; integer - Red,Green,Blue
FadeDuration=64 ; integer
Thickness=4 ; integer
SegmentLength=128 ; integer, minimal length of each trail segment
IgnoreVertical=false ; boolean, whether the trail won't be drawn on vertical movement
IsIntense=false ; boolean, whether the laser is "supported" (AKA prism forwarding)
CloakVisible=false ; boolean, whether the laser is visible when the attached unit is cloaked
[SOMEPROJECTILE] ; BulletType Image
LaserTrail.Types=SOMETRAIL ; list of LaserTrailTypes
[SOMETECHNO] ; TechnoType Image
LaserTrailN.Type=SOMETRAIL ; LaserTrailType
LaserTrailN.FLH=0,0,0 ; integer - Forward,Lateral,Height
LaserTrailN.IsOnTurret=false ; boolean, whether the trail origin is turret
; where N = 0, 1, 2, ...
在rulesmd.ini
中:
[SOMEVOXELANIM] ; VoxelAnim
LaserTrail.Types=SOMETRAIL ; list of LaserTrailTypes
护盾
Buildings, Infantries and Vehicles with Shield in Fantasy ADVENTURE
在rulesmd.ini
中:
[AudioVisual]
Pips.Shield=-1,-1,-1 ; integer, frames of pips.shp (zero-based) for Green, Yellow, Red
Pips.Shield.Building=-1,-1,-1 ; integer, frames of pips.shp (zero-based) for Green, Yellow, Red
Pips.Shield.Background=PIPBRD.SHP ; filename - including the .shp/.pcx extension
Pips.Shield.Building.Empty=0 ; integer, frame of pips.shp (zero-based) for empty building pip
[ShieldTypes]
0=SOMESHIELDTYPE
[SOMESHIELDTYPE] ; ShieldType name
Strength=0 ; integer
InitialStrength=0 ; integer
Armor=none ; ArmorType
Powered=false ; boolean
AbsorbOverDamage=false ; boolean
SelfHealing=0.0 ; double, percents or absolute
SelfHealing.Rate=0.0 ; double, ingame minutes
Respawn=0.0 ; double, percents or absolute
Respawn.Rate=0.0 ; double, ingame minutes
BracketDelta=0 ; integer - pixels
Pips=-1,-1,-1 ; integer, frames of pips.shp (zero-based) for Green, Yellow, Red
Pips.Building=-1,-1,-1 ; integer, frames of pips.shp (zero-based) for Green, Yellow, Red
Pips.Background= ; filename - including the .shp/.pcx extension
Pips.Building.Empty= ; integer, frame of pips.shp (zero-based) for empty building pip
IdleAnim= ; Animation
IdleAnim.ConditionYellow= ; Animation
IdleAnim.ConditionRed= ; Animation
IdleAnimDamaged= ; Animation
IdleAnimDamaged.ConditionYellow= ; Animation
IdleAnimDamaged.ConditionRed= ; Animation
IdleAnim.OfflineAction=Hides ; AttachedAnimFlag (None, Hides, Temporal, Paused or PausedTemporal)
IdleAnim.TemporalAction=Hides ; AttachedAnimFlag (None, Hides, Temporal, Paused or PausedTemporal)
BreakAnim= ; Animation
HitAnim= ; Animation
BreakWeapon= ; WeaponType
AbsorbPercent=1.0 ; floating point value
PassPercent=0.0 ; floating point value
AllowTransfer= ; boolean
ImmuneToBerserk=no ; boolean
[SOMETECHNO] ; TechnoType
ShieldType=SOMESHIELDTYPE ; ShieldType; none by default
[SOMEWARHEAD] ; WarheadType
Shield.Penetrate=false ; boolean
Shield.Break=false ; boolean
Shield.BreakAnim= ; Animation
Shield.HitAnim= ; Animation
Shield.BreakWeapon= ; WeaponType
Shield.AbsorbPercent= ; floating point value
Shield.PassPercent= ; floating point value
Shield.Respawn.Duration=0 ; integer, game frames
Shield.Respawn.Amount=0.0 ; floating point value, percents or absolute
Shield.Respawn.Rate=-1.0 ; floating point value, ingame minutes
Shield.Respawn.ResetTimer=false ; boolean
Shield.SelfHealing.Duration=0 ; integer, game frames
Shield.SelfHealing.Amount=0.0 ; floating point value, percents or absolute
Shield.SelfHealing.Rate=-1.0 ; floating point value, ingame minutes
Shield.SelfHealing.ResetTimer=false ; boolean
Shield.AffectTypes= ; List of ShieldType names
Shield.AttachTypes= ; List of ShieldType names
Shield.RemoveTypes= ; List of ShieldType names
Shield.ReplaceOnly=false ; boolean
Shield.ReplaceNonRespawning=false ; boolean
Shield.MinimumReplaceDelay=0 ; integer, game frames
Shield.InheritStateOnReplace=false ; boolean
所有建筑与单位现在都可以拥有护盾作为独立的(即可指定单独的
Armor
与Strength
的)第二血条。负伤害将恢复护盾,除非护盾已经被击碎。如果护盾不满,全部的负伤害都会被护盾吸收。
Negative damage weapons will consider targets with active, but not at full health shields in need of healing / repairing unless the Warhead has
Shield.Penetrate=true
, in which case only object health is considered.
When a TechnoType has an unbroken shield,
[ShieldType]->Armor
will replace[TechnoType]->Armor
for game calculation.InitialStrength
can be used to set a different initial strength value from maximum.
当通过
DeploysInto
,UndeploysInto
模式转换时,护盾会按剩余百分比进行传递。如果目标单位不具备护盾,那么原始单位的护盾数据将会保存,直到变回来再恢复。也兼容Ares的
Convert.*
。
Powered
控制护盾是否在单位无电力支持或被EMP时仍旧生效。注意,如果单位本身
Powered=false
,那么护盾也不会因断电而失效。
AbsorbOverDamage
决定护盾是否会吸收超量伤害。SelfHealing
与Respawn
遵循以下设定:0.0将关闭功能,1%到100%为以百分比恢复/重生护盾,其他数字为以固定值直接恢复/重生护盾。此外,SelfHealing
支持负数以扣除护盾。如果你想让护盾每次只恢复1HP,目前需要将该标签的值设置在1到2之间的数,如
1.1
。
SelfHealing.Rate
与Respawn.Rate
遵循以下设定:0.0立即恢复护盾,其他值以游戏内分钟为单位恢复/重生护盾。如果设置了
IdleAnim
,那么护盾存在的时候就会自动重复播放此动画。IdleAnim.ConditionYellow
andIdleAnim.ConditionRed
can be used to set different animations for when shield health is at or below the percentage defined in[AudioVisual]
->ConditionYellow
/ConditionRed
, respectively. IfIdleAnim.ConditionRed
is not set it falls back toIdleAnim.ConditionYellow
, which in turn falls back toIdleAnim
.IdleAnimDamaged
,IdleAnimDamaged.ConditionYellow
andIdleAnimDamaged.ConditionRed
are used in an identical manner, but only when health of the object the shield is attached to is at or below[AudioVisual]
->ConditionYellow
. Follows similar fallback sequence to regularIdleAnim
variants and if none are set, falls back to the regularIdleAnim
or variants thereof.Bouncer=true
andIsMeteor=true
animations can exhibit irregular behaviour when used asIdleAnim
and should be avoided.
IdleAnim.OfflineAction
决定在断电时空闲动画的动作。IdleAnim.TemporalAction
决定在被超时空时空闲动画的动作。如果设置了
BreakAnim
,那么护盾被击碎时将播放此动画。如果设置了
HitAnim
,那么护盾被攻击时将播放此动画,类似铁幕的WeaponNullifyAnim
。如果设置了
BreakkWeapon
,那么护盾被击碎时将释放此武器。AbsorbPercent
决定此护盾吸收伤害的比例,默认1.0,即吸收全部伤害。PassPercent
决定此护盾的穿透比例(即不会被吸收的伤害),穿透伤害将直接作用在单位身上。默认0.0,即不穿透。AllowTransfer
controls whether or not the shield can be transferred if the TechnoType changes (such as(Un)DeploysInto
or Ares type conversion). If not set, defaults to true if shield was attached viaShield.AttachTypes
, otherwise false.ImmuneToBerserk
gives the immunity againstPsychedelic=yes
warhead. Otherwise the berserk effect penetrates shields by default. Note that this shouldn’t prevent the unit from targeting at the shielded object.Versus.shieldArmor=0%
is still required in this case.A TechnoType with a shield will show its shield Strength. An empty shield strength bar will be left after destroyed if it is respawnable. Several customizations are available for the shield strength pips.
By default, buildings use the 6th frame of
pips.shp
to display the shield strength while others use the 17th frame.Pips.Shield
can be used to specify which pip frame should be used as shield strength. If only 1 digit is set, then it will always display that frame, or if 3 digits are set, it will use those if shield’s current strength is at or belowConditionYellow
andConditionRed
, respectively.Pips.Shield.Building
is used for BuildingTypes. -1 as value will use the default frame, whether it is fallback to first value or the aforementioned hardcoded defaults.Pips.Shield.Background
can be used to set the background or ‘frame’ for non-building pips, which defaults topipbrd.shp
. 4th frame is used to display an infantry’s shield strength and the 3th frame for other units, or 2nd and 1st respectively if not enough frames are available.Pips.Shield.Building.Empty
can be used to set the frame ofpips.shp
displayed for empty building strength pips, defaults to 1st frame ofpips.shp
.The above customizations are also available on per ShieldType basis, e.g
[ShieldType]
->Pips
instead of[AudioVisual]
->Pips.Shield
and so on. ShieldType settings take precedence over the global ones, but will fall back to them if not set.BracketDelta
can be used as additional vertical offset (negative shifts it up) for shield strength bar. Much likePixelSelectionBracketDelta
, it is not applied on buildings.
弹头与护盾的新交互选项。
Shield.Penetrate
允许弹头无视护盾,将直接伤害单位本身。并且在瞄准时也会无视护盾。Shield.Break
允许弹头在伤害结算前一击击碎护盾。Shield.BreakAnim
将会代替被此弹头击碎的护盾本身的BreakAnim
播放。Shield.HitAnim
将会代替被此弹头击中的护盾本身的HitAnim
播放。Shield.BreakWeapon
将会代替被此弹头击碎的护盾本身的BreakWeapon
引爆。Shield.AbsorbPercent
将会代替被此弹头击中的护盾的AbsorbPercent
。Shield.PassPercent
将会代替被此弹头击中的护盾的PassPercent
。Shield.Respawn.Rate
与Shield.Respawn.Amount
覆盖被此弹头击中的护盾重生效果,持续Shield.Respawn.Duration
,负数或0则默认为护盾本身的值。如果设置了Shield.Respawn.ResetTimer
,当前护盾的重生时间将会重置,否则按照新的时间进行比例缩放。如果覆盖效果在重生完成前结束了,剩余时间会按照护盾本身的Respawn.Rate
进行缩放。Shield.SelfHealing.Rate
与Shield.SelfHealing.Amount
覆盖被此弹头击中的护盾自愈效果,持续Shield.SelfHealing.Duration
,负数或0则默认为护盾本身的值。如果设置了Shield.SelfHealing.ResetTimer
,当前护盾的自愈时间将会重置,否则按照新的时间进行比例缩放。如果覆盖效果在一次自愈完成前结束了,剩余时间会按照护盾本身的SelfHealing.Rate
进行缩放。Shield.AffectsTypes
允许列出哪些护盾会被上述效果影响。如果不设置,所有的护盾都会被影响。Shield.AttachTypes
和Shield.RemoveTypes
允许分别列出被此弹头影响的单位附加或移除的护盾。通常只有第一个Shield.AttachTypes
被应用。如果设置了
Shield.ReplaceOnly
,Shield.AttachTypes
中的护盾会按位置替换中Shield.RemoveTypes
的护盾。如果前者少于后者,那么多余的被移除的护盾被前者的最后一个护盾替换。如果设置了
Shield.ReplaceNonRespawning
,Shield.AttachTypes
中的护盾会替换已被击破且不可再生的护盾。Shield.MinimumReplaceDelay
可被用来控制护盾在被击破后多久才能被替换。如果已过帧数不足,就不会被替换。
如果设置了
Shield.InheritStateOnReplace
,替换护盾后诸如血量,是否被击破等属性将会继承。自我恢复和重生时间不会继承,总是重设。
动画
动画生成单位
Animations can now create (or “convert” to) vehicles when they end via
CreateUnit
.CreateUnit.Owner
determines which house will own the created VehicleType. This only works as expected if the animation has owner set.Vehicle destroy animations, animations from Warhead
AnimList/SplashList
and map trigger action41 Play Anim At
will have the owner set correctly.CreateUnit.RemapAnim
, if set to true, will cause the animation to be drawn in unit palette and remappable to owner’s team color.
CreateUnit.Mission
determines the initial mission of the created VehicleType.CreateUnit.Facing
determines the initial facing of created VehicleType.CreateUnit.RandomFacing
, if set to true makes it so that a random facing is picked instead.CreateUnit.InheritFacings
andCreateUnit.InheritTurretFacings
inherit facings for vehicle body and turret respectively from the destroyed vehicle if the animation is a vehicle destroy animation.
CreateUnit.ConsiderPathfinding
, if set to true, will consider whether or not the cell where the animation is located is occupied by other objects or impassable to the vehicle being created and will attempt to find a nearby cell that is not. Otherwise the vehicle will be created at the animation’s location despite these obstacles.
在artmd.ini
中:
[SOMEANIM] ; AnimationType
CreateUnit= ; VehicleType
CreateUnit.Owner=Victim ; Owner house kind, Invoker/Killer/Victim/Civilian/Special/Neutral/Random
CreateUnit.RemapAnim=false ; boolean
CreateUnit.Mission=Guard ; MissionType
CreateUnit.Facing=0 ; integer, facings in range of 0-255
CreateUnit.RandomFacing=true ; boolean
CreateUnit.InheritFacings=false ; boolean
CreateUnit.InheritTurretFacings=false ; boolean
CreateUnit.ConsiderPathfinding=false ; boolean
建筑
扩展建筑升级逻辑
Upgrading own and allied Power Plants in CnC: Final War
注解
Due to technical limitations, with Ares, upgrades placed through PowersUp.Buildings
instead of PowersUpBuilding
(note that internally PowersUpBuilding
is set to first entry of PowersUp.Buildings
if former is not set but latter is) DO NOT satisfy prerequisites. Suggested workaround is to use the upgrades to provide Superweapons that spawn in buildings via LimboDelivery logic to function as prerequisites, which are destroyed by another SW that becomes available if parent building is gone and so on.
Building upgrades now can be placed on own buildings, on allied buildings and/or on enemy buildings. These three owners can be specified by
PowersUp.Owner
. When upgrade is placed on building, it automatically changes it’s owner to match the building’s owner.One upgrade can now be applied to multiple different types of buildings specified by
PowersUp.Buildings
.Ares引入的建造限制检查对此逻辑兼容。
在rulesmd.ini
中:
[UPGRADENAME] ; BuildingType
PowersUp.Owner=Self ; list of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
PowersUp.Buildings= ; list of BuildingTypes
电厂增幅逻辑
存在的时候会增幅电厂产生的电力。
增幅建筑变卖或摧毁后,增幅电量就会消失。
在rulesmd.ini
中:
[SOMEBUILDING] ; BuildingType
PowerPlantEnhancer.PowerPlants= ; list of BuildingTypes
PowerPlantEnhancer.Amount=0 ; integer
PowerPlantEnhancer.Factor=1.0 ; floating point value
步兵
Customizable FLH When Infantry Is Prone Or Deployed
Now infantry can override
PrimaryFireFLH
andSecondaryFireFLH
if is prone (crawling) or deployed. Also works in conjunction with burst-index specific firing offsets.
在artmd.ini
中:
[SOMEINFANTRY] ; InfantryType
PronePrimaryFireFLH= ; integer - Forward,Lateral,Height
ProneSecondaryFireFLH= ; integer - Forward,Lateral,Height
DeployedPrimaryFireFLH= ; integer - Forward,Lateral,Height
DeployedSecondaryFireFLH= ; integer - Forward,Lateral,Height
步兵类型拥有独立的默认伪装
每种步兵单位现在都可以有它自己的“DefaultDisguise”(默认伪装)。
此标签的优先级高于Ares中为Side设定的“DefaultDisguise”。
在rulesmd.ini
中:
[SOMEINFANTRY] ; InfantryType
DefaultDisguise=E2 ; InfantryType
NotHuman步兵随机死亡动画
有
NotHuman=yes
的步兵现在可以播放在Die1
到Die5
中随机播放死亡动画序列,而非只有硬编码的Die1
。在启用此功能之前不要忘记调整步兵动画序列,否则它会播放不可见的动画序列。
在rulesmd.ini
中:
[SOMEINFANTRY] ; InfantryType
NotHuman.RandomDeathSequence=yes ; boolean
Slaves’ house decision customization when owner is killed
You can now decide the slaves’ house when the corresponding slave miner is killed using
Slaved.OwnerWhenMasterKilled
:suicide
: Kill each slave if the slave miner is killed.master
: Free the slaves but keep the house of the slave unchanged.neutral
: The slaves belong to civilian house.killer
: Free the slaves and give them to the house of the slave miner’s killer. (vanilla behavior)
In rulesmd.ini
[SOMEINFANTRY] ; Slave type
Slaved=yes
Slaved.OwnerWhenMasterKilled=killer ; enumeration (suicide | master | killer | neutral)
抛射体
拦截抛射体
Interception logic used in Tiberium Crisis mod
Projectiles can now be made interceptable by certain TechnoTypes by setting
Interceptable=true
on them. The TechnoType scans for interceptable projectiles within a range if it has no other target and will use one of its weapons to shoot at them. Projectiles can defineArmor
andStrength
. Weapons that cannot target the projectile’s armor type will not attempt to intercept it. On interception, if the projectile hasArmor
set, an amount equaling to the intercepting weapon’sDamage
adjusted by WarheadVerses
and the TechnoType’s firepower multipliers is deducted from the projectile’s current strength. Regardless of if the current projectile strength was reduced or not, if it sits at 0 or below after interception, the projectile is detonated.Interceptor.Weapon
determines the weapon (0 =Primary
, 1 =Secondary
) to be used for intercepting projectiles.The interceptor weapon may need
AG
and/orAA
set to true on its projectile to be able to target projectiles depending on their elevation from ground. If you don’t set those then the weapon won’t be able to target low-flying or high-flying projectiles respectively.
Interceptor.CanTargetHouses
controls which houses the projectiles (or rather their firers) can belong to be eligible for interception.Interceptor.GuardRange
(andInterceptor.(Rookie|Veteran|EliteGuardRange
) is maximum range of the unit to intercept projectile. The unit weapon range will limit the unit interception range though.Interceptor.MinimumGuardRange
(andInterceptor.(Rookie|Veteran|EliteMinimumGuardRange
) is the minimum range of the unit to intercept projectile. Any projectile under this range will not be intercepted.Interceptable.DeleteOnIntercept
determines whether or not the projectile will simply be deleted on detonation upon interception, or if it will properly detonate. Will be overridden byInterceptor.DeleteOnIntercept
setting on the interceptor.Interceptable.WeaponOverride
can be set to a WeaponType that will be used to override characteristics such asDamage
andWarhead
of the current projectile for detonation after interception. Will be overridden byInterceptor.WeaponOverride
setting on the interceptor.On interceptors,
Interceptor.WeaponReplaceProjectile
can be set to true to makeInterceptor.WeaponOverride
also replace the intercepted projectile’s type (includingImage
and other projectile characteristics) andSpeed
with its own. Does not replace particle systems (AttachedSystem
, Ares feature).On interceptors,
Interceptor.WeaponCumulativeDamage
can be set to true to makeDamage
fromInterceptor.WeaponOverride
weapon be added on the projectile’s damage rather than override it.
Interceptor.KeepIntact
can be set to true to allow intercepted projectiles to continue traveling as if they were not intercepted, but effects such asInterceptor.WeaponOverride
will still be applied.
在rulesmd.ini
中:
[SOMETECHNO] ; TechnoType
Interceptor=false ; boolean
Interceptor.Weapon=0 ; integer, weapon slot index (0 or 1)
Interceptor.CanTargetHouses=enemies ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
Interceptor.GuardRange=0.0 ; floating point value
Interceptor.VeteranGuardRange= ; floating point value
Interceptor.EliteGuardRange= ; floating point value
Interceptor.MinimumGuardRange=0.0 ; floating point value
Interceptor.VeteranMinimumGuardRange= ; floating point value
Interceptor.EliteMinimumGuardRange= ; floating point value
Interceptor.DeleteOnIntercept=false ; boolean
Interceptor.WeaponOverride= ; WeaponType
Interceptor.WeaponReplaceProjectile=false ; boolean
Interceptor.WeaponCumulativeDamage=false ; boolean
Interceptor.KeepIntact=false ; boolean
[SOMEPROJECTILE] ; Projectile
Interceptable=false ; boolean
Interceptable.DeleteOnIntercept=false ; boolean
Interceptable.WeaponOverride= ; WeaponType
Strength=0 ; integer
Armor= ; ArmorType
抛射体轨迹
抛射体现在可以用几种自定义轨迹。
Trajectory
不允许与原版的抛射体轨迹(Arcing
,ROT
或Inviso
)混合使用。Initial speed of the projectile is defined by
Trajectory.Speed
, which unlikeSpeed
used byROT
> 0 projectiles is defined on projectile not weapon.
在
rulesmd.ini
中:
[SOMEPROJECTILE] ; Projectile
Trajectory.Speed=100.0 ; floating point value
直线轨迹
Straight trajectory used to make blasters in a private mod by @brsajo#9745
不言自明,是直线射击的轨迹。
在rulesmd.ini
中:
[SOMEPROJECTILE] ; Projectile
Trajectory=Straight ; Trajectory type
轰击弹道
类似直线弹道,但是攻击目标上方的坐标点(高度由
Trajectory.Bombard.Height
决定)。当抛射体接近坐标点后会自由落体,并在接触到地面或目标后爆炸。
在rulesmd.ini
中:
[SOMEPROJECTILE] ; Projectile
Trajectory=Bombard ; Trajectory type
Trajectory.Bombard.Height=0.0 ; double
溅射增强
Shrapnel appearing against ground & buildings (Project Phantom)
溅射行为现在可以被地面或建筑触发。
在rulesmd.ini
中:
[SOMEPROJECTILE] ; Projectile
Shrapnel.AffectsGround=false ; boolean
Shrapnel.AffectsBuildings=false ; boolean
超级武器
虚拟投放
超级武器现在可以投放不在地图上的建筑,好似他们在地图上一样。
LimboDelivery.Types
列出此超武生效后创建的建筑列表。超武类型和发射位置并不重要。LimboDelivery.IDs
列出数字ID用以绑定建筑。要使虚拟击杀生效就必须设置。
被创建的建筑不会被任何地图内威胁影响到。只有虚拟击杀的超武才能移除这些建筑。
LimboKill.Affects
指定哪些所属方会被此功能影响LimboKill.IDs
列出目标ID。拥有此ID的虚拟投放建筑会被立刻移除。
投放可以通过一些可选的标签随机化。此时游戏会随机选择其中一种建筑投放。
LimboDelivery.RollChance
指定虚拟投放的概率,值域为[0%,100%](从不发生,总是发生),默认为一次成功的投放。LimboDelivery.RandomWeightsN
指定虚拟投放的权重,RandomWeights相当于RandomWeights0。每次虚拟投放时都会给对应的建筑增加这些权重,若对应次投放没有指定权重,则使用指定的最后一次权重。
注意:被虚拟投放的建筑不一定会使所有标签生效,以下标签是确定生效的:
工业工厂
矿石精炼器
间谍卫星
续命(KeepAlive, Ares 3.0)
建造前提(含Ares扩展)
SuperWeapon、SuperWeapon2,SuperWeapons、SW.AuxBuildings、SW.NegBuildings(Ares 0.9)
注意,为了使此逻辑与AITriggerTypes
条件共同运作,LegalTarget
必须为yes。
警告
记住,虚拟投放的建筑并不实际存在,一切与其实际交互的机制都不能正常生效(比如工厂,克隆,维修厂,直升机平台等)。此外此建筑必须要么KeepAlive=no
,要么可以被虚拟击杀,否则游戏将无法结束。
在rulesmd.ini
中:
[SOMESW] ; Super Weapon
LimboDelivery.Types= ; List of BuildingTypes
LimboDelivery.IDs= ; List of numeric IDs. -1 cannot be used.
LimboDelivery.RollChances= ; List of percentages.
LimboDelivery.RandomWeightsN= ; List of integers.
LimboKill.Affects=self ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
LimboKill.IDs= ; List of numeric IDs.
通用
Automatic passenger deletion
有该标签的载具将随着时间移除其中乘客。大型单位将需要更多时间。该逻辑也可以像部队回收站一样工作。
与Ares的劫持犯逻辑是很好的组合。
在rulesmd.ini
中:
[SOMETECHNO] ; TechnoType
PassengerDeletion.Rate=0 ; integer, game frames
PassengerDeletion.Rate.SizeMultiply=true ; boolean, whether to multiply frames amount by size
PassengerDeletion.Soylent=no ; boolean
PassengerDeletion.SoylentFriendlies=false ; boolean
PassengerDeletion.ReportSound= ; Sound
PassengerDeletion.Anim= ; Animation
Automatic passenger owner change to match transport owner
Transports with
Passengers.SyncOwner
set to true will have the owner of their passengers changed to match the transport if transport’s owner changes.On
OpenTopped=true
transports this will also disable checks that prevent target acquisition by passengers when the transport is temporarily mind controlled.Passengers.SyncOwner.RevertOnExit
, if set to true (which is the default), changes the passengers’ owner back to whatever it was originally when they entered the transport when they are ejected.Does not work on passengers acquired through use of
Abductor=true
weapon (Ares feature).
在rulesmd.ini
中:
[SOMETECHNO] ; TechnoType
Passengers.SyncOwner=false ; boolean
Passengers.SyncOwner.RevertOnExit=true ; boolean
自动开火武器
通过
AutoFire
,现在可以使单位自动开火,而不需要搜索目标。开火要么在单位脚下(此时使用强制攻击的武器),要么是单位本身(此时根据武器选择规则选择对单位自身有效的武器),由AutoFire.TargetSelf
决定。
在rulesmd.ini
中:
[SOMETECHNO] ; TechnoType
AutoFire=false ; boolean
AutoFire.TargetSelf=false ; boolean
Customizable OpenTopped properties
You can now override global
OpenTopped
transport properties per TechnoType.OpenTopped.IgnoreRangefinding
can be used to disableOpenTopped
transport rangefinding behaviour where smallest weapon range between transport and all passengers is used when approaching targets that are out of range and when scanning for potential targets.OpenTopped.AllowFiringIfDeactivated
can be used to customize whether or not passengers can fire out when the transport is deactivated (EMP, powered unit etc).
[SOMETECHNO] ; TechnoType
OpenTopped.RangeBonus= ; integer, override of the global default
OpenTopped.DamageMultiplier= ; floating point value, override of the global default
OpenTopped.WarpDistance= ; integer, override of the global default
OpenTopped.IgnoreRangefinding=false ; boolean
OpenTopped.AllowFiringIfDeactivated=true ; boolean
关闭副武器自动推算
现在当一个单位有
NoSecondaryWeaponFallback=true
(默认为false)时,如果它的主武器不能攻击一个目标,那副武器也可以不再对其有效了;同时有若干情况,这些情况下副武器总会被调用:OpenTransportWeapon=1
的单位在OpenTopped=true
的载具内开火。NoAmmoWeapon=1
的单位,Ammo
大于0且当前弹药数小于等于NoAmmoAmount
。部署的
IsSimpleDeployer=true
的DeployFireWeapon=1
的单位。DrainWeapon=true
的武器对Drainable=yes
的建筑。主武器的弹头有
IsLocomotor=true
时对建筑。弹头
ElectricAssault=true
对友军的Overpowerable=true
的建筑。Overpowerable=true
的建筑被过载。(Elite)WeaponX
系统整个排除在外(即Gunner=true
或IsGattling=true
)。
在rulesmd.ini
中:
[SOMETECHNO] ; TechnoType
NoSecondaryWeaponFallback=false ; boolean
Burst开火坐标
You can now specify separate firing offsets for each of the shots fired by weapon with
Burst
via using(Elite)(Prone/Deployed)PrimaryFire|SecondaryFire|WeaponX|FLH.BurstN
keys, depending on which weapons your TechnoType makes use of. N inBurstN
is zero-based burst shot index, and the values are parsed sequentially until no value for either regular or elite weapon is present, with elite weapon defaulting to regular weapon FLH if only it is missing. If no burst-index specific value is available, value from the base key (f.exPrimaryFireFLH
) is used.应用此逻辑的开火坐标不受因Burst数导致的水平对称影响。
在artmd.ini
中:
[SOMETECHNO] ; TechnoType Image
FLHKEY.BurstN= ; integer - Forward,Lateral,Height. FLHKey refers to weapon-specific FLH key name and N is zero-based burst shot index.
初始生命值
现在可以指定单位的初始生命值了。
在rulesmd.ini
中:
[SOMETECHNO] ; TechnoType
InitialStrength= ; integer
Initial Strength For Cloned Infantry
Initial strength for cloned infantry example in C&C: Reloaded
You can now specify how many hitpoints an Infantry Type starts with when leaves a Cloning Structure with
Cloning=yes
.
在rulesmd.ini
中:
[SOMEBUILDING] ; BuildingType
InitialStrength.Cloning= ; single double/percentage or comma-sep. range
注解
Both InitialStrength
and InitialStrength.Cloning
never surpass the type’s Strength
, even if your values are bigger than it.
自毁
任意如下条件满足则可自毁:
OnAmmoDepletion
:没弹药;AfterDelay
: 时间到;
自毁可从如下方式中选择:
kill
: 正常被击杀;vanish
: 凭空消失;sell
: 如果是建筑则被变卖;
若不明确指定则自毁逻辑不会开启。
注解
若自毁的单位带乘客,则乘客不会逃逸
。
在rulesmd.ini
中:
[SOMETECHNO] ; TechnoType
AutoDeath.Behavior= ; enumeration (kill | vanish | sell), default not set
AutoDeath.OnAmmoDepletion=no ; boolean
AutoDeath.AfterDelay=0 ; positive integer
心灵控制增强
Mind Control Range Limit used in Fantasy ADVENTURE Multiple Mind Control unit auto-releases the first victim in Fantasy ADVENTURE
拥有心灵控制武器的单位现在可以拥有最大控制距离。大于0将激活此逻辑。
多重心控单位可以在过载前释放被控制的单位。
心灵控制的动画现在可以用
MindControl.Anim
自定义了。
在rulesmd.ini
中:
[SOMETECHNO] ; TechnoType
MindControlRangeLimit=-1.0 ; floating point value
MultiMindControl.ReleaseVictim=false ; boolean
[SOMEWARHEAD] ; Warhead
MindControl.Anim= ; Animation, defaults to ControlledAnimationType
禁止手动移动
可以控制某单位是否无视移动指令。
[SOMETECHNO] ; TechnoType
NoManualMove=false ; boolean
覆盖隐形水下攻击行为
Naval underwater behavior in C&C: Reloaded
覆盖了一部分原版YR中的逻辑,使海军单位在海军单位未隐形时可以使用不同的武器。
在你的海军单位有一个武器对水下另一个武器对水面时很有用。
在rulesmd.ini
中:
[SOMETECHNO] ; TechnoType
ForceWeapon.Naval.Decloaked=-1 ; integer. 0 for primary weapon, 1 for secondary weapon, -1 to disable
升级子机
Promoted Spawns in Fantasy ADVENTURE
子机现在可以以发射者的等级出现。
在rulesmd.ini
中:
[SOMETECHNO] ; TechnoType
Promote.IncludeSpawns=false ; boolean
子机最大航程
Limited pursue range for spawns in Fantasy ADVENTURE
子机现在可以停止追击超出攻击距离的敌人。
Spawner.ExtraLimitRange
是额外追击距离。
在rulesmd.ini
中:
[SOMETECHNO] ; TechnoType
Spawner.LimitRange=false ; boolean
Spawner.ExtraLimitRange=0 ; integer
武器在传送时开火
现在可以让武器在单位传送后开火,会在传送动画(
WarpIn
/WarpOut
)播放的同时开火。WarpInMinRangeWeapon
用来在传送距离小于ChronoRangeMinimum
时代替WarpInWeapon
。它会无视ChronoTrigger
设置与否而触发。如果未设置,默认为WarpInWeapon
。如果设置了
WarpInWeapon.UseDistanceAsDamage
,WarpIn(MinRange)Weapon
的Damage
会被传送穿过的单元数替代。
在rulesmd.ini
中:
[SOMETECHNO] ; TechnoType
WarpInWeapon= ; WeaponType
WarpInMinRangeWeapon= ; WeaponType
WarpInWeapon.UseDistanceAsDamage=false ; boolean
WarpOutWeapon= ; WeaponType
Customize EVA voice and SellSound
when selling units
When a building or a unit is sold, a sell sound as well as an EVA is played to the owner. These configurations have been deglobalized.
EVA.Sold
is used to customize the EVA voice when selling, default toEVA_StructureSold
for buildings andEVA_UnitSold
for vehicles.SellSound
is used to customize the report sound when selling, default to[AudioVisual]->SellSound
. Note that vanilla game played vehicles’ SellSound globally. This has been changed in consistency with buildings’ SellSound.
在rulesmd.ini
中:
[SOMETECHNO] ; BuildingType or UnitType
EVA.Sold= ; EVA entry
SellSound= ; sound entry
Terrain
摧毁动画与音效
现在可以设定地形对象的摧毁动画和音效。
在rulesmd.ini
中:
[SOMETERRAINTYPE] ; TerrainType
DestroyAnim= ; Animation
DestroySound= ; Sound
弹头
提示
所有的新弹头对溅射范围和Ares的通用弹头超武都是支持的。
解除心控
Mind control break warhead being utilized (RA2: Reboot)
弹头现在可以破坏心控链接 (对永久心控无效) 。
在rulesmd.ini
中:
[SOMEWARHEAD] ; Warhead
RemoveMindControl=false ; boolean
基于几率的额外伤害 / 弹头暴击
现在可以设定某弹头是否会在爆炸时造成暴击伤害。可以设定暴击的几率,伤害,作用目标,HP上限,动画等。
Crit.Chance
决定暴击几率。正常情况下仅检测一次暴击,若Crit.ApplyChancePerTarget=yes
,则每个目标的暴击单独决定。Crit.ExtraDamage
决定暴击额外伤害。若设置Crit.Warhead
,则暴击的伤害使用此弹头,否则仍遵循当前弹头的Verses
设定。Crit.Affects
决定何种目标可以被暴击。Crit.AffectsBelowPercent
决定低于多少百分比血量的目标不会被暴击。Crit.AnimList
决定暴击后的弹头动画,替代弹头原本的动画。若设置Crit.AnimList.PickRandom=yes
(默认为AnimList.PickRandom
),则随机此动画。若设置
Crit.AnimOnAffectedTargets
,则暴击动画不再替代原本的动画,而是给每一个被暴击目标播放。
Crit.SuppressWhenIntercepted
, if set, prevents critical hits from occuring at all if the warhead was detonated from a projectile that was intercepted.ImmuneToCrit
决定单位是否免疫暴击。
在rulesmd.ini
中:
[SOMEWARHEAD] ; Warhead
Crit.Chance=0.0 ; floating point value, percents or absolute (0.0-1.0)
Crit.ApplyChancePerTarget=false ; boolean
Crit.ExtraDamage=0 ; integer
Crit.Warhead= ; Warhead
Crit.Affects=all ; list of Affected Target Enumeration (none|land|water|empty|infantry|units|buildings|all)
Crit.AffectBelowPercent=1.0 ; floating point value, percents or absolute (0.0-1.0)
Crit.AnimList= ; list of animations
Crit.AnimList.PickRandom= ; boolean
Crit.AnimOnAffectedTargets=false ; boolean
Crit.SuppressWhenIntercepted=false ; boolean
[SOMETECHNO] ; TechnoType
ImmuneToCrit=no ; boolean
警告
如果暴击弹头与原弹头为同一个弹头,或创建了一个链式循环暴击,那么游戏有可能卡死或崩溃。
微观定义水花
Allows Warheads to play custom water splash animations. See vanilla’s Conventional system here.
SplashList.PickRandom
can be set to true to pick a random animation to play from the list.
在rulesmd.ini
中:
[SOMEWARHEAD] ; Warhead
SplashList=<none> ; list of animations
SplashList.PickRandom=false ; boolean
Detonate Warhead on all objects on map
警告
While this feature can provide better performance than a large CellSpread
value, it still has potential to slow down the game, especially if used in conjunction with things like animations, alpha lights etc. Modder discretion and use of the filter keys (AffectTargets/Houses/Types
etc.) is advised.
Setting
DetonateOnAllMapObjects
to true allows a Warhead that is detonated by a projectile (for an example, this excludes things like animationWarhead
and Ares’ GenericWarhead superweapon but includesCrit.Warhead
and animationWeapon
) and consequently anyAirburst/ShrapnelWeapon
that may follow to detonate on each object currently alive and existing on the map regardless of its actual target, with optional filters. Note that this is done immediately prior Warhead detonation so afterPreImpactAnim
(Ares feature) has been displayed.DetonateOnAllMapObjects.AffectTargets
is used to filter which types of targets (TechnoTypes) are considered valid and must be set to a valid value other thannone
for this feature to work. Onlynone
,all
,aircraft
,buildings
,infantry
andunits
are valid values. This is set tonone
by default as inclusion of all object types can be performance-heavy.DetonateOnAllMapObjects.AffectHouses
is used to filter which houses targets can belong to be considered valid and must be set to a valid value other thannone
for this feature to work. Only applicable if the house that fired the projectile is known. This is set tonone
by default as inclusion of all houses can be performance-heavy.DetonateOnAllMapObjects.AffectTypes
can be used to list specific TechnoTypes to be considered as valid targets. If any valid TechnoTypes are listed, then only matching objects will be targeted. Note thatDetonateOnAllMapObjects.AffectTargets
andDetonateOnAllMapObjects.AffectHouses
take priority over this setting.DetonateOnAllMapObjects.IgnoreTypes
can be used to list specific TechnoTypes to be never considered as valid targets.DetonateOnAllMapObjects.RequireVerses
, if set to true, only considers targets whose armor type the warhead has non-zeroVerses
value against as valid. This is checked after all other filters listed above.
在rulesmd.ini
中:
[SOMEWARHEAD] ; Warhead
DetonateOnAllMapObjects=false ; boolean
DetonateOnAllMapObjects.AffectTargets=none ; list of Affected Target Enumeration (none|aircraft|buildings|infantry|units|all)
DetonateOnAllMapObjects.AffectHouses=none ; list of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
DetonateOnAllMapObjects.AffectTypes= ; list of TechnoType names
DetonateOnAllMapObjects.IgnoreTypes= ; list of TechnoType names
DetonateOnAllMapObjects.RequireVerses=false ; boolean
金币弹
TransactMoney
used in Rise of the East mod
弹头引爆时可以指定获得或失去资金。
TransactMoney.Display
can be set to display the amount of credits given or deducted. The number is displayed in green if given, red if deducted and will move upwards after appearing.TransactMoney.Display.AtFirer
if set, makes the credits display appear on firer instead of target. If set and firer is not known, it will display at target regardless.TransactMoney.Display.Houses
determines which houses can see the credits display.TransactMoney.Display.Offset
is additional pixel offset for the center of the credits display, by default (0,0) at target’s/firer’s center.
在rulesmd.ini
中:
[SOMEWARHEAD] ; Warhead
TransactMoney=0 ; integer - credits added or subtracted
TransactMoney.Display=false ; boolean
TransactMoney.Display.AtFirer=false ; boolean
TransactMoney.Display.Houses=All ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
TransactMoney.Display.Offset=0,0 ; X,Y, pixels relative to default
发射超武
超武在对应常规弹头所引爆的格子上发射
LaunchSW
指定所要发射的超武LaunchSW.RealLaunch
真实发射指仅使用弹头所属方目前真正拥有的超武。否则超武将无条件发射到指定格子,即无视是否拥有,是否够钱,是否充能LaunchSW.IgnoreInhibitors
ignoresSW.Inhibitors
/SW.AnyInhibitor
of each superweapon, otherwise only non-inhibited superweapons are launched.LaunchSW.IgnoreDesignators
ignoresSW.Designators
/SW.AnyDesignator
respectively.
注解
若在动画伤害上使用该逻辑则必须设置Invoker
在rulesmd.ini
中:
[SOMEWARHEAD] ; Warhead
LaunchSW= ; list of superweapons
LaunchSW.RealLaunch=true ; boolean
LaunchSW.IgnoreInhibitors=false ; boolean
LaunchSW.IgnoreDesignators=true ; boolean
识破伪装
弹头现在可以移除间谍的伪装。此逻辑也会生效在通过
PermaDisguise
获得的默认伪装上。
在rulesmd.ini
中:
[SOMEWARHEAD] ; Warhead
RemoveDisguise=false ; boolean
揭示弹
弹头可以引爆时揭示全部视野。
仅对所属方有效。
在rulesmd.ini
中:
[SOMEWARHEAD] ; Warhead
SpySat=false ; boolean
迷雾弹
弹头可以引爆时覆盖全部视野。
仅对敌人有效。
在rulesmd.ini
中:
[SOMEWARHEAD] ; Warhead
BigGap=false ; boolean
触发特定的NotHuman步兵死亡动画序列
弹头可以触发指定的
NotHuman=yes
的步兵的死亡动画序列,值代表Die1
到Die5
。
在rulesmd.ini
中:
[SOMEWARHEAD] ; Warhead
NotHuman.DeathSequence= ; integer (1 to 5)
武器
自定义AreaFire目标
现在可以指定区域开火的目标了。默认目标是开火者所在单元格,现在也可以通过设置
AreaFire.Target
为self
或random
将其修改为开火者本身或武器攻击范围内的随机某格。AreaFire.Target=self
遵循一般瞄准规则(如弹头比例等)对开火者自身。AreaFire.Target=random
会遵循武器的CanTarget
和CanTargetHouses
忽略不合格或包含不合格对象的单元格。
在rulesmd.ini
中:
[SOMEWEAPON] ; WeaponType
AreaFire.Target=base ; AreaFire Target Enumeration (base|self|random)
武器定义BurstDelay
现在支持为武器设定BurstDelay取代原本的
BurstDelayX
系统。对步兵,载具,建筑类型生效(飞机类型因开火系统完全不同无法支持)。并且允许为每一击都设定间隔,而非仅前四个。如果没有设置对应的间隔,那么就会使用最后设置的间隔。(比如
Burst=3
和Burst.Delays=10
将每一击都使用10作为间隔。)使用
-1
来取消此逻辑,应用原始的BurstDelay0-3
。
在rulesmd.ini
中:
[SOMEWEAPON] ; WeaponType
Burst.Delays=-1 ; integer - burst delays (comma-separated) for shots in order from first to last.
反馈武器
FeedbackWeapon
used to apply healing aura upon firing a weapon (Project Phantom)
现在可以设定当开火者开火时发射向开火者自身的额外武器。
FireInTransport
setting of the feedback weapon is respected to determine if it can be fired when the original weapon is fired from insideOpenTopped=true
transport. If feedback weapon is fired, it is fired on the transport.OpenToppedDamageMultiplier
is not applied on feedback weapons.
在rulesmd.ini
中:
[SOMEWEAPON] ; WeaponType
FeedbackWeapon= ; WeaponType
辐射增强
In addition to allowing custom radiation types, several enhancements are also available to the default radiation type defined in
[Radiation]
, such as ability to set owner & invoker or deal damage against buildings. See Custom Radiation Types for more details.
自定义飞机扫射
Strafing aircraft weapon customization in Project Phantom
扫射(武器抛射体ROT小于2)现在可以被自定义了。
Strafing.Shots
决定单轮扫射中武器发射几次。Ammo
仅在本轮扫射结束后扣除,无论本轮开火几次。有效值为1到5之前,超出则被重置为1或5。默认为5。Strafing.SimulateBurst
决定发射过程中是否模拟Burst
的表现,允许偏移开火坐标。仅当Burst=1
或未指定时生效。默认否。
在rulesmd.ini
中:
[SOMEWEAPON] ; WeaponType
Strafing.Shots=5 ; integer
Strafing.SimulateBurst=false ; boolean
武器瞄准筛选
`Weapon target filter - different weapon used against enemies & allies as well as units & buildings (Project Phantom)
现在可以指定武器可以攻击什么目标或所属方。这也会影响武器选择,除了某些固定情况。
请注意,
CanTarget
需要all
或empty
以使武器能向没有单位的格子开火。
在rulesmd.ini
中:
[SOMEWEAPON] ; WeaponType
CanTarget=all ; list of Affected Target Enumeration (none|land|water|empty|infantry|units|buildings|all)
CanTargetHouses=all ; list of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)