Flash Grenade

substance

New Member
Reaction score
34
I'm working on a flash grenade and pretty much everything is done, however, i cant seemt o come up with a good formula for figuiring out the duration of the 'blind' based on the unit's distance and angle from the grenade.

Basically how it should work is the closer you are the the grenade when it blows, the longer the duration. But I also want to factor in the unit's facing angle so that if he's looking right at the grenade when it blows it would blind longer than if he had his back to it.

Just to give you a number, a maximun duration should be around 6 seconds. That's if the nade blows right in front of the unit and the unit is facing it directly.

**Yes, im aware there is a flashbang spell on these forums and im sure it works, but to fully understand why a formula works rather than being handed one.
 

Tom Jones

N/A
Reaction score
437
How about something like this:
JASS:

set grenadeangle = 180/3.14*Atan2(someunity-grenadey,someunitx-grenadex)
set angle = GetUnitFacing(someunit)-grenadeangle
set dx = someunitx-grenadex
set dy = someunity-grenadey
set dist = SquareRoot(dx*dx+dy*dy)
set duration = 6-((dist*0.01)+(angle*0.01))
If a unit is 100 units away from the flashbang, and is facing the opposite direction of the grenade, it'll get a 2.8 seconds reduction in the duration. If it's facing directly toward the grenade, it'll only receive 1 seconds reduction.
 

substance

New Member
Reaction score
34
The distance part worked, but the facing angle was a bit messed. It could return negative values and such.

I came across this though,
JASS:
function UnitFacingUnit takes unit u1, unit u2 returns real
 local real xd = GetUnitX(u2) - GetUnitX(u1)
 local real yd = GetUnitY(u2) - GetUnitY(u1)
 local real a1 = GetUnitFacing(u1)
 local real a2 = Atan2(yd, xd)*bj_RADTODEG
 local real x
     if a1>a2 then
         set x=a1
         set a1=a2
         set a2=x
     endif
     set x=a2-360
     if a2-a1 > a1-x then
         set a2=x
     endif
     set x=a1-a2
     if (x<0) then
         set x = -x
     endif
     return x
endfunction
Final formula looks like this:
JASS:
duration = 6. - ((DistanceBetweenUnitsXY(o.u,f)*0.01) + (UnitFacingUnit(f,o.u)*0.01))
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top