1. Don't use medics with optical flare.
2. Have a timer count to 50 using hyper triggers.
3. On DC=0, remove a unit at a location, then create a unit at a location, then remove a unit at a location.
4. On DC=49, create a unit at a location.
This works best if you use cloaked units, as the units will blink into and out of existance only once every 300 frames. You do not have to create the units. You can instead "give" units, but you'll have to have one for each player, as the unit has to exist on frame between hyper trigger 49 and hyper trigger 50 (0).
PROS:
You can give anyone vision of anything that's not cloaked, even if they have vision turned off for themselves.
You can increase or decrease the sight range of any single/hero unit by using burrowed zerg units or cloaked ghosts/disabled unit sprites.
You can share vision of cloaked buildings to detect them, without ever showing them on the minimap.
Vision will not disappear every 100 frames briefly like it does when you repeatedly create units, since you are leaving a unit with vision there over the vision update frame.
MEDIOCRE:
You can "uncloak" DTs without giving vision. The DTS will blink out of existance from time to time, but will come back almost instantly. I believe it's once every 30 frames, and only some of the DTs will blink in a given group.
CONS:
You'll see the unit being created once every 300 frames due to vision updating every 100 frames and cloaked units updating every 30 frames.
Optical flare instantly resets the vision counter, making this process useless.
Example map Try this one, or open it in something that's not SCMDraft. Opened fine in fartyedit for me, but my scmdraft is broken. Here's the starforge triggers:
Create a unit when the "hero" unit moves, so as to give new vision. If you don't create a unit, the unit can walk out of his or her vision. Creating ground units at a location with a ground unit also won't slow the unit down, unlike moving a burrowed unit
Bring(CurrentPlayer, Exactly, 0, Marine, Location 0);
MoveLocation(Location 0, Marine, CurrentPlayer, Anywhere);
RemoveUnitAtLocation(All, 54, P11, Anywhere);
CreateUnitWithProperties(1, Devouring One Zergling, Location 0, P2, 1);
MoveUnit(1, Devouring One Zergling, P2, Anywhere, Location 0);
GiveUnits(All, Devouring One Zergling, P2, Anywhere, P11);
PreserveTrigger();
--
reset counter. "13" means "Current Player" in my starforge. Note that because this is first, I will never have DC=100 in any condition after this.
Deaths(13, AtLeast, 100, 0);
PreserveTrigger();
SetDeaths(CurrentPlayer, SetTo, 0, 0);
--
Give the unit to the player on frame 96. Note the position of the trigger in the list
Deaths(13, Exactly, 96, 0);
PreserveTrigger();
GiveUnits(1, Devouring One Zergling, P11, Anywhere, P2);
--
Give the unit back to neutral on frame 98. Note the position of the trigger in the list
Deaths(13, Exactly, 98, 0);
PreserveTrigger();
GiveUnits(1, Devouring One Zergling, P2, Anywhere, P11);
--
The timer. Note that it's after all the other triggers, so I will never execute anything on DC=100, because DC can't equal zero above this
Always();
PreserveTrigger();
SetDeaths(CurrentPlayer, Add, 2, 0);
--
Vision AI scripts
Always();
RunAIScript(Turn OFF Shared Vision for Player 1);
RunAIScript(Turn ON Shared Vision for Player 2);
GiveUnits(All, AnyUnit, P9, Anywhere, P1);
Apologies for not having SCMDraft working and modding my starforge to use numbers for EUD stuff. 13=Current Player in my "deaths" condition". Also note I added 2 instead of adding 1, so I could go by frames. You don't have to do it that way. I'm counting from 0-98, with the reset happening on frame 97, and frame 99 exists, but we can't do anything on that frame anyway. Frame 100 is the same thing as Frame 0. Let us know if this is all terribly confusing. It's
definitely possible.
Post has been edited 1 time(s), last time on Oct 23 2014, 3:05 am by rockz.
"Parliamentary inquiry, Mr. Chairman - do we have to call the Gentleman a gentleman if he's not one?"