Shadow Requiem v1.2

PRESENTING DAFFA'S 150TH RESOURCES!
Shadow Requiem
IMPORT GUIDE :
1. Enable "Tick the Automatically create unknown variables ..." located at File>Preference>General
2. Copy the Shadow Requiem ability in the object editor
3. Import GUI Unit Event (now with a state-of-the-art Lua version) and Fear System v1.0
4. Copy the ShadowRequiem folder in the trigger editor
5. Configure the Config trigger
SPELL DESCRIPTION:
Unleash 20 devastating shadow waves spinning on all directions. Each wave deals damage and inflict a stacking 0.9 seconds fear. Area expands from 125 to 350 and hits up to 1000 range.

Level 1 - 40 damage.
Level 2 - 80 damage.
Level 3 - 120 damage.
SPELL INFORMATION :
When there's light, the shadow awaits to devour all.

The spell is an antithesis of Holy Requiem v1.0 with two twists. First, Shadow Requiem doesn't follow the classic shockwave style charge that Holy Requiem uses, instead the shadows rotate around the caster forming a circle. This means there's a high probability for the spell to hit multiple times in a row, especially those close to the center might get full wave damage easily. Second, Shadow Requiem inflict a stacking fear, meaning that getting hit by it is basically disabled for a duration that stacks.

This spell is actually created before Fear System v1.0 came into existence. The system originally was part of this spell until I detached it so the system can have its own test map.
MEDIA SHOWCASE :
CHANGELOG :
Version 1.2:
  • Remove EffectPoint from Cast trigger
  • Altered EffectPoint from array version to non-array version
Version 1.1:
  • Fixed several leaks
  • Removed unnecessary EffectPointPrev variable
  • Removed onHit effect for frame drop reduction
  • Minor internal comment changes
  • Updated Fear System to v1.1
Version 1.0: Release
CREDIT :
Riot Games: Dota 2 (for Requiem of Souls)
Contents

Shadow Requiem v1.2 (Map)

Reviews
Rheiko
Great use and choice of special effects, they make the spell's visual looks unique and fun to cast. The only issue I found with this spell is the performance drop when using this in conjunction with the fear system. This may not be a problem in a...

Rheiko

Spell Reviewer
Level 26
Joined
Aug 27, 2013
Messages
4,214
  • You do this twice in your cast trigger, you need only one.
  • Set Variable Set ShadowRequiem_SourceIndex[ShadowRequiem_Index] = ShadowRequiem_SourceUnit
  • You don't even need EffectPoint here, just use CastPoint instead. They serve the same purpose.
  • Set Variable Set ShadowRequiem_CastPoint[ShadowRequiem_Index] = (Position of ShadowRequiem_SourceUnit)
  • Set Variable Set ShadowRequiem_EffectPoint[ShadowRequiem_Index] = (Position of ShadowRequiem_SourceUnit)
  • You're leaking location every loop here with EffectPoint. You should clear it everytime, not just when you're about to deallocate.
  • Set Variable Set ShadowRequiem_EffectPoint[ShadowRequiem_Index] = (ShadowRequiem_CastPoint[ShadowRequiem_Index] offset by ShadowRequiem_RangeCurrent[ShadowRequiem_Index] towards ShadowRequiem_EffectAngle[ShadowRequiem_Index] degrees.)
  • I don't understand why you did this. To prevent leak because of overwriting? You don't even need this because you don't need EffectPoint in cast trigger, you have CastPoint to do its job.
  • Set Variable Set ShadowRequiem_EffectPointPrev = ShadowRequiem_EffectPoint[ShadowRequiem_Index]
  • You leak CastPoint for every spell cast because you don't clear it when you're about to deallocate
  • The spell has massive performance issue on my laptop (it has potato specs), but this issue is gone when I remove the fear system. I can see from your preview video that you are somewhat lagging as well.
 
You do this twice in your cast trigger, you need only one.
Fixed. Drunk triggering :p
You don't even need EffectPoint here, just use CastPoint instead. They serve the same purpose.
CastPoint is meant to remain at the starting point while EffectPoint will move along with the effect. It just so happened they started at the same point. Without this, the movement will be erratic and harder to calculate.
You're leaking location every loop here with EffectPoint. You should clear it everytime, not just when you're about to deallocate.
I moved the previous point to EffectPointPrev and removed that instead. If I directly remove it, I might risk losing access to where the effect position is currently at.
  • -------- Previous point is kept to avoid leaks --------
  • Set ShadowRequiem_EffectPointPrev = ShadowRequiem_EffectPoint[ShadowRequiem_Index]
  • -------- Calculate next position --------
  • Set ShadowRequiem_EffectAngle[ShadowRequiem_Index] = (ShadowRequiem_EffectAngle[ShadowRequiem_Index] + ShadowRequiem_EffectAngleShift[ShadowRequiem_Index])
  • Set ShadowRequiem_EffectPoint[ShadowRequiem_Index] = (ShadowRequiem_CastPoint[ShadowRequiem_Index] offset by ShadowRequiem_RangeCurrent[ShadowRequiem_Index] towards ShadowRequiem_EffectAngle[ShadowRequiem_Index] degrees)
  • -------- Move effect to next position --------
  • Special Effect - Set Yaw of ShadowRequiem_SpecialEffect[ShadowRequiem_Index] to: ShadowRequiem_EffectAngle[ShadowRequiem_Index]
  • Special Effect - Set Position of ShadowRequiem_SpecialEffect[ShadowRequiem_Index] to ShadowRequiem_EffectPoint[ShadowRequiem_Index]
  • -------- Remove previous point --------
  • Custom script: call RemoveLocation(udg_ShadowRequiem_EffectPointPrev)
However, after some testing, I will remove the EffectPointPrev and directly remove the original point.
You leak CastPoint for every spell cast because you don't clear it when you're about to deallocate
Fixed. I forgot I add CastPoint, probably drunk when triggering :p
The spell has massive performance issue on my laptop (it has potato specs), but this issue is gone when I remove the fear system. I can see from your preview video that you are somewhat lagging as well.
I am suspecting because of the massive amount of process that Fear System utilize to execute. As of right now, I am not sure how to optimize because my Fear System relies on my limited knowledge of chopinski version and I am still learning how the lag even occurred.
After some quick testing, I figured out the model used for this spell is partially responsible for frame drops. Changing the model to Death Coil missile significantly reduces FPS drops from this spell. However, should I change the effect? #WhyBlizzardWhy
I also changed the SFXHit to none, since apparently creating an illusion effect per hit is also increasing the lag rate.

All changes I can execute will be applied on 1.1, along with Fear System update to address that system's leak.
 

Rheiko

Spell Reviewer
Level 26
Joined
Aug 27, 2013
Messages
4,214
CastPoint is meant to remain at the starting point while EffectPoint will move along with the effect. It just so happened they started at the same point. Without this, the movement will be erratic and harder to calculate.
Hmm, I don't see the difference in their movement. CastPoint is the pivot location, while EffectPoint is the new location relative to it. EffectPoint is only needed in loop trigger for offset calculation and the calculation itself is done by RangeCurrent and EffectAngle. You don't need EffectPoint in cast trigger at all. I fail to see the reason for it to be there.

However, after some testing, I will remove the EffectPointPrev and directly remove the original point.
Based on my point earlier, EffectPointPrev is not needed since EffectPoint shouldn't be in CastTrigger at all anyway. While, you're now on the right track for removing the original point, there is a better way to do this. If you do remove EffectPoint in cast trigger (which you should), you could just remove the original point at the very end of the loop and outside IF block in loop trigger. This guarantees the trigger to always clean up that location every loop and you only need to do it once.

Although with your current trigger, it does not leak anymore. The existence of EffectPoint in cast trigger is such a redundancy.

I'm still trying to investigate the cause of that massive lag. I don't think it's solely caused by TriggerExecute since the issue persists even with direct function call. Though, I'm suspecting the reason is the fact that you're making nearly 100~200+ function calls in a short span of time due to the nature of how your spell is designed.
 
Hmm, I don't see the difference in their movement. CastPoint is the pivot location, while EffectPoint is the new location relative to it. EffectPoint is only needed in loop trigger for offset calculation and the calculation itself is done by RangeCurrent and EffectAngle. You don't need EffectPoint in cast trigger at all. I fail to see the reason for it to be there.
Ah, now I remember. I construct this spell by derivating from Holy Requiem and had to adjust the entire code when implementing the angular effect. Oh boy, gonna need to change a lot of lines...
 

Rheiko

Spell Reviewer
Level 26
Joined
Aug 27, 2013
Messages
4,214
Great use and choice of special effects, they make the spell's visual looks unique and fun to cast.

The only issue I found with this spell is the performance drop when using this in conjunction with the fear system. This may not be a problem in a modern machine but could be a problem for weaker machines, so just a heads up for future users of this spell, if you ever find yourself having a performance issue with this and/or prefer to avoid performance drop at all, consider removing the fear system.

I believe the performance issue is caused by multiple calculations the engine is supposed to handle. It seems the calculations were a little bit too much to handle in a short span of time when fear system is included. Thus, the engine had to sacrifice some frames in order to catch up.

However, without the fear system, the spell performs flawlessly as intended.

Approved
 
Top