This is a guest article contributed by bobo38, who is the main developer for TheCore Lite, regarding how we can test quality of life changes with SC2Mod.
After the recent post about the quality of life (QoL) changes in the 2018 yearly balance revamp, bobo38 made some insightful comments about the programming aspects regarding some of the commonly mentioned quality of life changes. We discussed more about this privately, and it quickly became clear that there is information asymmetry. Players make quality of life changes proposal based on their playing experience, but they often overlook the thinking process from a programming perspective.
The community can benefit from having a better understanding what the thinking process and technical requirements are for some of the commonly proposed changes. bobo38 designed a mod, and he will explain the programming aspects behind some changes. The rest of this article is written by him (i.e., I, me, and my refer to bobo38).
This article discusses two QoL changes that I feel are easy to manage for player customization:
- Marine subgroup priority to be the highest of all terran units so that stim could be activated without browsing subgroups (see reddit discussion).
- Widow mines button placement different than other transformers units that are confusing for Grid players (see reddit discussion).
While Blizzard had proposed and made many changes, we can facilitate discussion by focusing on those that can be addressed with a common “solution”. These two changes are selected for this reason and their generalisability to all races. Further, this approach allows us to bypass the usual process of getting certain degree of consensus in the community before testing can be done. As such, the two generic changes are as followed:
- any subgroup priority change
- any button reshuffling
These changes also set the foundation to allow players to test QoL changes themselves. I am going to demonstrate how we can add these changes through a SC2Mod. This article (part 1) will be dedicated to explore the existing game capabilities and get a first impression how these changes can be implemented within the system.
This article lays down the foundation for part 2 by showing the basics of what can be accomplished with a SC2Mod. I will prepare an follow-up article, to be published in November. It will expose some sort of practical amateur high level software design ideas: a rough thinking about implementation choices, pro/cons, perceived issues and community impact. In that article, Max and I discuss the implementations and implications.
Test of QoL changes feasibility through a SC2Mod
Starcraft II comes with a map editor that contains a data driven engine. Multiplayer, campaigns and coop are using different sets of game data. New maps and arcade games are produced using same game data structure. Units or tech tree changes could be packed into a SC2Mod and applied on top of any maps. Users can make big and small changes with it, for example, an entire new race can be created or Marine can be modified to be giant and quick like in the “OP MARINES”.
This is exactly the type of tool we need to investigate our two QoL changes. A map editor rookie like me is able to create a SC2Mods called “Marine Test Subgroup Prio” and publish it in a matter of hours. Here is a screenshot of the result showing both marine subgroup priority and widow mine buttons changes.
I thanks ApeironGaming, mod of r/starcraft2, and TheSkunk for their help to debug the subgroup prio when I was blocked. Once that was in place the widow mine button reshuffle took 30 minutes from start to in-game test. Disclaimer: I previously looked into .XML game data to help BeedeBdoo extract all command conflicts from game data so that we could automatically check TheCore and TheCore Lite out of the game.
Create a new SC2Mod
First, launch the SC2 map editor. Like most old-school Windows programs, you want to make File=>New… and create an Extension Mod.
Dependencies need to be chosen from existing game data. Select Custom click Modify… then click Add standard… and check Void Multi (Mod).
This is a list of all Standard Game Data to use as dependency. Void Multi (Mod) seems to be current live Multiplayer and Balance Multi (Mod) the current setup for Versus/Testing ladder games. The picture below shows the extended .SC2Mod tree. Here are the dependencies: Swarm includes Liberty, Void includes Swarm and dependencies , and Void Multi includes Void and dependencies. Our Mod will include VoidMulti (Mod) and dependencies.
Modifying units (Marine)
Let’s start with the funny tuning part: the marine change. First click on the Marine icon to go to Data view, then View => .XML view. Select Units tab, we now see the unit content from all dependencies loaded previous + this new mod (initial 2 lines with generic XML headers).
Search marine, we see all marine instances in the game data loaded. Meaningful marines are Melee/Terran/Unit/Marine, there are 2, we need to select the VoidMulti.SC2Mod. Now we basically understand the structure of .XML files and selected the “right” marine model, we want to switch to Wizard view to facilitate the next step, View=>Wizard View.
There are many tabs. Browsing in the Unit tab, “Unit Subgroup Priority = 78” will be found. Same method applied for Ravien would give “Unit Subgroup Priority = 84”. In order to get Marine prio higher than Raven let’s set proper marine’s one to 85 and View=>.XML view.
A third marine figure appeared \o/ and it is related to our untitled mod as a 3 liners. The change can be read in XML language pretty easily.
Modifying units (Widow Mine)
Now let’s deal with the Widow mine buttons! Go back to View=>Wizard view, search for VoidMulti widow mine. There are 2 units model to deal with: widow mine and burrowed widow mines, because game data is built in this way.
Select Ability tab of both, select button and move stuff with arrows like wanted to fix widow mine button issue. Once you get to View=>.XML view you realize that those changes are fitting in a dozen of .XML lines that look less easy than the Subgroup Priority change.
Publishing and using in game
We are almost done. Some mod title and description could be added: Mod=>Mod Info, and save. To get the .SC2Mod usable in game it needs to be published. This step is still done from map editor with File=>Publish… you will need to login with your Battle.net account and follow all the steps. Your .SC2Mod will soon be loaded, please note that default behavior is to publish only on your region server. Don’t be afraid, with File=>Managed Published… you can just remove any of your uploads.
Once completed, you now can load SC2 and prepare a Melee Custom Game with Create With Mod. Search for the Extension Mod you want: here use my demo Terran QoL .SC2Mod called “Marine Test Subgroup Prio” and play as Terran against a friend or whatever AI, and reproduce the first picture – gl hf.
What we learnt
The SC2Mod creation is not exactly easy but is doable by with some effort.
The key here is to understand what is a SC2Mod and how it fits with the QoL changes we want to implement in any context. The actual changes could be performed through the Wizard tool in SC2 Map Editor after understanding the incremental .SC2Mod principles. They result in a separated .XML file with limited amount of numbers.
It appears that those two changes are kind of easy to apply without major game design changes. I have demonstrated that the SC2Mod can be useful in applying changes over any map.Nevertheless, there is room for some small adjustments.
Let’s consider TvT, one want marine subgroup prio change, the other does not: The current SC2Mod approach does not allow customisation for individual players. The SC2Mod approach as of today suffers the same limitation as the balance update approach, with a granularity at single game instance instead of global setting for all players.
The complexity comes from loading different “player-level” SC2Mods in 2·N places in NvN. One obvious basic requirement is that those SC2Mods should only modify things at player’s place without interfering with data used to share same rules. The current main challenge is that this type of data is currently mixed with game data such as hit points, attack speed, entire tech tree.
Please send feedback in comments if you tried to reproduce this tutorial. Do not hesitate to share any additional feedback, idea or question. There will be a follow-up article in the next weeks, starting from this tutorial and key learning to talk about further implementation aspects.
About the author
bobo38 has been the main developer for TheCore Lite since early 2016: a .SC2Hotkeys custom setup that support multiplayers, campaigns and coop for many keyboard layouts. He is involved in TheCore project with great interest in User Interface optimization with all possible available levers. He also lurks on SC2 related Reddits, in particular allthingszerg Reddit.
bobo38 put in a huge amount of effort in this, and all the credit should go to him. As mentioned earlier, I believe it is beneficial for the community to consider the programming aspects when they propose changes.
After testing out the mod myself, I am surprised how a seemingly minor change like this influenced how I play. I usually only add Liberator into my composition in TvP mid game, because Ghost is too hard to control with the main army. The net benefit of adding Ghost is not worthy for me. The change of unit selection priority with the mod makes Ghost a much more viable option for me, and this changes how I want to play the match up. I encourage you to give this a try.
We will talk about the implications in part two. Stay tuned.
If you enjoyed this article, I’d love you to share it with one friend. You can follow me on Twitter and Facebook. If you really like my work, you can help to sustain the site by contributing via PayPal and Patreon. See you in the next article!
2 thoughts on “[Guest Article] Testing and Implementing Quality of Life Changes with SC2Mod (Part 1)”
I think r/starcraft2 was again faster than r/starcraft! ^^
Great article as always, if only it were in the game but life is strange, everything is possible. The reason behind this modification is using spell units along main army as Terran. I will contribute a little of my knowledge as a low ranked player on ladder about late game (especially TvP).To begin, I will talk a bit about the moment you get your 3rd mining, P at this point will have a power spike and can overwhelm your army if you are careless. If you survive that point with your 3rd still alive, you can push P back or get into late game. In lategame, you will need a 4th, 2 more starport, 3 more barracks(even more if you want), a ghost academy should be built around 9:00 and cloak upgrade. Try to hang on and defense. If they have colo you should add some vikings around 6 maybe, tempest then add more around 12. If carriers more libers. It really depends on what he is making, the more u play, the more you will have your answer. Ghosts are crucial in lategame, they disable HTs , deal instant damage to Protoss army. When engaging with your army, it is quite complicated but i can sum it up like this. You shouldn’t stay at one place cause you wont have a chance to flank their HTs, always scan where they are (being stalked by someone is not comfortable at all), scan your own position to kill observers (disable P’s eyes like you disable UAVs on a battlefield in real life), threaten their expansions but keep in mind they can flank or go basetrade and run before too late (It’s a cat and mouse game), after all of that you will have a short moment of time notice that their army are idle that will be your chance to engage them. And the change is the tier 4 upgrade for any Terran who loves to play lategame with ghosts and other spell units.