Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
This is a system that will destroy terrain when a player has been standing on it too long.
It would be quite a good addition to 2D generators as well as escape maps, and soon I shall add an anti terrain missile.
each terrain type has a differant duration depending on what ever you set it. it has been tested many times and it MUI and MPI. it can be tested with 12 players to show this as well as player 1 having 2 units unlike everybody else who has 1.
you cannot die in the test map for the sake of testing.
Setting currant Units and missiles
Events
Time - Intervals expires
Conditions
Actions
-------- this wll register units that can destroy terrain, remember if you want more than one unit type add --------
-------- and or function (eg: pick all unit in region (playable map area) matching condition unit type of whatever OR unit type of unit --------
-------- repeat for more units --------
Set TempGroup = (Units in (Playable map area) matching (((Unit-type of (Matching unit)) Equal to Footman) or ((Unit-type of (Matching unit)) Equal to Siege Engine)))
-------- * --------
Unit Group - Pick every unit in TempGroup 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
((Picked unit) is alive) Equal to True
((Picked unit) is in WaitGroup) Equal to False
Then - Actions
-------- This is what actually adds them to the terrain destroying group, there is no ned to modify this unless your heavily modifing it --------
-------- * --------
Set WaitCount = (WaitCount + 1)
-------- * --------
Set WaitTime[WaitCount] = 0
-------- * --------
Set WaitUnit[WaitCount] = (Picked unit)
-------- * --------
Unit Group - Add WaitUnit[WaitCount] to WaitGroup
Custom script: call DestroyGroup(udg_TempGroup)
Else - Actions
-------- this wll register units that can destroy terrain, remember if you want more than one unit type add --------
-------- and or function (eg: pick all unit in region (playable map area) matching condition unit type of whatever OR unit type of unit --------
-------- repeat for more units --------
Set TempGroup = (Units in (Playable map area) matching (((Unit-type of (Matching unit)) Equal to Anti Terrain Missile) or ((Unit-type of (Matching unit)) Equal to Peircing Missile)))
-------- * --------
Unit Group - Pick every unit in TempGroup 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
((Picked unit) is alive) Equal to True
((Picked unit) is in WaitGroup) Equal to False
Then - Actions
-------- This is what actually adds them to the terrain destroying group, there is no ned to modify this unless your heavily modifing it --------
-------- * --------
Set Missile_count = (Missile_count + 1)
-------- * --------
Set Missile_unit[Missile_count] = (Picked unit)
-------- * --------
Unit Group - Add Missile_unit[Missile_count] to Missile_group
Custom script: call DestroyGroup(udg_TempGroup)
Else - Actions
Terrain destory
Events
Time - Intervals expires
Conditions
Actions
For each (Integer A) from 1 to WaitCount, 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
(WaitUnit[(Integer A)] is in WaitGroup) Equal to True
(WaitUnit[(Integer A)] is alive) Equal to True
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
WaitTime[(Integer A)] Equal to 0
Then - Actions
-------- * --------
Set Point_checker[(Integer A)] = (Position of WaitUnit[(Integer A)])
Else - Actions
-------- * --------
Set WaitTime[(Integer A)] = (WaitTime[(Integer A)] + 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
WaitTime[(Integer A)] Greater than or equal to 3
Then - Actions
-------- The condition above is the 'wait' between the first point being set and the second pooiint being set, --------
-------- IT MUST NOT BE CHANGED --------
-------- * --------
Set WaitTime[(Integer A)] = 0
-------- * --------
Set Point_checker_confirm[(Integer A)] = (Position of WaitUnit[(Integer A)])
-------- condition directly below (*) past that is where you need to set you bg then psst hat you need to set your units 'weight' --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Integer((X of Point_checker[(Integer A)]))) Equal to (Integer((X of Point_checker_confirm[(Integer A)])))
(Integer((Y of Point_checker[(Integer A)]))) Equal to (Integer((Y of Point_checker_confirm[(Integer A)])))
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Terrain type at Point_checker_confirm[(Integer A)]) Not equal to Felwood - Poison
Then - Actions
Set Movement_detctor[(Integer A)] = 1
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Unit-type of WaitUnit[(Integer A)]) Equal to Footman
Then - Actions
-------- Create on of these for each unit type, then set the 'weight' by increasing the variable below --------
Set Life_of_terrain[(Integer A)] = (Life_of_terrain[(Integer A)] + 1)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Unit-type of WaitUnit[(Integer A)]) Equal to Siege Engine
Then - Actions
Set Life_of_terrain[(Integer A)] = (Life_of_terrain[(Integer A)] + 3)
Else - Actions
Else - Actions
Else - Actions
Set Life_of_terrain[(Integer A)] = 0
Set Movement_detctor[(Integer A)] = 1
-------- This part is your destroyable terrain section --------
-------- the number you see in the conditions --------
-------- is the terrains strength --------
-------- the first condition is the terrain type --------
-------- Edit information is inside --------
-------- the first 'if then else' function --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
And - All (Conditions) are true
Conditions
(Terrain type at Point_checker_confirm[(Integer A)]) Equal to Lordaeron Summer - Grass
Life_of_terrain[(Integer A)] Greater than or equal to 45
Then - Actions
-------- Terrain it changes to after it 'breaks' --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Weakening_Option_Check Equal to 1
Then - Actions
Environment - Change terrain type at Point_checker_confirm[(Integer A)] to Lordaeron Summer - Grassy Dirt using variation -1 in an area of size 1 and shape Circle
Else - Actions
Environment - Change terrain type at Point_checker_confirm[(Integer A)] to Felwood - Poison using variation -1 in an area of size 1 and shape Circle
-------- Special effect --------
Special Effect - Create a special effect at Point_checker_confirm[(Integer A)] using Abilities\Spells\Human\Thunderclap\ThunderClapCaster.mdl
Special Effect - Destroy (Last created special effect)
-------- creates this terrain types dummy --------
Unit - Create 1 dummy grass for Neutral Passive at Point_checker_confirm[(Integer A)] facing Default building facing degrees
-------- * --------
Set Life_of_terrain[(Integer A)] = 0
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
And - All (Conditions) are true
Conditions
(Terrain type at Point_checker_confirm[(Integer A)]) Equal to Lordaeron Summer - Rock
Life_of_terrain[(Integer A)] Greater than or equal to 60
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Weakening_Option_Check Equal to 1
Then - Actions
Environment - Change terrain type at Point_checker_confirm[(Integer A)] to Lordaeron Summer - Grass using variation -1 in an area of size 1 and shape Circle
Else - Actions
Environment - Change terrain type at Point_checker_confirm[(Integer A)] to Felwood - Poison using variation -1 in an area of size 1 and shape Circle
Special Effect - Create a special effect at Point_checker_confirm[(Integer A)] using Abilities\Spells\Human\Thunderclap\ThunderClapCaster.mdl
Special Effect - Destroy (Last created special effect)
Unit - Create 1 dummy Rock for Neutral Passive at Point_checker_confirm[(Integer A)] facing Default building facing degrees
-------- * --------
Set Life_of_terrain[(Integer A)] = 0
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
And - All (Conditions) are true
Conditions
(Terrain type at Point_checker_confirm[(Integer A)]) Equal to Lordaeron Summer - Grassy Dirt
Life_of_terrain[(Integer A)] Greater than or equal to 15
Then - Actions
Environment - Change terrain type at Point_checker_confirm[(Integer A)] to Felwood - Poison using variation -1 in an area of size 1 and shape Circle
Special Effect - Create a special effect at Point_checker_confirm[(Integer A)] using Abilities\Spells\Human\Thunderclap\ThunderClapCaster.mdl
Special Effect - Destroy (Last created special effect)
Unit - Create 1 dummy grassy dirt for Neutral Passive at Point_checker_confirm[(Integer A)] facing Default building facing degrees
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
And - All (Conditions) are true
Conditions
(WaitUnit[(Integer A)] is in WaitGroup) Equal to True
(WaitUnit[(Integer A)] is alive) Equal to False
Then - Actions
-------- * --------
Set WaitTime[(Integer A)] = 0
-------- * --------
Unit Group - Remove WaitUnit[(Integer A)] from WaitGroup
-------- * --------
Set WaitUnit[(Integer A)] = No unit
-------- * --------
Else - Actions
-------- Warning: caution when modifing this area --------
For each (Integer A) from 1 to Missile_count, 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
(Missile_unit[(Integer A)] is in Missile_group) Equal to True
(Missile_unit[(Integer A)] is alive) Equal to True
Then - Actions
-------- * --------
Set Temp_Point_3[(Integer A)] = (Position of Missile_unit[(Integer A)])
-------- * --------
Set Temp_point = (Position of Missile_unit[(Integer A)])
-------- This controlls it's speed --------
-------- and how it's locked onto beacons --------
-------- Documentation on editing on the first if then else --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Unit-type of Missile_unit[(Integer A)]) Equal to Peircing Missile
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Set_Beacon[(Integer A)] Equal to No unit
Then - Actions
-------- change the conditions 'number' as it were to increase and decrease the lockon AOE --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Number of units in (Units within 400.00 of Temp_Point_3[(Integer A)] matching ((Unit-type of (Matching unit)) Equal to Anti terrain beacon))) Equal to 0
Then - Actions
-------- controlls the missiles Speed --------
Set Temp_point_4[(Integer A)] = (Temp_Point_3[(Integer A)] offset by 2.00 towards (Facing of Missile_unit[(Integer A)]) degrees)
-------- * --------
Unit - Move Missile_unit[(Integer A)] instantly to Temp_point_4[(Integer A)]
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Set_Beacon[(Integer A)] Not equal to No unit
Then - Actions
-------- * --------
Set Temp_Point_2[(Integer A)] = (Position of Set_Beacon[(Integer A)])
-------- Alter the number in this to change the missiles speed --------
Set Temp_point_4[(Integer A)] = (Temp_Point_3[(Integer A)] offset by 2.00 towards (Facing of Missile_unit[(Integer A)]) degrees)
-------- movement and cornering( * ) --------
Unit - Move Missile_unit[(Integer A)] instantly to Temp_point_4[(Integer A)], facing (Angle from Temp_Point_3[(Integer A)] to Temp_Point_2[(Integer A)]) degrees
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Unit-type of Missile_unit[(Integer A)]) Equal to Anti Terrain Missile
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Set_Beacon[(Integer A)] Equal to No unit
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Number of units in (Units within 400.00 of Temp_Point_3[(Integer A)] matching ((Unit-type of (Matching unit)) Equal to Anti terrain beacon))) Equal to 0
Then - Actions
Set Temp_point_4[(Integer A)] = (Temp_Point_3[(Integer A)] offset by 1.00 towards (Facing of Missile_unit[(Integer A)]) degrees)
Unit - Move Missile_unit[(Integer A)] instantly to Temp_point_4[(Integer A)]
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Set_Beacon[(Integer A)] Not equal to No unit
Then - Actions
Set Temp_Point_2[(Integer A)] = (Position of Set_Beacon[(Integer A)])
Set Temp_point_4[(Integer A)] = (Temp_Point_3[(Integer A)] offset by 1.00 towards (Facing of Missile_unit[(Integer A)]) degrees)
Unit - Move Missile_unit[(Integer A)] instantly to Temp_point_4[(Integer A)], facing (Angle from Temp_Point_3[(Integer A)] to Temp_Point_2[(Integer A)]) degrees
type -weaken
this will activate terrain weakening. so it doesn't go straight from
rock -> BG
it'll go:
Rock -> Grass -> Grassy dirt -> BG
then recovery will do the same thing.
BG -> grassy dirt -> Grass -> rock
Normal:
Darkgrass: unbreakable
Rock: Taken down a layer/destroyed
Grass: (same as above)
Grassy dirt: (same as above)
Piecre:
Darkgrass: Utterly destroyed
Rock: (same as above)
Grass: (same as above)
Grassy dirt: (Same as above)
documentation has been included.
Credit goes to Offgrpahic for helping making this system mui.
V1.55
Homing Beacons added
More documentation
Turn on/off command
Allowed the pierce missile to destroy the useually unbreakable terrain
V1.40
Removed an unused variable
Added movement detector
V1.35
Added peicing missile (player 1's seige tank)
Differant units now have differant weights (seige tank weight 3 times as much as footman)
V1.25
Added anti terrain missile
Added Weakening terrain option
Added some more documentation
Terrain cannot me instantyl destroyed as soon as it recovers.
Hope you enjoy it!
Give Credit if you use this system please.
21:54, 21st Mar 2010
The_Reborn_Devil:
Hmm, finally an original idea :D
The triggering looks good and this is indeed useful for 2D and maybe even 3D maps. Maybe make it so terrain isn't "healed" when people are standing on it, but that's not...
Hmm, finally an original idea
The triggering looks good and this is indeed useful for 2D and maybe even 3D maps. Maybe make it so terrain isn't "healed" when people are standing on it, but that's not required.
(+) something new.
(+) leakless(at least wat ive seen.)
(+) MUI , MPI.
(+) good documentation / readability.
--------------------------------------
couldnt really tell any bad parts GJ 5/5 from me
you set which terrains area breakble, so technically you can make it work on any terrain but it doesn't have to.
DooDads are not effected by terrain break.
I shall also post what i'm adding here for the system as referance:
Terrain weakening (basically goes rock, grass, grassydirt, bg, this will be a second option for it and will be able to be set via typing '-weaken' (completed)
Anti terrain missile (fires a missile which will continuall move, if it comes into contact with a terrain other than you bg (will work with multiple bg's) it will blow up and destroy that terrain. (Completed)
Peicing missile (very simple edit, baisically peicing missile goes through the terrain (if this is used at the same time as the weaken it will just mange to go through 1, if used wihtout it will destroy 4, (lasts only so long untill death) (Completed)
Differant units have differant weights (Completed)
oh gratz, now were gonna get another swarm of these. first, someone made a jump system and theres a million of them now. second, inventories, then missiles, then combats, then projectiles with arcs... now where gonna have a million of these.
OMFG 4/5! very original. you sir, deserve a cookie.
Mind explaining what wasn't working always? (yes I know the missiles are pretty terrible although given a few minutes I'd have them working much better, but they are also extras and not really part of the "system") the system itself has always worked. on a side note: if it /wasn't/ useful then I wouldn't have been asked to have made it in the first place
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.