[Template / Terrain] Environmental Effects

Level 12
Joined
Oct 12, 2016
Messages
760
There's something I have not seen on Hive as of yet: the use of terrain-based environmental effects.

What do I mean? Well, I'm glad you asked!

You know how in certain MOBA-styled games you can hide in bushes? Ever wonder why the lava in some maps doesn't burn your units? Well, I want to make these types of things a reality with this idea thread, and introduce some design considerations for map makers!
First, this is not a terraining guide by any means. If anything, this is just a list of compiled ideas to add depth and strategic value to you terrain. I am assuming you know how to make a decent looking map, with or without Blizzard cliffs.
Some supporting tutorials related to this:

Speaking of cliffs, idea #1:
It's over Anakin, I've got the high ground!

One of the biggest problems for map makers: to Blizzard cliffs or not to Blizzard cliffs?
That is the question.
With Blizz cliffs, you get that juicy height missile defense (25% chance to miss) and line of sight advantages... but, they look fugly as uck. Naturally, any map maker worth their salt would resort to using the raised tool with doodads and pathing blockers. But, you still would like that height advantage, right?

ENTER STAGE RIGHT: the ramp tool.
Seriously! That's all this'll take. Now, I found 2 ways to go about this:

1) Make your raised terrain, mountains, rivers, valleys, etc. then pave over the raised strategic bits with square* blocks of +1 cliff terrain;** and finally use the ramp tool to circumvent the block of raised terrain with a ramp.
2) Plot out the raised bits first, still being square-ish*, mark the end points with some kind of doodad or tile, then again circumvent the whole thing with a ramp.


As long as you don't have Apply Texture selected, it will keep the tiles as you make the ramps and vantage points. Also note, for this to work properly, disable Advanced -> Enforce Water Height Limits**.



*Square is relative. You can get away with some diagonal terrain. Make sure the terrain is pathable after making the ramps, and liberally use the undo button when needed.
**I am assuming you make your terrain starting with shallow water and raising it for a rolling shores effect. ALWAYS back up your map when disabling Enforce Water Height Limits in case something goes horribly wrong.


With cliffs, inevitably comes the rushing tides. and so idea #2:
Water, water, everywhere... but why can I still sprint?

To be fair, this would not be for melee maps where balance is an issue. Or, could it? These ideas may make for an interesting altered melee where tactics should be considered when playing specific terrains!

But I digress. Ever wonder how a lumbering knight was able to gallop at top speed through the shallows? Highly unrealistic, right? I want as much realism as possible in my fantasy video games! So, how do we slow down movement speed in water? Here are some suggestions:

1) Invisible dummy units with negative movement auras.
Now, I don't recommend this if you have items or abilities that use said auras. ALTHOUGH, since the faster movement speed aura would cancel out the negative movement speed aura, this would make for some interesting units or heroes that simply ignore water movement penalties. These dummy units won't require any triggers, and could simply use no model or the "Invisible Platform" doodad.
For convenience, I have found that an aura's area of roughly 200 to 175 covers 1 square of the largest grid in the world editor.
2) Regions with dummy casters. This method will require many regions, a pre-defined dummy caster unit placed on the map, a dummy spell to continuously cast a "slow" effect on units entering these regions, a unit group to store units entering these regions, and a periodic time event loop to check if these units are in said regions with a slow buff.
This means you don't have to worry about aura conflicts, but comes at the cost of game performance.

If you don't want boats, mechanical units, and (logically) air units to be affected, then simply filter them out in both techniques with target types.



What's the opposite of water? Fire! #3:
Do you smell barbecue?

This is just one of those things I refer to as "the details." If a unit stands on a fire pit, will it burn? If it stands on lava, will it melt? Logic dictates: YES in fiction or non-fiction. The simplest and best approach to do this? Dummy units with Permanent Immolation.

In fact, you got a fire pit? Change that house warming gift into the "Trashed Firepit," give it a walkable pathing in the object data (like, Circle of Power), make a dummy use that doodad which looks like the Cinematic fire, give it Permanent Immolation (the red kind) and simply place it on top of the fire pit.
Now, you can expect your grunts to be roasting their gonads every time they step over the thing!

Lava? Same idea, but make it realistic. You can always make a custom Permanent Immolation ability, change the effects, and make it do more damage more frequently or something. Use Lava Cracks, Fire, or the Invisible Platform as a model.
And again, no triggering required.



What does fire burn? Bushes! #4:
You can't see me!

So, on to that first thing mentioned in the thread about non-descript general MOBA games. This can be more... complicated. Therefore, allow me to give a demonstration!
I've tested this with casting a dummy Invisibility ability on units entering a region and... it doesn't really work. This tends to make the units just flicker between visible and invisible regardless of the duration.
I found the best way to do this is by adding Permenant Invisibility to units that are hiding.
Now, this can be applied in many ways:

  • Do you want the unit to be invisible while moving, or no?
  • Do you want the unit to be invisible while attacking, or not?
Either way, you'll just have to modify the Permanent Invisibility ability depending on what you want. If you don't want hidden units to auto-acquire targets, then give them Akama's Shadowmeld ability as well.
Here are some sample triggers that I use to hide units in bushes:

  • Detect Hidden
    • Events
      • Unit - A unit enters Bushes 1 <gen>
      • Unit - A unit enters Bushes 2 <gen>
      • Unit - A unit enters Bushes 3 <gen>
    • Conditions
      • ((Triggering unit) is A ground unit) Equal to True
      • ((Triggering unit) is A structure) Equal to False
    • Actions
      • -------- Adds each unit of type specified in the conditions to the HiddenGroup, then turns on the periodic timer. Add sub-regions for hiding in the events --------
      • Unit Group - Add (Triggering unit) to HiddenGroup
      • Trigger - Turn on Hidden Loop <gen>
  • Hidden Loop
    • Events
      • Time - Every 0.50 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in HiddenGroup and do (Actions)
        • Loop - Actions
          • -------- Checks if units in HiddenGroup are in the bushes or dead. Removes from group if not. Add sub-regions for hiding here --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Or - Any (Conditions) are true
                • Conditions
                  • ((Picked unit) is dead) Equal to True
                  • And - All (Conditions) are true
                    • Conditions
                      • (Bushes 1b <gen> contains (Picked unit)) Equal to False
                      • (Bushes 2b <gen> contains (Picked unit)) Equal to False
                      • (Bushes 3b <gen> contains (Picked unit)) Equal to False
            • Then - Actions
              • Unit Group - Remove (Picked unit) from HiddenGroup
              • Unit - Remove Hiding (Dummy) from (Picked unit)
            • Else - Actions
              • -------- Checks the current order of each "Hidden" unit. Does nothing if moving or attacking --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Or - Any (Conditions) are true
                    • Conditions
                      • (Current order of (Picked unit)) Equal to (Order(move))
                      • (Current order of (Picked unit)) Equal to (Order(smart))
                      • (Current order of (Picked unit)) Equal to (Order(attack))
                • Then - Actions
                  • Unit - Remove Hiding (Dummy) from (Picked unit)
                • Else - Actions
                  • -------- Makes the Picked Unit invisible --------
                  • Unit - Add Hiding (Dummy) to (Picked unit)
      • -------- Turn off timer if nothing's hiding to reduce possible lag --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in HiddenGroup) Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
Take note: for each hiding location, there are 2 regions. In this example, region "Bushes 1b" is bigger than and covers region "Bushes 1." This example also prevents moving or attacking units from remaining invisible in hiding spots.

This is all I've got for now, and I can provide some screenshots or something later (maybe... :p).
Feel free to add your own ideas for environmental effects below!
 
Last edited:
Level 25
Joined
Apr 6, 2010
Messages
2,968
You'd think there'd be a way to directly apply buffs without going through dummy casters by now.


Other terrains:
Tall grass: Slows units, gives them Evasion or day and night Shadowmeld for ambushes.

Paved road: Increases movement speed.

Forest: Slows units, gives Evasion and Curse buff.

Sand: Slows non-mounted units.

Ice: May stun units or make them slide.

Mud: Reduces Magic damage.
 
Last edited:
Level 8
Joined
Mar 19, 2017
Messages
248
With triggers the possibilities and the smoothness factor is endless. If i were mapping a strategy map or rts i will also not even add buffs (you can only view 8 buffs at any given time), but directly pointing enviromental modifiers as inherent rules of the game. I would create my own "IsUnitInLava" based on GetTerrainType/CliffLevel and periodic checks for units that are registered on the strategic enviroment system. Note that this is less performance heavy than ie. creating 1 dummy unit per terrain tile and issuing spell casts. Callback functions are very light. Atleast is that what i know...
But i'm not really into those maps, atleast as a creator, so forget what i just said.

But resigning to normal abilities and dummy units i think is even more rewarding.

What about a "cover" or "unit near a wall" modifier. Not technically a terrain based modifier tho.
But i'm pointing out not just add ie. devotion aura to the wall. You gotta go big here.
I'm talking about tracking whenever a unit is behind a wall while the attacker is directly in front and in the other side. This would need triggers, but you can simply use a damage detection system and check if the damage target is near a certain destructable/unit (the walls as units, for example if they are buildable) type while the source has a certain facing angle. That *should* be enough i guess, altough it appeared as complicated.
Going for this can expand the use of walls, for not just beign punching bags. Some units could also drop barricades or wall type units to revolve around such feature even more.
 
Level 6
Joined
Aug 28, 2015
Messages
213
I always thought about this kind of sysyem but I always get to big about it like having wet units taking more electrical damage and creating steam when say someone castes flamestrike into water and you can use the steam to hide inside after it cooled down.
I think the phoenix fire ability could be really handy to track people in range of specific areas(of course without damage and a .03 sec time) and then use the triggers to check the units state and give it a flag or use the regions just to add the unit to a test group to check its state.
Say something like:
Placing at every lava tile a unit casting trigger ability(phoenix fire)
A unit starts the effect of trigger ability.
Unit being cast not in test group, add unit being cast to test group.
Periodic test group is not empty check for every unit if unit terrain tile position of unit lava then damage unit.
If unit walkable terraining of position of unit equals to amphibic, then add unit slow. ect...
 
Level 12
Joined
Mar 24, 2011
Messages
1,082
Tall grass v2: The very edge of the grassy area acts as a cliff, allowing a unit inside to see without being seen, and allows them to shoot while getting missed.
This could be made by an actual cliff :|
Make cliff, ramps all around, flatten to same level, grass doodads all over and around.
Done.

Would have absolutely the same bonuses as a cliff though...

Regards
-Ned
 
Level 9
Joined
Feb 24, 2018
Messages
343
Swamp - scattered dummies with tiny auras. A unit that enters the aura's effect is rapidly sucked underground (i.e. height change) and is gone along with corpse and items. Optionally a bubbles doodad may be placed where a unit died that way, provided it isn't too visible.
Mud or Quicksand - if a unit stays in one place for over X seconds, it is pulled knee-dip underground and its speed reduced to absolute minimum.
Dry Field or Sulfur Cloud - in addition to any visibility modifiers, if a caster or a target of a fire spell is in the region, the whole region ignites, damaging everyone caught in it.
Cave - not air pathable; Artillery type attacks and spells like Earthquake drop stalactites and rock chunks at random points.
 
Last edited:
Top