ModEnc is currently in Maintenance Mode: Changes could occur at any given moment, without advance warning.

Weapons

From ModEnc
Jump to navigation Jump to search

Weapons are essential to CnC, even more than harvesting. A Weapon is a combination of Weapon-specific data, warhead, and projectile.

If a weapon gets fired, the game first checks for the animation & sound set in the weapon to display them;
The warhead is then delivered to it's target by the projectile;
On impact, the game reads the rules for the impact from the warhead, and then calculates the damage inflicted, basing on the Damage= value supplied in the weapon.

Note: Even though there is no explicit [WeaponTypes] list in the rules, the game builds one internally from all the weapons that are loaded via objects. This list is used by certain ingame functions.

Making new weapons (by DCoder)

New weapons are easy to create, as long as you know these facts:

When a unit is ordered to fire, it moves towards the target until it is in Range=, then fires the weapon. It travels through the air (directed by the Projectile=), impacts and deals a certain % of weapon's Damage= (directed by the Warhead=).

Enough theory, let's make a new weapon, projectile and warhead to replace the Destroyer's cannon with a RA1 style missile launcher. So set [DEST] Primary=OldMissile, then create this section:

[OldMissile]
Damage=60 ;how much damage points to deliver
ROF=60 ;how often (in frames) to fire
Range=8 ;how far (in cells) can the weapon fly?
Projectile=HeatSeekingMissile ;our new projectile
Warhead=HeatMissileWH ;our new warhead
Speed=25 ; how fast does the weapon fly?

Report=AegisAttack ;the sound of aegis missile launcher

But the [HeatSeekingMissile] does not exist yet. So create it:

[HeatSeekingMissile]
High=yes ;fly in an arc (IFV missile like) instead of straight (cannon like)
Shadow=no ;don't draw shadow on the ground (the missile is too small)
AA=yes ;can it hit air targets?
AG=yes ;can it hit ground targets?
Image=MEDUSA ;this is the image that Aegis missile uses
ROT=20 ;(not zero means it can 'home in' on the target)
SubjectToCliffs=no ;can cliffs mess up the targeting (we're in the water, no cliffs here)
SubjectToElevation=no ;does the weapon get a range bonus if fired from a high place downwards?

SubjectToWalls=no ;can the walls stop it?

The [HeatMissileWH] also doesn't exist. So we need to create it as well:

[HeatMissileWH]
CellSpread=.3 ;in map cells, how far can you still feel the impact
PercentAtMax=1 ;at the edge of the area effected (determined by cellspread) this is the percent of damage done.
Verses=100%,100%,100%,100%,100%,100%,0%,0%,0%,100%,100% ;(see armor types tutorial)
InfDeath=3 ;which infantry death to use when infantry is killed by this weapon?
AnimList=EXPLOSML ;what animations to play at impact point?

ProneDamage=100% ;% damage to deal to infantry that is prone (deployed counts as prone)

Now, add the HeatMissileWH to the [Warheads] list. I haven't seen anything wrong when I don't put it there, but since the list exists, it can be necessary for something.

Applicable INI Flags

These tables show all INI flags applicable1 to Weapons. The flags are grouped by the internal classes the flags are inherited from, and then listed in the order they are read in by the game. You can re-sort the rows by column values by clicking the arrow icons in the column headings. Each flag can be clicked to visit its page for detailed information.

Please note that this section is accurate only for Yuri's Revenge. All other C&C games use different sets of flags.

1 "Applicable" in this context means "read from the INI files". Certain flags listed here don't have any effect ingame , but they are read and in certain cases cause a crash if not present. Again, refer to each flag's individual page for detailed information.


AbstractTypes
INI File Section Key Value Type Default Value Adds to list
Rules(md).ini Object's ID Name string(48 symbols) ID
Rules(md).ini Object's ID UIName string(31 symbol) ""


WeaponType
INI File Section Key Value Type Default Value Adds to list
Rules(md).ini Object's ID AmbientDamage int 0
Rules(md).ini Object's ID IsSonic boolean 0
Rules(md).ini Object's ID Spawner boolean 0
Rules(md).ini Object's ID LimboLaunch boolean 0
Rules(md).ini Object's ID DecloakToFire boolean 1
Rules(md).ini Object's ID CellRangefinding boolean 0
Rules(md).ini Object's ID FireOnce boolean 0
Rules(md).ini Object's ID NeverUse boolean 0
Rules(md).ini Object's ID RevealOnFire boolean 1
Rules(md).ini Object's ID TerrainFire boolean 0
Rules(md).ini Object's ID SabotageCursor boolean 0
Rules(md).ini Object's ID MigAttackCursor boolean 0
Rules(md).ini Object's ID DisguiseFireOnly boolean 0
Rules(md).ini Object's ID InfiniteMindControl boolean 0
Rules(md).ini Object's ID FireWhileMoving boolean 1
Rules(md).ini Object's ID DrainWeapon boolean 0
Rules(md).ini Object's ID FireInTransport boolean 1
Rules(md).ini Object's ID DisguiseFakeBlinkTime boolean 0
Rules(md).ini Object's ID Suicide boolean 0
Rules(md).ini Object's ID Supress boolean 0
Rules(md).ini Object's ID Burst int 1
Rules(md).ini Object's ID Damage int 0
Rules(md).ini Object's ID Speed int 0
Rules(md).ini Object's ID ROF int 0
Rules(md).ini Object's ID Range int 0
Rules(md).ini Object's ID MinimumRange int 0
Rules(md).ini Object's ID Report vector<Sound> {}
Rules(md).ini Object's ID DownReport vector<Sound> {}
Rules(md).ini Object's ID Anim vector<Animation> {} +
Rules(md).ini Object's ID AssaultAnim Animation 0 +
Rules(md).ini Object's ID OccupantAnim Animation 0 +
Rules(md).ini Object's ID OpenToppedAnim Animation 0 +
Rules(md).ini Object's ID Camera boolean 0
Rules(md).ini Object's ID IsLaser boolean 0
Rules(md).ini Object's ID DiskLaser boolean 0
Rules(md).ini Object's ID IsLine boolean 0
Rules(md).ini Object's ID IsHouseColor boolean 0
Rules(md).ini Object's ID Charges boolean 0
Rules(md).ini Object's ID TurboBoost boolean 0
Rules(md).ini Object's ID UseFireParticles boolean 0
Rules(md).ini Object's ID UseSparkParticles boolean 0
Rules(md).ini Object's ID OmniFire boolean 0
Rules(md).ini Object's ID DistributedWeaponFire boolean 0
Rules(md).ini Object's ID IsRailgun boolean 0
Rules(md).ini Object's ID Lobber boolean 0
Rules(md).ini Object's ID LaserInnerColor Color {0;0;0}
Rules(md).ini Object's ID LaserOuterColor Color {0;0;0}
Rules(md).ini Object's ID LaserOuterSpread XYZ {0;0;0}
Rules(md).ini Object's ID LaserDuration int 10
Rules(md).ini Object's ID IsBigLaser boolean 0
Rules(md).ini Object's ID Bright boolean 0
Rules(md).ini Object's ID IonSensitive boolean 0
Rules(md).ini Object's ID AreaFire boolean 0
Rules(md).ini Object's ID IsElectricBolt boolean 0
Rules(md).ini Object's ID DrawBoltAsLaser boolean 0
Rules(md).ini Object's ID IsAlternateColor boolean 0
Rules(md).ini Object's ID IsRadBeam boolean 0
Rules(md).ini Object's ID IsRadEruption boolean 0
Rules(md).ini Object's ID RadLevel int 0
Rules(md).ini Object's ID IsMagBeam boolean 0
Rules(md).ini Object's ID AttachedParticleSystem ParticleSystem 0
Rules(md).ini Object's ID Warhead WarheadType 0 +
Rules(md).ini Object's ID Projectile ProjectileType 0 +