• 🏆 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!

GUI Duel Challenge

Status
Not open for further replies.
The Hive Workshop

GUI Duel Challenge

Challenge Arena Rules:

  • Challenge results must be bug-free.
  • Copy and paste techniques are not permitted.
  • No exports from other games are acceptable.
Challenge Theme:

Subject:
Triggering

Theme:
Elemental

Challenger:
@Daffa the Mage

Opponent(s):
@Rheiko

Challenge Duration:
14 Days


Proposed Reputation Award:
7 Points


Challenge judging:
CodingIs the skill bug- and leak-free? Does it support multiple instances? Is there a good documentation and are there enough configurable variables to fit the needs of different user? Does it cause performance issues upon effect? Is the code fitting for a decent spell submission, or is it too simple? /20

Concept
Is it unique? How creatively was the idea executed and is it fitting the contest theme? /10

Visuals
How does the whole spell procedure look? Is it overloaded with special effects? How explanatory is the tooltip/description of its functionality? /10

FinalScore = (30*PollVotes/POLL_VOTES_TOTAL) + (70*JudgeScore/JUDGE_SCORE_TOTAL)

Other challenge conditions:

Details :
  • GUI only
  • No system permitted (such as Unit Indexers and DDS)
  • Follows Spells Submission Rules
  • Only 1 spell (no sub spell allowed)
START : JUNE 19th, 23:21 GMT+8
DEADLINE : JULY 3rd, 2017 23:21 GMT+8
DEADLINE : JULY 10th, 2017 23:21 GMT+8

 
Last edited:
Level 26
Joined
Oct 2, 2011
Messages
2,482
Hurray! A challenge!
Seems a bit vague so far, though. Are you making a spell set or a single one? Elemental is a very broad subject.
And 2 reputation? Live a little! I propose at least 10! But that is up to you of course. :)

I'll try to fetch a judge for this!
 
I'll get my WIP in 4 days or so. Last day of fasting and in next two days are Idul Fitr days.

@KILLCIDE
Else I would use Unit Indexer and be done with it. And no, that ain't great for me.

@Rheiko
How about your WIP?

EDIT :

WIP 1

Description

Unleash a powerful heaven bolt into a position. The bolt ignites all nearby souls, dealing damage proportional to health remaining up to 20/40/60% of unit's max health. Afterwards, any allied unit struck will be healed by 10 hit point per second and enemy unit will lose 10/20/30 hit and mana point per second for 20 seconds. The user is immune to initial damage from Judgement effect, but benefits from it's healing.
 
Last edited:
Level 22
Joined
Aug 27, 2013
Messages
3,973
Meh, I'll get to mine soon enough.

The description is not final, it might change again later. :p

description.jpg


EDIT:
Here goes a wip, trying to make it simple yet fun to cast. ~

WIP.jpg
 
Last edited:
FINAL ENTRY

[Divine Judgement]
INTRO :
There are some changes from initial concept. Mostly to add simplicity to the coding structures. WIP is available at page one as proof. Pure triggers, and Object Editor is used only to activate the ability.

ABILITY :
Unleash a powerful light force into a position. The bolt ignites all nearby souls in 400 range, dealing damage proportional to health. Afterwards, any allied unit struck will be healed both health and mana and enemy unit will lose hit and mana point per second for 20 seconds. Always left 1 HP. Initial damage is spell and the interval effect is pure.
Level 1 - up to 1/5 max health, 10 points.
Level 2 - up to 2/5 max health, 20 points.
Level 3 - up to 3/5 max health, 30 points.

USABILITY :
In combat, this ability is a powerful double edged sword. The initial damage effect can shut almost all opponents in both sides and the healing can grant a recovery advantage. It also mutes healing effect for enemy party with a long DoT. However, an incorrect timing of ability usage can kill allied forces from enemy fire due to initial damage burst it applies.

TRIGGERS :
  • Judge Config
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- Ability --------
      • Set Judge_Ability = Divine Judgement
      • -------- Area of effect --------
      • Set Judge_AoE[1] = 400.00
      • Set Judge_AoE[2] = 400.00
      • Set Judge_AoE[3] = 400.00
      • -------- Initial health percentage lost (max 100.00) --------
      • Set Judge_PercentDamage[1] = 20.00
      • Set Judge_PercentDamage[2] = 40.00
      • Set Judge_PercentDamage[3] = 60.00
      • -------- Initial effect : Attack Type --------
      • Set Judge_AttackType = Spells
      • -------- Initial effect : Damage Type --------
      • Set Judge_DamageType = Normal
      • -------- Heal rate per second --------
      • Set Judge_HPS[1] = 10.00
      • Set Judge_HPS[2] = 20.00
      • Set Judge_HPS[3] = 30.00
      • -------- Damage rate per second --------
      • Set Judge_DPS[1] = 10.00
      • Set Judge_DPS[2] = 20.00
      • Set Judge_DPS[3] = 30.00
      • -------- Effect duration --------
      • Set Judge_Duration[1] = 20.00
      • Set Judge_Duration[2] = 20.00
      • Set Judge_Duration[3] = 20.00
      • -------- Area blast SFX --------
      • Set Judge_ActiveSFX = <Empty String>
      • -------- Effect SFX --------
      • Set Judge_EffectSFX = Abilities\Spells\Human\HolyBolt\HolyBoltSpecialArt.mdl
      • -------- Looping SFX --------
      • Set Judge_LoopSFX = Abilities\Spells\Items\StaffOfSanctuary\Staff_Sanctuary_Target.mdl
      • -------- SFX Position (Looping and Effect only) --------
      • Set Judge_EffectPos = overhead
      • -------- END CONFIG --------
      • Set Judge_LOOPTIME = 0.03
      • Set Judge_LoopTrigger = Judge Loop <gen>
      • Trigger - Add to Judge_LoopTrigger the event (Time - Every Judge_LOOPTIME seconds of game time)
      • Hashtable - Create a hashtable
      • Set Judge_HASH = (Last created hashtable)
      • Custom script: set udg_Judge_MainGroup = CreateGroup()
      • Set Judge_COUNT = 0
      • Set Judge_KEYDUR = 1
      • Set Judge_KEYLEVEL = 2
      • Set Judge_KEYDAMAGE = 3
      • Set Judge_KEYHEAL = 4
  • Judge Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Judge_Ability
    • Actions
      • Set Judge_Source = (Triggering unit)
      • Set Judge_Point = (Target point of ability being cast)
      • Set Judge_Level = (Level of Judge_Ability for Judge_Source)
      • Set Judge_Group = (Units within Judge_AoE[Judge_Level] of Judge_Point)
      • Special Effect - Create a special effect at Judge_Point using Judge_ActiveSFX
      • Special Effect - Destroy (Last created special effect)
      • Unit Group - Pick every unit in Judge_Group and do (Actions)
        • Loop - Actions
          • Set Judge_Victim = (Picked unit)
          • Set Judge_KEY = (Key (Picked unit))
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Judge_Victim is in Judge_MainGroup) Equal to False
            • Then - Actions
              • Set Judge_COUNT = (Judge_COUNT + 1)
            • Else - Actions
          • Unit - Cause Judge_Source to damage Judge_Victim, dealing ((Life of Judge_Victim) x (Judge_PercentDamage[Judge_Level] / 100.00)) damage of attack type Judge_AttackType and damage type Judge_DamageType
          • Special Effect - Create a special effect attached to the Judge_EffectPos of Judge_Victim using Judge_EffectSFX
          • Special Effect - Destroy (Last created special effect)
          • Unit Group - Add Judge_Victim to Judge_MainGroup
          • Hashtable - Save Judge_Duration[Judge_Level] as Judge_KEYDUR of Judge_KEY in Judge_HASH
          • Hashtable - Save Judge_Level as Judge_KEYLEVEL of Judge_KEY in Judge_HASH
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Judge_Victim belongs to an ally of (Owner of Judge_Source)) Equal to True
            • Then - Actions
              • Hashtable - Save (Judge_HPS[Judge_Level] x Judge_LOOPTIME) as Judge_KEYHEAL of Judge_KEY in Judge_HASH
              • Hashtable - Save 0.00 as Judge_KEYDAMAGE of Judge_KEY in Judge_HASH
            • Else - Actions
              • Hashtable - Save (Judge_DPS[Judge_Level] x Judge_LOOPTIME) as Judge_KEYDAMAGE of Judge_KEY in Judge_HASH
              • Hashtable - Save 0.00 as Judge_KEYHEAL of Judge_KEY in Judge_HASH
      • Custom script: call RemoveLocation(udg_Judge_Point)
      • Custom script: call DestroyGroup(udg_Judge_Group)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Judge_LoopTrigger is on) Equal to False
        • Then - Actions
          • Trigger - Turn on Judge_LoopTrigger
        • Else - Actions[/COLOR]
  • [COLOR=rgb(255,255,255)]
  • Judge Loop
    • Events
    • Conditions
    • Actions
      • Unit Group - Pick every unit in Judge_MainGroup and do (Actions)
        • Loop - Actions
          • Set Judge_Victim = (Picked unit)
          • Set Judge_KEY = (Key (Picked unit))
          • Set Judge_CurrentDuration = (Load Judge_KEYDUR of Judge_KEY from Judge_HASH)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Judge_CurrentDuration Equal to Judge_Duration[(Load Judge_KEYLEVEL of Judge_KEY from Judge_HASH)]
            • Then - Actions
              • Special Effect - Destroy (Load Judge_KEYEFFECT of Judge_KEY in Judge_HASH)
              • Special Effect - Create a special effect attached to the Judge_EffectPos of Judge_Victim using Judge_LoopSFX
              • Hashtable - Save Handle Of(Last created special effect) as Judge_KEYEFFECT of Judge_KEY in Judge_HASH
            • Else - Actions
          • Set Judge_Modifier = ((Load Judge_KEYHEAL of Judge_KEY from Judge_HASH) - (Load Judge_KEYDAMAGE of Judge_KEY from Judge_HASH))
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Judge_Modifier Greater than ((Life of Judge_Victim) - 1.00)
            • Then - Actions
              • Unit - Set life of Judge_Victim to 1.00
            • Else - Actions
              • Unit - Set life of Judge_Victim to ((Life of Judge_Victim) + Judge_Modifier)
          • Unit - Set mana of Judge_Victim to ((Mana of Judge_Victim) + Judge_Modifier)
          • Set Judge_CurrentDuration = (Judge_CurrentDuration - Judge_LOOPTIME)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Or - Any (Conditions) are true
                • Conditions
                  • Judge_CurrentDuration Less than or equal to 0.00
                  • (Judge_Victim is alive) Equal to False
            • Then - Actions
              • Special Effect - Destroy (Load Judge_KEYEFFECT of Judge_KEY in Judge_HASH)
              • Hashtable - Clear all child hashtables of child Judge_KEY in Judge_HASH
              • Unit Group - Remove Judge_Victim from Judge_MainGroup
              • Set Judge_COUNT = (Judge_COUNT - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Judge_COUNT Equal to 0
                • Then - Actions
                  • Trigger - Turn off (This trigger)
                • Else - Actions
            • Else - Actions
              • Hashtable - Save Judge_CurrentDuration as Judge_KEYDUR of Judge_KEY in Judge_HASH
 

Attachments

  • Divine Judge.w3x
    25.8 KB · Views: 91
Level 37
Joined
Jul 22, 2015
Messages
3,485
The criteria for concept and visuals is self-explanatory, so I will just break down how I will be judging the coding of both your spells:
  • Code Interface - 5 points
    • Configurability (3) - Points will only be loss if I spot things that are generally configurable in the Spell Section or if the documentation for the config is lacking
    • Documentation (2) - A point will be loss if there is either no documenation or an excessive amount of them. Also includes variable naming conventions.

  • Code Performance - 15 points
    • Efficiency (10) - Points will only be loss if I feel there was a far more efficient alternative to the your approach
    • Leaks (3) - Each leak will subtract a point in this criteria. Reference leaks from GUI functions not included.
    • Errors (2) - Potential unintended behavior of a spell or not mimicing original game mechanics
 
Level 22
Joined
Aug 27, 2013
Messages
3,973
If you could give me a few more hours, I can finish it. I didn't really have time to work on it because of uni and stuff. But I assure you it's 80% complete.
And I hope it's fine if I change the concept just a lil bit from the wip I posted earlier.

Otherwise, I'd have to withdraw from the challenge regardless the consequences, sadly.
 
Level 22
Joined
Aug 27, 2013
Messages
3,973
Rheiko Presents
FROZEN FORCE
WC3ScrnShot_071617_151526_04.png

Features:

  • Fun to cast
  • A lil bit Eye Candy (depends on how you see it and "use" it)
  • Code is optimized
  • Slowing nearby enemies (useful for both catching up and running away)
  • AoE
Description:

WC3ScrnShot_071617_152916_01.png


Triggers:



  • FFO Config
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- -------------------------------------------------------------- --------
      • -------- Input your Frozen Force ability here --------
      • -------- -------------------------------------------------------------- --------
      • Set FFO_Abil = Frozen Force
      • -------- -------------------------------------------------------------- --------
      • -------- Input your slow ability here --------
      • -------- -------------------------------------------------------------- --------
      • Set FFO_DummyAbil = Slow (Ice)
      • -------- -------------------------------------------------------------- --------
      • -------- Input your Frozen Force dummy from object editor here --------
      • -------- -------------------------------------------------------------- --------
      • Set FFO_DummyType = FFO Dummy
      • -------- -------------------------------------------------------------- --------
      • -------- Input the path of dummy model that you desire here --------
      • -------- -------------------------------------------------------------- --------
      • Set FFO_Effect = Abilities\Weapons\FrostWyrmMissile\FrostWyrmMissile.mdl
      • -------- -------------------------------------------------------------- --------
      • -------- Input the path of models that will be the additional effects of the spell --------
      • -------- Configure it as you please --------
      • -------- -------------------------------------------------------------- --------
      • Set FFO_AEffect[1] = Abilities\Weapons\FrostWyrmMissile\FrostWyrmMissile.mdl
      • Set FFO_AEffect[2] = Abilities\Spells\Undead\FrostNova\FrostNovaTarget.mdl
      • Set FFO_AEffect[3] = Units\NightElf\Wisp\WispExplode.mdl
      • -------- -------------------------------------------------------------- --------
      • -------- Input the radius of the spell here --------
      • -------- -------------------------------------------------------------- --------
      • Set FFO_Radius[1] = 500.00
      • Set FFO_Radius[2] = 500.00
      • Set FFO_Radius[3] = 500.00
      • -------- -------------------------------------------------------------- --------
      • -------- Input the damage of the spell here --------
      • -------- -------------------------------------------------------------- --------
      • Set FFO_Damage[1] = 200.00
      • Set FFO_Damage[2] = 300.00
      • Set FFO_Damage[3] = 400.00
      • -------- -------------------------------------------------------------- --------
      • -------- Input the AoE of the spell here --------
      • -------- The AoE in this case is how big the area to detect the target --------
      • -------- -------------------------------------------------------------- --------
      • Set FFO_AoE[1] = 200.00
      • Set FFO_AoE[2] = 200.00
      • Set FFO_AoE[3] = 200.00
      • -------- -------------------------------------------------------------- --------
      • -------- The number of spirits which will be summoned --------
      • -------- -------------------------------------------------------------- --------
      • Set FFO_Numbers[1] = 5
      • Set FFO_Numbers[2] = 5
      • Set FFO_Numbers[3] = 5
      • -------- -------------------------------------------------------------- --------
      • -------- The Arc of the spell. 50 = Left, -50 = Right, 0 = No Arc --------
      • -------- -------------------------------------------------------------- --------
      • Set FFO_Arc[1] = 50.00
      • Set FFO_Arc[2] = 50.00
      • Set FFO_Arc[3] = 50.00
      • -------- -------------------------------------------------------------- --------
      • -------- The speed of the spirits --------
      • -------- -------------------------------------------------------------- --------
      • Set FFO_Speed[1] = 1000.00
      • Set FFO_Speed[2] = 1000.00
      • Set FFO_Speed[3] = 1000.00
      • -------- -------------------------------------------------------------- --------
      • -------- Destroy trees? --------
      • -------- -------------------------------------------------------------- --------
      • Set FFO_DestroyTree = True
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • FFO_DestroyTree Equal to True
        • Then - Actions
          • Custom script: set udg_FFO_TreeDestroyer = CreateUnit( Player(PLAYER_NEUTRAL_PASSIVE), 'h000', 0, 0, bj_UNIT_FACING )
          • Unit - Add Harvest (Gold and Lumber) to FFO_TreeDestroyer
        • Else - Actions
  • FFO Init
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to FFO_Abil
    • Actions
      • -------- -------------------------------------------------------------- --------
      • -------- Indexing --------
      • -------- -------------------------------------------------------------- --------
      • Set FFO_MaxIndex = (FFO_MaxIndex + 1)
      • Set FFO_Caster[FFO_MaxIndex] = (Triggering unit)
      • -------- -------------------------------------------------------------- --------
      • -------- Set the location of caster and center point --------
      • -------- -------------------------------------------------------------- --------
      • Set FFO_Center[FFO_MaxIndex] = (Position of FFO_Caster[FFO_MaxIndex])
      • -------- -------------------------------------------------------------- --------
      • -------- The level of ability --------
      • -------- -------------------------------------------------------------- --------
      • Set FFO_Level[FFO_MaxIndex] = (Level of FFO_Abil for FFO_Caster[FFO_MaxIndex])
      • -------- -------------------------------------------------------------- --------
      • -------- Creating the dummy group --------
      • -------- -------------------------------------------------------------- --------
      • Custom script: set udg_FFO_DummyGroup[udg_FFO_MaxIndex] = CreateGroup()
      • -------- -------------------------------------------------------------- --------
      • -------- Setting up the stage --------
      • -------- -------------------------------------------------------------- --------
      • Set FFO_Stage[FFO_MaxIndex] = 1
      • -------- -------------------------------------------------------------- --------
      • -------- Creating dummies --------
      • -------- -------------------------------------------------------------- --------
      • For each (Integer FFO_TempInt) from 1 to FFO_Numbers[FFO_Level[FFO_MaxIndex]], do (Actions)
        • Loop - Actions
          • Set FFO_Loc[2] = (FFO_Center[FFO_MaxIndex] offset by 100.00 towards ((Real(FFO_TempInt)) x (360.00 / (Real(FFO_Numbers[FFO_Level[FFO_MaxIndex]])))) degrees)
          • Unit - Create 1 FFO_DummyType for (Owner of FFO_Caster[FFO_MaxIndex]) at FFO_Loc[2] facing (Angle from FFO_Loc[2] to FFO_Center[FFO_MaxIndex]) degrees
          • Set FFO_TempUnit = (Last created unit)
          • Unit Group - Add FFO_TempUnit to FFO_DummyGroup[FFO_MaxIndex]
          • Special Effect - Create a special effect attached to the chest of FFO_TempUnit using FFO_Effect
          • -------- -------------------------------------------------------------- --------
          • -------- Remove leaks --------
          • -------- -------------------------------------------------------------- --------
          • Custom script: call RemoveLocation(udg_FFO_Loc[2])
      • -------- -------------------------------------------------------------- --------
      • -------- Loop --------
      • -------- -------------------------------------------------------------- --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • FFO_MaxIndex Equal to 1
        • Then - Actions
          • Trigger - Turn on FFO Loop <gen>
        • Else - Actions
  • FFO Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer FFO_CurIndex) from 1 to FFO_MaxIndex, do (Actions)
        • Loop - Actions
          • -------- -------------------------------------------------------------- --------
          • -------- Stage 1 --------
          • -------- -------------------------------------------------------------- --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • FFO_Stage[FFO_CurIndex] Equal to 1
            • Then - Actions
              • Unit Group - Pick every unit in FFO_DummyGroup[FFO_CurIndex] and do (Actions)
                • Loop - Actions
                  • -------- -------------------------------------------------------------- --------
                  • -------- Reference the dummies --------
                  • -------- -------------------------------------------------------------- --------
                  • Set FFO_Dummies[FFO_CurIndex] = (Picked unit)
                  • -------- -------------------------------------------------------------- --------
                  • -------- Update the locations --------
                  • -------- -------------------------------------------------------------- --------
                  • Set FFO_Loc[2] = (Position of FFO_Dummies[FFO_CurIndex])
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Distance between FFO_Center[FFO_CurIndex] and FFO_Loc[2]) Greater than or equal to FFO_Radius[FFO_Level[FFO_CurIndex]]
                    • Then - Actions
                      • -------- -------------------------------------------------------------- --------
                      • -------- Proceed to the next stage --------
                      • -------- -------------------------------------------------------------- --------
                      • Set FFO_Stage[FFO_CurIndex] = 2
                    • Else - Actions
                      • -------- -------------------------------------------------------------- --------
                      • -------- Moving the dummies --------
                      • -------- -------------------------------------------------------------- --------
                      • Set FFO_Loc[3] = (FFO_Loc[2] offset by (FFO_Speed[FFO_Level[FFO_CurIndex]] x 0.03) towards ((Angle from FFO_Center[FFO_CurIndex] to FFO_Loc[2]) + FFO_Arc[FFO_Level[FFO_CurIndex]]) degrees)
                      • Custom script: call SetUnitX(udg_FFO_Dummies[udg_FFO_CurIndex], GetLocationX(udg_FFO_Loc[3]))
                      • Custom script: call SetUnitY(udg_FFO_Dummies[udg_FFO_CurIndex], GetLocationY(udg_FFO_Loc[3]))
                      • Unit - Make FFO_Dummies[FFO_CurIndex] face ((Angle from FFO_Center[FFO_CurIndex] to FFO_Loc[2]) + 0.00) over 0.00 seconds
                      • -------- -------------------------------------------------------------- --------
                      • -------- Additional Special Effect --------
                      • -------- -------------------------------------------------------------- --------
                      • Special Effect - Create a special effect at FFO_Loc[2] using FFO_AEffect[1]
                      • Special Effect - Destroy (Last created special effect)
                      • -------- -------------------------------------------------------------- --------
                      • -------- Damaging the targets --------
                      • -------- -------------------------------------------------------------- --------
                      • Custom script: set bj_wantDestroyGroup = true
                      • Unit Group - Pick every unit in (Units within FFO_AoE[FFO_Level[FFO_CurIndex]] of FFO_Loc[2]) and do (Actions)
                        • Loop - Actions
                          • Set FFO_Targets[FFO_CurIndex] = (Picked unit)
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (FFO_Targets[FFO_CurIndex] is A structure) Equal to False
                              • (FFO_Targets[FFO_CurIndex] is alive) Equal to True
                              • (FFO_Targets[FFO_CurIndex] belongs to an enemy of (Owner of FFO_Caster[FFO_CurIndex])) Equal to True
                            • Then - Actions
                              • Unit - Cause FFO_Caster[FFO_CurIndex] to damage FFO_Targets[FFO_CurIndex], dealing (FFO_Damage[FFO_Level[FFO_CurIndex]] x 0.03) damage of attack type Spells and damage type Normal
                              • Unit - Create 1 FFO Dummy for (Owner of FFO_Caster[FFO_CurIndex]) at FFO_Loc[2] facing Default building facing degrees
                              • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
                              • Unit - Add Slow (Ice) to (Last created unit)
                              • Unit - Order (Last created unit) to Human Sorceress - Slow FFO_Targets[FFO_CurIndex]
                            • Else - Actions
                      • -------- -------------------------------------------------------------- --------
                      • -------- Destroying Trees if DestroyTree = true --------
                      • -------- -------------------------------------------------------------- --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • FFO_DestroyTree Equal to True
                        • Then - Actions
                          • Destructible - Pick every destructible within FFO_AoE[FFO_Level[FFO_CurIndex]] of FFO_Loc[2] and do (Actions)
                            • Loop - Actions
                              • Unit - Order FFO_TreeDestroyer to Harvest (Picked destructible)
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • (Current order of FFO_TreeDestroyer) Equal to (Order(harvest))
                                • Then - Actions
                                  • Destructible - Kill (Picked destructible)
                                • Else - Actions
                              • Unit - Order FFO_TreeDestroyer to Stop
                        • Else - Actions
                      • -------- -------------------------------------------------------------- --------
                      • -------- Remove leaks --------
                      • -------- -------------------------------------------------------------- --------
                      • Custom script: call RemoveLocation(udg_FFO_Loc[3])
                  • -------- -------------------------------------------------------------- --------
                  • -------- Remove leaks --------
                  • -------- -------------------------------------------------------------- --------
                  • Custom script: call RemoveLocation(udg_FFO_Loc[1])
                  • Custom script: call RemoveLocation(udg_FFO_Loc[2])
            • Else - Actions
          • -------- -------------------------------------------------------------- --------
          • -------- Stage 2 --------
          • -------- -------------------------------------------------------------- --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • FFO_Stage[FFO_CurIndex] Equal to 2
            • Then - Actions
              • Unit Group - Pick every unit in FFO_DummyGroup[FFO_CurIndex] and do (Actions)
                • Loop - Actions
                  • -------- -------------------------------------------------------------- --------
                  • -------- Reference the dummies --------
                  • -------- -------------------------------------------------------------- --------
                  • Set FFO_Dummies[FFO_CurIndex] = (Picked unit)
                  • -------- -------------------------------------------------------------- --------
                  • -------- Update the locations --------
                  • -------- -------------------------------------------------------------- --------
                  • Set FFO_Loc[2] = (Position of FFO_Dummies[FFO_CurIndex])
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Distance between FFO_Center[FFO_CurIndex] and FFO_Loc[2]) Less than or equal to 100.00
                    • Then - Actions
                      • -------- -------------------------------------------------------------- --------
                      • -------- Remove the dummies --------
                      • -------- -------------------------------------------------------------- --------
                      • Unit - Kill FFO_Dummies[FFO_CurIndex]
                      • -------- -------------------------------------------------------------- --------
                      • -------- Additional Special Effect --------
                      • -------- -------------------------------------------------------------- --------
                      • Special Effect - Create a special effect at FFO_Loc[2] using FFO_AEffect[2]
                      • Special Effect - Destroy (Last created special effect)
                      • Special Effect - Create a special effect at FFO_Loc[2] using FFO_AEffect[3]
                      • Special Effect - Destroy (Last created special effect)
                      • -------- -------------------------------------------------------------- --------
                      • -------- Proceed to the next stage --------
                      • -------- -------------------------------------------------------------- --------
                      • Set FFO_Stage[FFO_CurIndex] = 3
                    • Else - Actions
                      • -------- -------------------------------------------------------------- --------
                      • -------- Moving the dummies back --------
                      • -------- -------------------------------------------------------------- --------
                      • Set FFO_Loc[3] = (FFO_Loc[2] offset by ((FFO_Speed[FFO_Level[FFO_CurIndex]] x 0.03) x -1.00) towards ((Angle from FFO_Center[FFO_CurIndex] to FFO_Loc[2]) + FFO_Arc[FFO_Level[FFO_CurIndex]]) degrees)
                      • Custom script: call SetUnitX(udg_FFO_Dummies[udg_FFO_CurIndex], GetLocationX(udg_FFO_Loc[3]))
                      • Custom script: call SetUnitY(udg_FFO_Dummies[udg_FFO_CurIndex], GetLocationY(udg_FFO_Loc[3]))
                      • Unit - Make FFO_Dummies[FFO_CurIndex] face ((Angle from FFO_Center[FFO_CurIndex] to FFO_Loc[2]) + 0.00) over 0.00 seconds
                      • -------- -------------------------------------------------------------- --------
                      • -------- Additional Special Effect --------
                      • -------- -------------------------------------------------------------- --------
                      • Special Effect - Create a special effect at FFO_Loc[2] using FFO_AEffect[1]
                      • Special Effect - Destroy (Last created special effect)
                      • -------- -------------------------------------------------------------- --------
                      • -------- Damaging the targets --------
                      • -------- -------------------------------------------------------------- --------
                      • Custom script: set bj_wantDestroyGroup = true
                      • Unit Group - Pick every unit in (Units within FFO_AoE[FFO_Level[FFO_CurIndex]] of FFO_Loc[2]) and do (Actions)
                        • Loop - Actions
                          • Set FFO_Targets[FFO_CurIndex] = (Picked unit)
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (FFO_Targets[FFO_CurIndex] is A structure) Equal to False
                              • (FFO_Targets[FFO_CurIndex] is alive) Equal to True
                              • (FFO_Targets[FFO_CurIndex] belongs to an enemy of (Owner of FFO_Caster[FFO_CurIndex])) Equal to True
                            • Then - Actions
                              • Unit - Cause FFO_Caster[FFO_CurIndex] to damage FFO_Targets[FFO_CurIndex], dealing (FFO_Damage[FFO_Level[FFO_CurIndex]] x 0.03) damage of attack type Spells and damage type Normal
                              • Unit - Create 1 FFO Dummy for (Owner of FFO_Caster[FFO_CurIndex]) at FFO_Loc[2] facing Default building facing degrees
                              • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
                              • Unit - Add Slow (Ice) to (Last created unit)
                              • Unit - Order (Last created unit) to Human Sorceress - Slow FFO_Targets[FFO_CurIndex]
                            • Else - Actions
                      • -------- -------------------------------------------------------------- --------
                      • -------- Destroying Trees if DestroyTree = true --------
                      • -------- -------------------------------------------------------------- --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • FFO_DestroyTree Equal to True
                        • Then - Actions
                          • Destructible - Pick every destructible within FFO_AoE[FFO_Level[FFO_CurIndex]] of FFO_Loc[2] and do (Actions)
                            • Loop - Actions
                              • Unit - Order FFO_TreeDestroyer to Harvest (Picked destructible)
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • (Current order of FFO_TreeDestroyer) Equal to (Order(harvest))
                                • Then - Actions
                                  • Destructible - Kill (Picked destructible)
                                • Else - Actions
                              • Unit - Order FFO_TreeDestroyer to Stop
                        • Else - Actions
                      • -------- -------------------------------------------------------------- --------
                      • -------- Remove leaks --------
                      • -------- -------------------------------------------------------------- --------
                      • Custom script: call RemoveLocation(udg_FFO_Loc[3])
                  • -------- -------------------------------------------------------------- --------
                  • -------- Remove leaks --------
                  • -------- -------------------------------------------------------------- --------
                  • Custom script: call RemoveLocation(udg_FFO_Loc[1])
                  • Custom script: call RemoveLocation(udg_FFO_Loc[2])
            • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • FFO_Stage[FFO_CurIndex] Equal to 3
            • Then - Actions
              • -------- -------------------------------------------------------------- --------
              • -------- Deindex --------
              • -------- -------------------------------------------------------------- --------
              • Set FFO_Caster[FFO_CurIndex] = FFO_Caster[FFO_MaxIndex]
              • Set FFO_Caster[FFO_MaxIndex] = No unit
              • Set FFO_Targets[FFO_CurIndex] = FFO_Targets[FFO_MaxIndex]
              • Set FFO_Targets[FFO_MaxIndex] = No unit
              • Set FFO_Dummies[FFO_CurIndex] = FFO_Dummies[FFO_MaxIndex]
              • Set FFO_Dummies[FFO_MaxIndex] = No unit
              • Custom script: call DestroyGroup(udg_FFO_DummyGroup[udg_FFO_CurIndex])
              • Set FFO_DummyGroup[FFO_CurIndex] = FFO_DummyGroup[FFO_MaxIndex]
              • Custom script: set udg_FFO_DummyGroup[udg_FFO_MaxIndex] = null
              • Set FFO_Level[FFO_CurIndex] = FFO_Level[FFO_MaxIndex]
              • Set FFO_Level[FFO_MaxIndex] = 0
              • Set FFO_Stage[FFO_CurIndex] = FFO_Stage[FFO_MaxIndex]
              • Set FFO_Stage[FFO_MaxIndex] = 0
              • Custom script: call RemoveLocation(udg_FFO_Center[udg_FFO_CurIndex])
              • Set FFO_Center[FFO_CurIndex] = FFO_Center[FFO_MaxIndex]
              • Set FFO_CurIndex = (FFO_CurIndex - 1)
              • Set FFO_MaxIndex = (FFO_MaxIndex - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • FFO_MaxIndex Equal to 0
                • Then - Actions
                  • Trigger - Turn off (This trigger)
                • Else - Actions
            • Else - Actions


Author's Note:
I'm really sorry for the delay. I've been real busy dealing with university these days. One of the reason it took so long is there was a bug which I couldn't solve in one of the features, so I had to remove it. But anyway, here it goes! Enjoy!
 

Attachments

  • Frozen Force by Rheiko.w3x
    52.6 KB · Views: 83
Last edited:
Status
Not open for further replies.
Top