Arena Mini Ashenvale Arena


Also known as azwraith_ftL.
Mini Ashenvale Arena
Demo available! See the bottom of the post for the map and some info.

Genre: (Mini) Arena
Players: 10
Teams: 5
Map Size: 64x64 (or 92x92, I can't remember o_O)

Well, this is my second map that I'm going to release in public. I got inspired by emjlr3's Mini Element Arena and decided to make an arena type one. At first, this map was going to be a WoW arena, but then I decided that WoW is plain in spells - just missiles, instant damage, and dps. Nothing else! No flashy things and breath taking abilities! Instead of starting it again, I thought of deleting all those WoW stuff and replacing them with the latest systems offers.

It's just a 64x64 size map for 10 players - 5 teams with 2 players, fighting until a team scores X kills and wins. I'm still considering what number of kills to choose.

Nothing special here. You will choose your Hero from a hero selection system: in other words, you click on a hero and browse his abilities and if you like him, you choose him. Max level is 20.

Items? Oh, right... There won't be stuff like recipes if you want to know that (on second thought, I might include). I'll make only one shop, or two, nothing else. It's a fast arena you know... But! There will be extra recipes in the -boss mode. (more explanation a little bellow)

Yes, there will be a boss mode where you will try your skills and in the best case scenario - defeat him. The host will activate the mode at the beginning of the game by typing -boss (or something similar, I'll think of it). All players become allies, because, after all he won't be some easy boss - he will cast destructive spells and debuffs that will harm you really badly. You will buy whatever you want items - choose wisely! So, like in WoW, you will need a tank and a few dps-ers and healers. Choose your team wisely, because the boss (Illidan, haven't I mentioned that a few lines above?) won't be beaten like taking candy from a baby. In the end, if you succeed in defeating Illidan, the host will have an option - start the game with normal fighting until reaching X kills, or end it. This way, if some players wanted to try their skills against the boss they might leave. Or maybe they'll continue to play for fun. I will also include a text document that will describe how the boss reacts and what effects do the spells have (because they'll be really naughty if you don't evade them ^^).
One of the boss spells is my submitted spell for the Hell contest. I attached a demo map if someone wants to check it out.

Other info:
Some gameplay info: At the beginning you will be allowed to choose your Hero class from a Hero Selection System at the center of the map. Heroes are also revived at the center of the map (or maybe I'll edit it and make it a little more randomized). After that you can battle with the other players until your team makes X (not chosen yet; the demo map has 20) kills. You will be able to buy items that will help you more or less.
Can't think what else to include. Ask whatever you want.

Currently I'm working on the boss, after that I'll finish the Hero spells and lastly I'll start working on items.

Current status:
- Terrain: 100% Finished!
- Heroes: 100% Finished!
- Spells: 15%
- Triggers and systems: 100% Finished!
- Items: 0%
- Boss: 40%
Overall status: 59.166%

Some screenies on the current Heroes' spells and a screenshot of the Hero selection gallery (3 all).

Final words:
Spells and systems are taken from's resource section or made by myself. Credits are given to all who I've used their resources. Thanks a lot for your great submissions :thup:. Without all these resources this map wouldn't have been started.

First release (Demo):
Well, I decided to post the map (protected ofc. ^^) so you guys can see how work is going on. As for now, there are only 4 Heroes. Two of them have 3 spells and the other two have 2 spells. Tomorrow or the day after tomorrow, the Heroes should be finished (if I don't lack spell ideas again...). Have fun.
Don't pay attention to the loading screen... I haven't edited it from a while.

Credited users
Cohadar - ABC, ABCT, PUI, TT, Dummy
Magentix - AMS, amsTS, MCP
ReVolver(Orc_Tamer) - WaitMissileSpeedDamage, HSS, Attribute System (in future)
Orc_Tamer - Recipe System (in future)

Cohadar - Regrow Trees, Creep Revive, OIDs
emjrl3 - Handle Counter
Vexorian - SimError, CSSafety

Cohadar - Immolation, Magic Net
emjlr3 - Jumping Spell Template
Grundy - Shadow Assault
--Thanatos-- - Graveyard, Dragons' Horde
Hatebreeder - Hurricane

Hmm, 800 post.



The Evolved Panda Commandant
Staff member
Same; if I remember. :D :p I will definetly try out Boss mode! I love killing bosses. <3

Can't wait for this to releaseee! :thup:


Also known as azwraith_ftL.
Ok guys, just to keep you in touch (plus, to bump the thread xD) - I made a new spell for the boss.


New Member
The uploaded name is not the same to the project's title? lol. Trying it out.

... seems like u uploaded a wrong map?


Ueki Fan (Ueki is watching you)
Nope, the map he uploaded is a Demo Map for a spell in the game :)
Read carefully.

cr4xzZz said:
One of the boss spells is my submitted spell for the Hell contest. I attached a demo map if someone wants to check it out.


Also known as azwraith_ftL.
> Overall status: 59.166% :rolleyes:
If you insist I will upload the current version with only 2 finished Heroes... :/


The Evolved Panda Commandant
Staff member
Bosses = COOL! I suggest making for a really early alpha test (for us of course :D) at least 4 heroes and 1 shop that is completed, and 1 boss to test. :) Good luck with this! :thup:


Also known as azwraith_ftL.
> Finish maybe the spells/heroes before you make the bosses? ^^
I lack ideas.. But I've started working on the third hero.

> I'd love to code some Spells for your Game...
Same goes for your Blood Oath :p

> Just gimme like a concept or something =)
I'll torture you with one spell if you really want to make something.. xD

> I suggest making for a really early alpha test
Hm, I'll think of it.


So many apples
Ok, so I'm done with the Code =)
Now, to import this, just create a trigger called 'Tornado'.
Important stuff is commented =)
scope Tornado
// Configurables
        private constant integer TORNADO_ID = 'A000' //Spell Raw Code
        private constant integer TORNADO_DUMMY = 'u001' //Dummy Unit
        private constant real TORNADO_AOE = 400 // Radius of the Max.random Movement of Dummy
        private constant real TORNADO_RAD = 200 // Radius for the Tornado Group Action
        private constant real TORNADO_MAX_DIST = 2500 // Max Distance for the Tornado to move
        private constant real TORNADO_UNIT_DIST = 220 //Knockback Distance
        private constant real TORNADO_SPEED = 20 // Speed of the Tornado / Knockback
        private constant string TORNADO_SFX = &quot;Abilities\\Spells\\Human\\FlakCannons\\FlakTarget.mdl&quot; //SFX for the knockback
        //================ Don't edit the globals below =====================================
        private constant group TORNADO_GROUP = CreateGroup()
        private constant group TORNADO_DEGROUP = CreateGroup()
        private real MaxX
        private real MaxY
        private real MinX
        private real MinY
    private constant function Damage takes real Lvl returns real
        return 25 * Lvl
// End Configurables    
//========================= Don't edit Below =====================
    private function RandomX takes real X, real Radius returns real
        local real Angle = GetRandomReal(0.0001,1) + 2 * bj_PI
        local real Bound = GetRandomReal(0,Radius)
            return X + Cos(Angle) * Bound
    private function RandomY takes real Y, real Radius returns real
        local real Angle = GetRandomReal(0.0001,1) + 2 * bj_PI
        local real Bound = GetRandomReal(0,Radius)
            return Y + Sin(Angle) * Bound
    private constant function GetX takes unit UX returns real
        local real X = GetUnitX(UX)
            return X
    private constant function GetY takes unit UY returns real
        local real Y = GetUnitY(UY)
            return Y
    private function SetUnitXY takes unit u, real x, real y returns nothing
        if x &lt; MaxX and x &gt; MinX and y &lt; MaxY and y &gt; MinY then
            call SetUnitX(u,x)
            call SetUnitY(u,y)
    private function DestroyTree takes nothing returns nothing
        call KillDestructable(GetEnumDestructable())
    private function DestroyTrees takes real Radius, real X, real Y returns nothing
        local rect R
        local real CentX = X
        local real CentY = Y
        local real Rad = Radius
            if (Rad &gt;=0) then
                set R = Rect(CentX - Rad,CentY - Rad,CentX + Rad,CentY + Rad)
                call EnumDestructablesInRect(R,null,function DestroyTree)
        call RemoveRect(R)
    private struct Group
        unit Picked
        unit Caster
        real Dist = TORNADO_UNIT_DIST
        real Angle
    private struct Torn
        unit Caster
        unit Dummy
        real X
        real Y
        real Dist = TORNADO_MAX_DIST
private function Trig_Tornado_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == TORNADO_ID

private function Tornado_Filter takes nothing returns boolean
    return IsUnitType(GetFilterUnit(),UNIT_TYPE_DEAD) == false and IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE) == false and IsUnitType(GetFilterUnit(),UNIT_TYPE_MAGIC_IMMUNE) == false and IsUnitInGroup(GetFilterUnit(),TORNADO_DEGROUP) == false

private function Tornado_Group_Move takes nothing returns boolean
    local Group Data = TT_GetData()
        local real PX = GetUnitX(Data.Picked)
        local real PY = GetUnitY(Data.Picked)
        local real X = PX + TORNADO_SPEED * Cos(Data.Angle * bj_DEGTORAD)
        local real Y = PY + TORNADO_SPEED * Sin(Data.Angle * bj_DEGTORAD)
            call SetUnitXY(Data.Picked,X,Y)
            call DestroyEffect(AddSpecialEffect(TORNADO_SFX,X,Y))
            set Data.Dist = Data.Dist - TORNADO_SPEED
                if Data.Dist &lt;= 0 then
                    call GroupRemoveUnit(TORNADO_DEGROUP,Data.Picked)
                        call Data.destroy()
                            return true
return false

private function Tornado_Group takes unit P, unit C, real X, real Y returns nothing
    local Group Data = Group.create()
        local real CX = X
        local real CY = Y
        local real PX
        local real PY
            set Data.Picked = P
            set Data.Caster = C
            set PX = GetUnitX(Data.Picked)
            set PY = GetUnitY(Data.Picked)
            set Data.Angle = bj_RADTODEG * Atan2(PY - CY,PX - CX)
        call TT_Start(function Tornado_Group_Move, Data)

private function Tornado_Move takes nothing returns boolean
    local Torn Data = TT_GetData()
        local real DummyX = GetUnitX(Data.Dummy)
        local real DummyY = GetUnitY(Data.Dummy)
        local real Angle = bj_RADTODEG * Atan2(Data.Y - DummyY,Data.X - DummyX)
        local real X = DummyX + TORNADO_SPEED * Cos(Angle * bj_DEGTORAD)
        local real Y = DummyY + TORNADO_SPEED * Sin(Angle * bj_DEGTORAD)
        local real DistX = Data.X - DummyX
        local real DistY = Data.Y - DummyY
        local real Dist = SquareRoot(DistX * DistX + DistY * DistY)
        local unit Picked
            if Dist &lt;= 20 then
                set Data.X = RandomX(GetX(Data.Caster),TORNADO_AOE)
                set Data.Y = RandomY(GetY(Data.Caster),TORNADO_AOE)
                call DestroyTrees(TORNADO_RAD,X,Y)
                call SetUnitXY(Data.Dummy,X,Y)
        call GroupEnumUnitsInRange(TORNADO_GROUP,X,Y,TORNADO_RAD,Condition(function Tornado_Filter))
                set Picked = FirstOfGroup(TORNADO_GROUP)
                    exitwhen Picked == null
                        if IsUnitEnemy(Picked,GetOwningPlayer(Data.Caster)) == true then
                            call Tornado_Group(Picked,Data.Caster,X,Y)
                            call GroupAddUnit(TORNADO_DEGROUP,Picked)
                            call UnitDamageTarget(Data.Caster,Picked,Damage(GetUnitAbilityLevel(Data.Caster,TORNADO_ID)),false,true,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,null)
                    call GroupRemoveUnit(TORNADO_GROUP,Picked)
        set Data.Dist = Data.Dist - TORNADO_SPEED
            if Data.Dist &lt;= 0 then
                call KillUnit(Data.Dummy)
                    call Data.destroy()
                        return true
set Picked = null
return false

private function Trig_Tornado_Actions takes nothing returns nothing
    local Torn Data = Torn.create()
        local real CasterX
        local real CasterY
        local real Angle
        local real X
        local real Y
    set Data.Caster = GetTriggerUnit()
    set CasterX = GetUnitX(Data.Caster)
    set CasterY = GetUnitY(Data.Caster)
    set Angle = GetUnitFacing(Data.Caster)
    set X = CasterX + 125 * Cos(Angle * bj_DEGTORAD)
    set Y = CasterY + 125 * Sin(Angle * bj_DEGTORAD)
    set Data.Dummy = CreateUnit(GetOwningPlayer(Data.Caster),TORNADO_DUMMY,X,Y,Angle)
    set Data.X = RandomX(CasterY,TORNADO_AOE)
    set Data.Y = RandomY(CasterY,TORNADO_AOE)
    call TT_Start(function Tornado_Move, Data)

function InitTrig_Tornado takes nothing returns nothing
    local trigger Trig = CreateTrigger(  )

    set MaxX = GetRectMaxX(bj_mapInitialPlayableArea) 
    set MaxY = GetRectMaxY(bj_mapInitialPlayableArea) 
    set MinX = GetRectMinX(bj_mapInitialPlayableArea)
    set MinY = GetRectMinY(bj_mapInitialPlayableArea)
    call TriggerRegisterAnyUnitEventBJ( Trig, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( Trig, Condition( function Trig_Tornado_Conditions ) )
    call TriggerAddAction( Trig, function Trig_Tornado_Actions )
    set Trig = null

*EDIT* Preferably base the spell of a non-target spell (Instant)
*EDIT* tested and made Code better =)



Also known as azwraith_ftL.
> Check my hero.
It looks interesting. But I'm more interested in some special effect spells, not attributes. Plus, it's GUI. I'm not interested in GUI. Good job anyway :thup:


Also known as azwraith_ftL.
Just to inform you, after a few weeks the first beta test version will be available, including 8 Heroes and the boss, which will be tweaked, until I make more balance changes. As for now it will and won't be easy to kill him. :) Stay tuned for more info.

> If you need Spells again, just give me PM or something =P
Won't be soon. I'll give you a long rest and then I'll torture you more. :p
If you need some help with Blood Oath, I'm here. :)
General chit-chat
Help Users
  • No one is chatting at the moment.
  • The Helper The Helper:
    It happens in corporations. They just absorb the companies they buy and it is not about the love of making awesome games it is how much money can we make with the least amount of cost.
  • The Helper The Helper:
    Blizzard is watered down now hopefully they can pull it together
  • The Helper The Helper:
    they got a server engineer job opening :)
  • Ghan Ghan:
    I really do not want to move to California otherwise I might consider it.
  • The Helper The Helper:
    yeah California is not anywhere you really want to live
  • The Helper The Helper:
    That is why I did not take the job Blizzard offered me back in the day, there is no way I could have moved my family there on what they were offering, not even close and that was like 20 years ago
  • The Helper The Helper:
    yeah they wanted me on the tech support team when they did not get me they got one of the next MVPs in Dinobot
  • The Helper The Helper:
    Dinobot was one of the youngest of the MVPs tkron probably could have worked for Blizzard but he had a good job in Chicago doing business programming already
  • The Helper The Helper:
    Dinobot probably still works for Blizzard would love to reconnect with that guy
  • The Helper The Helper:
    I wonder what ever happened to Wargasm?
  • The Helper The Helper:
    This new version of Xenforo really is awesome
  • Ghan Ghan:
    Wargasm is still around. He works for the domain registrar where is kept.

    Members online

    No members online now.


    Hive Workshop