In need of a friend

Weirdoze

New Member
Reaction score
6
Okay all of you, I'm very sorry but I already found a team (perhaps too many guys in it) so at this moment I don't need anymore buddies. :)

PS. If "The Need" comes back, I WILL post it on the forums ;)

EDIT: PPS. all of you trying to feed me with information about JASS; I--am--not--intrested--:)
 

NullCurrent

( ゚ε ゚)
Reaction score
110
I know you already said that you don't need anymore buds, but I was creating an ORPG a long time ago, and well, I didn't finish it. It is pretty open to allow anything. The hero/class system was not built up, but all the terrain is done, and I have many ideas. If you guys want to use the terrain or simply use it for ideas, I can post the unprotected one.

Here are some screenies of the terrain. (very small part).
NCRPG1.jpg


NCRPG2.jpg


NCRPG3.jpg


NCRPG4.jpg


NCRPG5.jpg


NCRPG6.jpg


NCRPG7.jpg


NCRPG8.jpg


NCRPG9.jpg

Thanks.
 

Weirdoze

New Member
Reaction score
6
Okay guys! Our map is progressing very nice and fast, now we need someone who has his head full of ideas for:
Abilities
Hero Jobs
Professions
Zones
Creeps
And everything!

Post on this thread or PM me. Thank You!
 

Weirdoze

New Member
Reaction score
6
BUMP

There is still only 2 of us! We could use a hand in making spells, GUI and object editor.

Intrested? Just contact me!
 

Summoned

New Member
Reaction score
51
Let me know if you change your mind about the GUI thing, 'cause making spells in GUI feels really clumsy once you have some practice in JASS. ;)
 

Summoned

New Member
Reaction score
51
PLEASE, this thing so over discussed.
I'm still not understanding why you refuse to use non-GUI spells, though. It's not as if editing complex spells in GUI is easier than if they were made in JASS. vJASS globals actually make editing spell effects a breeze, since everything you'd need to edit is at the very top of the trigger.

I'll give you an example. This was a spell I made a few days ago:
JASS:
//***************************************************************************
// Spell: Wave Form version 1.0 (Copied from DotA)                          *
// Description: Turn into a special effect and rush to the targetted area.  *
//                                                                          *
// Requires: vJASS (NewGen Editor), Key Timers 2 (KT)                       *
//***************************************************************************

scope WaveForm initializer Init

    globals
        private constant integer WFSPELLID = 'Awf0'  // Wave Form spell ID. Press ctrl + D to see it in the ability editor.
        
        private constant boolean WFINVULNERABLE = false  // Invulnerable while sliding?

        private constant real WFDAMAGEBASE = 25.     // How much bonus damage it does regardless of level.
        private constant real WFDAMAGELEVEL = 75.    // How much damage it gains per level. Level 1 is WFDAMAGEBASE + WFDAMAGELEVEL.
        private constant real WFSTRBASE = 0.         // Converts fraction of strength (regardless of level) into damage.
        private constant real WFAGIBASE = 0.         // Converts fraction of agility (regardless of level) into damage. 0.3 means 30%.
        private constant real WFINTBASE = 0.         // Converts fraction of intelligence (regardless of level) into damage.
        private constant real WFSTRMULT = 0.         // Converts fraction of strength (per level) into damage.
        private constant real WFAGIMULT = 0.         // Converts fraction of agility (per level) into damage. 0.3 means 30%.
        private constant real WFINTMULT = 0.         // Converts fraction of intelligence (per level) into damage.
        private constant attacktype WFATTACKTYPE = ATTACK_TYPE_NORMAL   // Attack type, NORMAL = spell, others are HERO, PIERCE, SIEGE, CHAOS, etc.
        private constant damagetype WFDAMAGETYPE = DAMAGE_TYPE_MAGIC    // Damage type, MAGIC, NORMAL (physical), UNIVERSAL (pure).
        private constant weapontype WFWEAPONTYPE = WEAPON_TYPE_WHOKNOWS // Weapon type, determines the sound of impact.
        private constant boolean WFISATTACK = true      // Determines whether it removes certain buffs like Healing Salves.
        private constant boolean WFISRANGED = true      // Determines whether it triggers things like Frost Armor.
        
        private constant real WFSPEED = 1000.           // Speed of sliding.
        private constant real WFRADIUS = 225.           // Radius of effect.
        private constant real WFINTERVAL = 0.05         // Interval of sliding (higher values are less laggy).
        private constant string WFTRAILSFX = "Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl"     // Trailing special effect.

//*********************** No Touching Below This Line unless you know JASS. ***********************

        private group G = CreateGroup()
        private unit U = null
    endglobals

    private struct waveform
        unit caster
        real damage
        real angle
        real distance
        group hit
        
        method onDestroy takes nothing returns nothing
            call PauseUnit(.caster, false)
            call SetUnitPathing(.caster, true)
            call SetUnitVertexColor(.caster, 255, 255, 255, 255)
            
            if (WFINVULNERABLE) then
                call SetUnitInvulnerable(.caster, false)
            endif
            
            set .caster = null
            set .damage = 0.
            set .angle = 0.
            set .distance = 0.
            call DestroyGroup(.hit)
            set .hit = null
        endmethod
    endstruct
    
    //******************************************************************************
    
    private function WF_Target_Check takes nothing returns boolean
        if not (IsUnitAlly(GetFilterUnit(), GetOwningPlayer(U)) or (IsUnitType(GetFilterUnit(), UNIT_TYPE_DEAD))) then
            return true
        endif
        return false
    endfunction
    
    //******************************************************************************

    private function WF_Tree_Check takes nothing returns boolean
        return GetDestructableLife(GetFilterDestructable()) <= 50.
    endfunction
    private function WF_Kill_Tree takes nothing returns nothing        
        call KillDestructable(GetEnumDestructable())
    endfunction
    
    //******************************************************************************
    
    private function WF_Slide takes nothing returns boolean
        local waveform wf = KT_GetData()
        local real x = GetUnitX(wf.caster)
        local real y = GetUnitY(wf.caster)
        local real x2 = x + WFINTERVAL * WFSPEED * Cos(wf.angle * bj_DEGTORAD)
        local real y2 = y + WFINTERVAL * WFSPEED * Sin(wf.angle * bj_DEGTORAD)
        local rect r = Rect(x2 - 100., y2 - 100., x2 + 100., y2 + 100.)
        local unit u = null
        
        if IsUnitType(wf.caster, UNIT_TYPE_DEAD) or wf.distance <= 0. then
            call RemoveRect(r)
            call wf.destroy()
            return true
        endif
        
        if IsTerrainPathable(x2, y2, PATHING_TYPE_FLYABILITY) then
            set x2 = x
            set y2 = y
        endif
        
        set wf.distance = wf.distance - WFINTERVAL * WFSPEED
        call DestroyEffect(AddSpecialEffect(WFTRAILSFX, x2, y2))
        call EnumDestructablesInRect(r, Condition(function WF_Tree_Check), function WF_Kill_Tree)
        set U = wf.caster
        call GroupEnumUnitsInRange(G, x2, y2, WFRADIUS, Condition(function WF_Target_Check))
        loop
            set u = FirstOfGroup(G)
            exitwhen u == null
            if not IsUnitInGroup(u, wf.hit) then
                call GroupAddUnit(wf.hit, u)
                call UnitDamageTarget(U, u, wf.damage, WFISATTACK, WFISRANGED, WFATTACKTYPE, WFDAMAGETYPE, WFWEAPONTYPE)
            endif
            call GroupRemoveUnit(G, u)
            set u = null
        endloop
        set U = null
        call SetUnitX(wf.caster, x2)
        call SetUnitY(wf.caster, y2)
        
        call RemoveRect(r)
        return false
    endfunction
    
    //******************************************************************************
    
    private function Wave_Form takes nothing returns boolean
        local real x
        local real y
        local real x2
        local real y2
        local waveform wf
        
        if (GetSpellAbilityId() == WFSPELLID) then
            set x = GetUnitX(GetTriggerUnit())
            set y = GetUnitY(GetTriggerUnit())
            set x2 = GetSpellTargetX()
            set y2 = GetSpellTargetY()

            set wf = waveform.create()
            set wf.caster = GetTriggerUnit()
            set wf.damage = WFDAMAGEBASE + WFSTRBASE * I2R(GetHeroStr(wf.caster, true)) + WFAGIBASE * I2R(GetHeroAgi(wf.caster, true)) + WFINTBASE * I2R(GetHeroInt(wf.caster, true)) + I2R(GetUnitAbilityLevel(wf.caster, WFSPELLID)) * (WFDAMAGELEVEL + WFSTRMULT * I2R(GetHeroStr(wf.caster, true)) + WFAGIMULT * I2R(GetHeroAgi(wf.caster, true)) + WFINTMULT * I2R(GetHeroInt(wf.caster, true)))
            set wf.angle = bj_RADTODEG * Atan2(y2 - y, x2 - x)
            set wf.distance = SquareRoot((x2 - x) * (x2 - x) + (y2 - y) * (y2 - y))
            set wf.hit = CreateGroup()
            
            if (WFINVULNERABLE) then
                call SetUnitInvulnerable(wf.caster, true)
            endif
            
            call SetUnitVertexColor(wf.caster, 0, 0, 0, 0)
            call PauseUnit(wf.caster, true)
            call SetUnitPathing(wf.caster, false)
            
            call KT_Add(function WF_Slide, wf, WFINTERVAL)
        endif
        return false
    endfunction

    //******************************************************************************
    
    private function Init takes nothing returns nothing
        local trigger t = CreateTrigger()
        call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
        call TriggerAddCondition(t, Condition(function Wave_Form))
        set t = null
    endfunction

endscope
It takes up no variable space in the variable editor. Between the object editor (for things like mana cost and/or cast range) and the first few lines of text, you can edit just about every aspect of the spell without knowing a single line of JASS.
 

Joccaren

You can change this now in User CP.
Reaction score
54
Also, even if you don't know JASS, you can ask them to make the spell and ask them how to import it. You now have a fully working JASS spell, usually quicker made and more efficient than GUI spells, and you don't have to understand how its done. + you'll probably have more buddies to make maps with
 

Romek

Super Moderator
Reaction score
963
JASSers could probably use GUI better than any 'GUI-only' people can.
It's just that nobody who knows JASS would ever use GUI over it. It's faster to type, faster to run, more flexible, dynamic, etc.

"We don't want people who know JASS" is quite a silly thing to say.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top