• Check out the results of the Techtree Contest #19!
  • Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.
  • Create a void inspired texture for Warcraft 3 and enter Hive's 34th Texturing Contest: Void! Click here to enter!
  • The Hive's 22nd Icon Contest: Creep Abilities is now concluded, time to vote for your favourite set of icons! Click here to vote!

Cenarius Spellpack v1.2.0

This bundle is marked as pending. It has not been reviewed by a staff member yet.

FujiSpellPack Spotlight:

full
Concept & Design:
The spellpack embodies Cenarius as the living will of the wild itself, blending battlefield control, summoning, and
restoring nature power through deeply interactive forest mechanics. Trees are not scenery but resources,
awakened into guardians, hurled as weapons, or reborn through blessings while spirits, storms, and the Wild God Malorne heed Cenarius’ call.



Cenarius Abilities:
Magic DispersalWhite Stag AscensionNature Protectors AfforestationCenarius WrathNature Retaliation
full
full
full
full
full
full

Ancient Protector Abilities:
Wild GrowthProtector RemnantsAncient Fortification
full
full
full

Treant Abilities:
Spore CloudTreant Aggression
full
full

Invoked Abilities:
Jaina Ability: TideburstThrall Ability: ZapstormTyrande Ability: Starfall ConvergenceEvil Arthas Ability: Coils Of Death
full
full
full
full




Credits:
Eikonium
chopinski
FerSZ
Yours Truly
Vinz
Spellbound

Sellenisko
sPy
Flux
Bribe
IcemanBo
8512590215848
Amigurumi
Darkfang
PrinceYaser

Nestharus
Pyritie
TriggerHappy
Panda
doom_sheep
Zeverens

Blizzard Entertainment
...
(tentative - If you don't see your name on this credit list, just let me know that of course)

Instructions:
Please kindly take note the spellpack was tested rigorously and thoroughly using the classic graphics with the latest version but should also work with the older versions supporting lua. The configurations made here just fit to my liking with the classic visuals. However, for reforged graphics you may want tackling the configurations to also fit with the reforged visuals since both graphics really differ not just in visuals but also in terms of their behavior. The current configurations which I consider maximum just play well with my taste but some of you may prefer minimum bare effects no worries because all behaviors or effects made in the spellpack are super configurable, flexible, and powerful.

Trigger Editor
1) Dependencies - script folder is required to copy and paste for the spellpack to work.
2) Cenarius Spellpack - script folder is optional so just copy and paste the spells you only need to work.

Object Editor
3) Dummy (General Purpose) - unit is optional to copy and paste but configure Utilities script in the Dependencies folder to match the dummy unit type id you have. required to copy and paste if your map don't have dummy unit type.
4) CC & NewBonus - ability is required to copy and paste but configure the NewBonus and CrowdControl scripts in the Dependencies folder to match the ids for the bonuses or controls to work.
5) Cenarius Spells - ability/buff is optional so just copy and paste the spells along with the ability/buff you only need to work.

Asset Manager
optional to export and import custom models used by the spells but configure the models path correctly in the spells configuration.

Lastly, ensure all scripts are exactly matching their needed object editor ids FourCC('XXXX') and feel free to post if you've encounter any issues following the instructions or even spells configuring related. will response as soon as possible. things you concern will be extremely valuable for me to help push the spellpack to go even beyond than what is currently capable of.

Useful Links:
How To Import A Spell/System
A comprehensive guide to Mapping in Lua
LuaCATS / Emmy Annotation


Changelogs:


Spellpack
-Integrated with the new updates in framework
Framework
-Updated FujiSpellPack and other systems in Dependencies folder specifically:
CrowdControl - added configurable fields to allow invulnerable and magic immune units to be controlled, fixed purge and sleep control behaviors, etc.
DamageInterface - added configurable field to exclude dummy id in dealing attack damage or DAMAGE_TYPE_NORMAL due to drunken haze ability
Missiles - added FujiSpellPack.playEffectAnimation() support
MissileEffect - added FujiSpellPack.playEffectAnimation() support
MouseUtils - added configurable field to allow computer player support, fixed nil errors, etc.

FujiSpellPack

-Added buff system
-Changed createPassive() to detect existing instances when hero is leveling instead of destroying and recreating them (which i thought to be the better approach however most use cases did not really benefit from it so had to rework). Existing instances now persist across hero levels with only instance.level being updated via levelSpell(), preserving all instantiated data like counters, flags, and storages with no hassle
-Added 60+ instance detection methods covering source, target, and range filtering across all Passive/Active/All variants
-Added castX, castY, markX, markY automated fields to an instance which store source and target positions at creation time, contrasting with sourceX/Y and targetX/Y which now automatically sync every period (to align with position checks of instance in range detection methods)
-Added containsOriginId(), containsInvokeId(), containsId() for convenient ability ids detection in originated and invoked spells
-Added iterateOriginIds(), iterateInvokeIds(), iterateAllIds() for convenient ability ids iteration in originated and invoked spells

-Changed registerInvokeActive() to support multiple spells per ability id using nested [abilityId][spell] storage (invokedActives)

-Added missileMove(missile,x,y,z,yaw,pitch,roll) - manually reposition a paused missile which is completely safe when resumed
-Added arrayInsert(), arrayRemove(), arrayClear() - safe array methods with O(1) removal
-Added adjustAbilityCooldown(unit,abilityId,amount) - adjusts remaining cooldown of the ability id by amount
-Added switchAbility(unit,fromAbility,toAbility,disable,hide,permanent) - safe ability swap with deferred callback due to rapid key press
-Added concealUnit(unit) and revealUnit(unit) - hide+invulnerable+pause and the reverse in one call
-Added destroyTreesInRange() and reviveTreesInRange() - with optional animation speed and life parameters
-Added playEffectAnimation(effect,animationType,...) - play animation type of the effect with optional timescale and sub animations
-Added 20+ 2D and 3D position functions (angleDistanceFromPoint2D,angleDistanceFromPointSquare3D(),etc...)
-Added animationType, subAnimationOne/Two/Three, animationTimeScale fields to missile() and addMultipleEffect() configs
-Reworked summonUnit() to use a config table parameter which support addMultipleEffect() and setUnitAnimationRate() configs
-Changed periodPassives from 0.050 to 0.025 (to align with position checks of instance in range detection methods)
-Changed periodAuras from 0.500 to 0.025 (to align with position checks of instance in range detection methods)

FujiSpellPackMonitor - aligned monitoring with the new updates in FujiSpellPack

Testmap

-Added a new mode called Arena which is a new testing environment implemented from the mode selection dialog to ensure PvsP compatibility and further support the performance and robustness of the spellpacks.

Spellpack
-Added 6 new spells:
Treant - Treant Aggression (Invoked), Spore Cloud (Originated)
Ancient Protector - Protector Remnants (Invoked), Wild Growth (Originated)
Jaina - Tideburst (Invoked)
Tyrande - Starfall Convergence (Invoked)

Framework
-Added new optional string field in spells of FujiSpellPack:
__name - name of the spell class for debugging and monitoring

-Added new optional event boolean field in spells of FujiSpellPack:
unitDeathEvent - automates passive instance creation upon death
-All event boolean fields in spells of FujiSpellPack will now default to false for clarity. (updated all existing spells with the change)

-Added more invoke functions:
registerInvokeActive - registers active spell to invoke from the SpellEffectEvent
registerInvokePassive - registers passive spell to invoke from the FujiSpellPack.initialize() event system (rect check,enter map,unit death,hero learn)
createInvokePassive - creates invoke passive instance of the spell

-Added more safety checks in FujiSpellPack:remove() method due to the new spells structure. (idempotent and safe with multiple calls)
-Changed order of callbacks in FujiSpellPack.removeAura(aura) function:
old - End > Exit
new -
Exit > End (much more favorable with exit callback to avoid invalid, nil, or stale references if end callback has cleaning operations)

-Added more aura caches information in FujiSpellpackMonitor system:
full


-Initial Release
Contents

CENARIUS SPELLPACK (Map)

TLDR: it's been a long time promised but now gladly finished~

the spellpack took longer than originally planned due to my limited time, which slowed development and eventually caused a pause (years of pause). so when I was able to commit a time for its development again (just started last october), I had to backtrack, review earlier implementations, and rework all of the approaches where I had to create and develop my own framework to ensure everything aligned with my goal and vision. the blizzard team’s continuous updates to the game were a major plus which am keeping to motivate and push myself with the development further. recalling everything -> transitioning from vJASS to Lua -> creating FujiSpellPack (5k lines of code) -> getting along with the other natives and systems -> developing Cenarius SpellPack -> fixing bugs here and there wasn’t fast (took me almost half a year), but it allowed for cleaner integration and better overall stability. given the release is still initial im planning to create more extensive documentations, examples, and templates etc. how to use the FujiSpellPack framework in the future (although some of the parts were already annotated and the spellpacks to be created will surely rely to it) as it was initially designed for my personal use to allow me create more spellpacks in a convenient manner. for the meantime, im still experimenting the framework's robustness but will eventually give its own formal introduction to everyone once i have the time to do it. nonetheless, I’m happy to finally release the spellpack, and I appreciate everyone who stayed patient and supported it along the way.
 
That's just fantastic! Keep it up, dude. Sadly, i can't use in my map due to Jass.
i understand however for my point of view it's much more easier to build and maintain the framework with lua than jass so unfortunately i cannot guarantee if there will be jass compatibility in the future.
hopefully, some parts of the work can still give you an idea and maybe try to implement it for your next map if you wish to make it in lua. :peasant-cheers-back:

for basic configurations such as editing the number fields in the script will not totally require you to even have lua knowledge to be honest but still highly suggest you learn the basics of it in order for you to get along with the lua map environment and then create advance modifications if ever. there's a very good tutorial i attached in the description to get started
 
Cenarius Spellpack v1.1.0 (New Update)
EDIT:
Spellpack
-Added 6 new spells:
Treant - Treant Aggression (Invoked), Spore Cloud (Originated)
Ancient Protector - Protector Remnants (Invoked), Wild Growth (Originated)
Jaina - Tideburst (Invoked)
Tyrande - Starfall Convergence (Invoked)

Wild GrowthProtector RemnantsAncient Fortification
full
full
full
Spore CloudTreant Aggression
full
full
Jaina Ability: TideburstThrall Ability: ZapstormTyrande Ability: Starfall ConvergenceArthas (Evil) Ability: Coils Of Death
full
full
full
full

Framework
-Added new optional string field in spells of FujiSpellPack:
__name - name of the spell class for debugging and monitoring
-Added new optional event boolean field in spells of FujiSpellPack:
unitDeathEvent - automates passive instance creation upon death
-All event boolean fields in spells of FujiSpellPack will now default to false for clarity. (updated all existing spells with the change)

-Added more invoke functions:
registerInvokeActive - registers active spell to invoke from the SpellEffectEvent
registerInvokePassive - registers passive spell to invoke from the FujiSpellPack.initialize() event system (rect check,enter map,unit death,hero learn)
createInvokePassive - creates invoke passive instance of the spell

-Added more safety checks in FujiSpellPack:remove() method due to the new spells structure. (idempotent and safe with multiple calls)
-Changed order of callbacks in FujiSpellPack.removeAura(aura) function:
old - End > Exit
new - Exit > End (much more favorable with exit callback to avoid invalid, nil, or stale references if end callback has cleaning operations)

-Added more aura caches information in FujiSpellpackMonitor system:
full

now this update concludes the finalization of the cenarius spellpack abilities which includes his summoned units and other extras so that i can jump with another stuff (actually have to investigate why the sleep ability is not working continuously like it's just pausing the unit but not making them sleep therefore due to current limitation had to make the Spore Cloud use entangle ability instead which just works perfectly fine hence im suspecting the engine might be the culprit, plus im having the same behavior with the purge ability which should also be the design choice for Zapstorm but yeah i'll just figure them sometime if they really have odd or hardcoded behaviors)

please kindly let me know if there will be issues in the new update.

EDIT: it turns out there are no issues with the sleep and purge abilities. unfortunately, their hardcoded mechanics just don't get along with how the CrowdControl system works:

for sleep, CrowdControl uses dummy recasting for stacking purposes however sleep has hardcoded mechanic where it sets the unit to invulnerable state so recasting won't work because the unit is already invulnerable. setting the unit pause or invulnerable duration from the object editor field to 0.00 did pause the unit forever lol. the only ideal solution i can think for now which preserves all of the CrowdControl system logic is to set the targets allowed field for the sleep ability to both vulnerable and invulnerable. however, this kind of approach has a caveat that will require an extra modification to the system or the users to manually check invulnerability state whenever they will apply sleep using CrowdControl to avoid bugs of course.

for purge, CrowdControl creates dummy owned by PLAYER_NEUTRAL_PASSIVE for casting purposes however purge has hardcoded mechanic where if the target unit is an ally then it will just dispel without the slow buff to apply because it's an ally. therefore the slow buff will only apply if the target unit is an enemy which the PLAYER_NEUTRAL_PASSIVE do not consider any of the players as its enemy hence no buff will apply to the units. the only ideal solution i can think for now which preserves all of the CrowdControl system logic is to change from PLAYER_NEUTRAL_PASSIVE to PLAYER_NEUTRAL_AGGRESSIVE so units will be treated as enemy when using purge. however, this will always apply buff and slow the units (which i believe should be the preferable mechanic for a CrowdControl effect anyway)

overall, still glad they are not bugs but just conflicting mechanics which are fixable via slight tweaking and not recoding a broken stuff. although, one may prefer other types of crowd control in the system which can achieve the same effects these possess but those may still depend with what the user really desires.

i rest the case :peasant-cheers-back:
 
Last edited:
Cenarius Spellpack v1.2.0 (New Update)

Spellpack
-Integrated with the new updates in framework

Framework
-Updated FujiSpellPack and other systems in Dependencies folder specifically:
CrowdControl - added configurable fields to allow invulnerable and magic immune units to be controlled, fixed purge and sleep control behaviors, etc.
DamageInterface - added configurable field to exclude dummy id in dealing attack damage or DAMAGE_TYPE_NORMAL due to drunken haze ability
Missiles - added FujiSpellPack.playEffectAnimation() support
MissileEffect - added FujiSpellPack.playEffectAnimation() support
MouseUtils - added configurable field to allow computer player support, fixed nil errors, etc.
FujiSpellPack
-Added buff system
-Changed createPassive() to detect existing instances when hero is leveling instead of destroying and recreating them (which i thought to be the better approach however most use cases did not really benefit from it so had to rework). Existing instances now persist across hero levels with only instance.level being updated via levelSpell(), preserving all instantiated data like counters, flags, and storages with no hassle
-Added 60+ instance detection methods covering source, target, and range filtering across all Passive/Active/All variants
-Added castX, castY, markX, markY automated fields to an instance which store source and target positions at creation time, contrasting with sourceX/Y and targetX/Y which now automatically sync every period (to align with position checks of instance in range detection methods)
-Added containsOriginId(), containsInvokeId(), containsId() for convenient ability ids detection in originated and invoked spells
-Added iterateOriginIds(), iterateInvokeIds(), iterateAllIds() for convenient ability ids iteration in originated and invoked spells

-Changed registerInvokeActive() to support multiple spells per ability id using nested [abilityId][spell] storage (invokedActives)

-Added missileMove(missile,x,y,z,yaw,pitch,roll) - manually reposition a paused missile which is completely safe when resumed
-Added arrayInsert(), arrayRemove(), arrayClear() - safe array methods with O(1) removal
-Added adjustAbilityCooldown(unit,abilityId,amount) - adjusts remaining cooldown of the ability id by amount
-Added switchAbility(unit,fromAbility,toAbility,disable,hide,permanent) - safe ability swap with deferred callback due to rapid key press
-Added concealUnit(unit) and revealUnit(unit) - hide+invulnerable+pause and the reverse in one call
-Added destroyTreesInRange() and reviveTreesInRange() - with optional animation speed and life parameters
-Added playEffectAnimation(effect,animationType,...) - play animation type of the effect with optional timescale and sub animations
-Added 20+ 2D and 3D position functions (angleDistanceFromPoint2D,angleDistanceFromPointSquare3D(),etc...)
-Added animationType, subAnimationOne/Two/Three, animationTimeScale fields to missile() and addMultipleEffect() configs
-Reworked summonUnit() to use a config table parameter which support addMultipleEffect() and setUnitAnimationRate() configs
-Changed periodPassives from 0.050 to 0.025 (to align with position checks of instance in range detection methods)
-Changed periodAuras from 0.500 to 0.025 (to align with position checks of instance in range detection methods)

FujiSpellPackMonitor - aligned monitoring with the new updates in FujiSpellPack

Testmap
-Added a new mode called Arena which is a new testing environment implemented from the mode selection dialog to ensure PvsP compatibility and further support the performance and robustness of the spellpacks.
 
Back
Top