• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

Hero Contest #2 - HQ Hero

Status
Not open for further replies.
Its kinda stupid though. Even if you made a hero that can tank an infinite amount of damage but has no offensive abilties, I believe that can still be considered balanced, as long as your opponent is not stupid enough to try and kill your hero while your units strike their base to death :S
Anyway, I decided to rework my idea of a combo hero. That's what it was meant to be. However, since comboing (mine was something like: Flame Rush, Rising Fist while flame rushing to hit units into the air, Infernal Fist and whack all the hit enemies to the ground and own) would be kinda weird in a melee game, I had to kill that idea.
Will update my progress soon, hope to see more WIP! xD.Schurke's looks good, but
I have no idea what it does now tho;)
 
Level 31
Joined
May 3, 2008
Messages
3,154
hahaha sept that was an awsome idea ;)

The :briggin: is always awesome.. :p

Omg! Masterhaosis! XD But i think its a bit overpower. I mean like 9% chance on each attack?

The converted unit is very weak and not every unit would be converted into Haosis whenever he was attacked as the aura does not effect structure, spell immune, undead unit and so on.

The aura are strong and effective against a large quantity of army, but not with the small amount.

And the hero are quite balance too, mountain king could defeat it.
 
Level 9
Joined
May 10, 2009
Messages
542
Whoever is doing that Chain Lightning ability with the custom model (is it...called Lightning Elemental?), should cease doing that ability, because...
A): Its...based on an existing ability with it appearing only to have a few extra stuff.
B): Uh...
Well, it'll be balanced, I'll be heading to stuff more ambitious, and I found a nice loophole in the rules (well, not really).
 
Level 22
Joined
Nov 14, 2008
Messages
3,256
Whoever is doing that Chain Lightning ability with the custom model (is it...called Lightning Elemental?), should cease doing that ability, because...
A): Its...based on an existing ability with it appearing only to have a few extra stuff.
B): Uh...
Well, it'll be balanced, I'll be heading to stuff more ambitious, and I found a nice loophole in the rules (well, not really).

it's me?

all custom abilities are based on custom abilities and no it isnt normal chain lightning and read the tooltip I had and you get it ;)
 
Level 18
Joined
Mar 13, 2009
Messages
1,411
When I thought melee heroes I thought people were talking about the heroes used in melee games (non-custom games) and not just the non-ranged heroes.

The converted unit is very weak and not every unit would be converted into Haosis whenever he was attacked as the aura does not effect structure, spell immune, undead unit and so on.

The aura are strong and effective against a large quantity of army, but not with the small amount.

And the hero are quite balance too, mountain king could defeat it.

Mountain King seems to hurt a lot with his Bash when testing D:

Hey and your hero is efficient too... in some way... can't be more effecient as a normal spell with new effects right? ;P
 
OH YES! We have a perfect example of an imba hero! The Mountain King!
Why? Well...
1) He has a 40% chance to bash for extra damage and stun for 2 seconds when he attacks.
2) He has a 75 mana nuke which does 300+ damage and stuns for 5 seconds!
3) He has an ultimate that makes him immune to magic, gives him 20 (I think) attack damage and 5 armour, together with 500 bonus health.

I mean, seriously. If everyone uses this guy as a basis for comparison, almost everyone who makes something rather balanced will get something like: 5/10! Unacceptably weak! The Mountain King kill your hero in 2-3 Storm Bolts and a few hits!
Can someone update the balance criteria? There's nothing stating to which hero it will be compared with.

Anyway, back to topic. I can't seem to do a JASS knockback. I'm kinda new to JASS and don't know vJASS (mainly cos JNGP doesn't seem to be working for me) so if anyone could help me, I would be really greatful :D. The ability doesn't seem to be damaging properly, would be great if somehow gave me a hand with it :). You don't need to post the reworked code, just tell me what's wrong.

JASS:
//**************************************************************************************************
//*
//*  Handle Variables Functions by Vexorian ([url]http://jass.sourceforge.net/doc/[/url])
//*
//*  -------------------------------
//*  Enables usage of game cache for
//*  transphering local variables
//*  beetveen functions.
//*  -------------------------------
//*
//*  Requires:
//*  ¯¯¯¯¯¯¯¯¯
//*  A global variable with name "cache" and type "GameCache" as an exact match
//*  note that the "LocalVars" function must be placed before anything in this
//*  map header expect this kind of comments
//**************************************************************************************************

function LocalVars takes nothing returns gamecache
    if udg_cache==null then
        set udg_cache=InitGameCache("cache")
    endif
    return udg_cache
endfunction

//-------------------------------------------------

function H2I takes handle h returns integer
    return h
    return 0
endfunction

function H2U takes handle h returns unit
    return h
    return null
endfunction


//-------------------------------------------------

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

//-------------------------------------------------

function SetHandleReal takes handle subject, string name, real value returns nothing
    if value==0 then
        call FlushStoredReal(LocalVars(), I2S(H2I(subject)), name)
    else
        call StoreReal(LocalVars(), I2S(H2I(subject)), name, value)
    endif
endfunction

//-------------------------------------------------

function SetHandleHandle takes handle subject, string name,  handle value returns nothing
    call SetHandleInt( subject, name, H2I(value) )
endfunction

//-------------------------------------------------

function GetHandleInt takes handle subject, string name returns integer
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
endfunction

//-------------------------------------------------

function GetHandleReal takes handle subject, string name returns real
    return GetStoredReal(LocalVars(), I2S(H2I(subject)), name)
endfunction


//-------------------------------------------------

function GetHandleHandle takes handle subject, string name returns handle
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    return null
endfunction

//-------------------------------------------------

function FlushHandleLocals takes handle subject returns nothing
    call FlushStoredMission(LocalVars(), I2S(H2I(subject)) )
endfunction

//=================================================
//= My Functions
//=================================================
function H2G takes handle h returns group
    return h
    return null
endfunction

//-------------------------------------------------

function H2SFX takes handle h returns effect
    return h
    return null
endfunction

//------------------------------------------------

function DestroyTrees takes nothing returns nothing
    if(GetDestructableTypeId(GetEnumDestructable()) == 'LTlt') then
        call KillDestructable(GetEnumDestructable())
    endif
endfunction

//------------------------------------------------

function KnockBack takes nothing returns nothing
    local timer kbtime = GetExpiredTimer()
    local unit u
    local integer kbcount = GetHandleInt(kbtime, "kbcount")
    local real kbspeed = GetHandleReal(kbtime, "kbspeed")
    local real kbslow = GetHandleReal(kbtime, "kbslow")
    local real kbangle
    local group kbgroup = H2G(GetHandleHandle(kbtime, "kbgroup"))
    local location locA
    local location locB
    loop
        set u = FirstOfGroup(kbgroup)
        exitwhen u == null
        call GroupRemoveUnit(kbgroup, u)
        set kbangle = GetHandleReal(u, "kbangle")
        set locA = GetUnitLoc(u)
        set locB = Location(GetLocationX(locA) + kbspeed * Cos(kbangle * bj_DEGTORAD), GetLocationY(locA) + kbspeed * Sin(kbangle * bj_DEGTORAD))
        call SetUnitPositionLoc(u, locB)
        if (IsTerrainPathable(GetLocationX(locA), GetLocationY(locA), PATHING_TYPE_FLOATABILITY))then
            call DestroyEffect(AddSpecialEffectLoc("Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveDamage.mdl", locA))
        else
            call DestroyEffect(AddSpecialEffectLoc("Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl", locA))
        endif
        set locA = null
        set locB = null
    endloop
    set kbspeed = kbspeed - kbslow
    call SetHandleReal(kbtime, "kbspeed", kbspeed)
    set kbcount = kbcount - 1
    call SetHandleInt(kbtime, "kbcount", kbcount)
    set u = null
    set locA = null
    set locB = null
    if (kbcount <= 0) then
        call PauseTimer(kbtime)
        call DestroyTimer(kbtime)
        call FlushHandleLocals(kbtime)
    endif
endfunction

//--------------------------------------------------

function UnitPathable takes location locA returns boolean
    local unit u = CreateUnitAtLoc(Player(15), 'n000', locA, 0.0)
    local location locB = GetUnitLoc(u)
    local real dx
    local real dy
    call RemoveUnit(u)
    set locA = null
    set locB = null
    set u = null
    set dx = GetLocationX(locB) - GetLocationX(locA)
    set dy = GetLocationY(locB) - GetLocationY(locA)
    return (SquareRoot(dx * dx + dy * dy) == 0.0)
endfunction

//==================================================

function Trig_InfernalSmash_Conditions takes nothing returns boolean
    return (GetSpellAbilityId() == 'A001')
endfunction

function Trig_InfernalSmash_Actions takes nothing returns nothing
    local timer kbtime = CreateTimer()
    local unit caster = GetTriggerUnit()
    local unit u
    local integer kbcount = 33
    local real rad = 375.0
    local real damage = GetUnitAbilityLevel(caster, GetSpellAbilityId()) * 50.0
    local real kbangle
    local real kbspeed
    local real kbslow
    local location locA = GetUnitLoc(caster)
    local location locB
    local group ug = CreateGroup()
    local group kbgroup = CreateGroup()
    call GroupEnumUnitsInRangeOfLoc(ug, locA, rad, null)
    loop
        set u = FirstOfGroup(ug)
        exitwhen u == null
        call GroupRemoveUnit(ug, u)
        call GroupAddUnit(kbgroup, u)
        if GetBooleanAnd(GetUnitState(u, UNIT_STATE_LIFE) == 0.0 , GetBooleanAnd(IsUnitEnemy(u, GetOwningPlayer(caster)), IsUnitType(u, UNIT_TYPE_FLYING) == false))then
            call UnitDamageTarget(caster, u, damage, false, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_FIRE, null)
            call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile.mdl", u, "chest"))
            set locB = GetUnitLoc(u)
            set kbangle = bj_RADTODEG * Atan2(GetLocationY(locB) - GetLocationY(locA), GetLocationX(locB) - GetLocationX(locA))
            call SetHandleReal(u, "kbangle", kbangle)
            call SetHandleReal(kbtime, "kbspeed", kbspeed)
            call SetHandleReal(kbtime, "kbslow", kbslow)
        endif
        set u = null
    endloop
    call SetHandleHandle(kbtime, "kbgroup", kbgroup)
    call SetHandleInt(kbtime, "kbcount", kbcount)
    call TimerStart(kbtime, 0.03, true, function KnockBack)
    set caster = null
    set ug = null
    set kbgroup = null
endfunction

//===========================================================================
function InitTrig_InfernalSmash takes nothing returns nothing
    set gg_trg_InfernalSmash = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ(gg_trg_InfernalSmash, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(gg_trg_InfernalSmash, Condition(function Trig_InfernalSmash_Conditions))
    call TriggerAddAction( gg_trg_InfernalSmash, function Trig_InfernalSmash_Actions )
endfunction

PS: I know it doesn't look good ATM, I just remade this skill today. Would also help if you commented on efficiency :)
PPS: Please don't ask why I'm using Vexorian's Handle Var system, I know there are better ways but many are in vJASS -_-
 
Level 18
Joined
Mar 13, 2009
Messages
1,411
My hero isn't made for fighting single enemies anyway, but that Mountain King just seems to be imbalanced in this case. My hero can't be tested on normal fights anyway, it got spells that support you in a totally different way. Balancing a skill that supports resources can't be tested in a normal 1 on 1 fight. Most of the other skills can be tested in some way.
On a 1 on 1 fight my hero would probably just die D:
 
Level 6
Joined
Apr 8, 2009
Messages
219
The :briggin: is always awesome.. :p



The converted unit is very weak and not every unit would be converted into Haosis whenever he was attacked as the aura does not effect structure, spell immune, undead unit and so on.

The aura are strong and effective against a large quantity of army, but not with the small amount.

And the hero are quite balance too, mountain king could defeat it.

Yeah. Youre right :p
 
Zack1996, if the code wasn't that long and I wasn't that tired I would have loved to help xD
Thanks! Could you look at it when you're feeling more up to the task? I would appreciate it greatly!
Also, the only part that you actually have to really look at the the part below all those Vex functions. I just added them there so it would be more convenient if someone copied and pasted it into JASS craft or something. Its way easier to read it that way (HAIL JASSCRAFT!)
Anyway, any more screenies for WIP? Would love to see some :)
Do we have to add some kind of way to test the heroes with melee heroes? I added a building that you can use to spawn a random race hero to test with (I used Dark Portal for the random hero thing XD). I realised my hero got pwned by a Paladin at level 1 :S. Will we get marked down for a hero being too weak?
Will we get marked down if the hero requires too much skill to play that everyone plays him crappily while the creator of the hero, who trained with the hero for half a month, pwns everything with him?
Balance is a rather controversial issue. How are you going to test balance? Pit all the heroes against each other with some troops each?
 
Level 6
Joined
Apr 8, 2009
Messages
219
Well you dont have to spend a hell lot of time on it if you dont wish that either. He said he was going to join for fun and i actually like it pretty much but yeah. It could be alot more advanced than that but... Well... Maybe he wants to map a bit more instead?
 
Level 7
Joined
Mar 6, 2008
Messages
322
well I think I'm going on a cyborg maybe dwarf cyborg or something I have some cool spell ideas. I hope no one wants to do something like this too anyway good luck to all participants.
 
  • Like
Reactions: Rmx
Level 7
Joined
Mar 6, 2008
Messages
322
I know what you mean but I want my hero to be very original the cyborg dwarf was my first idea I have some other great ideas too and I'm not sure If I'm going to make this anymore or trying to choose another hero.
 
Level 18
Joined
Mar 13, 2009
Messages
1,411
I don't get one thing anymore... what happened to the icon things? Pyritie told me that they wanted to add second and third place icons and older contests got those for as far as I can see and aren't they removing those now instead. I don't get it anymore...
Time for me to get the number 1 spot ;D
:confused:
 
Level 16
Joined
Feb 22, 2006
Messages
960
so yesterday I posted a screeni of an ability... today I present you the tooltip + Icon...

attachment.php
 

Attachments

  • ArcaneMissiles.JPG
    ArcaneMissiles.JPG
    31 KB · Views: 107
Status
Not open for further replies.
Top