Skip to content

Veterancy and promotion

Promotes an object through veteran and elite rank as it destroys value, unlocking per-type abilities and an elite weapon.

Features & systemsCombat & weaponsCombat & targeting

Changed in 0.1.0

Each runtime instance carries a single experience figure, and its rank is read directly off that number. The four bands are exclusive:

RankExperience
Below rookieless than 0
Rookie0 up to but not including 1
Veteran1 up to but not including 2
Elite2 and above

Every object is created at rookie with an experience of 0. The thresholds 1 and 2 are fixed in the engine; the rules govern how fast the figure climbs, not where the boundaries lie. The figure belongs to the object and not to its type, so two objects built from the same rules section sit at whatever rank each has earned or been handed.

Among the rules and AI settings, VeteranLevel=0 is the only source of negative experience, assigning -0.25; a map’s placed-object records can also write the experience figure directly, at any value. The state costs the object nothing in combat: a below-rookie object holds no abilities, exactly like the rookie it sits under. The state shows in three places only — the insignia it draws, the veterancy crate that steps it up to rookie, and the armory, which sends it out a veteran where any other occupant would leave elite.

Experience is credited in one place: when an object is destroyed, whatever dealt the fatal damage receives victim cost / (killer cost * VeteranRatio). Reaching veteran therefore means destroying VeteranRatio times the killer’s own cost in enemy value, and reaching elite means destroying twice that. The figure taken from each type is its Cost, not its Points. A structure that hands out a free unit has that unit’s price subtracted from its own and then added straight back here, so a kill is still worth the structure’s written price — unless the unit is priced at or above the structure, where the subtraction floors at nothing and the structure is worth the unit’s price instead. The division has no zero guard: a VeteranRatio of 0, or a killer type whose Cost is 0, divides by zero.

Only a killer whose type is Trainable=yes accumulates anything; the check is on the killer’s own type, and it gates earning alone. An object that was handed a rank some other way keeps every benefit of that rank whether or not its type is trainable. BuildingTypes start untrainable and must set the key explicitly to earn from their own kills.

The house that lost the object also tests whether it considers the killer allied. An allied killer receives no experience, while the remaining score, loss, and trigger bookkeeping for the destroyed object still runs.

A killer is credited separately for each occupant that dies with a transport it destroys, and a vehicle that crushes something is credited as that object’s killer.

Nothing decays experience and nothing resets it on ownership change, so a rank is held until something explicitly reassigns it.

Every credited kill clamps the result to VeteranCap after adding to it. The clamp runs only on this path — the promotion sources below write a rank directly and ignore the ceiling.

Five settings-driven paths set a rank with no experience earned, and a map’s placed-object records can write an experience figure directly besides. None of them consults VeteranCap or the kill formula. The veterancy crate alone consults Trainable; the other four settings-driven paths do not.

SourceResult
Veterancy crateEvery Trainable=yes object on the ground within CrateRadius of the crate rises one rank, repeated as many times as the crate’s [Powerups] data field says.
Armory=yes buildingThe infantry inside is promoted once the building’s servicing counter runs out.
Drop Pods superweaponEach delivered passenger is created elite.
TeamType VeteranLevelEvery member created for the team takes the rank the value names.
InitialVeteran=yesThe units and infantry drawn from the random starting selection of a skirmish or multiplayer match are created elite.

The crate is the only path that steps a rank rather than assigning one: it lifts a below-rookie object to rookie, a rookie to veteran, and a veteran to elite, and leaves an elite where it is. The other four assign a rank outright — three write a fixed rank over whatever the object was carrying, and the armory picks between veteran and elite by the occupant that walked in.

The armory delay comes from IRepairRate, which the hospital shares.

Rank by itself changes almost nothing. Except for the elite weapon and the cell-wide scatter noted below, every benefit is gated on an ability, and the rank only decides which of the type’s two ability lists is consulted. A veteran of a type that names no abilities gains a rank insignia and nothing else.

Each object type carries two ability sets, VeteranAbilities and EliteAbilities, each a comma-separated list of tokens. A veteran draws on VeteranAbilities. An elite draws on both lists together, so an ability named in VeteranAbilities continues to apply after the second promotion. Nothing below veteran holds any ability at all, and EliteAbilities is never consulted below elite rank.

rules.ini
[MYINF] ; example InfantryType
VeteranAbilities=FIREPOWER,ROF
EliteAbilities=SELF_HEAL,FEARLESS

A veteran MYINF hits harder and reloads faster. An elite one keeps both of those and adds self-repair and immunity to fear.

The eighteen accepted tokens are matched without regard to letter case, and the table gives each one’s effect on an object that holds it. They fall into three kinds: ten hand the object a flag its type could have carried from the start, five scale a figure from the rules, and SCATTER, RADAR_INVISIBLE and GUARD_AREA change behavior with no rules figure behind them.

TokenEffect on a qualifying object
FASTERMovement speed is multiplied by VeteranSpeed plus one. Buildings have no speed to raise.
STRONGERIncoming damage is divided by VeteranArmor plus one.
FIREPOWERWeapon damage is multiplied by VeteranCombat plus one.
SCATTERThe object scatters from incoming fire even when the owner’s units would otherwise hold position.
ROFReload delay is divided by VeteranROF plus one.
SIGHTSight range is multiplied by VeteranSight plus one.
CLOAKThe object cloaks and recloaks without Cloakable=yes, and stays cloaked while immobilized.
TIBERIUM_PROOFInfantry take no damage from standing in Tiberium, as with TiberiumProof=yes.
VEIN_PROOFVeins do not damage the object, as with ImmuneToVeins=yes.
SELF_HEALThe object repairs itself while at or below the yellow health threshold, as with SelfHealing=yes.
EXPLODESDeath produces the violent explosion of Explodes=yes.
RADAR_INVISIBLEThe object is kept off the local player’s radar unless a sensor contact picks it up.
SENSORSAn adjacent enemy cloaked object shimmers, as with Sensors=yes.
FEARLESSInfantry accumulate no fear, as with Fearless=yes.
C4Infantry attack buildings by sabotage, as with C4=yes.
TIBERIUM_HEALStanding in Tiberium repairs the object, as with TiberiumHeal=yes.
GUARD_AREAAn idle armed vehicle, and an idle human-owned infantry, takes the Guard Area mission instead of Guard. A member of a team is unaffected, and so is a computer-owned infantry, whose idle handling never reads the ability.
CRUSHERA vehicle crushes crushable objects and overlays, as with Crusher=yes.

An unrecognized token is discarded without complaint, so a misspelling produces a rank with fewer benefits and no diagnostic.

An ability list replaces rather than merges: a later rules layer that carries the key starts from an empty set and keeps only what it names. Omitting the key in that layer leaves the earlier list in force — as does assigning an empty value, which is discarded when the file is read, so a list cannot be cleared once set.

Each figure is fetched at the moment the statistic is needed, and each states a fraction to add rather than a finished multiplier:

SettingApplied as
VeteranCombatDamage is multiplied by the value plus one, after the house and object firepower biases.
VeteranSpeedSpeed is multiplied by the value plus one, after the house ground-speed bias.
VeteranSightSight range is multiplied by the value plus one.
VeteranArmorIncoming damage is divided by the value plus one.
VeteranROFReload delay is divided by the value plus one.

VeteranArmor and VeteranROF are divisors, so raising them lowers the number they act on: 1 halves damage taken and halves the reload delay, while 0 leaves both untouched. The other three are multipliers, where 1 doubles the statistic and 0 leaves it untouched. All five default to 1.

A sonic weapon and a weapon that fires through the fire particle system never receive the firepower bonus, because their damage figure is zeroed before the veteran step is reached. The reload bonus is skipped on a sonic weapon, and on a weapon whose spark, fire, or railgun particle system is attached; within a burst it is skipped as well, so only the delay that follows the last shot of a burst is shortened.

An elite object fires the WeaponType named by Elite wherever its primary weapon would otherwise be used — target selection, range tests, reload delay, and the shot itself all resolve through the substituted weapon slot. The secondary weapon is never swapped, and a veteran gets no swap at all. A type that leaves Elite unset falls back to its primary, so the substitution is invisible on types that do not define one.

The elite weapon slot reuses the primary’s art keys, PrimaryFireFLH, PBarrelLength, and PBarrelThickness, so the elite weapon fires from the same muzzle offset as the weapon it replaces.

Nothing about a rank is cached. Each multiplier is fetched from the rules and each ability list from the type at the moment it is needed, so a promotion applies from the next shot, the next damage event, or the next movement step.

Sight is the exception. The wider radius is computed inside the routine that reveals terrain, so a promoted object’s revealed area grows only when it next looks, not at the moment of promotion.

Deploying carries experience across in both directions: a construction vehicle that deploys hands its experience to the building it becomes, and a building that undeploys hands it back to the vehicle. Change of ownership leaves experience untouched, so a captured building keeps the rank it was carrying, along with the abilities and elite weapon that rank unlocks.

Passengers that get clear of a wrecked transport are the same objects they were and keep their own ranks. The crew that escapes a destroyed vehicle or building is a freshly created infantry object and starts at rookie.

A veteran and an elite each draw their own insignia from the hard-coded PIPS.SHP, placed beside the object and pushed further out for anything that is not infantry. The insignia is drawn with the object’s condition indicator and only for a viewer allied to its owner or spying on that house, so an enemy’s ranks stay hidden. A building that acquired a rank by deploying draws one as well. An object below rookie draws the frame immediately after the last named pip rather than an insignia designed for that state.

16 of 16

KeyDescriptionValueWhen omitted
ArmoryBuildingTypeAdmits one infantry at a time and promotes it when the servicing delay elapses.booleanno
CrateRadiusglobal rulesThe distance from an opened crate within which its area results reach other objects, in cells.distance (cells)2.5
EliteAircraftType, BuildingType, InfantryType, UnitTypeThe WeaponType an elite object fires in place of its primary.classnone
EliteAbilitiesAircraftType, BuildingType, InfantryType, UnitTypeThe abilities an object of this type gains at elite rank, on top of its veteran abilities.abilities(empty)
IRepairRateglobal rulesThe interval between servicing steps inside a hospital, and an armory's promotion delay.floating point.016
InitialVeteranscenariosCreates the randomly chosen starting units of a skirmish or multiplayer match at elite rank.booleanUnchanged
TrainableAircraftType, BuildingType, InfantryType, UnitTypeAllows an object of this type to accumulate experience from kills and receive veterancy-crate promotions.booleanContext-dependent
VeteranAbilitiesAircraftType, BuildingType, InfantryType, UnitTypeThe abilities an object of this type gains at veteran rank and keeps at elite.abilities(empty)
VeteranArmorglobal rulesDamage taken by an object holding the armor ability is divided by this value plus one.floating point1
VeteranCapglobal rulesThe highest experience total a credited kill may leave an object at.floating point1
VeteranCombatglobal rulesWeapon damage from an object holding the firepower ability is multiplied by this value plus one.floating point1
VeteranLevelTeamTypeThe rank every member created for this team starts at.integer1
VeteranROFglobal rulesReload delay of an object holding the rate of fire ability is divided by this value plus one.floating point1
VeteranRatioglobal rulesThe multiple of its own cost an object must destroy to earn one point of experience.floating point10
VeteranSightglobal rulesSight range of an object holding the sight ability is multiplied by this value plus one.floating point1
VeteranSpeedglobal rulesMovement speed of an object holding the faster ability is multiplied by this value plus one.floating point1

History

  1. Changed0.1.0In development

    Exclude allied kills from veterancy

  2. Changed0.1.0In development

    Honor Trainable for veterancy crates