Each wave can come after each amount of time, for example 1 wave comes after 50 seconds, the next wave comes after 80 seconds.
Like this: Time elapsed - 50 seconds
This is how I did it in my TD (well, mostly)
First you need to make 4 variables:
TempLocation - Point variable
Amount - Integer array with a length of however many levels you're going to have
UnitType - Unit array with a length of however many levels you're going to have
CurrentLevel - integer with starting value of 1 (this counts your levels for you)
edit:
NumOfUnits - integer variable starting at 0
Now all you have to do is set what each wave is, and how many of them spawn...
- Spawn Units for Player 1
- Events
- Conditions
- Player Slot Status of Player 1 equal to Is Playing
- Actions
- Set - TempLocation to center of Player1sSpawningRegion
- Unit - Create (unit type of (Amount[CurrentLevel])) units of type (unit type of (UnitType[CurrentLevel])) for (Neutral Hostile) at (TempLocation) facing default building facing degrees
- Set NumOfUnits to (Arithmetic(NumOfUnits + Amount[CurrentLevel]))
- Custom Script(call RemoveLocation(udg_TempLocation))
- Custom Script(set bj_wantDestroyGroup = true)
- Set - TempLocation to center of (First checkpoint in player 1's path)
- Unit Group - Pick every unit in (Player1sSpawningRegion) and do if ((owner of (Picked Unit) equal to (Neutral Hostile)) then (order (Picked Unit) to (Move) to (TempLocation)) else (do Nothing))
- Custom Script - (call RemoveLocation(udg_TempLocation))
- Map Initialization
- Events
- Map Initialization
- Conditions
- Actions
- Comment - set number of units per level
- Set Amount[1] to # of units to spawn in wave 1
- Set Amount[2] to # of units to spawn in wave 2
- Set Amount[3] to # of units to spawn in wave 3
- ...
- Comment - set unit types for each level
- Set UnitType[1] to (unit that spawns at level 1)
- Set UnitType[2] to (unit that spawns at level 2)
- Set UnitType[3] to (unit that spawns at level 3)
- ...
Copy the first trigger for each player and change the regions and the player number for each copy
- Events
- Every ... seconds of the game // get rid of this if you add the next trigger
- Conditions
- Actions
- Trigger - Run (Spawn units for Player 1) checking conditions
- Trigger - Run (Spawn units for Player 2) checking conditions
- ...
Hope this helps!
EDIT: for the "30 seconds after the wave dies" thing, add this:
I wouldn't wait 30 seconds after the wave dies though, since that adds a lot of down time where people just get impatient, wanting to kill stuff.
- Events
- Unit dies
- Conditions
- Owner of (Triggering Unit) equal to (Neutral Hostile)
- Actions
- Set - NumOfUnits to (Arithmetic(NumOfUnits - 1))
- if then else - multiple
- if
- NumOfUnits equal to 0
- than
- wait 30 seconds
- Trigger - Run (trigger above this one that has no name)
- else
Copy the first trigger for each player and change the regions and the player number for each copy