Starcraft 1-and-a-half

From Summa Bergania

(Redirected from Starcraft 1.1)

Written: 2008-06-18, 2008-07-29

by David Bergan


I would love it if Blizzard let me borrow their source code for Starcraft 1. Having played it consistently since the week it came out (10+ years ago), it is obviously a game I highly enjoy and respect. However, having played it for 10+ years I have also thought of a few things that as a computer programmer I would add. Nothing related to the core balance of the game, mind you (although personally I think Scouts and Queens are virtually useless in their current form and haven't seen them in any recent pro games)... I would just add some basic gameplay enhancers and release it as Starcraft 1-and-a-half. Perhaps these ideas would also fit into Starcraft 2... which I haven't played and haven't really followed the development closely, so I really couldn't say. Hopefully a Blizzard developer will stumble upon these and give them fair consideration. [And just in case that actually does happen, let me hereby declare, Blizzard, that I renounce all legal rights to my ideas on this page. You may fully use (or not use) my ideas, or any inspiration derived from them, without compensating, entitling, or even acknowledging me. The ideas below are fully your intellectual property should you choose to use them. And it's likely that Blizzard may have already thought of these themselves...]

So anyway, on to how I would make Starcraft 1-and-a-half.

Add a cease-fire command

Stand your ground; don't fire unless fired upon, but if they mean to have a war, let it begin here. — Captain John Parker, Battle of Lexington
Don't shoot until you see the whites of their eyes! — Colonel William Prescott, Battle of Bunker Hill
In addition to attack, move, hold position, etc., I would add a "cease-fire" command for units. This command would act like this "Don't fire, unless fired upon." Why add this command? So that a player can pull off a successful ambush. Imagine a group of hydralisks moving into a valley where Terran has tanks fortified on the plateaus above. (ie the 9 o'clock natural expansion on Lost Temple.) As is, the first hydralisk will take a shot from a tank, and then the hydras will retreat. If the tanks were in cease fire mode, they could wait until the hydras are so deep into the valley that they are totally slaughtered when they go off "cease-fire" mode (ie get a "stop" command).
Also would be good with lurkers waiting to ambush a group of marines... stay in cease-fire mode until they are right on top of the lurkers. Reavers, dragoons, guardians, and others could all use this kind of strategy.
However, if a unit in "cease-fire" mode took damage from the enemy, it would automatically start attacking. Actually, not only the singular attacked unit, but all of my units would start firing.

Custom macros (hotkeys)

(Note, my use of "macro" below has to do with little script functions that do a task... Starcraft strategy lingo often uses "macro" in a different sense for macro-management or macro-economy. I am not using the term in that sense here. Macro exclusively refers to hotkey-esque script functions.)
Personally I want a game where I make more strategic decisions and spend less time on mundane things. You know how you can record a macro in Microsoft Word to do a mundane task for you? I want to extend that concept into Starcraft. The game would let you write your own scripts for different keys (or key combinations). For example, I could make my F1 key trigger my highest-charged scanner sweep to sweep the area where my mouse is. With 3 sweepers, I could survey 3 potential expansions on the mini-map with only three presses of F1 (and moving my mouse over the three areas), and it only takes 50 charge points from each sweeper. The following is a list of some of the functions I would want available for custom macros. There are other obvious things I have assumed would be in there like "Attack", "Stop", etc. and simple key remapping (like making "d" build dark templars, and "g" build dragoons). Keep in mind, too, that any macro could combine more than one function.
FillAllReaversWithScarabs() - which would fill as many as you have money for... and if you're short on money, the scarabs would be evenly distributed.
FillAllCarriersWithInterceptors() - same concept
SelectAllOfThisUnit("Zealot") - selects all the "zealots" you have (I would get rid of the "select only 12 at a time" rule), you can pass it the name of any unit or some wildcards like "Group Troops", "Air Units", "Control Group 1" or "All" (which includes probes)
BringMeTheNearest("Observer") - commands the nearest "observer" to move to the cursor
UnloadAllShuttles() - commands all shuttles/dropships/overlords to unload at the cursor
BuildOne("Overlord") - Builds one "overlord" at the ideal "hatchery" (the ideal "hatchery" is the one with the most larva/shortest time until next larva pops up - the ideal "gateway" is the one that will become empty the soonest)
BuildOneFromEachBuilding("Zealot") - Fills all your "gateways" with 1 "zealot"
BuildXFromEachBuilding("Zealot", 3) - Fills all your "gateways" with 3 "zealots"
BuildXFromThisBuilding("Zealot", 3) - Fills the selected "gateway" with 3 "zealots"
BuildAsManyAsPossible("Zealot") - Fills all your "gateways" with 5 "zealots" or evenly distributed if you are short on mins
SetAllRallyPoints("Gateway") - Sets all the "gateways" to have a rally point where the cursor is
DisableAllRallyPoints("Gateway") - Sets all the "gateways" to not having a rally point (which would be useful if you see an attack coming and need to build units that stay at the home base)
CycleThroughResearch() - This one requires that the player makes something like a research.ini file where they establish a hierarchy (Hive, Lair, Zergling Attack Speed, Greater Spire, etc.) and the function goes through the list and tries to make whichever upgrades it can afford (and has tech for)
QuickBuilding("Pylon") - Centers your screen on an idle "probe" (or a busy one near main base if there are none idle) and pulls up the "pylon" placement (provided you have 100 mins)
QuickScan() - Triggers a scanner sweep from my highest-charged sweeper
QuickSpell("Lockdown") - Triggers a "lockdown" from my highest-charged "ghost" on the screen
ConsumeUp() - All my defilers on the screen roam and consume the zerglings nearest them until fully charged
BuryAll("Zerglings") - Buries (or unburies) all "zerglings" (also uses wildcards like "Ground Troops", "Control Group 1", etc.)
CeaseFireAll("Siege Tanks") - Implements the cease fire idea written above (and uses wildcards, too)
MessageToPlayers("Team", "Help!") - operand 1 says who receives the message ("Team", "Enemies", "All"), operand 2 is the message
DisperseUnits() - This one is tricky to explain, but just think about your first 4 probes. If you had 4 probes selected, held down a "DisperseUnits()" hotkey, and then right-clicked a mineral patch, it would send 1 of the 4 probes to that patch and then leave you with only the other 3 probes selected. Continuing with the hotkey down, you right-click the next patch, and again 1 probe goes to that patch and the other 2 are now selected. This is also good for sending scourge into carriers/battlecruisers, or sending out 7 zerglings to search the 7 other starting locations on the Hunters map (by holding the disperse hotkey and right-clicking on the mini-map).
I've heard that many (most?) pro-gamers bemoan any additional automation in Starcraft (I personally don't understand their arguments, but they seem quite fierce on the subject). Thus, this would probably be best implemented as a game-start option. The game creator would choose "Enable custom macros" or "Disable custom macros".
Technical detail: the scripts might be written with a "Starcraft Hotkey Editor" program, but the scripts themselves would be saved as separate files in a "Macros" folder. When joining a game, the player can browse the script directory for the script file they want to use. Also, a script file would contain macros for all 3 races, and would automatically enable only the macros for the race the player selects.

Command Prompt A.I. teammates

In our Starcraft group we often need to add computer players to a Top vs Bottom game to balance teams when we have an odd number of humans available. The problem is that no one wants a comp player on their team because the comp is totally isolated from its teammates. It plays its own game and coordinates nothing with the team. Here's how we fix that... define a set of chat commands so that a comp player can be quasi-controlled by its human teammates. (The comp would ignore all commands unless it was issued by a player that was allied to it, and it was allied to that player.) Some example commands:
attack purple zealots - the comp sends its zealots to attack purple's start location
attack 3 mutas - the comp attacks the 3 o'clock area with its mutas
attack WiseMike all - the comp attacks WiseMike's start location with every fighting unit it has
retreat mutas - the comp sends all its mutas to its start location
retreat all - comp sends all its fighting units to its start location
help - the comp sends all its fighting units to the start location of the player who issued the help request
safe - the player declares he's safe and the comp brings his units back home
build 10 corsairs - the comp makes whatever is necessary to build 10 corsairs
build 4 reavers - the comp makes whatever is necessary to build 4 reavers (if it was in the middle of making 10 corsairs, then it would cancel that command and start making reavers instead)
expand - the comp expands at a nearby resource area
drop 4 reavers purple - the comp makes 4 reavers and then drops them on purple
upgrade carriers - the comp researches every upgrade that improves a carrier
So with a set of commands like above I can count on a computer teammate to be marginally useful. I can issue it a "build 10 zerglings" command at the beginning of the game if I want it to help in a rush. Or I could issue it a "build 4 dark templars" command if I want it to make darkies as fast as possible. If I want the computer to do nothing but zealots, I would issue a "build 999 zealots" command plus an "upgrade zealots" command, and then I can order them to attack different spots on the map as they amass.

Open-source A.I. players

Currently when you add a "Computer" to a multiplayer game, it only uses the one script Blizzard gave it. Why not let players write their own AI scripts, give them names (ie "BerganBot", "ZergMutaRusher", etc.), and include them in a multiplayer game under those names? Programmers like me would even find it enjoyable to try to win a Starcraft AI scripting tournament.
Also in conjunction with the above idea, they can define their own teammate command prompts, and program how the computer would respond to those commands. A programmer could essentially pre-load an AI script with multiple build orders, and then tell its AI teammate during the game which build order to use via a chat command. (Now I'm seeing visions of tournaments consisting of 2-player teams where each team is a player and his custom AI teammate.)
Technical detail: the AI scripts might be written with a "Starcraft AI Editor" program, and the scripts themselves would be saved as separate files in an "AI" folder. When starting a multiplayer game, the creator can browse for AI scripts to enter into the game. The filename of the script is probably the name AI's playername (ie when "BerganBot.sai" is added to the game the player name is "BerganBot" rather than "Computer").

Add a Strafe-attack command

Your units move like a standard move command but attack things as they are moving (and consequently move a little slower)

Scatter/scramble command

Units in a group spread themselves out a bit (ie mutas taking hits from a corsair) or make criss-crossing moves during their cooldown (between attacks) to make it harder to micro focus fire.

Send SCVs/drones/probes straight to minerals or gas via rally point

This one is in Warcraft 3...

Option of letting teammates control your units

Just add a checkbox next to "Shared Vision" called "Can Control My Units". Definitely comes in handy when playing with a teammate who isn't aware when his partner is being attacked.

Shared units game option

Option for a team game that essentially locks in the "Can Control My Units" box for teammates... prevents backstabbing.

Transfer gas or minerals to a teammate

I think this is in Warcraft 3...

Shared resources game option

Option for a team game... you can check a check box at game creation for shared resources... where, say, all 3 teammates have one bank of minerals and gas (and supply?) rather than each player having their own bank of minerals and gas. This alleviates the need for actually setting up mineral transfers... everyone shares everything. Part of the team strategy might be to have one guy do all the minerals for the team while the others focus on macro and micro.

Let a player watch a game after he's eliminated

You see this option in Counter-Strike. Option for "teammates only" or "all players". You can also set whether they can chat only to other eliminated players (both teams) or to their alive teammates. Probably don't want them to be able to talk to their alive opponents or else they'll just constantly spam them with messages.
Maybe this would be irrelevant if an eliminated player would stay in the game because he can control his teammates units and still "play" even though his base is dead.

Infinite upgrades

Why are weapon and armor upgrades limited to three apiece? I think players should be able to continually upgrade their units throughout the game, where each upgrade follows the progression of becoming more expensive and longer to achieve. So for example, with zerg melee upgrades, level 1 starts at 100 minerals and 100 gas and 266 build time. Level 2 is 50 mins/gas more and 32 time-units longer. So why not let players extend this progression to level 10 and beyond? If a zerg player wants to spend 2000 minerals, 2000 gas and 1482 time-units for level 39 melee weapons, so be it. This would keep the game in a continual arms race, and could make the difference if two players have reached their psi-limit and are deadlocked in a positional stalemate.

Queue-able upgrades

Select Psi Storm and Hallucination at once and they are researched in order.

Queues don't take payment until the unit is being trained

Terminology change

The zerg overmind in Starcraft 1 apparently doesn't know much about the theory of evolution... When upgrades finish he/she/it says "evolution complete", but according to Darwin, evolution is never "complete"... nor does it have any conscious goals that it is pursuing. Moreover, evolution never happens in the course of one organism's lifetime. It's what happens to the gene pool (species) over the course of many generations. Therefore I would just change it to say "upgrade complete".
I know that's kind of picky, and I probably shouldn't expect much scientific realism from a game where guardian (and devourer) cocoons suspend in midair while metamorphosing... or where one little SCV can repair a bunker at a rate of about 4 zealots trying to tear it down. But hard as it is to accurately explain the theory of evolution to teenagers, it would certainly be helpful to the science teachers of the world if their kids weren't being exposed to misinformation in their favorite computer game. And seriously, it would be a very easy change to make.


Loosely thought-out ideas

Auto-retreat command

Units could have a setting (like "hold position") where they would move away from enemy units under certain circumstances. You could set it to "Enemy sighted," "Damage taken," "Below 33% health," or "Never" (default), and the setting stays even when you issue other commands.

Squads

This is not the same as a hotkey group; it makes the units strongly linked to each other such that selecting one automatically selects them all.

Synchronized squads

Squads where the units stay rigidly in their current formation. (This would probably work best for air units.)