Category Archives: Essays

This is a very boring name for me writing about the stuff that’s on my mind. I strive to make the essays more interesting than the word “essays” and this description.

XCOM 2: The Legendary Super-Squad Mods

I promised I’d document my XCOM 2 tweaks. My goal, as stated elsewhere, was to create a “casual mode” for taking on Legendary levels of enemies in XCOM 2. It’s not the same as playing on “Rookie” difficulty, because in Rookie mode the enemies go easy on you (there’s a limit to how many will fire on you in a given round,) and the random number generator will start erring in your  favor if you really take a beating.

I wanted lots of tough, smart enemies, and I did not want them to back off if I screwed up. But I still wanted to be able to enjoy myself.

This is going to be much longer than most of my posts. Here we go!

This whole project¹ takes place in the Config folder for XCOM 2. On my machine it’s at C:\Program Files (x86)\Steam\steamapps\common\XCOM 2\XComGame\Config

This folder has around 40 files in it (as of now, anyway. More may be coming.) The key files for me were these:

  • DefaultClassData.ini—I tweaked HP, Hack, and Offense gains for each character class
  • DefaultGameData.ini—boosted the squad size
  • DefaultGameData_CharacterStats.ini—lots of small boosts for characters here
  • DefaultGameData_SoldierSkills.ini—reduced cooldown a little for the really neat stuff.
  • DefaultGameData_WeaponData.ini—lots of tweaks here. Lots.
  • DefaultGameData_XpData.ini—Reduced XP required to level up.

The very first thing I did was to duplicate the entire Config folder, and call the duplicate folder called “Config.bak.” That way if I broke anything, I could just swap the folders out and put the whole game back the way it was.

Ch-ch-ch-changes

Here are the changes I made. I’ve organized them by file, and while I have not listed every last modification I made, I’ve provided specific examples of each change so that even the most timid among us can confidently mod their game.

DefaultClassData.ini

I made lots of little changes here in order to make promotions give just a little bit more to the soldiers. The file has sections for each of the character classes (Ranger, Sharpshooter, Specialist, Grenadier,) and is further divided by each promotion they get. Here is the section that defines the various things a Ranger gets when becoming a squaddie:

; squaddie
SoldierRanks=( aAbilityTree=( (AbilityName="SwordSlice", ApplyToWeaponSlot=eInvSlot_SecondaryWeapon) \\
 ), \\
 aStatProgression=((StatType=eStat_Offense,StatAmount=3), (StatType=eStat_HP,StatAmount=1), (StatType=eStat_Strength,StatAmount=0), (StatType=eStat_Hacking,StatAmount=0), (StatType=eStat_CombatSims,StatAmount=1)),\\

The bolded line is where I made my change: I changed StatAmount=3 to StatAmount=4. The promoted Ranger gets a little bit more aim.

I boosted the Offense promotions for my Rangers and Sharpshooters, and gave my Specialists better Hacking bonuses.

This is where a Specialist is promoted to Corporal.

; corporal
SoldierRanks=( aAbilityTree=( (AbilityName="MedicalProtocol", ApplyToWeaponSlot=eInvSlot_SecondaryWeapon), \\
 (AbilityName="CombatProtocol", ApplyToWeaponSlot=eInvSlot_SecondaryWeapon) \\
 ), \\
 aStatProgression=((StatType=eStat_Offense,StatAmount=3), (StatType=eStat_HP,StatAmount=1), (StatType=eStat_Strength,StatAmount=0), (StatType=eStat_Hacking,StatAmount=5), (StatType=eStat_CombatSims,StatAmount=0)),\\

I changed the bolded text so StatAmount=5 was StatAmount=10. I did this for each promotion, because the vanilla specialist, even fully tricked out, was never better than a bad crapshoot for the cool stuff. It was almost *always* a better idea to have the Specialist shoot than hack. With this tweak I turned my Specialists into hackers. Good times!

DefaultGameData.ini

This one eventually required an outside mod¹ because of interface problems. The MaxSoldiersOnMission line starts like this.

m_iMaxSoldiersOnMission=4

I made it look like this:

m_iMaxSoldiersOnMission=6

This meant I began the game with 6 soldiers instead of four. Once I bought squad size upgrades I was taking eight soldiers on each mission.

The additional two soldiers, #7 and #8, were auto-filled for me from the top of my soldier list, because the interface didn’t actually let me edit those two slots. I later installed the “Max Squad Size Fix” mod¹, which changed the UI, allowing me to choose everybody who came along (and their loadout.)

This change, more than any of the others, made the biggest difference for me. I was still always outnumbered, but after I bought the squad size upgrades I could treat my crew as two fire teams of four, and that was wonderful.

DefaultGameData_CharacterStats.ini

This was my second most important adjustment. I boosted the starting character stats so that rookies weren’t worthless, and so that flanking somebody made a real difference. The bold lines are the ones I wanted to change:

[Soldier X2CharacterTemplate]
CharacterBaseStats[eStat_HP]=5
CharacterBaseStats[eStat_Offense]=65
CharacterBaseStats[eStat_Defense]=0
CharacterBaseStats[eStat_Mobility]=12
CharacterBaseStats[eStat_SightRadius]=27
CharacterBaseStats[eStat_Will]=40
CharacterBaseStats[eStat_PsiOffense]=0
CharacterBaseStats[eStat_FlightFuel]=0
CharacterBaseStats[eStat_UtilityItems]=1
CharacterBaseStats[eStat_AlertLevel]=2
CharacterBaseStats[eStat_BackpackSize]=3
CharacterBaseStats[eStat_Hacking]=5
CharacterBaseStats[eStat_CritChance]=0
CharacterBaseStats[eStat_CombatSims]=0
CharacterBaseStats[eStat_HighCoverConcealment]=1
CharacterBaseStats[eStat_Strength]=0
CharacterBaseStats[eStat_FlankingCritChance]=50
CharacterBaseStats[eStat_FlankingAimBonus]=0
CharacterBaseStats[eStat_DetectionRadius]=9

Offense went to 75, Mobility went up by one to 13, Sight radius went to 29, and Flanking Aim Bonus went to 20.

Aim a little better, run a little faster, see a little further, and now it’s worth getting out there and flanking somebody.

I did not boost their HP. If I screwed up, I wanted to pay for it. Obviously I could have pushed all their abilities through the roof, but that would have sucked quite a bit of the fun out of the game for me.

DefaultGameData_SoldierSkills.ini

Cooldown was all I messed with here. Many missions didn’t run long enough for a soldier to get to use their high-level abilities more than once. Here’s the Sharpshooter section:

[XComGame.X2Ability_SharpshooterAbilitySet]
HITWHEREITHURTS_CRIT=10
STEADYHANDS_AIM_BONUS=10
STEADYHANDS_CRIT_BONUS=10
DEADEYE_COOLDOWN=3
DEADEYE_AIM_MULTIPLIER=0.25f
FACEOFF_COOLDOWN=4
FANFIRE_COOLDOWN=4
KILLZONE_COOLDOWN=4
SERIAL_COOLDOWN=5
SHARPSHOOTERAIM_BONUS=20

The bolded lines all got reduced to 3. My Sharpshooters got to be awesome more often, and I was more likely to use an ability early in a mission. I still had to wait to use it again, but I was less likely to get killed, or have a mission timer run out, while waiting.

If you dig through this file you’ll see that you can boost lots more than just cooldown times. Your grenadiers might not want an aim penalty for using Chain Shot, for instance. (Upon further consideration, I know your grenadiers don’t want that aim penalty. The question is whether you want it.)

DefaultGameData_WeaponData.ini

This is where I made the most changes. It’s also where I broke the game balance completely, and then backed off a bit and un-broke it.

Consider the section for the Assault Rifle:

AssaultRifle_Conventional_BaseDamage=(Damage=4, Spread=1, PlusOne=0, Crit=2, Pierce=0, Shred=0, Tag="", DamageType="Projectile_Conventional")
AssaultRifle_Magnetic_BaseDamage=(Damage=6, Spread=1, PlusOne=0, Crit=3, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagXCom")
AssaultRifle_Beam_BaseDamage=(Damage=8, Spread=1, PlusOne=0, Crit=4, Pierce=0, Shred=0, Tag="", DamageType="Projectile_BeamXCom")

I added 2 to each of the “Damage” values, and increased the Spread from 1 to 2. Now instead of doing 3-5 damage the conventional assault rifle did 4-8.  Sectoids and Officers still required two hits, but never needed three (far fewer “oh geez why won’t you die” moments.)

In my first pass I added 3 to each value, and that was too much, because far too many things could be killed with a single shot.

There’s a section like this for each of the weapons. Here’s some help with the terms, should you need it:

  • Damage: starting damage roll
  • Spread: random number to add or subtract from the roll
  • PlusOne: I don’t know, so I left it alone
  • Crit: Amount of damage to add if it’s a crit
  • Pierce: Amount of armor to ignore on a hit
  • Shred: Amount of armor to destroy on a hit

The place where I went a little crazy with no regrets was in the section for the Ranger Sword. At the top of the tech tree (“Beam”) I had doubled the damage, doubled the crit, and given it three points of Pierce. Why? Because I wanted the occasional opportunity to play Jedi Knight with the Reaper ability. SUCH FUN. Risky, too, but there wasn’t a 95% chance my Ranger would accomplish nothing and then die.

I watched part of a Twitch run where the player expressed the desire to do exactly that, and wished aloud for just such a mod. It’s a simple text edit on three lines of human-readable code.

Deeper in the file there’s a section labeled like this:

; ***** Core properties and variables for XCom weapons *****

Here you can give weapons an aiming bonus, a larger magazine size (it says “iClipSize” but we know it’s a mag), and change how much environment damage it does. I added one round to everybody’s mags, gave the sniper rifles an aiming bonus, and added some hack bonus to the gremlins. These are all pretty easy to find.

Still further in the same file, look for this:

; ***** Grenade Damage Arrays *****

And then lines like these:

FragGrenade_BaseDamage = (Damage=3, Spread = 0, PlusOne = 20, Crit = 0, Pierce = 0, Shred=1, Tag = "", DamageType="Explosion")

I bumped up the damage by two points, and the spread by one. Grenades could actually kill things, instead of just removing some cover, but they weren’t truly dependable.

Of course, I wanted to have more of them. Look for this block, and note the line I’ve bolded:

FragGrenade_iSoundRange = 30
FragGrenade_iEnvironmentDamage = 10
FragGrenade_iSupplies = 100
FragGrenade_TradingPostValue = 23
FragGrenade_iPoints = 0
FragGrenade_iClipSize = 1
FragGrenade_Range = 10
FragGrenade_Radius = 3

Maybe grenades actually DO come in an open-topped clip. Who knows? Whatever they come in, I edited this line so that now they come in twos.

This edit can be done with every grenade type. It makes grenadiers able to actually launch a crap-ton of grenades and be useful, rather than launching two and then wondering why they’re called “grenadiers” instead of “wildly inaccurate bullet-hoses.”

DefaultGameData_XpData.ini

Here’s the last set. I made changes here because I wanted to level up multiple soldiers and experiment with their ability trees. That’s pretty tedious with the defaults. Since I was playing on Legend (where there are lots of smart enemies) I edited this block:

; Legend difficulty
PerDifficultyConfig[3]=( \\
 RequiredKills[0]=0, \\
 RequiredKills[1]=1, \\
 RequiredKills[2]=8, \\
 RequiredKills[3]=18, \\
 RequiredKills[4]=40, \\
 RequiredKills[5]=70, \\
 RequiredKills[6]=110, \\
 RequiredKills[7]=175)

All I did was reduce each number by a little less than half. 1, 5, 12, 25, 50, 75, and 100 were the numbers I used. Lots more leveling up, and lots more experimentation with builds.

And that’s it

Those are the files I changed, and while I haven’t listed all of my changes in detail, I think I’ve provided enough information here that folks who would otherwise be afraid to dig into the INI files will be able to modify XCOM 2 in ways that make it more like whatever it is they actually feel like playing.

I have exactly zero desire to roll the settings back to their defaults and attempt Legendary mode. I’ve played that game, and it feels too much like a very miserable job, with rare moments of joy, and a high probability of getting fired. I understand that there are people who really dig that, but I’m not one of those people.

And I’m glad I don’t have to be in order to enjoy this game.

¹The “Max Squad Size Fix” mod is found here, if you’re a Steam user, and it lives here on Nexus. It’s possible that it will not be required in later iterations of XCOM 2. I cannot vouch for its stability or support, but I’m still using it as of this writing, and it has a 5/5 star rating from the user community.

How about 36?

The folks who say “oh, that means you’re only…” when they find out someone is born on Leap Day probably are not TRYING to be mean, but let’s think about this for a moment. Calling an 8-year-old “two” is kind of hurtful, because they’re finally coming into the full flush of sapience, and are now being told they’re a toddler. Calling a 12-year-old  “three” is rotten, because they get accused of being babies any time they complain about something. And calling a 16-year-old “four” is simply bad form because calling a 16-year-old anything is like shooting depressed, teenaged fish in a barrel.

By the time the “oh, that means you’re only…” ends in a double-digit number, the leaper in question is forty, and has literally heard this same exact observation thousands of times. And while it shouldn’t matter to a forty-year-old (or, in my case, a forty-eight-year-old,) there is this buzzing noise at the subconscious level that tries to remind them of the times this happened when it felt like it did matter, but since the unexamined life is pretty common, all the subconscious can affect is an eye-roll and an oddly disconnected sense of unease.

Of course, by the time leapers are forty-eight, fifty-two, or seventy-six, folks are saying “it must be nice to only be…”, which is both terribly unoriginal, and mostly inaccurate. If I could go back to being 12, I would not, and not just because every time I complained about something, somebody told me I was being a baby. I *like* being an adult. It has all kinds of perks, not least of which is a measure of power that allows me to address a great many of the matters about which I used to helplessly wail while throwing food and crying.

In this vein, I think we should consider something a little fresher for adult leapers: instead of saying that only one in four of their birthdays counts toward their age, let’s treat February 29th as a non-day of sorts, and only count the years that do NOT have a leap-day in them.

Would I go back to being 36? Hmmm… that’s actually tempting. I’d be young enough to eat richer foods, and old enough to know better than to throw them.

I Would Actually Pay Real Money

Remember those Facebook hoax-posts in which people would decry Facebook’s plan to charge its users a membership fee? There’d be some misdirected outrage, and then someone would clear things up by saying “no, Facebook is not planning to do that.”

I wish they HAD been planning to do that.

Facebook’s actual plans were far more problematic. At a high level, the plan was to monetize their user base as a product, rather than as customers. This meant selling the product to OTHER customers—advertisers and market research firms, for starters. I don’t mind being advertised to, but in order for the monetization to work, Facebook had to step into our feeds and adjust the content we were seeing.

Facebook became less useful to us, and this loss of utility was hidden much of the time. When we actually noticed it, it was status quo.

Twitter is doing similar things to monetize their user base. The insertion of Promoted Tweets is the most immediately intrusive, but recently they’ve begun mucking with our timelines in order to adjust the content we see.

Look, I get it. These companies are providing an exceptionally valuable communication service to hundreds of millions of users. They deserve to be paid for that. The question is, what’s the best way to pay them? What will make them the most money, while keeping their users not just happy, but loyal?

Twitter’s 2014 revenue was $1.4B. They have over 900 million users, but most of those users do not tweet things. If we assume, conservatively, that there are only 100 million human beings actively using Twitter’s service, they were worth $14 each during 2014. Much of that money was paid in by advertisers.

$14 isn’t much. It’s less than $1.20 per month. I would cheerfully round up, and pay $20 for an annual Twitter membership without batting an eyelash.

For that money I would obviously expect to NOT be monetized further. Don’t market to me, don’t promote Tweets, don’t mess with my feeds. Maybe give me instead some cool tools that let me better manage this awesome communications tool.

If those 100 million users were willing to pay $20/year for “Twitter Prime,” Twitter’s revenues would be $2B. It’s not beyond the pale to further assume that their profit margins would be better, since all the overhead that goes into making a useful advertising engine could be dust-binned. Additionally, Twitter would become far more valuable to its users (who are now CUSTOMERS,) and they’d attract more paying users pretty quickly.

In the grand scope of Big Business and All Things Internet, two billion dollars is chump change. That money would not turn Twitter into a financial powerhouse. Of course, neither will their current plans, so “displace Google” is a business goal that should be swept off the table.

Ultimately, the social media business model needs to change. Consumers of social media should be able to become customers, not by purchasing “eyeballs,” “likes,” or “followers,” but by purchasing better access to the actual social media services; services that would better serve those who use it.

I cannot conceive this discussion NOT having taken place somewhere in Twitter’s offices. What I don’t understand is the business requirements that shut that discussion down, preventing them from selling me a decent service.

Be Thankful for Thread

I am a very thankful person.

That’s not the same thing as saying I’m fortunate, or blessed, or glad some of these crazy dreams of mine have panned out. I’m all of those things, too, but being those things isn’t the same as being thankful.

Thankful suggests that I’m a person who is ready to acknowledge the work of others in making my own life better. Thankful means drilling down on good fortune, blessings, and gladness, and looking for the specific places where my indebtedness can be enumerated.

As a religious person, I’m always thanking God for things. But as a thankful person, I am mindful of the fact that God’s hand in my life has been manifest through the hands of countless flesh-and-blood, Earth-walking folks; people who deserve better than to have their good works chalked up to a God in whom they may or may not believe.

One of Sandra’s “minions,” a man who now carries the Hypernode Media Corps of Volunteers challenge coin (“running with scissors for no money since 2006,”) built a computer for me earlier this year. When it began blue-screening, he came to my home and troubleshot the problem using tools and methods I understood, but never would have figured out on my own.

The cascading levels of good fortune, gladness, and gratitude in this particular circumstance run for quite a while. I’m thankful that Chad helped me. Chad and I were both thankful that the problem was a single, easily-to-replace component, rather than the Mother of Boards. That was literally a “thank God” moment, but thousands of engineers, technicians, scientists, rare-earth-metal miners, and others stand in that chain and get credit for having built a Mother of Boards that did not fail.

I’m thankful that thousands of Schlock Mercenary readers have spent money on books, challenge coins, and impending role-playing-games, allowing me to afford tools like the one Chad built, and repaired. I’m thankful that their support has been generous enough that when Chad said he did not want to be paid for his time, I was able to insist, telling him that at this moment, that small sum would probably work harder for him than it would for me.

This in turn means that I’m thankful that my generous readers are gainfully employed, and have discretionary income. Without the people who pay them for the work they do, my own work couldn’t continue.

So… an 8gb PNY DDR3 memory stick fails, and now I’m feeling indebted to literally millions of people? A few phrases leap to mind as possible punch-lines:

  • “That way lies madness.”
  • “It’s turtles all the way down.”
  • “If you keep pulling on that thread, you are going to have to find a way to be thankful for not having a sweater anymore.”

Gratitude is mind-opening, heart-expanding exercise in which you can examine a single thing for which you are thankful,  grab hold of that thread, and follow it all the way down. Follow the turtles past the madness, and unravel the whole sweater in order to understand how very many people in your life deserve a “thank you.”

I say “you” here because this Thanksgiving I want you to try this with me (if you’re not celebrating Thanksgiving, it’s even easier, because you won’t be distracted by mountains of food topped with pie.) Look beyond the grand, all encompassing “thank you” bucket. Pick one thing for which you are recently and intimately thankful. Hold tight to that thread, and pull.

It won’t destroy the sweater. It will show you how many other people are holding onto that same thread, and when you’ve acknowledged them, and perhaps even personally thanked them, the sweater will keep you warmer. And if it does unravel, hey, now you know who to talk to about getting another one.