Wrecked

Heavy-Gear

New Member
Reaction score
7
It can last as long as you want it to last (it drains mana). By "large amounts of damage" I mean large compared to how much damage the hero would normally do. The image itself will be like a buffed up version of Sharankan himself.

EDIT: I think the main purpose behind the spell is to serve as a distraction. The appearance of a massive image that can do a bunch of damage causes everyone to focus on it.
 

Tukki

is Skeleton Pirate.
Reaction score
29
Backtrack - Sharankan moves back in time, returning to a previous position, health and mana

Could be really cool if made properly! Are you going to have a "Create point" and "Restore point" type or just store the hero stats every X seconds?

Thoughtform - Sharankan projects an inlarged image of himself that is capable of dealing large amounts of damage but drains mana per second.

Also a very good idea, will the enlarged image have some spells/abilities etc. ?

EDIT:
Dark Affliction - Sharankan produces thoughts of pure hatred in target enemy, forcing him to attack his own allies.

Isn't it better if the target ONLY attacks his allies, not Sharankan?

Energy Wall - Sharankan creates a wall of energy at target location. Units that move through the wall take damage and are stunned

"Units" - does this include Sharankan? And it could be cool if the hit unit is knock-backed.
 

Heavy-Gear

New Member
Reaction score
7
Could be really cool if made properly! Are you going to have a "Create point" and "Restore point" type or just store the hero stats every X seconds?

Yeah, I'll store health, mana and position every second or so.

EDIT2: Now I'm not so sure.. Which would be better do you think?

Also a very good idea, will the enlarged image have some spells/abilities etc.

I'm not really sure. It might have some kind of taunt or slam ability.

Isn't it better if the target ONLY attacks his allies, not Sharankan?

Yeah that's what I meant :D I'll reword it.

"Units" - does this include Sharankan? And it could be cool if the hit unit is knock-backed.

I'll change that to "enemies" :p I knock-back would look awesome!

EDIT: Changes made. I've also slotted the spells into where I think they could go on the phase list.
 

Tukki

is Skeleton Pirate.
Reaction score
29
I'll store health, mana and position every second
Then the main purpose of the spell would be destroyed - since it could be used before entering a battle, and when short on life - return to where it was before. But with the X Second it may store when in combat - which we do not like :).

Would be the ability!

Yeah that's what I meant I'll reword it.
Neat :)

I knock-back would look awesome!
Yeah, it could look neat - you know how to code them?

I've also slotted the spells into where I think they could go on the phase list.
Will read and comment later.
 

Heavy-Gear

New Member
Reaction score
7
Sharankan spells are pretty much done :) I'll start working on another hero now. Does anyone foresee any problems or have another ability idea?
 

Tukki

is Skeleton Pirate.
Reaction score
29
You work really fast dude! With this velocity all spells may be completed until the Beta version:D!
The spells look really fitting and with this creativity the map is going to the top!

Also I think you managed put the abilities in the correct slot. It looks good - maybe some spells are a bit repetitive but nether less it's very good!
 

Viikuna

No Marlo no game.
Reaction score
265
Hey this looks good. :) If you need someone to test your map I might be able to help.

And yes there was something I wanted to say..

First: I think I saw some screenshots about this map earlier, but I cant find them anymore :/ Could you please post some?

And Second: For that Argurak Fiend you should make some trap -spells and some kind of MeatHook -styled spell that pulls your enemy to your traps. Try to make it so that all three fiends have different style of play ( But not too different, it must not ruin the balance of the game ).

Keep working and make it good.
 

Heavy-Gear

New Member
Reaction score
7
With this velocity all spells may be completed until the Beta version!

We can only hope :D

If you need someone to test your map I might be able to help.

Cool. I'll add your name to the list.

I think I saw some screenshots about this map earlier, but I cant find them anymore

Sure, I'll put some up.

Try to make it so that all three fiends have different style of play

I'll do my best :)

EDIT: Just wrote up a quick concept for the item system. I don't have WC3 at schol and don't know stuff off by heart so I'll replace comments with actual code tonight. Think the idea will work?

JASS:
//Event: A unit casts an abiity

function CreateItem takes string CreatedItem, boolean KnifeReq, boolean HammerReq, integer StonesNeeded, integer VinesNeeded returns nothing
local StonesHeld
local VinesHeld
local KnifeHeld
local HammerHeld
//cycle through inventory, slot by slot
//add to respective local any items found
if Stones == StonesNeeded and Vines == VinesNeeded then
//remove StonesNeeded and VinesNeeded
//give CreatedItem
endfunction 
    
function CheckAbility takes nothing returns nothing
if <CastedSpell> == "<SharpStoneAbilityRaw>" then
call CreateItem("<SharpStoneItemRaw>",1,0,1,0)
endfunction
 
R

rargh

Guest
Here are some spell ideas for Argurak. Not all are the most original but its a list to get you started. I'll leave the names of spell to you.


Haste- Some sort of beserker where attack speed is increaced while damage taken is also increased.

Claw- Temporarily boost armour of hero.

Infection- Chance on hit to cause diseaded wound, deals damage over time. (passive ability)
- Decreases all of enemy stats for a period of time.

Claw/Haste- Hits all enemy units within melee range, sort of an aoe.

Infection/Haste- A DOT that starts of dealing meager damage but builds up over time.


I'll put some more up later when I've got the time
 
W

WC3_man

Guest
Spell idea:

It would be really cool if there was a spell for the Argurak under "Infection" where the hero would like jump into the targeted enemies body and could be done without the enemy knowing... Something like this

Argurak infects target enemy, jumping and hiding inside the enemies body gaining health and mana per second.

i dunno theres a concept something like that
 

Tukki

is Skeleton Pirate.
Reaction score
29
Think the idea will work?
Not sure what you're up to with the booleans, but I wrote a similar code.

JASS:
scope SomeTrig
//==========================================================================
globals
    private constant integer SID_SharpStone = 'A000' // The ability id
    private constant integer IID_Stone = 'ckng' // item stone id
    private constant integer IID_Vines = 'ratf' // item vine id
    private constant integer IID_SharpStone = 'rag1' // item sharp stone id
endglobals
//==========================================================================
private function CraftItem takes unit Caster, integer CreatedItem, boolean KnifeReq, boolean HammerReq, integer StonesNeeded, integer VinesNeeded returns nothing
local unit C = Caster
local integer NumStones = 0
local integer NumVines = 0
local item im
local item ii
local integer i = 0

loop 
    exitwhen i >= 6
        if GetItemTypeId(UnitItemInSlot(C, i)) == IID_Stone then
            set NumStones = NumStones + 1 // GetItemCharges(UnitItemInSlot(C, i))
        endif
        
        if GetItemTypeId(UnitItemInSlot(C, i)) == IID_Vines then
            set NumVines = NumVines + 1 // GetItemCharges(UnitItemInSlot(C, i))
        endif
        
        set i = i + 1
endloop

if NumStones+1 > StonesNeeded and NumVines+1 > VinesNeeded then
    set im =  GetItemOfTypeFromUnitBJ(C, IID_Stone)
    set ii =  GetItemOfTypeFromUnitBJ(C, IID_Vines)
        call RemoveItem(im)
        call RemoveItem(ii)
    call UnitAddItem(C, CreateItem(CreatedItem, GetUnitX(C), GetUnitY(C)))
else
    call DisplayTimedTextToPlayer(GetOwningPlayer(C), 0, 0, 10, "ERROR: Missing requirements!")
endif
endfunction 

private function Actions takes nothing returns nothing 
    call CraftItem(GetSpellAbilityUnit(),IID_SharpStone,false, false ,0 , 0)
endfunction
//==========================================================================
private function Conditions takes nothing returns boolean
    return GetSpellAbilityId() == SID_SharpStone
endfunction

public function InitTrig takes nothing returns nothing
local trigger trigg = CreateTrigger()
local integer i = 0
loop
    exitwhen i >= 11
        call TriggerRegisterPlayerUnitEvent(trigg, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
        set i = i + 1
    endloop
    call TriggerAddCondition(trigg, Condition(function Conditions ) )
    call TriggerAddAction(trigg, function Actions )
endfunction
//==========================================================================
endscope
 

Heavy-Gear

New Member
Reaction score
7
Wow, thanks. I only just started learning JASS yesterday so I'm going to need all the help I can get :p.

Not sure what you're up to with the booleans

When some of the items are created they require a knife in the inventory. As there was only ever one knife needed, I thought I'd use a boolean instead of an integer to check if one was in the inventory or not and when calling the function (good or bad?).

I actually learned a bunch of stuff from your code, like looping a native specific unit event instead of the bliz one. I'll learn as much as I can about scopes and stuff tonight as well :)

lol, I can't believe I forgot that booleans are 'true' and 'false' not 1 and 0.. silly me.

This wasn't too smart either :D :
JASS:
Stones == StonesNeeded


EDIT: Raw items like stones don't stack in my game. "GetItemCharges()" only works for items with multiple charges right?

EDIT2: Shouldn't:
JASS:
if NumStones+1 > StonesNeeded and NumVines+1 > VinesNeeded then
    set im =  GetItemOfTypeFromUnitBJ(C, IID_Stone)
    set ii =  GetItemOfTypeFromUnitBJ(C, IID_Vines)
        call RemoveItem(im)
        call RemoveItem(ii)
    call UnitAddItem(C, CreateItem(CreatedItem, GetUnitX(C), GetUnitY(C)))
else
    call DisplayTimedTextToPlayer(GetOwningPlayer(C), 0, 0, 10, "ERROR: Missing requirements!")
endif

Be this instead:
JASS:
local integer j = 0

if NumStones+1 > StonesNeeded and NumVines+1 > VinesNeeded then
        
        loop
            exitwhen j >= StonesNeeded
            call RemoveItem(GetItemOfTypeFromUnitBJ(C, IID_Stone))
            set j = j + 1
        endloop
        
        loop
            exitwhen j >= VinesNeeded
            call RemoveItem(GetItemOfTypeFromUnitBJ(C, IID_Vines))
            set j = j + 1
        endloop
        
    call UnitAddItem(C, CreateItem(CreatedItem, GetUnitX(C), GetUnitY(C)))
else
    call DisplayTimedTextToPlayer(GetOwningPlayer(C), 0, 0, 10, "ERROR: Missing requirements!")
endif

Or does "RemoveItem()" remove all instances of an item?
 
W

WC3_man

Guest
Psionic Explosion - Sharankan releases all of his available energy into the space around him. Uses all available mana and deals damage based on the mana lost

Thats overpowered, i think, you need to tweak that... Imagine just think:

like the sharankan is an intel hero so by his Ulti he might have about 1300+ mana and all of that mana can kill nearly ever human on the map if they are all hitting him at the same time....

hmm verify
 
W

WC3_man

Guest
umm not so much a replacement, but nerfing such as: deals 50% of total mana lost
 

Heavy-Gear

New Member
Reaction score
7
I see.. How about, it takes half of the users mana, and half the enemies health?

I've also got a few Argurak abilities in the works:

Argurak traits:

- Venom (A)
- Haste (B)
- Claw (C)

Jump - jumps to target location

Phase 1:

(A) = Venomous Bite - infects with base venom
(B) = Quick Strike - timed, attacks twice
(C) = Swing - attack in AoE

Phase 2:

(AB) = Crippling Poison - slows
(AA) = Infection - makes venom infectious
(BC) =
(BB) = Permanantly increases attack speed
(AC) = Venomous Blows - chance to infect with base venom on attack
(CC) = Eviscerate - disembowels enemy, stuns

Phase 3:

(AAB) = Poisoned Thoughts - stops mana regen and spell casting
(AAC) = Tainted Immunity - makes venom last longer
(BBC) =
(BBA) =
(CCA) =
(CCB) =
(ABC) = Piercing Scream - dazes in AoE

Ultimates:

(*AA) =
(*BB) =
(*CC) = Slit Throat - finishing move
(ABC) =
 

Tukki

is Skeleton Pirate.
Reaction score
29
Sorry for late response, was away whole weekend :)

I only just started learning JASS yesterday so I'm going to need all the help I can get.
Just ask if any problem occurs :p
Raw items like stones don't stack in my game. "GetItemCharges()" only works for items with multiple charges right?
True; GetItemCharges() only works for charged items (those with stacking possibilities)

if NumStones+1 > StonesNeeded and NumVines+1 > VinesNeeded then
set im = GetItemOfTypeFromUnitBJ(C, IID_Stone)
set ii = GetItemOfTypeFromUnitBJ(C, IID_Vines)
call RemoveItem(im)
call RemoveItem(ii)
call UnitAddItem(C, CreateItem(CreatedItem, GetUnitX(C), GetUnitY(C)))
else
call DisplayTimedTextToPlayer(GetOwningPlayer(C), 0, 0, 10, "ERROR: Missing requirements!")
endif
Yes, my fault. I'm not really sure but I think RemoveItem() only removes 1 item (will check)
RESULT: The item will be totally removed - including all charges :)

Proposal for ability; Deal 10%*(NumberOfNearbyUnits) damage?:rolleyes:
All other abilities looks good :thup:

EDIT: Just looked through my code and it seems that it could be improved in several ways:p. So here; another library but with some other functions and more features. Now it containes one example.

Features/Requirement
= Features
* Obviously item crafting
* Able to use stacking items
* Option to have up to 2 required items

= Requirement
* vJass

Instructions/Explanations
Instructions:
function CraftItem takes unit Caster, boolean Knife, boolean Hammer, boolean stackAllowed, integer Raw1Integer, integer Raw2Integer, integer Raw1itemId, integer Raw2itemId, integer knifeId, integer hammerId, integer createditemId returns nothing

Caster = The casting unit
Knife = If an item of knifeId is needed
Hammer = If an item of hammerId is needed
stackAllowed = If stacks are allowed
Raw1Integer = The required amount of Raw1itemId items
Raw2Integer = The required amount of Raw2itemId items
Raw1itemId = The Item Id for the first item - put behind ' '
Raw2itemId = The Item Id for the second item - put behind ' '
knifeId = The Item Id for the first required item - put behind ' '
hammerId = The Item Id for the second required item - put behind ' '
createditemId = The Item Id for the created item

Note: Item Id = The item's rawcode ( Press Ctrl + D in Object Editor to see rawcodes )

Implementation:
Just copy the text in the "The Library Code" spoiler into a trigger in your map. And it should work.

The Library Code
JASS:
library Crafting
//==========================================================================//
// P R I V A T E  F U N C T I O N S - Do not touch!                         //
//==========================================================================//
private function ItemName takes integer itemid returns string
    local item i = CreateItem(itemid, 0, 0)
    local string s
if i != null then
    call SetItemVisible(i, false)
    set s = GetItemName(i)
    call RemoveItem(i)
endif
return s
endfunction

private function DisplayMessage takes player forWho, integer ItemMax1, integer ItemMax2, integer ItemCur1, integer ItemCur2, string IN1, string IN2 returns nothing
local player p = forWho
local string s1 = "Needed items of " + "|cffffcc00" + IN1 + "|r" + ": "
local string s2 = "Needed items of " + "|cffffcc00" + IN2 + "|r" + ": "
if ItemMax1-ItemCur1 >= 0 then
    call DisplayTextToPlayer(p, .3, .3, "|cffff0000" + s1 + I2S(ItemMax1-ItemCur1) + "|r" )
else
    call DisplayTextToPlayer(p, .3, .3, "|cff00ff00" + s1 + "0|r" )
endif
if ItemMax2-ItemCur2 >= 0 then
    call DisplayTextToPlayer(p, .3, .3, "|cffff0000" + s2 + I2S(ItemMax2-ItemCur2) + "|r" )
else
    call DisplayTextToPlayer(p, .3, .3, "|cff00ff00" + s2 + "0|r" )
endif
endfunction
//==========================================================================
function CraftItem takes unit Caster, boolean Knife, boolean Hammer, boolean stackAllowed, integer Raw1Integer, integer Raw2Integer, integer Raw1itemId, integer Raw2itemId, integer knifeId, integer hammerId, integer createditemId returns nothing
local unit C = Caster
local integer NumRaw1 = 0
local integer NumRaw2 = 0
local integer i = 0
local item im
local item ii
local boolean k = true
local boolean b = true

if Knife == true and knifeId != 0 then
    if GetInventoryIndexOfItemTypeBJ(C, knifeId) > 0 then
        set k = true
    else
        set k = false
    endif
endif

if Hammer == true and hammerId != 0 then
    if GetInventoryIndexOfItemTypeBJ(C, hammerId) > 0 then
        set b = true
    else
        set b = false
    endif
endif

    if k == true and b == true then

loop 
    exitwhen i >= 6
        if GetItemTypeId(UnitItemInSlot(C, i)) == Raw1itemId then
            if stackAllowed == true then
                set NumRaw1 = NumRaw1 + GetItemCharges(UnitItemInSlot(C, i))
            else
                set NumRaw1 = NumRaw1 + 1
            endif
        endif
        
        if GetItemTypeId(UnitItemInSlot(C, i)) == Raw2itemId then
            if stackAllowed == true then
                set NumRaw2 = NumRaw2 + GetItemCharges(UnitItemInSlot(C, i))
            else
                set NumRaw2 = NumRaw2 + 1
            endif
        endif
        
        set i = i + 1
endloop

if NumRaw1 >= Raw1Integer and NumRaw2 >= Raw2Integer then
set i = 0
    loop   
        exitwhen i >= Raw1Integer
            set im = GetItemOfTypeFromUnitBJ(C, Raw1itemId)
                if stackAllowed == true then
                    call SetItemCharges(im, GetItemCharges(im) - 1)
                else
                    call RemoveItem(im)
                endif
            set i = i + 1
    endloop
    
set i = 0
    loop
        exitwhen i >= Raw2Integer
            set ii =  GetItemOfTypeFromUnitBJ(C, Raw2itemId)
                if stackAllowed == true then
                    call SetItemCharges(ii, GetItemCharges(ii) - 1)
                else
                    call RemoveItem(ii)
                endif
            set i = i + 1
    endloop
    
    call UnitAddItem(C, CreateItem(createditemId, GetUnitX(C), GetUnitY(C)))
else
    call DisplayTimedTextToPlayer(GetOwningPlayer(C), .3, .3, 10, "|cffff0000ERROR:|r |cffffcc00Missing requirements!|r")
    call DisplayMessage( GetOwningPlayer(C), Raw1Integer, Raw2Integer, NumRaw1, NumRaw2, ItemName(Raw1itemId), ItemName(Raw2itemId) )
endif
    else
        call DisplayTimedTextToPlayer(GetOwningPlayer(C), .3, .3, 10, "|cffff0000ERROR:|r |cffffcc00Missing required item!|r")
    endif

set C = null
endfunction 
//==========================================================================
endlibrary

Example
JASS:
scope Test
//==========================================================================
private function Actions takes nothing returns nothing 
    call CraftItem(GetSpellAbilityUnit(), false, false, true, 2, 2, 'ckng', 'ratf', 'I000', 'I000', 'rag1')
endfunction
//==========================================================================
private function Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A000'
endfunction

public function InitTrig takes nothing returns nothing
local trigger trigg = CreateTrigger()
local integer i = 0
loop
    exitwhen i >= 11
        call TriggerRegisterPlayerUnitEvent(trigg, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
        set i = i + 1
    endloop
    call TriggerAddCondition(trigg, Condition(function Conditions ) )
    call TriggerAddAction(trigg, function Actions )
endfunction
//==========================================================================
endscope
 

Tukki

is Skeleton Pirate.
Reaction score
29
I thought I'd use a boolean instead of an integer to check if one was in the inventory or not and when calling the function (good or bad?).
You can just check before actually calling the code - or use a similar function of mine :p

And some additional spells ( Not the best but anyway )

(BC) Teleporting Stab - Teleports to the target and deals damage, then teleports back.
(BBC) Haste - Increases MS/DMG over some time
(BBA) - % chance to increase AS/MS of himself and deal minior poison damage to the target.
(CCA) Envenomed Claws - % chance to deal +X damage and use Venomous Bite on target

That was all of them, hope you like 'em :)

(Sorry for double post)
 

Heavy-Gear

New Member
Reaction score
7
I really appreciate the code. Although I thought it was easier when the ID's were private constants than when they were implemented into the function.. Maybe it's just me :D

I like the spells too, especially the teleport stab. I hadn't thought of teleporting him back :p
 

Tukki

is Skeleton Pirate.
Reaction score
29
I really appreciate the code.
Hope you learned a thing or two :)

I thought it was easier when the ID's were private constants
Yeah, but then you would have to create one for each spell - which isn't that good :p

especially the teleport stab.
I must say that I totally agree with you on that point! (It took me the shortest time to come up with)

I hadn't thought of teleporting him back :p
But then it would be like a backstab ability - and the creepy feeling of being followed would disappear :)

EDIT: Just saw the screenshots - my oppinion is that you use more doodads/fog to give the places feeeeeeeling :)
 
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