How can I programmatically change the # of resources delivered by workers in a StarCraft 2 custom map?
I wanted to at least figure out how to set the # of minerals returned per trip, as opposed to adjusting the minerals you get after the fact or something. Turns out, unless there is a better way, what I am proposing is probably not worth the effort at all!
Here's my crazy roundabout solution.
- Copy the Behaviors for "Minerals (Mineral Field)" and "Minerals (High Yield)," changing the name and modifying the (Stats -> Harvest) amount to a different value.
- Create a trigger with actions to remove the "Minerals (Mineral Field)" (or high yield) behavior from a unit and add the new behavior created in the previous step.
- The trigger needs to fire from an appropriate event, which is tricky. I chose the "Unit uses SCV - Gather" abilities at the Approach stage, then perform the swap on "Triggering ability target unit" (if unit doesn't already have the new behavior).
- Also, just in case, I put in a condition that the Triggering ability target unit is within a small radius of a building owned by the player in question. This pretty much ensures it will only swap stuff at your main base and expansions, and not if you just right click on someone else's mineral patches.
- This feels pretty kludgey and as a programmer I am kind of sad that this was the best way I could find after an hour or so.
I also put in some special sauce like only applying these changes to a player who types "handicap" into the chat, and also added code to un-swap the behaviors if non-handicapped players start gathering from it instead (for example if he takes over an expansion).
This is a bunch of work for what I wanted! It would probably be much better to simply remove resources from the stockpile after the "Unit uses ability Return Cargo" event.
I'm only familiar with the SC1 editor, so I'm sure there's a better way to do this in SC2, but one way would be to set a trigger on an SCV carrying minerals into a zone (slightly larger than your command center) that follows your command center, and have the trigger remove the minerals the SCV is carrying and add some amount to that user's total.
A different handicapping-option would be to automatically remove X minerals/gas from your total every few seconds, where X increases over time. You could also conditionally spawn high-yield minerals near your buddies' bases.