forked from Majiir/Subsystem
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpatch.example.json
More file actions
110 lines (101 loc) · 5.1 KB
/
Copy pathpatch.example.json
File metadata and controls
110 lines (101 loc) · 5.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// Subsystem example patch. Copy to "Deserts of Kharak/Data/patch.json".
//
// Comments are fine -- the game's JSON parser skips // and /* */. A trailing comma is not:
// it throws, and one throw anywhere discards the WHOLE file. So does one misspelled key.
// Run SubsystemLint before you launch and it will tell you which.
//
// Names are case-sensitive and come from Data/Subsystem.entities.log, which the mod rewrites
// on every game start from what your install actually loaded. Campaign and multiplayer are
// separate entity types: C_HAC in the campaign, C_HAC_MP in skirmish and multiplayer.
{
// ---------------------------------------------------------------------------------------
// Entities -- patches the shared unit templates. Applies to EVERY player fielding the unit.
// Reaches every property Subsystem knows about. See docs/patch-reference.md.
// ---------------------------------------------------------------------------------------
"Entities": {
"G_Baserunner_MP": {
"UnitAttributes": {
"MaxHealth": 9999
}
},
"C_Escort_MP": {
// Weapons here are keyed by the weapon COMPONENT name, as printed in the entity dump.
// Commander buffs below key on something else -- see the note there.
"WeaponAttributes": {
"C_Escort_Weapon_G2G_MP": {
"BaseDamagePerRound": 40
}
}
}
},
// ---------------------------------------------------------------------------------------
// Commanders -- changes that apply to ONE player's units and leave everyone else's alone.
// Uses the game's own attribute-buff system, the one research upgrades run on, so these
// survive loading a save. In exchange only the attributes the engine can buff are
// reachable; docs/patch-reference.md lists all of them.
//
// Keyed by commander ID, a number. Subsystem.log prints the roster at every match start:
//
// local commander: 1
// first enemy CPU commander: 3
// commander 1: COALITION (team 1)
// commander 3: SIIDIM (team 3)
//
// Key on that number, never on "whoever is playing" -- in multiplayer that would resolve
// differently on each machine and desync the game.
// ---------------------------------------------------------------------------------------
"Commanders": {
"1": {
"EntityTypeBuffs": {
"C_Escort_MP": {
// Buffs is an indexed list: keys "0", "1", "2", ... with no gaps.
// Mode is Add, AddPercent, Set or SetAndHold. Value is always a whole number, so
// express a fraction as a percentage: AddPercent -60 leaves you at x0.4.
"Buffs": {
"0": { "Attribute": "Unit_MaxHealth", "Mode": "Set", "Value": 5000 },
"1": { "Attribute": "Unit_DamageReceivedMultiplier", "Mode": "AddPercent", "Value": -60 },
"2": { "Attribute": "UnitDynamics_MaxSpeed", "Mode": "AddPercent", "Value": 25 },
// For weapon and range buffs, "Name" is the weapon's LOADOUT ID, which is not the
// component name the Entities section uses -- C_Escort_Weapon_G2G_MP has the ID
// "DEFAULT". The entity dump prints it as "weapon ID (for commander buffs)".
// Leave Name out to hit every weapon on the unit.
"3": { "Attribute": "UnitWeapon_BaseDamagePerRound", "Name": "DEFAULT", "Mode": "Set", "Value": 200 },
// A range band can only be buffed if the weapon already has it. Buffs cannot
// create one; the Entities section can.
"4": { "Attribute": "WeaponRange_DistanceLong", "Name": "DEFAULT", "Mode": "AddPercent", "Value": 50 }
}
},
// UseAsPrefix matches every entity type whose name starts with the key, so this is
// "every Coalition multiplayer unit". UnitClass narrows it further; omit for no filter.
"C_": {
"UseAsPrefix": true,
"UnitClass": "Air",
"ClassOperator": "Or",
"Buffs": {
"0": { "Attribute": "Unit_Armour", "Mode": "Add", "Value": 2 }
}
}
},
// Buffs can only tune an ability a unit already has. AddAbilities copies a whole one on,
// which is how you give a unit self-repair it does not ship with. "From" is the entity
// type name of the ability; the entity dump lists them all with what each one does.
//
// Only an ability with "targeting: Passive" fires by itself as the unit spawns. Anything
// else is added but never triggered, and Subsystem.log says so.
//
// Units already on the field keep the abilities they were built with, so this shows up on
// newly built units. Unlike buffs it is not saved with the game -- it is re-applied on
// every mission load, and an ability already present is never added twice.
"AddAbilities": {
"C_": {
"UseAsPrefix": true,
"Abilities": {
// 24 health/sec, permanent. SkipIfSelfHealing defaults to true, so units that
// already regenerate are left alone.
"0": { "From": "Ability_C_Battlecruiser_Regen", "SkipIfSelfHealing": true }
}
}
}
}
}
}