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

Aquaos v1.0.1

AQUAOS
BY DAFFA THE MAGE
The Magic Kingdom Entry [RACC] :
A water magic used only by powerful mages, allows a massive amount of water appears in a field even at places where waters are near empty, cause heavy tidal waves in the area of effect.

In-Game Description :
Unleash a powerful water from the grounds. Deal heavy damage to all opponents within 600 range after a short minimal damage release per second. Channeling.
Level 1 - 10 minimal damage, 100 burst damage, 1 second delay.
Level 2 - 20 minimal damage, 200 burst damage, 2 second delay.
Level 3 - 30 minimal damage, 300 burst damage, 3 second delay.

Requirements :

GUI Spell System v1.6.1.0

Triggers :

  • Aquaos Config
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Set Spell__Ability = Aquaos
      • Set Spell__Trigger_OnCast = Aquaos Cast <gen>
      • Set Spell__Trigger_OnLoop = Aquaos Loop <gen>
      • -------- Filter --------
      • Set Spell__Filter_AllowMechanical = True
      • Set Spell__Filter_AllowStructure = True
      • Set Spell__Filter_AllowEnemy = True
      • Set Spell__Filter_AllowLiving = True
      • Set Spell__Filter_AllowHero = True
      • Set Spell__Filter_AllowNonHero = True
      • -------- Damage per second --------
      • Set Spell__Time = 1.00
      • -------- Duration before final burst (equalize with Follow Through Time in Object Editor) --------
      • Set Spell__Duration = 0.00
      • Set Spell__DurationPerLevel = 1.00
      • -------- Initial damage (BaseDmg + LevelDmg*Level) --------
      • Set Aquaos_InitialDamage = 0.00
      • Set Aquaos_InitialDamagePerLevel = 10.00
      • -------- Final Burst damage (BaseDmg + LevelDmg*Level) --------
      • Set Aquaos_BurstDamage = 0.00
      • Set Aquaos_BurstDamagePerLevel = 100.00
      • -------- Area of Effect (BaseAoE + LevelAoE*Level) --------
      • Set Aquaos_AoE = 600.00
      • Set Aquaos_AoEPerLevel = 0.00
      • -------- Initial SFX --------
      • Set Aquaos_InitialSFX = Abilities\Spells\Undead\FrostArmor\FrostArmorDamage.mdl
      • -------- Burst SFX --------
      • Set Aquaos_BurstSFX = Objects\Spawnmodels\Naga\NagaDeath\NagaDeath.mdl
      • Trigger - Run Spell System <gen> (checking conditions)
  • Aquaos Cast
    • Events
    • Conditions
    • Actions
      • Set Spell__StartDuration = True
  • Aquaos Loop
    • Events
    • Conditions
    • Actions
      • Set Spell__InRangePoint = Spell__TargetPoint
      • Set Spell__InRange = (Aquaos_AoE + (Aquaos_AoEPerLevel x Spell__LevelMultiplier))
      • -------- Channel detection --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Spell__Channeling Equal to False
        • Then - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Spell__Duration Greater than 0.00
            • Then - Actions
              • Set Spell__Duration = 0.00
            • Else - Actions
        • Else - Actions
          • -------- DPS damage --------
          • Unit Group - Pick every unit in Spell__InRangeGroup and do (Actions)
            • Loop - Actions
              • Unit - Cause Spell__Caster to damage (Picked unit), dealing (Aquaos_InitialDamage + (Aquaos_InitialDamagePerLevel x Spell__LevelMultiplier)) damage of attack type Spells and damage type Normal
              • Special Effect - Create a special effect attached to the origin of (Picked unit) using Aquaos_InitialSFX
              • Special Effect - Destroy (Last created special effect)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Spell__Completed Equal to True
        • Then - Actions
          • -------- Burst damage --------
          • Unit Group - Pick every unit in Spell__InRangeGroup and do (Actions)
            • Loop - Actions
              • Unit - Cause Spell__Caster to damage (Picked unit), dealing (Aquaos_BurstDamage + (Aquaos_BurstDamagePerLevel x Spell__LevelMultiplier)) damage of attack type Spells and damage type Normal
              • Special Effect - Create a special effect attached to the origin of (Picked unit) using Aquaos_BurstSFX
              • Special Effect - Destroy (Last created special effect)
        • Else - Actions

Demonstration :

Changelog :
Version 1.0.1 : Changed final damage to not combine burst and interval damage. Added a cooldown for the spell.


Credit:
Spell System by @Bribe


If you like this work and wish to support me financially, you can support me via Ko-fi.
Contents

Aquaos (Map)

Reviews
KILLCIDE
Spell concept is kind of meh and the visuals could use some work, but the length of the code is pretty astonishing. This is a great example of what Bribe's spell system can do. Needs Fixed Nothing Suggestions Why don't you store the AoE & damage...

EdgeOfChaos

E

EdgeOfChaos

Is this MUI? Currently, it breaks for me if I try to stack them with two blood mages (never releases the final blast)
 

EdgeOfChaos

E

EdgeOfChaos

Haha, I did not realize it was channeling. My bad! Nice spell.
 
Nice Spell you might make it cloneable, which is quite easy to do with Bribe's Spell System.
Would still boost up its useablity alot.
you save all aquaos Variables in the config as array using an creation index. This Creation Index you count up at the end of the Config.
In your case you can save everything inside creation index and count up creation index by 1 at the end of config.
If you would save data not as formel you would save them as Creation index + Level; aka Creation Index + 1, Creation Index + 2 ... .​
Additional you save creation Index onto the ability inside spell hash to easy load it in spells logic.

inside your cast Trigger: you save something like usedAbilityIndex[Spell Index] = Loaded AbilityCreation Index;
And use this usedAbilityIndex[Spell Index] inside your logic.

The bad point about this is that you have to convert Ability <> AbilityId using custom script, cause GUIhash does not accept Abilities which are actually Ids.
And might be a bit slower (not much), if one does not uses any Clone of this Spell.

udg_AbilityId is an Integer which you would have to create.
This converts the Spoken Ability inside Casting to an integer.
  • Custom script: set udg_AbilityId = GetSpellAbilityId()
This converts the Choosen Ability in the Config to an integer.
  • Custom script: set udg_AbilityId = udg_Spell__Ability
But it will reduces the mappers work to clone this to:
  • Clone Spell in Object Editor
  • Clone the config
  • Change cloned config's/Spell's data.

Edit: is it intended that a unit takes burstDamage + intervalDamage at complet casting?
 
Last edited:
is it intended that a unit takes burstDamage + intervalDamage at complet casting?
At the moment, yes. Though I plan to change that in the near future.

EDIT :

I do aware of boosting it into another level, but that would make it sort of a system. Might as well make it an interval-burst system. How about that for your resources instead? You can use mine as base :)

HAHAHA. This is amusing.
 
Level 37
Joined
Jul 22, 2015
Messages
3,485
Spell concept is kind of meh and the visuals could use some work, but the length of the code is pretty astonishing. This is a great example of what Bribe's spell system can do.

Needs Fixed

  • Nothing

Suggestions

  • Why don't you store the AoE & damage into an array instead of recalculating it every time the loop fires?
  • InitialSFX & BurstSFX should have configurable attachment points
  • Attack type & damage type should be configurable
  • In both your unit group loops, store (Picked unit) into a variable so you don't have to call the function twice per iteration

Status

Approved
 
Thanks for the approval!

Spell concept is kind of meh
Hehehe. I go for old classics.

the visuals could use some work
I have no idea in mind for a much better visual... Except...

Why don't you store the AoE & damage into an array instead of recalculating it every time the loop fires?
Like how spells usually goes? I just follow the example in Bribe's System. I'll do it when I have time.

InitialSFX & BurstSFX should have configurable attachment points
Will do.

Attack type & damage type should be configurable
Welp, reminds me of someone who has almost everything configurable :p
Will do.

In both your unit group loops, store (Picked unit) into a variable so you don't have to call the function twice per iteration
How much of efficiency difference it makes? But still, will do.
 
Level 22
Joined
Nov 4, 2010
Messages
6,232
Very interesting indeed, and certainly is a nice addition. We can always use some fancy new spells to make things more interesting. But I think the visuals can be improved... And I hope you can try to add more high-power fantasy anime spells in the future too! ^^

But I have some questions though,

1. Are the targeted/marked victims safe if they run away from the caster? Or are they doomed once hit, unless the caster is stunned?
2. Can the spell be configured to be uninterruptible, so that even after stunning the Blood Mage, it still happens?
 
Very interesting indeed, and certainly is a nice addition. We can always use some fancy new spells to make things more interesting. But I think the visuals can be improved... And I hope you can try to add more high-power fantasy anime spells in the future too! ^^

But I have some questions though,

1. Are the targeted/marked victims safe if they run away from the caster? Or are they doomed once hit, unless the caster is stunned?
2. Can the spell be configured to be uninterruptible, so that even after stunning the Blood Mage, it still happens?

1. As far as memory preserves, if they get out of range they will be covered properly
2. Possible, but kind of need to rework the third trigger (the loop) logic. Need some Spell System knowledge for that tbh.
 
Level 22
Joined
Nov 4, 2010
Messages
6,232
1. As far as memory preserves, if they get out of range they will be covered properly
2. Possible, but kind of need to rework the third trigger (the loop) logic. Need some Spell System knowledge for that tbh.

1. So, in other words, if they run away, they won't be hit?

2. I don't know, but an idea came to my head suddenly... Maybe we can use some sort of dummy spell unit if we want it to be uninterruptible? Like, the guy casts the dummy spell on the target area, and then the trigger summons a dummy unit on that guy's position, the dummy unit who then casts the real spell there?
 
Top