AoS Realms of the Genesis v3

waaaks!

Zinctified
Reaction score
255
Well, I really don't need to play multiplayer if I wanted to create videos, as long as there are players out there that saves their replay files and submit it here, then there will be no problem at all.
 

waaaks!

Zinctified
Reaction score
255
Bump, need some kind of private beta testers (that are active in some sort of instant messaging i.e. Yahoo Messenger) because, for each time I finish something on my map, I need someone to help find any bugs and glitches, if you are interested, please add my yahoo messenger Id: [email protected]. That's all I need to keep this fast. Private beta testers will be given maps that needs to be tested even though the map wasn't released in the public.

Two things I need to finish before posting "another" spoiler map: First, Acid Terror included in Divide and Combine, and Jungle Giant's (the Titan) new ultimate ability. Also the updates will be slow due to some activities (3ds Max, Cinema 4d, Adobe Photoshop, Adobe After Effects, and some sort of Video Editing).

I really need some assistance in this project, I still don't know what can I do for you, but I'm sure I can find a use for those who are interested.

Thanks.

Current change log (updating each time I finish something in my map):
* Fixed Anger Bomb for exploding the units even though Anger Bomb is not the source
* Changed Impaling Fury Icon
* Changed Hero Bonus Constants
* Illusory Warrior now instantly creates Illusions
* Cleave is now unable to damage on structures nor trigger on structures
* Added Knockback on Leap which was stated on tooltip
* Reduced damage on False Reality
* Changed Skin and Icon of Mirage Heroine
* Impaling Fury now doesn't deal damage on Structures
* Supreme Strength now doesn't scale the Jungle Giant
* Fixed Impale based spell from stacking from each other
* Recoded Impale System
* Fixed the rare bug on Impale based spell
* Changed Barrage to Hunted Arrow for Deadeye
* Fixed Grave Robber Tooltip
* Fixed Impale Based spell not stopping when casted out of map bounds
* Fixed Whirlwind not stopping when casted out of map bounds
* Improved Geodart reacting on flying units.
* Changed some parts of the terrain, mostly on deep water areas.
* Added ultimate ability to Jonadrian: Divide and Combine (idea by Zack1996)
 

waaaks!

Zinctified
Reaction score
255
bump

Thanks to Blizzard's Warcraft III Patch 1.23b, there will be lots of stuffs I need to work on and/or change, because some of my imported systems uses their own Indexing utilities and handle attachment systems which uses lots of H2I. I need to recreate systems like Knockback system into my own, and some other stuffs inside the map. I hope this works out well with patch 1.23b.
 

13lade619

is now a game developer :)
Reaction score
399
you know, you dont really need to 'recreate'.

you just simply need to replace the code inside their respective H2I functions with the new native.

ie:

JASS:
private function H2I takes handle h returns integer
        return h
        return 0
endfunction

to
JASS:
private function H2I takes handle h returns integer
        return GetHandleId(h)
endfunction


my concern with my map isnt H2I, but the total population of 1.23b players.
*you know what I mean*
 

waaaks!

Zinctified
Reaction score
255
but theres no need for that, while blizzard stated that, they are going to make H2I a native in the future
 

waaaks!

Zinctified
Reaction score
255
~UPDATE~
Released anothe spoiler map, the map adds the ultimate ability of 2 heroes, for more info:
Realms of the Genesis
Version 3
Change Log

* Fixed Anger Bomb for exploding the units even though Anger Bomb is not the source.
* Changed Impaling Fury Icon.
* Changed Hero Bonus Constants.
* Illusory Warrior now instantly creates Illusions.
* Cleave is now unable to damage on structures nor trigger on structures.
* Added Knockback on Leap which was stated on tooltip.
* Reduced damage on False Reality.
* Changed Skin and Icon of Mirage Heroine.
* Impaling Fury now doesn't deal damage on Structures.
* Supreme Strength now doesn't scale the Jungle Giant.
* Fixed Impale based spell from stacking from each other.
* Recoded Impale System.
* Fixed the rare bug on Impale based spell.
* Changed Barrage to Hunted Arrow for Deadeye.
* Fixed Grave Robber Tooltip.
* Fixed Impale Based spell not stopping when casted out of map bounds.
* Fixed Whirlwind not stopping when casted out of map bounds.
* Improved Geodart reacting on flying units.
* Changed some parts of the terrain, mostly on deep water areas.
* Fixed Strouf and Base Capture Bug.
* Changed Upgrade Cost on Training Ranged Sharpshooters and Increasing Range Units.
* Changed Homing pick radius from 200 to 250.
* Homing now shows area of effect.
* Added ultimate ability to Bato: Valley Crush.
* Added ultimate ability to Jonadrian: Divide and Combine (idea by Zack1996).
* Temporarily removed abilities on Bosses (Ancient Guardian and Strouf).
* Changed Icon on Supreme Strength.
 

Zack1996

Working on a Map
Reaction score
68
Woah! The latest spoiler map is awesome~!
Valley Crusher looks cool and is rather powerful for a 110 mana spell! However, it seems to be a rather weak ultimate compared to some others. Maybe you should make it like, create some trench and make enemies slide into it. Then Jungle Giant can use Earth Slam and hit lots of people.
I like the Alchemist's ultimate! Its really fun to use. However, it would be cool if they stated what ability you cast. Like Nature+Earth = Magical Bird (or whatever that bird thingy is called).
Coming to the topic of the bird spell, I realised that it is extremely powerful a spell. I managed to kill the Naga thing when he has about 1k health left with one cast. That's kinda crazy.
The alchemist can play sooooo many roles and that kinda makes him extremely powerful. His servants' special abilties are rather annoying if you're the enemy :S

Looks awesome! Keep up the great work! +REP for the awesome map!
PS: I pwned the Sea Giant thing with one cast of every spell the alchemist has XD
PPS: All the testing with alchemist was done with a level 20 alchemist.
 

waaaks!

Zinctified
Reaction score
255
Maybe you should make it like, create some trench and make enemies slide into it. Then Jungle Giant can use Earth Slam and hit lots of people.
lol
Your mind is full of havoc, have mercy with your enemies.
I really thought that is enough for Jungle Giant, in my opnion, he is well balanced with other heroes, while he is a strength type hero, he has a hard butt compared to others like the Alchemist which is fragile in battle.

For the Alchemist, I forgot to add the spell's description for each combination, I'll post it now. Yes he really deals a lot of damage in battle, if someone can test the map in a multiplayer and try the Alchemist's effectiveness in battle, then report it here, that would be great, so that I can balance him out.

Divide and Combine full code, I don't care if you use the code in your map, as long as you know what you are doing. Also the code requires some systems which I cannot tell because I'm to lazy to track them all.

The description for each combination is posted inside the code, just scroll down.
JASS:
scope DivideandCombine initializer init

globals
    private constant integer spell = 'A00B'
endglobals

//Land - 1
//Grass - 2
//Water - 3

//***************************************************
//* Sand Strike - Starting Point
//*  Earth
//*     Bombards the target area with stones, dealing
//*     40/50/60 area damage on collision and dealing
//*     70/80/90 area damage on ground impact.
//***************************************************
globals
    private constant string ssfx = "abilities\\weapons\\DemolisherMissile\\DemolisherMissile.mdl"
    private constant string ssmodel = "Abilities\\Weapons\\AncientProtectorMissile\\AncientProtectorMissile.mdl"
endglobals

private struct ssCollider extends xecollider
    unit c
    real tx
    real ty
    
    method onUnitHit takes unit u returns nothing
        local xedamage xe
        local integer l = GetUnitAbilityLevel(.c,spell)
        if IsUnitEnemy(u,GetOwningPlayer(.c)) and GetWidgetLife(u) > 0.405 then
            set xe = xedamage.create()
            set xe.dtype = DTEARTH
            call xe.factor(UNIT_TYPE_STRUCTURE,0.5)
            call xe.damageAOE(.c,.x,.y,200.0,30.0 + l * 10)
            call xe.destroy()
            if not IsUnitType(u,UNIT_TYPE_STRUCTURE) then
                call UnitStun(u,.c,0.1)
            endif
        endif
    endmethod
    
    method loopControl takes nothing returns nothing
        local real dis = SquareRoot((.tx-.x)*(.tx-.x) + (.ty-.y)*(.ty-.y))
        if dis < 50.0 then
            call .terminate()
        endif
    endmethod
    
    method onDestroy takes nothing returns nothing
        local xedamage xe = xedamage.create()
        local integer l = GetUnitAbilityLevel(.c,spell)
        call ShakeCamera(GetOwningPlayer(.c),5)
        set xe.dtype = DTEARTH
        call xe.factor(UNIT_TYPE_STRUCTURE,0.5)
        call xe.damageAOE(.c,.x,.y,200.0,60.0 + l * 10)
        call xe.destroy()
        call DestroyEffect(AddSpecialEffect(ssfx,.x,.y))
    endmethod
endstruct

private struct sandStrike
    unit ssc
    real ssx
    real ssy
    integer ssn = 0
    static method SandStrikeChild takes nothing returns nothing
        local timer t = GetExpiredTimer()
        local sandStrike ss = GetTimerData(t)
        local real x = GetUnitX(ss.ssc)
        local real y = GetUnitY(ss.ssc)
        local real rana = I2R(GetRandomInt(0,360))
        local real tx = ss.ssx + I2R(GetRandomInt(0,400)) * Cos(rana)
        local real ty = ss.ssy + I2R(GetRandomInt(0,400)) * Sin(rana)
        local ssCollider xe
        if ss.ssn < 10 then
            set ss.ssn = ss.ssn + 1
            set xe = ssCollider.create(x,y,rana)
            set xe.fxpath = ssmodel
            set xe.direction = rana
            set xe.collisionSize = 75.0
            set xe.speed = 100.
            set xe.acceleration = 600.
            set xe.maxSpeed = 2000.0
            set xe.minSpeed = 550.
            set xe.angleSpeed = 5.0
            set xe.expirationTime = 5.0
            call xe.setTargetPoint(tx,ty)
            set xe.c = ss.ssc
            set xe.tx = tx
            set xe.ty = ty
        else
            call ReleaseTimer(t)
            call ss.destroy()
        endif
        set t = null
    endmethod
        
    static method create takes unit c, real tx, real ty returns sandStrike
        local sandStrike ss = sandStrike.allocate()
        local timer t = NewTimer()
        set ss.ssc = c
        set ss.ssx = tx
        set ss.ssy = ty
        call TimerStart(t,0.16,true,function sandStrike.SandStrikeChild)
        call SetTimerData(t,ss)
        set t = null
        return ss
    endmethod
endstruct
//***************************************************
//* Sand Strike - Ending Point
//***************************************************

//***************************************************
//* Gaia's Trail - Starting Point
//*  Plant
//*     Sends missiles from plant extracts to the
//*     target point, dealing 30/40/50 damage on
//*     collision and entangles them on the ground.
//*     Deals 60 area damage on ground impact.
//***************************************************
globals
    private constant string gtfx = "Units\\NightElf\\Wisp\\WispExplode.mdl"
    private constant string gtmodel = "Abilities\\Weapons\\KeeperGroveMissile\\KeeperGroveMissile.mdl"
    private constant integer gtabilid = 'A01N'
    private constant integer gtBuffId = 'B004'
    private constant string gtorder = "entanglingroots"
    private aBuffType gtBuff
endglobals

private struct gtCollider extends xecollider
    unit c
    real tx
    real ty
    
    method onUnitHit takes unit u returns nothing
        local xedamage xe
        local integer l = GetUnitAbilityLevel(.c,spell)
        if IsUnitEnemy(u,GetOwningPlayer(.c)) and GetWidgetLife(u) > 0.405 then
            set xe = xedamage.create()
            set xe.dtype = DTPLANT
            call xe.factor(UNIT_TYPE_STRUCTURE,0.5)
            call xe.damageTarget(.c,u,20.0+10*l)
            call xe.destroy()
            if not IsUnitType(u,UNIT_TYPE_STRUCTURE) then
                call ABuffApply(gtBuff,u,.c,1.5+0.5*l,l,0)
            endif
        endif
    endmethod
    
    method loopControl takes nothing returns nothing
        local real dis = SquareRoot((.tx-.x)*(.tx-.x) + (.ty-.y)*(.ty-.y))
        if dis < 50.0 then
            call .terminate()
        endif
    endmethod
    
    method onDestroy takes nothing returns nothing
        local xedamage xe = xedamage.create()
        call ShakeCamera(GetOwningPlayer(.c),5)
        set xe.dtype = DTPLANT
        call xe.factor(UNIT_TYPE_STRUCTURE,0.5)
        call xe.damageAOE(.c,.x,.y,200.0,60.0)
        call xe.destroy()
        call DestroyEffect(AddSpecialEffect(gtfx,.x,.y))
    endmethod
endstruct

private struct gaiasTrail
    unit gtc
    real gtx
    real gty
    integer gtn = 0
    static method gaiasTrailChild takes nothing returns nothing
        local timer t = GetExpiredTimer()
        local gaiasTrail gt = GetTimerData(t)
        local real x = GetUnitX(gt.gtc)
        local real y = GetUnitY(gt.gtc)
        local real rana = I2R(GetRandomInt(0,360))
        local real tx = gt.gtx + I2R(GetRandomInt(0,400)) * Cos(rana)
        local real ty = gt.gty + I2R(GetRandomInt(0,400)) * Sin(rana)
        local gtCollider xe
        if gt.gtn < 10 then
            set gt.gtn = gt.gtn + 1
            set xe = gtCollider.create(x,y,rana)
            set xe.fxpath = gtmodel
            set xe.direction = rana
            set xe.collisionSize = 75.0
            set xe.speed = 100.
            set xe.acceleration = 600.
            set xe.maxSpeed = 2000.0
            set xe.minSpeed = 550.
            set xe.angleSpeed = 5.0
            set xe.expirationTime = 5.0
            call xe.setTargetPoint(tx,ty)
            set xe.c = gt.gtc
            set xe.tx = tx
            set xe.ty = ty
        else
            call ReleaseTimer(t)
            call gt.destroy()
        endif
        set t = null
    endmethod
        
    static method create takes unit c, real tx, real ty returns gaiasTrail
        local gaiasTrail gt = gaiasTrail.allocate()
        local timer t = NewTimer()
        set gt.gtc = c
        set gt.gtx = tx
        set gt.gty = ty
        call TimerStart(t,0.16,true,function gaiasTrail.gaiasTrailChild)
        call SetTimerData(t,gt)
        set t = null
        return gt
    endmethod
endstruct

private function gtEntangle takes aBuff eb returns nothing
    local xecast xc = xecast.createA()
    set xc.abilityid = gtabilid
    set xc.owningplayer = GetOwningPlayer(eb.caster)
    set xc.level = eb.level
    set xc.orderstring = gtorder
    set xc.recycledelay = 2.0
    call xc.castOnTarget(eb.target.u)
endfunction

private function gtClean takes aBuff eb returns nothing
    call UnitRemoveAbility(eb.target.u,gtBuffId)
endfunction

//***************************************************
//* Gaia's Trail - Ending Point
//***************************************************

//***************************************************
//* Quick Sand - Starting Point
//*  Water
//*     Enchants the target point with water and sand,
//*     creating a quick sand that sucks enemy units
//*     near 600 range from it, dealing damage on enemy
//*     units that comes within 300 range of the quick
//*     sand. Deals 80/100/120 per second.
//***************************************************
globals
    private constant real qsDur = 5.0
    private constant real qsTick = 0.025
    private constant string qsMDL = "Abilities\\Spells\\Human\\FlameStrike\\FlameStrikeTarget.mdl"
endglobals

private struct quickSand
    unit c
    real tx
    real ty
    real elapsed
    integer l
    
    static method qsPull takes nothing returns boolean
        local timer t = GetExpiredTimer()
        local quickSand d = GetTimerData(t)
        local group g = NewGroup()
        local unit u
        local real px
        local real py
        local real a
        local xedamage xe = xedamage.create()
        set xe.dtype = DTWATER
        set xe.exception = UNIT_TYPE_STRUCTURE
        call xe.damageAOE(d.c,d.tx,d.ty,300.0,(20 * d.l + 60) * qsTick)
        call xe.destroy()
        call GroupEnumUnitsInRange(g,d.tx,d.ty,600.0,null)
        set d.elapsed = d.elapsed + qsTick
        loop
            set u = FirstOfGroup(g)
            exitwhen u == null
            if IsUnitEnemy(u,GetOwningPlayer(d.c)) and GetWidgetLife(u) > 0.405 and not IsUnitType(u,UNIT_TYPE_STRUCTURE) then
                set a = Atan3(GetUnitX(u),GetUnitY(u),d.tx,d.ty)
                set px = GetUnitX(u) + 5 * Cos(a)
                set py = GetUnitY(u) + 5 * Sin(a)
                call SetUnitX(u,px)
                call SetUnitY(u,py)
            endif
            call GroupRemoveUnit(g,u)
        endloop
        call ReleaseGroup(g)
        set g = null
        set u = null
        if d.elapsed >= qsDur then
            call ReleaseTimer(t)
            call d.destroy()
        endif
        return true
    endmethod
    
    private method onDestroy takes nothing returns nothing
        set .elapsed = 0
    endmethod
    
    static method create takes unit c, real tx, real ty, integer l returns quickSand
        local quickSand d = quickSand.allocate()
        local timer t = NewTimer()
        set d.c = c
        set d.tx = tx
        set d.ty = ty
        set d.l = l
        call StartTimedEffect(AddSpecialEffect(qsMDL,d.tx,d.ty),5.0)
        call TimerStart(t,qsTick, true, function quickSand.qsPull)
        call SetTimerData(t,d)
        call ShakeCamera(GetOwningPlayer(c),5)
        set t = null
        return d
    endmethod
endstruct
//***************************************************
//* Quick Sand - Ending Point
//***************************************************

//***************************************************
//* Tsunami - Starting Point
//*  Water
//*     Conjures a Tsunami from Jon to the target point,
//*     dragging enemy units near the tsunami, dealing
//*     100/200/300 damage per second on drag, slows and deals
//*     100 area damage on destruction.
//***************************************************
globals
    private constant integer tdspell = 'A01O'
    private constant integer tBuffId = 'B00G'
    private constant string torder = "slow"
    private constant string tmdl = "Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveMissile.mdl"
    private constant string tsfx = "Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveDamage.mdl"
    private aBuffType tBuff
    private xecast txecast
endglobals

private struct tsCollider extends xecollider
    unit c
    integer l
    real a
    
    method onUnitHit takes unit u returns nothing
        if IsUnitEnemy(u,GetOwningPlayer(.c)) and GetWidgetLife(u) > 0.405 and not IsUnitType(u,UNIT_TYPE_STRUCTURE) and not IsKnockedBack(u) then
            call KnockbackTarget(.c,u,.a,600,600,false,false,false)
            call ShakeCamera(GetOwningPlayer(u),10)
            call ShakeCamera(GetOwningPlayer(.c),5)
        endif
    endmethod
    
    method loopControl takes nothing returns nothing
        local xedamage xe = xedamage.create()
        set xe.dtype = DTWATER
        set xe.exception = UNIT_TYPE_STRUCTURE
        call xe.useSpecialEffect(tsfx,"chest")
        call xe.damageAOE(.c,.x,.y,300.0,XE_ANIMATION_PERIOD*(100*.l))
        call xe.destroy()
    endmethod
    
    private method onDestroy takes nothing returns nothing
        local xedamage xd = xedamage.create()
        local group g = NewGroup()
        local unit u
        set xd.dtype = DTWATER
        set xd.exception = UNIT_TYPE_STRUCTURE
        call xd.useSpecialEffect(tsfx,"chest")
        call xd.damageAOE(.c,.x,.y,500.0,100.0)
        call GroupEnumUnitsInRange(g,.x,.y,500.0,null)
        loop
            set u = FirstOfGroup(g)
            exitwhen u == null
            if IsUnitEnemy(u,GetOwningPlayer(.c)) and GetWidgetLife(u) > 0.405 and not IsUnitType(u,UNIT_TYPE_STRUCTURE) then
                call ABuffApply(tBuff,u,.c,0.5+0.5*.l,.l,0)
            endif
            call GroupRemoveUnit(g,u)
        endloop
        call ReleaseGroup(g)
        set g = null
        set u = null
        call xd.destroy()
    endmethod
endstruct

private struct tsunami
    static method create takes unit c, real tx, real ty, integer l returns tsunami
        local tsunami ts = tsunami.allocate()
        local real x = GetUnitX(c)
        local real y = GetUnitY(c)
        local real a = Atan3(x,y,tx,ty)
        local tsCollider xe = tsCollider.create(x,y,a)
        call ShakeCamera(GetOwningPlayer(c),5)
        set xe.fxpath = tmdl
        set xe.expirationTime = 1200. / 600.
        set xe.collisionSize = 300.0
        set xe.speed = 600.0
        set xe.z = 50.0
        set xe.scale = 1.25
        set xe.c = c
        set xe.l = l
        set xe.a = a
        return ts
    endmethod
endstruct

private function tSlow takes aBuff eb returns nothing
    local xecast xe = xecast.createA()
    set xe.abilityid = tdspell
    set xe.orderstring = torder
    set xe.owningplayer = GetOwningPlayer(eb.caster)
    set xe.level = eb.level
    call xe.castOnTarget(eb.target.u)
endfunction

private function tClean takes aBuff eb returns nothing
    call UnitRemoveAbility(eb.target.u,tBuffId)
endfunction
//***************************************************
//* Tsunami - Ending Point
//***************************************************

//***************************************************
//* Tree of Life
//*  None
//*     Creates the Tree of Life and heals nearby 
//*     friendlies for 10/20/30 seconds.
//***************************************************
globals
    private constant integer tlunit = 'e005'
    private constant string tlsfx = "Abilities\\Spells\\NightElf\\Tranquility\\Tranquility.mdl"
endglobals

private struct treeOfLife
    unit d
    
    static method dead takes nothing returns boolean
        local timer t = GetExpiredTimer()
        local treeOfLife tl = GetTimerData(t)
        call KillUnit(tl.d)
        call ReleaseTimer(t)
        call tl.destroy()
        set t = null
        return true
    endmethod
    
    static method create takes unit c, real tx, real ty, integer l returns treeOfLife
        local treeOfLife tl = treeOfLife.allocate()
        local timer t = NewTimer()
        call ShakeCamera(GetOwningPlayer(c),5)
        set tl.d = CreateUnit(GetOwningPlayer(c),tlunit,tx,ty,0.0)
        call TimerStart(t,10.0*l,false,function treeOfLife.dead)
        call StartTimedEffect(AddSpecialEffect(tlsfx,tx,ty),10.0*l)
        call SetTimerData(t,tl)
        set t = null
        return tl
    endmethod
endstruct
//***************************************************
//* Tree of Life - Ending Point
//***************************************************

//***************************************************
//* Acid Terror
//*  Plant
//*     Enchants the ground with acid, creating explosions 
//*     of acid in random points near the target that deals
//*     50/100/150 area damage.
//***************************************************
globals
    private constant string atsfx1 = "Abilities\\Spells\\Other\\AcidBomb\\BottleMissile.mdl"
    private constant string atsfx2 = "Objects\\Spawnmodels\\Naga\\NagaBlood\\NagaBloodWindserpent.mdl"
endglobals

private struct acidTerror
    unit c
    real tx
    real ty
    integer l
    integer ctr
    
    static method child takes nothing returns boolean
        local timer t = GetExpiredTimer()
        local xedamage xe = xedamage.create()
        local acidTerror at = GetTimerData(t)
        local real px = at.tx + I2R(GetRandomInt(0,400)) * Cos(I2R(GetRandomInt(0,360)))
        local real py = at.ty + I2R(GetRandomInt(0,400)) * Sin(I2R(GetRandomInt(0,360)))
        set xe.dtype = DTPLANT
        set xe.exception = UNIT_TYPE_STRUCTURE
        call xe.damageAOE(at.c,px,py,100.0,50*at.l)
        call ShakeCamera(GetOwningPlayer(at.c),5)
        call DestroyEffect(AddSpecialEffect(atsfx1,px,py))
        call DestroyEffect(AddSpecialEffect(atsfx2,px,py))
        call xe.destroy()
        set at.ctr = at.ctr + 1
        if at.ctr >= 50 then
            set at.ctr = 0
            call ReleaseTimer(t)
            call at.destroy()
        endif
        set t = null
        return true
    endmethod
    
    static method create takes unit c, real tx, real ty, integer l returns acidTerror
        local acidTerror at = acidTerror.allocate()
        local timer t = NewTimer()
        set at.c = c
        set at.tx = tx
        set at.ty = ty
        set at.l = l
        call TimerStart(t,0.1,true,function acidTerror.child)
        call SetTimerData(t,at)
        set t = null
        return at
    endmethod
endstruct
//***************************************************
//* Acid Terror - Ending Point
//***************************************************

private struct data
    unit c
    real tx
    real ty
    
    static method create takes unit c, integer e1, integer e2, real tx, real ty returns data
        local data d = data.allocate()
        local sandStrike ss
        local gaiasTrail gt
        local quickSand qs
        local tsunami ts
        local treeOfLife tl
        local acidTerror at
        local integer l = GetUnitAbilityLevel(c,spell)
        set d.c = c
        set d.tx = tx
        set d.ty = ty
        
        if e1 == 1 and e2 == 1 then 
            set ss = sandStrike.create(d.c,d.tx,d.ty) // sand + sand
        elseif (e1 == 2 and e2 == 1) or (e1 == 1 and e2 == 2) then
            set gt = gaiasTrail.create(d.c,d.tx,d.ty) // sand + grass
        elseif (e1 == 3 and e2 == 1) or (e1 == 1 and e2 == 3) then
            set qs = quickSand.create(d.c,d.tx,d.ty,l) // sand + water
        elseif e1 == 3 and e2 == 3 then
            set ts = tsunami.create(d.c,d.tx,d.ty,l) // water + water
        elseif (e1 == 2 and e2 == 3) or (e1 == 3 and e2 == 2) then
            set tl = treeOfLife.create(d.c,d.tx,d.ty,l)// grass + water
        elseif e1 == 2 and e2 == 2 then
            set at = acidTerror.create(d.c,d.tx,d.ty,l)// grass + grass
        endif
        return d
    endmethod
endstruct

private function act takes nothing returns nothing
    local unit c = SpellEvent.CastingUnit
    local real x = GetUnitX(c)
    local real y = GetUnitY(c)
    local real x2 = SpellEvent.TargetX
    local real y2 = SpellEvent.TargetY
    local integer e1 = 0
    local integer e2 = 0
    local data d
    
    if IsTerrainPathingType(x,y,TERRAIN_PATHING_LAND) then
        if GetTerrainType(x,y) == 'Zdrt' or GetTerrainType(x,y) == 'Zdtr' or GetTerrainType(x,y) == 'Zbks' or GetTerrainType(x,y) == 'Zbkl' or GetTerrainType(x,y) == 'Zsan' or GetTerrainType(x,y) == 'Ztil' then
            set e1 = 1
        elseif GetTerrainType(x,y) == 'Zdrg' or GetTerrainType(x,y) == 'Zgrs' or GetTerrainType(x,y) == 'Zvin' then
            set e1 = 2
        endif
    elseif IsTerrainPathingType(x,y,TERRAIN_PATHING_SHALLOW) then
        set e1 = 3
    elseif IsTerrainPathingType(x,y,TERRAIN_PATHING_DEEP) then
        set e1 = 4
    endif
    
    if IsTerrainPathingType(x2,y2,TERRAIN_PATHING_LAND) then
        if GetTerrainType(x2,y2) == 'Zdrt' or GetTerrainType(x2,y2) == 'Zdtr' or GetTerrainType(x2,y2) == 'Zbks' or GetTerrainType(x2,y2) == 'Zbkl' or GetTerrainType(x2,y2) == 'Zsan' or GetTerrainType(x2,y2) == 'Ztil' then
            set e2 = 1
        elseif GetTerrainType(x2,y2) == 'Zdrg' or GetTerrainType(x2,y2) == 'Zgrs' or GetTerrainType(x2,y2) == 'Zvin' then
            set e2 = 2
        endif
    elseif IsTerrainPathingType(x2,y2,TERRAIN_PATHING_SHALLOW) then
        set e2 = 3
    elseif IsTerrainPathingType(x,y,TERRAIN_PATHING_DEEP) then
        set e2 = 4
    endif
    set d = data.create(c,e1,e2,x2,y2)
    set c = null
endfunction

private function init takes nothing returns nothing
    call RegisterSpellFinishResponse(spell,act)
    set gtBuff = aBuffType.create()
    set gtBuff.eventCreate = gtEntangle
    set gtBuff.eventCleanup = gtClean
    set tBuff = aBuffType.create()
    set tBuff.eventCreate = tSlow
    set tBuff.eventCleanup = tClean
    call XE_PreloadAbility(gtabilid)
    call XE_PreloadAbility(tdspell)
endfunction

endscope
 

Zack1996

Working on a Map
Reaction score
68
Damn, what I just typed out just now got deleted cos I closed my browser by accident -_-.
Anyway, a quick wrap up; I played two games with a guy, I used Berserker in the First and Sinnergy in the second. The other player (.Lax) was using Mirage Heroine in the First and Jungle Giant in the Second.
Somethings I noticed: The Jungle Giant had two skills that damages buildings, ground slam and his ultimate. Berserker's Ground Stomp also has a tooltip error since he doesn't stun nearby units. Leap has quite a low cast range, maybe nullify the damage at early levels and increase the range over the levels.
Other than that, just view the replays (you need the latest public RotG map in a folder in your root maps folder called Member's Projects) You should probably view it at 2x speed and slow down when the heroes clash, that would save you quite some time.

Here are the replays:
Replay 1
Replay 2

Good luck with balancing!
 

waaaks!

Zinctified
Reaction score
255
@zack1996
Thanks for the the replays, I really appreciate them. Just a question, what patch did you use?

Anyway, I suggest making the heroes, the fixing them all
What?

I'm planning on remaking Sinnergy, while some of his spells really don't match with what I want. He's my favorite hero, I hope he comes out good.

Thanks

EDIT: Done watching the replays. I had fun watching you guys beating each other, lol. I'm so jealous, I wanted to play with you guys.
--------------------------
Comments:
Now I know why lots of people think that Sin is so weak in battle. I thought you guys noticed on how to use Fire Ball, cast Fire Ball, if Fire Ball is near the enemy you want to hit, try to recast it again, it makes it explode the Fire Ball, dealing explosion damage. When the spell is cast, a spell will replace the cast spell, which makes the fire ball explode, with this, you will have great control with the fire ball.

For Earth Slam and spells with Impale System based abilities, I really wonder why does it bug on heroes, while units don't? This maybe is a Unit Indexing problem, I'll try to ask for help from the people who made the systems I am using.

For Force Throw, the "other" guy complained about why doesn't the spell work, he only thought it doesn't work because the thrown unit won't slide to the target, of course it won't, because force throw will detect if it hits another enemy unit, not only the target unit, in the replay, I saw him cast on Sin with lots of enemy units in front of Sin, when the unit is sliding, it hits to another enemy unit, and noticed that the thrown unit didn't follow Sin which is his target. It is really not a bug, it just lack of details in the tool tip, or he just didn't read the description clearly.

For Ground Stomp, I removed the stun from the War Stomp based spell, which I forgot to manually stun enemy units using some system in my map.

For Illusory Warrior, its just some typo, which is a result of using lots of Fill Data Fields command in object editor.

It would be really fun if I can play with you guys.
Thanks for the replays Zack1996, I hope you can add more, and I also hope I can play with you, so that I can clearly find the bug.
 

waaaks!

Zinctified
Reaction score
255
Made a very fast update.
Realms of the Genesis
Version 3
Change Log

* Fixed Barbarian Icon not showing up in the multiboard.
* Fixed a bug on Impale System not working on heroes that die with it.
* Fixed Illusory Warrior tool tip.
* Fixed Ground Stomp not stunning enemy units.
* Changed Fire Ball Explode icon for optimized visualization.
* Reduced collision detect on Force Throw from 60 to 50.
* Optimized some srcipts in the map that may cause lag.
* Increased damage on Valley Scatter.
* Recoded Sinner's Spree.
* Improved Damage Show system, showing red damage when you receive damage.
* Nerfed Divide and Combine.
* Added Message on Divide and Combine when successfully cast.
* Reduced Mana Cost and Cooldown on Illusory Warrior.

EDIT: Does anyone have time to play with me in garena? I don't know how long can I play with you guys, but if there are any emergencies which needs me to quit, then that will be the end of the game.

Add me at garena "waaaks!" without the quotes, I'll try to find someone to play with right now. I'm using patch 1.23a.

EDIT: I'm all alone :( .
Replay (Latest RotG v3.0 Spoiler in "Maps\Download" folder)
 

Zack1996

Working on a Map
Reaction score
68
I added you I believe. Really want to play with you, can't get a game in Garena with public people...
I should be able to play most of the time, its holidays now XD
PS: I'm Wizard1996 but I think something's wrong with my buddy thingy
 

FhelZone

Have a drink of a nice cold mellowberry juice!
Reaction score
103
Hey waaaks! its been long since I've last played your map, but doesn't the old map had more heroes than the current one?
 

Zack1996

Working on a Map
Reaction score
68
oh yeah, but i freakin lost my open version, and the last version sucks
I think he means that he lost the open version for RotG: Reborn (the second one).
Anyway, there are some professional hackers out there, they could probably get the code in those protected versions out. I believe Vexorian is one of them (he mentioned something about it in his Optimizer readme)
 

waaaks!

Zinctified
Reaction score
255
yep really, vexorian can re-open protected maps, but its forbidden. Anyways, yeah I was talking about RotG v1.35 open, I've lost it not RotG v3, now I'm very careful with my maps, each time I finish editing the map, I upload it on my e-mail.
 

waaaks!

Zinctified
Reaction score
255
lol, Reaper (another pinoy, actually also in Butuan City where I live, and former Computer Science Classmate, haha nice!!)

W.I.P
Apocalypse
The Revelation
Fire

A Sage that was never believed by the people, who turned to mastering
darkness and evil, learning dark magics and the mysteries of the void.
Promising himself that what he believed is true. Now that he is empowered
by the darkness, he will prove the people that he was true about his words,
words that once scared the people "The End of the World" which is possible
for him to do.

Inferno - Calls down a fiery meteor from the sky that strikes on the ground,
sharing the damage dealt to enemy units affected by the meteor, decreasing
the initial damage by 10 per enemy unit affected and stun duration by 0.10.

90/180/270/360 damage - 1.8 seconds initial stun.

Traumatic Blow - Casts some kind of dark mind magic to the enemy unit,
throwing enemy units near the targeted unit, sharing Apocalpyse's
dark and apocalyptic experiences to the target, increasing the target's
intelligence equal to Apocalypse's intelligence but slows and damages it
with the shared intelligence multiplied by 2 for 2 seconds, dealing
bonus damage.

40/80/120/160 damage.

Mind Shatter - If the target has higher intelligence than Apocalypse, he is
able to borrow it for 5 seconds, while deals damage if the target has
lower intelligence.

40/80/120/160 damage.
25%/50%/75%/100% intelligence stealed.

Wisdom Bomb - Summons a wisdom-based bomb to a target point that detonates
after 1 second. Deals damage in the location equal to Apocalypse's
Intelligence multiplied by a number. With the great force created by the bomb,
enemy units affected will be thrown and will lose some mana.

1/2/3/4 multiplier.
15%/30%/45%/60% mana burn.

Armageddon (Ultimate) - Apocalypse proves his witnesses that the end of the world in a
near future is possible, calling down fiery meteors from the sky that crashes
to the ground, dealing area damage and igniting affected units with the fires
of wisdom. Fires of Wisdom deals damage equal to Apocalypse's intelligence
per second, for 5 seconds.

55/110/165 damage.


Default Ability:
Fear of the Revelation - With Apocalypse's presence, enemy units near him
will feel pressure, making them unable to concentrate in battle having them
to miss their target for 15% on attack.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top