🏆 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!
Hello there, I'm back with another simple spell that you might like and enjoy.
Just don't forget to give me credits if you use this in your map. ~
- Starforce -
Calls down 4 falling stars to surround a target location, the stars land and then move in circular motion towards the center of the target location, pulling the enemy units in its path towards them while dealing damage. As the stars reach the center, they will explode, dealing final damage to enemy units within 500 range and slow them down by 50% for 2 seconds.
Level 1 - Deals 75 initial damage and 100 final damage.
Level 2 -Deals 150 initial damage and 150 final damage.
Level 3 - Deals 225 initial damage and 200 final damage.
=======================
IMPORTING INSTRUCTION
=======================
1. Copy Starforce, Starforce (Slow) Abilities
2. Copy Starforce Buff
3. Import StarfallTarget2 model file from this link -> https://www.hiveworkshop.com/threads/starfall-missile.65884/
and Import AncientExplode model file from this link -> https://www.hiveworkshop.com/threads/ancient-explosion-sfx.104179/
or just export the ones in this map and import it to your map. Don't forget to credit Pyritie and WILL THE ALMIGHTY for these awesome models.
4. Copy Starforce Dummies (SF_DummyCaster, SF_DummyMissile)
5. Make sure your World Editor has "Automatically Create Unknown Variable" enabled. You can find it in File => Preferences
6. Copy all the triggers in "Starforce" folder
7. Make sure the variables are assigned properly
8. Enjoy!
SF Config
Events
Map initialization
Conditions
Actions
-------- ---------- --------
-------- This is configuration part of the spell --------
-------- You can change the values to whatever you desire to certain extent --------
-------- ---------- --------
-------- Make sure the following variable store the ability you will use in object editor --------
Set SF_Ability = Starforce
-------- ---------- --------
-------- These are dummy units we will use in the spell --------
-------- SF_DummyType[1] is the starfall missile that will move around --------
-------- SF_DummyType[2] is dummy caster used to cast slow --------
-------- Make sure to change these values accordingly when you import this to your map --------
Set SF_DummyType[1] = SF_DummyMissile
Set SF_DummyType[2] = SF_DummyCaster
-------- ---------- --------
-------- These are the special effects we will use in the spell --------
-------- SF_SpecialEffect[1] is the starfall effect --------
-------- SF_SpecialEffect[2] is the landing effect --------
-------- SF_SpecialEffect[3] is the explosion effect --------
Set SF_SpecialEffect[1] = Abilities\Spells\NightElf\Starfall\StarfallTarget.mdl
Set SF_SpecialEffect[2] = Abilities\Spells\Human\Thunderclap\ThunderClapCaster.mdl
Set SF_SpecialEffect[3] = war3mapImported\AncientExplode.mdl
-------- ---------- --------
-------- These are dummy abilities we will use in the spell --------
-------- SF_DummyAbility[1] is Starforce (Slow) --------
-------- SF_DummyAbility[2] is Harvest (Gold and Lumber); we will use this to destroy tree later on --------
Set SF_DummyAbility[1] = Starforce (Slow)
Set SF_DummyAbility[2] = Harvest (Gold and Lumber)
-------- ---------- --------
-------- The following variable determines the number of stars you want to summon per level --------
Set SF_Number[1] = 4
Set SF_Number[2] = 4
Set SF_Number[3] = 4
-------- ---------- --------
-------- The following variable determines the radius of your spell per level --------
-------- Also used to determine where the stars will be spawned --------
Set SF_BaseRadius[1] = 500.00
Set SF_BaseRadius[2] = 500.00
Set SF_BaseRadius[3] = 500.00
-------- ---------- --------
-------- The following variable determines the radius used by the spell to detect enemy units within range --------
-------- Used when the spell is dealing damage to enemy units in its path --------
-------- Basically used by the swirly stars --------
Set SF_AoE[1] = 150.00
Set SF_AoE[2] = 150.00
Set SF_AoE[3] = 150.00
-------- ---------- --------
-------- The following variable determines the radius used by the spell to detect enemy units within range --------
-------- Used when the spell is dealing final damage to enemy units after explosion --------
Set SF_FinalAoE[1] = 500.00
Set SF_FinalAoE[2] = 500.00
Set SF_FinalAoE[3] = 500.00
-------- ---------- --------
-------- The following variable determines the amount of damage you deal towards the enemy units --------
-------- Used when the spell is dealing damage to enemy units in its path --------
Set SF_1stDamage[1] = 75.00
Set SF_1stDamage[2] = 150.00
Set SF_1stDamage[3] = 225.00
-------- ---------- --------
-------- The following variable determines the amount of damage you deal towards the enemy units --------
-------- Used when the spell is dealing final damage to enemy units after explosion --------
Set SF_2ndDamage[1] = 100.00
Set SF_2ndDamage[2] = 150.00
Set SF_2ndDamage[3] = 200.00
-------- ---------- --------
-------- The following variable determines the type of attack and damage used when dealing damage --------
Set SF_1stAttackType = Spells
Set SF_1stDamageType = Magic
Set SF_2ndAttackType = Spells
Set SF_2ndDamageType = Magic
-------- ---------- --------
-------- The following variable determines the horizontal arc of the projectile as it moves toward the center --------
-------- Positive Value = Clockwise, Negative Value = Counter Clockwise --------
-------- If you're using default config, don't go over the value of 74 or else the spell will break --------
-------- If you change the base radius, the max value for Arc Variable can differ --------
Set SF_Arc[1] = 70.00
Set SF_Arc[2] = 70.00
Set SF_Arc[3] = 70.00
-------- ---------- --------
-------- The following variable determines the projectile speed as it moves toward the center --------
Set SF_BaseSpeed[1] = 900.00
Set SF_BaseSpeed[2] = 900.00
Set SF_BaseSpeed[3] = 900.00
-------- ---------- --------
-------- The following variable determines how much delay that it takes before the spell starts --------
-------- Adjust accordingly depending on starfall animation, don't change this unless you change the model --------
Set SF_Delay[1] = 0.75
Set SF_Delay[2] = 0.75
Set SF_Delay[3] = 0.75
-------- ---------- --------
-------- Do you want this spell to have a pulling effect? If yes, set it to true. If not, set it to false. --------
Set SF_StarPull[1] = True
Set SF_StarPull[2] = True
Set SF_StarPull[3] = True
-------- ---------- --------
-------- The following variable determines how strong it's pulling the enemy units toward the stars --------
-------- Recommendations: 3.00 for a slight pull, 5.00 for a strong pull, 7.00 for a crazy strong pull --------
Set SF_PullPower[1] = 3.00
Set SF_PullPower[2] = 5.00
Set SF_PullPower[3] = 7.00
-------- ---------- --------
-------- Do you want this spell to damage buildings? If yes, set it to true. If not, set it to false. --------
Set SF_DmgBuilding = True
-------- ---------- --------
-------- This will determine whether the spell deal full damage to buildings or not by percentage --------
-------- 1 = full (100%) damage --------
-------- 2 = double (200%) damage --------
-------- 0.5 = half (50%) damage --------
Set SF_DmgBuildingFactor[1] = 1.00
Set SF_DmgBuildingFactor[2] = 1.00
Set SF_DmgBuildingFactor[3] = 1.00
-------- ---------- --------
-------- Do you want this spell to destroy trees? If yes, set it to true. If not, set it to false. --------
Set SF_DestroyTree = True
-------- ---------- --------
-------- +> OFF LIMIT <+ --------
-------- Do Not Change Anything Below This Point --------
-------- Or Else The Spell Might Not Work As Intended --------
-------- Make Sure You Know What You Are Doing --------
-------- ---------- --------
-------- The value of Periodic Timer in Looping Trigger --------
Set SF_PeriodicTimer = 0.03
-------- The looping trigger itself --------
Set SF_Loop = SF Loop <gen>
-------- Adding the event to the trigger --------
Trigger - Add to SF_Loop the event (Time - Every SF_PeriodicTimer seconds of game time)
-------- ---------- --------
Set SF_TempLoc = (Center of (Playable map area))
-------- Preloading --------
Unit - Create 1 SF_DummyType[1] for Player 1 (Red) at SF_Loc[1] facing Default building facing degrees
Unit - Remove (Last created unit) from the game
Unit - Create 1 SF_DummyType[2] for Player 1 (Red) at SF_Loc[1] facing Default building facing degrees
Unit - Add SF_Ability to (Last created unit)
Unit - Remove SF_Ability from (Last created unit)
Unit - Add SF_DummyAbility[1] to (Last created unit)
Unit - Remove SF_DummyAbility[1] from (Last created unit)
Unit - Add SF_DummyAbility[2] to (Last created unit)
Unit - Remove SF_DummyAbility[2] from (Last created unit)
Unit - Remove (Last created unit) from the game
-------- Create a caster dummy --------
Unit - Create 1 SF_DummyType[2] for Neutral Passive at SF_TempLoc facing Default building facing degrees
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SF_SpellCount Equal to 1
Then - Actions
Trigger - Turn on SF_Loop
Else - Actions
-------- loop is already on; do nothing --------
-------- - --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SF_RecycledSize Equal to 0
Then - Actions
Set SF_MaxIndex = (SF_MaxIndex + 1)
Set SF_Spell_ID = SF_MaxIndex
Else - Actions
Set SF_RecycledSize = (SF_RecycledSize - 1)
Set SF_Spell_ID = SF_RecycledStack[SF_RecycledSize]
Set SF_NodeNext[SF_Spell_ID] = 0
Set SF_NodeNext[SF_NodePrev[0]] = SF_Spell_ID
Set SF_NodePrev[SF_Spell_ID] = SF_NodePrev[0]
Set SF_NodePrev[0] = SF_Spell_ID
-------- - --------
Set SF_Caster[SF_Spell_ID] = (Triggering unit)
Set SF_Owner[SF_Spell_ID] = (Triggering player)
Set SF_TargetLoc[SF_Spell_ID] = (Target point of ability being cast)
Set SF_Level[SF_Spell_ID] = (Level of SF_Ability for SF_Caster[SF_Spell_ID])
Set SF_Stage[SF_Spell_ID] = 1
Set SF_Counter[SF_Spell_ID] = 0.00
Set SF_Speed[SF_Spell_ID] = (SF_BaseSpeed[SF_Level[SF_Spell_ID]] x SF_PeriodicTimer)
Set SF_Radius[SF_Spell_ID] = (SF_BaseRadius[SF_Level[SF_Spell_ID]] / 2.00)
Custom script: if udg_SF_DMissileGroup[udg_SF_Spell_ID] == null then
Custom script: set udg_SF_DMissileGroup[udg_SF_Spell_ID] = CreateGroup()
Custom script: endif
Custom script: if udg_SF_PullGroup[udg_SF_Spell_ID] == null then
Custom script: set udg_SF_PullGroup[udg_SF_Spell_ID] = CreateGroup()
Custom script: endif
Custom script: if udg_SF_UndamagedGroup[udg_SF_Spell_ID] == null then
Custom script: set udg_SF_UndamagedGroup[udg_SF_Spell_ID] = CreateGroup()
Custom script: endif
Custom script: if udg_SF_UndamagedGroup2[udg_SF_Spell_ID] == null then
Custom script: set udg_SF_UndamagedGroup2[udg_SF_Spell_ID] = CreateGroup()
Custom script: endif
-------- - --------
For each (Integer SF_TempInt) from 1 to SF_Number[SF_Level[SF_Spell_ID]], do (Actions)
Loop - Actions
Set SF_TempLoc = (SF_TargetLoc[SF_Spell_ID] offset by SF_Radius[SF_Spell_ID] towards ((Real(SF_TempInt)) x (360.00 / (Real(SF_Number[SF_Level[SF_Spell_ID]])))) degrees)
Special Effect - Create a special effect at SF_TempLoc using SF_SpecialEffect[1]
Set SF_SpawnEffect[((SF_Number[SF_MaxLevel] x (SF_Spell_ID - 1)) + SF_TempInt)] = (Last created special effect)
For each (Integer SF_LoopInt) from 1 to SF_SpellCount, do (Actions)
Loop - Actions
Set SF_Spell_ID = SF_NodeNext[SF_Spell_ID]
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SF_Stage[SF_Spell_ID] Equal to 1
Then - Actions
-------- check if the delay time has passed --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SF_Counter[SF_Spell_ID] Greater than or equal to SF_Delay[SF_Level[SF_Spell_ID]]
Then - Actions
-------- it has; destroy spawn effect then create dummy units that act as starforce missiles and add them to DMissileGroup --------
For each (Integer SF_TempInt) from 1 to SF_Number[SF_Level[SF_Spell_ID]], do (Actions)
Loop - Actions
Special Effect - Destroy SF_SpawnEffect[((SF_Number[SF_MaxLevel] x (SF_Spell_ID - 1)) + SF_TempInt)]
Set SF_Loc[1] = (SF_TargetLoc[SF_Spell_ID] offset by SF_Radius[SF_Spell_ID] towards ((Real(SF_TempInt)) x (360.00 / (Real(SF_Number[SF_Level[SF_Spell_ID]])))) degrees)
Special Effect - Create a special effect at SF_Loc[1] using SF_SpecialEffect[2]
Special Effect - Destroy (Last created special effect)
Unit - Create 1 SF_DummyType[1] for SF_Owner[SF_Spell_ID] at SF_Loc[1] facing ((Angle from SF_Loc[1] to SF_TargetLoc[SF_Spell_ID]) + 45.00) degrees
Unit Group - Add (Last created unit) to SF_DMissileGroup[SF_Spell_ID]
Custom script: call RemoveLocation(udg_SF_Loc[1])
-------- proceed to stage 2 --------
Set SF_Stage[SF_Spell_ID] = 2
Else - Actions
-------- it has not; increase counter value --------
Set SF_Counter[SF_Spell_ID] = (SF_Counter[SF_Spell_ID] + SF_PeriodicTimer)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SF_Stage[SF_Spell_ID] Equal to 2
Then - Actions
-------- check if unit group is empty --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Number of units in SF_DMissileGroup[SF_Spell_ID]) Not equal to 0
Then - Actions
-------- it's not; move them towards the center --------
Unit Group - Pick every unit in SF_DMissileGroup[SF_Spell_ID] and do (Actions)
Loop - Actions
Set SF_DummyMissile[SF_Spell_ID] = (Picked unit)
Set SF_Loc[1] = (Position of SF_DummyMissile[SF_Spell_ID])
Set SF_Angle[SF_Spell_ID] = ((Angle from SF_Loc[1] to SF_TargetLoc[SF_Spell_ID]) + SF_Arc[SF_Level[SF_Spell_ID]])
Set SF_Loc[2] = (SF_Loc[1] offset by SF_Speed[SF_Spell_ID] towards SF_Angle[SF_Spell_ID] degrees)
Unit Group - Pick every unit in (Units within SF_AoE[SF_Level[SF_Spell_ID]] of SF_Loc[1]) and do (Actions)
Loop - Actions
Set SF_TempUnit = (Picked unit)
-------- filter --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(SF_TempUnit is alive) Equal to True
(SF_TempUnit belongs to an enemy of SF_Owner[SF_Spell_ID]) Equal to True
(SF_TempUnit is Magic Immune) Equal to False
(SF_TempUnit is in SF_UndamagedGroup[SF_Spell_ID]) Equal to False
Then - Actions
-------- another filter for building check --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SF_DmgBuilding Equal to True
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(SF_TempUnit is A structure) Equal to True
Then - Actions
Unit - Cause SF_Caster[SF_Spell_ID] to damage SF_TempUnit, dealing (SF_1stDamage[SF_Level[SF_Spell_ID]] x SF_DmgBuildingFactor[SF_Level[SF_Spell_ID]]) damage of attack type SF_1stAttackType and damage type SF_1stDamageType
-------- preventing them from being affected more than once --------
Unit Group - Add SF_TempUnit to SF_UndamagedGroup[SF_Spell_ID]
Else - Actions
Unit - Cause SF_Caster[SF_Spell_ID] to damage SF_TempUnit, dealing SF_1stDamage[SF_Level[SF_Spell_ID]] damage of attack type SF_1stAttackType and damage type SF_1stDamageType
-------- preventing them from being affected more than once --------
Unit Group - Add SF_TempUnit to SF_UndamagedGroup[SF_Spell_ID]
-------- adding necessary unit to pull group --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(SF_TempUnit is in SF_PullGroup[SF_Spell_ID]) Equal to False
Then - Actions
Unit Group - Add SF_TempUnit to SF_PullGroup[SF_Spell_ID]
Else - Actions
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(SF_TempUnit is A structure) Equal to False
Then - Actions
Unit - Cause SF_Caster[SF_Spell_ID] to damage SF_TempUnit, dealing SF_1stDamage[SF_Level[SF_Spell_ID]] damage of attack type SF_1stAttackType and damage type SF_1stDamageType
-------- preventing them from being affected more than once --------
Unit Group - Add SF_TempUnit to SF_UndamagedGroup[SF_Spell_ID]
-------- adding necessary unit to pull group --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(SF_TempUnit is in SF_PullGroup[SF_Spell_ID]) Equal to False
Then - Actions
Unit Group - Add SF_TempUnit to SF_PullGroup[SF_Spell_ID]
Else - Actions
Else - Actions
Else - Actions
-------- check if user wants to have a pulling effect --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SF_StarPull[SF_Level[SF_Spell_ID]] Equal to True
Then - Actions
Unit Group - Pick every unit in SF_PullGroup[SF_Spell_ID] and do (Actions)
Loop - Actions
Set SF_TempUnit = (Picked unit)
Set SF_Loc[3] = (Position of SF_TempUnit)
Set SF_Angle2[SF_Spell_ID] = (Angle from SF_Loc[3] to SF_Loc[1])
Set SF_Loc[4] = (SF_Loc[3] offset by SF_PullPower[SF_Level[SF_Spell_ID]] towards SF_Angle2[SF_Spell_ID] degrees)
-------- check if user wants to destroy trees --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SF_DestroyTree Equal to True
Then - Actions
Destructible - Pick every destructible within SF_AoE[SF_Level[SF_Spell_ID]] of SF_Loc[1] and do (Actions)
Loop - Actions
Set SF_TempDest = (Picked destructible)
Unit - Order SF_DummyCaster to Harvest SF_TempDest
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Current order of SF_DummyCaster) Equal to (Order(harvest))
Then - Actions
Destructible - Kill SF_TempDest
Else - Actions
Unit - Order SF_DummyCaster to Stop
Else - Actions
-------- check if it has reached the center --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Distance between SF_Loc[1] and SF_TargetLoc[SF_Spell_ID]) Less than or equal to 50.00
Then - Actions
-------- It has; kill the dummy inside the unit group --------
Unit - Kill SF_DummyMissile[SF_Spell_ID]
Else - Actions
-------- It has not; do nothing --------
Custom script: call RemoveLocation(udg_SF_Loc[1])
Custom script: call RemoveLocation(udg_SF_Loc[2])
Else - Actions
-------- it is empty; create special effect --------
Special Effect - Create a special effect at SF_TargetLoc[SF_Spell_ID] using SF_SpecialEffect[3]
Special Effect - Destroy (Last created special effect)
Custom script: set bj_wantDestroyGroup = true
Unit Group - Pick every unit in (Units within SF_FinalAoE[SF_Level[SF_Spell_ID]] of SF_TargetLoc[SF_Spell_ID]) and do (Actions)
Loop - Actions
Set SF_TempUnit = (Picked unit)
-------- filter --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(SF_TempUnit is alive) Equal to True
(SF_TempUnit belongs to an enemy of SF_Owner[SF_Spell_ID]) Equal to True
(SF_TempUnit is Magic Immune) Equal to False
(SF_TempUnit is in SF_UndamagedGroup2[SF_Spell_ID]) Equal to False
Then - Actions
-------- another filter for building check --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SF_DmgBuilding Equal to True
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(SF_TempUnit is A structure) Equal to True
Then - Actions
Unit - Cause SF_Caster[SF_Spell_ID] to damage SF_TempUnit, dealing (SF_2ndDamage[SF_Level[SF_Spell_ID]] x SF_DmgBuildingFactor[SF_Level[SF_Spell_ID]]) damage of attack type SF_2ndAttackType and damage type SF_2ndDamageType
-------- preventing them from being affected more than once --------
Unit Group - Add SF_TempUnit to SF_UndamagedGroup2[SF_Spell_ID]
Else - Actions
Unit - Order SF_DummyCaster to Human Sorceress - Slow SF_TempUnit
Unit - Cause SF_Caster[SF_Spell_ID] to damage SF_TempUnit, dealing SF_2ndDamage[SF_Level[SF_Spell_ID]] damage of attack type SF_2ndAttackType and damage type SF_2ndDamageType
-------- preventing them from being affected more than once --------
Unit Group - Add SF_TempUnit to SF_UndamagedGroup2[SF_Spell_ID]
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(SF_TempUnit is A structure) Equal to False
Then - Actions
Unit - Order SF_DummyCaster to Human Sorceress - Slow SF_TempUnit
Unit - Cause SF_Caster[SF_Spell_ID] to damage SF_TempUnit, dealing SF_2ndDamage[SF_Level[SF_Spell_ID]] damage of attack type SF_2ndAttackType and damage type SF_2ndDamageType
-------- preventing them from being affected more than once --------
Unit Group - Add SF_TempUnit to SF_UndamagedGroup2[SF_Spell_ID]
v1.1 (Minor Fix)
- Removed SpawnEffect[] properly as it wasn't removed properly.
v1.1
- Added SF_DmgBuilding (boolean) to Config Trigger, in case end-user wants the spell to deal damage to buildings.
- Added SF_DmgBuildingFactor (real) to Config Trigger, to determine damage reduction / increase vs buildings.
- Removed SF_DummySpawn from Object Editor and replaced it with Special Effect in Trigger Editor.
The definition of SF_AoE is a bit unclear. I would have guessed at first that the explosions of the stars falling to the ground deal the initial damage, but it's actually the swirly stars moving past a unit for the first time that do it. It might be...
My first time using Linked List for this, trying to honor KILLCIDE's suggestion after so many years. Please don't be too harsh on me.
Any feedback is greatly appreciated and definitely let me know if there is something I missed, I tend to be very clumsy.
Hopefully, it's not too simple and you all like it
You're not set as the author of your spell and so it doesn't appear in your profile page. This seems to be a bug that sometimes occurs. You can add yourself as the author on the edit page.
You're not set as the author of your spell and so it doesn't appear in your profile page. This seems to be a bug that sometimes occurs. You can add yourself as the author on the edit page.
The definition of SF_AoE is a bit unclear. I would have guessed at first that the explosions of the stars falling to the ground deal the initial damage, but it's actually the swirly stars moving past a unit for the first time that do it. It might be worth clarifying that.
I understand why the swirly stars have to be dummy units as the special effect natives are not available in the version you're using (), but I don't see a reason for the initial starfall effect to be done with dummy units. Using special effects should always be prefered if possible, since they are more performant and don't cause a small memory leak like units do. You'd have to store the special effects in a pseudo-2D-array and destroy them after the initial spell delay.
A useful option for the config could be whether the spell deals damage to buildings or not (and maybe a parameter for damage reduction on buildings).
That's as far as my criticisms go. This is a well-written, well-documented, highly configurable spell, and just looks great overall.
Added SF_DmgBuilding (boolean) to Config Trigger, in case end-user wants the spell to deal damage to buildings.
Added SF_DmgBuildingFactor (real) to Config Trigger, to determine damage reduction / increase vs buildings.
Removed SF_DummySpawn from Object Editor and replaced it with Special Effect in Trigger Editor.
Feedback on the newly added filter block would be nice, while it is functional, I feel like it can be optimized further.
All that aside, enjoy the spell, folks!
Feedback on the newly added filter block would be nice, while it is functional, I feel like it can be optimized further.
All that aside, enjoy the spell, folks!
It seems like you're leaking special effects in a situation where multiple spells are cast at the same time. The special effects are assigned to SF_SpawnEffect[1 to 4], then on the next cast, the same indices are used and the old effects are overwritten and never destroyed.
For the Starfall effect, it looks like you can just destroy it immediately and the animation will play till the end, but it might not work for a different effect a user might use. That's, however, quite a niche problem, so I wouldn't hold it against you if you just destroy the effect immediately and ignored that problem.
But if you wanna do it 100% properly, you'd have to make sure that the effects of the next cast are assigned to indices 5 to 8, and the next to 9 to 12 etc. So that would be NumberOfEffects * Index of Spell Instance + SF_TempInt.
It seems like you're leaking special effects in a situation where multiple spells are cast at the same time. The special effects are assigned to SF_SpawnEffect[1 to 4], then on the next cast, the same indices are used and the old effects are overwritten and never destroyed.
You're completely right. I overlooked that fact. Thanks for the feedback!
I updated the resource to fix the issue, hope you don't mind that I'm keeping the version number since it's just a small fix.
Do let me know what you think about the approach I took. Hopefully, it's alright.
Hate to be that guy again but this solution doesn't work either.
You can't make the offset dependent on the number of effects of the level of the spell cast. One player could cast level 2 Starforce and create six special effects, which get the indices 1-6, then another player could cast Starforce level 1 creating four special effects, getting the indices 5-8, overwriting 6 and 7.
The offset needs to be based on the number of effects of the max rank of the spell.
You can't make the offset dependent on the number of effects of the level of the spell cast. One player could cast level 2 Starforce and create six special effects, which get the indices 1-6, then another player could cast Starforce level 1 creating four special effects, getting the indices 5-8, overwriting 6 and 7.
The offset needs to be based on the number of effects of the max rank of the spell.
You're right again, I didn't think of that. What if I allow the end-user to specify the max level in config and make the offset based on number of effects of that instead? That should be fine, right? Of course, I would also have to specify in documentation that the max level number of effects must be >= the previous level number of effects.
🔨 Downloads and Uploads have been fixed! If you still have trouble downloading or uploading assets to or from Hive, please reach out to us in the Site Discussion board.
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.