-
Notifications
You must be signed in to change notification settings - Fork 16
Home
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...
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.
(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.)
At first sight, they seem to be clumped together but the order is somewhat messed up.
Known positions:
21 Suppression22 Shredder Rocket24 Grenadier25 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_OnlyForGermanModeStrings_ItemRangeBonus | ||
108 | ePerk_OnlyForGermanModeStrings_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_OnlyForGermanModeStrings_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.
(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...