Magentix
if (OP.statement == false) postCount++;
- Reaction score
- 107
MUI: Totally
JASS: Yup
JESP: I think so
Leakless: So it would seem
Requires: NewGen
Contains:
- Tundra Escape (escape ability)
- Frozen Soul (boost/heal ability)
- Cold As Ice (defensive ability)
- Cryogenetic Strike (AoE nuke)
THIS ALSO CONTAINS MY PREVIOUS INFERNO SPELLPACK, since I tend to put everything in one map...
I'm still fixing/updating Inferno, but decided to release this one meanwhile.
Just copy everything in the Frosted Triggers map and read the Implementation trigger in there.
JESP Document:
JASS: Yup
JESP: I think so
Leakless: So it would seem
Requires: NewGen
Contains:
- Tundra Escape (escape ability)
- Frozen Soul (boost/heal ability)
- Cold As Ice (defensive ability)
- Cryogenetic Strike (AoE nuke)
THIS ALSO CONTAINS MY PREVIOUS INFERNO SPELLPACK, since I tend to put everything in one map...
I'm still fixing/updating Inferno, but decided to release this one meanwhile.
Just copy everything in the Frosted Triggers map and read the Implementation trigger in there.
TUNDRA ESCAPE
Sublimate yourself, allowing you to escape through the very air you're breathing, slowing nearby opponents for 5 seconds.
Level 1 - 10% max hp lost during sublimation.
Level 2 - 8% max hp lost during sublimation.
Level 3 - 6% max hp lost during sublimation.
22/20/18 second cooldown.
50/60/75 mana cost.
JASS:
library TundraEscape requires FrozenSoul
/////////////////////////////////////////////////////////////////////////////////
// //
// TUNDRA ESCAPE CONFIGURATION //
// BY MAGENTIX //
// //
//=============================================================================//
// //
// Set the Raw Data code for the Tundra Escape ability //
private constant function GetAbilityID takes nothing returns integer //
return 039;A009039; //
endfunction //
// //
// Set the Raw Data code for the TE Slow ability //
private constant function GetNovaID takes nothing returns integer //
return 039;A00A039; //
endfunction //
// //
// Set the Raw Data code for the Caster Dummy (Basic Dummy) unit //
private constant function GetUnitID takes nothing returns integer //
return 039;n005039; //
endfunction //
// //
// Set the health you want to be lost with each jump //
// FS stands for the effect of Frozen Soul on the spell //
// FSE becomes 0 if FS isn't active and 1 if FS is active //
private constant function GetHP takes integer Tundra_level, integer FS_level, integer FSE_level returns real
return (0.12 - (Tundra_level * 0.02) - ((FS_level * 0.02) * FSE_level)) //
endfunction //
// //
//=============================================================================//
// //
// DO NOT EDIT ANYTHING BEYOND THIS POINT //
// PLEASE GIVE CREDIT WHEN USING THIS! //
// //
/////////////////////////////////////////////////////////////////////////////////
private function Conditions takes nothing returns boolean
return( GetSpellAbilityId() == GetAbilityID() )
endfunction
private function Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local player p = GetOwningPlayer(u)
local real X = GetUnitX(u)
local real Y = GetUnitY(u)
call UnitDamageTarget(u, u, GetHP(GetUnitAbilityLevel(u,GetAbilityID()),GetUnitAbilityLevel(u,FrozenSoul_GetAbilityID()),GetUnitAbilityLevel(u,FrozenSoul_GetEffectAbilityID()))*GetUnitState(u,UNIT_STATE_MAX_LIFE), true, true, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_DIVINE, WEAPON_TYPE_WHOKNOWS)
if (GetUnitAbilityLevel(u,FrozenSoul_GetEffectAbilityID()) > 0) then
call UnitRemoveAbility(u,FrozenSoul_GetEffectAbilityID())
call UnitRemoveAbility(u,FrozenSoul_GetTooltipAbilityID())
endif
set u = CreateUnit(p,GetUnitID(),X,Y,270.00)
call UnitApplyTimedLife(u,039;BTLF039;,1.00)
call UnitAddAbility(u,GetNovaID())
call IssueTargetOrder(u,"frostnova",u)
set u = null
set p = null
endfunction
//===========================================================================
function InitTrig_TundraEscape takes nothing returns nothing
set gg_trg_TundraEscape = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_TundraEscape, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition( gg_trg_TundraEscape, Condition( function Conditions ) )
call TriggerAddAction( gg_trg_TundraEscape, function Actions )
endfunction
endlibrary
FROZEN SOUL
Sacrifices a target friendly unit and use its soul to empower your next spell. If used while already having a soul stored, you will consume both the soul and target unit, regaining mana and health.
Level 1 - 2% less hp lost with Tundra Escape, adds 4% chance to Cold As Ice and 5% more shard damage.
Heals 200 hp and 150 mana.
Level 2 - 4% less hp lost with Tundra Escape, adds 8% chance to Cold As Ice and 10% more shard damage.
Heals 300 hp and 300 mana.
Level 3 - 6% less hp lost with Tundra Escape, adds 12% chance to Cold As Ice and 15% more shard damage.
Heals 400 hp and 450 mana.
Lasts 90 seconds.
30/25/20 second cooldown.
90/150/210 mana cost.
JASS:
library FrozenSoul
/////////////////////////////////////////////////////////////////////////////////
// //
// FROZEN SOUL CONFIGURATION //
// BY MAGENTIX //
// //
//=============================================================================//
// //
// Set the Raw Data code for the Frozen Soul ability //
public constant function GetAbilityID takes nothing returns integer //
return 039;A00C039; //
endfunction //
// //
// Set the Raw Data code for the Frozen Soul Tooltip ability //
public constant function GetTooltipAbilityID takes nothing returns integer //
return 039;A00B039; //
endfunction //
// //
// Set the Raw Data code for the Frozen Soul Effect ability //
public constant function GetEffectAbilityID takes nothing returns integer //
return 039;A00D039; //
endfunction //
// //
// Set the health it should heal per level //
private constant function GetHP takes integer Frozen_level returns real //
return ((Frozen_level * 100.00) + 100.00) //
endfunction //
// //
// Set the mana it should heal per level //
private constant function GetMana takes integer Frozen_level returns real //
return (Frozen_level * 150.00) //
endfunction //
// //
// Set the expiration time on the Frozen Soul buff //
private constant function GetDuration takes nothing returns real //
return 60.00 //
endfunction //
// //
//=============================================================================//
// //
// DO NOT EDIT ANYTHING BEYOND THIS POINT //
// PLEASE GIVE CREDIT WHEN USING THIS! //
// //
//=============================================================================//
// //
// // Start of needed Handle Var functions for this spell \\ //
// // By Kattana \\ //
globals //
gamecache globalcache = null //
endglobals //
// //
private function H2I takes handle h returns integer //
return h //
return 0 //
endfunction //
private function LocalVars takes nothing returns gamecache //
if (globalcache == null) then //
set globalcache = InitGameCache("jasslocalvars.w3v") //
endif //
return globalcache //
endfunction //
private function SetHandleHandle takes handle subject, string name, handle value returns nothing
if value==null then //
call FlushStoredInteger(LocalVars(),I2S(H2I(subject)),name) //
else //
call StoreInteger(LocalVars(), I2S(H2I(subject)), name, H2I(value)) //
endif //
endfunction //
private function GetHandleUnit takes handle subject, string name returns unit //
return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name) //
return null //
endfunction //
private function GetHandleTimer takes handle subject, string name returns timer//
return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name) //
return null //
endfunction //
private function FlushHandleLocals takes handle subject returns nothing //
call FlushStoredMission(LocalVars(), I2S(H2I(subject)) ) //
endfunction //
// // End of needed Handle Var functions for this spell \\ //
// //
//=============================================================================//
// //
// DO NOT EDIT ANYTHING BEYOND THIS POINT //
// PLEASE GIVE CREDIT WHEN USING THIS! //
// //
/////////////////////////////////////////////////////////////////////////////////
private function Conditions takes nothing returns boolean
return( GetSpellAbilityId() == GetAbilityID())
endfunction
private function Callback takes nothing returns nothing
local timer t = GetExpiredTimer()
local unit u = GetHandleUnit(t,"unit")
if (GetUnitAbilityLevel(u,GetEffectAbilityID()) > 0) then
call UnitRemoveAbility(u,GetEffectAbilityID())
call UnitRemoveAbility(u,GetTooltipAbilityID())
endif
set u = null
set t = null
endfunction
private function Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local integer i = GetUnitAbilityLevel(u,GetAbilityID())
local timer t = null
call KillUnit(GetSpellTargetUnit())
if (GetUnitAbilityLevel(u,GetEffectAbilityID()) <= 0) then
call UnitAddAbility(u,GetEffectAbilityID())
call UnitAddAbility(u,GetTooltipAbilityID())
call SetUnitAbilityLevel(u,GetTooltipAbilityID(),i)
set t = GetHandleTimer(u,"timer")
if ( t != null) then
call PauseTimer(t)
call TimerStart(t,GetDuration(),false,function Callback)
else
set t = CreateTimer()
call SetHandleHandle(u,"timer",t)
call SetHandleHandle(t,"unit",u)
call TimerStart(t,GetDuration(),false,function Callback)
endif
else
call UnitRemoveAbility(u,GetEffectAbilityID())
call UnitRemoveAbility(u,GetTooltipAbilityID())
call SetUnitState(u, UNIT_STATE_LIFE, GetUnitState(u,UNIT_STATE_LIFE)+GetHP(i))
call TriggerSleepAction(0.27)
call SetUnitState(u, UNIT_STATE_MANA, GetUnitState(u,UNIT_STATE_MANA)+GetMana(i))
endif
set u = null
set t = null
endfunction
//===========================================================================
function InitTrig_FrozenSoul takes nothing returns nothing
set gg_trg_FrozenSoul = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_FrozenSoul, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_FrozenSoul, Condition( function Conditions ) )
call TriggerAddAction( gg_trg_FrozenSoul, function Actions )
endfunction
endlibrary
COLD AS ICE
Gives a small chance to freeze a melee attacker, dealing 50 damage and stunning them for 2 seconds.
Level 1 - 4% chance.
Level 2 - 8% chance.
Level 3 - 12% chance.
JASS:
library ColdAsIce requires FrozenSoul
/////////////////////////////////////////////////////////////////////////////////
// //
// COLD AS ICE CONFIGURATION //
// BY MAGENTIX //
// //
//=============================================================================//
// //
// Set the Raw Data code for the Cold As Ice ability //
private constant function GetAbilityID takes nothing returns integer //
return 039;A00E039; //
endfunction //
// //
// Set the Raw Data code for the Cold As Ice Stun ability //
private constant function GetStunID takes nothing returns integer //
return 039;A00F039; //
endfunction //
// //
// Set the Raw Data code for the Caster Dummy (Basic Dummy) unit //
private constant function GetUnitID takes nothing returns integer //
return 039;n005039; //
endfunction //
// //
// Set the damage you want the melee attacker to take (Can be level based) //
private constant function GetDamage takes integer CAI_level returns real //
return ( 50.00 ) //
endfunction //
// //
// Set the chance of stunning a melee attacker //
// FS stands for the effect of Frozen Soul on the spell //
// FSE becomes 0 if FS isn't active and 1 if FS is active //
private constant function GetChance takes integer CAI_level, integer FS_level, integer FSE_level returns integer
return ( (4 * CAI_level) + ((FS_level * 4) * FSE_level) ) //
endfunction //
// //
//=============================================================================//
// //
// DO NOT EDIT ANYTHING BEYOND THIS POINT //
// PLEASE GIVE CREDIT WHEN USING THIS! //
// //
/////////////////////////////////////////////////////////////////////////////////
private function Conditions takes nothing returns boolean
return( GetUnitAbilityLevel(GetTriggerUnit(),GetAbilityID()) > 0 and IsUnitType(GetAttacker(),UNIT_TYPE_MELEE_ATTACKER) and not IsUnitType(GetAttacker(),UNIT_TYPE_MAGIC_IMMUNE) )
endfunction
private function Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local unit v = GetAttacker()
local player p = GetOwningPlayer(u)
local real X = GetUnitX(u)
local real Y = GetUnitY(u)
local integer i = GetUnitAbilityLevel(u,GetAbilityID())
local integer j = GetRandomInt(0,100)
if ( j <= GetChance(i,GetUnitAbilityLevel(u,FrozenSoul_GetAbilityID()),GetUnitAbilityLevel(u,FrozenSoul_GetEffectAbilityID())) ) then
call UnitDamageTarget(u, v, GetDamage(i), true, true, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, WEAPON_TYPE_WHOKNOWS)
set u = CreateUnit(p,GetUnitID(),X,Y,270.00)
call UnitApplyTimedLife(u,039;BTLF039;,5.00)
call UnitAddAbility(u,GetStunID())
call IssueTargetOrder(u,"thunderbolt",v)
endif
set u = null
set v = null
set p = null
endfunction
//===========================================================================
function InitTrig_ColdAsIce takes nothing returns nothing
set gg_trg_ColdAsIce = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_ColdAsIce, EVENT_PLAYER_UNIT_ATTACKED )
call TriggerAddCondition( gg_trg_ColdAsIce, Condition( function Conditions ) )
call TriggerAddAction( gg_trg_ColdAsIce, function Actions )
endfunction
endlibrary
CRYOGENETIC STRIKE
Creates a spiral of frozen shards which explodes after 2 seconds, sending the shards flying out randomly.
Each shard has a 750 range and deals 40 damage on impact. (84 shards)
Channeling
120 second cooldown.
JASS:
library CryogeneticStrike requires FrozenSoul
/////////////////////////////////////////////////////////////////////////////////
// //
// CRYOGENETIC STRIKE CONFIGURATION //
// BY MAGENTIX //
// //
//=============================================================================//
// //
// Set the Raw Data code for the Cryogenetic Strike ability //
private constant function GetAbilityID takes nothing returns integer //
return 039;A008039; //
endfunction //
// //
// Set the Raw Data code for the Cryogenetic Strike dummy unit //
private constant function GetUnitID takes nothing returns integer //
return 039;n004039; //
endfunction //
// //
// Set whether you want the spell to damage trees as well //
private constant function ShardsDestroyTrees takes nothing returns boolean //
return true //
endfunction //
// //
// Set the damage you want each shard to do for every level //
// FS stands for the effect of Frozen Soul on the spell //
// FSE becomes 0 if FS isn't active and 1 if FS is active //
private constant function GetDamage takes integer Cryo_level, integer FS_level, integer FSE_level returns real
return ((Cryo_level * 20.00) + 20.00 + ((Cryo_level * 20.00) + 20.00) * (FS_level * 0.05) * FSE_level)
endfunction //
// //
//=============================================================================//
// //
// DO NOT EDIT ANYTHING BEYOND THIS POINT //
// PLEASE GIVE CREDIT WHEN USING THIS! //
// //
//=============================================================================//
// //
// // Start of needed Handle Var functions for this spell \\ //
// // By Kattana \\ //
private function H2I takes handle h returns integer //
return h //
return 0 //
endfunction //
private function LocalVars takes nothing returns gamecache //
if (globalcache == null) then //
set globalcache = InitGameCache("jasslocalvars.w3v") //
endif //
return globalcache //
endfunction //
private function SetHandleInt takes handle subject, string name, integer value returns nothing
if value==0 then //
call FlushStoredInteger(LocalVars(),I2S(H2I(subject)),name) //
else //
call StoreInteger(LocalVars(), I2S(H2I(subject)), name, value) //
endif //
endfunction //
private function GetHandleInt takes handle subject, string name returns integer//
return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name) //
endfunction //
private function FlushHandleLocals takes handle subject returns nothing //
call FlushStoredMission(LocalVars(), I2S(H2I(subject)) ) //
endfunction //
// // End of needed Handle Var functions for this spell \\ //
// //
//=============================================================================//
// //
// DO NOT EDIT ANYTHING BEYOND THIS POINT //
// PLEASE GIVE CREDIT WHEN USING THIS! //
// //
/////////////////////////////////////////////////////////////////////////////////
globals
private integer TempInt
private destructable TempDestructable
endglobals
struct ShardData
real array ShardAngles[84]
unit array ShardUnits[84]
integer i = 0
real Damage = 0
endstruct
struct CryoData
effect e
integer i = 0
integer Level = 0
group g
unit u
player p
real X = 0
real Y = 0
real Damage = 0
real Angle = 0
endstruct
private function Damage_VT takes nothing returns boolean
local player p = Player(TempInt)
local unit u = GetFilterUnit()
local boolean b = (GetUnitState(u, UNIT_STATE_LIFE) > 0 and IsUnitEnemy(u,p) and GetUnitAbilityLevel(u,039;Aloc039;)==0)
set u = null
set p = null
return b
endfunction
private function CountDestructables takes nothing returns nothing
local destructable d = GetEnumDestructable()
if (GetDestructableLife(d) > 0) then
set TempDestructable = d
endif
set d = null
endfunction
function MoveShard takes nothing returns nothing
local timer t=GetExpiredTimer()
local group g
local integer i = 0
local unit TargetUnit
local ShardData dat = ShardData( GetHandleInt(t,"dat") )
local real X
local real Y
if (dat.i < 50) then
set g = CreateGroup()
loop
exitwhen (i == 84)
if (dat.ShardUnits<i> != null) then
set X = GetUnitX(dat.ShardUnits<i>)
set Y = GetUnitY(dat.ShardUnits<i>)
if (GetUnitFlyHeight(dat.ShardUnits<i>) > 0.00 and dat.i==0) then
call SetUnitFlyHeight(dat.ShardUnits<i>,0.00,100.00)
endif
call SetUnitX(dat.ShardUnits<i>,X + 15.00 * Cos(dat.ShardAngles<i> * bj_DEGTORAD))
call SetUnitY(dat.ShardUnits<i>,Y + 15.00 * Sin(dat.ShardAngles<i> * bj_DEGTORAD))
set TempInt = GetPlayerId(GetOwningPlayer(dat.ShardUnits<i>))
call GroupEnumUnitsInRange(g, X, Y, 80.00, Condition(function Damage_VT))
set TargetUnit = FirstOfGroup(g)
call GroupClear(g)
if (TargetUnit != null) then
call UnitDamageTarget(dat.ShardUnits<i>, TargetUnit, dat.Damage, false, true, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, WEAPON_TYPE_WHOKNOWS)
call KillUnit(dat.ShardUnits<i>)
set dat.ShardUnits<i> = null
elseif (ShardsDestroyTrees()) then
set TempDestructable = null
call EnumDestructablesInRect(Rect(X-50.00,Y-50.00,X+50.00,Y+50.00), null, function CountDestructables)
if (TempDestructable != null) then
call UnitDamageTarget(dat.ShardUnits<i>, TempDestructable, dat.Damage, false, true, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, WEAPON_TYPE_WHOKNOWS)
call KillUnit(dat.ShardUnits<i>)
set dat.ShardUnits<i> = null
endif
endif
endif
set i = i +1
endloop
call DestroyGroup(g)
set dat.i = dat.i + 1
call SetHandleInt(t,"dat",dat)
else
// Clean up the struct
call ShardData.destroy(dat)
call FlushHandleLocals(t)
call PauseTimer(t)
call DestroyTimer(t)
endif
set t = null
set g = null
set TargetUnit = null
endfunction
function CryoShard takes group shards, real damage returns nothing
local timer t = CreateTimer()
local ShardData dat = ShardData.create()
local unit u
local integer i = 0
loop
set u = FirstOfGroup(shards)
exitwhen (u == null)
call GroupRemoveUnit(shards,u)
set dat.ShardUnits<i> = u
set dat.ShardAngles<i> = GetRandomReal(0.00,360.00)
set i = i + 1
endloop
set dat.i = 0
set dat.Damage = damage
call SetHandleInt(t,"dat",dat)
call TimerStart(t,0.04,true,function MoveShard)
set t = null
set u = null
endfunction
function CryoEffect takes nothing returns nothing
local timer t=GetExpiredTimer()
local unit u
local integer i = 0
local real CurrentX
local real CurrentY
local CryoData dat = CryoData( GetHandleInt(t,"dat") )
if (OrderId2String(GetUnitCurrentOrder(dat.u)) != "channel" and dat.i < 20) then
set dat.i = 21
call SetHandleInt(t,"dat",dat)
call TimerStart(t,0.50,false,function CryoEffect)
elseif (dat.i < 21) then
loop
exitwhen (i == 2)
set i = i+1
set CurrentX = dat.X + 75.00 * Cos((dat.Angle + (dat.i * 18.00) + (180.00*i)) * bj_DEGTORAD)
set CurrentY = dat.Y + 75.00 * Sin((dat.Angle + (dat.i * 18.00) + (180.00*i)) * bj_DEGTORAD)
set u = CreateUnit(dat.p,GetUnitID(),CurrentX,CurrentY,bj_UNIT_FACING)
call SetUnitFlyHeight(u,(dat.i*10.00),5000.00)
call UnitApplyTimedLife(u,039;BTLF039;,2.50+((20-dat.i)*0.05))
call GroupAddUnit(dat.g,u)
set CurrentX = dat.X + 75.00 * Cos((dat.Angle - (dat.i * 18.00) + (180.00*i)) * bj_DEGTORAD)
set CurrentY = dat.Y + 75.00 * Sin((dat.Angle - (dat.i * 18.00) + (180.00*i)) * bj_DEGTORAD)
set u = CreateUnit(dat.p,GetUnitID(),CurrentX,CurrentY,bj_UNIT_FACING)
call SetUnitFlyHeight(u,(dat.i*10.00),5000.00)
call UnitApplyTimedLife(u,039;BTLF039;,2.50+((20-dat.i)*0.05))
call GroupAddUnit(dat.g,u)
endloop
set dat.i = dat.i + 1
call SetHandleInt(t,"dat",dat)
if (dat.i < 21) then
call TimerStart(t,0.05,false,function CryoEffect)
else
call TimerStart(t,0.50,false,function CryoEffect)
endif
else
call CryoShard(dat.g,dat.Damage)
// Create Special Effect upon shatter
call DestroyEffect(dat.e)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl",dat.u,"origin"))
// Clean up the struct
call DestroyGroup(dat.g)
call CryoData.destroy(dat)
call FlushHandleLocals(t)
call DestroyTimer(t)
endif
set t = null
set u = null
endfunction
function Conditions takes nothing returns boolean
return ( GetSpellAbilityId() == GetAbilityID() )
endfunction
function Actions takes nothing returns nothing
local timer t = CreateTimer()
local integer FSELevel
local CryoData dat = CryoData.create()
set dat.i = 0
set dat.g = CreateGroup()
set dat.u = GetTriggerUnit()
set dat.X = GetUnitX(dat.u)
set dat.Y = GetUnitY(dat.u)
set dat.Level = GetUnitAbilityLevel(dat.u,GetAbilityID())
set FSELevel = GetUnitAbilityLevel(dat.u,FrozenSoul_GetEffectAbilityID())
set dat.Damage = GetDamage(dat.Level,GetUnitAbilityLevel(dat.u,FrozenSoul_GetAbilityID()),FSELevel)
set dat.Angle = GetUnitFacing(dat.u)
set dat.p = GetOwningPlayer(dat.u)
set dat.e = AddSpecialEffectTarget("Abilities\\Spells\\Undead\\FreezingBreath\\FreezingBreathTargetArt.mdl",dat.u,"origin")
call SetHandleInt(t,"dat",dat)
call TimerStart(t,1.00,false,function CryoEffect)
if (FSELevel > 0) then
call UnitRemoveAbility(dat.u,FrozenSoul_GetEffectAbilityID())
call UnitRemoveAbility(dat.u,FrozenSoul_GetTooltipAbilityID())
endif
set t = null
endfunction
//===========================================================================
function InitTrig_CryogeneticStrike takes nothing returns nothing
set gg_trg_CryogeneticStrike = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_CryogeneticStrike, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_CryogeneticStrike, Condition( function Conditions ) )
call TriggerAddAction( gg_trg_CryogeneticStrike, function Actions )
endfunction
endlibrary</i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i>
JESP Document:
JASS:
// This is the JESP standard document, if a map contains this document it means that there are
// spells that follow this standard.
//
// Spells of this map that follow the standard:
// ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
// - Cryogenetic Strike
// - Tundra Escape
// - Frozen Soul
// - Cold As Ice
//
// Advantages of the Standard
// ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
// - Implementing spells that follow the standard is relatively easier than implementing JASS
// spells that don't follow the standard.
//
// - Configuring/Balancing spells that follow the standard is relatively easier than
// implementing JASS spells that don't follow the standard.
//
// - Users may do the following procedure to make a new ability that uses the spell's script :
//
// * Create a new Trigger with a name (case sensitive)
// * Convert that trigger to custom text.
// * Copy the spell's script to a text editor like Notepad or your OS equivalent.
// * Replace the spell's Code name with the name you used on the trigger.
// * Copy the new text to the new trigger
// * Duplicate the Spell's original objects to have new ones for the new spell script.
//
// You are now able to use that new version of the spell.
//
// - In case two guys give the same name to 2 different spells, there are no conflict problems
// because you can easily change the name of one of them
//
// What is the JESP Standard?
// ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
// The JESP standard was designed to make spell sharing much better. And to make sure JASS
// enhanced spells follow a rule, to prevent chaos.
//
// What does JESP Standard stands for?
// ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
// JASS
// Enhanced
// Spell
// Pseudotemplate
//
// Requirements for a spell to follow the JESP Standard
// ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
// - The spell is written in JASS
// - The spell is 100% multi instanceable.
// - The spell script is ready to support spells of any number of levels.
// (default config header is not required to support all of them)
//
// - The Spell has an specific code name.
//
// - The Spell's trigger must have the spell's codename as name
//
// - The Spell's InitTrig function must be named: InitTrig_<CodeName>
//
// - The spell has a configuration header.
//
// - It is mandatory that rawcodes of objects are configurable in the header.
//
// - All the spell's specific code is inside the spell's "Trigger" (Trigger== that custom text
// slot that world editor calls Trigger, the spell may use as many 'trigger' OBJECTS as needed)
//
// - Every spell-specific single identifier or key works in such a way that reproducing the
// spell's trigger but after performing a text-replace of codename with another name (and thus
// renaming the cloned trigger to the new code name) it won't cause compile errors / conflicts
// when playing the map.
//
// - There is no code inside the spell's "Trigger" that is not specific to the spell.
//
// - There are no requirements for GUI variables that are specific to the spell. If a system
// used by the spell requires GUI variables the code for the system must be outside the "Trigger"
//
// - Eyecandy and spell's balance have to be easy to configure
//
// - The name of the author should be included in the spell's script.
//
// - The reason to exist of this standard is spell sharing. This document should be included
// within the map. And it should specify which spell follows the standard, in the top list.