This is now live on NA. Please PM me or email to my gmail address with this handle if you find any bugs. Thanks!
(old: ) + Show Spoiler +
+ Show Spoiler [old post title] +
+ Show Spoiler +
+ Show Spoiler +
+ Show Spoiler +
[M] (4) WIP ??? -- help me decide!
+ Show Spoiler +
Well my kids' birthday party didn't take quite as much of the weekend as I had thought it would. I've done what I think is all I am going to do with the textures, and I've placed all of my Protoss Decal doodads around the tower. If anyone knows if or how to change the doodad color on the fly I'd appreciate it. So I'm going to place this at version 0.85 now. I've put a new screenshot up showing vast artistic ability. Once step closer to publishing...
+ Show Spoiler +
This map is still a work in progress, I need to figure out what I am going to do with the textures and change around the health/armor settings on some the rocks. This is now at version 0.8 since I think I've finalized the triggers. Yeay! For anyone who is interested I'm going to post below what I did to get the vision effects I have. Also, I hope more people take the poll, but I'm starting to lean toward "Insanity" as the name of the map -- mainly due to trying to figure out these triggers!.
+ Show Spoiler +
This map is a work in progress, I'm going to say it's current state right now is version 0.7 since I still need to figure out the textures and since I need to finalize the triggers. Oh yeah, and it needs a name -- please take the poll!
Creation Details:
+ Show Spoiler +
This map has a lot going on.
First of all it starts with an idea I had back in Broodwar once I saw that the custom map editors could make backward ramps. I have had this idea for a long time, but without all four directions of ramp I could never do it before. Basically the idea is to have a spiral of levels into an area (e.g. the main base).
In Broodwar, certain tilesets had up to four levels of terrain (whereas in SC2 I believe there are only ever three). So I made a map where getting in and out of the main base required going all the way around the base up the various levels. But then I thought, why stop there, why not make the main base look somewhat like a volcano where the main base is actually on a level below the ridge, so I lowered the middle a tier and added an up-ramp to get out of the base.
And then I thought, "well, what if we give a choice of directions from which to come and go," so I made the sprial happen on all four sides. But then, the problem was that the army could simply head down the ramps in one direction and bypass having to take the long walk altogether.
So then I thought, "what about low resource mineral patches blocking the way like in proleague maps," so I added those to force an army to have to go the long way until the patches were mined out. It was at that point that I had my base formation.
Come SC2, we now have 8 directions of ramp... but only three levels of terrain. Oh well! This is the formation of the main base.
The actual base is on the middle tier but you have to go up one level and then down to the first level going almost half way around the base to get out. There are potentially eight pathways from the middle of the base to the main part of the map, but 6 of these are blocked with destructible rocks at varying levels on the ramps.
There are also low resource mineral patches forcing the long walk on all paths. The ones on the top level require 20 trips to clear, the lower level ones require 10. It will be a point of strategy whether to clear rocks or not or to clear minerals or not.
The main mineral setup is unconventional. All of the minerals/gas are as close as possible to the base (no far patches) but are evenly spread in a circle around the base. The closeness is to offset the fact that workers try to find a patch to harvest will take longer to switch.
The two gas point fromt he base to the two ramps that are clear. One of the clear ramps goes toward the center, the other goes toward the far corner of the quadrant the base is in. The latter ramp leads to the natural expansion.
The natural expansion is a bit far from the main without mining the low resource mineral patches that are in the way. Because of this, the main attack route into the natural is partially blocked by a number of destructible rocks that can be walled off between in the early game (later the rocks can simply be broken to avoid destroying buildings (if they can't move)). + Show Spoiler +
The third expansion is also behind the base on the other side of some more destructible rocks (which also conceal another rich vespene geyser), but this base is a bit more difficult to get to since you would either have to A) break some rocks, B) clear some minerals, or C) travel all the way around your main's land formation. This base has fewer minerals and as said only one rich gas, but is also relatively safe.
Another potential third, which is not nearly as safe due to its being completely open, is a gold expansion near the edge of the map in between the two bases. This base also has a peculiar layout, one that is designed to bring a degree of safety due to being "invisible" while retaining the ability to scout incoming attacks.
First of all any base being started here will be hidden by two rows of line of site blockers. The outermost row will hide the entire "base" including the initial creep from a hatchery. The innermost row will hug the edge of the building.
There are two far gold patches that are visible from within the outermost row so that harvesters can be clicked onto one of these to start them mining (This dynamic didn't quite work out as I had hoped since the way SC2 fog of war works allows you to click on them even though there is no line of sight to them... oh well). Immediately next to and between these two patches is a Xel Naga Watchtower which provides sight to the rest of the mineral patches and vespene geysers (not rich) as well as a good deal outside the outermost row of line of sight blockers to see potential incoming attacks.
Since holding the tower is a part of the mining process, the two far patches will each have 300 minerals more that is standard, and the 2 close patches will have 300 less each making the total standard, but making it so that the watchtower will almost be gauanteed to be held for as long as the base is mining, including (mostly likely) immediately after the base is mined out.
The last section of interest is the middle which has two main features.
First of all, there are four mini watchtowers that are covered by destructible rocks. Once freed of the rocks, these towers can be occupied to gain vision. However, the way in which these towers give vision is slightly different than normal. Each tower can only be held by one army just like normal, but they do not give vision of the area that they are in. Instead, they give vision around the large Xel Naga tower in the very center of the map (which cannon be occupied in the ordinary way).
This large Xel Naga tower is connected to all four of the smaller towers (the ones covered by rocks) in the center and will give vision to any army who controls one of these towers. Additionally, if an army controls more than one of these towers, additional sight range is given emminating from the large tower. Holding all four towers will give vision of an enormous portion of the map up to and including part of the high ground just outside of the main.
The other interesting feature in the middle are the four island expansions. These expansions are just large enough to mine and hold minimal defenses. Vision is blocked due to high ground and cannot be reached by reaper/colossus because it has two tiers difference. Vision must be obtained by air or by the extended range of the large tower. Holding two small towers will just give vision of the edge of the high ground and holding three will give vision of whether or not a base is there. These "islands" (plateaus?) have desructible rocks to prevent Terran from expanding here too easily.
I cannot wait to see what kind of hilarious strategies are developed on this map, I think there is certainly something here for all races to abuse.
First of all it starts with an idea I had back in Broodwar once I saw that the custom map editors could make backward ramps. I have had this idea for a long time, but without all four directions of ramp I could never do it before. Basically the idea is to have a spiral of levels into an area (e.g. the main base).
In Broodwar, certain tilesets had up to four levels of terrain (whereas in SC2 I believe there are only ever three). So I made a map where getting in and out of the main base required going all the way around the base up the various levels. But then I thought, why stop there, why not make the main base look somewhat like a volcano where the main base is actually on a level below the ridge, so I lowered the middle a tier and added an up-ramp to get out of the base.
And then I thought, "well, what if we give a choice of directions from which to come and go," so I made the sprial happen on all four sides. But then, the problem was that the army could simply head down the ramps in one direction and bypass having to take the long walk altogether.
So then I thought, "what about low resource mineral patches blocking the way like in proleague maps," so I added those to force an army to have to go the long way until the patches were mined out. It was at that point that I had my base formation.
Come SC2, we now have 8 directions of ramp... but only three levels of terrain. Oh well! This is the formation of the main base.
The actual base is on the middle tier but you have to go up one level and then down to the first level going almost half way around the base to get out. There are potentially eight pathways from the middle of the base to the main part of the map, but 6 of these are blocked with destructible rocks at varying levels on the ramps.
There are also low resource mineral patches forcing the long walk on all paths. The ones on the top level require 20 trips to clear, the lower level ones require 10. It will be a point of strategy whether to clear rocks or not or to clear minerals or not.
The main mineral setup is unconventional. All of the minerals/gas are as close as possible to the base (no far patches) but are evenly spread in a circle around the base. The closeness is to offset the fact that workers try to find a patch to harvest will take longer to switch.
The two gas point fromt he base to the two ramps that are clear. One of the clear ramps goes toward the center, the other goes toward the far corner of the quadrant the base is in. The latter ramp leads to the natural expansion.
The natural expansion is a bit far from the main without mining the low resource mineral patches that are in the way. Because of this, the main attack route into the natural is partially blocked by a number of destructible rocks that can be walled off between in the early game (later the rocks can simply be broken to avoid destroying buildings (if they can't move)). + Show Spoiler +
Because this expansion area is so cramped and because extra workers may be needed to clear pathways, there is only one gas at the this expansion and it is a rich geyser. <-- This actually got changed to two regular gas, since this expansion area actually seemed to have enough room. Redacted.
The third expansion is also behind the base on the other side of some more destructible rocks (which also conceal another rich vespene geyser), but this base is a bit more difficult to get to since you would either have to A) break some rocks, B) clear some minerals, or C) travel all the way around your main's land formation. This base has fewer minerals and as said only one rich gas, but is also relatively safe.
Another potential third, which is not nearly as safe due to its being completely open, is a gold expansion near the edge of the map in between the two bases. This base also has a peculiar layout, one that is designed to bring a degree of safety due to being "invisible" while retaining the ability to scout incoming attacks.
First of all any base being started here will be hidden by two rows of line of site blockers. The outermost row will hide the entire "base" including the initial creep from a hatchery. The innermost row will hug the edge of the building.
There are two far gold patches that are visible from within the outermost row so that harvesters can be clicked onto one of these to start them mining (This dynamic didn't quite work out as I had hoped since the way SC2 fog of war works allows you to click on them even though there is no line of sight to them... oh well). Immediately next to and between these two patches is a Xel Naga Watchtower which provides sight to the rest of the mineral patches and vespene geysers (not rich) as well as a good deal outside the outermost row of line of sight blockers to see potential incoming attacks.
Since holding the tower is a part of the mining process, the two far patches will each have 300 minerals more that is standard, and the 2 close patches will have 300 less each making the total standard, but making it so that the watchtower will almost be gauanteed to be held for as long as the base is mining, including (mostly likely) immediately after the base is mined out.
The last section of interest is the middle which has two main features.
First of all, there are four mini watchtowers that are covered by destructible rocks. Once freed of the rocks, these towers can be occupied to gain vision. However, the way in which these towers give vision is slightly different than normal. Each tower can only be held by one army just like normal, but they do not give vision of the area that they are in. Instead, they give vision around the large Xel Naga tower in the very center of the map (which cannon be occupied in the ordinary way).
This large Xel Naga tower is connected to all four of the smaller towers (the ones covered by rocks) in the center and will give vision to any army who controls one of these towers. Additionally, if an army controls more than one of these towers, additional sight range is given emminating from the large tower. Holding all four towers will give vision of an enormous portion of the map up to and including part of the high ground just outside of the main.
The other interesting feature in the middle are the four island expansions. These expansions are just large enough to mine and hold minimal defenses. Vision is blocked due to high ground and cannot be reached by reaper/colossus because it has two tiers difference. Vision must be obtained by air or by the extended range of the large tower. Holding two small towers will just give vision of the edge of the high ground and holding three will give vision of whether or not a base is there. These "islands" (plateaus?) have desructible rocks to prevent Terran from expanding here too easily.
I cannot wait to see what kind of hilarious strategies are developed on this map, I think there is certainly something here for all races to abuse.
Map Pics:
+ Show Spoiler +
Overview
+ Show Spoiler +
Analyzer pics (Please note that these analyzer pictures were taken with rocks covering the path-blocking minerals so that they would not be assumed to be the Natural/Third since that was what was happening. There are no rocks covering these on the real map.)
+ Show Spoiler +
(Also, the watchtowers are not showing up, I think because they are custom units.)
+ Show Spoiler +
Old:
Analyzer pics (Please note that these analyzer pictures were taken with rocks covering the path-blocking minerals so that they would not be assumed to be the Natural/Third since that was what was happening. There are no rocks covering these on the real map.)
+ Show Spoiler +
(Also, the watchtowers are not showing up, I think because they are custom units.)
Map Specifications:
- Size -- 182x182 playable (208x208 full)
- # Players -- 4
- Main Locations -- Inside 1:30 / Inside 4:30 / Inside 7:30 / Inside 10:30
- # Bases -- 20
- 8x 8min, 2gas {main & natural} (standard min/gas amount)
- 8x 3min {main high ground} (100 min count)
- 8x 3min {main outer mind ground} (50 min count)
- 4x 6min, 1rich gas {third} (standard min/gas amount)
- 4x 6rich min, 2gas (standard avg. min amount, standard gas amount)
- 4x 4rich min, 2rich gas {island} (double min/gas amount)
- 4x 1rich gas {obscured by rocks} (double gas amount)
- 8x 8min, 2gas {main & natural} (standard min/gas amount)
- # Xel'Naga Watchtowers -- 9
- "Major" towers -- 4 -- at outer 12/3/6/9 gold bases -- Max vision, reduced capture radius
- "Minor" towers -- 4 -- at center 1:30/4:30/7:30/10:30 -- Triggers vision at "Massive" tower, reduced capture radius
- "Massive" tower -- 1 -- at dead center -- "Triggered" by "Minor" tower to have increasing vision, increased capture radius (non-exclusive), gives the effect of gaining strength with each captured "Minor" tower
- "Major" towers -- 4 -- at outer 12/3/6/9 gold bases -- Max vision, reduced capture radius
- Line of Sight Blockers -- 12
- Surrounding outer 12/3/6/9 gold bases
- Surrounding outer 1:30/4:30/7:30/10:30 destructible rocks
- Surrounding inner 12/3/6/9 island gold bases
- Surrounding outer 12/3/6/9 gold bases
- Destructible Rocks -- A LOT (104?)
- Covering each "Minor" Watchtower -- 1
- Covering corner double-amount rich vespene -- 1
- Blocking path between Natural and Third -- 9
- Blocking various Main base ramps -- 6
- Obscuring enterance to Natural -- 4
- Obscuring enterance to Third -- 5
- Covering each "Minor" Watchtower -- 1
- Unpathable terrain -- 1 -- the "ditch" that the "Massive" tower is in has ground pathing blockers
"Throwing Vision" Triggers
+ Show Spoiler +
(This is not simply what to do to cast vision somewhere else on the map though the way to do that can be easily deduced from this code. The premise here is that there is a super ancient massive watchtower that is very powerful but very weak. There are mini helper towers located near the edge of its maximum vision range [which coincidentally is the radius of the largest revealer that can be created centered upon the massive tower] which actually power the vision capability of the massive tower. Each captured mini tower increases the sight that is centered upon the massive tower.)
Data Module (I use Table View mostly):
- Duplicate Xel'Naga Tower twice; check everything except the subsections for Footprints and Movers (these will be inherited -- you may decide you want a smaller footprint for the minor tower if you decrease its size like I did, but I left the footprint as it was anyway).
- Rename all of the duplicated parts to something appropriate. I chose suffix everything with "Minor" and "Massive", so "Xel'Naga Tower Minor", "Tower Capture Massive", etc.
- Go to the "Xel'Naga Tower (Unnamed) Massive" under "Models" and change the "Model" to "Assets/Buildings/Neutral/XelNagaTower/XelNagaTower.m3". Then change all values under "Scale Maximum" and "Scale Minimum" to the same value. I picked "3" as the value. Do the same for "Xel'Naga Tower (Unnamed) Minor" -- I used "0.5" for this one.
- Go to "Tower Capture Massive" under "Abilities". What I changed here was the "Auto Cast Range", "Stats - Flags", and "Stats - Range". (I'm actually not sure what the difference is between the two range values but I just followed Blizzard's lead and kept these the same value while adding up to the total range I wanted.) Change the two range values to "32" and under the flags remove "Exclusive" and "Same Cliff Level". (This way any ground unit on any level can catch a glimpse of the Massive tower. If you want to change the kinds of units that can catch a glimpse, say air units make changes under "Ability - Target Filters".)
- Go to "Tower Capture Minor" and change the two range values to "0.5" and leave the rest.
- Go to "Xel'Naga Tower Massive" and change the "Stats - Sight Radius" to 2. For "Xel'Naga Tower Minor" change the "Stats - Sight Radius" to 1.
Terrain Module:
- Place a "Xel'Naga Tower Massive" where you want.
- Place a circular Region, and change its center point to the center point of the Massive Tower; change its radius to 16.
- Place three more Regions like this with radii of 32, 48, and 64 centered on the same spot.
- Place four "Xel'Naga Tower Minor" inside but near the edge of the largest region.
Triggers Module:
Global Variables:
SightRegions = No Region <Region[4]>
MinorTowers = No Unit <Unit[4]>
PlayerSightLevel = 0 <Integer[4]>
PlayerRevealer = No Revealer <Revealer[4]>
Playing = 0 <Integer[4]>
Counter = 0 <Integer>
Triggers:
Melee Initialization
PlayerLeaves
MassiveTowerSightManipulator
- Under Melee Initialization add the follow below the standard triggers (the positions of your towers and names of your regions may be different; you can also rename the varibales if you don't think they make sense to you):
Variable - Set MinorTowers[1] = Xel'Naga Tower Minor [84.00, 84.00]
Variable - Set MinorTowers[2] = Xel'Naga Tower Minor [84.00, 124.00]
Variable - Set MinorTowers[3] = Xel'Naga Tower Minor [124.00, 84.00]
Variable - Set MinorTowers[4] = Xel'Naga Tower Minor [124.00, 124.00]
Variable - Set SightRegions[1] = Region 001
Variable - Set SightRegions[2] = Region 002
Variable - Set SightRegions[3] = Region 003
Variable - Set SightRegions[4] = Region 004
General - For each integer Counter from 1 to 4 with increment 1, do (Actions)
Actions
General - If (Conditions) then do multiple (Actions)
If Then Else
General - Else if (Conditions) then do (Actions)
Else If
(Status of player Counter) == Playing
Then
Variable - Set Playing[Counter] = Counter
- The PlayerLeaves trigger is very simple, I'm not sure if this is necessary per se, but I did this for optimization if not error handling:
PlayerLeaves
Events
Player - Player Any Player leaves the game with Any
Local Variables
Conditions
(Status of player (Triggering player)) != Playing
Actions
Variable - Set Playing[(Triggering player)] = 0
- MassiveTowerSightManipulator (this is where all of the real work gets done:
MassiveTowerSightManipulator
Events
Timer - Every 0.0625 seconds of Game Time
Local Variables
PlayerCounter = 0 <Integer>
TowerCounter = 0 <Integer>
TrigTower = MinorTowers[TowerCounter] <Unit>
AllValidUnits = (Empty unit group) <Unit Group[4]>
TotalValidUnits = 0 <Integer>
PlayerTowersOccupied = 0 <Integer[4]>
OldRevealer = No Revealer <Revealer>
Conditions
Actions
General - For each integer TowerCounter from 1 to 4 with increment 1, do (Actions)
Actions
Variable - Set TrigTower = MinorTowers[TowerCounter]
Variable - Set TotalValidUnits = 0
General - For each integer PlayerCounter from 1 to 4 with increment 1, do (Actions)
Actions
General - If (Conditions) then do multiple (Actions)
If Then Else
General - Else if (Conditions) then do (Actions)
Else If
Playing[PlayerCounter] > 0
Then
Variable - Set AllValidUnits[PlayerCounter] = (Any units in (Region((Position of TrigTower), 2.0)) owned by player PlayerCounter matching Required: Ground; Excluded: Self, Structure, Missile, Uncommandable, Buried, Under Construction, Dead, Hidden, with at most Any Amount)
Variable - Set TotalValidUnits = (+ (TotalValidUnits, (Number of Living units in AllValidUnits[PlayerCounter])))
General - For each integer PlayerCounter from 1 to 4 with increment 1, do (Actions)
Actions
General - If (Conditions) then do multiple (Actions)
If Then Else
General - Else if (Conditions) then do (Actions)
Else If
Playing[PlayerCounter] > 0
Then
General - If (Conditions) then do multiple (Actions)
If Then Else
General - Else if (Conditions) then do (Actions)
Else If
TotalValidUnits > 0
(Number of Living units in AllValidUnits[PlayerCounter]) == TotalValidUnits
Then
Variable - Set PlayerTowersOccupied[PlayerCounter] = (+ (PlayerTowersOccupied[PlayerCounter], 1))
General - For each integer PlayerCounter from 1 to 4 with increment 1, do (Actions)
Actions
General - If (Conditions) then do multiple (Actions)
If Then Else
General - Else if (Conditions) then do (Actions)
Else If
Playing[PlayerCounter] > 0
Then
General - If (Conditions) then do multiple (Actions)
If Then Else
General - Else if (Conditions) then do (Actions)
Else If
PlayerTowersOccupied[PlayerCounter] != PlayerSightLevel[PlayerCounter]
Then
Variable - Set PlayerSightLevel[PlayerCounter] = PlayerTowersOccupied[PlayerCounter]
Variable - Set OldRevealer = PlayerRevealer[PlayerCounter]
Variable - Set PlayerRevealer[PlayerCounter] = No Revealer
General - If (Conditions) then do multiple (Actions)
If Then Else
General - Else if (Conditions) then do (Actions)
Else If
PlayerTowersOccupied[PlayerCounter] > 0
Then
Visibility - Create a visibility revealer for player PlayerCounter within SightRegions[PlayerTowersOccupied[PlayerCounter]]
Variable - Set PlayerRevealer[PlayerCounter] = (Last created revealer)
General - If (Conditions) then do multiple (Actions)
If Then Else
General - Else if (Conditions) then do (Actions)
Else If
OldRevealer != No Revealer
Then
Visibility - Destroy OldRevealer
Here is the psuedocode explanation of MassiveTowerSightManipulator actions:
The first thing we want to do is figure out which towers are occupied and also if those that are occupied are occupied by an individual player. So the first thing we want to do is loop through our towers. We grab the tower we are dealing with from the global array based on the current counter and reset the number of total units that can activate the tower and are within range of the tower to zero. Then we loop through each player, and for each player that is still playing, we create a unit group of all the units that are within range of the tower for that player, and we add that number to the total number of units at the tower. Once we have done that for all playing players, we then loop back through the players to see if anyone has sole possession of the tower. We do this by making sure the total number of valid units is greater than zero since at least one unit must be present to activate the tower, and we see if the number of units the player has at the tower equals the total number of units (i.e. sole possession). If the player does have possession of the tower, we increase the variable storing the number of towers the player possesses by one. Once we have done this for all towers we are ready to process the results. For each playing player, we want to see if the new number of towers possessed equals the old number of towers possessed (stored globally). If they are the same we are done processing since the level of vision need not change. If they are different they we proceed to change the vision. First we store the new level of vision globally so we can check it again later. Then we store the old revealer (stored globally) to a local variable and we set the global revealer to "No Revealer". Then we determine whether the new level of vision is greater than zero. If it is, we want to create a new revealer, the region that will contain the revealer is in the spot in the array that is equal to the number of towers held. We then store this new revealer to the global array. Finally, we determine if there was an old revealer or not, if there was we destroy it and our clean up is complete. The reason we did the last few steps in the order they are in is so that the vision looks continuous and so that the vision doesn't disappear before going to the next level of vision (if not none).
After I got this working I was thinking about a way to work team vision where if two players on the same team held three towers the team would get the third level of vision, but after I discovered some gotchas with the triggers in trying to determine alliance status, I decided to just leave this as is. So basically, the limitation is that if you are on the same team, one player would have to control all four towers for max vision (do revealers work for the team if shared vision is on? I haven't tested it yet since I haven't published the map yet... I hope so.).
Also, for those who might be interested in why I chose to use the game timer and not the specific events like "Player enters area near mini tower", it is because of the fact that abilities like burrow/unburrow do not trigger the "Enter" or "Leave" events, so basically you have to multiply out your triggers for ALL the possible abilities used and events occurring like units dying and it just becomes a big pain. Plus some of those abilities were buggy regarding the triggers I had and I just couldn't figure out why some abilities seemed to work properly and others didn't work. So this makes everything very simple and concise and easy to follow since it just takes a straight count and divies vision all the time.
I will be happy to answer any questions about this and what I know/don't know yet about triggers.
Data Module (I use Table View mostly):
- Duplicate Xel'Naga Tower twice; check everything except the subsections for Footprints and Movers (these will be inherited -- you may decide you want a smaller footprint for the minor tower if you decrease its size like I did, but I left the footprint as it was anyway).
- Rename all of the duplicated parts to something appropriate. I chose suffix everything with "Minor" and "Massive", so "Xel'Naga Tower Minor", "Tower Capture Massive", etc.
- Go to the "Xel'Naga Tower (Unnamed) Massive" under "Models" and change the "Model" to "Assets/Buildings/Neutral/XelNagaTower/XelNagaTower.m3". Then change all values under "Scale Maximum" and "Scale Minimum" to the same value. I picked "3" as the value. Do the same for "Xel'Naga Tower (Unnamed) Minor" -- I used "0.5" for this one.
- Go to "Tower Capture Massive" under "Abilities". What I changed here was the "Auto Cast Range", "Stats - Flags", and "Stats - Range". (I'm actually not sure what the difference is between the two range values but I just followed Blizzard's lead and kept these the same value while adding up to the total range I wanted.) Change the two range values to "32" and under the flags remove "Exclusive" and "Same Cliff Level". (This way any ground unit on any level can catch a glimpse of the Massive tower. If you want to change the kinds of units that can catch a glimpse, say air units make changes under "Ability - Target Filters".)
- Go to "Tower Capture Minor" and change the two range values to "0.5" and leave the rest.
- Go to "Xel'Naga Tower Massive" and change the "Stats - Sight Radius" to 2. For "Xel'Naga Tower Minor" change the "Stats - Sight Radius" to 1.
Terrain Module:
- Place a "Xel'Naga Tower Massive" where you want.
- Place a circular Region, and change its center point to the center point of the Massive Tower; change its radius to 16.
- Place three more Regions like this with radii of 32, 48, and 64 centered on the same spot.
- Place four "Xel'Naga Tower Minor" inside but near the edge of the largest region.
Triggers Module:
Global Variables:
SightRegions = No Region <Region[4]>
MinorTowers = No Unit <Unit[4]>
PlayerSightLevel = 0 <Integer[4]>
PlayerRevealer = No Revealer <Revealer[4]>
Playing = 0 <Integer[4]>
Counter = 0 <Integer>
Triggers:
Melee Initialization
PlayerLeaves
MassiveTowerSightManipulator
- Under Melee Initialization add the follow below the standard triggers (the positions of your towers and names of your regions may be different; you can also rename the varibales if you don't think they make sense to you):
Variable - Set MinorTowers[1] = Xel'Naga Tower Minor [84.00, 84.00]
Variable - Set MinorTowers[2] = Xel'Naga Tower Minor [84.00, 124.00]
Variable - Set MinorTowers[3] = Xel'Naga Tower Minor [124.00, 84.00]
Variable - Set MinorTowers[4] = Xel'Naga Tower Minor [124.00, 124.00]
Variable - Set SightRegions[1] = Region 001
Variable - Set SightRegions[2] = Region 002
Variable - Set SightRegions[3] = Region 003
Variable - Set SightRegions[4] = Region 004
General - For each integer Counter from 1 to 4 with increment 1, do (Actions)
Actions
General - If (Conditions) then do multiple (Actions)
If Then Else
General - Else if (Conditions) then do (Actions)
Else If
(Status of player Counter) == Playing
Then
Variable - Set Playing[Counter] = Counter
- The PlayerLeaves trigger is very simple, I'm not sure if this is necessary per se, but I did this for optimization if not error handling:
PlayerLeaves
Events
Player - Player Any Player leaves the game with Any
Local Variables
Conditions
(Status of player (Triggering player)) != Playing
Actions
Variable - Set Playing[(Triggering player)] = 0
- MassiveTowerSightManipulator (this is where all of the real work gets done:
MassiveTowerSightManipulator
Events
Timer - Every 0.0625 seconds of Game Time
Local Variables
PlayerCounter = 0 <Integer>
TowerCounter = 0 <Integer>
TrigTower = MinorTowers[TowerCounter] <Unit>
AllValidUnits = (Empty unit group) <Unit Group[4]>
TotalValidUnits = 0 <Integer>
PlayerTowersOccupied = 0 <Integer[4]>
OldRevealer = No Revealer <Revealer>
Conditions
Actions
General - For each integer TowerCounter from 1 to 4 with increment 1, do (Actions)
Actions
Variable - Set TrigTower = MinorTowers[TowerCounter]
Variable - Set TotalValidUnits = 0
General - For each integer PlayerCounter from 1 to 4 with increment 1, do (Actions)
Actions
General - If (Conditions) then do multiple (Actions)
If Then Else
General - Else if (Conditions) then do (Actions)
Else If
Playing[PlayerCounter] > 0
Then
Variable - Set AllValidUnits[PlayerCounter] = (Any units in (Region((Position of TrigTower), 2.0)) owned by player PlayerCounter matching Required: Ground; Excluded: Self, Structure, Missile, Uncommandable, Buried, Under Construction, Dead, Hidden, with at most Any Amount)
Variable - Set TotalValidUnits = (+ (TotalValidUnits, (Number of Living units in AllValidUnits[PlayerCounter])))
General - For each integer PlayerCounter from 1 to 4 with increment 1, do (Actions)
Actions
General - If (Conditions) then do multiple (Actions)
If Then Else
General - Else if (Conditions) then do (Actions)
Else If
Playing[PlayerCounter] > 0
Then
General - If (Conditions) then do multiple (Actions)
If Then Else
General - Else if (Conditions) then do (Actions)
Else If
TotalValidUnits > 0
(Number of Living units in AllValidUnits[PlayerCounter]) == TotalValidUnits
Then
Variable - Set PlayerTowersOccupied[PlayerCounter] = (+ (PlayerTowersOccupied[PlayerCounter], 1))
General - For each integer PlayerCounter from 1 to 4 with increment 1, do (Actions)
Actions
General - If (Conditions) then do multiple (Actions)
If Then Else
General - Else if (Conditions) then do (Actions)
Else If
Playing[PlayerCounter] > 0
Then
General - If (Conditions) then do multiple (Actions)
If Then Else
General - Else if (Conditions) then do (Actions)
Else If
PlayerTowersOccupied[PlayerCounter] != PlayerSightLevel[PlayerCounter]
Then
Variable - Set PlayerSightLevel[PlayerCounter] = PlayerTowersOccupied[PlayerCounter]
Variable - Set OldRevealer = PlayerRevealer[PlayerCounter]
Variable - Set PlayerRevealer[PlayerCounter] = No Revealer
General - If (Conditions) then do multiple (Actions)
If Then Else
General - Else if (Conditions) then do (Actions)
Else If
PlayerTowersOccupied[PlayerCounter] > 0
Then
Visibility - Create a visibility revealer for player PlayerCounter within SightRegions[PlayerTowersOccupied[PlayerCounter]]
Variable - Set PlayerRevealer[PlayerCounter] = (Last created revealer)
General - If (Conditions) then do multiple (Actions)
If Then Else
General - Else if (Conditions) then do (Actions)
Else If
OldRevealer != No Revealer
Then
Visibility - Destroy OldRevealer
Here is the psuedocode explanation of MassiveTowerSightManipulator actions:
The first thing we want to do is figure out which towers are occupied and also if those that are occupied are occupied by an individual player. So the first thing we want to do is loop through our towers. We grab the tower we are dealing with from the global array based on the current counter and reset the number of total units that can activate the tower and are within range of the tower to zero. Then we loop through each player, and for each player that is still playing, we create a unit group of all the units that are within range of the tower for that player, and we add that number to the total number of units at the tower. Once we have done that for all playing players, we then loop back through the players to see if anyone has sole possession of the tower. We do this by making sure the total number of valid units is greater than zero since at least one unit must be present to activate the tower, and we see if the number of units the player has at the tower equals the total number of units (i.e. sole possession). If the player does have possession of the tower, we increase the variable storing the number of towers the player possesses by one. Once we have done this for all towers we are ready to process the results. For each playing player, we want to see if the new number of towers possessed equals the old number of towers possessed (stored globally). If they are the same we are done processing since the level of vision need not change. If they are different they we proceed to change the vision. First we store the new level of vision globally so we can check it again later. Then we store the old revealer (stored globally) to a local variable and we set the global revealer to "No Revealer". Then we determine whether the new level of vision is greater than zero. If it is, we want to create a new revealer, the region that will contain the revealer is in the spot in the array that is equal to the number of towers held. We then store this new revealer to the global array. Finally, we determine if there was an old revealer or not, if there was we destroy it and our clean up is complete. The reason we did the last few steps in the order they are in is so that the vision looks continuous and so that the vision doesn't disappear before going to the next level of vision (if not none).
After I got this working I was thinking about a way to work team vision where if two players on the same team held three towers the team would get the third level of vision, but after I discovered some gotchas with the triggers in trying to determine alliance status, I decided to just leave this as is. So basically, the limitation is that if you are on the same team, one player would have to control all four towers for max vision (do revealers work for the team if shared vision is on? I haven't tested it yet since I haven't published the map yet... I hope so.).
Also, for those who might be interested in why I chose to use the game timer and not the specific events like "Player enters area near mini tower", it is because of the fact that abilities like burrow/unburrow do not trigger the "Enter" or "Leave" events, so basically you have to multiply out your triggers for ALL the possible abilities used and events occurring like units dying and it just becomes a big pain. Plus some of those abilities were buggy regarding the triggers I had and I just couldn't figure out why some abilities seemed to work properly and others didn't work. So this makes everything very simple and concise and easy to follow since it just takes a straight count and divies vision all the time.
I will be happy to answer any questions about this and what I know/don't know yet about triggers.
Change Log:
OP -- version 0.7 posted
08/20/11 -- version 0.8 edit, triggers posted
08/22/11 -- version 0.85 edit, new overview picture posted
08/27/11 -- version 1.0 edit, lowered hp of some destructibles, Published to NA
Final comments:
This map is heavily inspired by my brief Broodwar mapping stint as can be seen in the fact that I utilize the full extent of the square playable region. I know some of the dynamics of Broodwar, like clipping through minerals, are not in play, but I think the main bases offer some very interesting early game harass potential. Anywho, I hope once I get this finished you give my map a spin.
Please let me know how fun you think this map would be to play. Also, let me know if you think there might be some viability for competitive play in some of the ideas I put into this map (even if the map itself isn't good for competition).
The only real suggestion I'm looking for is what to do with the textures. I built this to be functionally cool, but I am lost as to where to go with the textures or even how to pull it off... I did a little texturing at first and then stopped because it was looking stupid. So I'd be very appreciative of any advice for the textures.
Poll over -- Shenanigans and Insanity both half won due to names being taken.
+ Show Spoiler +
Now, my map needs a name -- what do you think it should be called?
Poll: What should this map name be?
Shenanigans (16)
46%
Insanity (14)
40%
Other (please describe in comments) (3)
9%
The Tower at Four Craters (1)
3%
The Tower at Four Craters Plateau (1)
3%
The Tower at Four Craters Island (0)
0%
Ramps Rocks Ridges and Rage (0)
0%
35 total votes
Insanity (14)
Other (please describe in comments) (3)
The Tower at Four Craters (1)
The Tower at Four Craters Plateau (1)
The Tower at Four Craters Island (0)
Ramps Rocks Ridges and Rage (0)
35 total votes
Your vote: What should this map name be?
(Vote): The Tower at Four Craters
(Vote): The Tower at Four Craters Island
(Vote): The Tower at Four Craters Plateau
(Vote): Insanity
(Vote): Shenanigans
(Vote): Ramps Rocks Ridges and Rage
(Vote): Other (please describe in comments)
(old: ) + Show Spoiler +
p.s. I'm not sure how to get my images to size properly, I've already uploaded them to igmur.com separately (i.e. not using the upload image link here) but they seem to want to render too large for TL... any help? (I assume a mod fixed my pics? Thanks for resizing!)
EDIT1: Creation details paragraph'ed for Ruscour.
EDIT2: version 0.8 stuff, triggers/vision explanation
EDIT3: version 0.85, added missing note about model change
EDIT4: version 1.0, Published, poll closed