New / Enhanced Logics¶
This page describes all the engine features that are either new and introduced by Phobos or significantly extended or expanded.
New types / ingame entities¶
Buildings, Infantries and Vehicles with Shield in Fantasy ADVENTURE
[AudioVisual] Pips.Shield=-1,-1,-1 ; int, frames of pips.shp for Green, Yellow, Red Pips.Shield.Building=-1,-1,-1 ; int, frames of pips.shp for Green, Yellow, Red [ShieldTypes] 0=SOMESHIELDTYPE [SOMESHIELDTYPE] ; ShieldType name Strength=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 IdleAnim= ; 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 [SOMETECHNO] ; TechnoType ShieldType=SOMESHIELDTYPE ; ShieldType; none by default [SOMEWARHEAD] ; WarheadType PenetratesShield=false ; boolean BreaksShield=false ; boolean
Now you can have a shield for any TechnoType. It serves as a second health pool with independent
Negative damage will recover shield, unless shield has been broken. If shield isn’t full, all negative damage will be absorbed by shield.
When the TechnoType with a unbroken shield,
[TechnoType]->Armorfor game calculation.
UndeploysInto, if both of the TechnoTypes have shields, the transformed unit/building would keep relative shield health (in percents), same as with
Strength. If one of the TechnoTypes doesn’t have shields, it’s shield’s state on conversion will be preserved until converted back.
This also works with Ares’
Poweredcontrols whether or not the shield is active when a unit is running low on power or it is affected by EMP.
Attention, if TechnoType itself is not
Powered, then the shield won’t be offline when low power.
AbsorbOverDamagecontrols whether or not the shield absorbs damage dealt beyond shield’s current strength when the shield breaks.
Respawnrespect the following settings: 0.0 disables the feature, 1%-100% recovers/respawns the shield strength in percentage, other number recovers/respawns the shield strength directly. Specially,
SelfHealingwith a negative number deducts the shield strength.
If you want shield recovers/respawns 1 HP per time, currently you need to set tag value to any number between 1 and 2, like
Respawn.Raterespect the following settings: 0.0 instantly recovers the shield, other values determine the frequency of shield recovers/respawns in ingame minutes.
IdleAnim, if set, will be played while the shield is intact. This animation is automatically set to loop indefinitely.
Bouncer=yesanimations are not supported at the moment.
IdleAnim.OfflineActionindicates what happens to the animation when the shield is in a low power state.
IdleAnim.TemporalActionindicates what happens to the animation when the shield is attacked by temporal weapons.
BreakAnim, if set, will be played when the shield has been broken.
HitAnim, if set, will be played when the shield is attacked, similar to
WeaponNullifyAnimfor Iron Curtain.
A TechnoType with a shield will show its shield Strength. An empty shield strength bar will be left after destroyed if it is respawnable.
Buildings now use the 5th frame of
pips.shpto display the shield strength while other units uses the 16th frame by default.
Pips.Shieldcan be used to specify which pip frame should be used as shield strength. If only 1 digit set, then it will always display it, or if 3 digits set, it will respect
Pips.Shield.Buildingis used for BuildingTypes.
pipbrd.shpwill use its 4th frame to display an infantry’s shield strength and the 3th frame for other units if
pipbrd.shphas extra 2 frames. And
BracketDeltacan be used as additional
PixelSelectionBracketDeltafor shield strength.
Warheads have new options that interact with shields.
PenetratesShieldallows the warhead ignore the shield and always deal full damage to the TechnoType itself. It also allows targeting the TechnoType as if shield isn’t existed.
BreaksShieldallows the warhead to always break shields of TechnoTypes, regardless of the amount of strength the shield has remaining or the damage dealt, assuming it affects the shield’s armor type. Residual damage, if there is any, still respects
!(Insert your image here)
Technos and projectiles can now have colorful trails of different transparency, thickness and color, which are drawn via laser drawing code.
Technos and projectiles can have multiple laser trails. For technos each trail can have custom laser trail type and FLH offset relative to turret and body.
Laser trails are very resource intensive! Due to the game not utilizing GPU having a lot of trails can quickly drop the FPS on even good machines. To reduce that effect:
don’t put too many laser trails on units and projectiles;
make sure you set as high
SegmentLengthvalue as possible without trails being too jagged;
try to keep the length of the trail minimal (can be achieved with smaller
[LaserTrailTypes] 0=SOMETRAIL [SOMETRAIL] ; LaserTrailType name IsHouseColor=no ; 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=no ; boolean, whether the trail won't be drawn on vertical movement IsIntense=no ; boolean, whether the laser is "supported" (AKA prism forwarding) [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=no ; boolean, whether the trail origin is turret ; where N = 0, 1, 2, ...
Custom Radiation Types¶
Mixing different radiation types
Allows to have custom radiation type for any weapon now. More details on radiation here.
[RadiationTypes] 0=SOMERADTYPE [SOMEWEAPON] ; WeaponType RadType=Radiation ; RadType to use instead ; of default [Radiation] [SOMERADTYPE] ; custom RadType name RadDurationMultiple=1 ; int RadApplicationDelay=16 ; int RadApplicationDelay.Building=0 ; int RadLevelMax=500 ; int RadLevelDelay=90 ; int RadLightDelay=90 ; int RadLevelFactor=0.2 ; double RadLightFactor=0.1 ; double RadTintFactor=1.0 ; double RadColor=0,255,0 ; RGB RadSiteWarhead=RadSite ; WarheadType
Animations can now create (or “convert” to) units when they end.
Because anims usually don’t have an owner the unit will be created with civilian owner unless you use
DestroyAnimwhich was modified to store owner and facing information from the destroyed unit.
[SOMEUNIT] ; UnitType DestroyAnim.Random=yes ; boolean, whether to randomize DestroyAnim
[SOMEANIM] ; AnimationType CreateUnit= ; UnitType CreateUnit.Facing=0 ; unsigned short, `CreateUnit` facings in range of 0-255 CreateUnit.RandomFacing=yes ; boolean, `CreateUnit` use random facings CreateUnit.InheritFacings=no ; boolean, inherit facing from destroyed unit CreateUnit.InheritTurretFacings=no ; boolean, inherit facing from destroyed unit CreateUnit.RemapAnim=no ; boolean, whether to remap anim to owner color CreateUnit.Mission=Guard ; MissionType CreateUnit.Owner=Victim ; owner house kind, Invoker/Killer/Victim/Civilian/Special/Neutral/Random
Extended building upgrades logic¶
Upgrading own and allied Power Plants in CnC: Final War
Building upgrades now can be placed on own buildings, on allied buildings and/or on enemy buildings. These three owners can be specified via a new tag, comma-separated. 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 buildings via a new tag, comma-separated.
Currently Ares-introduced build limit for building upgrades doesn’t work with this feature. This may change in future.
[UPGRADENAME] ; BuildingType PowersUp.Owner=Self ; list of owners (Self, Ally and/or Enemy) PowersUp.Buildings= ; list of BuildingTypes
Speedto 0 now makes game treat them as stationary, behaving in very similar manner to deployed vehicles with
IsSimpleDeployerset to true. Should not be used on buildable vehicles, as they won’t be able to exit factories.
No Manual Move¶
You can now specify whether a TechnoType is unable to receive move command.
[SOMETECHNO] ; TechnoType NoManualMove=no ; boolean
Mind Control enhancement¶
Mind controllers now can have the upper limit of the control distance. Tag values greater than 0 will activate this feature.
Mind controllers with multiple controlling slots can now release the first controlled unit when they have reached the control limit and are ordered to control a new target.
Allows Warheads to play custom
MindControl.Animwhich defaults to
[SOMETECHNO] ; TechnoType MindControlRangeLimit=-1.0 ; double MultiMindControl.ReleaseVictim=no ; boolean [SOMEWARHEAD] ; Warhead MindControl.Anim=ControlledAnimationType ; AnimType
Spawn range limit¶
Limited pursue range for spawns in Fantasy ADVENTURE
The spawned units will abort the infinite pursuit if the enemy is out of range.
Spawner.ExtraLimitRangeadds extra pursuit range to the spawned units.
[SOMETECHNO] ; TechnoType Spawner.LimitRange=no ; boolean Spawner.ExtraLimitRange=0 ; integer
Strafing aircraft weapon customization¶
Strafing aircraft weapon customization in Project Phantom
Some of the behavior of strafing aircraft weapons (weapon projectile has
ROTbelow 2) can now be customized.
Strafing.Shotscontrols the number of times the weapon is fired during a single strafe run.
Ammois only deducted at the end of the strafe run, regardless of the number of shots fired. Valid values range from 1 to 5, any values smaller or larger are effectively treated same as either 1 or 5, respectively. Defaults to 5.
Strafing.SimulateBurstcontrols whether or not the shots fired during strafing simulate behavior of
Burst, allowing for alternating firing offset. Only takes effect if weapon has
Burstset to 1 or undefined. Defaults to false.
[SOMEWEAPON] ; WeaponType Strafing.Shots=5 ; integer Strafing.SimulateBurst=false ; bool
Radiation now has owner by default, so any rad-kills will be scored. This behavior can be reverted by a corresponding tag.
Currently the rad maker doesn’t gain experience from kills, this may change in future.
Radiation is now able to deal damage to Buildings. To enable set
RadApplicationDelay.Buildingvalue more than 0.
[SOMEWEAPON] ; WeaponType Rad.NoOwner=no ; boolean
All new warheads can be used with CellSpread and Ares’ GenericWarhead superweapon where applicable.
Generate credits on impact¶
TransactMoney used in Rise of the East mod
Warheads can now give credits to its owner at impact.
[SOMEWARHEAD] ; Warhead TransactMoney=0 ; integer - credits added or subtracted
Reveal map for owner on impact¶
[NUKE] warhead reveals the map when nuclear missile detonates
Warheads can now reveal the entire map on impact.
Reveal only applies to the owner of the warhead.
[SOMEWARHEAD] ; Warhead SpySat=no ; boolean
Shroud map for enemies on impact¶
Warheads can now shroud the entire map on impact.
Shroud only applies to enemies of the warhead owner.
[SOMEWARHEAD] ; Warhead BigGap=no ; boolean
Remove disguise on impact¶
Warheads can now remove disguise of spies.
[SOMEWARHEAD] ; Warhead RemoveDisguise=no ; boolean
Break Mind Control on impact¶
Warheads can now break mind control (doesn’t apply to perma-MC-ed objects).
[SOMEWARHEAD] ; Warhead RemoveMindControl=no ; boolean
Critical damage chance¶
Warheads can now apply additional chance-based damage (known as “critical” damage) with the ability to customize chance, damage, affected targets, and animations of critical strike.
[SOMEWARHEAD] ; Warhead Crit.Chance=0.0 ; float, chance on [0.0-1.0] scale Crit.ExtraDamage=0 ; integer, extra damage Crit.Affects=all ; list of "affects" flags (same as SWType's) Crit.AnimList= ; list of animations [SOMETECHNO] ; TechnoType ImmuneToCrit=no ; boolean
Custom ‘SplashList’ on Warheads¶
Allows Warheads to play custom water splash animations. See vanilla’s Conventional system here.
[SOMEWARHEAD] ; Warhead SplashList=<none> ; list of animations to play SplashList.PickRandom=no ; play a random animation from the list? boolean, defaults to no
Projectile interception logic¶
Interception logic used in Tiberium Crisis mod
Projectiles can now be made targetable by certain TechnoTypes. Interceptor TechnoType’s projectile must be
AA=yesin order for it to work properly and the projectile must be used in a primary Weapon.
Interceptor.GuardRangeis maximum range of the unit to intercept projectile. The unit weapon range will limit the unit interception range though.
Interceptor.EliteGuardRangevalue is used if the unit veterancy is Elite.
Interceptor.MinimumGuardRangeis the minimum range of the unit to intercept projectile. Any projectile under this range will not be intercepted.
Interceptor.EliteMinimumGuardRangevalue is used if the unit veterancy is Elite.
[SOMETECHNO] ; TechnoType Interceptor=no ; boolean Interceptor.GuardRange=0.0 ; double Interceptor.EliteGuardRange=0.0 ; double Interceptor.MinimumGuardRange=0.0 ; double Interceptor.EliteMinimumGuardRange=0.0 ; double [SOMEPROJECTILE] ; Projectile Interceptable=no ; boolean
71 Timed Area Guard¶
Puts the TaskForce into Area Guard Mode for the given units of time. Unlike the original timed Guard script (
5,n) that just stays in place doing a basic guard operation the “Area Guard” action has a more active role attacking nearby invaders or defending units that needs protection.
[SOMESCRIPTTYPE] ; ScriptType x=71,n ; integer, time in ingame seconds
72 Load Onto Transports¶
If the TaskForce contains unit(s) that can be carried by the transports of the same TaskForce then this action will make the units enter the transports. In Single player missions the next action must be “Wait until fully loaded” (
43,0) or the script will not continue.
[SOMESCRIPTTYPE] ; ScriptType x=72,0
73 Wait until ammo is full¶
If the TaskForce contains unit(s) that use ammo then the the script will not continue until all these units have fully refilled the ammo.
[SOMESCRIPTTYPE] ; ScriptType x=73,0