Supreme Ruler Wiki
Advertisement
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Subsystem Upgrades are a combination of Tech Tree information, Upgrade stats information, an Picnums (mesh) information to represent upgrades in elements of a unit. Generally intended for space units in GR

Modules (SubSystems)

0 : Armour / Shielding

1 : Command (ie front section)

2 : Cargo (optional)

3 : Engines

4 : Weapons

Levels

0 (Base) / 1 / 2 / 3

Levels are optional, not all will have all levels

TechTree

Upgrades effect a Unit Class - every unit in class gets upgrade (in resv / new prod)

Using Tech Effect 500 - 755

Upgrade Levels per active unit are stored in CUnitList systemupgrade[] variable

Current maximum upgrade Levels stored in ruupgrades[player][Class/Subsystem]

  • Offset = classnum * 8 + subsystemnum
  • Supports up to 8 subsystems/modules, only 5 used at present

Upgrades triggered by research achievement

  • Each Unit Class in game supports 8 Upgrade systems (only 5 used)
  • Tech Effect increases are additive
  • We can upgrade through techs partially, ie 0.3 + 0.3 + 0.6 or through the final tech ie 0.0 + 0.0 + 1.0
  • Visual change only happens on whole numbers
  • Effect / spec improvements happen on partial upgrades, ie Interceptor Armour improvement by 0.5 will gain 50% of the spec benefit, even though a full level is not visible.
  • Improvements above 3.0 (maximum visual) are allowed but have no different effect than the 3.0 level
  • Examples:
    • Effect 500 would be for Infantry - Armour
    • Effect for Space Fighter, Engines would be 22*8 + 3 = 179 + 500
    • (Class 22, skip 8 elements each class, Engines is entry 3)

Affected Stats

Stored in CUpgradeComponents

class CUpgradeComponent {
	unsigned short	spottype[2];			// Spot type replacements if non-zero
	union { struct {		
	float			groundattackrange;
	float			airattackrange;
	float			surfaceattackrange;		// Also Ballistic Range
	float			subattackrange;			// Also Beam Range
	float			groundattack;
	float			airattack;
	float			navalattack;			// Also Ballistic Attack
	float			subattack;				// Also Beam Attack
	float			grounddefense;			// Also Hull defense
	float			tacairdefense;			// Also Shield defense
	float			indirectdefense;
	float			closedefense;
	float			stealth;
	float			speed;
	float			cargocap;
	float			crew;
	float			fuelcap;
	float			fueluse;
	float			ammocap;
	float			ammouse;
	float			buildspeed;
	float			weight;
	float			carriercap;
	float			initiative;
	float			ugreserved[2];
	}; float upgradecomp[NUMUGCOMPS]; };	// Modifier values (or replacement if bitmask bit set)
	DWORD			ugcompreplacevaluemask;	// BITMASK of columns that are REPLACEMENT values and not modifier values
	DWORD			ugreserveddw[2];
};

&& UPGRADECOMPONENT classnum

1-24 : UpgradeComponent class for each upgrade level (0 not used)

  • 5 Modules (0 to 4), 3 upgrades levels each (supporting 1/2/3)
  • 3 more modules not used (5/6/7), reserved

Each value is a modifier of the original value, similar to tech effects.

  • 0.0 would be unchanged; 0.5 would be "increase by 50%"; -0.5 would be "reduce by 50%"
  • If an original Air Attack Range value was 24, and the UpgradeComponent column was 0.5, then the new Air Attack Range would be 36 (ie x 1.5)

There is a BITMASK final column that indicates if the value should replace the original instead of being a modifier.

  • If the BITMASK value is 10 (8 + 2), then columns Air Attack range and Sub attack range would replace any existing spec.
  • If the original Air Attack value was 24, and the UpgradeComponent column was 30 with a BITMASK set, then the new Air Attack would be 30.
  • The Replace Bit is not supported for ground/air/naval (ballistic/beam) attack values. Only modifiers allowed for those values.

Implementation:

  • See Default Picnums
  • Base Hull is always single object (submesh) - submesh # 0
  • Upgrades can ADD (cumulative) or REPLACE (previous upgrades) on Base Hull object mesh - using OptionOb flag (if set T, then replace)
  • Upgrade Level Calculation Example:
    • Faction has researched three techs with Tech Effect 679 - effect values are 0.4, 0.5, 0.7
    • Effect number 679 minus 500 (base for subsystem upgrades) = 179
    • This is in section for class number 22, Space Fighter (22*8 = 176, start of upgrade effects for class 22, eight modules per class supported)
    • This is upgrade module 3 (179-176). Per Module chart above, this is the entry for Engines.
    • Total effect value is 1.6 (0.4+0.5+0.7). This means the Upgrade Level to be used is level 1 (zero is base unit). Partial levels are ignored.
  • Unit Stat Upgrades Example:
    • Values to upgrade stats are UPGRADECOMPONENT line 3 * 3 + 1 = 10 (upgrade module 3 for engines, times 3 levels per module, plus level 1 for current Upgrade Level)
    • This will be a stats/specs upgrade using the value in the UPGRADECOMPONENT array
      • If value "speed" in the array of specs is 0.2 (20% boost), and the unit's base speed is 50, then the upgraded speed is 50 * (1.0 + 0.2) = 60
      • If value "ammouse" in the array of specs is -0.15 (15% reduction), and the unit's base ammo use is 20, then the upgraded ammo use is 20 * (1.0 - 0.15) = 17
      • Upgrade values are not cumulative - at Level 1 the unit will receive Level 1 stat adjustments, at Level 2 the unit will only receive Level 2 adjustments.
      • No Partial stat upgrades are done - if the the total upgrade tech effect is 1.6, then Level 1 stats are used. Total upgrade tech effect of 0.9 results in no stat changes (base only)
      • If the BITMASK value includes the set bit for the column, then a REPLACEMENT value is used instead of a multiplier.
        • Again, replacement values are not cumulative. If both level 2 and level 3 are intended to have a replacement value of '30' for a column, then they both must include the '30' value and the set bitmask value.
    • This will be a visual upgrade to Level 1 on the unit mesh
    • Unit Mesh Picnum will be drawn with Base Hull mesh, and with SubMesh of Meshtype 43 (first engine level upgrade - module 3 for engines, times 3 levels per module, plus 34 for base submodules Meshtype)

UpgradeComponent.csv Definitions

  • Column A is the ID for the upgrade type
    • 1 - Armor Level 1
    • 2 - Armor Level 2
    • 3 - Armor Level 3
    • 4 - Command Level 1
    • 5 - Command Level 2
    • (etc. through Armor, Command, Cargo, Engines, Weapons
  • Rows begging at B are values for upgrades
    • B - Spotting Type 1 - Replaces Spotting Type 1 if not zero
    • C - Spotting Type 2 - Replaces Spotting Type 2 if not zero
    • D - Ground Attack Range (bitmask 1)
    • E - Air Attack Range (bitmask 2)
    • F - Surface Attack Range (also Ballistic Attack Range) (bitmask 4)
    • G - Submarine Attack Range (also Beam Attack Range) (bitmask 8)
    • H - Ground Attack (bitmask 16)
    • I - Air Attack (bitmask 32)
    • J - Surface Attack (also Ballistic Attack) (bitmask 64)
    • K - Submarine Attack (also Beam Attack) (bitmask 128)
    • L - Ground Defense (also Hull Defense) (bitmask 256)
    • M - Tactical Air Defense (also Shield Defense) (bitmask 512)
    • N - Indirect Air Defense (bitmask 1024)
    • O - Close Combat Defense (bitmask 2048)
    • P - Stealth (bitmask 4096)
    • Q - Speed ((bitmask 8192)
    • R - Cargo Capacity (bitmask 16384)
    • S - Crew (bitmask 32768)
    • T - Fuel Capacity (bitmask 65536)
    • U - Fuel Usage (bitmask 131,072)
    • V - Ammo Capacity (bitmask 262144)
    • W - Ammo Usage (bitmask 524288)
    • X - Build Speed (bitmask 1048576)
    • Y - Weight (bitmask 2097152)
    • Z - Carrier Capacity (bitmask 4194304)
    • AA - Initiative (bitmask 8388608)
    • AB - Future Spec 1
    • AC - Future Spec 2
    • AD - BITMASK to indicate if values D to AA are REPLACEMENT values instead of multipliers
Advertisement