- Joined
- Jan 23, 2020
- Messages
- 86
In my TD I have waves. They consist of Normal, 2X spawn, Special (1 additional "mini-boss" unit within a normal wave with aura), Boss, Bonus.
Certain waves do no spawn (Bonus) / inconsistently spawn (Special). What am I doing wrong? Is there an optimal way to do this?
Below are the triggers associated with my spawning system, let me know if you need to see more triggers:
Setting unit array:
Level setup:
Spawning:
Round end/restart:
Thanks!
Certain waves do no spawn (Bonus) / inconsistently spawn (Special). What am I doing wrong? Is there an optimal way to do this?
Below are the triggers associated with my spawning system, let me know if you need to see more triggers:
Setting unit array:
-
Setup Monster Types
-
Events
- Map initialization
- Conditions
-
Actions
- Set VariableSet monstertype_Normal[1] = Murloc Hunter
- Set VariableSet monstertype_Normal[2] = Crab lvl 2
- Set VariableSet monstertype_Normal[3] = Voodoo Priest lvl 3
- Set VariableSet monstertype_Normal[4] = Sand Wyrm lvl 4
- Set VariableSet monstertype_Boss[5] = Temple Ghoul lvl 5
- Set VariableSet monstertype_Normal[6] = Voodoo Wraith lvl 6
- Set VariableSet monstertype_Normal[7] = Battle Alien lvl 7
- Set VariableSet monstertype_Double[8] = Deathly Crawler lvl 8
- Set VariableSet monstertype_Normal[9] = Wanderer lvl 9
- Set VariableSet monstertype_Normal[10] = Goblin Robot Prototype lvl 10
- Set VariableSet monstertype_Normal[11] = Tribal Battle Beast lvl 11
- Set VariableSet monstertype_Normal[12] = Dark Monk lvl 12
- Set VariableSet monstertype_Double[13] = Night Emerger lvl 13
- Set VariableSet monstertype_Normal[14] = Brute Ogre lvl 14
- Set VariableSet monstertype_Boss[15] = Death Minister lvl 15
- Set VariableSet monstertype_Normal[16] = Helicopter lvl 16
- Set VariableSet monstertype_Normal[17] = Artillary Machine lvl 17
- Set VariableSet monstertype_Normal[18] = Chieftain lvl 18
- Set VariableSet monstertype_Special[18] = Chieftain lvl 18 special
- Set VariableSet monstertype_Normal[19] = Huntress lvl 19
- Set VariableSet monstertype_Normal[20] = Evil Spirit lvl 20
- Set VariableSet monstertype_Normal[21] = Pain Maiden lvl 21
- Set VariableSet monstertype_Normal[22] = Rock Giant lvl 22
- Set VariableSet monstertype_Normal[23] = Ocean Demon lvl 23
- Set VariableSet monstertype_Double[24] = Spider Deamon lvl 24
- Set VariableSet monstertype_Boss[25] = Blood Reaver lvl 25
- Set VariableSet monstertype_Normal[26] = Gryphon Ryder lvl 26
- Set VariableSet monstertype_Normal[27] = White Beast lvl 27
- Set VariableSet monstertype_Special[27] = White Beast lvl 27 special
- Set VariableSet monstertype_Normal[28] = Water Elemental lvl 28
- Set VariableSet monstertype_Normal[29] = Armored Ravager lvl 29
- Set VariableSet monstertype_Bonus[30] = Golden Coin - BONUS lvl 30
- Set VariableSet monstertype_Normal[31] = Masked Ripper lvl 31
- Set VariableSet monstertype_Special[31] = Masked Ripper lvl 31 special
- Set VariableSet monstertype_Normal[32] = Undead Wizard lvl 32
- Set VariableSet monstertype_Normal[33] = Toxic Manifestation lvl 33
- Set VariableSet monstertype_Special[33] = Toxic Manifestation lvl 33 special
- Set VariableSet monstertype_Normal[34] = Shadow Reaper lvl 34
- Set VariableSet monstertype_Boss[35] = Minotaur Warrior lvl 35
- Set VariableSet monstertype_Normal[36] = Wyvren lvl 36
- Set VariableSet monstertype_Normal[37] = Troll Batrider lvl 37
- Set VariableSet monstertype_Normal[38] = Wind Rider lvl 38
- Set VariableSet monstertype_Normal[39] = Spirit Wraith lvl 39
- Set VariableSet monstertype_Normal[40] = Nether Dragon lvl 40
- Set VariableSet monstertype_Normal[41] = Centaur Drudge lvl 41
- Set VariableSet monstertype_Double[42] = Infernal lvl 42
- Set VariableSet monstertype_Normal[43] = Ice Giant lvl 43
- Set VariableSet monstertype_Normal[44] = Mammoth lvl 44
- Set VariableSet monstertype_Boss[45] = Horseman lvl 45
- Set VariableSet monstertype_Normal[46] = Spider lvl 46
- Set VariableSet monstertype_Normal[47] = Infernal Juggernaught lvl 47
- Set VariableSet monstertype_Normal[48] = Harpy lvl 48
- Set VariableSet monstertype_Bonus[49] = Golden Coin - BONUS lvl 49
- Set VariableSet monstertype_Normal[50] = Ocean Deamon lvl 50
- Set VariableSet monstertype_Boss[51] = Troll Beserker lvl 51
- Set VariableSet monstertype_Boss[52] = War Commander lvl 52
- Set VariableSet monstertype_Boss[53] = Far Seer lvl 53
- Set VariableSet monstertype_Boss[54] = Pit Lord lvl 54
- Set VariableSet monstertype_Boss[55] = Blood Mage lvl 55
- Set VariableSet monstertype_Boss[56] = Leader of the Marauders lvl 56
- Set VariableSet monstertype_Boss[57] = Death Pheonix lvl Final
-
Events
Level setup:
-
Levels Player RED1
-
Events
- Time - WaveTimer[1] expires
- Conditions
-
Actions
- Set VariableSet Level_Number[1] = (Level_Number[1] + 1)
- Player - Add (5 x Level_Number[1]) to Player 1 (Red).Current gold
- Game - Display to Player Group - Player 1 (Red) for 15.00 seconds the text: (Round bonus: |cffffff00 + ((String((5 x Level_Number[1]))) + Gold|r))
- Multiboard - Set the text for (Last created multiboard) item in column 3, row List to (String(Level_Number[(Player number of Player 1 (Red))]))
- Sound - Play QuestNew <gen>
- Game - Display to Player Group - Player 1 (Red) for 8.00 seconds the text: LevelText[Level_Number[1]]
- Wait 1.00 seconds
- Set VariableSet RoundOver[1] = False
-
Events
Spawning:
-
Spawning
-
Events
- Time - Every 1.50 seconds of game time
- Conditions
-
Actions
-
Player Group - Pick every player in HumanPlayers and do (Actions)
-
Loop - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
And - All (Conditions) are true
-
Conditions
- RoundOver[(Player number of (Picked player))] Equal to False
- Players_Active[(Player number of (Picked player))] Equal to True
-
Conditions
-
And - All (Conditions) are true
-
Then - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
And - All (Conditions) are true
-
Conditions
- Level_Number[(Player number of (Picked player))] Not equal to 5
- Level_Number[(Player number of (Picked player))] Not equal to 8
- Level_Number[(Player number of (Picked player))] Not equal to 13
- Level_Number[(Player number of (Picked player))] Not equal to 15
- Level_Number[(Player number of (Picked player))] Not equal to 24
- Level_Number[(Player number of (Picked player))] Not equal to 25
- Level_Number[(Player number of (Picked player))] Not equal to 30
- Level_Number[(Player number of (Picked player))] Not equal to 35
- Level_Number[(Player number of (Picked player))] Not equal to 42
- Level_Number[(Player number of (Picked player))] Not equal to 45
- Level_Number[(Player number of (Picked player))] Not equal to 49
- Level_Number[(Player number of (Picked player))] Not equal to 51
- Level_Number[(Player number of (Picked player))] Not equal to 52
- Level_Number[(Player number of (Picked player))] Not equal to 53
- Level_Number[(Player number of (Picked player))] Not equal to 54
- Level_Number[(Player number of (Picked player))] Not equal to 55
- Level_Number[(Player number of (Picked player))] Not equal to 56
-
Conditions
-
And - All (Conditions) are true
-
Then - Actions
- -------- SPECIAL --------
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
And - All (Conditions) are true
-
Conditions
- SpawnCounter[(Player number of (Picked player))] Equal to 0
-
Or - Any (Conditions) are true
-
Conditions
- Level_Number[(Player number of (Picked player))] Equal to 18
- Level_Number[(Player number of (Picked player))] Equal to 27
- Level_Number[(Player number of (Picked player))] Equal to 31
- Level_Number[(Player number of (Picked player))] Equal to 33
-
Conditions
-
Conditions
-
And - All (Conditions) are true
-
Then - Actions
- Set VariableSet TempPoint = (Center of spawn_areas[(Player number of (Picked player))])
- Unit - Create 1 monstertype_Special[Level_Number[(Player number of (Picked player))]] for Player 12 (Brown) at TempPoint facing (Center of (Playable map area))
- Unit Group - Add (Last created unit) to TotalCreeps[(Player number of (Picked player))]
- Custom script: call RemoveLocation(udg_TempPoint)
- Special Effect - Create a special effect attached to the overhead of (Last created unit) using Abilities\Spells\Human\MassTeleport\MassTeleportCaster.mdl
- Special Effect - Destroy (Last created special effect)
- Else - Actions
-
If - Conditions
- -------- BONUS --------
- Set VariableSet SpawnCounter[(Player number of (Picked player))] = (SpawnCounter[(Player number of (Picked player))] + 1)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
And - All (Conditions) are true
-
Conditions
- SpawnCounter[(Player number of (Picked player))] Greater than 5
-
Or - Any (Conditions) are true
-
Conditions
- Level_Number[(Player number of (Picked player))] Equal to 30
- Level_Number[(Player number of (Picked player))] Equal to 49
-
Conditions
-
Conditions
-
And - All (Conditions) are true
-
Then - Actions
- Set VariableSet SpawnCounter[(Player number of (Picked player))] = 0
- Set VariableSet RoundOver[(Player number of (Picked player))] = True
- Else - Actions
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
- If - Conditions
-
Then - Actions
- Set VariableSet TempPoint = (Center of spawn_areas[(Player number of (Picked player))])
- Unit - Create 1 monstertype_Bonus[Level_Number[(Player number of (Picked player))]] for Player 12 (Brown) at TempPoint facing (Center of (Playable map area))
- Unit Group - Add (Last created unit) to TotalCreeps[(Player number of (Picked player))]
- Custom script: call RemoveLocation(udg_TempPoint)
- Special Effect - Create a special effect attached to the overhead of (Last created unit) using Abilities\Spells\Human\MassTeleport\MassTeleportCaster.mdl
- Special Effect - Destroy (Last created special effect)
- Else - Actions
- -------- X2 SPAWN --------
- Set VariableSet SpawnCounter[(Player number of (Picked player))] = (SpawnCounter[(Player number of (Picked player))] + 1)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
And - All (Conditions) are true
-
Conditions
- SpawnCounter[(Player number of (Picked player))] Greater than 10
-
Or - Any (Conditions) are true
-
Conditions
- Level_Number[(Player number of (Picked player))] Equal to 8
- Level_Number[(Player number of (Picked player))] Equal to 13
- Level_Number[(Player number of (Picked player))] Equal to 24
- Level_Number[(Player number of (Picked player))] Equal to 42
-
Conditions
-
Conditions
-
And - All (Conditions) are true
-
Then - Actions
- Set VariableSet SpawnCounter[(Player number of (Picked player))] = 0
- Set VariableSet RoundOver[(Player number of (Picked player))] = True
- Else - Actions
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
- If - Conditions
-
Then - Actions
- Set VariableSet TempPoint = (Center of spawn_areas[(Player number of (Picked player))])
- Unit - Create 2 monstertype_Double[Level_Number[(Player number of (Picked player))]] for Player 12 (Brown) at TempPoint facing (Center of (Playable map area))
- Unit Group - Add (Last created unit) to TotalCreeps[(Player number of (Picked player))]
- Custom script: call RemoveLocation(udg_TempPoint)
- Special Effect - Create a special effect attached to the overhead of (Last created unit) using Abilities\Spells\Human\MassTeleport\MassTeleportCaster.mdl
- Special Effect - Destroy (Last created special effect)
- Else - Actions
- -------- NORMAL --------
- Set VariableSet SpawnCounter[(Player number of (Picked player))] = (SpawnCounter[(Player number of (Picked player))] + 1)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- SpawnCounter[(Player number of (Picked player))] Greater than 20
-
Then - Actions
- Set VariableSet SpawnCounter[(Player number of (Picked player))] = 0
- Set VariableSet RoundOver[(Player number of (Picked player))] = True
- Else - Actions
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
- If - Conditions
-
Then - Actions
- Set VariableSet TempPoint = (Center of spawn_areas[(Player number of (Picked player))])
- Unit - Create 1 monstertype_Normal[Level_Number[(Player number of (Picked player))]] for Player 12 (Brown) at TempPoint facing (Center of (Playable map area))
- Unit Group - Add (Last created unit) to TotalCreeps[(Player number of (Picked player))]
- Custom script: call RemoveLocation(udg_TempPoint)
- Special Effect - Create a special effect attached to the overhead of (Last created unit) using Abilities\Spells\Human\MassTeleport\MassTeleportCaster.mdl
- Special Effect - Destroy (Last created special effect)
- Else - Actions
-
Else - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
- If - Conditions
-
Then - Actions
- -------- BOSS --------
- Set VariableSet SpawnCounter[(Player number of (Picked player))] = (SpawnCounter[(Player number of (Picked player))] + 1)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
- If - Conditions
-
Then - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- SpawnCounter[(Player number of (Picked player))] Equal to 1
-
Then - Actions
- Set VariableSet SpawnCounter[(Player number of (Picked player))] = 0
- Set VariableSet RoundOver[(Player number of (Picked player))] = True
- Else - Actions
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
- Else - Actions
- Set VariableSet TempPoint = (Center of spawn_areas[(Player number of (Picked player))])
- Unit - Create 1 monstertype_Boss[Level_Number[(Player number of (Picked player))]] for Player 12 (Brown) at TempPoint facing (Center of (Playable map area))
- Unit Group - Add (Last created unit) to TotalCreeps[(Player number of (Picked player))]
- Custom script: call RemoveLocation(udg_TempPoint)
- Special Effect - Create a special effect attached to the overhead of (Last created unit) using Abilities\Spells\Human\MassTeleport\MassTeleportCaster.mdl
- Special Effect - Destroy (Last created special effect)
- Else - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
- Else - Actions
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
Loop - Actions
-
Player Group - Pick every player in HumanPlayers and do (Actions)
-
Events
Round end/restart:
-
UnitDies
-
Events
- Unit - A unit Dies
-
Conditions
- (Owner of (Triggering unit)) Equal to Player 12 (Brown)
-
Actions
-
Player Group - Pick every player in HumanPlayers and do (Actions)
-
Loop - Actions
- Unit Group - Remove (Triggering unit) from TotalCreeps[(Player number of (Picked player))].
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- (Number of units in TotalCreeps[(Player number of (Picked player))]) Equal to 0
- RoundOver[(Player number of (Picked player))] Equal to True
-
Then - Actions
- Countdown Timer - Start WaveTimer[(Player number of (Picked player))] as a One-shot timer that will expire in 6.00 seconds
- Else - Actions
-
If - Conditions
-
Loop - Actions
-
Player Group - Pick every player in HumanPlayers and do (Actions)
-
Events
Thanks!
Last edited: