Skip to content
Erquint edited this page Jun 24, 2018 · 5 revisions

First Draft Disclaimer

I know this isn't much but we gotta start somewhere. Forgive my negligence to the appropriate writing style of wikis for now.
To clarify for anyone not used to wikis: the maintainer of this repo is @tracktwo, not me. Don't wanna come off as an impostor.
I, @Erquint, just wrote the first draft of this page here.
I don't know if this wiki is gonna take off at all, but if it does, anybody may have edited it down the line.
Maybe @tracktwo is gonna hate the idea and lock this down, let's wait and see...

Tools

So far I have mostly used online utilities as opposed to desktop ones.
I know desktop ones are often better and even these may not be the best out there, just something I used successfully

  • Diffchecker is suitable even without structural JSON parsing, since xcom2ndjson prints output in a line-friendly way.
    Simple and quick.
  • JSON Diff supports structural JSON parsing but takes ages to load if diffing the full save file.
    Not recommended for full-save diff-check.
    Also watch out for the actual structure of the output JSON, this tool like to reorder table elements.
    Arrays often end up above their implicit names.
  • Code Beautify JSON Viewer has a Tree Viewer option, which is useful for inspecting the JSON structure.
    It numbers the array positions — that may come in handy. But has to parse the structure so it takes a short while to process.
  • XCOM ToolBoks wasn't fully updated for EW. Do not use it for writing anything unless you play an older version of the game.
    It is suitable for read-only parsing of the save files though.

XCOM: Enemy Unknown

XCOM: Enemy Within

(May apply to other ones, confirmations required)

I was looking to respec a soldier. Basic class abilities specifically.
Both "name": "aAbilities" turned out to be red herrings.
(Perhaps a mistake due to be fixed unless the tags are taken straight out of the game)

"name": "aUpgrades", contained within each soldier profile ("class_name": "XComStrategyGame.XGStrategySoldier") contains the soldiers' abilities or "perks" as it is common to call them.
It's an integer array but, as far as I have seen, the values inside are coalesced booleans.
I believe this array contains swatches for all abilities in the game.
Of 172 positions, at most 48 (12nd per basic 4th classes) can correlate to basic abilities.
Once we know which those are — we can respec them by simply setting all of them to 0(false) too since the rank is stored separately.
Next step is to figure out array positions for varuous abilities.

Mayhap even make them parse out more descriptively in its own table as opposed to an array. Arrays aren't very handy to work with by hand...
(On a sidenote, I could start making a GUI for it since @tracktwo isn't doing it yet. Don't expect much though.)

Array positions for abilities

At first sight, they seem to be clumped together but the order is somewhat messed up.

Known positions:

  • 21 Suppression
  • 22 Shredder Rocket
  • 24 Grenadier
  • 25 Danger Zone

Turns out this array is already partly documented here at least in terms of offsets.
Here it is with decimal positions only and ingame correlations for basic classes filled in:

Decimal Internal name Ingame name Ingame designation
0 ePerk_None
1 ePerk_OTS_XP
2 ePerk_PrecisionShot Headshot (Sniper 1st only option)
3 ePerk_SquadSight Squadsight (Sniper 2nd right option)
4 ePerk_GeneMod_SecondHeart
5 ePerk_LowProfile Low Profile (Sniper 6th only option)
6 ePerk_RunAndGun Run & Gun (Assault 1st only option)
7 ePerk_AutopsyRequired
8 ePerk_BattleScanner Battle Scanner (Sniper 4th right option)
9 ePerk_DisablingShot Disabling Shot (Sniper 4th left option)
10 ePerk_Opportunist Opportunist (Sniper 5th right option)
11 ePerk_Executioner Executioner (Sniper 5th left option)
12 ePerk_OTS_Leader
13 ePerk_DoubleTap Double Tap (Sniper 7th right option)
14 ePerk_InTheZone In The Zone (Sniper 7th left option)
15 ePerk_DamnGoodGround Damn Good Ground (Sniper 3rd right option)
16 ePerk_SnapShot Snap Shot (Sniper 2nd left option)
17 ePerk_WillToSurvive Will to Survive (Heavy 6th only option)
18 ePerk_FireRocket Fire Rocket (Heavy 1st only option)
19 ePerk_TracerBeams Holo-Targeting (Heavy 2nd right option)
20 ePerk_GeneMod_Adrenal
21 ePerk_FocusedSuppression Suppression (Heavy 3rd right option)
22 ePerk_ShredderRocket Shredder Rocket (Heavy 3rd left option)
23 ePerk_RapidReaction Rapid Reaction (Heavy 4th right option)
24 ePerk_Grenadier Grenadier (Heavy 5th left option)
25 ePerk_DangerZone Danger Zone (Heavy 5th right option)
26 ePerk_BulletSwarm Bullet Swarm (Heavy 2nd left option)
27 ePerk_ExtraConditioning Extra Conditioning (Assault 6th only option)
28 ePerk_GeneMod_BrainDamping
29 ePerk_GeneMod_BrainFeedback
30 ePerk_GeneMod_Pupils
31 ePerk_Sprinter Sprinter (Support 2nd left option)
32 ePerk_Aggression Aggression (Assault 2nd right option)
33 ePerk_TacticalSense Tactical Sense (Assault 2nd left option)
34 ePerk_CloseAndPersonal Close and Personal (Assault 3rd right option)
35 ePerk_LightningReflexes Lightning Reflexes (Assault 3rd left option)
36 ePerk_RapidFire Rapid Fire (Assault 4th right option)
37 ePerk_Flush Flush (Assault 4th left option)
38 ePerk_GeneMod_DepthPerception
39 ePerk_BringEmOn Bring'Em On (Assault 5th right option)
40 ePerk_CloseCombatSpecialist Close Combat Specialist (Assault 5th left option)
41 ePerk_KillerInstinct Killer Instinct (Assault 7th right option)
42 ePerk_GeneMod_BioelectricSkin
43 ePerk_Resilience Resilence (Assault 7th left option)
44 ePerk_SmokeBomb Smoke Grenade (Support 1st only option)
45 ePerk_GeneMod_BoneMarrow
46 ePerk_StunImmune
47 ePerk_CoveringFire Covering Fire (Support 2nd right option)
48 ePerk_FieldMedic Field Medic (Support 3rd left option)
49 ePerk_RifleSuppression_DEPRECATED Rifle Suppression (Support 4th right option)
50 ePerk_GeneMod_MuscleFiber
51 ePerk_CombatDrugs Combat Drugs (Support 5th right option)
52 ePerk_DenseSmoke Dense Smoke (Support 5th left option)
53 ePerk_DeepPockets Deep Pockets (Support 6th only option)
54 ePerk_Sentinel Sentinel (Support 7th right option)
55 ePerk_Savior Savior (Support 7th left option)
56 ePerk_Revive Revive (Support 4th left option)
57 ePerk_HeightAdvantage
58 ePerk_Disabled_DEPRECATED
59 ePerk_ImmuneToDisable_DEPRECATED
60 ePerk_SuppressedActive
61 ePerk_CriticallyWounded
62 ePerk_Flying
63 ePerk_Stealth
64 ePerk_Poisoned
65 ePerk_CombatStimActive
66 ePerk_Implanted
67 ePerk_Panicked
68 ePerk_MindFray
69 ePerk_PsiPanic
70 ePerk_PsiInspiration
71 ePerk_MindControl
72 ePerk_TelekineticField
73 ePerk_Rift
74 ePerk_MindMerge
75 ePerk_MindMerger
76 ePerk_Hardened
77 ePerk_GreaterMindMerge
78 ePerk_GreaterMindMerger
79 ePerk_Evade
80 ePerk_Launch
81 ePerk_Bombard
82 ePerk_Leap
83 ePerk_Plague
84 ePerk_Poison
85 ePerk_BloodCall
86 ePerk_Intimidate
87 ePerk_FallenComrades
88 ePerk_Bloodlust
89 ePerk_BullRush
90 ePerk_HEATAmmo HEAT Ammo (Heavy 4th left option)
91 ePerk_SmokeAndMirrors Smoke and Mirrors (Support 3rd right option)
92 ePerk_Rocketeer Rocketeer (Heavy 7th left option)
93 ePerk_Mayhem Mayhem (Heavy 7th right option)
94 ePerk_Gunslinger Gunslinger (Sniper 3rd left option)
95 ePerk_GeneMod_MimeticSkin
96 ePerk_ClusterBomb
97 ePerk_PsiLance
98 ePerk_DeathBlossom
99 ePerk_Overload
100 ePerk_PsiControl
101 ePerk_PsiDrain
102 ePerk_Repair
103 ePerk_CannonFire
104 ePerk_Implant
105 ePerk_ChryssalidSpawn
106 ePerk_BattleFatigue
107 ePerk_OnlyForGermanMode­Strings_ItemRangeBonus
108 ePerk_OnlyForGermanMode­Strings_ItemRangePenalty
109 ePerk_Foundry_Scope
110 ePerk_Foundry_PistolI
111 ePerk_Foundry_PistolII
112 ePerk_Foundry_PistolIII
113 ePerk_Foundry_AmmoConservation
114 ePerk_Foundry_AdvancedFlight
115 ePerk_Foundry_ArcThrowerII
116 ePerk_Foundry_MedikitII
117 ePerk_Foundry_CaptureDrone
118 ePerk_Foundry_SHIVHeal
119 ePerk_Foundry_SHIVSuppression
120 ePerk_Foundry_EleriumFuel
121 ePerk_Foundry_MECCloseCombat
122 ePerk_Foundry_AdvancedServomotors
123 ePerk_Foundry_ShapedArmor
124 ePerk_Foundry_SentinelDrone
125 ePerk_Foundry_AlienGrenades
126 ePerk_PlasmaBarrage
127 ePerk_SeekerStealth
128 ePerk_StealthGrenade
129 ePerk_ReaperRounds
130 ePerk_Disoriented
131 ePerk_Barrage
132 ePerk_AutoThreatAssessment
133 ePerk_AdvancedFireControl
134 ePerk_DamageControl
135 ePerk_XenobiologyOverlays
136 ePerk_OneForAll
137 ePerk_JetbootModule
138 ePerk_ExpandedStorage
139 ePerk_RepairServos
140 ePerk_Overdrive
141 ePerk_PlatformStability
142 ePerk_AbsorptionFields
143 ePerk_ShockAbsorbentArmor
144 ePerk_ReactiveTargetingSensors
145 ePerk_BodyShield
146 ePerk_DistortionField
147 ePerk_GeneMod_AdrenalineSurge
148 ePerk_GeneMod_IronSkin
149 ePerk_GeneMod_RegenPheromones
150 ePerk_CovertPockets
151 ePerk_CovertHacker
152 ePerk_Medal_UrbanA
153 ePerk_Medal_UrbanB
154 ePerk_Medal_DefenderA
155 ePerk_Medal_DefenderB
156 ePerk_Medal_InternationalA
157 ePerk_Medal_InternationalB
158 ePerk_Medal_CouncilA
159 ePerk_Medal_CouncilB
160 ePerk_Medal_TerraA
161 ePerk_Medal_TerraB
162 ePerk_Dazed
163 ePerk_OnlyForGermanMode­Strings_AimingAnglesBonus
164 ePerk_CatchingBreath
165 ePerk_Foundry_TacticalRigging
166 ePerk_SeekerStrangle
167 ePerk_ReinforcedArmor
168 ePerk_MindMerge_Mechtoid
169 ePerk_Electropulse
170 ePerk_OTS_Leader_Bonus
171 ePerk_OTS_Leader_TheLeader
172 ePerk_MAX

Thus, to fully respec a base class character, you only need to reset these positions of their aUpgrades array to 0:

  • Sniper 2, 3, 5, 8-11, 13-16, 94.
  • Assault 6, 27, 32-37, 39-41, 43.
  • Heavy 17-20, 21-26, 90, 92, 93.
  • Support 31, 44, 47-49, 51-56, 91.

XCOM 2

Unknown

(Not to be confused with XCOM: Enemy Unknown)

@shaygover forked this project's code and seems to have tried to start collecting this kind of info on his own here but haven't designated which game this info pertains to if it even matters...