1. Are you planning to upload your awesome map to Hive? Please review the rules here.
    Dismiss Notice
  2. Find your way through the deepest dungeon in the 18th Mini Mapping Contest Poll.
    Dismiss Notice
  3. A brave new world lies beyond the seven seas. Join the 34th Modeling Contest today!
    Dismiss Notice
  4. Check out the Staff job openings thread.
    Dismiss Notice
Dismiss Notice
Hive 3 Remoosed BETA - NOW LIVE. Go check it out at BETA Hive Workshop! Post your feedback in this new forum BETA Feedback.
Dismiss Notice
60,000 passwords have been reset on July 8, 2019. If you cannot login, read this.

Trigger Viewer

Monter2 v1.1.10.w3x
Variables
Notes
Credits
Unit IDs
Animations
Projectile Priority
Version 0.10
Version 0.11.0 -> 0.11.2
Version 0.11.3 -> 0.11.6
Version 0.11.7 -> 0.11.8
Version 0.12.0 -> 0.12.2
Version 0.12.3 -> 0.12.4
Version 0.12.5 -> 0.12.6
Version 0.13.0 -> 0.13.6
Version 0.14.0. -> 0.14.4
Version 0.14.5 -> 0.14.6
Version 0.15.0 -> 0.15.4
Version 0.16.0 -> 0.16.3
Version 0.17.0 -> 0.17.5
Version 0.18.0 -> 0.18.4
Version 0.18.5 -> 0.19.1
Version 0.19.2 -> 0.19.8
Version 0.20.0 -> 0.20.7
Version 0.21
Version 1.0
Version 1.1
Version 1.1 (cont)
Version 1.1 (cont2)
Initialization
init
init vars
init objects
init multiboard
preloading
Core
atk
atk aoe
prj
prj multi
prj add
prj death
stat
enemy target
enemy action
Damage Engine
Unit Indexer
fucktiy fuck
CodeGen
CodeGen Init
CodeGen Save
CodeGen Load
new
start
pregame leave check
Unit
general
unit attributes
unit descale
damage
damage ult
default state
mp regen
move cancel
caster
Set Max Hp
Set Max Mana
player
recharge ammunition
recharge ammunition 2
artifact upgrades
artifact upgrades hide
add stat
lockon click
lockon disable esc
sprint
sprint check
heat gauge
move tracking
death
grave
grave forfeit
revive
cam
cam adjust left press
cam adjust left release
cam adjust right press
cam adjust right release
cam adjust up press
cam adjust up release
cam adjust down press
cam adjust down release
Equipment & Items
equipment stats
item scaling
equip weapon
equip offhand
equip scroll
equip charm
equip quiver
equip back
equip helmet
backpack
backpack update
view stats
stats up
stats down
stats left
stats right
statzzzzzzz
stats update
items
item stack
antivenom
bounty
bounty confirm
explosive barrel
ebdoor3
ebdoor7
ebdoor20
ebdoor21
ebdoor23
ebdoor25
ebdoor26
ebdoor27
explosive barrel death
gold coins
healing salve
key
life essence
life essence purchase
life token item
nitropotion
potion
stamina potion
promotion stone
promotion stone confirm
warlock stone
skill scrolls
skill scroll guardian
dark fragment
tome of retraining
curse ward
fire herb
charred ring
artifacts
enemy drops
preset drops
drop
loot
loot expire
magic golem loot multi
revenant loot multi
ancient viper loot multi
loot multi blank
Game
leave
set checkpoint
checkpoint travel
checkpoint travel confirm
crates
tutorial wpn select
tutorial music
tutorial showhint1
tutorial showhint1a
tutorial showhint1b
tutorial showhint1c
tutorial showhint1d
tutorial showhint2
bandit sell explosive
demon ruins lava damage
demon ruins key drop
object interaction
hint
chest
brazier
switch
sign
tutorial weapon crates
tutorial weapon drop
dig locations
dig1
dig2
dig3
dig12
dig20
dig21
region event
pvparena entrance
pvparena exit
dungeon1 enter
dungeon1 exit
dungeon1 enter2
dungeon1 exit2
dungeon1 revenant enter
dungeon1 revenant exit
dungeon1 stairs enter
dungeon1 stairs exit
wall viewpoint enter
wall viewpoint exit
tutorial enter
tutorial exit
tutorial east enter
tutorial east exit
magic golem enter
magic golem exit
crypt enter
crypt exit
passage enter
passage exit
viewpoint1
viewpoint1 exit
viewpoint2
viewpoint2 exit
viewpoint3
viewpoint3 exit
trap crypt
trap crypt1
trap crypt2
trap crypt3
trap lowercrypt1
trap lowercrypt2
trap lowercrypt3
footswitch3 enter
footswitch3 exit
footswitch3a enter
footswitch3a exit
footswitch3b enter
footswitch3b exit
footswitch3c enter
footswitch3c exit
footswitch3 spawn wisps
scorpion1
enemy trap1 poison elementals
enemy trap2 skeletons
boss
boss progression
boss player death
boss death
magic golem start
magic golem summon
guardian tutorial start
guardian tutorial set checkpoint
guardian tutorial end
dreadlord start
dreadlord end
living statue start
living statue death
living statue timer
living statue end
revenant start
revenant periodic damage
ancient viper start
ancient viper end
guardian fire start
guardian fire end
guardian fire lava ascend
guardian fire lava descend
guardian fire lava damage
guardian fire checkhp
nf start
nf end
nf fog
nf credits
flame champion start
flame champion end
arena
pvparena start
pvparena end
zone
zone tutorial
zone crypt
zone crypt 2
zone demon ruins
time
day
noon
sunset
midnight
Commands
suicide
camreset
msg
msgname
msghex
solo
Debug
bptest
kill
kill click
cd
bring
setstat
item
item level
enemy spawn
ally spawn
invul
unpause
pvp
barsize
color
ally
unally
invisible
hitzone
animation
spawner move
reveal
framestest activate
prjst2
farz
getlocationz
lavalevel
frames test
levertest
loottest
loottest2
loottestb
lootclear
enemytargettest
camtest
areacam
gamedifficulty
trigger test
pausetest
stats
prjst
daze
indexsize test
Easy Mode
easy mode dialog
Artifacts
life token
life token multi
claw gloves2
claw gloves multi
life token upgrades
artifact upgrades use
artifact switch loop
artifact acquire
artifact switch
claw gloves old
artifact switch old
Weapons
Axe
attack axe
bloodlust
bloodlust dmg bonus
attack axe multi
severance
severance multi
harvest multi
adrenaline
adrenaline multi
Sword
attack sword
attack sword heavy
curved blade
attack sword multi
attack sword spinattack multi
flame dagger multi
blade dance
blade dance multi
dark sword dmg
dark sword awaken animation
dark sword death
blood wind
blood wind multi
blood wind multi2
spiral slash
spiral slash multi
striders sword iframes
Spear
attack spear
attack spear shaft attack
attack spear charge multi
attack spear multi
Bow
attack bow
attack bow multi
switch arrow
switch arrow 2
ammo text
evasive volley
evasive volley multi
celestial arrow
celestial arrow multi
Hammer
attack hammer
attack hammer multi
charge attack
impact
impact multi
magic quake
magic quake multi
Weapons
dodge
shield
throw knife
throw knife multi
attack fist
attack dual blades
attack dual blades heavy
attack dual blades multi
dual blades evade
attack cannon
attack cannon melee
attack cannon multi
Special
attack greatsword
attack greatsword buffer
attack greatsword multi
charge attack greatsword
attack rapier
attack rapier multi
attack weird spear
weird spear multi
attackinit
attack bow old
attack bow multi old
switch arrow old
Life Token
divine sword multi
Enemy
GENERAL
enemy add
enemy damage
enemy respawn
enemy exp
Ancient Viper
ancient viper attack
ancient viper multi
ancient viper multi2
ancient viper projectiles
Bandit
bandit attack
bandit multi
Bandit Lord
bandit lord attack
bandit lord multi
Banshee
banshee attack
banshee multi
Beetle (Giant)
beetle giant attack
beetle giant multi
Demon Caster
demon caster attack
demon caster multi
demon caster flame shield
flame shield aoe multi
Demon Warrior
demon warrior attack
demon warrior multi
meteor multi
Dreadlord
dreadlord attack
dreadlord multi
dreadlord aoe
dreadlord aoe multi
Faerie Dragon
faerie dragon attack
faerie dragon multi
Fire Elemental
fire elemental attack
fire elemental multi
Fire Lizard
fire lizard attack
fire lizard multi
Flame Champion
flame champion attack
flame champion multi
flame champion parry
Frost Mage
frost mage attack
frost mage multi
frost mage shield
Giant Skeleton
giant skeleton attack
giant skeleton multi
giant skeleton reincarnate
Golem
golem attack
golem multi
Guardian
guardian attack
guardian multi
Guardian (Fire)
guardian fire attack
guardian fire multi
guardian fire periodic
guardian fire time bomb periodic
Guardian (Tutorial)
guardian tutorial attack
guardian tutorial multi
guardian tutorial multi2
guardian tutorial periodic
Living Statue
living statue attack old
living statue multi old
living statue attack
living statue multi
Magic Golem
golem p attack
golem p multi hardmode
golem p multi
falling boulder multi
Minion (Guardian)
minion attack
minion death
minion multi
Nameless Footman
nameless footman attack
nameless footman multi
nf spinattack multi
nf lifetoken
nf death animation
nf death animation 2
nf dmg
Poison Elemental
poison elemental attack
poison elemental multi
poison elemental death
Revenant
h00h
revenant attack
revenant multi
revenant multi hard
poison orb death
poison trap death
revenant remove traps
revenant poison cloud periodic
Satyr
satyr attack
satyr multi
Satyr (Purple)
satyr p attack
satyr p multi
Scorpion
scorpion attack
scorpion multi
Skeleton
skeleton attack
skeleton multi
skeleton reincarnate
Skeleton Archer
skeleton archer attack
skeleton archer multi
skeleton archer reincarnate
Spike Trap
spike trap attack
Vagrant
vagrant attack
vagrant multi
Vagrant B
vagrant B attack
vagrant B multi
Wall Trap
wall trap attack
Warlock
warlock attack
warlock multi
warlock death
Wisp
wisp attack
wisp multi
wisp multi 2
call Knockback(unit, velocity, acceleration, angle, duration)
call ParabolaZ(startZ, endZ, maxheight, maxdist, currentdist)
call ZFacing(maxheight , maxdist , currentdist)
//TESH.scrollpos=419
//TESH.alwaysfold=0
function UnitSound takes unit u, string id, integer volume, real d returns nothing
    local sound snd=CreateSound(id,false,true,false,10,10,"")
    call SetSoundPitch(snd,GetRandomReal(0.9,1.1))
    call SetSoundVolume(snd,volume)
    call SetSoundDistances(snd,600,d)
    call AttachSoundToUnit(snd,u)
    call StartSound(snd)
    call KillSoundWhenDone(snd)
    set snd=null
endfunction

function UnitSoundHigh takes unit u, string id, integer volume, real d returns nothing
    local sound snd=CreateSound(id,false,true,false,10,10,"")
    call SetSoundPitch(snd,GetRandomReal(1.3,1.5))
    call SetSoundVolume(snd,volume)
    call SetSoundDistances(snd,600,d)
    call AttachSoundToUnit(snd,u)
    call StartSound(snd)
    call KillSoundWhenDone(snd)
    set snd=null
endfunction

function UnitSoundLow takes unit u, string id, integer volume, real d returns nothing
    local sound snd=CreateSound(id,false,true,false,10,10,"")
    call SetSoundPitch(snd,GetRandomReal(0.6,0.8))
    call SetSoundVolume(snd,volume)
    call SetSoundDistances(snd,600,d)
    call AttachSoundToUnit(snd,u)
    call StartSound(snd)
    call KillSoundWhenDone(snd)
    set snd=null
endfunction

function Knockback takes unit u, real spd, real spdrate, real angle, real dur returns nothing
    set udg_prjIndexSize = udg_prjIndexSize + 1
        if (udg_prjIndexSize > udg_prjIndexMax) then
            set udg_prjIndexMax = udg_prjIndexSize
            set udg_prjIndex[udg_prjIndexSize] = udg_prjIndexSize
        else
        endif
    set udg_A = udg_prjIndex[udg_prjIndexSize]
    set udg_prjUnit[udg_A] = u
    set udg_prjStatSpeed[udg_A] = spd
    set udg_prjStatSpeedRate[udg_A] = spdrate
    set udg_prjStatAngle[udg_A] = angle
    set udg_prjStatDuration[udg_A] = dur
    set udg_prjStatPermanent[udg_A] = true
    set udg_prjStatRadius[udg_A] = 40.000
    set udg_prjStatRadiusDestructible[udg_A] = 100.000
    set udg_prjStatAlwaysFacing[udg_A] = false
    set udg_prjStatNoUnitCollision[udg_A] = true
    call EnableTrigger( gg_trg_prj )
endfunction

function AttackInitialize takes unit u returns nothing
    set udg_tempBoolean[0] = false
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = udg_atkIndexSize
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        if ( udg_atkUnit[udg_atkIndex[GetForLoopIndexA()]] == u ) then
            set udg_C = udg_atkIndex[GetForLoopIndexA()]
            set udg_tempBoolean[0] = true
        else
        endif
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    if ( udg_tempBoolean[0] == false ) then
        set udg_atkIndexSize = ( udg_atkIndexSize + 1 )
        if ( udg_atkIndexSize > udg_atkIndexMax ) then
            set udg_atkIndex[udg_atkIndexSize] = udg_atkIndexSize
            set udg_atkIndexMax = udg_atkIndexSize
        else
        endif
        set udg_C = udg_atkIndex[udg_atkIndexSize]
        set udg_atkUnit[udg_C] = u
    else
    endif
endfunction

function AttackInitializeEnemy takes unit u returns nothing
    set udg_tempBoolean[0] = false
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = udg_atkIndexSize
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        if ( udg_atkUnit[udg_atkIndex[GetForLoopIndexA()]] == u ) then
            set udg_C = udg_atkIndex[GetForLoopIndexA()]
            set udg_tempBoolean[0] = true
        else
        endif
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = udg_enemyAIndexSize
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        if ( udg_enemyAUnit[udg_enemyAIndex[GetForLoopIndexA()]] == u ) then
            set udg_D = udg_enemyAIndex[GetForLoopIndexA()]
        else
        endif
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    if ( udg_tempBoolean[0] == false ) then
        set udg_atkIndexSize = ( udg_atkIndexSize + 1 )
        if ( udg_atkIndexSize > udg_atkIndexMax ) then
            set udg_atkIndex[udg_atkIndexSize] = udg_atkIndexSize
            set udg_atkIndexMax = udg_atkIndexSize
        else
        endif
        set udg_C = udg_atkIndex[udg_atkIndexSize]
        set udg_atkUnit[udg_C] = u
    else
    endif
endfunction

function ParabolaZ takes real y0, real y1, real h, real d, real x returns real
    return ((4 * h / d) * (d - x) + y1 - y0) * (x / d) + y0
    //h = max height
    //d = max distance
    //x = current distance
    //y0 = starting Z
    //y1 = ending Z
endfunction

function ZFacing takes real h, real d, real x returns real
  return Atan(4*h/d - 8*h*x/(d*d))*bj_RADTODEG+0.5
  //h = max height
  //d = max distance
  //x = current distance
endfunction

function MultiboardDisplayPlayerBJ takes boolean show, multiboard mb, player toPlayer returns nothing
    if (GetLocalPlayer() == toPlayer) and not(show) then
        call MultiboardDisplay(mb, false)
        return
    endif
    call MultiboardDisplay(mb, GetLocalPlayer() == toPlayer)
endfunction

function GetUnitsInRangeOfLocMatching_custom takes real radius, location whichLocation, boolexpr filter returns group
    set udg_g = CreateGroup()
    call GroupEnumUnitsInRangeOfLoc(udg_g, whichLocation, radius, filter)
    call DestroyBoolExpr(filter)
    return udg_g
endfunction

function GetUnitsInRectMatching_custom takes rect r, boolexpr filter returns group
    set udg_g = CreateGroup()
    call GroupEnumUnitsInRect(udg_g, r, filter)
    call DestroyBoolExpr(filter)
    return udg_g
endfunction

function GetRandomSubGroup_custom takes integer count, group sourceGroup returns group
    set udg_g2 = CreateGroup()

    set bj_randomSubGroupGroup = udg_g2
    set bj_randomSubGroupWant  = count
    set bj_randomSubGroupTotal = CountUnitsInGroup(sourceGroup)

    if (bj_randomSubGroupWant <= 0 or bj_randomSubGroupTotal <= 0) then
        return udg_g2
    endif

    set bj_randomSubGroupChance = I2R(bj_randomSubGroupWant) / I2R(bj_randomSubGroupTotal)
    call ForGroup(sourceGroup, function GetRandomSubGroupEnum)
    return udg_g2
endfunction

function BoolExpr1 takes nothing returns boolean
    return (IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(udg_enemyTUnit[udg_enemyTempInt])) == true) and (GetUnitAbilityLevelSwapped('A02S', GetFilterUnit()) == 0) and (GetUnitAbilityLevelSwapped('Avul', GetFilterUnit()) == 0) and (IsUnitAliveBJ(GetFilterUnit()) == true)
endfunction

function BoolExprEnemyExp takes nothing returns boolean
    return (GetUnitTypeId(GetFilterUnit()) == 'H000')
endfunction

function BoolExprRevenant takes nothing returns boolean
    return ( udg_attrbSummoner[GetUnitUserData(GetFilterUnit())] == GetTriggerUnit() )
endfunction

function CodeGen_SaveToDisk takes string loadcode, string filename returns nothing
    call PreloadGenClear()
    call PreloadGenStart()
    call Preload(loadcode)
    call PreloadGenEnd(filename)
    call ClearSelection()
endfunction

function CodeGen_Init takes nothing returns nothing
    local integer i = 1
    local integer b = udg_SaveLoad_Base
    local integer m = udg_SaveLoad_MaxValue
    loop
        exitwhen i >= udg_SaveLoad_MaxValue
        set udg_SaveLoad_Char[i] = SubString(udg_SaveLoad_Alphabet, i, i+1)
        set i = i + 1
    endloop
    set udg_SaveLoad_Alphabet = SubString(udg_SaveLoad_Alphabet, 0, 1) + SubString(udg_SaveLoad_Alphabet, m + 1, b)
    set udg_SaveLoad_Base     = b - m
endfunction

function CodeGen_ConvertItem takes integer id returns integer
    local integer i = 1
    loop
        exitwhen i > udg_SaveLoad_ItemCount
        if (id == udg_SaveLoad_Item[i]) then
            return i
        endif
        set i = i + 1
    endloop
    return 0
endfunction

function CodeGen_ConvertUnit takes integer id returns integer
    local integer i = 1
    loop
        exitwhen i > udg_SaveLoad_HeroCount
        if (id == udg_SaveLoad_Hero[i]) then
            return i
        endif
        set i = i + 1
    endloop
    return 0
endfunction

function CodeGen_Encode takes integer i returns string
    local integer b
    local string s = ""
    
    if i <= udg_SaveLoad_Base then
        return SubString(udg_SaveLoad_Alphabet, i, i + 1)
    endif
    
    loop
        exitwhen i <= 0
        set b = i - (i / udg_SaveLoad_Base) * udg_SaveLoad_Base
        set s = SubString(udg_SaveLoad_Alphabet, b, b + 1) + s
        set i = i / udg_SaveLoad_Base
    endloop
    
    return s
endfunction

function CodeGen_StrPos takes string s returns integer
    local integer i = 0
    loop
        exitwhen i > udg_SaveLoad_Base
        if s == SubString(udg_SaveLoad_Alphabet, i, i + 1) then
            return i
        endif
        set i = i + 1
    endloop
    return -1
endfunction

function CodeGen_Decode takes string s returns integer
    local integer a = 0
    
    loop
        exitwhen StringLength(s) == 1
        set a = a * udg_SaveLoad_Base + udg_SaveLoad_Base * CodeGen_StrPos(SubString(s, 0, 1))
        set s = SubString(s, 1, 99)
    endloop
    
    return a+CodeGen_StrPos(s)
endfunction

function CodeGen_StringChecksum takes string in returns integer
    local integer i = 0
    local integer l = StringLength(in)
    local integer t = 0
    local integer o = 0
    loop
        exitwhen i >= l
        set t = CodeGen_Decode(SubString(in, i, i + 1))
        set o = o + t
        set i = i + 1
    endloop
    return o
endfunction

function CodeGen_Color takes string char returns string
    local integer i = 0
    local integer l = StringLength(udg_SaveLoad_Full)
    local string x  = ""
    loop
        exitwhen i >= l
        set x = SubString(udg_SaveLoad_Full, i, i + 1)
        if char == x then
            if (x=="0" or S2I(x) > 0) then
                return udg_SaveLoad_Number + char + "|r"
            elseif StringCase(x, false) == x then
                return udg_SaveLoad_Lower + char + "|r"
            elseif StringCase(x, true) == x then
                return udg_SaveLoad_Upper + char + "|r"
            endif
        endif
        set i = i + 1
    endloop
    return char
endfunction

function CodeGen_Format takes string s returns string
    local integer i = 0
    local integer x = StringLength(s)
    local integer j = 1
    local string s2 = ""
    
    loop
        exitwhen i >= x
        
        set s2 = s2 + CodeGen_Color(SubString(s, i, i + 1))
        
        if (j >= udg_SaveLoad_HyphenSpace and i != (x-1)) then
            set j = 0
            set s2 = s2 + udg_SaveLoad_SeperationChar
        endif
        
        set j = j + 1
        set i = i + 1
    endloop
    
    return s2
endfunction

function CodeGen_Strip takes string s returns string
    local integer i  = 0
    local integer x  = StringLength(s)
    local string out = ""
    local string a   = ""
    
    loop
        exitwhen i >= x
        set a = SubString(s, i, i + 1)
        if (a != udg_SaveLoad_SeperationChar) then
            set out = out + a
        endif
        set i = i + 1
    endloop
    
    return out
endfunction

// yeeahh descriptive variables
function CodeGen_Load takes string s returns nothing
    local string str = CodeGen_Strip(s)
    local string tmp = ""
    local string c   = ""
    local integer x  = 0
    local integer i  = 1
    local integer l  = 0
    local integer j  = 1
    local integer f  = 0
    local boolean b  = true
    
    set udg_SaveLoad_Valid = false
    
    if (udg_SaveLoad_Security) then
        loop
            exitwhen i > 3
            if (CodeGen_Decode(SubString(str, 0, i)) == CodeGen_StringChecksum(SubString(str, i, 999))) then
                set udg_SaveLoad_Valid = true
                set str = SubString(str, i, 999)
                set i = 4
            endif
            set i = i + 1
        endloop
    endif
    
    if (not udg_SaveLoad_Valid) then
        set udg_SaveLoad_Error = "Invalid Code"
        return
    endif
    
    set i = 0
    set l = StringLength(str)
    
    if (udg_SaveLoad_CheckName) then
        set c = CodeGen_Encode(CodeGen_StringChecksum(GetPlayerName(GetTriggerPlayer())))
        set i = StringLength(c)
        if (c != SubString(str, l - i, i)) then
            set udg_SaveLoad_Valid = false
            set udg_SaveLoad_Error = "Wrong username"
            return
        endif
        set l = l - i
    endif
    
    set i = 0
    
    loop
        exitwhen i >= l
        set tmp = SubString(str, i, i + 1)
        
        set b = true
        set f = 0
        set j = 1
        
        loop
            exitwhen f >= (udg_SaveLoad_MaxValue)
            if (tmp == udg_SaveLoad_Char[f]) then
                set j = f + 2
                set udg_Load[x] = CodeGen_Decode(SubString(str, i + 1, i + (j)))
                set b = false
                set f = udg_SaveLoad_MaxValue
            endif
            set f = f + 1
        endloop
        
        if (b) then
            set udg_Load[x] = CodeGen_Decode(tmp)
        endif
        
        set i = i + j
        set x = x + 1
    endloop
    
    set udg_SaveLoad_Valid = true
endfunction

function CodeGen_Compile takes nothing returns string
    local integer i  = 0
    local integer j  = 0
    local string out = ""
    local string ln  = ""
    local string x   = ""

    loop
        exitwhen i > udg_SaveCount
        set x = CodeGen_Encode(udg_Save[i])
        set j = StringLength(x)

        if (j > 1) then
            set out = out + udg_SaveLoad_Char[j-1]
        endif
        
        set out = out + x
        set i = i + 1
    endloop

    if (udg_SaveLoad_CheckName) then
        set out = out + CodeGen_Encode(CodeGen_StringChecksum(GetPlayerName(GetTriggerPlayer())))
    endif
    
    if (udg_SaveLoad_Security) then
        set out = CodeGen_Encode(CodeGen_StringChecksum(out)) + out
    endif
    
    if udg_SaveLoad_SaveToDisk and GetLocalPlayer() == GetTriggerPlayer() then
        call CodeGen_SaveToDisk(out, udg_SaveLoad_Directory + "\\" + udg_SaveLoad_Filename)
    endif
                
    return CodeGen_Format(out)
endfunction
Name Type Is Array Initial Value
_credits_count integer No
_credits_int integer No
_debug_hitzones boolean No
_debug_kill boolean Yes
_debug_prjstAmount integer Yes
_ezhint_death boolean Yes
_ezhint_footswitch boolean Yes
_ezhint_lifetoken boolean Yes
_ezhint_lockon boolean Yes
_ezmode boolean Yes
_ezmode_dbutton button Yes
_ezmode_dialog dialog Yes
_pregame boolean No
_pregameLoaded boolean Yes true
_spawner unit Yes
A integer No
area_dungeon1 boolean Yes
area_magic_golem boolean Yes
area_pvparena boolean Yes
area_tutorial boolean Yes
artifactAbility abilcode Yes
artifactClawgloves_b boolean Yes
artifactCycle integer Yes
artifactLifetoken_b boolean Yes
artTempInt integer No
artUpg_LTActiveCount integer Yes
artUpg_LTDivSword boolean Yes
artUpg_LTEnergize boolean Yes
artUpg_LTHiHeal boolean Yes
artUpg_LTMedHeal boolean Yes
artUpg_LTRegen boolean Yes
artUpg_LTRevival boolean Yes
artUpg_LTRevivalCount integer Yes
artUpg_LTShield boolean Yes
ATK_TICKCONSTANT real No
atkAbsoluteStunDur real Yes
atkBlockstunDur real Yes
atkCurseDur real Yes
atkDazeAmount real Yes
atkDazeAttachment abilcode Yes
atkDazeDur real Yes
atkExtendCheck boolean Yes
atkExtendUnitCount integer Yes
atkExtendUnits hashtable Yes
atkFramesActive real Yes
atkFramesExtend real Yes
atkFramesFollowup real Yes
atkFramesFollowupSpecial real Yes
atkFramesMulti real Yes
atkFramesParry real Yes
atkFramesPause real Yes
atkFramesPauseAlt real Yes
atkFramesRecovery real Yes
atkIndex integer Yes
atkIndexMax integer No
atkIndexSize integer No
atkIsDeflect boolean Yes
atkIsOffhand boolean Yes
atkIsSpecialMove boolean Yes
atkKnockbackDur real Yes
atkKnockbackPower real Yes
atkLifedrainAmount real Yes
atkLoop integer No
atkLoopB integer No
atkMultiSequence integer Yes
atkMultiTempInt integer Yes
atkMultiTempInt2 integer Yes
atkMultiTempInt3 integer Yes
atkMultiTempUnit unit No
atkMultiTrigger trigger Yes
atkSequenceForce integer Yes
atkStatAngle real Yes
atkStatCanDamageAlly boolean Yes
atkStatDamage real Yes
atkStatRadius real Yes
atkStatRange real Yes
atkStatSequence integer Yes
atkStatSequenceOffhand integer Yes
atkSwingSoundEffect string Yes
atkTempInt integer No
atkTempLoc location Yes
atkUnit unit Yes
attrbBurnHealth real Yes
attrbBurnHealthMax real Yes
attrbDmgBlockFire real Yes
attrbDmgBlockIce real Yes
attrbDmgBlockPhys real Yes
attrbDmgBlockPoison real Yes
attrbElmPower integer Yes
attrbElmPowerOffhand integer Yes
attrbElmType integer Yes
attrbElmTypeOffhand integer Yes
attrbPoisonHealth real Yes
attrbPoisonHealthMax real Yes
attrbResFire real Yes
attrbResIce real Yes
attrbResPhysical real Yes
attrbResPoison real Yes
attrbShieldStability real Yes
attrbShockHealth real Yes
attrbShockHealthMax real Yes
attrbStunFactor real Yes
attrbStunFactorOffhand real Yes
attrbStunHealth real Yes
attrbStunHealthMax real Yes
attrbSummonCurrent integer Yes
attrbSummoner unit Yes
attrbSummonLimit integer Yes
attrbUnitHeight real Yes
attrbWeight integer Yes
attrbWpnPwr integer Yes
attrbWpnPwrOffhand integer Yes
B integer No
barsize real Yes
BloodlustLifestlAmt real No
boss_check boolean Yes
boss_damagedealt real Yes
boss_damagetaken real Yes
boss_max_health integer Yes
boss_progression integer Yes
boss_ready integer Yes
boss_ready_crystal unit Yes
boss_region rect Yes
boss_supply unit Yes
boss_unit unit Yes
bounty_tempItem item Yes
bpLoop integer No
C integer No
camAdjustX real Yes
camAdjustY real Yes
camHeight real Yes
camLoop integer No
camViewpoint camerasetup Yes
camViewpoint_b boolean Yes
challengeSolo integer Yes
checkpoint unit Yes
clawRegionTransfer rect Yes
Code StringExt No
D integer No
DamageBlockingAbility abilcode No
DamageEvent real No
DamageEventAmount real No
DamageEventExplodesUnit boolean No
DamageEventOverride boolean No
DamageEventPrevAmt real No
DamageEventSource unit No
DamageEventsWasted integer No
DamageEventTarget unit No
DamageEventTrigger trigger No
DamageEventType integer No
DamageModifierEvent real No
DamageTypeDOT integer No
DamageTypeRanged integer No
DamageTypeSpell integer No
dialog dialog Yes
dialogBounty dialog Yes
dialogbutton button Yes
dialogbuttonBounty button Yes
dialogbuttonTravel button Yes
dialogbuttonTravelCrypt button Yes
dialogTravel dialog Yes
dialogTravelCrypt dialog No
DmgEvLife real No
DmgEvN integer No
DmgEvStack unit Yes
DmgEvTimer timer No
DmgTypPrev integer No
enemyA_AlwaysTrack boolean Yes
enemyAggroSwitchDefault real Yes
enemyAggroSwitchTimer real Yes
enemyAIndex integer Yes
enemyAIndexMax integer No
enemyAIndexSize integer No
enemyAInitialLoc location Yes
enemyALoop integer No
enemyANextAttack real Yes
enemyANoTracking boolean Yes
enemyAStatFollowRange real Yes
enemyAStatMeleeRange real Yes
enemyATrackingTime real Yes
enemyAUnit unit Yes
enemyAUnitTarget unit Yes
enemyMoveFrequency integer Yes
enemyTempInt integer No
enemyTempIntB integer No
enemyTempLoc location Yes
enemyTIndex integer Yes
enemyTIndexMax integer No
enemyTIndexSize integer No
enemyTLoop integer No
enemyTStatTargetRadius real Yes
enemyTUnit unit Yes
equipAbilityBack abilcode Yes
equipAbilityBackShield abilcode Yes
equipAbilityCharm abilcode Yes
equipAbilityHelmet abilcode Yes
equipAbilityOffhand abilcode Yes
equipAbilityShield abilcode Yes
equipAbilityWeapon abilcode Yes
equipAttachBackShield abilcode Yes
equipAttachShield abilcode Yes
equipAttachWeapon abilcode Yes
equipItemBack item Yes
equipItemCharm item Yes
equipItemHelmet item Yes
equipItemOffhand item Yes
equipItemQuiver item Yes
equipItemScroll item Yes
equipItemWeapon item Yes
flamechampion_tempLoc location Yes
g group No
g2 group No
game_difficulty integer No
game_dungeon1_fswitchRegion rect Yes
game_dungeon1_fswitchTrigger trigger Yes
game_dungeon1_leverCount integer Yes
game_tutorial_region rect Yes
gameEventTookWeapon boolean Yes
heat real Yes
heatBarColor string Yes
heatFloatingText texttag Yes
heatLevel integer Yes
heatLoop integer No
Hero unit No
isSinglePlayer boolean No
IsUnitPreplaced boolean Yes
item itemcode Yes
Item item No
lifetokenTarget unit Yes
Load integer Yes
LoadCount integer No
localplayer player No
lockonB boolean Yes
lockonHp_text texttag Yes
lockonUnit unit Yes
Loop_Integer integer No
lootAllLoot boolean Yes
lootDrops itemcode Yes
lootLimit hashtable Yes
lootMultiTempUnit unit No
lootMultiTrigger trigger Yes
lootNoExpire boolean No
lootPermanent boolean Yes
lootSharedLoot boolean Yes
main_bBackShield boolean Yes
mainBackpackUnit unit Yes
mainEquipUnit unit Yes
mainLifeEssence integer Yes
mainQuiverUnit unit Yes
mainStatAgi integer Yes
mainStatInt integer Yes
mainStatStm integer Yes
mainStatStr integer Yes
mainStatVit integer Yes
mainUnit unit Yes
mainUnitBuffer unit Yes
mainUpgradesUnit unit Yes
Max_Hp integer No
Max_Mana integer No
mpLoop integer No
mpRegenTemp real Yes
msgHexCode string Yes
msgName string Yes
multiboardStats multiboard Yes
MultiboardStatsCol integer Yes
MultiboardStatsRow integer Yes
PhysicalDamage real No
playercolorstring string Yes
players integer No
PoisonDamage real No
PRJ_TICKCONSTANT real No
prjCheck boolean No
prjCriticalRangeb boolean Yes
prjCriticalRangeEnd real Yes
prjCriticalRangeStart real Yes
prjFollowUnit unit Yes
prjHomingTimer real Yes
prjHomingUnit unit Yes
prjIndex integer Yes
prjIndexMax integer No
prjIndexSize integer No
prjLinearZ real Yes
prjLinearZRate real Yes
prjLocationZ real No
prjLoop integer No
prjMulti real Yes
prjMultiOnUnitCollision boolean Yes
prjMultiTempUnit unit No
prjNonstop boolean Yes
prjNonstopInterval real Yes
prjParabolaZ real No
prjParaDistCurrent real Yes
prjParaDistMax real Yes
prjParaEndZ real Yes
prjParaMaxZ real Yes
prjParaStartZ real Yes
prjPivotUnit unit Yes
prjSpecialEffect effect Yes
prjStatAlwaysFacing boolean Yes
prjStatAngle real Yes
prjStatCanDamageAlly boolean Yes
prjStatDamage real Yes
prjStatDamageRate real Yes
prjStatDuration real Yes
prjStatNoDstrCollision boolean Yes
prjStatNoUnitCollision boolean Yes
prjStatPermanent boolean Yes
prjStatPriority integer Yes
prjStatRadius real Yes
prjStatRadiusDestructible real Yes
prjStatSpeed real Yes
prjStatSpeedRate real Yes
prjStatusBlocked boolean Yes
prjTempInt integer No
prjTempLoc location Yes
prjTempUnitGroup group Yes
prjTypeLinear boolean Yes
prjTypeParabola boolean Yes
prjUnit unit Yes
prjVariation integer Yes
prjVariationTemp integer Yes
pvp boolean No
pvparena_timer timer Yes
pvparena_timerwindow timerdialog Yes
Save integer Yes
SaveCount integer No
SaveLoad_Abilities abilcode Yes
SaveLoad_AbilityCount integer No
SaveLoad_Alphabet string No
SaveLoad_Base integer No
SaveLoad_Char string Yes
SaveLoad_CheckName boolean No
SaveLoad_Directory string No
SaveLoad_Error string No
SaveLoad_Filename string No
SaveLoad_Full string No
SaveLoad_Hero unitcode Yes
SaveLoad_HeroCount integer No
SaveLoad_HyphenSpace integer No
SaveLoad_Item itemcode Yes
SaveLoad_ItemCount integer No
SaveLoad_Lower string No
SaveLoad_MaxValue integer No
SaveLoad_Number string No
SaveLoad_SaveToDisk boolean No
SaveLoad_Security boolean No
SaveLoad_SeperationChar string No
SaveLoad_Upper string No
SaveLoad_Valid boolean No
skillAdrenaline_dmg real Yes
skillAdrenaline_Limit real No
skillBladeDance_dmg real Yes
skillBladeDance_Limit real No
skillBloodWind_dmg real Yes
skillBloodWind_Limit real No
skillCelestialArrow_dmg real Yes
skillCelestialArrow_Limit real No
skillEVolley_dmg real Yes
skillEVolley_Limit real No
skillImpact_dmg real Yes
skillImpact_Limit real No
skillMagicQuake_dmg real Yes
skillMagicQuake_Limit real No
skillSeverance_dmg real Yes
skillSeverance_Limit real No
skillSpiralSlash_dmg real Yes
skillSpiralSlash_Limit real No
Some_Unit unit No
spawnCanyon rect Yes
spawnWillRespawn boolean Yes
sprintBurnTimer real Yes
sprintCancelDelay real Yes
sprintColorString string Yes
sprintFloatingText texttag Yes
sprintLoop integer No
stat_tempCV integer No
stat_tempIndex integer No
statIndex integer Yes
statIndexMax integer No
statIndexSize integer No
statLoop integer No
statUnit unit Yes
statusAbsStunImmuneDur real Yes
statusAdrenalineDur real Yes
statusAwakenTimer real Yes
statusBatlRoarCD real Yes
statusBatlRoarDmgAmt real Yes
statusBatlRoarDur real Yes
statusBatlRoarHpAmt real Yes
statusBloodlustCurLifestl real Yes
statusBloodlustDur real Yes
statusBloodlustMaxLifestl real Yes
statusBloodlustSelfDmg real Yes
statusBurnDamage real Yes
statusBurnDamageSource unit Yes
statusBurnDur real Yes
statusCamShakeDur real Yes
statusChipDmgRegen real Yes
statusCurseDur real Yes
statusDamageAmount real Yes
statusDamageDur real Yes
statusDamageText texttag Yes
statusDazeAmount real Yes
statusDazeDur real Yes
statusDmgMultiplierDur real Yes
statusDmgMultiplierValue real Yes
statusFlameShieldDur real Yes
statusHarvestDur real Yes
statusInvulDur real Yes
statusNonstopHit real Yes
statusPauseDur real Yes
statusPerfectDefenseDur real Yes
statusPeriodicDur real Yes
statusPeriodicDur2 real Yes
statusPeriodicInterval real Yes
statusPeriodicInterval2 real Yes
statusPeriodicTrigger trigger Yes
statusPeriodicTrigger2 trigger Yes
statusPeriodicUnit unit No
statusPeriodicUnit2 unit No
statusPoison real Yes
statusPoisonDamage real Yes
statusPoisonDamageSource unit Yes
statusPoisonImmuneDur real Yes
statusRegenDur real Yes
statusRegenRate real Yes
statusRegenSourceUnit unit Yes
statusShieldAmount real Yes
statusShieldBlocksPoise boolean Yes
statusShieldDur real Yes
statusShockDur real Yes
statusStamRateDouble real Yes
statusSuperarmorDur real Yes
StunDamage real No
tempBoolean boolean Yes
tempInt integer Yes
tempItem item Yes
tempItemType itemcode Yes
tempLoc location Yes
tempPlayer player Yes
tempPlayerGroup force Yes
tempReal real Yes
tempRegion rect Yes
tempString string Yes
tempUnit unit Yes
TempUnit unit No
tempUnitGroup group Yes
trackingLocMovePoint location Yes
trackingLocUnit location Yes
UDex integer No
UDexGen integer No
UDexNext integer Yes
UDexPrev integer Yes
UDexRecycle integer No
UDexUnits unit Yes
UDexWasted integer No
UnitDamageRegistered boolean Yes
UnitIndexerEnabled boolean No
UnitIndexEvent real No
UnitIndexLock integer Yes
vertexcoloring_B real Yes
vertexcoloring_G real Yes
vertexcoloring_R real Yes
vertexcoloring_T real Yes
visibility fogmodifier Yes
wpnBowAmmoText texttag Yes
wpnBowArrowAbility abilcode Yes
wpnBowArrowSlot integer Yes
wpnBowArrowType integer Yes
wpnBowArrowTypeDefault integer Yes
wpnBowArrowUnitType unitcode Yes
wpnBowFocus real Yes
wpnBowFocusTemp real Yes
wpnBowFocusText texttag Yes
wpnBowIsCharged boolean Yes
wpnBowPointerUnit unit Yes
wpnBowSpecialShot boolean Yes
wpnIsBlocking boolean Yes
wpnPointer unit Yes
X integer Yes
yep boolean Yes
zone_ready integer Yes
zone_ready_crystal unit Yes
[Main]
Triggering, terrain, music - n00b (Hiveworkshop)
Item descriptions, main tester, ideas guy - Crap (USEast)
Testers - the thousands of players who have joined my 'TESTING MAP YOU GET CREDIT' games expecting to get credit

[Systems]
Damage engine - Bribe
Max HP/MP modifier - Tom Jones
Parabola function - moyack
ZFacing function - moyack
Dummy model - Vexorian

[Model credits]
-Peper-
Amigurumi
Anvil
Balrog
bisnar13
Blood Raven
Callahan
Celestea
Crimson-Guard
Debode
Deolrin
dhguardianes
dioris
eubz
Forgotten_Warlord (emptypot)
Gottfrei
HammerFist132
HappyTauren
hellblazer-14
Herio-san
imforfun
JetFangInferno
Judash
Kino
Kitabatake
Land-Sengklek
nGy
olofmoleman
PeeKay
Power
Radagast
RightField (flammer)
Sunchips
takakenji
Talon the Mage
The_Silent (shelf)
Thrikodius
TLI-Inferno
UgoUgo
Other various contributors to the Ultimate Terraining Map
h00u Bandit
h00z Bandit Lord
h010 Banshee
h006 Beetle
h029 Beetle (Giant)
h00d Crystal
h00p Fire Lizard
h013 Giant Skeleton
h007 Golem
h00k Guardian
h02b Guardian (Tutorial)
h01m Magic Golem
h00o Minion (Guardian)
h00s Satyr
h01j Satyr (purple)
h001 Scorpion
h002 Vagrant
h00a Vagrant (b)
h02g Wisp
h020 Faerie Dragon
h021 Dreadlord
h02m Living Statue
13 Walk Alternate (sprint)
14 Sword 1
15 Sword 2
16 Sword running attack
17 Sword running attack followup
18 Parry
19 Block
20 Hammer 1
21 Hammer 2
22 Stagger
23 Bow 1
24 Bow 2 (standing)
25 Bow 3 (fire)
26 Bow 4 (fire followup)
27 Bow running attack
28 Sword heavy 1
29 Sword heavy 2
30 Hammer charge attack
31 Dagger 1 (offhand)
32 Dagger 2 (offhand)
33 Stand Flesh (two-handed)
34 Shield bash
35 Spear 1
36 Spear 2
37 Spear 3
38 Spear running attack followup
39 Spear shaft attack 1
40 Spear shaft attack 2
41 Throwing Knife
42 Greatsword 1
43 Critical Strike 1
44 Critical Strike 2
45 Greatsword running attack
46 Spear shielded thrust
47 Greatsword charge attack 1
48 Greatsword charge attack 2
49 Dual Blades 1
50 Dual Blades running attack
51 Dual Blades evade
52 Temp
53 Shotgun melee attack
54 Shotgun 1 (prime)
55 Shotgun 2 (fire)
56 Dual Blades running attack followup
57 Dig 1
58 Dig 2
59 Dig 3
60 Dig 4
61 Sword 3
62 Greatsword 2
63 Fist 1
64 Fist 2
65 Fist running attack
66 Dual Blades heavy 1
67 Rising slash
68 Rapier 1
69 Rapier 2
70 Round Slash
71 Charge attack 1 (new)
72 Stand Slam (Charge attack 2)
73 Charge attack 3
74 Dig exit
75 Spin attack
76 Retreating thrust
77 Quick stab
78 Round Strike
79 Stand Ready (bow)
80 Stand Upgrade (bow)
81 Bow load
82 Bow fire
83 Bow load 2
84 Walk Ready (bow)
85 Walk Upgrade (bow)
86 Walk Upgrade Alternate (bow)
87 Special Shot
88 Dodge Roll (bow)
89 Spear Charge
90 Spear Charge Finish
91 Walk Slam (Charge attack walk)
92 Blade Dance
93 Impact
94 Evasive Volley
95 Evasive Volley 2
96 Sword Rest
97 Evading Volley (Alternate)
98 Ground Thrust
99 Sword Rest 2
100 Enduring Spirit
101 Charge Slam
40 - Banshee: Missile
45 - Fire Lizard: Fireball Discharge B
45 - Wisp: Missile
50 - Bow: Arrow (Normal)
50 - Bow: Arrow (Poison)
50 - Bow: Arrow (Fire)
52 - Cannon: Shot (Normal)
55 - Fire Lizard: Fireball Discharge A
60 - Bow: Arrow (Heavy)
80 - Fire Lizard: Fireball
0.10.3
- Added item: Throwing Knife
- Increased charge speed for the bow
- Decreased stamina consumption for sprint
- Players can lock on to enemies by clicking now
- Can no longer use shield skills while wielding a bow
• Shields are placed on the player's back if wielding a bow
• Switching back to a shield-compatible weapon will make the shield usable again
• Players still reap certain benefits of the shield, such as Stun Endurance
- Added poison status effect
• Poison Endurance stat determines how much damage is needed for a unit to be poisoned

0.10.4
- Improved Sword animations
- Non-lockon attacks can be directed more easily now (e.g. like jumping attacks)

0.10.5
- Added a dodge to the Satyr's moveset
- Remove pause frames from Spear attacks
- Added lootable chests
- Made tweaks on the new sword animations
- Terrain improvements
- Fixed item stacking glitch with Poison Arrows
- Added Promotion Stone which is used to upgrade weapons
- Added Para's Rapier (didn't give it its proper moveset yet)
- Can no longer obtain loot if your inventory is full
- Changed maximum capacity for Potions: 8 -> 15
- Default weapon power of players is now 4
• Default used to be 100, which could be exploited
- Bows can now be charged for a longer period
• Still aims even with no stamina
• Cannot gain more Focus meter if you do not have enough stamina
- Offhand items now have separate weapon, elemental, and stun powers from main weapons
- There are now enemy bandits in the canyon
- Added items to Bandit's drop table: Potion, Heavy Arrow, Poison Arrow, Throwing Knife

0.10.6
- Updated terrain
- Added Ravager Blade (still have to add moveset)
0.11.0
- Added Critical Strike animation
- Revised 'multi' trigger shit so that it's not clumped up in a single trigger
- Added item: [Finisher: Critical Strike]
- Added item class: Scrolls
• Scrolls add skills to the player's moveset
• Usually, these skills consume Heat, which is gained by attacking or being damaged
- Players can no longer clip through enemies using certain attacks now (jump slash, etc.)
- Added 'player leaving' notification
- Added Heat Gauge
• Heat is used to perform special abilities
• Heat is gained by dealing or taking damage
• You gain more Heat if you have less health
- Added "-color" command
- Added allying/unallying commands (purely for experimental purposes)
- Added "-invisible" command

0.11.1
- Potion changes
• Renamed to [Healing Salve]
• Max charges increased to 99
- Added [Potion]
• Heals 50 HP over 5 seconds
- The potion crate at the start now gives Potions now instead of Healing Salves
- Stun Endurance of enemies no longer scales with players
- Players now drop all their items and equipment upon leaving
- Bandit MP: 135 -> 60

0.11.2
- Added enemy: Bandit Lord
- You no longer remain locked on to an enemy after dynig
- Added item: [Life Essence]
- Increased camera's field of view
- Terrain updates
- Added enemy: Revenant
- Greatsword changes
• Sprinting attack is now a normal attack
• Sprinting attack is now a spinning swing
- Spike Traps are invulnerable now

0.11.3
- Fixed Critical Strike animation glitch
- Units will no longer continue to move if stunned during an animation involving 'projectile motion'
- Fixed Bandit Lord glitches
• Fixed bug where players could not attack for a certain period while fighting a Bandit Lord
• Bandit Lord stops charging upon being stunned now
- Increased Poison/Heavy arrow max charges to 99
- Minor item description adjustments
- Added charge attack animation for the Ravager Blade (which is basically a c&p but whtever bitch)
0.11.3
- Fixed Critical Strike animation glitch
- Units will no longer continue to move if stunned during an animation involving 'projectile motion'
- Fixed Bandit Lord glitches
• Fixed bug where players could not attack for a certain period while fighting a Bandit Lord
• Bandit Lord stops charging upon being stunned now
- Increased Poison/Heavy arrow max charges to 99
- Minor item description adjustments
- Added charge attack animation for the Ravager Blade (which is basically a c&p but whtever bitch)
- The Running Parry is no longer considered an offhand attack
- Bandits should drop items now
- Reduced Golem boulder damage

0.11.4
- Updated certain hints as to be more clear on things
- You can no longer block and unblock in rapid succession (as to prevent Parry spamming)
- Polished enemy sound effects
- Increased Bandit Lord hitpoints
- Fire Lizard's bomb fires less shrapnel now (to prevent lag)
- Added enemy: Giant Skeleton
- Players are now given a Stone Shield if they choose the Mace
- Terrain updates
- Can't clip out of the map anymore
- Decreased Fire Lizard hitpoints

0.11.5
- Made adjustments to the Greatsword sprint attack animation
- Added item: [Twin Daggers]
- Players now see hitpoints of locked on units
- Added item: [Life Essence]
- Added item: [Antivenom]

0.11.6
- Map dimensions reduced
- Added various lootable objects around the map
- Made adjustments to the Greatsword 1 animation
- Added enemy: Satyr (p)
- Added boss: Golem (p)
0.11.7
- Life Essence can't go in the negatives anymore
- Fixed multiple boss summoning glitch
- Secondary golem in the dark golem boss actually doesn't sit on his ass doing nothing now!!
- Dark golem's straight fireballs are now subject to projectile priority
- Graves won't still have permanence after beating a boss now
- Reduced damage on [Twin Daggers]: 10 wpn. => 7 wpn.
- Life Tokens should disappear on use now [needs confirmation]

0.11.8
- Increased stamina consumption on Ravager Blade's attacks
0.12.0
- Added [Rifle]
- Crystals now heal you
- Crystals/Supply Boxes are no longer displayed on the minimap

0.12.1
- Added [Explosive Barrel]
- Added [Nitropotion]
- Added a vendor
- Mob health rescales accordingly when a player leaves now
- Increased Bandit Lord's overall damage
- Terrain updates
- Added a "block stun duration" attribute
• Attacks/projectiles can have varying block stun durations now
• Light attacks/projectiles no longer inflict block stun
- Adjusted the Golem's attack speed
- Added [Weird Spear] (purely for experimental purposes)
- Added "extended hitzones"
• Moves with multiple hitzones will no longer hit multiple times (unless intended)
- Added "Daze" status effect which slows units down, inflicted by the spear's shaft attack
• Units who are Dazed cannot use Sprint
• Effectiveness of evasive moves are reduced during Daze
- Removd [Wooden Bow] and [Twin Daggers] temporarily
- Hitbox adjustments
• Spears deal damage up close now, but for half the damage compared to 'tipper' hits
• Ravager Blade normal attack no longer has a ridiculously wide range
• Reduced range on Ravager Blade's sprinting attack
• Ravager Blade does more damage at the base of the blade now

0.12.1
- Hitbox adjustments
• Mace hitboxes smaller

0.12.2
- Terrain updates
- The normal Golem during the Magic Golem boss fight drops gold if you kill it now
- Enemy parameters adjusted
• Reduced Scorpion damage
• Reduced Golem health
• Reduced Magic Golem health
• Reduced Bandit Lord damage
• Adjustments on the Bandit's hitboxes regarding size/accuracy
• Reduced Bandit's physical block resistance
• Fire Lizard hitbox adjustments regarding size/accuracy
- Added items:
• Bounty (Magic Golem)
• Claw Gloves
• Chest Key
0.12.3
- Terrain updates
- Added units:
• Wall Trap
- Added items:
• Key
- Enemy parameters changed:
• The 'shrapnel' of the Fire Lizard's fireball, upon being spawned, can only collide with units after a brief period to prevent one-shotting
• Homing duration for Banshee missiles has been shortened (1.5 s -> 0.75 s)
• The Bandit Lord always uses his rallying ability first now
- Removed megagolem of death at the beginning of the game

0.12.4
- Fixed pathing issue in the Fire Lizard pit
- Fixed pathing issue in dungeon
- Fixed footswitch bug
- Weapon movesets can now be viewed in the equipment menu
- Shields are placed on the back during two-handed animations now
- Fixed bug where the Magic Golem's fireball would collide with units without doing damage
- Fixed bug where the player could execute the Magic Golem's 'explosion attack' by parrying certain attacks
- Fixed bug where certain enemies would briefly idle while retargeting
- Increased Magic Golem's health
- Fixed bug where players could not obtain the Claw Gloves due to the shiny expiring
- Spear Daze duration increased
- Hitzone adjustments
• Reduced range on Sword on all attacks
• Spear 'tipper' hitzone radius reduced
• Reduced range of Satyr attacks
• Reduced range of Satyr (p) attacks
- Adjusted spear orientation in shaft attack animations

0.12.5
- Added tutorial area
- Projectile system performance slightly improved (possibly)
- Fixed more enemy targeting issues
- Added "Greatsword 2" animation
- Purple satyr damage increased
- Certain enemies are now more aggressive in pursuing their targets now
- Fixed issue where Wall Traps would disappear when a player left
- Reduced size of Bandit Lord hitzones
- Reduced size of Parry hitzone
- Blocking no longer gives "stun immunity"
- Relocated Bandit vendor
- Certain Bandit behaviors changed
- Added a "-farz" command
- Added [Elemental Swords]
- Changed resistances of various enemies
- Certain doors are destructible now through certain means
- Added attack buffering system (kind of)
- Players can now use the arrow keys to 'look' in the specified direction
- Added "zone crystals" (which are just area separators)
- Added atkSwingSoundEffect parameter to attacks, i.e. certain attacks no longer have unneeded swinging sounds anymore

0.12.6
- Magic Golem cave is now dark wow whoa
- Changed spear swinging sound effect
- Added music to Magic Golem boss fight
- Revised Sword animations (again)
- Added [Regeneration Ring]
- Added [Perfection]
- Added [Battle Emblem]
- Added fist attack animations
0.13.0
- Added enemy: Guardian (Tutorial)
- Adjusted Greatsword running attack hitzones
- Players now cannot lock on to certain objects anymore (hints, lootable objects, etc.)
- Terrain updates
- Added various interface sound effects

0.13.1
- Added item: Bounty (Guardian)
- Added enemy: Wisp

0.13.2

0.13.3

0.13.4
- Fixed pathing error in the tutorial area
- The Guardian's AoE attack should no longer target graves
- Guardian stun endurance increased
- Decreased Wisp health
- Wisp aiming improved
- When a crystal is activated, the number of players 'readied' at that crystal is now displayed
- Guardian AoE projectiles now collide with columns

0.13.5
- Fixed "already looted" bug (probably)

0.13.6
- Twin Dagger changes
• Added Heavy Attack animation for the Twin Daggers
• Base damage, upgrade damage scaling, and attack range reduced
- Tutorial zone changes
• Added weapons cache near the tutorial checkpoint near the boss
• Added potion crate in the tutorial area
- Guardian changes
• Windup time on backswing attack increased
• Lightning AoE attack only fires 4 projectiles per unit in the vicinity
• Lightning AoE attack projectile damage reduced
• Projectiles from lightning-buffed attacks shouldn't pass through columns now
• Projectiles from lightning-buffed attacks are now briefly inactive as to prevent "overlapping damage" with the actual melee attack
- Misc. changes
• Added Twin Daggers chest somewhere
• Removed supply box from Magic Golem fight
• Added item: Tail
0.14.0
- Added Flame Dagger heavy attack animation

0.14.1
- Removed some unused models
- Fixed Flame Dagger swing effect
- Sword attachment changed
- Revised 'Greatsword Run Attack' animation
- Ravager Blade: upward swing can now be performed after a charge attack
- Precision of enemy tracking has been reduced overall
- Added "Rapier 1/2" animations
- Added unit: Faerie Dragon
- Sword can now combo into a 'Heavy Attack 2' from a 'Sword 1'
- Added Heavy Attack 2 to the Flame Dagger
- Flame Dagger can now combo into a 'Sword 2' from a 'Heavy Attack 1'
- Lockon changes
-- Removed Lockon ability
-- Lockon is now activated through clicking, and deactivated with the Escape key/clicking on the unit currently in focus
- Added 'Forfeit' ability to graves
-- Grave expiration timer is now 60 s.
-- Forfeit is used to bypass the timer
- Added 'Life Token' ability, which is used to revive/heal other players
- Removed "Spear 3" move from Spear-class weapons (temporarily?)
- Added Claw Gloves ability
- Added boss: Dreadlord
- Removed the Regeneration Ring from the tutorial; replaced it with the Life Token
- Added item: Bounty (Dreadlord)
- The Bandit vendor now sells the Regeneration Ring

0.14.2
- Added dodging animations
- Improved moveset descriptions
- Changed gold values of certain items
- Reduced Life Token cooldown
- Changed health scaling of bosses
- Dreadlord stun endurance increased

0.14.3
- Increased damage of the Dreadlord's windup attack
- Players can no longer block while using the Life Token
- Added rocks to the back of the Dreadlord's arena
- Increased cooldown of the Life Token
- Graves now have a two minute expiration timer

0.14.4
- More stamina is used when blocking attacks now
- Reduced physical block resistance of the Buckler and Stone Shield
- Players now only receive 3 potions in the tutorial area
0.14.5
- Guarding attacks now spends less stamina
- Stamina consumption on most attacks has been increased
- Parrying no longer causes the player to stop blocking
- Fixed bug where players could loot objects while dead
- Fixed bug where certain pieces of equipment could be rendered unequippable
- Magic Golem changes
- Big AoE attack hitzones changed
- The Magic Golem now has a short 'vulnerable period' after executing the big AoE
- Fixed bug where Artifact-related abilities would disappear
- Lowered base health of Satyrs
- Added enemies in certain areas
- Added item: Stamina Potion
- Added enemy respawning
- Replaced the Twin Daggers in the chest at the start of the game with a Stamina Potion
- Added item: Quarterstaff
- Changed the Spear's spriting attack

0.14.6
- Only certain Satyrs will respawn now
- Added stat upgrades
- Enemies now give experience
0.15.0
- Fixed enemy respawn timer
- Upscaled all stamina, damage, and health-related values
- Added enemy: Living Statue
- Added optional section to tutorial area

0.15.1
- Lowered health scaling of Living Statue
- Living Statues are now invulnerable when inactive

0.15.2
- Fixed hp scaling issue with Magic Golem
- Changed Magic Golem fire resistance: 0% -> 25%
- Increased damage of Magic Golem's AoE attack (660 -> 2004)

0.15.3
- Added flavor text
- Fixed pathing at the 'george bush' area
- Lowered drop chance of Tail
- Fixed supply box potion exploit
- Added '-camreset' command
- Fixed bug where the second Golem in the Magic Golem fight would not be summoned
- Vitality now only gives 100 hp per point
- Players now start inside the tutorial
- The Bandit vendor is now considered a mob; will attack nearby enemies
- Fixed the camera in the Living Statues fight
- Fixed wisp scaling
- Flame Dagger and Stone Shield now have stat requirements
- Explosives can only be bought once now
- Bandit vendor now sells Bucklers
- Weapon/element attack bonus gained from Promotion Stones reduced
- Wisps now drop potions/healing salves
- Players can no longer revive during boss fights
- Some wisps respawn now
- Changed scaling formulas of bosses; no longer exponential

0.15.4
- Revised Hammer animations
- Sword animations added

Soon to be added:
- Killable merchant, Hatchet weapon
- Faerie Dragon unit
- Satyr ranged unit
- Bandit/Bandit Lord improvements/possible complete overhaul
- Quest logs detailing certain mechanics (unexplained weapon stats like Blocking Power, Stun Endurance, etc.)
- Boss abilities that are dependent on player count
- Supply boxes 2.0 (maybe)
- Add command to check if a unit has the mob regen ability (may be related to the freeze bug)
0.16.0
- Replaced Guardian's lightning attack with a PBAoE attack
- Added spin attack to Sword moveset
- Removed stat requirements
- Added PvP arena

0.16.1
- PvP arena changes
- player health is replenished after rounds
- fixed bug where camera would be locked on the arena even after the end of the round
- Mace changes
- weapon attack changed: 400 -> 320
- reduced size of hitzones on all attacks
- Fixed bug where Beetles would die if a player left
- Fixed bug where enemy health display would disappear (probably)
- Added units: Skeleton, Skeleton Archer, Warlock

0.16.2
- Fixed bug where Warlock would only summon Skeleton Archers
- Added 'Retreating Thrust' to spear moveset
- Players now receive Health Stones (formerly known as supply potions) at the start of a boss battle; amount received is dependent on number of players
- Removed the crate in the tutorial that gave supply potions
- Multiple players can loot the Quarterstaff corpse now
- Guardian bounty now can give the player gold again
- Added more hints
- Changed dig exit animation
- Removed Spear from the tutorial area
- Added 'Quick Stab' to spear moveset

0.16.3
- Added boss: Revenant
- Life Token now cures poison
- Health Stone now cures poison
0.17.0
- Projectile trigger now runs every 0.032 (changed from every 0.01)
- Fixed the damage on the Bandit Lord's charging attack
- Fixed the damage on the Banshee's AoE attack
- Revenant AoE should poison properly now

0.17.1
- Added charm: [Wisp Coin]
- Added weapon: [Curved Blade]
- New boss theme; the 'gonna fight with me' boss theme has been removed
- May or may not have fixed some major issues with leaks
- Disabled stats window (for now?)

0.17.2
- Added zone crystal for the crypt
- Skeletons, Skeleton Archers, and Warlocks now give experience upon kill
- Antivenom now has a 25 second cooldown
- Revenant changes
- AoE attack now fires projectiles
- Melee attacks should be executed less often now
- Movement speed reduced
- Homing poison orb damage reduced
- Explosive Barrel gold cost increased: 100 -> 200
- Resource sharing is now disabled

0.17.3
- Weapon moveset interface thingy changed
- Fixed bug where Revenant's AoE attack would double hit
- Revenant now drops a Bounty
- Removed quiver temporarily
- Special abilities (Parry, Spin Attack, etc) now must be unlocked by using skill scrolls
- Fixed Life Essence count bug
- Removed rocks in the Dreadlord boss room

0.17.4
- Added Hammer skills: Boost, Round Strike
- Move canceling a Charge Attack no longer causes the player to be unable to attack
- Added enemy: Poison Elemental
- Added Wisp Coin to the Wisp's drop table
- Added Curved Blade to the Satyr's drop table
- Skeletons and Skeleton Archers now drop potions

0.17.5
- Added "-kill" debug command
- Added "-msg" command
- Tail attachment changed
- Flame Dagger renamed to Flame Blade
- Added item: Golem Head
- Added descriptions to items: Curved Blade, Health Stone, Warlock Stone, Wisp Coin, Explosive Barrel, all Skill Scrolls
- Added item: Poison Essence
- Updated terrain
0.18.0
- Added Intelligence stat
- Added artifact upgrades
- artifact upgrades provide additional effects to their associated artifacts
- these effects scale with Intelligence/Life Essences
- The amount the Life Token heals is now shown via floating text
- Added items: Medium Heal, Energize, Shield, High Heal
- Quarterstaff/Barrier give a bonus to INT now
- Resource sharing has been disabled (probably)
- Life Essences can now be obtained from boss bounties now
- Damage dealt/taken is now shown after boss fights
- Added priest vendor
- Life Token can now damage certain units

0.18.1
- Fixed bug where you could buff enemies with Shield/Energize
- Fixed bug where damage not directly from the boss did not count towards damage taken
- Wisp Coin no longer has a stock cooldown
- Added item: Everlasting Ring
- Added artifact upgrade: Regenerate
- Added hard mode Guardian
- Added item: Dark Fragment
- Added item: Bounty (Guardian) (hard mode version)

0.18.2
- Hardmode Guardian changes:
* ranged lightning damage and AoE reduced
* predictive lightning activation time increased
- Artifact upgrade descriptions are more detailed now
- Shield (artifact upgrade) now scales only with INT
- Med/High Heal now have increased base healing
- Regenerate now damages undead units over time
- Unit name/player name of lockon target is now displayed

0.18.3
- Buffed scaling of all available weapons
- Item descriptions now display weapon scaling values
- Hardmode Guardian changes:
* reduced damage of remote lightning AoEs
* now creates more random lightning bolts in a larger radius
- Fist now scales with strength
- Fixed glitch where the Fist would retain the elemental power of any elemental weapon

0.18.4
- Added new weapon class: Bow
- Fixed bug where mana would sometimes stop regenerating
0.18.5
- Fixed bug where Living Statues would disappear from the arena, making the fight unplayable
- Priest vendor is now outside of the tutorial area near the tents
- Fixed aggro glitch (probably) that would cause certain enemies to spam attacks and regenerate hp indefinitely
- Made the Dreadlord entrance more obvious
- Priest vendor now moves to the location of the bandit vendor when Dreadlord is defeated
- Fixed bug where the spear's shaft attack would not inflict Daze
- Changed cost of Regenerate: 100 gold -> 50 gold 1 Life Essence
- Fixed animation glitches related to sprinting attacks
- Bow pointer is no longer clickable
- Bow pointer is no longer visible to other players
- Fixed permanent healing special effect bug

0.19.0
- Updated terrain
- Added hard mode Revenant
- Fixed bug where poison would sometimes not deal any damage
- Decreased stat scaling of weapons: Sword, Flame Blade, Mace, Ravager Blade, Spear, Wooden Bow
- Decreased Battle Emblem weapon power bonus
- Changed duration formula for Energize: 10+INT -> 10+2*INT
- Drop rate of Wisp Coin increased
- Priest vendor moved back inside the tutorial area (for some reason, him being next to the quarterstaff corpse would cause the quarterstaff to disappear)

0.19.1
- Heavy Arrow changes
* damage and stun power reduced
* heavy special shot damage increased
- Hard mode Revenant changes
* fixed bug where split shot poison orbs would not create mines
* increased mine limit: 7 -> 14
- Warlock now drops the Torch
- Decreased stat scaling of Curved Blade
- Increased maximum level to 15
- Added item: Tome of Retraining
- Added enemy: Frost Mage
- Priest no longer sells arrows
- Torch glow is brighter now
- Stamina stat now increases stun endurance and poison endurance
- Dreadlord lifesteal now scales with players
- Added Life Token upgrade: Revival
- Fixed glitch where health of Living Statues would be incorrectly scaled on the first attempt to fight them
0.19.2
- Unfixed Living Statue scaling glitch (which may have been related to Satyrs dying inexplicably)
- Added unit: Ancient Viper

0.19.3
- Increased the amount of experience players receive throughout the game
- Ancient Viper changes
- base health reduced
- poison resistance, poison endurance, and stun endurance reduced
- fixed leaks associated with projectiles
- can no longer fire more than two dark fireballs consecutively during its enraged state
- certain attack patterns changed
- Added item: Curse Ward

0.19.4
- Flame Blade changes
- reduced base fire damage
- reduced weapon/elemental power gained from upgrades
- reduced heavy attack damage
- Fixed bug where stamina would sometimes regenerate after attacks earlier than usual
- The period in which stamina does not regenerate after attacks can no longer be canceled by moving
- Players' checkpoints are no longer automatically set to the Dreadlord's boss room after defeating him
- Reduced bow damage penalty (100% damage taken -> 50%)
- Added charm: Pure Gem
- Added spear weapon skill: Charge
- Added a vendor that sells skill scrolls

0.19.5
- Crystals now have a "Travel" option that allows players to teleport to other checkpoints

0.19.6
- Fixed some memory leaks
- Fixed issue where move hotkey would overlap with heavy attack hotkey for certain players (aka Polacks)
- Players now receive more health stones for the Dreadlord boss battle
- Players can no longer upgrade weapons beyond +3
- Previously explored areas are now revealed to the player

0.19.7
- Fixed even more memory leaks

0.19.8
- Players can move around during the Hammer's Charge Attack now
0.20.0
- Updated terrain
- Added boss: Guardian (Fire)

0.20.1
- Fixed bug where the lava in the Flame Guardian fight would inflict knockback (probably)
- Removed "Boost" skill scroll from Soldier vendor
- The "bring" debug command can now be used by players
- Charge Attack damage reduced

0.20.2
- Added Sword skill: Blade Dance
- Added Hammer skill: Impact
- The leftmost Fire Lizard in the lizard pit now drops a Flame Blade
- The corpse in the lizard pit now gives the Blade Dance skill scroll

0.20.3
- The corpse in the lizard pit now gives 10 gold
- Blade Dance/Impact are now obtained after defeating Guardian
- The soldier at the crypt entrance now sells Blade Dance/Impact
- Removed shiny in Flame Guardian's boss room that dropped the Impact scroll
- Fixed bug where players could loot multi-item shinies with a full inventory

0.20.4
- Added Bow skill: Evading Volley
- Reduced cost of certain skill scrolls

0.20.5
- Updated Ancient Viper boss room terrain
- Added Life Token upgrade: Divine Sword
- Bow changes
- critical range multiplier reduced to 1.5x
- agility scaling reduced to 3
- heavy arrow special shot damage reduced
- heavy arrow stamina cost increased
- Fixed bug where Frost Mages would not drop any items
- Bandit Lord now drops various items
- Added bow ammunition: Life Arrows

0.20.6
- Added easy mode

0.20.7
- Removed insulting messages (rip)
0.21.0
- Added final boss

0.21.1
- Ancient Viper now drops a key

0.21.2
- Final boss changes
- added spin attack that is used mid-combo
- added a sprinting move
- time spent in charge attack stance reduced
- second phase Life Token now deals damage
- reduced jump attack damage
- Explosive Barrel can now destroy the Old Key gate
- Removed Ravager Blade chest

0.21.3
- Added hammer skill: Enduring Spirit
- More item flavor text added
1.0.0
- Added death sequence for final boss
- Added more item flavor text
- Reduced Dreadlord's multiplayer-scaled lifesteal

1.0.1
- Disabled certain debug commands

1.0.2
- Animation speed for the sword's jump slash reduced
- Windup time for Spin Attack increased
- Damage of the spear's Charge skill increased
- Ending lag for the spear's Charge skill reduced
- Mace weapon power increased to 400
- Warlock Stone now has a 60 second cooldown
- Save/Load added
- Max level increased to 20

1.0.3
- Fixed some Save/Load-related bugs
- Added Solo Challenge

1.0.4
- Reduced damage of Evading Volley
- Increased damage required to activate the Evading Volley skill
- Medium Heal now must be unlocked to use High Heal
- Fixed bug where the Battle Emblem's bonus damage would not be removed properly when unequipping
- Curved Blade scaling reduced to +5 WPN/AGI
- Players can no longer switch weapons during attack animations
- Fixed bug where players could use the Claw Gloves while aiming with the bow
- Life Arrows now deal damage
- Life Arrow healing amount is now displayed as floating text
- Animation speed of Retreating Thrust increased
- It is now possible to combo Retreating Thrust into a Quick Stab
- Retreating Thrust now has invulnerability frames at the start of its animation
- The player will no longer automatically face his lockon target when using Charge
- Fixed bug where Quick Stab could hit multiple times on the second thrust
- Increased damage of the Quick Stab skill
- Added weapon: Dark Sword

1.0.5
- Fixed bugs associated with dying during the Dark Sword's awaken animation
- Maximum lockon distance increased
- Added weapon: Magic Hammer
1.1.0
- Added weapon: Battle Axe
- Damage from ultimate abilities no longer contribute to ultimate damage buildup

1.1.1
- Battle Axe changes
- Increased the maximum lifesteal amount of Bloodlust (percentage of self-damage: 175% -> 350%)
- Decreased damage bonus from Bloodlust (15% -> 5%)
- Increased threshold for Unstable Slash (50% -> 55%)
- Increased damage of Unstable Slash while health is under 55% (move multiplier: 2.8 -> 3.5)
- Reduced recovery time of the leaping strike attack (the first R attack)
- Recovery time of E attacks is slightly reduced while Bloodlust is active now
- Moved location of Battle Axe shiny

1.1.2
- More Battle Axe changes
- Added 'Battle Roar' skill
- Duration of Bloodlust increased to 25 seconds
- Bloodlust no longer gives a 5% damage bonus
- Severance hitzone improved
- Unstable Slash hitzone improved
- Reduced damage required to activate the Evading Volley skill (5000 -> 2000)

1.1.3
- Added area: Demon Ruins

1.1.4
- The Explosive Barrel chest in Demon Ruins can no longer be looted by multiple players
- Fixed bug where multiple Demon's Keys could be looted
- Fixed hotkey for "Add Intelligence" not working
- Flame Champion changes
- Increased windup time for the 3 hit combo attack
- Increased windup time for the dashing attack

1.1.5
- Living Statues now drop a bounty
1.1.6
- Adjusted some special effects for the final boss
- Blade Dance animation speed is now 10% faster
- Critical range of Heavy Arrows increased
- Fixed animation bug related to the final boss's sprinting attack
- Added weapon: Strider's Sword
- Added weapon: Silver Bow

1.1.7
- Removed 'Switch Ability' mechanic
- Ultimate skills now use the 'D' hotkey
- Claw Gloves are now used in the Equipment menu
- Damage numbers are now colored red for critical shots (for the bow)
- Mace base weapon power reduced (400 -> 350)
- Mace scaling reduced (+4 -> +3)
- Fixed bug where Round Strike could be performed by pressing E->R->R (for hammers)
- Increased animation speed of Spiral Slash
- Reduced recovery time of Dash (Strider's Sword)
- Life Token changes
- Life Essence no longer affects healing amount
- Base healing of the default heal is now 500
- Base healing of Medium Heal is now 600
- Base healing of High Heal is now 700
- Regenerate now heals for a flat 1500 and does not scale with intelligence
- Energize now lasts a flat 30 seconds
- Energize duration no longer scales with intelligence
- Increased Shield intelligence scaling (+40 shield health/int. -> +80/int.)
- Shield now lasts a flat 25 seconds
- Re-enabled life bars
- Added weapon: Crimson Axe
- Replaced the Battle Axe's ultimate skill with Adrenaline (a new skill)

1.1.8
- Fixed certain dig spots not working
- Fixed bug where Claw Gloves would not be unlocked when loading a save
- Fixed Adrenaline bugs related to damage buildup
1.1.9
- Crimson Axe changes
- Decreased life consumption of Harvest (66% max. hp -> 33%)
- Increased duration of Harvest to 25 seconds
- Increased damage bonus of Battle Roar to 12%
- Strider's Sword's dash now has invulnerability frames
- Bow dodge roll now has invulnerability frames
- Magic Hammer weapon power reduced
- For Bow class weapons, it is now possible to move around while you have an arrow nocked
- Removed large rock in the final boss arena that would sometimes block the boss
- Fixed bug where certain items could not be looted
init
  Events
    Time - Elapsed game time is 0.01 seconds
  Conditions
  Actions
    Unit - Remove |r 0142 <gen> from the game
    Custom script: set udg_isSinglePlayer = ReloadGameCachesFromDisk()
    Set VariableSet _pregame = True
    Set VariableSet game_difficulty = 0
    Cinematic - Fade out over 0.00 seconds using texture White Mask and color (0%, 0%, 0%) with 0.00% transparency
    Custom script: call EnableUserUI(true)
    Custom script: call SetDayNightModels("Environment\\DNC\\DNCLordaeron\\DNCLordaeronTerrain\\DNCLordaeronTerrain.mdl" , "Environment\\DNC\\DNCLordaeron\\DNCLordaeronUnit\\DNCLordaeronUnit.mdl")
    Custom script: set udg_localplayer = GetLocalPlayer()
    Game - Set the time of day to 12
    Game - Enable pre-selection functionality (Disable pre-selection circles, life bars, and object info)
    Game - Set Lock resource trading to On
    Environment - Set fog to style Linear, z-start 500.00, z-end 5000.00, density 0.50 and color (100%, 52.00%, 20.00%)
    Environment - Set sky to Lordaeron Fall Sky
    Sound - Set Ambient Sounds to 100.00%
    Sound - Disable dawn and dusk sounds
    Sound - Stop music Immediately
    Sound - Clear the music list
    Visibility - Enable fog of war
    Visibility - Enable black mask
    Quest - Create a Required quest titled Controls with the description |cffFFFF00Sprint|r- Hotkey: F [while moving]|cffFFFF00Lockon|r- Left click a unit to activate Lockon.- Focuses camera on the targeted unit. Improves player vision and aiming of attacks.- To deactivate Lockon, press the Escape key.- Clicking a unit twice will select the unit and deactivate Lockon.|cffFFFF00Camera|r- Press and hold the arrow keys to look in a direction|cffFFFF00Weapon Controls|rWeapon movesets can be found in the equipment screen (F2). Movesets vary from weapon to weapon., using icon path ReplaceableTextures\CommandButtons\BTNTomeBrown.blp
    Quest - Create a Required quest titled Commands with the description |cffFFFF00-camreset|rResets the camera.|cffFFFF00-barsize x|rSets the size of stamina gauge to x. (Default value: 4)|cffFFFF00-suicide|rKills the player unit., using icon path ReplaceableTextures\CommandButtons\BTNTomeBrown.blp
    Quest - Create a Required quest titled Saving with the description Use the |cffFFFF00-save|r command to save.The code will be saved to the Warcraft III folder as a text file (Warcraft III\CustomMapData\Monter2).The save command can be used multiple times. After defeating a boss, using the save command is advised.A list of things that are saved:- Equipped items; weapons, shields, bow ammunition, etc.- Inventory items that are marked with asterisks, which includes all equippable items, most consumables, and Dark Fragments- Weapon skills and artifact upgrades- Artifacts; Life Token, Claw Gloves, etc.- Hero statistics; level, strength, etc.- Player progression; the player's spawn point will change according to bosses defeated. In multiplayer, players' spawn points will adjust according to the player who has progressed through the game the leastA list of things that are not saved:- Gold and Life Essence- Experience- Keys- Upgrade materials; skill scrolls, boss bounties, Promotion Stones, etc., using icon path ReplaceableTextures\CommandButtons\BTNTomeBrown.blp
    Quest - Create a Optional quest titled Solo Challenge with the description |cffFFFF00Goal:|rComplete the game without the assistance of other players.Use the |cffFFFF00-solo|r command to check eligibility.|cffFFFF00Conditions:|r- Defeat the final boss with only one player present in the game- Cannot play in singleplayer mode; must play on LAN or Battle.net- Spectators are permitted to watch- Loading codes is permitted, but using a code that has been used in a multiplayer session will disqualify you|cffFFFF00Reward:|rA special cape only obtainable through the completion of this challenge. It is possible to save the cape and use it in multiplayer sessions, so be sure to use your desired username when completing this challenge., using icon path ReplaceableTextures\CommandButtons\BTNCloak.blp
    Player Group - Pick every player in (All allies of Player 1 (Red).) and do (Actions)
      Loop - Actions
        Visibility - Create an initially Enabled visibility modifier for (Picked player) emitting Visibility across lavaview <gen>
        Visibility - Create an initially Enabled visibility modifier for (Picked player) emitting Fog of war across (Entire map)
        Visibility - Create an initially Enabled visibility modifier for (Picked player) emitting Black mask across (Entire map)
        Visibility - Destroy (Last created visibility modifier)
        Set VariableSet visibility[(Player number of (Picked player))] = (Last created visibility modifier)
        Camera - Set (Picked player)'s camera Far Z to 8000.00 over 0 seconds
        Set VariableSet tempLoc[0] = (Center of lavaview <gen>)
        Camera - Pan camera for (Picked player) to tempLoc[0] over 0 seconds
        Custom script: call RemoveLocation(udg_tempLoc[0])
        Custom script: set udg_tempLoc[0] = null
        Set VariableSet camViewpoint[(Player number of (Picked player))] = gg_cam_Camera_012
        Set VariableSet camViewpoint_b[(Player number of (Picked player))] = True
    Player Group - Pick every player in (All allies of Player 1 (Red).) and do (Actions)
      Loop - Actions
        Player - Make (Picked player) treat Player 10 (Light Blue) as an Ally with shared vision
        Player - Make (Picked player) treat Player 11 (Dark Green) as an Ally with shared vision
        Player - Make Player 9 (Gray) treat (Picked player) as an Ally with shared vision
        Player - Make Player 10 (Light Blue) treat (Picked player) as an Ally
        Player - Make Player 11 (Dark Green) treat (Picked player) as an Ally
    For each (Integer A) from 1 to 4, do (Actions)
      Loop - Actions
        Set VariableSet _pregameLoaded[(Integer A)] = True
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            ((Player((Integer A))) slot status) Equal to Is playing
            ((Player((Integer A))) controller) Not equal to Computer
          Then - Actions
            Set VariableSet _pregameLoaded[(Integer A)] = False
            Set VariableSet area_tutorial[(Integer A)] = True
            Player - Disable Life Token for (Player((Integer A)))
            Player - Disable Claw Gloves for (Player((Integer A)))
            Player - Disable Blade Dance for (Player((Integer A)))
            Player - Disable Impact for (Player((Integer A)))
            Player - Disable Evading Volley for (Player((Integer A)))
            Player - Disable Blood Wind for (Player((Integer A)))
            Player - Disable Magic Quake for (Player((Integer A)))
            Player - Disable Severance for (Player((Integer A)))
            Player - Disable Spiral Slash for (Player((Integer A)))
            Player - Disable Celestial Arrow for (Player((Integer A)))
            Player - Disable Adrenaline for (Player((Integer A)))
            Set VariableSet players = (players + 1)
            Set VariableSet mainLifeEssence[(Integer A)] = 8
            Player - Set (Player((Integer A))).Current lumber to mainLifeEssence[(Integer A)]
            Set VariableSet barsize[(Integer A)] = 4.00
            Set VariableSet tempLoc[1] = (Center of wump <gen>)
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              If - Conditions
                (Integer A) Equal to 1
              Then - Actions
                Set VariableSet tempLoc[0] = (Position of Crystal 0175 <gen>)
                Set VariableSet checkpoint[(Integer A)] = Crystal 0175 <gen>
              Else - Actions
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              If - Conditions
                (Integer A) Equal to 2
              Then - Actions
                Set VariableSet tempLoc[0] = (Position of Crystal 0177 <gen>)
                Set VariableSet checkpoint[(Integer A)] = Crystal 0177 <gen>
              Else - Actions
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              If - Conditions
                (Integer A) Equal to 3
              Then - Actions
                Set VariableSet tempLoc[0] = (Position of Crystal 0176 <gen>)
                Set VariableSet checkpoint[(Integer A)] = Crystal 0176 <gen>
              Else - Actions
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              If - Conditions
                (Integer A) Equal to 4
              Then - Actions
                Set VariableSet tempLoc[0] = (Position of Crystal 0178 <gen>)
                Set VariableSet checkpoint[(Integer A)] = Crystal 0178 <gen>
              Else - Actions
            Unit - Create 1.|r (Player) for (Player((Integer A))) at tempLoc[0] facing 0.00 degrees
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              If - Conditions
                Or - Any (Conditions) are true
                  Conditions
                    (String((Name of (Player((Integer A))))) as Lower case.) Equal to byetterchava
                    (String((Name of (Player((Integer A))))) as Lower case.) Equal to freecom
                    (String((Name of (Player((Integer A))))) as Lower case.) Equal to crap
                    (String((Name of (Player((Integer A))))) as Lower case.) Equal to myol33
                    (String((Name of (Player((Integer A))))) as Lower case.) Equal to acari
              Then - Actions
                Unit - Add Blink to (Last created unit)
              Else - Actions
            Selection - Select (Last created unit) for (Player((Integer A)))
            Unit - Change color of (Last created unit) to (Color of (Owner of (Last created unit)))
            Set VariableSet mainUnit[(Integer A)] = (Last created unit)
            Unit - Create 1.|r (Equipment) for (Player((Integer A))) at tempLoc[1] facing 0.00 degrees
            Set VariableSet mainEquipUnit[(Integer A)] = (Last created unit)
            Unit - Create 1.|r (Quiver) for (Player((Integer A))) at tempLoc[1] facing 0.00 degrees
            Set VariableSet mainQuiverUnit[(Integer A)] = (Last created unit)
            Unit - Create 1.|r (Backpack) for (Player((Integer A))) at tempLoc[1] facing 0.00 degrees
            Unit - Hide (Last created unit)
            Set VariableSet mainBackpackUnit[(Integer A)] = (Last created unit)
            Unit - Create 1.|r (Buffer) for (Player((Integer A))) at tempLoc[1] facing 0.00 degrees
            Set VariableSet mainUnitBuffer[(Integer A)] = (Last created unit)
            Unit - Create 1.|r (Upgrades) for (Player((Integer A))) at tempLoc[1] facing 0.00 degrees
            Unit - Hide (Last created unit)
            Set VariableSet mainUpgradesUnit[(Integer A)] = (Last created unit)
            Unit - Create 1.Bow: Pointer for (Player((Integer A))) at tempLoc[1] facing 270.00 degrees
            Animation - Change (Last created unit)'s vertex coloring to (0.00%, 0.00%, 0.00%) with 0% transparency
            Set VariableSet wpnBowPointerUnit[(Integer A)] = (Last created unit)
            Floating Text - Create floating text that reads (null) above (Last created unit) with Z offset 0, using font size 10, color (100%, 100%, 100%), and 0% transparency
            Floating Text - Hide (Last created floating text) for (All players)
            Set VariableSet wpnBowAmmoText[(Integer A)] = (Last created floating text)
            Floating Text - Create floating text that reads (null) above (Last created unit) with Z offset 0, using font size 10, color (100%, 100%, 100%), and 0% transparency
            Set VariableSet sprintFloatingText[(Integer A)] = (Last created floating text)
            Floating Text - Create floating text that reads (null) above (Last created unit) with Z offset 0, using font size 10, color (100%, 100%, 100%), and 0% transparency
            Set VariableSet wpnBowFocusText[(Integer A)] = (Last created floating text)
            Floating Text - Create floating text that reads (null) above (Last created unit) with Z offset 0, using font size 10, color (100%, 100%, 100%), and 0% transparency
            Set VariableSet heatFloatingText[(Integer A)] = (Last created floating text)
            Floating Text - Create floating text that reads (null) above (Last created unit) with Z offset 0, using font size 10, color (100%, 100%, 100%), and 0% transparency
            Set VariableSet lockonHp_text[(Integer A)] = (Last created floating text)
            Custom script: call RemoveLocation(udg_tempLoc[0])
            Custom script: call RemoveLocation(udg_tempLoc[1])
            Custom script: if GetLocalPlayer() == GetOwningPlayer( udg_mainUnitBuffer[GetForLoopIndexA()] ) then
            Environment - Set fog to style Linear, z-start 500.00, z-end 3500.00, density 0.50 and color (0.00%, 45.00%, 35.00%)
            Custom script: call SetDayNightModels("", "")
            Custom script: else
            Custom script: endif
          Else - Actions
        Custom script: call UnitSound(udg_mainUnit[GetForLoopIndexA()],"Abilities\\Weapons\\BristleBackMissile\\BristleBackMissileLaunch1.wav",0,4500)
        Custom script: call UnitSound(udg_mainUnit[GetForLoopIndexA()],"Sound\\Units\\Combat\\MetalMediumSliceMetal1.wav",0,4500)
        Custom script: call UnitSound(udg_mainUnit[GetForLoopIndexA()],"Sound\\Units\\Combat\\MetalMediumSliceStone1.wav",0,4500)
    For each (Integer A) from 10 to 11, do (Actions)
      Loop - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            Or - Any (Conditions) are true
              Conditions
                (String((Name of (Player((Integer A))))) as Lower case.) Equal to byetterchava
                (String((Name of (Player((Integer A))))) as Lower case.) Equal to freecom
                (String((Name of (Player((Integer A))))) as Lower case.) Equal to crap
                (String((Name of (Player((Integer A))))) as Lower case.) Equal to myol33
          Then - Actions
            Set VariableSet tempLoc[0] = (Position of Crystal 0004 <gen>)
            Unit - Create 1.Spawner for (Player((Integer A))) at tempLoc[0] facing Default building facing degrees
            Set VariableSet _spawner[(Integer A)] = (Last created unit)
            Custom script: call RemoveLocation(udg_tempLoc[0])
          Else - Actions
    Custom script: set bj_wantDestroyGroup = true
    Unit Group - Pick every unit in (Units in (Playable map area)) and do (Actions)
      Loop - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            (Unit-type of (Picked unit)) Not equal to |r (Hint)
            (Unit-type of (Picked unit)) Not equal to Crate
            (Unit-type of (Picked unit)) Not equal to Lever
            (Unit-type of (Picked unit)) Not equal to |r (Player)
          Then - Actions
            Set VariableSet tempLoc[0] = (Position of (Picked unit))
            Set VariableSet tempLoc[1] = (Center of wump <gen>)
            Custom script: call SetUnitX(GetEnumUnit(), GetLocationX(udg_tempLoc[1]))
            Custom script: call SetUnitY(GetEnumUnit(), GetLocationY(udg_tempLoc[1]))
            Custom script: call SetUnitX(GetEnumUnit(), GetLocationX(udg_tempLoc[0]))
            Custom script: call SetUnitY(GetEnumUnit(), GetLocationY(udg_tempLoc[0]))
            Custom script: call RemoveLocation(udg_tempLoc[0])
            Custom script: set udg_tempLoc[0] = null
            Custom script: call RemoveLocation(udg_tempLoc[1])
            Custom script: set udg_tempLoc[1] = null
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              If - Conditions
                (Picked unit) Equal to Golem 0010 <gen>
              Then - Actions
                Animation - Play (Picked unit)'s sleep (animationname) animation
                Unit - Pause (Picked unit)
                Unit - Make (Picked unit) Invulnerable
              Else - Actions
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              If - Conditions
                (Picked unit) Equal to Golem 0087 <gen>
              Then - Actions
                Animation - Play (Picked unit)'s sleep (animationname) animation
                Unit - Pause (Picked unit)
                Unit - Make (Picked unit) Invulnerable
              Else - Actions
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              If - Conditions
                (Unit-type of (Picked unit)) Equal to Brazier
              Then - Actions
                Animation - Play (Picked unit)'s death (animationname) animation
                Unit - Remove Detector (Glow) from (Picked unit)
              Else - Actions
          Else - Actions
    Set VariableSet PRJ_TICKCONSTANT = 3.15
    Set VariableSet ATK_TICKCONSTANT = 1.00
    Trigger - Add to prj <gen> the event (Every (0.01 x PRJ_TICKCONSTANT) seconds of game time)
    Trigger - Add to atk <gen> the event (Every (0.01 x ATK_TICKCONSTANT) seconds of game time)
    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      If - Conditions
        isSinglePlayer Equal to False
      Then - Actions
        Wait 4.00 seconds
        Game - Display to (All players) for 9999.00 seconds the text: |cffF07432Pre-game Screen|rUse the |cffFFFF00-load|r command to load a save code. You can only load during the pre-game screen.If you do not have a save code, use the |cffFFFF00-new|r command.
        Trigger - Turn on CodeGen_Load <gen>
      Else - Actions
        Wait 4.00 seconds
        Game - Display to (All players) for 9999.00 seconds the text: |cffF07432Pre-game Screen|rSave codes are disabled in single player. To use save codes in single player, play on LAN/Battle.net instead.Use the |cffFFFF00-new|r command to start a new character.
init vars
  Events
    Time - Elapsed game time is 0.01 seconds
  Conditions
  Actions
    Hashtable - Create a hashtable
    Set VariableSet atkExtendUnits[0] = (Last created hashtable)
    Hashtable - Create a hashtable
    Set VariableSet lootLimit[0] = (Last created hashtable)
    For each (Integer A) from 1 to 4, do (Actions)
      Loop - Actions
        Set VariableSet MultiboardStatsCol[(Integer A)] = 1
        Set VariableSet MultiboardStatsRow[(Integer A)] = 4
        Set VariableSet A = (Custom value of mainUnit[(Integer A)])
        Set VariableSet vertexcoloring_B[(Integer A)] = 100.00
        Set VariableSet vertexcoloring_G[(Integer A)] = 100.00
        Set VariableSet vertexcoloring_T[(Integer A)] = 0.00
        Set VariableSet vertexcoloring_R[(Integer A)] = 100.00
    Set VariableSet playercolorstring[1] = |cffFF0303
    Set VariableSet playercolorstring[2] = |cff0042FF
    Set VariableSet playercolorstring[3] = |cff1CE6B9
    Set VariableSet playercolorstring[4] = |cff540081
    Set VariableSet sprintColorString[0] = 0
    Set VariableSet sprintColorString[1] = 1
    Set VariableSet sprintColorString[2] = 2
    Set VariableSet sprintColorString[3] = 3
    Set VariableSet sprintColorString[4] = 4
    Set VariableSet sprintColorString[5] = 5
    Set VariableSet sprintColorString[6] = 6
    Set VariableSet sprintColorString[7] = 7
    Set VariableSet sprintColorString[8] = 8
    Set VariableSet sprintColorString[9] = 9
    Set VariableSet sprintColorString[10] = A
    Set VariableSet sprintColorString[11] = B
    Set VariableSet sprintColorString[12] = C
    Set VariableSet sprintColorString[13] = D
    Set VariableSet sprintColorString[14] = E
    Set VariableSet sprintColorString[15] = F
    For each (Integer A) from 0 to 14, do (Actions)
      Loop - Actions
        Set VariableSet sprintColorString[((Integer A) + 16)] = sprintColorString[(15 - (Integer A))]
    Set VariableSet equipAbilityWeapon[0] = Attachment: Sword
    Set VariableSet equipAbilityWeapon[1] = Attack (Sword)
    Set VariableSet equipAbilityWeapon[2] = Attachment: Flame Dagger
    Set VariableSet equipAbilityWeapon[3] = Attack (Hammer)
    Set VariableSet equipAbilityWeapon[4] = Attachment: Mace
    Set VariableSet equipAbilityWeapon[5] = Attachment: Bow
    Set VariableSet equipAbilityWeapon[6] = Attachment: Quiver
    Set VariableSet equipAbilityWeapon[7] = Attack (Bow)
    Set VariableSet equipAbilityWeapon[8] = Attachment: Arrow (Normal)
    Set VariableSet equipAbilityWeapon[9] = Switch Arrow
    Set VariableSet equipAbilityWeapon[10] = Heavy Attack (Sword)
    Set VariableSet equipAbilityWeapon[11] = Charge Attack
    Set VariableSet equipAbilityWeapon[12] = Attachment: Fire Longbow
    Set VariableSet equipAbilityWeapon[13] = Attachment: Spear
    Set VariableSet equipAbilityWeapon[14] = Attack (Spear)
    Set VariableSet equipAbilityWeapon[15] = Shaft Attack (Spear)
    Set VariableSet equipAbilityWeapon[16] = Attachment: Venomhasta
    Set VariableSet equipAbilityWeapon[17] = Attachment: Giant Skeleton's Axe
    Set VariableSet equipAbilityWeapon[18] = Attachment: Rapier
    Set VariableSet equipAbilityWeapon[19] = Attachment: Ravager Blade
    Set VariableSet equipAbilityWeapon[20] = Attachment: Ravager Blade (Back)
    Set VariableSet equipAbilityWeapon[21] = Attack (Greatsword)
    Set VariableSet equipAbilityWeapon[22] = Attack (Dual Blades)
    Set VariableSet equipAbilityWeapon[23] = Attachment: Twin Daggers
    Set VariableSet equipAbilityWeapon[24] = Attachment: Rifle
    Set VariableSet equipAbilityWeapon[25] = Attack (Cannon)
    Set VariableSet equipAbilityWeapon[26] = Melee Attack (Cannon)
    Set VariableSet equipAbilityWeapon[27] = Flame Dagger (Moveset)
    Set VariableSet equipAbilityWeapon[28] = Mace (Moveset)
    Set VariableSet equipAbilityWeapon[29] = Ravager Blade (Moveset)
    Set VariableSet equipAbilityWeapon[30] = Spear (Moveset)
    Set VariableSet equipAbilityWeapon[31] = Sword (Moveset)
    Set VariableSet equipAbilityWeapon[32] = Attachment: Elemental Swords
    Set VariableSet equipAbilityWeapon[33] = Attack (Fist)
    Set VariableSet equipAbilityWeapon[34] = Attachment: Fist
    Set VariableSet equipAbilityWeapon[35] = Fist (Moveset)
    Set VariableSet equipAbilityWeapon[36] = Heavy Attack (Dual Blades)
    Set VariableSet equipAbilityWeapon[37] = Moveset: Twin Daggers
    Set VariableSet equipAbilityWeapon[38] = Attachment: Grandfang
    Set VariableSet equipAbilityWeapon[39] = Attachment: Rune Sword
    Set VariableSet equipAbilityWeapon[40] = Attack (Rapier)
    Set VariableSet equipAbilityWeapon[41] = Attachment: Quarterstaff
    Set VariableSet equipAbilityWeapon[42] = Quarterstaff (Moveset)
    Set VariableSet equipAbilityWeapon[43] = Attachment: Curved Blade
    Set VariableSet equipAbilityWeapon[44] = Curved Blade (Moveset)
    Set VariableSet equipAbilityWeapon[45] = Intelligence Bonus (Quarterstaff)
    Set VariableSet equipAbilityWeapon[46] = Switch Ammunition
    Set VariableSet equipAbilityWeapon[47] = Attribute: Takes 2x Damage (Bow)
    Set VariableSet equipAbilityWeapon[48] = Wooden Bow (Moveset)
    Set VariableSet equipAbilityWeapon[49] = Attachment: Flat Sword
    Set VariableSet equipAbilityWeapon[50] = Dark Sword (Moveset)
    Set VariableSet equipAbilityWeapon[51] = Attachment: Dark Ribbon
    Set VariableSet equipAbilityWeapon[52] = Attachment: Magic Hammer
    Set VariableSet equipAbilityWeapon[53] = Magic Hammer (Moveset)
    Set VariableSet equipAbilityWeapon[54] = Battle Axe (Moveset)
    Set VariableSet equipAbilityWeapon[55] = Attachment: Battle Axe
    Set VariableSet equipAbilityWeapon[56] = Attack (Axe)
    Set VariableSet equipAbilityWeapon[57] = Bloodlust
    Set VariableSet equipAbilityWeapon[58] = Attachment: Strider's Sword
    Set VariableSet equipAbilityWeapon[59] = Strider's Sword (Moveset)
    Set VariableSet equipAbilityWeapon[60] = Attachment: Silver Bow
    Set VariableSet equipAbilityWeapon[61] = Silver Bow (Moveset)
    Set VariableSet equipAbilityWeapon[62] = Attachment: Crimson Axe
    Set VariableSet equipAbilityWeapon[63] = Crimson Axe (Moveset)
    Set VariableSet equipAbilityOffhand[0] = Attachment: Buckler
    Set VariableSet equipAbilityOffhand[1] = Guard
    Set VariableSet equipAbilityOffhand[2] = Attachment: Stone Shield
    Set VariableSet equipAbilityOffhand[3] = Attachment: Rebound Shield
    Set VariableSet equipAbilityOffhand[4] = Attachment: Barrier (Attachment)
    Set VariableSet equipAbilityOffhand[5] = Attachment: Barrier (Buff)
    Set VariableSet equipAbilityOffhand[6] = Attachment: Knight Shield
    Set VariableSet equipAbilityOffhand[7] = Attachment: Torch
    Set VariableSet equipAbilityOffhand[8] = Detector (Torch)
    Set VariableSet equipAbilityOffhand[9] = Throw Knife
    Set VariableSet equipAbilityOffhand[10] = Buckler (Moveset)
    Set VariableSet equipAbilityOffhand[11] = Stone Shield (Moveset)
    Set VariableSet equipAbilityOffhand[12] = Torch (Moveset)
    Set VariableSet equipAbilityOffhand[13] = Intelligence Bonus (Barrier)
    Set VariableSet equipAbilityBack[0] = Attachment: Cape
    Set VariableSet equipAbilityBack[1] = Attachment: Backpack
    Set VariableSet equipAbilityBack[2] = Attachment: Pimp Cape
    Set VariableSet equipAbilityBack[3] = Attachment: Tail
    Set VariableSet equipAbilityShield[0] = Attachment: Buckler
    Set VariableSet equipAbilityShield[1] = Attachment: Knight Shield
    Set VariableSet equipAbilityShield[2] = Attachment: Stone Shield
    Set VariableSet equipAbilityShield[3] = Attachment: Torch
    Set VariableSet equipAbilityCharm[0] = Life Regeneration (Regeneration Ring)
    Set VariableSet equipAbilityCharm[1] = Attachment: Perfection
    Set VariableSet equipAbilityCharm[2] = Attachment: Battle Emblem
    Set VariableSet equipAbilityCharm[3] = Attachment: Wisp Coin
    Set VariableSet equipAbilityCharm[4] = Attachment: Everlasting Ring
    Set VariableSet equipAbilityCharm[5] = Attachment: Pure Gem
    Set VariableSet equipAbilityHelmet[0] = Attachment: Golem Head
    Set VariableSet equipAttachBackShield[0] = Attachment: Buckler (Back)
    Set VariableSet equipAttachBackShield[1] = Attachment: Knight Shield (Back)
    Set VariableSet equipAttachBackShield[2] = Attachment: Torch (Back)
    Set VariableSet equipAttachBackShield[3] = Attachment: Stone Shield (Back)
    Set VariableSet wpnBowArrowAbility[0] = Attachment: Arrow (Normal)
    Set VariableSet wpnBowArrowAbility[1] = Attachment: Arrow (Heavy)
    Set VariableSet wpnBowArrowAbility[2] = Attachment: Arrow (Poison)
    Set VariableSet wpnBowArrowAbility[3] = Attachment: Arrow (Life)
    Set VariableSet wpnBowArrowUnitType[0] = Bow: Arrow (Normal)
    Set VariableSet wpnBowArrowUnitType[1] = Bow: Arrow (Heavy)
    Set VariableSet wpnBowArrowUnitType[2] = Bow: Arrow (Poison)
    Set VariableSet wpnBowArrowUnitType[3] = Bow: Arrow (Life)
    Set VariableSet item[0] = |cffB5B5B5Sword|r*
    Set VariableSet item[1] = |cffB5B5B5Buckler|r*
    Set VariableSet item[2] = |cffB5B5B5Mace|r*
    Set VariableSet item[3] = |cffB5B5B5Stone Shield|r*
    Set VariableSet item[4] = |cffFFCC00Flame Blade|r*
    Set VariableSet item[5] = |cffB5B5B5Wooden Bow|r*
    Set VariableSet item[6] = |cffB5B5B5Heavy Arrows|r*
    Set VariableSet item[7] = |cffFFCC00Rebound Shield|r
    Set VariableSet item[8] = |cffB5B5B5Healing Salve|r*
    Set VariableSet item[9] = |cffB5B5B5Poison Arrows|r*
    Set VariableSet item[10] = |cff42D5D5Cape|r*
    Set VariableSet item[11] = |cffB5B5B5Backpack|r
    Set VariableSet item[12] = |cffFFCC00Barrier|r*
    Set VariableSet item[13] = |cffB5B5B5Royal Cape|r
    Set VariableSet item[14] = |cffFFCC00Knight Shield|r
    Set VariableSet item[15] = |cffFFCC00Fire Longbow|r
    Set VariableSet item[16] = |cffB5B5B5Spear|r*
    Set VariableSet item[17] = |cffFFCC00Venomhasta|r
    Set VariableSet item[18] = |cffFFCC00Gem of True Seeing|r
    Set VariableSet item[19] = |cffB5B5B5Torch|r*
    Set VariableSet item[20] = |cffFFCC00Giant Skeleton's Axe|r
    Set VariableSet item[21] = |cffB5B5B5Throwing Knife|r
    Set VariableSet item[22] = |cffFFCC00Promotion Stone|r
    Set VariableSet item[23] = |cffB5B5B5Rapier|r
    Set VariableSet item[24] = |cff425bb2Ravager Blade|r
    Set VariableSet item[25] = |cffFFCC00Finisher: Critical Strike|r
    Set VariableSet item[26] = |cffb5b5b5Potion|r*
    Set VariableSet item[27] = |cffFFCC00Golem's Key|r
    Set VariableSet item[28] = |cffB5B5B5Twin Daggers|r
    Set VariableSet item[29] = |cffFFCC00Life Essence|r
    Set VariableSet item[30] = |cffb5b5b5Antivenom|r*
    Set VariableSet item[31] = |cffFFCC00Life Token|r
    Set VariableSet item[32] = |cffB5B5B5Rifle|r
    Set VariableSet item[33] = |cffFFCC00Explosive Barrel|r
    Set VariableSet item[34] = |cffFFCC00Nitropotion|r
    Set VariableSet item[35] = |cffB5B5B5Quarterstaff|r*
    Set VariableSet item[36] = |cffFFCC00Bounty (Magic Golem)|r
    Set VariableSet item[37] = |cffC24E00Claw Gloves|r
    Set VariableSet item[38] = |cffFFCC00Chest Key|r
    Set VariableSet item[39] = |cffFFCC00Key|r
    Set VariableSet item[40] = |cffFFCC00Canyon Key|r
    Set VariableSet item[41] = |cffB5B5B5Elemental Swords|r
    Set VariableSet item[42] = |cffFFCC00Regeneration Ring|r*
    Set VariableSet item[43] = |cff425BB2Perfection|r*
    Set VariableSet item[44] = |cffFFCC00Battle Emblem|r*
    Set VariableSet item[45] = |cffFFCC00Bounty (Guardian)|r
    Set VariableSet item[46] = |cffB5B5B5Tail|r*
    Set VariableSet item[47] = |cffB5B5B5Curved Blade|r*
    Set VariableSet item[48] = |cff425bb2Rune Sword|r
    Set VariableSet item[49] = |cffFFCC00Promotion Stone (Blue)|r
    Set VariableSet item[50] = |cffFFCC00Bounty (Dreadlord)|r
    Set VariableSet item[51] = |cffFFCC00Stamina Potion|r*
    Set VariableSet item[52] = |cffFFCC00Bounty (Living Statues)|r
    Set VariableSet item[53] = |cffFFCC00Warlock Stone|r*
    Set VariableSet item[54] = |cffFFCC00Wisp Coin|r*
    Set VariableSet item[55] = |cffFFCC00Bounty (Revenant)|r
    Set VariableSet item[56] = |cffFFCC00Skill: Parry|r
    Set VariableSet item[57] = |cffFFCC00Skill: Round Strike|r
    Set VariableSet item[58] = |cffFFCC00Skill: Spin Attack|r
    Set VariableSet item[59] = |cffFFCC00Skill: Quick Stab|r
    Set VariableSet item[60] = |cffFFCC00Skill: Retreating Thrust|r
    Set VariableSet item[61] = |cffFFCC00Skill: Boost|r
    Set VariableSet item[62] = |cffB5B5B5Golem Head|r*
    Set VariableSet item[63] = |cffffcc00Poison Essence|r*
    Set VariableSet item[64] = |cffFFCC00Life Token Upgrade: Medium Heal|r
    Set VariableSet item[65] = |cffFFCC00Life Token Upgrade: Energize|r
    Set VariableSet item[66] = |cffFFCC00Life Token Upgrade: Shield|r
    Set VariableSet item[67] = |cffFFCC00Life Token Upgrade: High Heal|r
    Set VariableSet item[68] = |cffFFCC00Everlasting Ring|r*
    Set VariableSet item[69] = |cffFFCC00Life Token Upgrade: Regenerate|r
    Set VariableSet item[70] = |cffFFCC00Dark Fragment|r*
    Set VariableSet item[71] = |cff833AC4Bounty (Guardian)|r
    Set VariableSet item[72] = |cff833AC4Bounty (Revenant)|r
    Set VariableSet item[73] = |cffFFCC00Tome of Retraining|r
    Set VariableSet item[74] = |cffFFCC00Life Token Upgrade: Revival|r
    Set VariableSet item[75] = |cffffcc00Curse Ward|r*
    Set VariableSet item[76] = |cffFFCC00Lower Crypt Key|r
    Set VariableSet item[77] = |cff42D5D5Pure Gem|r*
    Set VariableSet item[78] = |cffFFCC00Skill: Charge|r
    Set VariableSet item[79] = |cffFFCC00Bounty (Flame Guardian)|r
    Set VariableSet item[80] = |cffFFCC00Skill: Blade Dance|r
    Set VariableSet item[81] = |cffFFCC00Skill: Impact|r
    Set VariableSet item[82] = |cffFFCC00Skill: Evading Volley|r
    Set VariableSet item[83] = |cffFFCC00Life Token Upgrade: Divine Sword|r
    Set VariableSet item[84] = |cffFFCC00Life Arrows|r*
    Set VariableSet item[85] = |cffFFCC00Old Key|r
    Set VariableSet item[86] = |cffFFCC00Bounty (Ancient Viper)|r
    Set VariableSet item[87] = |cffFFCC00Skill: Enduring Spirit|r
    Set VariableSet item[88] = |cff833AC4Dark Sword|r*
    Set VariableSet item[89] = |cff833AC4Magic Hammer|r*
    Set VariableSet item[90] = |cffB5B5B5Battle Axe|r*
    Set VariableSet item[91] = |cffb5b5b5Fire Herb|r*
    Set VariableSet item[92] = |cffFFCC00Charred Ring|r
    Set VariableSet item[93] = |cffFFCC00Demon's Key|r
    Set VariableSet item[94] = |cffFFCC00Bounty (Flame Champion)|r
    Set VariableSet item[95] = |cffFFCC00Strider's Sword|r*
    Set VariableSet item[96] = |cffFFCC00Silver Bow|r*
    Set VariableSet item[97] = |cffFFCC00Crimson Axe|r*
    Set VariableSet heatBarColor[0] = |cff808080
    Set VariableSet heatBarColor[1] = |cff0026FF
    Set VariableSet heatBarColor[2] = |cffB200FF
    Set VariableSet heatBarColor[3] = |cffFF0000
    Set VariableSet game_dungeon1_fswitchTrigger[17] = footswitch3_enter <gen>
    Set VariableSet game_dungeon1_fswitchTrigger[18] = footswitch3a_enter <gen>
    Set VariableSet game_dungeon1_fswitchTrigger[19] = footswitch3b_enter <gen>
    Set VariableSet game_dungeon1_fswitchTrigger[20] = footswitch3c_enter <gen>
    Set VariableSet game_dungeon1_fswitchTrigger[21] = footswitch3_exit <gen>
    Set VariableSet game_dungeon1_fswitchTrigger[22] = footswitch3a_exit <gen>
    Set VariableSet game_dungeon1_fswitchTrigger[23] = footswitch3b_exit <gen>
    Set VariableSet game_dungeon1_fswitchTrigger[24] = footswitch3c_exit <gen>
    Set VariableSet game_tutorial_region[1] = wisp1 <gen>
    Set VariableSet game_tutorial_region[2] = wisp2 <gen>
    Set VariableSet game_tutorial_region[3] = wisp3 <gen>
    Set VariableSet game_tutorial_region[4] = wisp4 <gen>
    Set VariableSet skillBladeDance_Limit = 5000.00
    Set VariableSet skillImpact_Limit = 9000.00
    Set VariableSet skillEVolley_Limit = 2000.00
    Set VariableSet skillBloodWind_Limit = 9000.00
    Set VariableSet skillMagicQuake_Limit = 9000.00
    Set VariableSet skillSeverance_Limit = 9000.00
    Set VariableSet skillSpiralSlash_Limit = 2000.00
    Set VariableSet skillCelestialArrow_Limit = 3000.00
    Set VariableSet skillAdrenaline_Limit = 5000.00
    For each (Integer A) from 1 to 4, do (Actions)
      Loop - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            ((Player((Integer A))) slot status) Equal to Is playing
            ((Player((Integer A))) controller) Not equal to Computer
          Then - Actions
            Set VariableSet tempLoc[0] = (Center of game_tutorial_region[(Integer A)])
            Unit - Create 1.Wisp for Player 12 (Brown) at tempLoc[0] facing 0.00 degrees
            Custom script: call RemoveLocation(udg_tempLoc[0])
          Else - Actions
    Set VariableSet game_tutorial_region[1] = footswitch3 <gen>
    Set VariableSet game_tutorial_region[2] = footswitch3a <gen>
    Set VariableSet game_tutorial_region[3] = footswitch3b <gen>
    Set VariableSet game_tutorial_region[4] = footswitch3c <gen>
    Set VariableSet atkSequenceForce[(Custom value of Bandit Lord 0055 <gen>)] = 20
    Set VariableSet atkSequenceForce[(Custom value of Living Statue 0219 <gen>)] = 99
    Set VariableSet atkSequenceForce[(Custom value of Living Statue 0221 <gen>)] = 99
    Set VariableSet atkSequenceForce[(Custom value of Living Statue 0222 <gen>)] = 99
    Set VariableSet atkSequenceForce[(Custom value of Living Statue 0220 <gen>)] = 99
    -------- Spawn points --------
    Set VariableSet spawnCanyon[(Custom value of Satyr 0025 <gen>)] = spawn_canyon_1 <gen>
    Set VariableSet spawnCanyon[(Custom value of Satyr 0053 <gen>)] = spawn_canyon_4 <gen>
    Set VariableSet spawnCanyon[(Custom value of Satyr 0074 <gen>)] = spawn_canyon_10 <gen>
    Set VariableSet spawnCanyon[(Custom value of Satyr 0073 <gen>)] = spawn_canyon_11 <gen>
    Set VariableSet spawnCanyon[(Custom value of Satyr 0033 <gen>)] = spawn_canyon_13 <gen>
    Set VariableSet spawnCanyon[(Custom value of Satyr 0034 <gen>)] = spawn_canyon_14 <gen>
    Set VariableSet spawnCanyon[(Custom value of Satyr 0067 <gen>)] = spawn_canyon_26 <gen>
    Set VariableSet spawnCanyon[(Custom value of Wisp 0179 <gen>)] = spawn_sc_1 <gen>
    Set VariableSet spawnCanyon[(Custom value of Wisp 0180 <gen>)] = spawn_sc_2 <gen>
    Set VariableSet spawnCanyon[(Custom value of Wisp 0181 <gen>)] = spawn_sc_3 <gen>
    Set VariableSet spawnCanyon[(Custom value of Wisp 0223 <gen>)] = spawn_sc_8 <gen>
    Set VariableSet spawnCanyon[(Custom value of Wisp 0218 <gen>)] = spawn_sc_7 <gen>
    Set VariableSet spawnCanyon[(Custom value of Poison Elemental 0097 <gen>)] = spawn_crypt_1 <gen>
    Set VariableSet spawnCanyon[(Custom value of Poison Elemental 0107 <gen>)] = spawn_crypt_2 <gen>
    Set VariableSet spawnCanyon[(Custom value of Poison Elemental 0102 <gen>)] = spawn_crypt_3 <gen>
    Set VariableSet spawnCanyon[(Custom value of Poison Elemental 0098 <gen>)] = spawn_crypt_4 <gen>
    Set VariableSet spawnCanyon[(Custom value of Skeleton 0082 <gen>)] = spawn_crypt_5 <gen>
    Set VariableSet spawnCanyon[(Custom value of Skeleton 0118 <gen>)] = spawn_crypt_6 <gen>
    Set VariableSet spawnCanyon[(Custom value of Skeleton Archer 0119 <gen>)] = spawn_crypt_7 <gen>
    Set VariableSet tempUnitGroup[0] = (Units in (Playable map area) matching ((Level of Attribute: Mob for (Matching unit)) Equal to 1))
    Unit Group - Pick every unit in tempUnitGroup[0] and do (Actions)
      Loop - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            (spawnCanyon[(Custom value of (Picked unit))] contains (Picked unit)) Equal to True
          Then - Actions
            Set VariableSet spawnWillRespawn[(Custom value of (Picked unit))] = True
          Else - Actions
    Custom script: call DestroyGroup(udg_tempUnitGroup[0])
    -------- Weapons --------
    Dialog - Change the title of dialog[0] to Weapon
    Dialog - Create a dialog button for dialog[0] labelled Sword
    Set VariableSet dialogbutton[0] = (Last created dialog Button)
    Dialog - Create a dialog button for dialog[0] labelled Mace
    Set VariableSet dialogbutton[1] = (Last created dialog Button)
    Dialog - Create a dialog button for dialog[0] labelled Bow
    Set VariableSet dialogbutton[2] = (Last created dialog Button)
    Dialog - Create a dialog button for dialog[0] labelled Spear
    Set VariableSet dialogbutton[3] = (Last created dialog Button)
    Dialog - Create a dialog button for dialog[0] labelled Twin Daggers
    Set VariableSet dialogbutton[4] = (Last created dialog Button)
    Dialog - Create a dialog button for dialog[0] labelled |cff808080Cancel|r
    Set VariableSet dialogbutton[5] = (Last created dialog Button)
    -------- Upgrades --------
    Dialog - Change the title of dialog[1] to Confirm Upgrade
    Dialog - Create a dialog button for dialog[1] labelled |cff808080Cancel|r
    Set VariableSet dialogbutton[20] = (Last created dialog Button)
    Dialog - Create a dialog button for dialog[1] labelled |cffFFFF00Upgrade|r
    Set VariableSet dialogbutton[21] = (Last created dialog Button)
    -------- Bounty --------
    Dialog - Change the title of dialogBounty[0] to Bounty
    Dialog - Create a dialog button for dialogBounty[0] labelled |cff808080Cancel|r
    Set VariableSet dialogbuttonBounty[0] = (Last created dialog Button)
    Dialog - Create a dialog button for dialogBounty[0] labelled |cffFFFF00Gold|r
    Set VariableSet dialogbuttonBounty[1] = (Last created dialog Button)
    Dialog - Create a dialog button for dialogBounty[0] labelled |cffFFFF00Experience|r
    Set VariableSet dialogbuttonBounty[2] = (Last created dialog Button)
    Dialog - Create a dialog button for dialogBounty[0] labelled |cffFFFF00Life Essence|r
    Set VariableSet dialogbuttonBounty[3] = (Last created dialog Button)
    -------- Travel Dialog - Spark Caverns --------
    Dialog - Change the title of dialogTravel[0] to Travel
    Dialog - Create a dialog button for dialogTravel[0] labelled Spark Caverns
    Set VariableSet dialogbuttonTravel[0] = (Last created dialog Button)
    Dialog - Create a dialog button for dialogTravel[0] labelled Eastern Spark Caverns
    Set VariableSet dialogbuttonTravel[1] = (Last created dialog Button)
    Dialog - Create a dialog button for dialogTravel[0] labelled |cff808080Cancel|r
    Set VariableSet dialogbuttonTravel[2] = (Last created dialog Button)
    -------- Travel Dialog - Canyon --------
    Dialog - Change the title of dialogTravel[1] to Travel
    Dialog - Create a dialog button for dialogTravel[1] labelled Secluded Shrine
    Set VariableSet dialogbuttonTravel[10] = (Last created dialog Button)
    Dialog - Create a dialog button for dialogTravel[1] labelled Canyon Ruins
    Set VariableSet dialogbuttonTravel[11] = (Last created dialog Button)
    Dialog - Create a dialog button for dialogTravel[1] labelled Bandit Camp
    Set VariableSet dialogbuttonTravel[12] = (Last created dialog Button)
    Dialog - Create a dialog button for dialogTravel[1] labelled Flame Guardian
    Set VariableSet dialogbuttonTravel[13] = (Last created dialog Button)
    Dialog - Create a dialog button for dialogTravel[1] labelled |cff808080Cancel|r
    Set VariableSet dialogbuttonTravel[14] = (Last created dialog Button)
    -------- Travel Dialog - Crypt --------
    Dialog - Change the title of dialogTravelCrypt to Travel
    Dialog - Create a dialog button for dialogTravelCrypt labelled Lower Crypt
    Set VariableSet dialogbuttonTravelCrypt[0] = (Last created dialog Button)
    Dialog - Create a dialog button for dialogTravelCrypt labelled Hidden Chamber
    Set VariableSet dialogbuttonTravelCrypt[1] = (Last created dialog Button)
    Dialog - Create a dialog button for dialogTravelCrypt labelled Chasm
    Set VariableSet dialogbuttonTravelCrypt[2] = (Last created dialog Button)
    Dialog - Create a dialog button for dialogTravelCrypt labelled |cff808080Cancel|r
    Set VariableSet dialogbuttonTravelCrypt[3] = (Last created dialog Button)
    -------- Easy Mode dialog --------
    Dialog - Change the title of _ezmode_dialog[0] to Enable |cff4CFF00Easy Mode|r?
    Dialog - Create a dialog button for _ezmode_dialog[0] labelled No
    Set VariableSet _ezmode_dbutton[0] = (Last created dialog Button)
    Dialog - Create a dialog button for _ezmode_dialog[0] labelled Yes
    Set VariableSet _ezmode_dbutton[1] = (Last created dialog Button)
    For each (Integer A) from 1 to 4, do (Actions)
      Loop - Actions
        Dialog - Show _ezmode_dialog[0] for (Player((Integer A)))
init objects
  Events
    Time - Elapsed game time is 0.02 seconds
  Conditions
  Actions
    Animation - Play Soldier 0058 <gen>'s stand upgrade first (animationname) animation
    Animation - Play Scorpion 0076 <gen>'s stand alternate (animationname) animation
    Animation - Change Soldier 0058 <gen>'s vertex coloring to (10.00%, 10.00%, 10.00%) with 0% transparency
    Unit - Change color of Beetle 0079 <gen> to Yellow
    Unit - Remove Detector (Doodad Torch) from
    Unit - Remove Attachment: Glow from
    Unit - Remove Detector (Glow) from
    Unit - Remove Detector (Glow) from
    Unit - Remove Detector (Glow) from
    Unit - Remove Detector (Glow) from
    Unit - Remove Life Regeneration Aura from Crystal 0062 <gen>
    Unit - Remove Select Unit from Crystal 0062 <gen>
    Unit - Hide |r 0193 <gen>
    Unit - Hide |r 0194 <gen>
    Unit - Hide |r 0196 <gen>
    Unit - Hide |r 0195 <gen>
    Unit - Hide |r 0100 <gen>
    Unit - Hide |r 0045 <gen>
    Unit - Hide |r 0046 <gen>
    Unit - Hide |r 0044 <gen>
    Unit - Hide Crystal 0176 <gen>
    Unit - Hide Crystal 0175 <gen>
    Unit - Hide Crystal 0178 <gen>
    Unit - Hide Crystal 0177 <gen>
    Unit - Hide Crystal 0062 <gen>
    Unit - Pause Scorpion 0076 <gen>
    Unit - Pause Living Statue 0219 <gen>
    Unit - Pause Living Statue 0221 <gen>
    Unit - Pause Living Statue 0220 <gen>
    Unit - Pause Living Statue 0222 <gen>
    Unit - Make Living Statue 0219 <gen> Invulnerable
    Unit - Make Living Statue 0221 <gen> Invulnerable
    Unit - Make Living Statue 0222 <gen> Invulnerable
    Unit - Make Living Statue 0220 <gen> Invulnerable
    Neutral Building - Add |cffFFCC00Explosive Barrel|r to Bandit 0071 <gen> with 1 in stock and a max stock of 1
    Destructible - Open
    Destructible - Open Divine Shield 1330 <gen>
    Destructible - Open Immolation 1003 <gen>
    Destructible - Open Immolation 1348 <gen>
    Destructible - Open Immolation 4592 <gen>
    Destructible - Open Divine Shield 1874 <gen>
    Destructible - Open Divine Shield 1966 <gen>
    Destructible - Kill Pathing Blocker (Ground) (Large) 1337 <gen>
    Destructible - Kill Pathing Blocker (Ground) (Large) 1337 <gen>
    Destructible - Pick every destructible in door8 <gen> and do (Actions)
      Loop - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            (Destructible-type of (Picked destructible)) Equal to YTpc (destructablecode)
          Then - Actions
            Destructible - Kill (Picked destructible)
          Else - Actions
    Destructible - Pick every destructible in door14 <gen> and do (Actions)
      Loop - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            (Destructible-type of (Picked destructible)) Equal to YTpc (destructablecode)
          Then - Actions
            Destructible - Kill (Picked destructible)
          Else - Actions
    Destructible - Pick every destructible in door15 <gen> and do (Actions)
      Loop - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            (Destructible-type of (Picked destructible)) Equal to YTpc (destructablecode)
          Then - Actions
            Destructible - Kill (Picked destructible)
          Else - Actions
    Destructible - Pick every destructible in door19 <gen> and do (Actions)
      Loop - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            (Destructible-type of (Picked destructible)) Equal to YTpc (destructablecode)
          Then - Actions
            Destructible - Kill (Picked destructible)
          Else - Actions
    Destructible - Pick every destructible in door22 <gen> and do (Actions)
      Loop - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            (Destructible-type of (Picked destructible)) Equal to YTpc (destructablecode)
          Then - Actions
            Destructible - Kill (Picked destructible)
          Else - Actions
    Destructible - Pick every destructible in door24 <gen> and do (Actions)
      Loop - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            Or - Any (Conditions) are true
              Conditions
                (Destructible-type of (Picked destructible)) Equal to YTpc (destructablecode)
                (Destructible-type of (Picked destructible)) Equal to B002 (destructablecode)
          Then - Actions
            Destructible - Kill (Picked destructible)
          Else - Actions
    Destructible - Pick every destructible in Region_195 <gen> and do (Actions)
      Loop - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            (Destructible-type of (Picked destructible)) Equal to YTpc (destructablecode)
          Then - Actions
            Destructible - Kill (Picked destructible)
          Else - Actions
    -------- dungeon1 --------
    For each (Integer A) from 1 to 4, do (Actions)
      Loop - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            ((Player((Integer A))) slot status) Equal to Is playing
            ((Player((Integer A))) controller) Not equal to Computer
          Then - Actions
          Else - Actions
            Trigger - Turn off game_dungeon1_fswitchTrigger[(Integer A)]
            Trigger - Turn off game_dungeon1_fswitchTrigger[((Integer A) + 8)]
            Trigger - Turn off game_dungeon1_fswitchTrigger[((Integer A) + 16)]
            Destructible - Pick every destructible in game_dungeon1_fswitchRegion[(Integer A)] and do (Actions)
              Loop - Actions
                Destructible - Kill (Picked destructible)
            Destructible - Pick every destructible in game_dungeon1_fswitchRegion[((Integer A) + 4)] and do (Actions)
              Loop - Actions
                Destructible - Kill (Picked destructible)
            Destructible - Pick every destructible in game_tutorial_region[(Integer A)] and do (Actions)
              Loop - Actions
                Destructible - Kill (Picked destructible)
    Wait 1.00 seconds
    For each (Integer A) from 1 to 4, do (Actions)
      Loop - Actions
        Set VariableSet tempLoc[0] = (Position of Crystal 0216 <gen>)
        Set VariableSet tempLoc[1] = (tempLoc[0] offset by 900.00 towards (45.00 + (90.00 x (Real((Integer A))))) degrees.)
        Unit - Create 1.Living Statue for Player 12 (Brown) at tempLoc[1] facing (Angle from tempLoc[1] to tempLoc[0]) degrees
        Unit - Pause (Last created unit)
        Custom script: call RemoveLocation(udg_tempLoc[0])
        Custom script: call RemoveLocation(udg_tempLoc[1])
init multiboard
  Events
    Time - Elapsed game time is 0.02 seconds
  Conditions
  Actions
    For each (Integer B) from 1 to 10, do (Actions)
      Loop - Actions
        Set VariableSet A = (Custom value of mainUnit[(Integer B)])
        Multiboard - Create a multiboard with 3 columns and 15 rows, titled Stats.
        Set VariableSet multiboardStats[(Integer B)] = (Last created multiboard)
        Multiboard - Hide (Last created multiboard)
        For each (Integer A) from 1 to 15, do (Actions)
          Loop - Actions
            Multiboard - Set the display style for (Last created multiboard) item in column 0, row (Integer A) to Show text and Hide icons
            Multiboard - Set the width for (Last created multiboard) item in column 0, row (Integer A) to 7.50% of the total screen width
            Multiboard - Set the color for (Last created multiboard) item in column 0, row (Integer A) to (81.00%, 74.00%, 74.00%) with 0% transparency
        Multiboard - Maximize (Last created multiboard)
        Multiboard - Set the text for (Last created multiboard) item in column 1, row 1 to (playercolorstring[(Integer B)] + (((Name of (Player((Integer B)))) + ( + (Lv. + (String((Hero level of mainUnit[(Integer B)])))))) + |r))
        Multiboard - Set the text for (Last created multiboard) item in column 1, row 2 to (null)
        Multiboard - Set the text for (Last created multiboard) item in column 1, row 3 to |cffffcc00General
        Multiboard - Set the text for (Last created multiboard) item in column 1, row 4 to (|cffFF6884 + (((String((Integer((Life of mainUnit[(Integer B)]))))) + (|cffCEBEBE / |r|cffFF6884 + (String((Integer((Max life of mainUnit[(Integer B)]))))))) + |r))
        Multiboard - Set the text for (Last created multiboard) item in column 1, row 5 to (|cff90FF60 + (((String((Integer((Mana of mainUnit[(Integer B)]))))) + (|cffCEBEBE / |r|cff90FF60 + (String((Integer((Max mana of mainUnit[(Player number of (Owner of (Triggering unit)))]))))))) + |r))
        Multiboard - Set the text for (Last created multiboard) item in column 1, row 6 to (WPN: + (String(attrbWpnPwr[A])))
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            attrbElmType[A] Equal to 0
          Then - Actions
            Multiboard - Set the text for (Last created multiboard) item in column 1, row 7 to (ELM: + (String(attrbElmPower[A])))
          Else - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            attrbElmType[A] Equal to 1
          Then - Actions
            Multiboard - Set the text for (Last created multiboard) item in column 1, row 7 to (ELM: + ((String(attrbElmPower[A])) + ( + |cffFF5D42Fire|r)))
          Else - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            attrbElmType[A] Equal to 2
          Then - Actions
            Multiboard - Set the text for (Last created multiboard) item in column 1, row 7 to (ELM: + ((String(attrbElmPower[A])) + ( + |cff00A3FFIce|r)))
          Else - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            attrbElmType[A] Equal to 3
          Then - Actions
            Multiboard - Set the text for (Last created multiboard) item in column 1, row 7 to (ELM: + ((String(attrbElmPower[A])) + ( + |cff44BF0CPoison|r)))
          Else - Actions
        Multiboard - Set the text for (Last created multiboard) item in column 1, row 8 to (WT: + (String(attrbWeight[A])))
        Multiboard - Set the text for (Last created multiboard) item in column 1, row 9 to (STN: + (String((Integer((attrbStunFactor[A] x 10.00))))))
        Multiboard - Set the text for (Last created multiboard) item in column 1, row 10 to (null)
        Multiboard - Set the text for (Last created multiboard) item in column 2, row 3 to |cffffcc00Defenses
        Multiboard - Set the text for (Last created multiboard) item in column 2, row 4 to (N.RES: + (String((Integer((100.00 x (1 - attrbResPhysical[A])))))))
        Multiboard - Set the text for (Last created multiboard) item in column 2, row 5 to (F.RES: + (String((Integer((100.00 x (1 - attrbResFire[A])))))))
        Multiboard - Set the text for (Last created multiboard) item in column 2, row 6 to (I.RES: + (String((Integer((100.00 x (1 - attrbResIce[A])))))))
        Multiboard - Set the text for (Last created multiboard) item in column 2, row 7 to (P.RES: + (String((Integer((100.00 x (1 - attrbResPoison[A])))))))
        Multiboard - Set the text for (Last created multiboard) item in column 2, row 8 to (S.END: + (String((Integer(attrbStunHealthMax[A])))))
        Multiboard - Set the text for (Last created multiboard) item in column 2, row 9 to (P.END: + (String((Integer(attrbPoisonHealthMax[A])))))
        Multiboard - Set the text for (Last created multiboard) item in column 3, row 3 to |cffffcc00Stats
        Multiboard - Set the text for (Last created multiboard) item in column 3, row 4 to (STR: + (String(mainStatStr[A])))
        Multiboard - Set the text for (Last created multiboard) item in column 3, row 5 to (VIT: + (String(mainStatVit[A])))
        Multiboard - Set the text for (Last created multiboard) item in column 3, row 6 to (AGI: + (String(mainStatAgi[A])))
        Multiboard - Set the text for (Last created multiboard) item in column 3, row 7 to (STM: + (String(mainStatStm[A])))
        Multiboard - Set the text for (Last created multiboard) item in column 1, row 12 to (null)
        Multiboard - Set the text for (Last created multiboard) item in column 1, row 13 to (null)
        Multiboard - Set the text for (Last created multiboard) item in column 1, row 14 to (null)
        Multiboard - Set the text for (Last created multiboard) item in column 1, row 15 to (null)
        Multiboard - Set the display style for (Last created multiboard) item in column 1, row 1 to Show text and Show icons
        Multiboard - Set the display style for (Last created multiboard) item in column 1, row 3 to Show text and Show icons
        Multiboard - Set the display style for (Last created multiboard) item in column 2, row 3 to Show text and Show icons
        Multiboard - Set the display style for (Last created multiboard) item in column 3, row 3 to Show text and Show icons
        Multiboard - Set the icon for (Last created multiboard) item in column 1, row 1 to ReplaceableTextures\CommandButtons\BTNFootman.blp
        Multiboard - Set the icon for (Last created multiboard) item in column 1, row 12 to ReplaceableTextures\CommandButtons\BTNSkillz.blp
        Multiboard - Set the icon for (Last created multiboard) item in column 1, row 3 to ReplaceableTextures\CommandButtons\BTNSteelMelee.blp
        Multiboard - Set the icon for (Last created multiboard) item in column 2, row 3 to ReplaceableTextures\CommandButtons\BTNHumanArmorUpOne.blp
        Multiboard - Set the icon for (Last created multiboard) item in column 3, row 3 to ReplaceableTextures\CommandButtons\BTNStatUp.blp
Sound\\Ambient\\DoodadEffects\\Switch.wav
war3mapImported\\jumpslash_whoosh.wav

Abilities\\Spells\\Orc\\LightningBolt\\LightningBolt.wav
Abilities\\Spells\\Other\\HealingSpray\\HealingSprayBirth1.wav
Abilities\\Weapons\\AncestralGuardianMissile\\AncestralGuardianMissileLaunch.wav
Abilities\\Weapons\\FireBallMissile\\FireBallMissileLaunch2.wav
Units\\Human\\Knight\\HorseLoop2.wav
Units\\Orc\\HeroTaurenChieftain\\WarStompBirth1.wav
Sound\\Ambient\\DoodadEffects\\Switch.wav
Sound\\Units\\Combat\\MetalLightSliceMetal2.wav
Sound\\Units\\Combat\\MetalLightSliceMetal3.wav
Sound\\Units\\Combat\\MetalHeavyBashStone1.wav
Sound\\Units\\Combat\\MetalHeavyChopStone1.wav
Sound\\Units\\Combat\\RockHeavyBashMetal2.wav
Sound\\Units\\Combat\\RockHeavyBashMetal3.wav
Sound\\Units\\Combat\\RockHeavyBashStone3.wav
Sound\\Units\\Combat\\WoodLightBashMetal2.wav
Abilities\\Weapons\\BristleBackMissile\\BristleBackMissileLaunch3.wav
preloading
  Events
    Time - Elapsed game time is 1.00 seconds
  Conditions
  Actions
    For each (Integer A) from 1 to 4, do (Actions)
      Loop - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            (Integer A) Equal to 1
          Then - Actions
            Set VariableSet tempUnit[0] = Crystal 0175 <gen>
          Else - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            (Integer A) Equal to 2
          Then - Actions
            Set VariableSet tempUnit[0] = Crystal 0177 <gen>
          Else - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            (Integer A) Equal to 3
          Then - Actions
            Set VariableSet tempUnit[0] = Crystal 0176 <gen>
          Else - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            (Integer A) Equal to 4
          Then - Actions
            Set VariableSet tempUnit[0] = Crystal 0178 <gen>
          Else - Actions
        Custom script: call UnitSound(udg_tempUnit[0],"Abilities\\Spells\\Orc\\LightningBolt\\LightningBolt.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"Abilities\\Spells\\Other\\HealingSpray\\HealingSprayBirth1.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"Abilities\\Spells\\Undead\\DarkRitual\\DarkRitualTarget1.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"Abilities\\Weapons\\AncestralGuardianMissile\\AncestralGuardianMissileLaunch.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"Abilities\\Weapons\\FireBallMissile\\FireBallMissileLaunch2.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"Abilities\\Weapons\\BristleBackMissile\\BristleBackMissileLaunch3.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"Units\\Human\\Knight\\HorseLoop2.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"Units\\Orc\\HeroTaurenChieftain\\WarStompBirth1.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"Sound\\Ambient\\DoodadEffects\\Switch.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"Sound\\Units\\Combat\\MetalLightSliceMetal2.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"Sound\\Units\\Combat\\MetalLightSliceMetal3.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"Sound\\Units\\Combat\\MetalHeavyBashStone1.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"Sound\\Units\\Combat\\MetalHeavyChopStone1.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"Sound\\Units\\Combat\\RockHeavyBashMetal2.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"Sound\\Units\\Combat\\RockHeavyBashMetal3.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"Sound\\Units\\Combat\\RockHeavyBashStone3.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"Sound\\Units\\Combat\\WoodLightBashMetal2.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"war3mapImported\\armorstep2.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"war3mapImported\\chest-open4.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"war3mapImported\\GunBlast.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"war3mapImported\\Heavy swing.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"war3mapImported\\jumpslash_whoosh.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"war3mapImported\\mechanical1_L.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"war3mapImported\\staffswingL2.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"war3mapImported\\SwingLight.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"war3mapImported\\sword_swipe.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"war3mapImported\\lunge_lance3.wav",0,4500)
        Custom script: call UnitSound(udg_tempUnit[0],"war3mapImported\\Woodstrike.wav",0,4500)
    Set VariableSet tempUnit[1] = |r 0142 <gen>
    Unit - Add Attachment: Backpack to tempUnit[1]
    Unit - Add Attachment: Bow to tempUnit[1]
    Unit - Add Attachment: Buckler to tempUnit[1]
    Unit - Add Attachment: Buckler (Back) to tempUnit[1]
    Unit - Add Attachment: Cape to tempUnit[1]
    Unit - Add Attachment: Claws to tempUnit[1]
    Unit - Add Attachment: Critical Strike to tempUnit[1]
    Unit - Add Attachment: Dark Fireball to tempUnit[1]
    Unit - Add Attachment: Fire Longbow to tempUnit[1]
    Unit - Add Attachment: Flame Dagger to tempUnit[1]
    Unit - Add Attachment: Giant Skeleton's Axe to tempUnit[1]
    Unit - Add Attachment: Glow to tempUnit[1]
    Unit - Add Attachment: Reserve Charge to tempUnit[1]
    Unit - Add Attachment: Knight Shield to tempUnit[1]
    Unit - Add Attachment: Knight Shield (Back) to tempUnit[1]
    Unit - Add Attachment: Mace to tempUnit[1]
    Unit - Add Attachment: Rapier to tempUnit[1]
    Unit - Add Attachment: Pimp Cape to tempUnit[1]
    Unit - Add Attachment: Perfection to tempUnit[1]
    Unit - Add Attachment: Quarterstaff to tempUnit[1]
    Unit - Add Attachment: Quiver to tempUnit[1]
    Unit - Add Attachment: Rapier to tempUnit[1]
    Unit - Add Attachment: Ravager Blade to tempUnit[1]
    Unit - Add Attachment: Ravager Blade (Back) to tempUnit[1]
    Unit - Add Attachment: Rebound Shield to tempUnit[1]
    Unit - Add Attachment: Rifle to tempUnit[1]
    Unit - Add Attachment: Spear to tempUnit[1]
    Unit - Add Attachment: Stone Shield to tempUnit[1]
    Unit - Add Attachment: Stone Shield (Back) to tempUnit[1]
    Unit - Add Attachment: Sweep Effect to tempUnit[1]
    Unit - Add Attachment: Sword to tempUnit[1]
    Unit - Add Attachment: Tail to tempUnit[1]
    Unit - Add Attachment: Torch to tempUnit[1]
    Unit - Add Attachment: Torch (Back) to tempUnit[1]
    Unit - Add Attachment: Twin Daggers to tempUnit[1]
    Unit - Add Attachment: Venomhasta to tempUnit[1]
    Unit - Add Life Regeneration (Regeneration Ring) to tempUnit[1]
    Unit - Remove tempUnit[1] from the game
atk
  Events
  Conditions
  Actions
    For each (Integer atkLoop) from 1 to atkIndexSize, do (Actions)
      Loop - Actions
        Set VariableSet atkTempInt = atkIndex[atkLoop]
        Unit - Remove Divine Shield buff from atkUnit[atkTempInt]
        Unit - Remove Berserk buff from atkUnit[atkTempInt]
        Unit - Remove Divine Shield buff from atkUnit[atkTempInt]
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            (atkUnit[atkTempInt] is A Hero) Equal to True
            (Level of Status: Second Phase (Boss) for atkUnit[atkTempInt]) Equal to 1
            (Level of Attachment: Life Token Aura (Purple) for atkUnit[atkTempInt]) Equal to 0
            atkStatSequence[atkTempInt] Not equal to 78
          Then - Actions
            Animation - Change atkUnit[atkTempInt]'s vertex coloring to (16.00%, 0.00%, 37.00%) with (60.00 + (Random real number between 0 and 1))% transparency
          Else - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            atkFramesPause[atkTempInt] Greater than 0.00
          Then - Actions
            Set VariableSet atkFramesPause[atkTempInt] = (atkFramesPause[atkTempInt] - (ATK_TICKCONSTANT x 0.01))
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              If - Conditions
                atkFramesPause[atkTempInt] Less than or equal to 0.00
              Then - Actions
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  If - Conditions
                    (atkUnit[atkTempInt] is A Hero) Equal to True
                  Then - Actions
                    Selection - Select atkUnit[atkTempInt] for (Owner of atkUnit[atkTempInt])
                    Unit - Pause mainUnitBuffer[(Player number of (Owner of atkUnit[atkTempInt]))]
                  Else - Actions
                Unit - Unpause atkUnit[atkTempInt]
                Unit - Remove Status: Stagger from atkUnit[atkTempInt]
                Unit - Remove Status: Absolute Stun from atkUnit[atkTempInt]
                Unit - Remove Immolation buff from atkUnit[atkTempInt]
                Unit - Make atkUnit[atkTempInt] Vulnerable
              Else - Actions
          Else - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            atkFramesActive[atkTempInt] Greater than 0.00
          Then - Actions
            Set VariableSet atkFramesActive[atkTempInt] = (atkFramesActive[atkTempInt] - (ATK_TICKCONSTANT x 0.01))
          Else - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            atkFramesFollowup[atkTempInt] Greater than 0.00
          Then - Actions
            Unit - Add Status: Followup to atkUnit[atkTempInt]
            Player - Disable artifactAbility[(Player number of (Owner of atkUnit[atkTempInt]))] for (Owner of atkUnit[atkTempInt])
            Player - Disable Switch Ability for (Owner of atkUnit[atkTempInt])
            Set VariableSet atkFramesFollowup[atkTempInt] = (atkFramesFollowup[atkTempInt] - (ATK_TICKCONSTANT x 0.01))
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              If - Conditions
                atkFramesFollowup[atkTempInt] Less than or equal to 0.00
              Then - Actions
                Player - Enable artifactAbility[(Player number of (Owner of atkUnit[atkTempInt]))] for (Owner of atkUnit[atkTempInt])
                Player - Enable Switch Ability for (Owner of atkUnit[atkTempInt])
                Set VariableSet atkStatSequence[atkTempInt] = 0
                Set VariableSet atkStatSequenceOffhand[atkTempInt] = 0
                Set VariableSet atkFramesFollowup[atkTempInt] = 0.00
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  If - Conditions
                    (atkUnit[atkTempInt] has buff Immolation) Equal to False
                  Then - Actions
                    Unit - Remove Mana Degeneration from atkUnit[atkTempInt]
                    Unit - Remove Status: Followup from atkUnit[atkTempInt]
                  Else - Actions
              Else - Actions
          Else - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            atkFramesRecovery[atkTempInt] Greater than 0.00
          Then - Actions
            Set VariableSet atkFramesRecovery[atkTempInt] = (atkFramesRecovery[atkTempInt] - (ATK_TICKCONSTANT x 0.01))
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              If - Conditions
                atkFramesRecovery[atkTempInt] Less than or equal to 0.00
              Then - Actions
                Set VariableSet atkFramesRecovery[atkTempInt] = 0.00
                Animation - Change atkUnit[atkTempInt]'s animation speed to 100.00% of its original speed
              Else - Actions
          Else - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            atkFramesMulti[atkTempInt] Greater than 0.00
          Then - Actions
            Set VariableSet atkFramesMulti[atkTempInt] = (atkFramesMulti[atkTempInt] - (ATK_TICKCONSTANT x 0.01))
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              If - Conditions
                atkFramesMulti[atkTempInt] Less than or equal to 0.00
              Then - Actions
                Set VariableSet atkMultiTempUnit = atkUnit[atkTempInt]
                Trigger - Run atkMultiTrigger[atkTempInt] (checking conditions)
                Custom script: set udg_atkMultiTempUnit = null
              Else - Actions
          Else - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            atkFramesParry[atkTempInt] Greater than 0.00
          Then - Actions
            Set VariableSet atkFramesParry[atkTempInt] = (atkFramesParry[atkTempInt] - (ATK_TICKCONSTANT x 0.01))
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              If - Conditions
                atkFramesParry[atkTempInt] Less than or equal to 0.00
              Then - Actions
                Unit - Remove Status: Parry from atkUnit[atkTempInt]
                Unit - Remove Status: Instant Block from atkUnit[atkTempInt]
              Else - Actions
          Else - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            atkFramesFollowupSpecial[atkTempInt] Greater than 0.00
          Then - Actions
            Set VariableSet atkFramesFollowupSpecial[atkTempInt] = (atkFramesFollowupSpecial[atkTempInt] - (ATK_TICKCONSTANT x 0.01))
          Else - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            atkFramesExtend[atkTempInt] Greater than 0.00
          Then - Actions
            Set VariableSet atkFramesExtend[atkTempInt] = (atkFramesExtend[atkTempInt] - (ATK_TICKCONSTANT x 0.01))
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              If - Conditions
                atkFramesExtend[atkTempInt] Less than or equal to 0.00
              Then - Actions
                Set VariableSet atkExtendCheck[atkTempInt] = False
              Else - Actions
          Else - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            atkFramesActive[atkTempInt] Less than or equal to 0.00
            atkFramesActive[atkTempInt] Not equal to -999.00
          Then - Actions
            Custom script: call UnitSound(udg_atkUnit[udg_atkTempInt], udg_atkSwingSoundEffect[udg_atkTempInt] ,125,4500)
            Set VariableSet atkFramesActive[atkTempInt] = -999.00
            Set VariableSet atkTempLoc[0] = (Position of atkUnit[atkTempInt])
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              If - Conditions
                atkStatRadius[atkTempInt] Greater than 0.00
              Then - Actions
                Set VariableSet tempBoolean[1] = False
                For each (Integer atkLoopB) from 1 to 2, do (Actions)
                  Loop - Actions
                    Set VariableSet atkTempLoc[1] = (atkTempLoc[0] offset by (atkStatRange[atkTempInt] x (Power((Real((3 - atkLoopB))), 0.50))) towards atkStatAngle[atkTempInt] degrees.)
                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                      If - Conditions
                        _debug_hitzones Equal to True
                      Then - Actions
                        For each (Integer B) from 0 to 9, do (Actions)
                          Loop - Actions
                            Set VariableSet atkTempLoc[2] = (atkTempLoc[1] offset by (atkStatRadius[atkTempInt] x (Power((Real((3 - atkLoopB))), 0.50))) towards ((Real((Integer B))) x 36.00) degrees.)
                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                              If - Conditions
                                atkLoopB Equal to 2
                              Then - Actions
                                Special Effect - Create a special effect at atkTempLoc[2] using Abilities\Weapons\PriestMissile\PriestMissile.mdl
                                Special Effect - Destroy (Last created special effect)
                              Else - Actions
                                Special Effect - Create a special effect at atkTempLoc[2] using Abilities\Spells\Other\Incinerate\IncinerateBuff.mdl
                                Special Effect - Destroy (Last created special effect)
                            Custom script: call RemoveLocation(udg_atkTempLoc[2])
                            Custom script: set udg_atkTempLoc[2] = null
                      Else - Actions
                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                      If - Conditions
                        tempBoolean[1] Equal to False
                      Then - Actions
                        Set VariableSet tempUnitGroup[0] = (Units within (atkStatRadius[atkTempInt] x (Power((3.00 - (Real(atkLoopB))), 0.50))) of atkTempLoc[1].)
                        Custom script: set udg_tempUnitGroup[0] = GetUnitsInRangeOfLocMatching_custom(( udg_atkStatRadius[udg_atkTempInt] * Pow(( 3.00 - I2R(udg_atkLoopB) ), 0.50) ), udg_atkTempLoc[1], null)
                        Unit Group - Pick every unit in tempUnitGroup[0] and do (Actions)
                          Loop - Actions
                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                              If - Conditions
                                ((Picked unit) is alive) Equal to True
                                (Level of Attribute: Projectile for (Picked unit)) Equal to 0
                                Or - Any (Conditions) are true
                                  Conditions
                                    ((Picked unit) belongs to an enemy of (Owner of atkUnit[atkTempInt]).) Equal to True
                                    atkStatCanDamageAlly[atkTempInt] Equal to True
                                And - All (Conditions) are true
                                  Conditions
                                    Or - Any (Conditions) are true
                                      Conditions
                                        And - All (Conditions) are true
                                          Conditions
                                            atkLoopB Equal to 1
                                            (Level of Attribute: Large for (Picked unit)) Equal to 1
                                        And - All (Conditions) are true
                                          Conditions
                                            atkLoopB Equal to 2
                                            (Level of Attribute: Large for (Picked unit)) Equal to 0
                              Then - Actions
                                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                  If - Conditions
                                    atkFramesExtend[atkTempInt] Greater than 0.00
                                    atkExtendCheck[atkTempInt] Equal to False
                                  Then - Actions
                                    For each (Integer A) from 1 to atkExtendUnitCount[atkTempInt], do (Actions)
                                      Loop - Actions
                                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                          If - Conditions
                                            (Picked unit) Equal to (Load (Integer A) of (Custom value of atkUnit[atkTempInt]) in atkExtendUnits[0].)
                                          Then - Actions
                                            Set VariableSet atkExtendCheck[atkTempInt] = True
                                          Else - Actions
                                  Else - Actions
                                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                  If - Conditions
                                    atkExtendCheck[atkTempInt] Equal to False
                                  Then - Actions
                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                      If - Conditions
                                        atkFramesExtend[atkTempInt] Greater than 0.00
                                      Then - Actions
                                        Set VariableSet atkExtendUnitCount[atkTempInt] = (atkExtendUnitCount[atkTempInt] + 1)
                                        Hashtable - Save Handle Of(Picked unit) as atkExtendUnitCount[atkTempInt] of (Custom value of atkUnit[atkTempInt]) in atkExtendUnits[0].
                                      Else - Actions
                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                      If - Conditions
                                        (Level of Attribute: Large for (Picked unit)) Equal to 1
                                      Then - Actions
                                        Set VariableSet tempBoolean[1] = True
                                      Else - Actions
                                    Special Effect - Create a special effect attached to the chest (attachpoint) of (Picked unit) using war3mapImported\ImpactSpark1.mdx
                                    Special Effect - Destroy (Last created special effect)
                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                      If - Conditions
                                        attrbElmType[(Custom value of atkUnit[atkTempInt])] Equal to 1
                                      Then - Actions
                                        Special Effect - Create a special effect at atkTempLoc[1] using Abilities\Spells\Items\AIfb\AIfbSpecialArt.mdl
                                        Special Effect - Destroy (Last created special effect)
                                      Else - Actions
                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                      If - Conditions
                                        attrbElmType[(Custom value of atkUnit[atkTempInt])] Equal to 2
                                      Then - Actions
                                        Special Effect - Create a special effect at atkTempLoc[1] using Abilities\Spells\Items\AIob\AIobSpecialArt.mdl
                                        Special Effect - Destroy (Last created special effect)
                                      Else - Actions
                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                      If - Conditions
                                        attrbElmType[(Custom value of atkUnit[atkTempInt])] Equal to 3
                                      Then - Actions
                                        Special Effect - Create a special effect at atkTempLoc[1] using Abilities\Spells\Items\OrbVenom\OrbVenomSpecialArt.mdl
                                        Special Effect - Destroy (Last created special effect)
                                      Else - Actions
                                    Custom script: call UnitSound(udg_atkUnit[udg_atkTempInt],"Sound\\Units\\Combat\\MetalMediumSliceMetal1.wav",125,4500)
                                    Unit - Cause atkUnit[atkTempInt] to damage (Picked unit), dealing atkStatDamage[atkTempInt] damage of attack type Normal and damage type Normal
                                  Else - Actions
                                    Set VariableSet atkExtendCheck[atkTempInt] = False
                              Else - Actions
                        Custom script: call DestroyGroup(udg_tempUnitGroup[0])
                        Custom script: set udg_tempUnitGroup[0] = null
                        Custom script: call DestroyGroup(udg_g)
                        Custom script: set udg_g = null
                      Else - Actions
                    Custom script: call RemoveLocation(udg_atkTempLoc[1])
                    Custom script: set udg_atkTempLoc[1] = null
              Else - Actions
            Custom script: call RemoveLocation(udg_atkTempLoc[0])
            Custom script: set udg_atkTempLoc[0] = null
          Else - Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          If - Conditions
            atkFramesActive[atkTempInt] Equal to -999.00
            atkFramesFollowup[atkTempInt] Equal to 0.00
            atkFramesRecovery[atkTempInt] Equal to 0.00
            atkFramesPause[atkTempInt] Equal to 0.00
            atkFramesMulti[atkTempInt] Equal to 0.00
            atkFramesParry[atkTempInt] Equal to 0.00
            enemyANextAttack[atkTempInt] Equal to 0.00
          Then - Actions
            Set VariableSet atkMultiTempInt[(Custom value of atkUnit[atkTempInt])] = 0
            Set VariableSet atkMultiTempInt2[(Custom value of atkUnit[atkTempInt])] = 0
            Set VariableSet atkMultiTempInt3[(Custom value of atkUnit[atkTempInt])] = 0
            Set VariableSet atkDazeDur[(Custom value of atkUnit[atkTempInt])] = 0.00
            Set VariableSet atkDazeAmount[(Custom value of atkUnit[atkTempInt])] = 0.00
            Set VariableSet atkKnockbackPower[(Custom value of atkUnit[atkTempInt])] = 0.00
            Set VariableSet atkKnockbackDur[(Custom value of atkUnit[atkTempInt])] = 0.00
            Set VariableSet atkCurseDur[(Custom value of atkUnit[atkTempInt])] = 0.00
            Set VariableSet atkAbsoluteStunDur[(Custom value of atkUnit[atkTempInt])] = 0.00
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              If - Conditions
                (atkUnit[atkTempInt] has buff Immolation) Equal to False
              Then - Actions
                Unit - Remove Mana Degeneration from atkUnit[atkTempInt]
              Else - Actions
            Unit - Remove Status: Followup from atkUnit[atkTempInt]
            Animation - Change atkUnit[atkTempInt]'s animation speed to 100.00% of its original speed
            Custom script: call FlushParentHashtable( udg_atkExtendUnits[udg_atkTempInt] )
            Hashtable - Clear all child hashtables of child (Custom value of atkUnit[atkTempInt]) in atkExtendUnits[0].
            Set VariableSet atkIndex[atkLoop] = atkIndex[atkIndexSize]
            Set VariableSet atkIndex[atkIndexSize] = atkTempInt
            Set VariableSet atkTempInt = atkIndex[atkIndexSize]
            Set VariableSet atkUnit[atkTempInt] = No unit
            Set VariableSet enemyANextAttack[atkTempInt] = 0.00
            Set VariableSet atkStatAngle[atkTempInt] = 0.00
            Set VariableSet atkStatDamage[atkTempInt] = 0.00
            Set VariableSet atkStatRadius[atkTempInt] = 0.00
            Set VariableSet atkStatRange[atkTempInt] = 0.00
            Set VariableSet atkFramesMulti[atkTempInt] = 0.00
            Set VariableSet atkMultiSequence[atkTempInt] = 0
            Set VariableSet atkIsOffhand[atkTempInt] = False
            Set VariableSet atkIsSpecialMove[atkTempInt] = False
            Set VariableSet atkFramesExtend[atkTempInt] = 0.00
            Set VariableSet atkExtendUnitCount[atkTempInt] = 0
            Set VariableSet atkExtendCheck[atkTempInt] = False
            Set VariableSet atkSwingSoundEffect[atkTempInt] =
            Set VariableSet atkStatCanDamageAlly[atkTempInt] = False
            Set VariableSet atkIndexSize = (atkIndexSize - 1)
            Set VariableSet atkLoop = (atkLoop - 1)
          Else - Actions
    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      If - Conditions
        atkIndexSize Equal to 0
      Then - Actions
        Trigger - Turn off (This trigger)
      Else - Actions
atk aoe
  Events
    Unit - A unit enters (Playable map area)
  Conditions
    Or - Any (Conditions) are true
      Conditions
        (Unit-type of (Triggering unit)) Equal to Cannon: Shot Effect (Blast)
        (Unit-type of (Triggering unit)) Equal to Explosive Barrel: Explosion AoE
        (Unit-type of (Triggering unit)) Equal to Fire Lizard: Fireball AoE
        (Unit-type of (Triggering unit)) Equal to Golem: Boulder AoE
        (Unit-type of (Triggering unit)) Equal to Golem (p): Fireball AoE
        (Unit-type of (Triggering unit)) Equal to Guardian: Water Missile AoE
        (Unit-type of (Triggering unit)) Equal to Guardian (Tutorial): Lightning AoE
        (Unit-type of (Triggering unit)) Equal to Guardian (Tutorial): Periodic Lightning AoE
        (Unit-type of (Triggering unit)) Equal to Guardian (Tutorial): Ranged Thunderclap AoE
        (Unit-type of (Triggering unit)) Equal to Satyr (p): Lightning AoE
        (Unit-type of (Triggering unit)) Equal to Wall Trap: Bomb AoE
        (Unit-type of (Triggering unit)) Equal to Ancient Viper: Dark Fireball AoE
        (Unit-type of (Triggering unit)) Equal to Ancient Viper: Dark Fireball AoE (Weaker)
        (Unit-type of (Triggering unit)) Equal to Ancient Viper: Frost Ball AoE
        (Unit-type of (Triggering unit)) Equal to Guardian (Fire): Firestorm AoE
        (Unit-type of (Triggering unit)) Equal to Guardian (Fire): Timebomb AoE
        (Unit-type of (Triggering unit)) Equal to Divine Sword AoE
        (Unit-type of (Triggering unit)) Equal to Magic Golem: Falling Boulder
        (Unit-type of (Triggering unit)) Equal to Fire Elemental: Magma Ball AoE
        (Unit-type of (Triggering unit)) Equal to Demon Warrior: Meteor
        (Unit-type of (Triggering unit)) Equal to Demon Caster: Flame Shield AoE
  Actions
    Unit - Add a 5.00 second Generic expiration timer to (Triggering unit)
    Set VariableSet atkIndexSize = (atkIndexSize + 1)
    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      If - Conditions
        atkIndexSize Greater than atkIndexMax
      Then - Actions
        Set VariableSet atkIndex[atkIndexSize] = atkIndexSize
        Set VariableSet atkIndexMax = atkIndexSize
      Else - Actions
    Set VariableSet C = atkIndex[atkIndexSize]
    Set VariableSet atkUnit[C] = (Triggering unit)
    Set VariableSet tempLoc[0] = (Position of (Triggering unit))
    Set VariableSet atkFramesActive[C] = 0.00
    Set VariableSet atkFramesFollowup[C] = 0.00
    Set VariableSet atkFramesRecovery[C] = 0.00
    Set VariableSet atkStatAngle[C] = 0.00
    Set VariableSet atkStatRange[C] = 0.00
    Set VariableSet atkBlockstunDur[(Custom value of (Triggering unit))] = 0.00
    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      If - Conditions
        (Unit-type of (Triggering unit)) Equal to Cannon: Shot Effect (Blast)
      Then - Actions
        Set VariableSet atkFramesMulti[C] = 0.25
        Set VariableSet atkMultiTrigger[C] = attack_cannon_multi <gen>
        Set VariableSet atkStatAngle[C] = (Facing of (Triggering unit))
        Set VariableSet atkStatDamage[C] = ((Real(attrbWpnPwr[(Custom value of mainUnit[(Player number of (Owner of (Triggering unit)))])])) x 1.25)
        Set VariableSet atkStatRadius[C] = 110.00
        Set VariableSet atkBlockstunDur[(Custom value of (Triggering unit))] = 1.20
      Else - Actions
    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      If - Conditions
        (Unit-type of (Triggering unit)) Equal to Explosive Barrel: Explosion AoE
      Then - Actions
        Set VariableSet atkStatDamage[C] = 4000.00
        Set VariableSet atkStatRadius[C] = 190.00
        Set VariableSet atkKnockbackPower[(Custom value of (Triggering unit))] = 7.00
        Set VariableSet atkKnockbackDur[(Custom value of (Triggering unit))] = 0.40
        Set VariableSet atkBlockstunDur[(Custom value of (Triggering unit))] = 1.20
      Else - Actions
    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      If - Conditions
        (Unit-type of (Triggering unit)) Equal to Fire Lizard: Fireball AoE
      Then - Actions
        Set VariableSet atkStatDamage[C] = 1.00
        Set VariableSet atkStatRadius[C] = 165.00