• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Dark Bow v1.1 - GUI

  • Like
Reactions: JesusHipster
[TD] DARK BOW [ GUI ] [/TD]
SPELL DESCRIPTION:
full

[TD] SPELL IMAGES: [/TD]

onCast

onMid

onEnd


The wizard summons a converged soul.
full

The dark soul reaches the mid-air, diverging into multiple dark souls that will haunt the enemy units when landed. ( a perfectly howl of terror pitched effect )
full

The multiple dark souls splitted into mini souls when landed in a visualized motion.
full

Damages and frightens the enemy units when landed.
full

[TD] CHANGELOGS :[/TD][TD]
v1.0 - Fresh Released
v1.1 - Updated based on KILLCIDE's review[/TD]
[TD] CREDITS :[/TD][TD]
Bribe ( Unit Indexer System )
Jad ( KB3D System )
Maestros ( Fear System )
[/TD]

Dark Bow Configuration

Dark Bow Cast

Dark Bow Loop

  • Dark Bow Configuration
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- --------
      • -------- * SPELL CONFIGURATION FIELD * --------
      • -------- --------
      • -------- OBJECT EDITOR ( F6 ) --------
      • -------- The spell or ability used in the triggers. ( Import the Dark Bow Ability ) --------
      • Set DB_Ability = Dark Bow
      • -------- The dummy unit type used in the trigger. ( Import the Dark Bow Dummy ) --------
      • Set DB_DummyType = Dark Bow Dummy
      • -------- The spell or ability that the dummy unit will use to fear enemy units. ( Import the Fear Dummy Ability and Fear System ( Maestros ) Folder ) --------
      • Set DB_FearAbility = Fear ( Dummy Ability )
      • -------- --------
      • -------- SPELL DATA --------
      • -------- - --------
      • -------- The maximum level of the spell or ability. ( Number of Levels from Dark Bow Ability ) --------
      • Set DB_AbilityMaxLevel = 3
      • -------- - --------
      • -------- An effect occurs at the attachment point when the caster executes the spell or ability. --------
      • Set DB_Effect[1] = Abilities\Weapons\ZigguratMissile\ZigguratMissile.mdl
      • Set DB_EffectAttach[1] = weapon
      • -------- - --------
      • -------- The maximum radius of the spell or ability to the targeted location or area. --------
      • Set DB_Radius[1] = 300.00
      • Set DB_Radius[2] = 325.00
      • Set DB_Radius[3] = 350.00
      • -------- - --------
      • -------- Destroy Trees? True = Yes, False = No --------
      • Set DB_DestroyTrees = False
      • -------- - --------
      • -------- The attack type and damage type of the spell or ability. --------
      • Set DB_AttackType = Spells
      • Set DB_DamageType = Normal
      • -------- - --------
      • -------- The artificial ground height where units' height will be detected. ( Default: 10 ) --------
      • Set DB_FloorHeight = 10.00
      • -------- - --------
      • -------- The applied artificial gravity in the map where falling or landing of units involved. ( Default: -9.81 ( Earth's Gravity ) ) --------
      • Set DB_Gravity = -9.81
      • -------- ^ Modify at your own risk: gravity changes affects the falling, landing motion of units. ( High Gravity = -100+, Normal Gravity = -40- ) --------
      • -------- - --------
      • -------- The interval of the looping trigger. ( Default: 1 second / 32 iterations, frames = 0.03125000 ) --------
      • Set DB_LoopInterval = (1.00 / 50.00)
      • -------- ^ I've modified it to ( 1 second / 50 iterations, frames = 0.02 ) for smooth visuals. --------
      • -------- ^ Modify at your own risk: Changing the value affects the spell's performance. --------
      • -------- - --------
      • -------- --------
      • -------- HEAD DATA --------
      • -------- - --------
      • -------- The art model used to attach in the main projectile. --------
      • Set DB_Effect[2] = Abilities\Weapons\ZigguratMissile\ZigguratMissile.mdl
      • Set DB_EffectAttach[2] = origin
      • -------- And it's pitch facing upward ( It will rise to the air ). The modified value is recommended. ( Default: +40 ) --------
      • Set DB_PitchVariation[1] = 0.00
      • -------- ^ If the art model have already pitch animation and you don't want to set it's pitch then set this value to 0. --------
      • -------- - --------
      • -------- The size of the main projectile. --------
      • Set DB_HeadSize[1] = 1.25
      • Set DB_HeadSize[2] = 1.25
      • Set DB_HeadSize[3] = 1.25
      • -------- - --------
      • -------- The initial height of the main projectile. --------
      • Set DB_HeadHeight[1] = 75.00
      • Set DB_HeadHeight[2] = 75.00
      • Set DB_HeadHeight[3] = 75.00
      • -------- - --------
      • -------- The maximum height of the main projectile to split. ( Mid-Air ) --------
      • Set DB_HeadMaxHeight[1] = 375.00
      • Set DB_HeadMaxHeight[2] = 425.00
      • Set DB_HeadMaxHeight[3] = 475.00
      • -------- - --------
      • -------- The speed of the main projectile. ( Distance Per Second ) --------
      • Set DB_HeadSpeed[1] = 1200.00
      • Set DB_HeadSpeed[2] = 1200.00
      • Set DB_HeadSpeed[3] = 1200.00
      • -------- - --------
      • -------- The creation or spawn range of the main projectile away from the caster. --------
      • Set DB_SpawnOffset = 25.00
      • -------- - --------
      • -------- The distance divider from the caster's position to the targeted location. This is the seperated distance where the head will split. ( Default: 1.75 ) --------
      • Set DB_DistanceSeperation = 1.75
      • -------- ^ Modify at your own risk: Lowering the value can cause some errors. There's no need to change this value by the way. --------
      • -------- - --------
      • -------- --------
      • -------- SHARDS DATA --------
      • -------- - --------
      • -------- The art model used to attach in the shards. --------
      • Set DB_Effect[3] = Abilities\Weapons\AvengerMissile\AvengerMissile.mdl
      • Set DB_EffectAttach[3] = origin
      • -------- And it's pitch facing downward ( It will land to the ground ). The modified value is recommended. ( Default: -20 ) --------
      • Set DB_PitchVariation[2] = 0.00
      • -------- ^ If the art model have already pitch animation and you don't want to set it's pitch then set this value to 0. --------
      • -------- - --------
      • -------- An effect occurs at the attachment point of the main projectile when the shards splitted and it's pitch facing. ( for better pitching the effect ) --------
      • Set DB_Effect[4] = Abilities\Spells\Other\HowlOfTerror\HowlCaster.mdl
      • Set DB_EffectAttach[4] = origin
      • Set DB_PitchVariation[3] = -90.00
      • -------- ^ PitchVariation values range from +90 to -90 only. ( Negative Values = faces downward, Positive values = faces upward ) ( Default: -90 ) --------
      • -------- ^ If you want to disable the pitch facing then set this value to 0. --------
      • -------- - --------
      • -------- The size of the shards. --------
      • Set DB_ShardSize[1] = 1.00
      • Set DB_ShardSize[2] = 1.00
      • Set DB_ShardSize[3] = 1.00
      • -------- - --------
      • -------- The amount of shards splitted. Value != 0 --------
      • Set DB_ShardAmount[1] = 8
      • Set DB_ShardAmount[2] = 12
      • Set DB_ShardAmount[3] = 16
      • -------- - --------
      • -------- The landing time of the shards. --------
      • Set DB_ShardFallTime[1] = 0.50
      • Set DB_ShardFallTime[2] = 0.45
      • Set DB_ShardFallTime[3] = 0.40
      • -------- - --------
      • -------- The collision radius of the shards. --------
      • Set DB_ShardCollision[1] = 50.00
      • Set DB_ShardCollision[2] = 65.00
      • Set DB_ShardCollision[3] = 80.00
      • -------- - --------
      • -------- The damage of each shards in collision radius. --------
      • Set DB_ShardDamage[1] = 100.00
      • Set DB_ShardDamage[2] = 200.00
      • Set DB_ShardDamage[3] = 300.00
      • -------- - --------
      • -------- An effect occurs when the shards landed. --------
      • Set DB_Effect[5] = Abilities\Spells\Undead\OrbOfDeath\AnnihilationMissile.mdl
      • -------- - --------
      • -------- Shards scatter into pieces when landed? True = Yes, False = No --------
      • Set DB_ShardScatter = True
      • -------- ^ IF: TRUE = Import the KB3D System ( Jad ). --------
      • -------- ^ IF: FALSE = Please skip the MINI DATA configuration section and leave or ignore KB3D System ( Jad ). --------
      • -------- - --------
      • -------- --------
      • -------- MINI DATA --------
      • -------- - --------
      • -------- The art model used to attach in the mini projectiles. --------
      • Set DB_Effect[6] = Abilities\Weapons\AvengerMissile\AvengerMissile.mdl
      • Set DB_EffectAttach[5] = origin
      • -------- - --------
      • -------- The size of the mini projectiles. --------
      • Set DB_MiniSize[1] = 0.40
      • Set DB_MiniSize[2] = 0.40
      • Set DB_MiniSize[3] = 0.40
      • -------- - --------
      • -------- The amount of the created mini projectiles. Value != 0 --------
      • Set DB_MiniAmount[1] = 3
      • Set DB_MiniAmount[2] = 3
      • Set DB_MiniAmount[3] = 3
      • -------- - --------
      • -------- The range of the mini created projectiles. --------
      • Set DB_MiniRange[1] = 175.00
      • Set DB_MiniRange[2] = 375.00
      • Set DB_MiniRange[3] = 500.00
      • -------- - --------
      • -------- The maximum height of the mini projectiles can reach. --------
      • Set DB_MiniMaxHeight[1] = 150.00
      • Set DB_MiniMaxHeight[2] = 75.00
      • Set DB_MiniMaxHeight[3] = 150.00
      • -------- - --------
      • -------- The speed of the mini projectiles. ( Distance Per Second ) --------
      • Set DB_MiniSpeed[1] = 250.00
      • Set DB_MiniSpeed[2] = 250.00
      • Set DB_MiniSpeed[3] = 275.00
      • -------- - --------
      • -------- The collision radius of the mini projectiles. --------
      • Set DB_MiniCollision[1] = 35.00
      • Set DB_MiniCollision[2] = 35.00
      • Set DB_MiniCollision[3] = 35.00
      • -------- - --------
      • -------- The damage of the mini projectiles in collision radius. --------
      • Set DB_MiniDamage[1] = 50.00
      • Set DB_MiniDamage[2] = 75.00
      • Set DB_MiniDamage[3] = 100.00
      • -------- - --------
      • -------- Allow the mini projectiles arc trajectory? True = Yes, False = No --------
      • Set DB_MiniEnableArc = True
      • -------- - --------
      • -------- An effect occurs to the enemy units when damaged by mini projectiles. --------
      • Set DB_Effect[7] = Abilities\Spells\Human\Feedback\ArcaneTowerAttack.mdl
      • -------- - --------
      • -------- --------
      • -------- FEAR DATA --------
      • -------- FEAR CONFIGURATIONS/SETTINGS ARE INSIDE THE FEAR SYSTEM FOLDER " MF Settings " TRIGGER. --------
      • Set DB_Fear = True
      • -------- ^ Fear the units damaged by the dark souls? True = Yes, False = No --------
      • -------- ^ IF: TRUE = Import the Fear System ( Maestros ), Fear Dummy Ability. --------
      • -------- ^ IF: FALSE = Leave or ignore the Fear System ( Maestros ) and don't import the Fear Dummy Ability. --------
      • -------- - --------
      • -------- ......................................................................................................................... --------
      • -------- CODE DATA --------
      • -------- ( DON'T TOUCH THESE LINES BELOW UNLESS SOME OF THEM MALFUNCTION ) --------
      • -------- ......................................................................................................................... --------
      • -------- Loop Event --------
      • Trigger - Add to Dark Bow Loop <gen> the event (Time - Every DB_LoopInterval seconds of game time)
      • -------- .............................................................................................................. --------
      • -------- Tree Checker Setup --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • DB_DestroyTrees Equal to True
        • Then - Actions
          • Custom script: set udg_DB_TreeChecker = CreateUnit( Player( 15 ), udg_DB_DummyType, 0, 0, 0 )
          • Custom script: call UnitAddAbility( udg_DB_TreeChecker, 'Ahar' ) // Harvest Ability
        • Else - Actions
      • -------- .............................................................................................................. --------
      • -------- Initialize Calculations --------
      • For each (Integer DB_CustomInteger) from 1 to DB_AbilityMaxLevel, do (Actions)
        • Loop - Actions
          • Set DB_CustomReal[DB_CustomInteger] = (DB_HeadSpeed[DB_CustomInteger] x DB_LoopInterval)
          • Set DB_CustomReal2[DB_CustomInteger] = (DB_ShardFallTime[DB_CustomInteger] / DB_LoopInterval)
          • Set DB_CustomReal3[DB_CustomInteger] = (360.00 / (Real(DB_MiniAmount[DB_CustomInteger])))
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • DB_MiniEnableArc Equal to True
            • Then - Actions
              • Set DB_CustomReal4[DB_CustomInteger] = (DB_MiniSpeed[DB_CustomInteger] / 1.25)
            • Else - Actions
      • -------- .............................................................................................................. --------
      • -------- * Preload Objects * --------
      • -------- Abilities and Units: --------
      • Custom script: set udg_DB_DummyUnit = CreateUnit( Player( 15 ), udg_DB_DummyType, 0, 0, 0 )
      • Custom script: call UnitAddAbility( udg_DB_DummyUnit, udg_DB_Ability )
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • DB_Fear Equal to True
        • Then - Actions
          • Custom script: call UnitAddAbility( udg_DB_DummyUnit, udg_DB_FearAbility )
        • Else - Actions
      • Custom script: call RemoveUnit( udg_DB_DummyUnit )
      • -------- Effects: --------
      • Set DB_EffectCount = 7
      • For each (Integer DB_CustomInteger) from 1 to DB_EffectCount, do (Actions)
        • Loop - Actions
          • Custom script: call Preload( udg_DB_Effect[ udg_DB_CustomInteger ] )
      • -------- .............................................................................................................. --------
      • -------- declaration of initial variables --------
      • Set DB_LocationZ = (Point(0.00, 0.00))
      • Custom script: set udg_DB_Map[ 1 ] = GetRectMinX( bj_mapInitialPlayableArea )
      • Custom script: set udg_DB_Map[ 2 ] = GetRectMaxX( bj_mapInitialPlayableArea )
      • Custom script: set udg_DB_Map[ 3 ] = GetRectMinY( bj_mapInitialPlayableArea )
      • Custom script: set udg_DB_Map[ 4 ] = GetRectMaxY( bj_mapInitialPlayableArea )
      • -------- .............................................................................................................. --------
      • -------- --------
      • -------- * END OF SPELL CONFIGURATION FIELD * --------
      • -------- --------
      • Custom script: endfunction
      • Custom script:
      • Custom script: // Essential Functions:
      • Custom script:
      • Custom script: function DB_GetZ takes real x, real y returns real // Determines the location z height
      • Custom script: call MoveLocation( udg_DB_LocationZ, x, y )
      • Custom script: return GetLocationZ( udg_DB_LocationZ )
      • Custom script: endfunction
      • Custom script:
      • Custom script: function DB_InPlayableArea takes real x, real y returns boolean // Detects X/Y coordinates inside the playable area
      • Custom script: return x < udg_DB_Map[ 2 ] and x > udg_DB_Map[ 1 ] and y < udg_DB_Map[ 4 ] and y > udg_DB_Map[ 3 ]
      • Custom script: endfunction
      • Custom script:
      • Custom script: function DB_Move takes unit u, real motionX, real motionY, boolean b returns nothing // Moving a unit in the specific valid X/Y coordinates
      • Custom script: if DB_InPlayableArea( motionX, motionY ) then
      • Custom script: call SetUnitX( u, motionX )
      • Custom script: call SetUnitY( u, motionY )
      • Custom script: elseif b == false then
      • Custom script: call SetUnitX( u, motionX )
      • Custom script: call SetUnitY( u, motionY )
      • Custom script: endif
      • Custom script: endfunction
      • Custom script:
      • Custom script: function DB_Parabola takes real mH, real mD, real cD returns real // Curving the projectile's trajectory
      • Custom script: return ( 4. * ( mH / mD ) * ( mD - cD ) * ( cD / mD ) )
      • Custom script: endfunction
      • Custom script:
      • Custom script: function DB_SetPitch takes unit u, real pitch returns nothing // Setting the unit's pitch
      • Custom script: local integer i = R2I( pitch * bj_RADTODEG + 90.5 )
      • Custom script: if 179 < i then
      • Custom script: set i = 179
      • Custom script: elseif 0 > i then
      • Custom script: set i = 0
      • Custom script: endif
      • Custom script: call SetUnitAnimationByIndex( u, i )
  • Dark Bow Execution
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to DB_Ability
    • Actions
      • -------- --------
      • -------- OnCast --------
      • -------- --------
      • -------- declaration of locals: --------
      • Custom script: local unit u = GetTriggerUnit( )
      • Custom script: local real x = GetUnitX( u )
      • Custom script: local real y = GetUnitY( u )
      • Custom script: local real z = DB_GetZ( x , y )
      • Custom script: local real spellX = GetSpellTargetX( )
      • Custom script: local real spellY = GetSpellTargetY( )
      • Custom script: local real spellZ = DB_GetZ( spellX , spellY )
      • Custom script: local real x2 = spellX - x
      • Custom script: local real y2 = spellY - y
      • Custom script: local real z2 = spellZ - z
      • Custom script: local real x3
      • Custom script: local real y3
      • -------- --------
      • -------- Head Creation --------
      • -------- --------
      • Custom script: call DestroyEffect( AddSpecialEffectTarget( udg_DB_Effect[ 1 ], u, udg_DB_EffectAttach[ 1 ] ) )
      • Custom script: set udg_DB_Unit = CreateUnit( GetTriggerPlayer( ) , udg_DB_DummyType, x , y, Atan2( y2 , x2 ) * bj_RADTODEG )
      • Custom script: set udg_DB_ID = GetUnitUserData( udg_DB_Unit )
      • -------- --------
      • -------- Properties and Allocations --------
      • -------- --------
      • Set DB_Caster[DB_ID] = (Triggering unit)
      • Set DB_CasterPlayer[DB_ID] = (Owner of DB_Caster[DB_ID])
      • Set DB_Level[DB_ID] = (Level of DB_Ability for DB_Caster[DB_ID])
      • Custom script: set x3 = x + udg_DB_SpawnOffset * Cos( Atan2( y2 , x2 ) )
      • Custom script: set y3 = y + udg_DB_SpawnOffset * Sin( Atan2( y2 , x2 ) )
      • Custom script: call DB_Move( udg_DB_Unit , x3 , y3 , true )
      • Custom script: call SetUnitScale( udg_DB_Unit, udg_DB_HeadSize[ udg_DB_Level[ udg_DB_ID ] ], 0, 0 )
      • Custom script: call SetUnitFlyHeight( udg_DB_Unit, udg_DB_HeadHeight[ udg_DB_Level[ udg_DB_ID ] ], 0 )
      • Custom script: set udg_DB_HeadModelHandler[ udg_DB_ID ] = AddSpecialEffectTarget( udg_DB_Effect[ 2 ], udg_DB_Unit, udg_DB_EffectAttach[ 2 ] )
      • Custom script: call DB_SetPitch( udg_DB_Unit , udg_DB_PitchVariation[ 1 ] * bj_DEGTORAD )
      • -------- --------
      • Custom script: set udg_DB_MaxDistance[ udg_DB_ID ] = SquareRoot( x2 * x2 + y2 * y2 ) + 1 // Prevents 0 calculation on distance.
      • Set DB_DivergeDistance[DB_ID] = (DB_MaxDistance[DB_ID] / DB_DistanceSeperation)
      • Set DB_CurrentDistance[DB_ID] = 0.00
      • Custom script: set udg_DB_SpellX[ udg_DB_ID ] = spellX
      • Custom script: set udg_DB_SpellY[ udg_DB_ID ] = spellY
      • Custom script: set udg_DB_CurrentHeight[ udg_DB_ID ] = GetUnitFlyHeight( udg_DB_Unit )
      • Custom script: set udg_DB_HeadAngle[ udg_DB_ID ] = Atan2( y2 , x2 )
      • -------- --------
      • Set DB_Phase[DB_ID] = 1
      • Unit Group - Add DB_Unit to DB_Group
      • Set DB_Instance = (DB_Instance + 1)
      • -------- --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • DB_Instance Equal to 1
        • Then - Actions
          • Trigger - Turn on Dark Bow Loop <gen>
        • Else - Actions
      • -------- --------
      • Custom script: set u = null
      • -------- --------
  • Dark Bow Loop
    • Events
    • Conditions
    • Actions
      • -------- --------
      • -------- OnLoop --------
      • -------- --------
      • Unit Group - Pick every unit in DB_Group and do (Actions)
        • Loop - Actions
          • -------- --------
          • -------- declaration of locals: --------
          • Custom script: local real x
          • Custom script: local real y
          • Custom script: local real z
          • Custom script: local real headMotionX
          • Custom script: local real headMotionY
          • Custom script: local real shardsMotionX
          • Custom script: local real shardsMotionY
          • Custom script: local real shardsLandX
          • Custom script: local real shardsLandY
          • Custom script: local real x2
          • Custom script: local real y2
          • Custom script: local real g
          • Custom script: local real angle
          • -------- --------
          • Set DB_Unit = (Picked unit)
          • Custom script: set udg_DB_ID = GetUnitUserData( udg_DB_Unit )
          • -------- --------
          • -------- Main Unit Coordinates --------
          • Custom script: set x = GetUnitX( udg_DB_Unit )
          • Custom script: set y = GetUnitY( udg_DB_Unit )
          • Custom script: set z = DB_GetZ( x , y )
          • -------- --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • DB_Phase[DB_ID] Equal to 1
            • Then - Actions
              • -------- --------
              • -------- Head Motion --------
              • -------- --------
              • Set DB_CurrentHeight[DB_ID] = (Current flying height of DB_Unit)
              • Custom script: set g = ( udg_DB_Gravity * udg_DB_CurrentHeight[ udg_DB_ID ] ) * Pow( udg_DB_LoopInterval, 2 )
              • Custom script: set udg_DB_CurrentDistance[ udg_DB_ID ] = ( udg_DB_CurrentDistance[ udg_DB_ID ] + udg_DB_CustomReal[ udg_DB_Level[ udg_DB_ID ] ] + g )
              • -------- --------
              • Custom script: if udg_DB_CurrentHeight[ udg_DB_ID ] >= z + udg_DB_FloorHeight then
              • Custom script: call SetUnitFlyHeight( udg_DB_Unit, DB_Parabola( udg_DB_HeadMaxHeight[ udg_DB_Level[ udg_DB_ID ] ], udg_DB_MaxDistance[ udg_DB_ID ], udg_DB_CurrentDistance[ udg_DB_ID ] ) + g , 0 )
              • Custom script: else
              • Custom script: set udg_DB_CurrentDistance[ udg_DB_ID ] = udg_DB_MaxDistance[ udg_DB_ID ]
              • Custom script: endif
              • -------- --------
              • Custom script: set headMotionX = x + ( udg_DB_CustomReal[ udg_DB_Level[ udg_DB_ID ] ] + g ) * Cos( udg_DB_HeadAngle[ udg_DB_ID ] )
              • Custom script: set headMotionY = y + ( udg_DB_CustomReal[ udg_DB_Level[ udg_DB_ID ] ] + g ) * Sin( udg_DB_HeadAngle[ udg_DB_ID ] )
              • Custom script: call DB_Move( udg_DB_Unit , headMotionX , headMotionY , true )
              • Custom script: call SetUnitFacing( udg_DB_Unit, udg_DB_HeadAngle[ udg_DB_ID ] * bj_RADTODEG )
              • -------- --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • DB_CurrentDistance[DB_ID] Greater than or equal to DB_DivergeDistance[DB_ID]
                • Then - Actions
                  • -------- --------
                  • -------- Shards Creation --------
                  • -------- --------
                  • -------- Setting pitched effects --------
                  • Custom script: call DestroyEffect( AddSpecialEffectTarget( udg_DB_Effect[ 4 ], udg_DB_Unit, udg_DB_EffectAttach[ 4 ] ) )
                  • Custom script: call DB_SetPitch( udg_DB_Unit , udg_DB_PitchVariation[ 2 ] * bj_DEGTORAD )
                  • For each (Integer DB_CustomInteger) from 1 to DB_ShardAmount[DB_Level[DB_ID]], do (Actions)
                    • Loop - Actions
                      • -------- --------
                      • Custom script: set udg_DB_CustomUnit = CreateUnit( udg_DB_CasterPlayer[ udg_DB_ID ], udg_DB_DummyType, x , y , udg_DB_HeadAngle[ udg_DB_ID ] * bj_RADTODEG )
                      • Custom script: set udg_DB_CustomID = GetUnitUserData( udg_DB_CustomUnit )
                      • Custom script: call SetUnitScale( udg_DB_CustomUnit, udg_DB_ShardSize[ udg_DB_Level[ udg_DB_ID ] ], 0, 0 )
                      • Custom script: call SetUnitFlyHeight( udg_DB_CustomUnit, udg_DB_CurrentHeight[ udg_DB_ID ], 0 )
                      • Custom script: set udg_DB_ShardModelHandler[ udg_DB_CustomID ] = AddSpecialEffectTarget( udg_DB_Effect[ 3 ], udg_DB_CustomUnit, udg_DB_EffectAttach[ 3 ] )
                      • Custom script: call DB_SetPitch( udg_DB_Unit , udg_DB_PitchVariation[ 3 ] * bj_DEGTORAD )
                      • -------- --------
                      • -------- passing parameters --------
                      • Set DB_Caster[DB_CustomID] = DB_Caster[DB_ID]
                      • Set DB_CasterPlayer[DB_CustomID] = DB_CasterPlayer[DB_ID]
                      • Set DB_Level[DB_CustomID] = DB_Level[DB_ID]
                      • Set DB_SpellX[DB_CustomID] = DB_SpellX[DB_ID]
                      • Set DB_SpellY[DB_CustomID] = DB_SpellY[DB_ID]
                      • -------- --------
                      • Custom script: set shardsLandX = udg_DB_SpellX[ udg_DB_ID ] + GetRandomReal( 0, udg_DB_Radius[ udg_DB_Level[ udg_DB_ID ] ] ) * Cos( GetRandomReal( -bj_PI, bj_PI ) )
                      • Custom script: set shardsLandY = udg_DB_SpellY[ udg_DB_ID ] + GetRandomReal( 0, udg_DB_Radius[ udg_DB_Level[ udg_DB_ID ] ] ) * Sin( GetRandomReal( -bj_PI, bj_PI ) )
                      • Custom script: set x2 = shardsLandX - x
                      • Custom script: set y2 = shardsLandY - y
                      • Custom script: set udg_DB_ShardLandDistance[ udg_DB_CustomID ] = SquareRoot( x2 * x2 + y2 * y2 )
                      • Set DB_ShardCurrentDistance[DB_CustomID] = 0.00
                      • Set DB_ShardCurrentHeight[DB_CustomID] = (Current flying height of DB_CustomUnit)
                      • Set DB_ShardFallTimeCalculation[DB_CustomID] = (DB_ShardCurrentHeight[DB_CustomID] / DB_CustomReal2[DB_Level[DB_ID]])
                      • Set DB_ShardLandTimeCalculation[DB_CustomID] = (DB_ShardLandDistance[DB_CustomID] / DB_CustomReal2[DB_Level[DB_ID]])
                      • Custom script: set udg_DB_ShardLandAngle[ udg_DB_CustomID ] = Atan2( y2 , x2 )
                      • -------- --------
                      • Set DB_Phase[DB_CustomID] = 2
                      • Unit Group - Add DB_CustomUnit to DB_Group
                      • Set DB_Instance = (DB_Instance + 1)
                      • -------- --------
                  • -------- Head Destroy --------
                  • Special Effect - Destroy DB_HeadModelHandler[DB_ID]
                  • Unit - Kill DB_Unit
                  • Unit Group - Remove DB_Unit from DB_Group
                  • Set DB_Instance = (DB_Instance - 1)
                  • -------- --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • DB_Instance Equal to 0
                    • Then - Actions
                      • Trigger - Turn off (This trigger)
                    • Else - Actions
                  • -------- --------
                • Else - Actions
            • Else - Actions
          • -------- --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • DB_Phase[DB_ID] Equal to 2
            • Then - Actions
              • -------- --------
              • -------- Shards Motion --------
              • -------- --------
              • Custom script: set g = ( udg_DB_Gravity * udg_DB_ShardCurrentHeight[ udg_DB_ID ] ) * Pow( udg_DB_LoopInterval, 2 )
              • Custom script: set shardsMotionX = x + ( udg_DB_ShardLandTimeCalculation[ udg_DB_ID ] + g ) * Cos( udg_DB_ShardLandAngle[ udg_DB_ID ] )
              • Custom script: set shardsMotionY = y + ( udg_DB_ShardLandTimeCalculation[ udg_DB_ID ] + g ) * Sin( udg_DB_ShardLandAngle[ udg_DB_ID ] )
              • Custom script: call DB_Move( udg_DB_Unit , shardsMotionX , shardsMotionY , true )
              • Custom script: call SetUnitFacing( udg_DB_Unit , udg_DB_ShardLandAngle[ udg_DB_ID ] * bj_RADTODEG )
              • -------- --------
              • Custom script: set udg_DB_ShardCurrentDistance[ udg_DB_ID ] = ( udg_DB_ShardCurrentDistance[ udg_DB_ID ] + ( udg_DB_ShardLandTimeCalculation[ udg_DB_ID ] + g ) )
              • Custom script: set udg_DB_ShardCurrentHeight[ udg_DB_ID ] = ( udg_DB_ShardCurrentHeight[ udg_DB_ID ] - ( udg_DB_ShardFallTimeCalculation[ udg_DB_ID ] + g ) )
              • Custom script: call SetUnitFlyHeight( udg_DB_Unit , udg_DB_ShardCurrentHeight[ udg_DB_ID ] , 0 )
              • -------- --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • DB_ShardCurrentDistance[DB_ID] Greater than or equal to DB_ShardLandDistance[DB_ID]
                • Then - Actions
                  • -------- --------
                  • -------- * FEAR SYSTEM * --------
                  • Custom script: call GroupEnumUnitsInRange( bj_lastCreatedGroup, x , y , udg_DB_ShardCollision[ udg_DB_Level[ udg_DB_ID ] ], null )
                  • Custom script: loop
                  • Custom script: set udg_DB_PickedUnit = FirstOfGroup( bj_lastCreatedGroup )
                  • Custom script: exitwhen udg_DB_PickedUnit == null
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (DB_PickedUnit is dead) Equal to False
                      • (DB_PickedUnit is A structure) Equal to False
                      • (DB_PickedUnit is Magic Immune) Equal to False
                      • (DB_PickedUnit is A flying unit) Equal to False
                      • (DB_PickedUnit is Mechanical) Equal to False
                      • (DB_PickedUnit belongs to an enemy of DB_CasterPlayer[DB_ID]) Equal to True
                    • Then - Actions
                      • -------- --------
                      • Unit - Cause DB_Caster[DB_ID] to damage DB_PickedUnit, dealing DB_ShardDamage[DB_Level[DB_ID]] damage of attack type DB_AttackType and damage type DB_DamageType
                      • -------- --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • DB_Fear Equal to True
                        • Then - Actions
                          • -------- --------
                          • -------- Dummy Caster --------
                          • Custom script: set udg_DB_DummyUnit = CreateUnit( udg_DB_CasterPlayer[ udg_DB_ID ] , udg_DB_DummyType , x , y , 0 )
                          • Custom script: call UnitAddAbility( udg_DB_DummyUnit, udg_DB_FearAbility )
                          • Unit - Add a 1.00 second Generic expiration timer to DB_DummyUnit
                          • Unit - Order DB_DummyUnit to Undead Banshee - Curse DB_PickedUnit
                          • -------- --------
                        • Else - Actions
                      • -------- --------
                    • Else - Actions
                  • Custom script: call GroupRemoveUnit( bj_lastCreatedGroup, udg_DB_PickedUnit )
                  • Custom script: endloop
                  • -------- --------
                  • Custom script: call DestroyEffect( AddSpecialEffect( udg_DB_Effect[ 5 ], x, y ) )
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • DB_DestroyTrees Equal to True
                    • Then - Actions
                      • -------- --------
                      • Custom script: call MoveLocation( udg_DB_CustomLocation , x , y )
                      • Destructible - Pick every destructible within DB_ShardCollision[DB_Level[DB_ID]] of DB_CustomLocation and do (Actions)
                        • Loop - Actions
                          • Set DB_Tree = (Picked destructible)
                          • Unit - Order DB_TreeChecker to Harvest DB_Tree
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (Current order of DB_TreeChecker) Equal to (Order(harvest))
                            • Then - Actions
                              • Destructible - Kill DB_Tree
                            • Else - Actions
                          • Unit - Order DB_TreeChecker to Stop
                      • -------- --------
                    • Else - Actions
                  • -------- --------
                  • -------- Mini Creation --------
                  • -------- USES * KB3D SYSTEM * --------
                  • -------- --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • DB_ShardScatter Equal to True
                    • Then - Actions
                      • For each (Integer DB_CustomInteger) from 1 to DB_MiniAmount[DB_Level[DB_ID]], do (Actions)
                        • Loop - Actions
                          • -------- --------
                          • Set DB_MiniAngle = (DB_MiniAngle + DB_CustomReal3[DB_Level[DB_ID]])
                          • Custom script: set udg_DB_CustomUnit = CreateUnit( udg_DB_CasterPlayer[ udg_DB_ID ], udg_DB_DummyType, x , y, udg_DB_MiniAngle * bj_RADTODEG )
                          • Custom script: call SetUnitScale( udg_DB_CustomUnit , udg_DB_MiniSize[ udg_DB_Level[ udg_DB_ID ] ], 0, 0 )
                          • -------- --------
                          • Set KB3D_Unit = DB_CustomUnit
                          • Set KB3D_Range = DB_MiniRange[DB_Level[DB_ID]]
                          • Set KB3D_Speed = DB_MiniSpeed[DB_Level[DB_ID]]
                          • Set KB3D_Angle = DB_MiniAngle
                          • Set KB3D_D_MECHANICAL = True
                          • Set KB3D_D_MAGIC_IMMINUE = False
                          • Set KB3D_D_STRUCTURE = False
                          • Set KB3D_D_ENEMY = True
                          • Set KB3D_D_FLYING = False
                          • Set KB3D_D_ALLY = False
                          • Set KB3D_Line_Fx = DB_Effect[7]
                          • Set KB3D_EndFx = DB_Effect[7]
                          • Set KB3D_AoEEndDamage = DB_MiniDamage[DB_Level[DB_ID]]
                          • Set KB3D_EndwhenDead = True
                          • Set KB3D_KillatEnd = True
                          • Set KB3D_AoE = DB_MiniCollision[DB_Level[DB_ID]]
                          • Set KB3D_AttackType = DB_AttackType
                          • Set KB3D_DamageType = DB_DamageType
                          • Set KB3D_Damager = DB_Caster[DB_ID]
                          • Set KB3D_DestroyTree = DB_DestroyTrees
                          • Set KB3D_FaceAngle = True
                          • Set KB3D_Attach = DB_EffectAttach[5]
                          • Set KB3D_TrailFx = DB_Effect[6]
                          • Set KB3D_UnpathableStop = False
                          • Set KB3D_Zoffset = DB_MiniMaxHeight[DB_Level[DB_ID]]
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • DB_MiniEnableArc Equal to True
                            • Then - Actions
                              • Set KB3D_Arc = DB_CustomReal4[DB_Level[DB_ID]]
                            • Else - Actions
                          • -------- --------
                          • -------- Registed All of the Settings --------
                          • Custom script: call ExecuteFunc( "KB3D_Registration" )
                          • -------- --------
                    • Else - Actions
                  • -------- --------
                  • -------- Shards Destroy --------
                  • Special Effect - Destroy DB_ShardModelHandler[DB_ID]
                  • Unit - Kill DB_Unit
                  • Unit Group - Remove DB_Unit from DB_Group
                  • Set DB_Instance = (DB_Instance - 1)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • DB_Instance Equal to 0
                    • Then - Actions
                      • Trigger - Turn off (This trigger)
                    • Else - Actions
                  • -------- --------
                • Else - Actions
            • Else - Actions
          • -------- --------

" A spell that also uses a Fear GUI System by Maestros. A very useful system indeed. "

" Useful at damaging the cluster of units in a radius and loses their control for a short duration which is unique. "

" It should be dark souls but I think it is a very common name so I ended up from Dark Bow :p "
Contents

Dark Bow v1.1 - GUI (Map)

Reviews
KILLCIDE
The effects are cool, and the spell concept is good, but the code... ugh why must you torture me? Regardless, giving it a quick overview because my eyes hurt from walls of black text, I only saw a couple of things that can be improved: It's faster to...
Level 37
Joined
Jul 22, 2015
Messages
3,485
Man, jake... why can't you just code these in JASS ;_; here are a two things:
  • The fear mechanic seems to be really random. Sometimes it works, and sometimes it does not
  • Random numbers in code are never good. Could you explain what 179 and 90.5 represent in functino DB_SetPitch?
Everything in the code looks good. If I can get a confirmation the fear mechanic, I will approve it.



Awaiting Update
 
Level 20
Joined
Aug 13, 2013
Messages
1,696
^ Still doubting at that fear system, Im actually thinking that the global dummy unit is the responsible for this issue or its owner PLAYER_NEUTRAL_EXTRA ( actually ive discovered that any unit owns by this player will automatically follow the neutral guard distance on gameplay constants ) so Ill remove this dummy player config part, about the global dummy unit ( im actually wrong about the idea of ordering the single dummy to target multiple units at the same time. ) so Ill just create.another dummy manually to make it follow properly.

About that setpitch function, it is just a constant angle value ^^.

Gonna update this spell later~
 
Level 20
Joined
Aug 13, 2013
Messages
1,696
Updated to v1.1

*
Removed dummy player configuration
* Removed the global dummy unit onInit
* Changed GetWidgetX/Y to UnitX/Y native. ( faster )
* Tree Destroy location now used to move not create. ( efficient )
* Uses integer as a checker instead of enum. ( efficient )
* Fear now works properly on enemy units damaged by the diverged missiles.

Edit: 1234 :p
 
Level 37
Joined
Jul 22, 2015
Messages
3,485
The effects are cool, and the spell concept is good, but the code... ugh why must you torture me? Regardless, giving it a quick overview because my eyes hurt from walls of black text, I only saw a couple of things that can be improved:
  • It's faster to just multiply the number itself instead of using the Pow() native
    • Custom script: set g = ( udg_DB_Gravity * udg_DB_CurrentHeight[ udg_DB_ID ] ) * Pow( udg_DB_LoopInterval, 2 )
  • Why are your knockback filters hardcoded?

Everything else looks fine! Approved
 
Top