• 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.

Power Aura v1.0.2

An old request from @Razer!X back at Kawaii Spell Workshop led by @Malhorne
Power Aura

Code Type: GUI
Spell Type: Hero
Target Type: Passive
Area of Effect: 1000/1100/1200/1300
Number of Levels: 4
Mana Cost: 0
Cooldown: 0
In-game Description: The hero leads his allies to bring them to victory. Each allied unit nearby will give +1 damage to every allied unit with this buff.
How the spell works: Each allied unit within 1000/1100/1200/1300 will give all allies with this aura to have +1 damage. Example: When there are 10 nearby heroes, you and your allies will have +10 damage.

I put two versions, one with CSS and the other without it. The one without has limitation of only support 100 unit per aura owner.

Oh, the best part of this ability is that it's a passive AND is GUI! :D

[1.0.2]
Changed the recommended method
Added some information for the no longer supported method

[1.0.1]
Preload abilities to avoid lag
Fixed a typo in the description

[1.0]
Uploaded

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

Power Aura (Map)

Reviews
KILLCIDE
Despite the simplicity, the way the aura updates based on the number of units in the area makes this simple spell really interesting. Nice job! I would just get rid of the "normal" Power Aura haha. Needs Fixed Nothing Suggestions The way you're...
Level 9
Joined
Dec 12, 2007
Messages
489
I just checked the triggers through Trigger Viewer,
it seems that the GUI one lack configurability as most part of it depends on OE editing and limited to 100 units affected,
assuming +1 per unit affected with default 100 levels (or more with shift-click) of dummy damage ability,
you should mention these limitation as to not confusing GUI users that find the ability didn't give correct bonus under certain conditions.

the other one that uses CSS is much more better and has possibility of more customization,
(like different bonus value per level, not just restricted to aura AOE increase like the GUI one),

I would like to suggest to drop the current GUI one (or at least make it the secondary version) while updating the CSS version to support different bonus per level learned and make the CSS as mandatory requirement.

and how about add the support for Tome of Retraining case?
 
I just checked the triggers through Trigger Viewer,
it seems that the GUI one lack configurability as most part of it depends on OE editing and limited to 100 units affected,
assuming +1 per unit affected with default 100 levels (or more with shift-click) of dummy damage ability,
you should mention these limitation as to not confusing GUI users that find the ability didn't give correct bonus under certain conditions.

the other one that uses CSS is much more better and has possibility of more customization,
(like different bonus value per level, not just restricted to aura AOE increase like the GUI one),

I would like to suggest to drop the current GUI one (or at least make it the secondary version) while updating the CSS version to support different bonus per level learned and make the CSS as mandatory requirement.

and how about add the support for Tome of Retraining case?

Indeed the GUI one is flawed, but it avoids the 198 import CSS have as that needs JNGP's Macro, which as far as 1.28 concerns, is messed up. I will add the note instead and make it secondary like you recommended.

The whole spell reacts to the buff, so I think it won't matter much. I will check it for the ToR case.
 
Level 9
Joined
Dec 12, 2007
Messages
489
on second thought, why you choose to implement individual bonus to each unit affected?

how about this method:
you can use a hidden modified dummy Trueshot Aura to give static bonus per level,
then you adjust the level of the dummy ability based on number of units in area with the buff.
the only downside though is the delay on updating the bonus since it use aura to give bonus.

and you can enum the correct units directly by adding the condition "Matching Unit has buff" to the SubGroup enumeration instead of using if- check on SubUnit.
 
Sorry for the double post, forgot to comment on this

on second thought, why you choose to implement individual bonus to each unit affected?

how about this method:
you can use a hidden modified dummy Trueshot Aura to give static bonus per level,
then you adjust the level of the dummy ability based on number of units in area with the buff.
the only downside though is the delay on updating the bonus since it use aura to give bonus.

and you can enum the correct units directly by adding the condition "Matching Unit has buff" to the SubGroup enumeration instead of using if- check on SubUnit.

Well, the initial idea was that it won't exceed 100 and back in the day, an easier approach in my logic. I also distaste the aura's delay.
 
Despite the simplicity, the way the aura updates based on the number of units in the area makes this simple spell really interesting. Nice job! I would just get rid of the "normal" Power Aura haha.

Needs Fixed

  • Nothing

Suggestions

  • The way you're storing the radius per level isn't that user friendly :p I'd get rid of the loop and just let users input it how they want from there.
  • Not a fan of using (Matching unit) to filter units of a unit group. I recommend taking a look at this
  • It's not really necessary for you to let PA_SubUnit = No unit at the end of each iteration
  • To slightly improve efficiency and logic, I'd only have Power Aura Loop on if there are units / Heroes present in PA_Group

Status

Approved
 
Level 3
Joined
Aug 25, 2018
Messages
29
Hi! I am still learning code...please I have some questions. If it's too hard I understand, this particular code looks rather meticulous and grindy.. but I have no idea what I'm talking about...

I am looking to make this ability have a lower max affected unit cap (10-12 nearby units).

I want certain auras to only affect certain unit types:
ie. a footmen captain gives +1 armor to other nearby footmen (not riflemen or others) - up to 12 footmen total!
ie. a dryads captain gives +125 sight range to other nearby dryads (not footmen or others) - up to 5 dryads total!

I apprecieate babystep explanations for my stuuupid brain. Thanks! Good work!
 
on second thought, why you choose to implement individual bonus to each unit affected?

how about this method:
you can use a hidden modified dummy Trueshot Aura to give static bonus per level,
then you adjust the level of the dummy ability based on number of units in area with the buff.
the only downside though is the delay on updating the bonus since it use aura to give bonus.

and you can enum the correct units directly by adding the condition "Matching Unit has buff" to the SubGroup enumeration instead of using if- check on SubUnit.

Good question. I never thought of that actually. Back then, I thought this is how I will approach the issue best.

Your method is what I used in Last Revolt altered melee for their T1 melee unit.

Hi! I am still learning code...please I have some questions. If it's too hard I understand, this particular code looks rather meticulous and grindy.. but I have no idea what I'm talking about...

I am looking to make this ability have a lower max affected unit cap (10-12 nearby units).

I want certain auras to only affect certain unit types:
ie. a footmen captain gives +1 armor to other nearby footmen (not riflemen or others) - up to 12 footmen total!
ie. a dryads captain gives +125 sight range to other nearby dryads (not footmen or others) - up to 5 dryads total!

I apprecieate babystep explanations for my stuuupid brain. Thanks! Good work!

What patch are you on? If you use Reforged or 1.31, I won't recommend this particular entry and instead write your own variation using chopinski's Bonus. I can think of a guide once I know which patch you are mapping ^^
 
I'm using Reforged. I will take a look at chopinski's Bonus system. Thanks!
Very late for me, but I recall Last Revolt [Techtree Contest #14] had something similar to your need.

Ah ha, found it!

I can contribute my idea:
level 1 - plus 1 Agility
level 2 - plus 1 Strength
level 3 - plus 1 Intelligence
level 4 - plus 1 damage
I think that sort of reworking the entire spell to adjust to this configuration. New Bonus will help a lot for this though.
 
Level 4
Joined
Apr 8, 2021
Messages
31
Hi, M.Daffa, i'm trying to use your power aura but when i'm importing it i get this error when saving the map, i'm not sure what i should do (ps: i've imported the 198 by hand, i though that it was because i forgot the spell id or smth in CSS standalone and Implementation Macro but after changing them i still got this message, sorry and thanks in advance M.Daffa !
 

Attachments

  • image_2025-01-14_113656919.png
    image_2025-01-14_113656919.png
    24.3 KB · Views: 4
  • image_2025-01-14_113710521.png
    image_2025-01-14_113710521.png
    26.8 KB · Views: 3
Level 45
Joined
Feb 27, 2007
Messages
5,578
That function and a few others are in the maps' Custom Script section (click the map name in the trigger editor). Daffa should have known better than to do that in 2021, frankly. This should be updated. Put all the code in the CS and the CSS trigger into one library and overwrite the CSS trigger with it:
JASS:
library CSS_FixThisDaffaYouFool
//************************************************************************************************************
//*                                                                                                          *
//*                              CUSTOM STAT SYSTEM (CSS)                                                    *
//*                                                                                                          *
//*   Author:   Doomlord                                                                                     *
//*   Version:  1.5i                                                                                         *
//*                                                                                                          *
//*   Credits:                                                                                               *
//*   + Earth-Fury:    BonusMod binary algoritm; implementation macro.                                       *
//*   + Crigges:       A great amount of help and support.                                                   *
//*   + Geries:        Help me with the item hashtable values cleanup.                                       *
//*   + rulerofiron99: Item Socketing method referenced from [GUI]Right Click Item Recipe v1.05.             *
//*   + Vexorian:      CSS_SimError [url]http://www.wc3c.net/showthread.php?t=101260[/url]                   *
//*   + Magtheridon96: [Snippet]BoundInt [url]http://www.hiveworkshop.com/forums/2294066-post804.html[/url]  *
//*   + WaterKnight:   Help with the stack for custom Event Response.                                        *
//*   + PurgeandFire:  Pinpoint a possible desync bug with the system.                                       *
//*   + Nestharus:     Mentioning the possible negative life bug in his Bonus lib.                           *
//*                                                                                                          *
//************************************************************************************************************


//**************************************************************************************
//* INTRODUCTION:                                                                      *
//*                                                                                    *
//* An alternative to BonusMod for those who prefer a vanilla JASS approach.           *
//*                                                                                    *
//* Just follow the API and you are pretty much done.                                  *
//**************************************************************************************


//********************************************************************************************************
//* REQUIREMENTS:                                                                                        *
//*                                                                                                      *
//* JNGP [url]http://www.hiveworkshop.com/forums/tools-560/jassnewgenpack-5d-227445[/url] (Recommended)  *
//* OR:                                                                                                  *
//* Your superhuman capability to transfer 198 abilities to your map. (Not Recommended)                  *
//********************************************************************************************************


//************************************************************************************************************************************************
//* INSTALLATION INSTRUCTION:                                                                                                                    *
//*                                                                                                                                              *
//* Step 1: Copy the custom code for bonus handling to your map header.                                                                          *
//* Step 2: Use JNGP to implement the system's abilities through macro. Instruction is included in the Implementation Macro trigger.             *
//* Step 3: Copy the whole CSS folder to your map. Don't forget to turn on "Automatically create unknown variables while pasting trigger data".  *
//* Step 4: Except for this trigger, delete every other useless elements.                                                                        *
//* Step 5: Use this BonusMod alternative however you want.                                                                                      *
//*                                                                                                                                              *
//************************************************************************************************************************************************


//**************************************************************************************
//* Bonus Types Identifier:                                                            *
//*                                                                                    *
//* Armor Bonus:        0                                                              *
//* Attack Speed Bonus: 1                                                              *
//* Damage Bonus:       2                                                              *
//* Agility Bonus:      3                                                              *
//* Intelligence Bonus: 4                                                              *
//* Strength Bonus:     5                                                              *
//* Life Regen Bonus:   6                                                              *
//* Mana Regen Bonus:   7                                                              *
//* Life Bonus:         8                                                              *
//* Mana Bonus:         9                                                              *
//* Sight Range Bonus:  10                                                             *
//**************************************************************************************


//********************************************************************************
//* Generic Bonus APIs                                                           *
//*                                                                              *
//* CSS_GetBonus takes unit u, integer bonusType returns integer                 *
//* CSS_AddBonus takes unit u, integer amount, integer bonusType returns nothing *
//* CSS_ClearBonus takes unit u, integer bonusType                               *
//********************************************************************************

// SimError by Vexorian at wc3c.net

// Sim Error (modified)

function CSS_SimError takes string s returns nothing
    local string msg = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n|cffffcc00" + s + "|r"
    local player ForPlayer = GetTriggerPlayer()
    local sound error = CreateSoundFromLabel("InterfaceError", false, false, false, 10, 10)

    if GetLocalPlayer() == ForPlayer then
        call ClearTextMessages()
        call DisplayTimedTextToPlayer(ForPlayer, 0.52, 0.96, 2.00, msg)
        call StartSound(error)
    endif

    set ForPlayer = null
endfunction

function CSS_SimNotification takes string s returns nothing
    local string msg = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n|cff32cd32" + s + "|r"
    local player ForPlayer = GetTriggerPlayer()
    local sound notify = CreateSoundFromLabel("ItemReward", false, false, false, 10, 10)

    if GetLocalPlayer() == ForPlayer then
        call ClearTextMessages()
        call DisplayTimedTextToPlayer(ForPlayer, 0.52, 0.96, 2.00, msg)
        call StartSound (notify)
    endif

    set ForPlayer = null
endfunction

// Bound Int by Magtheridon96 at hiveworkshop.com

// BoundInt

function BoundInt takes integer i, integer min, integer max returns integer
    return IMaxBJ(IMinBJ(i, max), min)
endfunction

// Bonus Handling Code

function CSS_AddBonus takes unit u, integer amount, integer bonusType returns nothing
    local integer max = udg_CSS_Power[17]
    local integer min = -udg_CSS_Power[17]
    local integer i = 16
    local integer j = LoadInteger (udg_CSS_Hashtable, GetHandleId(u), bonusType)

    if amount > max - 1 or amount < min then
        call CSS_SimError ("Value too high or too low")
        return
    endif

    if amount + j >= max or amount + j <= min then
        call CSS_SimError ("Current value at maximum or minimum")
    endif

    set amount = amount + j
    call BoundInt (amount, min, max - 1)

    if bonusType < 0 or bonusType > 10 then
        call CSS_SimError ("CSS Error: Invalid bonus type (" + I2S(bonusType) + ")")
        return
    elseif bonusType == 8 or bonusType == 9 then

        if bonusType == 8 and amount*1. + GetUnitState(u, UNIT_STATE_MAX_LIFE) <= 0 then
            call CSS_SimError ("Unit's current max life is lower than the negative bonus amount. Unable to subtract.")
            return
        elseif bonusType == 9 and amount*1. + GetUnitState(u, UNIT_STATE_MAX_MANA) <= 0 then
            call CSS_SimError ("Unit's current max mana is lower than the negative bonus amount. Unable to subtract.")
            return
        endif

        call SaveInteger(udg_CSS_Hashtable, GetHandleId(u), bonusType, amount)

        if amount < 0 then
            set amount = max + amount
        else
            call UnitRemoveAbility(u, udg_CSS_Abilities[(bonusType + 1)*18 - 1])
        endif

        loop
            if amount >= udg_CSS_Power[i] then
                call UnitAddAbility(u, udg_CSS_Abilities[bonusType*18 + i])
                call UnitMakeAbilityPermanent(u, true, udg_CSS_Abilities[bonusType*18 + i])
                set amount = amount - udg_CSS_Power[i]
            else
                call UnitRemoveAbility(u, udg_CSS_Abilities[bonusType*18 + i])
            endif
        
            set i = i - 1
            exitwhen i < 0
        endloop

        if LoadInteger(udg_CSS_Hashtable, GetHandleId(u), bonusType) < 0 then
            call UnitAddAbility(u, udg_CSS_Abilities[(bonusType + 1)*18 - 1])
            call UnitMakeAbilityPermanent(u, true, udg_CSS_Abilities[(bonusType + 1)*18 - 1])
        endif

    else

        call SaveInteger(udg_CSS_Hashtable, GetHandleId(u), bonusType, amount)

        if amount < 0 then
            set amount = max + amount
            call UnitAddAbility(u, udg_CSS_Abilities[(bonusType + 1)*18 - 1])
            call UnitMakeAbilityPermanent(u, true, udg_CSS_Abilities[(bonusType + 1)*18 - 1])
        else
            call UnitRemoveAbility(u, udg_CSS_Abilities[(bonusType+1)*18 - 1])
        endif

        loop
            if amount >= udg_CSS_Power[i] then
                call UnitAddAbility(u, udg_CSS_Abilities[bonusType*18 + i])
                call UnitMakeAbilityPermanent(u, true, udg_CSS_Abilities[bonusType*18 + i])
                set amount = amount - udg_CSS_Power[i]
            else
                call UnitRemoveAbility(u, udg_CSS_Abilities[bonusType*18 + i])
            endif
        
            set i = i - 1
            exitwhen i < 0
        endloop

    endif
endfunction


// Clear bonus

function CSS_ClearBonus takes unit u, integer bonusType returns nothing

if bonusType > 10 or bonusType < 0 or GetUnitTypeId (u) == 0 or IsUnitType (u, UNIT_TYPE_DEAD) then
return
endif

call CSS_AddBonus (u, -LoadInteger (udg_CSS_Hashtable, GetHandleId (u), bonusType), bonusType)
endfunction

// Get current bonus

function CSS_GetBonus takes unit u, integer bonusType returns integer

if bonusType > 10 or bonusType < 0 or GetUnitTypeId (u) == 0 or IsUnitType (u, UNIT_TYPE_DEAD) then
return 0
endif

return LoadInteger (udg_CSS_Hashtable, GetHandleId (u), bonusType)
endfunction

// For preloading abilities

function CSS_Preload takes nothing returns nothing
local integer i = 0
local unit u = CreateUnit(Player(15), 'hfoo', 0, 0, 0.00)

loop
exitwhen i > 197
call UnitAddAbility(u, udg_CSS_Abilities[i])
set i = i + 1
endloop

call RemoveUnit(u)
set u = null
endfunction

//===========================================================================
function InitTrig_CSS_Standalone_Bonus takes nothing returns nothing
local integer i = 0
local integer a = 1

set udg_CSS_Abilities[0] = 'ZxA0'
set udg_CSS_Abilities[1] = 'ZxA1'
set udg_CSS_Abilities[2] = 'ZxA2'
set udg_CSS_Abilities[3] = 'ZxA3'
set udg_CSS_Abilities[4] = 'ZxA4'
set udg_CSS_Abilities[5] = 'ZxA5'
set udg_CSS_Abilities[6] = 'ZxA6'
set udg_CSS_Abilities[7] = 'ZxA7'
set udg_CSS_Abilities[8] = 'ZxA8'
set udg_CSS_Abilities[9] = 'ZxA9'
set udg_CSS_Abilities[10] = 'ZxAa'
set udg_CSS_Abilities[11] = 'ZxAb'
set udg_CSS_Abilities[12] = 'ZxAc'
set udg_CSS_Abilities[13] = 'ZxAd'
set udg_CSS_Abilities[14] = 'ZxAe'
set udg_CSS_Abilities[15] = 'ZxAf'
set udg_CSS_Abilities[16] = 'ZxAg'
set udg_CSS_Abilities[17] = 'ZxAh'
set udg_CSS_Abilities[18] = 'ZxI0'
set udg_CSS_Abilities[19] = 'ZxI1'
set udg_CSS_Abilities[20] = 'ZxI2'
set udg_CSS_Abilities[21] = 'ZxI3'
set udg_CSS_Abilities[22] = 'ZxI4'
set udg_CSS_Abilities[23] = 'ZxI5'
set udg_CSS_Abilities[24] = 'ZxI6'
set udg_CSS_Abilities[25] = 'ZxI7'
set udg_CSS_Abilities[26] = 'ZxI8'
set udg_CSS_Abilities[27] = 'ZxI9'
set udg_CSS_Abilities[28] = 'ZxIa'
set udg_CSS_Abilities[29] = 'ZxIb'
set udg_CSS_Abilities[30] = 'ZxIc'
set udg_CSS_Abilities[31] = 'ZxId'
set udg_CSS_Abilities[32] = 'ZxIe'
set udg_CSS_Abilities[33] = 'ZxIf'
set udg_CSS_Abilities[34] = 'ZxIg'
set udg_CSS_Abilities[35] = 'ZxIh'
set udg_CSS_Abilities[36] = 'ZxB0'
set udg_CSS_Abilities[37] = 'ZxB1'
set udg_CSS_Abilities[38] = 'ZxB2'
set udg_CSS_Abilities[39] = 'ZxB3'
set udg_CSS_Abilities[40] = 'ZxB4'
set udg_CSS_Abilities[41] = 'ZxB5'
set udg_CSS_Abilities[42] = 'ZxB6'
set udg_CSS_Abilities[43] = 'ZxB7'
set udg_CSS_Abilities[44] = 'ZxB8'
set udg_CSS_Abilities[45] = 'ZxB9'
set udg_CSS_Abilities[46] = 'ZxBa'
set udg_CSS_Abilities[47] = 'ZxBb'
set udg_CSS_Abilities[48] = 'ZxBc'
set udg_CSS_Abilities[49] = 'ZxBd'
set udg_CSS_Abilities[50] = 'ZxBe'
set udg_CSS_Abilities[51] = 'ZxBf'
set udg_CSS_Abilities[52] = 'ZxBg'
set udg_CSS_Abilities[53] = 'ZxBh'
set udg_CSS_Abilities[54] = 'ZxG0'
set udg_CSS_Abilities[55] = 'ZxG1'
set udg_CSS_Abilities[56] = 'ZxG2'
set udg_CSS_Abilities[57] = 'ZxG3'
set udg_CSS_Abilities[58] = 'ZxG4'
set udg_CSS_Abilities[59] = 'ZxG5'
set udg_CSS_Abilities[60] = 'ZxG6'
set udg_CSS_Abilities[61] = 'ZxG7'
set udg_CSS_Abilities[62] = 'ZxG8'
set udg_CSS_Abilities[63] = 'ZxG9'
set udg_CSS_Abilities[64] = 'ZxGa'
set udg_CSS_Abilities[65] = 'ZxGb'
set udg_CSS_Abilities[66] = 'ZxGc'
set udg_CSS_Abilities[67] = 'ZxGd'
set udg_CSS_Abilities[68] = 'ZxGe'
set udg_CSS_Abilities[69] = 'ZxGf'
set udg_CSS_Abilities[70] = 'ZxGg'
set udg_CSS_Abilities[71] = 'ZxGh'
set udg_CSS_Abilities[72] = 'ZxH0'
set udg_CSS_Abilities[73] = 'ZxH1'
set udg_CSS_Abilities[74] = 'ZxH2'
set udg_CSS_Abilities[75] = 'ZxH3'
set udg_CSS_Abilities[76] = 'ZxH4'
set udg_CSS_Abilities[77] = 'ZxH5'
set udg_CSS_Abilities[78] = 'ZxH6'
set udg_CSS_Abilities[79] = 'ZxH7'
set udg_CSS_Abilities[80] = 'ZxH8'
set udg_CSS_Abilities[81] = 'ZxH9'
set udg_CSS_Abilities[82] = 'ZxHa'
set udg_CSS_Abilities[83] = 'ZxHb'
set udg_CSS_Abilities[84] = 'ZxHc'
set udg_CSS_Abilities[85] = 'ZxHd'
set udg_CSS_Abilities[86] = 'ZxHe'
set udg_CSS_Abilities[87] = 'ZxHf'
set udg_CSS_Abilities[88] = 'ZxHg'
set udg_CSS_Abilities[89] = 'ZxHh'
set udg_CSS_Abilities[90] = 'ZxF0'
set udg_CSS_Abilities[91] = 'ZxF1'
set udg_CSS_Abilities[92] = 'ZxF2'
set udg_CSS_Abilities[93] = 'ZxF3'
set udg_CSS_Abilities[94] = 'ZxF4'
set udg_CSS_Abilities[95] = 'ZxF5'
set udg_CSS_Abilities[96] = 'ZxF6'
set udg_CSS_Abilities[97] = 'ZxF7'
set udg_CSS_Abilities[98] = 'ZxF8'
set udg_CSS_Abilities[99] = 'ZxF9'
set udg_CSS_Abilities[100] = 'ZxFa'
set udg_CSS_Abilities[101] = 'ZxFb'
set udg_CSS_Abilities[102] = 'ZxFc'
set udg_CSS_Abilities[103] = 'ZxFd'
set udg_CSS_Abilities[104] = 'ZxFe'
set udg_CSS_Abilities[105] = 'ZxFf'
set udg_CSS_Abilities[106] = 'ZxFg'
set udg_CSS_Abilities[107] = 'ZxFh'
set udg_CSS_Abilities[108] = 'ZxJ0'
set udg_CSS_Abilities[109] = 'ZxJ1'
set udg_CSS_Abilities[110] = 'ZxJ2'
set udg_CSS_Abilities[111] = 'ZxJ3'
set udg_CSS_Abilities[112] = 'ZxJ4'
set udg_CSS_Abilities[113] = 'ZxJ5'
set udg_CSS_Abilities[114] = 'ZxJ6'
set udg_CSS_Abilities[115] = 'ZxJ7'
set udg_CSS_Abilities[116] = 'ZxJ8'
set udg_CSS_Abilities[117] = 'ZxJ9'
set udg_CSS_Abilities[118] = 'ZxJa'
set udg_CSS_Abilities[119] = 'ZxJb'
set udg_CSS_Abilities[120] = 'ZxJc'
set udg_CSS_Abilities[121] = 'ZxJd'
set udg_CSS_Abilities[122] = 'ZxJe'
set udg_CSS_Abilities[123] = 'ZxJf'
set udg_CSS_Abilities[124] = 'ZxJg'
set udg_CSS_Abilities[125] = 'ZxJh'
set udg_CSS_Abilities[126] = 'ZxK0'
set udg_CSS_Abilities[127] = 'ZxK1'
set udg_CSS_Abilities[128] = 'ZxK2'
set udg_CSS_Abilities[129] = 'ZxK3'
set udg_CSS_Abilities[130] = 'ZxK4'
set udg_CSS_Abilities[131] = 'ZxK5'
set udg_CSS_Abilities[132] = 'ZxK6'
set udg_CSS_Abilities[133] = 'ZxK7'
set udg_CSS_Abilities[134] = 'ZxK8'
set udg_CSS_Abilities[135] = 'ZxK9'
set udg_CSS_Abilities[136] = 'ZxKa'
set udg_CSS_Abilities[137] = 'ZxKb'
set udg_CSS_Abilities[138] = 'ZxKc'
set udg_CSS_Abilities[139] = 'ZxKd'
set udg_CSS_Abilities[140] = 'ZxKe'
set udg_CSS_Abilities[141] = 'ZxKf'
set udg_CSS_Abilities[142] = 'ZxKg'
set udg_CSS_Abilities[143] = 'ZxKh'
set udg_CSS_Abilities[144] = 'ZxE0'
set udg_CSS_Abilities[145] = 'ZxE1'
set udg_CSS_Abilities[146] = 'ZxE2'
set udg_CSS_Abilities[147] = 'ZxE3'
set udg_CSS_Abilities[148] = 'ZxE4'
set udg_CSS_Abilities[149] = 'ZxE5'
set udg_CSS_Abilities[150] = 'ZxE6'
set udg_CSS_Abilities[151] = 'ZxE7'
set udg_CSS_Abilities[152] = 'ZxE8'
set udg_CSS_Abilities[153] = 'ZxE9'
set udg_CSS_Abilities[154] = 'ZxEa'
set udg_CSS_Abilities[155] = 'ZxEb'
set udg_CSS_Abilities[156] = 'ZxEc'
set udg_CSS_Abilities[157] = 'ZxEd'
set udg_CSS_Abilities[158] = 'ZxEe'
set udg_CSS_Abilities[159] = 'ZxEf'
set udg_CSS_Abilities[160] = 'ZxEg'
set udg_CSS_Abilities[161] = 'ZxEh'
set udg_CSS_Abilities[162] = 'ZxD0'
set udg_CSS_Abilities[163] = 'ZxD1'
set udg_CSS_Abilities[164] = 'ZxD2'
set udg_CSS_Abilities[165] = 'ZxD3'
set udg_CSS_Abilities[166] = 'ZxD4'
set udg_CSS_Abilities[167] = 'ZxD5'
set udg_CSS_Abilities[168] = 'ZxD6'
set udg_CSS_Abilities[169] = 'ZxD7'
set udg_CSS_Abilities[170] = 'ZxD8'
set udg_CSS_Abilities[171] = 'ZxD9'
set udg_CSS_Abilities[172] = 'ZxDa'
set udg_CSS_Abilities[173] = 'ZxDb'
set udg_CSS_Abilities[174] = 'ZxDc'
set udg_CSS_Abilities[175] = 'ZxDd'
set udg_CSS_Abilities[176] = 'ZxDe'
set udg_CSS_Abilities[177] = 'ZxDf'
set udg_CSS_Abilities[178] = 'ZxDg'
set udg_CSS_Abilities[179] = 'ZxDh'
set udg_CSS_Abilities[180] = 'ZxC0'
set udg_CSS_Abilities[181] = 'ZxC1'
set udg_CSS_Abilities[182] = 'ZxC2'
set udg_CSS_Abilities[183] = 'ZxC3'
set udg_CSS_Abilities[184] = 'ZxC4'
set udg_CSS_Abilities[185] = 'ZxC5'
set udg_CSS_Abilities[186] = 'ZxC6'
set udg_CSS_Abilities[187] = 'ZxC7'
set udg_CSS_Abilities[188] = 'ZxC8'
set udg_CSS_Abilities[189] = 'ZxC9'
set udg_CSS_Abilities[190] = 'ZxCa'
set udg_CSS_Abilities[191] = 'ZxCb'
set udg_CSS_Abilities[192] = 'ZxCc'
set udg_CSS_Abilities[193] = 'ZxCd'
set udg_CSS_Abilities[194] = 'ZxCe'
set udg_CSS_Abilities[195] = 'ZxCf'
set udg_CSS_Abilities[196] = 'ZxCg'
set udg_CSS_Abilities[197] = 'ZxCh'

loop
exitwhen i > 30
set udg_CSS_Power[i] = a
set a = a*2
set i = i + 1
endloop

set udg_CSS_Hashtable = InitHashtable()

if udg_CSS_PreloadBoolean then
call CSS_Preload()
endif
endfunction
               
endlibrary
 
That function and a few others are in the maps' Custom Script section (click the map name in the trigger editor). Daffa should have known better than to do that in 2021, frankly. This should be updated. Put all the code in the CS and the CSS trigger into one library and overwrite the CSS trigger with it:
JASS:
library CSS_FixThisDaffaYouFool
//************************************************************************************************************
//*                                                                                                          *
//*                              CUSTOM STAT SYSTEM (CSS)                                                    *
//*                                                                                                          *
//*   Author:   Doomlord                                                                                     *
//*   Version:  1.5i                                                                                         *
//*                                                                                                          *
//*   Credits:                                                                                               *
//*   + Earth-Fury:    BonusMod binary algoritm; implementation macro.                                       *
//*   + Crigges:       A great amount of help and support.                                                   *
//*   + Geries:        Help me with the item hashtable values cleanup.                                       *
//*   + rulerofiron99: Item Socketing method referenced from [GUI]Right Click Item Recipe v1.05.             *
//*   + Vexorian:      CSS_SimError [url]http://www.wc3c.net/showthread.php?t=101260[/url]                   *
//*   + Magtheridon96: [Snippet]BoundInt [url]http://www.hiveworkshop.com/forums/2294066-post804.html[/url]  *
//*   + WaterKnight:   Help with the stack for custom Event Response.                                        *
//*   + PurgeandFire:  Pinpoint a possible desync bug with the system.                                       *
//*   + Nestharus:     Mentioning the possible negative life bug in his Bonus lib.                           *
//*                                                                                                          *
//************************************************************************************************************


//**************************************************************************************
//* INTRODUCTION:                                                                      *
//*                                                                                    *
//* An alternative to BonusMod for those who prefer a vanilla JASS approach.           *
//*                                                                                    *
//* Just follow the API and you are pretty much done.                                  *
//**************************************************************************************


//********************************************************************************************************
//* REQUIREMENTS:                                                                                        *
//*                                                                                                      *
//* JNGP [url]http://www.hiveworkshop.com/forums/tools-560/jassnewgenpack-5d-227445[/url] (Recommended)  *
//* OR:                                                                                                  *
//* Your superhuman capability to transfer 198 abilities to your map. (Not Recommended)                  *
//********************************************************************************************************


//************************************************************************************************************************************************
//* INSTALLATION INSTRUCTION:                                                                                                                    *
//*                                                                                                                                              *
//* Step 1: Copy the custom code for bonus handling to your map header.                                                                          *
//* Step 2: Use JNGP to implement the system's abilities through macro. Instruction is included in the Implementation Macro trigger.             *
//* Step 3: Copy the whole CSS folder to your map. Don't forget to turn on "Automatically create unknown variables while pasting trigger data".  *
//* Step 4: Except for this trigger, delete every other useless elements.                                                                        *
//* Step 5: Use this BonusMod alternative however you want.                                                                                      *
//*                                                                                                                                              *
//************************************************************************************************************************************************


//**************************************************************************************
//* Bonus Types Identifier:                                                            *
//*                                                                                    *
//* Armor Bonus:        0                                                              *
//* Attack Speed Bonus: 1                                                              *
//* Damage Bonus:       2                                                              *
//* Agility Bonus:      3                                                              *
//* Intelligence Bonus: 4                                                              *
//* Strength Bonus:     5                                                              *
//* Life Regen Bonus:   6                                                              *
//* Mana Regen Bonus:   7                                                              *
//* Life Bonus:         8                                                              *
//* Mana Bonus:         9                                                              *
//* Sight Range Bonus:  10                                                             *
//**************************************************************************************


//********************************************************************************
//* Generic Bonus APIs                                                           *
//*                                                                              *
//* CSS_GetBonus takes unit u, integer bonusType returns integer                 *
//* CSS_AddBonus takes unit u, integer amount, integer bonusType returns nothing *
//* CSS_ClearBonus takes unit u, integer bonusType                               *
//********************************************************************************

// SimError by Vexorian at wc3c.net

// Sim Error (modified)

function CSS_SimError takes string s returns nothing
    local string msg = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n|cffffcc00" + s + "|r"
    local player ForPlayer = GetTriggerPlayer()
    local sound error = CreateSoundFromLabel("InterfaceError", false, false, false, 10, 10)

    if GetLocalPlayer() == ForPlayer then
        call ClearTextMessages()
        call DisplayTimedTextToPlayer(ForPlayer, 0.52, 0.96, 2.00, msg)
        call StartSound(error)
    endif

    set ForPlayer = null
endfunction

function CSS_SimNotification takes string s returns nothing
    local string msg = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n|cff32cd32" + s + "|r"
    local player ForPlayer = GetTriggerPlayer()
    local sound notify = CreateSoundFromLabel("ItemReward", false, false, false, 10, 10)

    if GetLocalPlayer() == ForPlayer then
        call ClearTextMessages()
        call DisplayTimedTextToPlayer(ForPlayer, 0.52, 0.96, 2.00, msg)
        call StartSound (notify)
    endif

    set ForPlayer = null
endfunction

// Bound Int by Magtheridon96 at hiveworkshop.com

// BoundInt

function BoundInt takes integer i, integer min, integer max returns integer
    return IMaxBJ(IMinBJ(i, max), min)
endfunction

// Bonus Handling Code

function CSS_AddBonus takes unit u, integer amount, integer bonusType returns nothing
    local integer max = udg_CSS_Power[17]
    local integer min = -udg_CSS_Power[17]
    local integer i = 16
    local integer j = LoadInteger (udg_CSS_Hashtable, GetHandleId(u), bonusType)

    if amount > max - 1 or amount < min then
        call CSS_SimError ("Value too high or too low")
        return
    endif

    if amount + j >= max or amount + j <= min then
        call CSS_SimError ("Current value at maximum or minimum")
    endif

    set amount = amount + j
    call BoundInt (amount, min, max - 1)

    if bonusType < 0 or bonusType > 10 then
        call CSS_SimError ("CSS Error: Invalid bonus type (" + I2S(bonusType) + ")")
        return
    elseif bonusType == 8 or bonusType == 9 then

        if bonusType == 8 and amount*1. + GetUnitState(u, UNIT_STATE_MAX_LIFE) <= 0 then
            call CSS_SimError ("Unit's current max life is lower than the negative bonus amount. Unable to subtract.")
            return
        elseif bonusType == 9 and amount*1. + GetUnitState(u, UNIT_STATE_MAX_MANA) <= 0 then
            call CSS_SimError ("Unit's current max mana is lower than the negative bonus amount. Unable to subtract.")
            return
        endif

        call SaveInteger(udg_CSS_Hashtable, GetHandleId(u), bonusType, amount)

        if amount < 0 then
            set amount = max + amount
        else
            call UnitRemoveAbility(u, udg_CSS_Abilities[(bonusType + 1)*18 - 1])
        endif

        loop
            if amount >= udg_CSS_Power[i] then
                call UnitAddAbility(u, udg_CSS_Abilities[bonusType*18 + i])
                call UnitMakeAbilityPermanent(u, true, udg_CSS_Abilities[bonusType*18 + i])
                set amount = amount - udg_CSS_Power[i]
            else
                call UnitRemoveAbility(u, udg_CSS_Abilities[bonusType*18 + i])
            endif
      
            set i = i - 1
            exitwhen i < 0
        endloop

        if LoadInteger(udg_CSS_Hashtable, GetHandleId(u), bonusType) < 0 then
            call UnitAddAbility(u, udg_CSS_Abilities[(bonusType + 1)*18 - 1])
            call UnitMakeAbilityPermanent(u, true, udg_CSS_Abilities[(bonusType + 1)*18 - 1])
        endif

    else

        call SaveInteger(udg_CSS_Hashtable, GetHandleId(u), bonusType, amount)

        if amount < 0 then
            set amount = max + amount
            call UnitAddAbility(u, udg_CSS_Abilities[(bonusType + 1)*18 - 1])
            call UnitMakeAbilityPermanent(u, true, udg_CSS_Abilities[(bonusType + 1)*18 - 1])
        else
            call UnitRemoveAbility(u, udg_CSS_Abilities[(bonusType+1)*18 - 1])
        endif

        loop
            if amount >= udg_CSS_Power[i] then
                call UnitAddAbility(u, udg_CSS_Abilities[bonusType*18 + i])
                call UnitMakeAbilityPermanent(u, true, udg_CSS_Abilities[bonusType*18 + i])
                set amount = amount - udg_CSS_Power[i]
            else
                call UnitRemoveAbility(u, udg_CSS_Abilities[bonusType*18 + i])
            endif
      
            set i = i - 1
            exitwhen i < 0
        endloop

    endif
endfunction


// Clear bonus

function CSS_ClearBonus takes unit u, integer bonusType returns nothing

if bonusType > 10 or bonusType < 0 or GetUnitTypeId (u) == 0 or IsUnitType (u, UNIT_TYPE_DEAD) then
return
endif

call CSS_AddBonus (u, -LoadInteger (udg_CSS_Hashtable, GetHandleId (u), bonusType), bonusType)
endfunction

// Get current bonus

function CSS_GetBonus takes unit u, integer bonusType returns integer

if bonusType > 10 or bonusType < 0 or GetUnitTypeId (u) == 0 or IsUnitType (u, UNIT_TYPE_DEAD) then
return 0
endif

return LoadInteger (udg_CSS_Hashtable, GetHandleId (u), bonusType)
endfunction

// For preloading abilities

function CSS_Preload takes nothing returns nothing
local integer i = 0
local unit u = CreateUnit(Player(15), 'hfoo', 0, 0, 0.00)

loop
exitwhen i > 197
call UnitAddAbility(u, udg_CSS_Abilities[i])
set i = i + 1
endloop

call RemoveUnit(u)
set u = null
endfunction

//===========================================================================
function InitTrig_CSS_Standalone_Bonus takes nothing returns nothing
local integer i = 0
local integer a = 1

set udg_CSS_Abilities[0] = 'ZxA0'
set udg_CSS_Abilities[1] = 'ZxA1'
set udg_CSS_Abilities[2] = 'ZxA2'
set udg_CSS_Abilities[3] = 'ZxA3'
set udg_CSS_Abilities[4] = 'ZxA4'
set udg_CSS_Abilities[5] = 'ZxA5'
set udg_CSS_Abilities[6] = 'ZxA6'
set udg_CSS_Abilities[7] = 'ZxA7'
set udg_CSS_Abilities[8] = 'ZxA8'
set udg_CSS_Abilities[9] = 'ZxA9'
set udg_CSS_Abilities[10] = 'ZxAa'
set udg_CSS_Abilities[11] = 'ZxAb'
set udg_CSS_Abilities[12] = 'ZxAc'
set udg_CSS_Abilities[13] = 'ZxAd'
set udg_CSS_Abilities[14] = 'ZxAe'
set udg_CSS_Abilities[15] = 'ZxAf'
set udg_CSS_Abilities[16] = 'ZxAg'
set udg_CSS_Abilities[17] = 'ZxAh'
set udg_CSS_Abilities[18] = 'ZxI0'
set udg_CSS_Abilities[19] = 'ZxI1'
set udg_CSS_Abilities[20] = 'ZxI2'
set udg_CSS_Abilities[21] = 'ZxI3'
set udg_CSS_Abilities[22] = 'ZxI4'
set udg_CSS_Abilities[23] = 'ZxI5'
set udg_CSS_Abilities[24] = 'ZxI6'
set udg_CSS_Abilities[25] = 'ZxI7'
set udg_CSS_Abilities[26] = 'ZxI8'
set udg_CSS_Abilities[27] = 'ZxI9'
set udg_CSS_Abilities[28] = 'ZxIa'
set udg_CSS_Abilities[29] = 'ZxIb'
set udg_CSS_Abilities[30] = 'ZxIc'
set udg_CSS_Abilities[31] = 'ZxId'
set udg_CSS_Abilities[32] = 'ZxIe'
set udg_CSS_Abilities[33] = 'ZxIf'
set udg_CSS_Abilities[34] = 'ZxIg'
set udg_CSS_Abilities[35] = 'ZxIh'
set udg_CSS_Abilities[36] = 'ZxB0'
set udg_CSS_Abilities[37] = 'ZxB1'
set udg_CSS_Abilities[38] = 'ZxB2'
set udg_CSS_Abilities[39] = 'ZxB3'
set udg_CSS_Abilities[40] = 'ZxB4'
set udg_CSS_Abilities[41] = 'ZxB5'
set udg_CSS_Abilities[42] = 'ZxB6'
set udg_CSS_Abilities[43] = 'ZxB7'
set udg_CSS_Abilities[44] = 'ZxB8'
set udg_CSS_Abilities[45] = 'ZxB9'
set udg_CSS_Abilities[46] = 'ZxBa'
set udg_CSS_Abilities[47] = 'ZxBb'
set udg_CSS_Abilities[48] = 'ZxBc'
set udg_CSS_Abilities[49] = 'ZxBd'
set udg_CSS_Abilities[50] = 'ZxBe'
set udg_CSS_Abilities[51] = 'ZxBf'
set udg_CSS_Abilities[52] = 'ZxBg'
set udg_CSS_Abilities[53] = 'ZxBh'
set udg_CSS_Abilities[54] = 'ZxG0'
set udg_CSS_Abilities[55] = 'ZxG1'
set udg_CSS_Abilities[56] = 'ZxG2'
set udg_CSS_Abilities[57] = 'ZxG3'
set udg_CSS_Abilities[58] = 'ZxG4'
set udg_CSS_Abilities[59] = 'ZxG5'
set udg_CSS_Abilities[60] = 'ZxG6'
set udg_CSS_Abilities[61] = 'ZxG7'
set udg_CSS_Abilities[62] = 'ZxG8'
set udg_CSS_Abilities[63] = 'ZxG9'
set udg_CSS_Abilities[64] = 'ZxGa'
set udg_CSS_Abilities[65] = 'ZxGb'
set udg_CSS_Abilities[66] = 'ZxGc'
set udg_CSS_Abilities[67] = 'ZxGd'
set udg_CSS_Abilities[68] = 'ZxGe'
set udg_CSS_Abilities[69] = 'ZxGf'
set udg_CSS_Abilities[70] = 'ZxGg'
set udg_CSS_Abilities[71] = 'ZxGh'
set udg_CSS_Abilities[72] = 'ZxH0'
set udg_CSS_Abilities[73] = 'ZxH1'
set udg_CSS_Abilities[74] = 'ZxH2'
set udg_CSS_Abilities[75] = 'ZxH3'
set udg_CSS_Abilities[76] = 'ZxH4'
set udg_CSS_Abilities[77] = 'ZxH5'
set udg_CSS_Abilities[78] = 'ZxH6'
set udg_CSS_Abilities[79] = 'ZxH7'
set udg_CSS_Abilities[80] = 'ZxH8'
set udg_CSS_Abilities[81] = 'ZxH9'
set udg_CSS_Abilities[82] = 'ZxHa'
set udg_CSS_Abilities[83] = 'ZxHb'
set udg_CSS_Abilities[84] = 'ZxHc'
set udg_CSS_Abilities[85] = 'ZxHd'
set udg_CSS_Abilities[86] = 'ZxHe'
set udg_CSS_Abilities[87] = 'ZxHf'
set udg_CSS_Abilities[88] = 'ZxHg'
set udg_CSS_Abilities[89] = 'ZxHh'
set udg_CSS_Abilities[90] = 'ZxF0'
set udg_CSS_Abilities[91] = 'ZxF1'
set udg_CSS_Abilities[92] = 'ZxF2'
set udg_CSS_Abilities[93] = 'ZxF3'
set udg_CSS_Abilities[94] = 'ZxF4'
set udg_CSS_Abilities[95] = 'ZxF5'
set udg_CSS_Abilities[96] = 'ZxF6'
set udg_CSS_Abilities[97] = 'ZxF7'
set udg_CSS_Abilities[98] = 'ZxF8'
set udg_CSS_Abilities[99] = 'ZxF9'
set udg_CSS_Abilities[100] = 'ZxFa'
set udg_CSS_Abilities[101] = 'ZxFb'
set udg_CSS_Abilities[102] = 'ZxFc'
set udg_CSS_Abilities[103] = 'ZxFd'
set udg_CSS_Abilities[104] = 'ZxFe'
set udg_CSS_Abilities[105] = 'ZxFf'
set udg_CSS_Abilities[106] = 'ZxFg'
set udg_CSS_Abilities[107] = 'ZxFh'
set udg_CSS_Abilities[108] = 'ZxJ0'
set udg_CSS_Abilities[109] = 'ZxJ1'
set udg_CSS_Abilities[110] = 'ZxJ2'
set udg_CSS_Abilities[111] = 'ZxJ3'
set udg_CSS_Abilities[112] = 'ZxJ4'
set udg_CSS_Abilities[113] = 'ZxJ5'
set udg_CSS_Abilities[114] = 'ZxJ6'
set udg_CSS_Abilities[115] = 'ZxJ7'
set udg_CSS_Abilities[116] = 'ZxJ8'
set udg_CSS_Abilities[117] = 'ZxJ9'
set udg_CSS_Abilities[118] = 'ZxJa'
set udg_CSS_Abilities[119] = 'ZxJb'
set udg_CSS_Abilities[120] = 'ZxJc'
set udg_CSS_Abilities[121] = 'ZxJd'
set udg_CSS_Abilities[122] = 'ZxJe'
set udg_CSS_Abilities[123] = 'ZxJf'
set udg_CSS_Abilities[124] = 'ZxJg'
set udg_CSS_Abilities[125] = 'ZxJh'
set udg_CSS_Abilities[126] = 'ZxK0'
set udg_CSS_Abilities[127] = 'ZxK1'
set udg_CSS_Abilities[128] = 'ZxK2'
set udg_CSS_Abilities[129] = 'ZxK3'
set udg_CSS_Abilities[130] = 'ZxK4'
set udg_CSS_Abilities[131] = 'ZxK5'
set udg_CSS_Abilities[132] = 'ZxK6'
set udg_CSS_Abilities[133] = 'ZxK7'
set udg_CSS_Abilities[134] = 'ZxK8'
set udg_CSS_Abilities[135] = 'ZxK9'
set udg_CSS_Abilities[136] = 'ZxKa'
set udg_CSS_Abilities[137] = 'ZxKb'
set udg_CSS_Abilities[138] = 'ZxKc'
set udg_CSS_Abilities[139] = 'ZxKd'
set udg_CSS_Abilities[140] = 'ZxKe'
set udg_CSS_Abilities[141] = 'ZxKf'
set udg_CSS_Abilities[142] = 'ZxKg'
set udg_CSS_Abilities[143] = 'ZxKh'
set udg_CSS_Abilities[144] = 'ZxE0'
set udg_CSS_Abilities[145] = 'ZxE1'
set udg_CSS_Abilities[146] = 'ZxE2'
set udg_CSS_Abilities[147] = 'ZxE3'
set udg_CSS_Abilities[148] = 'ZxE4'
set udg_CSS_Abilities[149] = 'ZxE5'
set udg_CSS_Abilities[150] = 'ZxE6'
set udg_CSS_Abilities[151] = 'ZxE7'
set udg_CSS_Abilities[152] = 'ZxE8'
set udg_CSS_Abilities[153] = 'ZxE9'
set udg_CSS_Abilities[154] = 'ZxEa'
set udg_CSS_Abilities[155] = 'ZxEb'
set udg_CSS_Abilities[156] = 'ZxEc'
set udg_CSS_Abilities[157] = 'ZxEd'
set udg_CSS_Abilities[158] = 'ZxEe'
set udg_CSS_Abilities[159] = 'ZxEf'
set udg_CSS_Abilities[160] = 'ZxEg'
set udg_CSS_Abilities[161] = 'ZxEh'
set udg_CSS_Abilities[162] = 'ZxD0'
set udg_CSS_Abilities[163] = 'ZxD1'
set udg_CSS_Abilities[164] = 'ZxD2'
set udg_CSS_Abilities[165] = 'ZxD3'
set udg_CSS_Abilities[166] = 'ZxD4'
set udg_CSS_Abilities[167] = 'ZxD5'
set udg_CSS_Abilities[168] = 'ZxD6'
set udg_CSS_Abilities[169] = 'ZxD7'
set udg_CSS_Abilities[170] = 'ZxD8'
set udg_CSS_Abilities[171] = 'ZxD9'
set udg_CSS_Abilities[172] = 'ZxDa'
set udg_CSS_Abilities[173] = 'ZxDb'
set udg_CSS_Abilities[174] = 'ZxDc'
set udg_CSS_Abilities[175] = 'ZxDd'
set udg_CSS_Abilities[176] = 'ZxDe'
set udg_CSS_Abilities[177] = 'ZxDf'
set udg_CSS_Abilities[178] = 'ZxDg'
set udg_CSS_Abilities[179] = 'ZxDh'
set udg_CSS_Abilities[180] = 'ZxC0'
set udg_CSS_Abilities[181] = 'ZxC1'
set udg_CSS_Abilities[182] = 'ZxC2'
set udg_CSS_Abilities[183] = 'ZxC3'
set udg_CSS_Abilities[184] = 'ZxC4'
set udg_CSS_Abilities[185] = 'ZxC5'
set udg_CSS_Abilities[186] = 'ZxC6'
set udg_CSS_Abilities[187] = 'ZxC7'
set udg_CSS_Abilities[188] = 'ZxC8'
set udg_CSS_Abilities[189] = 'ZxC9'
set udg_CSS_Abilities[190] = 'ZxCa'
set udg_CSS_Abilities[191] = 'ZxCb'
set udg_CSS_Abilities[192] = 'ZxCc'
set udg_CSS_Abilities[193] = 'ZxCd'
set udg_CSS_Abilities[194] = 'ZxCe'
set udg_CSS_Abilities[195] = 'ZxCf'
set udg_CSS_Abilities[196] = 'ZxCg'
set udg_CSS_Abilities[197] = 'ZxCh'

loop
exitwhen i > 30
set udg_CSS_Power[i] = a
set a = a*2
set i = i + 1
endloop

set udg_CSS_Hashtable = InitHashtable()

if udg_CSS_PreloadBoolean then
call CSS_Preload()
endif
endfunction
             
endlibrary
Thanks for the help, though I didn't update that portion of the code from the 2018 iteration of the spell. It's pretty low priority at the moment
 
Top