Most definitely my thoughts also.I've noticed that in a bunch of tool tips it says "holy" at least twice. Use some more synonyms . It gets kind of stupid when you've read "holy" so many times. I know this is a holy spell contest, but come on. There are more words that mean "holy" than just "holy"
I've noticed that in a bunch of tool tips it says "holy" at least twice. Use some more synonyms . It gets kind of stupid when you've read "holy" so many times. I know this is a holy spell contest, but come on. There are more words that mean "holy" than just "holy"
@People who said my name
I am not allowed to ask for it as it's a big error in the code, as Squll2 said that I can't ask about it.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// |¯¯| |¯¯| /¯¯¯¯¯¯|
// | | | | | /¯¯¯¯
// | ¯¯ | | | by ÜBERPLAYER
// | |¯¯| | | \____
// |__| |__| \______|
//Implement:
//
//1. Extract the HolySpiral.MDX from import manager, and import it into your map.
//2. Copy the Heavenly Cry spell from object editor, and paste it into your map.
//3. Copy the Heavenly Cry Dummy unit from object editor, and paste it into your map.
//4. Copy the this trigger to your map.
//5. Replace rawcodes from the ConfigurationMenu if needed.
//Tip. I recommend you to set the dummy units height same as you have in ConfigurationMenu.
// due to few graphic issues. Remember that you can set height value in object editor
// to be bigger than 1000 by holding shift down, and then pressing enter.
scope HeavenlyCry
//Change the values inside ConfigurationMenu scope to
//affect to the way the spell acts. I don't suggest
//you to touch anything after the end of the modifiable
//stuff comment. No need for credits, if you use this spell.
private scope ConfigurationMenu
public constant function SpellId takes nothing returns integer
return 039;A000039; //Rawcode of the spell
endfunction
public constant function DummyId takes nothing returns integer
return 039;h001039; //Rawcode of the dummy unit
endfunction
public constant function DummyCount takes integer level returns integer
return 12 //Quantity of the dummies per wave. Maximum of 36.
endfunction
public constant function SpellArea takes integer level returns real
return 200.00 //The area of the spell.
endfunction
public constant function WaveCount takes integer level returns integer
return 2 //Quantity of the waves.
endfunction
public constant function WaveSpeed takes integer level returns real
return 0.75 //How long does a wave last for.
endfunction
public constant function DummyHeight takes integer level returns real
return 1500.00 //The height where the dummies start to drop down.
endfunction
endscope
//End of modifiable stuff
private struct hc_substructure
integer dummycount
unit array dummy[36]
method onDestroy takes nothing returns nothing
local integer index = 0
loop
exitwhen (index == .dummycount)
if (.dummy[index] != null) then
call KillUnit(.dummy[index])
set .dummy[index] = null
endif
set index = index + 1
endloop
endmethod
endstruct
private struct hc_structure
unit caster
real area
integer wavecount
real wavespeed
real height
hc_substructure substruct
real curheight
integer storedcount
integer curwave = 0
real x
real y
boolean hasgone = false
method onDestroy takes nothing returns nothing
if (.substruct != null) then
call .substruct.destroy()
endif
endmethod
endstruct
globals
private hc_structure array hc_array
private integer hc_total = 0
private timer hc_timer = CreateTimer()
endglobals
private function Heavenly_Cry_Sub_Actions takes nothing returns nothing
local hc_structure dat
local integer index = 0
local integer index2 = 0
local real x
local real y
loop
exitwhen (index == hc_total)
set dat = hc_array[index]
if (dat.hasgone == true) then
set hc_array[index] = hc_array[hc_total - 1]
set hc_total = hc_total - 1
call hc_structure.destroy(dat)
set index = index - 1
else
if (dat.curwave > dat.wavecount) then
set dat.hasgone = true
else
if (dat.curheight <= 2.00) then
set index2 = 0
call hc_substructure.destroy(dat.substruct)
set dat.substruct = dat.substruct.create()
set dat.substruct.dummycount = dat.storedcount
loop
exitwhen (index2 == dat.substruct.dummycount)
set x = dat.x + GetRandomReal(0.00, dat.area-10.00) * Cos(GetRandomReal(0.00, 360.00) * bj_DEGTORAD)
set y = dat.y + GetRandomReal(0.00, dat.area-10.00) * Sin(GetRandomReal(0.00, 360.00) * bj_DEGTORAD)
set dat.substruct.dummy[index2] = CreateUnit(Player(15), ConfigurationMenu_DummyId(), x, y, 0.00)
call SetUnitFlyHeight(dat.substruct.dummy[index2], dat.height, 99999.99)
set index2 = index2 + 1
endloop
set dat.curheight = dat.height
set dat.curwave = dat.curwave + 1
else
set index2 = 0
set dat.curheight = dat.curheight - dat.height / dat.wavespeed * 0.035
loop
exitwhen (index2 == dat.substruct.dummycount)
call SetUnitFlyHeight(dat.substruct.dummy[index2], dat.curheight, 99999.99)
set index2 = index2 + 1
endloop
endif
endif
endif
set index = index + 1
endloop
if (hc_total == 0) then
call PauseTimer(hc_timer)
endif
endfunction
private function Heavenly_Cry_Main_Action takes nothing returns nothing
local hc_structure dat = hc_structure.create()
local integer level = GetUnitAbilityLevel(GetTriggerUnit(), ConfigurationMenu_SpellId())
local real x
local real y
local location loc = GetSpellTargetLoc()
set dat.substruct = hc_substructure.create()
set dat.caster = GetTriggerUnit()
if (ConfigurationMenu_DummyCount(level) > 36) then
set dat.substruct.dummycount = 36
else
set dat.substruct.dummycount = ConfigurationMenu_DummyCount(level)
endif
set dat.storedcount = dat.substruct.dummycount
set dat.area = ConfigurationMenu_SpellArea(level)
set dat.wavecount = ConfigurationMenu_WaveCount(level)
set dat.wavespeed = ConfigurationMenu_WaveSpeed(level)
set dat.height = ConfigurationMenu_DummyHeight(level)
set dat.x = GetLocationX(loc)
set dat.y = GetLocationY(loc)
set dat.curheight = 0.00
call RemoveLocation(loc)
set loc = null
set hc_array[hc_total] = dat
set hc_total = hc_total + 1
if (hc_total == 1) then
call TimerStart(hc_timer, 0.050, true, function Heavenly_Cry_Sub_Actions)
endif
endfunction
//===========================================================================
private function Heavenly_Cry_GenericBoolexpr takes nothing returns boolean
return true
endfunction
function InitTrig_Heavenly_Cry takes nothing returns nothing
local integer index = 0
local boolexpr b = Condition(function Heavenly_Cry_GenericBoolexpr)
set gg_trg_Heavenly_Cry = CreateTrigger()
loop
exitwhen (index == 12)
call TriggerRegisterPlayerUnitEvent(gg_trg_Heavenly_Cry, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, b)
set index = index + 1
endloop
set b = null
call DestroyBoolExpr(b)
call TriggerAddAction(gg_trg_Heavenly_Cry, function Heavenly_Cry_Main_Action)
endfunction
endscope