Staredit is the map making utility included with Starcraft. Staredit is limited - there are many more things you can do to Starcraft that Staredit will not let you do. For these featues, such as square terrain, special units, and stackable buildings, you will need to use other editors. However, even within Staredit, there are advanced techniques that allow you to manipulate the available features to your benefit.
One thing you may notice early on: you have one variable to manipulate in StarEdit. Labeled as a "score" there is a score called "custom." You can use this value in any way with the condition for Score, and the action for Set Score.
As you might be thinking, you really do need more than 1. Now comes in other tricks.
1. Resources If you are making a map that doesn't require minerals or gas, you can use them to store information with the Accumulate condition, and Set Resources action.
Also note you can do this for computer players. But we still only have 3 choices.
2. Deaths Starcraft keeps track of how many times each unit in the game has died for each player. Even players 9, 10, 11 have their deaths counted. This will let us have atleast 100 different variables. With the Deaths condition and Set Deaths you can modify the deaths count for units that never exist in the game for easy variable access.
I will put a list of all the units that are never used (and therefore free to manipulate in any possible way). Many of these unused units will require a special version of a map editor.
Binary Countoffs 
This section deals with how to use these variables well. The widely accepted solution involves binary countoffs as the quickest method.
Lets look at a map called Ice Wars. This map has 2 teams pitted against each other. For one team to attack other, they must 'send' units. When a unit is 'sent' then every time a timer finishes counting down all the units that have been sent for the entire game are spawned to attack the enemy.
Lets say on Team 1, they have sent 5 marines, 4 firebats, and a medic. When the timer countdown hits 0, how do we create 5 marines, 4 firebats, and a medic to attack the other team? Use Deaths
First we arbitrarily pick a unit to set the deaths for. IMPORTANT: If you are modifying the deaths of a Zerg Zergling for Player 4, then make sure Player 4 never has any Zerg Zerglings die!! There is a list of units that can never die, use those first if you aren't sure if one is safe or not.
We will assign the following table:
|Unit||Death Tracking Unit||Secondary Death Tracking Unit|
|Marine||Zerg Zergling||Zerg Spawning Pool|
|Firebat||Zerg Hydralisk||Zerg Evolution Chamber|
|Medic||Zerg Overlord||Zerg Hive|
This assumes you do not need Zerglings, Hydras, Overlords, Hives, Evolution Chambes, and Spawning Pools.
So first you will need a trigger like this for all 3 units.
CONDITIONS Current Player brings atleast 1 Terran Marine to SEND ACTIONS Remove 1 Terran Marine for Current Player at SEND Set Deaths for Current Player: add 1 for Zerg Zergling Preserve Trigger
This sets up the marine counter. Next lets send the marines
CONDITIONS Countdown Timer is exactly 0 seconds. Current Player deaths for Zerg Zergling is atleast 1 ACTIONS Create 1 Terran Marine at MARINELOCATION for CurrentPlayer Set Deaths for CurrentPlayer subtract 1 for Zerg Zergling Set Deaths for CurrentPlayer add 1 for Zerg Spawning Pool Preserve Trigger
Now that the marines are created, you may recognize that the death count for Zergling is now 0. But, the death count for the Spawning Pool is what are marine count used to be. We need now to reverse these 2 numbers. Using switches, and a different secondary unit for all of these, the secondary countoffs can happen in paralel.
CONDITIONS CurrentPlayer deaths for Zergling is exactly 0 ACTIONS Set Switch1 Preserve Trigger
Now do this
CONDITIONS Switch 1 is set ACTIONS