• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Argos: Rise of Elements [Orpg]

Status
Not open for further replies.
Level 11
Joined
Jun 30, 2008
Messages
580
I agree with all of what you said:

These are the 5 elements, we are having trouble figuring out the name of the 5th one

Fire: Self Explanatory
Water: Three forms, Solid, Liquid, and Gas forms
Air: Wind and Electricity
Earth: Self Explanatory
Fifth Element: The other 4 elements compose the physical aspect of Argos, while the Fifth Element is the non-physical, the overall energy that brings everything together, also controls reality and is what creates life.

Any ideas for a name? Or it could just be the Fifth Element?

The Fifth Element also could be thought of as Magic, or the energy to manipulate the other elements and to manipulate reality.
 
Level 7
Joined
Dec 26, 2010
Messages
401
I pretty much like the idea for this map, despite the fact that elemental base is overused a bit in modding. Here are my comments and recommendations:
- Give players deeper story behind Tae'lin's corruption - just saying that he's corrupted because of his lust for power is a little...unnatural at least. I mean, he was the head of the Order of Elements, he had to be responsible leader, and strong-minded one, too. Also, make reasons behind all evil doings in the world. It is stupid from someone to be evil just to destroy the world, isn't it? Depth.

- Atmosphere. Not just terrain/graphics but the whole feeling that makes player enter the world of Argos. Players must feel what's happening ingame. That's good.

- Also, this is just my opinion, but better make someone other end boss, not Tae'lin.


In the cosmos there is darkness known as the Abyss, it is a great evil that seeks to consume worlds, devouring all life after twisting it into it's own puppets, the elements within Argos combat the Abyss and keep it at bay, but continous usage of elemental power on Argos has a devastating effect and over time has begun to wear at the shield the elements provide, allowing the Abyss to seep into the world of Argos slowly, Tae'lin being one of the most powerful entities on Argos, he was targeted first for the corruption.

The Abyss is a malevolent dark energy, it is capable of corrupting many different life forms and can even fuse with elements, but once a being is tainted by the Abyss, it shall forever remain dark and twisted, until it's physical form is destroy and it's spiritual form cast out into the darkness of the cosmos.
 
Level 3
Joined
Jun 16, 2011
Messages
45
In the cosmos there is darkness known as the Abyss, it is a great evil that seeks to consume worlds, devouring all life after twisting it into it's own puppets, the elements within Argos combat the Abyss and keep it at bay, but continous usage of elemental power on Argos has a devastating effect and over time has begun to wear at the shield the elements provide, allowing the Abyss to seep into the world of Argos slowly, Tae'lin being one of the most powerful entities on Argos, he was targeted first for the corruption.

The Abyss is a malevolent dark energy, it is capable of corrupting many different life forms and can even fuse with elements, but once a being is tainted by the Abyss, it shall forever remain dark and twisted, until it's physical form is destroy and it's spiritual form cast out into the darkness of the cosmos.

Hmm now it makes much more sense and it's a bit deeper. I just have to point that it is a little cliche, but that's not a big problem. So, continue as you began, but make some surprises and always be very open-minded for the story. I believe in you, mister.
 
Level 11
Joined
Jun 30, 2008
Messages
580
This is the thing you were talking about in the Chat? :D
Don't forget to update the lore (Some grammar errors, needs better
transition, prepositional phrases should be used as much as possible,
adjectives need to be used a lot to enrich the quality, etc...)

Also, the S in the banner looks like an 8 xD

Yea, still working on it... Does it? I never noticed till you said anything xD I guess we should update the banner too.

BTW:

I would like everyone to welcome Ennyliohanus and 4rankie to the team!
 
Level 11
Joined
Jun 30, 2008
Messages
580
Greetings Hive,

So, we are trying to create a realistic weapon system for Argos. Since weapons can be used by any character, they need some kind of role, so players can choose the type they want.

Damage Types
Damage Types:

Critical Damage: A wound is made in a sensitive spot causing extra damage.
Cleaving Damage: A wound is deep causing loss of blood and damage over time.
Stunning Damage: A wound disorients causing loss of movement/vision/accuracy.
Armor Damage: A wound of the armor. Causes the armor to not function as normal.
types
These are the weapon types:

Sword: Critical Damage/Cleaving Damage

Axe: Cleaving Damage

Bow: Critical Damage

Hammer: Stunning Damage/Armor Damage

Mace: Stunning Damage/Cleaving Damage/Armor Damage

Staff: *Will discuss later

Dagger: Critical Damage
What is filled in is what I was thinking so far.

If you have any ideas for realistic damage types or different types of damage for the weapons, please post below :)
 
Last edited:
Level 11
Joined
Jun 30, 2008
Messages
580
Maybe impaling for like spears and such? Just a thought.

Perhaps this could work with arrows? I might not have spears in the game, but arrows will, and impaling damage can signify that the object is still lodged in the skin, causing more damage over longer time than cleaving damage.

Agreed.

Also do bows actually give you a ranged attack?
If so there should be Crossbow type weapon which would be a ranged and gives armour damage

Yes they do, and we are still contemplating on adding them, and if we do, they will have armor damage.
 
Level 7
Joined
Dec 26, 2010
Messages
401
Perhaps this could work with arrows? I might not have spears in the game, but arrows will, and impaling damage can signify that the object is still lodged in the skin, causing more damage over longer time than cleaving damage.



Yes they do, and we are still contemplating on adding them, and if we do, they will have armor damage.

If you do go with impaling damage, what about a pierce-through effect at close ranges with bows? Like the arrow goes all the way through and hits things behind it.
 
Level 11
Joined
Jun 30, 2008
Messages
580
If you do go with impaling damage, what about a pierce-through effect at close ranges with bows? Like the arrow goes all the way through and hits things behind it.

That could work. Also:

I would like to inform that 4rankie will not be on the team anymore, due to his lack of activity/skill as a terrainer.

If anyone would like to terrain for the project, please let me know :)
 
Level 23
Joined
Oct 12, 2008
Messages
1,783
Would you consider changing Cleaving Damage to Piercing Damage?

Cleave is generally associated in wc3 terms to be splash damage and not bleed over time. I think you know what I mean.

Off Topic: Holy Crap your still active?
 
Level 11
Joined
Jun 30, 2008
Messages
580
This looks badass.

Ah Thank you :) Wait till you see the new screenshots of the terrain. :D

Would you consider changing Cleaving Damage to Piercing Damage?

Cleave is generally associated in wc3 terms to be splash damage and not bleed over time. I think you know what I mean.

Off Topic: Holy Crap your still active?

Well, what I was thinking what cleaving does, is that its a large wound, causing you to be weakened greatly. Loss of speed/dexterity. Piercing might not work, but if we find a different name then sure.

And yes I still am xD, I was inactive for awhile due to family problems and moving out and finishing school, but now I finished and I'm ready to finish this project! :D
 
Level 11
Joined
Jun 30, 2008
Messages
580
Yes the project is still very active.
Just having problems with getting the team together and talking.

That reminds me I will be messaging everyone and try to schedule a time to all meet on skype. I haven't been able to move forward.

@Dragonson That would be great! I could use some art, new logo perhaps, some art for the thread to make it stand out.

I am also discussing with Ralle on when I get a testing version out, that we will make this project a hosted project.

@kanadaj Thank you! :D Like I said above we have hit a slight standstill due to lack of meetings.

Thank you everyone and yes we are still active!
 
Level 27
Joined
Jun 23, 2009
Messages
4,787
Awlright, finished the requested logo. :)
LogoArgosFinished.png

It would have been nice NOT to have gotten the one 'is it finished?' VM from ya Shadowflare. :p
I have ALOT on my scheadule.
 
Level 11
Joined
Jun 30, 2008
Messages
580
Ah! Thank you!

Also everyone welcome crillepro back to terrain!

And yes I agree, I don't know why no one else has been noticing, but then again, I need more content out, I need everyone to get together to talk and discuss, I'm still working on major systems and I need other things to start moving along.

Again, welcome back!
 
Level 20
Joined
Jul 14, 2011
Messages
3,213
You should make it a system and Upload it into the Spell section, it could increase the map rate a lot :) And we (i) could use it too xD
 
Level 11
Joined
Jun 30, 2008
Messages
580
You should make it a system and Upload it into the Spell section, it could increase the map rate a lot :) And we (i) could use it too xD

Unfortunately, I can't do this because all of my systems are linked together, and they are only for this project. I would love to make systems for everyone, but not at this time. And if I did, it would be a bulk system with other ones just for a rpg. I am making a dynamic quest making system which I might submit to the hive. Look forward to this!

Anyways:

I am starting on the Damage Detection System. Here is an overview of what it is.

Due to the nature of this project, I am not going to use the normal attacks that units have. Everything will be triggered; Attacks, Armor, Resistance, etc. I have decided this because of the way the players have customization over their characters, i.e they are able to use any weapon. So in order for this and the lack of ability to switch between ranged and melee, I will trigger everything. Projectiles, etc. In the end I believe this will be much better.

Mobs: Any creature that is not a character in the game.

There are three types of mobs;

  • Passive: These mobs are passive till provoked, then they turn hostile. They are represented by a yellow ring around the mob when selected and the floating text tag above their head will also be yellow.
  • Neutral: These mobs are NPC's or other interactive creatures. These will be represented by a blue ring around the mob when selected and the floating text tag above their head will also be blue.
  • Hostile: These mobs will attack without being provoked. These mobs will be represented by a red ring around the mob when selected and the floating text above their head will also be red.

For the Equipment I will be trying a realistic approach. Using variables to show how the equipment will affect your characters attack. i.e too heavy of armor for your character will slow them down and reduce their evasion. This is the same with weapons. All that I have is Weight so far, so if you have any ideas of other variables that should come into affect how equipment will affect your character please let me know!

On another note I will now start posting my code on systems that I have made for input on efficiency issues or any other ideas. Here is the CC system I created:

JASS:
library CharacterSys initializer Init requires SimError

    globals
        //Constants
        private constant integer NEXT_CHOICE = 'A00B'
        private constant integer PRE_CHOICE = 'A00C'
        private constant integer NEXT_ATT = 'A009'
        private constant integer PRE_ATT = 'A008'
        private constant integer SKIN_CHANGE = 'A001'
        private constant string INT_COLOR = "|cffd8da81"
        private constant string END = "|r"
        private constant real MAX = 125.0
        private constant real MIN = 70.0
        private constant integer STRING_MAX = 16
        private constant integer STRING_MIN = 3
        private string array NOTALLOWED[50]
        private constant integer NA = 38
        private constant integer MAXATT = 6
        private constant string ARROW = "=>"
        private constant real formula = 187.5/126
        
        private boolean array Done[10]
        private dialog array Creation[10]
        private button array New[10]
        private button array Load[10]
        private rect array Stage[10]
        private camerasetup array Camera[10]
        private unit array Display[10]
        private hashtable Options = InitHashtable()
        private hashtable OStrings = InitHashtable()
        private integer array MaxChoice[5]
        private trigger d = CreateTrigger()
        private dialog array CDialog[10]
        private button array CNew[10]
        private button array CLoad[10]
        private string array Alert[10]
    endglobals

    private function InitVars takes nothing returns nothing
        //Symbols
        set NOTALLOWED[1] = "1"
        set NOTALLOWED[2] = "2"
        set NOTALLOWED[3] = "3"
        set NOTALLOWED[4] = "4"
        set NOTALLOWED[5] = "5"
        set NOTALLOWED[6] = "6"
        set NOTALLOWED[7] = "7"
        set NOTALLOWED[8] = "8"
        set NOTALLOWED[9] = "9"
        set NOTALLOWED[10] = "0"
        set NOTALLOWED[11] = "!"
        set NOTALLOWED[12] = "@"
        set NOTALLOWED[13] = "#"
        set NOTALLOWED[14] = "$"
        set NOTALLOWED[15] = "%"
        set NOTALLOWED[16] = "^"
        set NOTALLOWED[17] = "&"
        set NOTALLOWED[18] = "*"
        set NOTALLOWED[19] = "("
        set NOTALLOWED[20] = ")"
        set NOTALLOWED[21] = "-"
        set NOTALLOWED[22] = "_"
        set NOTALLOWED[23] = "+"
        set NOTALLOWED[24] = "="
        set NOTALLOWED[25] = "~"
        set NOTALLOWED[26] = "`"
        set NOTALLOWED[27] = "["
        set NOTALLOWED[28] = "]"
        set NOTALLOWED[29] = "{"
        set NOTALLOWED[30] = "}"
        set NOTALLOWED[31] = ">"
        set NOTALLOWED[32] = "<"
        set NOTALLOWED[33] = ","
        set NOTALLOWED[34] = ":"
        set NOTALLOWED[35] = ";"
        set NOTALLOWED[36] = "?"
        set NOTALLOWED[37] = "."
        set NOTALLOWED[38] = "'"
        
        set Alert[1] = "Symbols and Numbers are not allowed! Name Denied."
        set Alert[2] = "Name can not exceed " + I2S(STRING_MAX) + " characters! Name Denied."
        set Alert[3] = "Name can not be less than " + I2S(STRING_MIN) + " characters! Name Denied."
        set Alert[4] = "Name Accepted!"
        
        set Stage[0] = gg_rct_Player_1
        set Camera[0] = gg_cam_Player_1
        set Stage[1] = gg_rct_Player_1
        set Camera[1] = gg_cam_Player_1 
        //Hair Color
        call SaveInteger(Options, 1, 1, 'B002') //Black
        call SaveStringBJ("Black", 1, 1, OStrings)
        call SaveInteger(Options, 1, 2, 'B00D') //Blonde
        call SaveStringBJ("Blonde", 1, 2, OStrings)
        call SaveInteger(Options, 1, 3, 'B00B') //Blue
        call SaveStringBJ("Blue", 1, 3, OStrings)
        call SaveInteger(Options, 1, 4, 'B000') //Brown
        call SaveStringBJ("Brown", 1, 4, OStrings)
        call SaveInteger(Options, 1, 5, 'B004') //Gray
        call SaveStringBJ("Gray", 1, 5, OStrings)
        call SaveInteger(Options, 1, 6, 'B009') //Green
        call SaveStringBJ("Green", 1, 6, OStrings)
        call SaveInteger(Options, 1, 7, 'B006') //Red
        call SaveStringBJ("Red", 1, 7, OStrings)
        set MaxChoice[1] = 7
        //Skin Color
        call SaveInteger(Options, 2, 1, 'B001') //Black
        call SaveInteger(Options, 2, 2, 'B00C') //Blonde
        call SaveInteger(Options, 2, 3, 'B00A') //Blue
        call SaveInteger(Options, 2, 4, 'B007') //Brown
        call SaveInteger(Options, 2, 5, 'B003') //Gray
        call SaveInteger(Options, 2, 6, 'B008') //Green
        call SaveInteger(Options, 2, 7, 'B005') //Red
        //Beards
        //5 is missing because that is the "no beard"
        call SaveInteger(Options, 3, 1, 'A005') //Walrus
        call SaveStringBJ("Walrus", 3, 1, OStrings)
        call SaveInteger(Options, 3, 2, 'A000') //Full
        call SaveStringBJ("Full", 3, 2, OStrings)
        call SaveInteger(Options, 3, 3, 'A003') //Half
        call SaveStringBJ("Half", 3, 3, OStrings)
        call SaveInteger(Options, 3, 4, 'A004') //Hipster
        call SaveStringBJ("Hipster", 3, 4, OStrings)
        call SaveStringBJ("None", 3, 5, OStrings)
        set MaxChoice[3] = 5
     
    endfunction

    private function NewDialog takes nothing returns nothing
        local integer a = 0
        loop
        exitwhen a > 9
            set CDialog[a] = DialogCreate()
            call DialogSetMessage(CDialog[a], "Welcome, To Argos!")
            call TriggerRegisterDialogEventBJ(d, CDialog[a])
            set CNew[a] = DialogAddButton(CDialog[a], "New Character", 0)
            set CLoad[a] = DialogAddButton(CDialog[a], "Load Character", 0)
            call DialogDisplayBJ(true, CDialog[a], Player(a))
        set a = a+1
        endloop
    endfunction

    function FuncInit takes nothing returns nothing
        local destructable skin
        local integer m = 1
        local integer PID = GetPlayerId(GetTriggerPlayer())
        local CharDat dat
        local integer a = 0
        call RegisterVars(PID)
        set dat = LoadInteger(CD, PID, 1)
        set dat.Instructions = CreateMultiboard()
        call MultiboardSetItemsStyle(dat.Instructions, true, false)
        call MultiboardSetColumnCount(dat.Instructions, 3)
        call MultiboardSetRowCount(dat.Instructions, 10)
        call MultiboardSetItemWidthBJ(dat.Instructions, 1, 0, 1.0)
        call MultiboardSetItemWidthBJ(dat.Instructions, 2, 0, 12.5)
        call MultiboardSetItemWidthBJ(dat.Instructions, 3, 0, 7)
        call MultiboardSetItemWidthBJ(dat.Instructions, 2, 1, 24)
        call MultiboardSetItemWidthBJ(dat.Instructions, 2, 2, 24)
        call MultiboardSetItemWidthBJ(dat.Instructions, 2, 3, 24)
        call MultiboardSetItemValueBJ(dat.Instructions, 2, 1, INT_COLOR+"Use the Up and Down Arrow Keys to navigate attributes."+END)
        call MultiboardSetItemValueBJ(dat.Instructions, 2, 2, INT_COLOR+"Use the Left and Right Arrow Keys to navigate choices."+END)
        call MultiboardSetItemValueBJ(dat.Instructions, 2, 3, INT_COLOR+"Press Right at CONFIRM to finalize your character."+END)
        call MultiboardSetItemValueBJ(dat.Instructions, 2, 4, INT_COLOR+"Hair Color:"+END)
        call MultiboardSetItemValueBJ(dat.Instructions, 2, 5, INT_COLOR+"Skin Color:"+END)
        call MultiboardSetItemValueBJ(dat.Instructions, 2, 6, INT_COLOR+"Facial Hair:"+END)
        call MultiboardSetItemValueBJ(dat.Instructions, 2, 7, INT_COLOR+"Size:"+END)
        call MultiboardSetItemValueBJ(dat.Instructions, 2, 8, INT_COLOR+"Name:"+END)
        call MultiboardSetItemValueBJ(dat.Instructions, 2, 9, INT_COLOR+"CONFIRM"+END)
        call MultiboardSetItemValueBJ(dat.Instructions, 3, 4, LoadStringBJ(1, 1, OStrings))
        call MultiboardSetItemValueBJ(dat.Instructions, 3, 5, "White")
        call MultiboardSetItemValueBJ(dat.Instructions, 3, 6, LoadStringBJ(3, 5, OStrings))
        call MultiboardSetItemValueBJ(dat.Instructions, 3, 7, R2S((dat.size/formula)/12)+" ft.")

        call MultiboardSetItemValueBJ(dat.Instructions,1,4, ARROW)
        call MultiboardSetTitleText(dat.Instructions, "Instructions")
        call MultiboardDisplay(dat.Instructions, false)
        if ( GetLocalPlayer() == GetTriggerPlayer()) then
            call MultiboardDisplay(dat.Instructions, true)
        endif
        set a = 0
        call CameraSetupApplyForPlayer( true, Camera[PID], Player(PID), 0 )
        call TriggerSleepAction( 0.01 )
        call RotateCameraAroundLocBJ(0.01, GetCameraTargetPositionLoc(), GetTriggerPlayer(), 99999.0)
        set Display[PID] = CreateUnit(Player(PID), 'h003', GetRectCenterX(Stage[PID]), GetRectCenterY(Stage[PID]), 270.0)
        set dat.Character = Display[PID]
        call UnitAddAbility(Display[PID], SKIN_CHANGE)
        set skin = CreateDestructable(LoadInteger(Options, 1, 1), GetRectCenterX(Stage[PID]), GetRectCenterY(Stage[PID]), 0.0, 0.0, 0)
        call IssueTargetOrder( Display[PID], "grabtree", skin)
        set dat.Attribute = 1
        set dat.Choices[1] = 1
        call SetUnitScalePercent(Display[PID], 100.0, 100.0, 100.0)
        set skin = null
    endfunction

    private function NextAtt takes nothing returns nothing
        local integer ary = GetPlayerId(GetTriggerPlayer())
        local CharDat dat = LoadInteger(CD, ary, 1)
        if (dat.Attribute < MAXATT) then
            call MultiboardSetItemValueBJ(dat.Instructions,1,dat.Attribute+3, " ")
            set dat.Attribute = dat.Attribute+1
        else
            call MultiboardSetItemValueBJ(dat.Instructions,1,dat.Attribute+3, " ")
            set dat.Attribute = 1
            set dat.name = false
        endif
        if (dat.Attribute==5) then
            if (dat.name == false) then
                set dat.name = true
            endif
        endif
        call MultiboardSetItemValueBJ(dat.Instructions,1,dat.Attribute+3, ARROW)
    endfunction

    private function PreAtt takes nothing returns nothing
        local integer ary = GetPlayerId(GetTriggerPlayer())
        local CharDat dat = LoadInteger(CD, ary, 1)
        if (dat.Attribute == 1) then
            call MultiboardSetItemValueBJ(dat.Instructions,1,dat.Attribute+3, " ")
            set dat.Attribute = MAXATT  
        else
            call MultiboardSetItemValueBJ(dat.Instructions,1,dat.Attribute+3, " ")
            set dat.Attribute = dat.Attribute-1
        endif
        call MultiboardSetItemValueBJ(dat.Instructions,1,dat.Attribute+3, ARROW)
    endfunction

    private function NextChoice takes nothing returns nothing
        local integer ary = GetPlayerId(GetTriggerPlayer())
        local CharDat dat = LoadInteger(CD, ary, 1)
        if (dat.Attribute == 1) then
            if (dat.Choices[1] < MaxChoice[1]) then
                set dat.Choices[1] = dat.Choices[1] + 1
                if (dat.Skin == false) then
                    call IssueTargetOrder( Display[ary], "grabtree", CreateDestructable(LoadInteger(Options, 1, dat.Choices[1]), GetRectCenterX(Stage[ary]), GetRectCenterY(Stage[ary]), 0.0, 0.0, 0))
                else
                    call IssueTargetOrder( Display[ary], "grabtree", CreateDestructable(LoadInteger(Options, 2, dat.Choices[1]), GetRectCenterX(Stage[ary]), GetRectCenterY(Stage[ary]), 0.0, 0.0, 0))
                endif
            else
                set dat.Choices[1] = 1
                if (dat.Skin == false) then
                    call IssueTargetOrder( Display[ary], "grabtree", CreateDestructable(LoadInteger(Options, 1, dat.Choices[1]), GetRectCenterX(Stage[ary]), GetRectCenterY(Stage[ary]), 0.0, 0.0, 0))
                else
                    call IssueTargetOrder( Display[ary], "grabtree", CreateDestructable(LoadInteger(Options, 2, dat.Choices[1]), GetRectCenterX(Stage[ary]), GetRectCenterY(Stage[ary]), 0.0, 0.0, 0))
                endif
            endif
            call MultiboardSetItemValueBJ(dat.Instructions, 3, 4, LoadStringBJ(1, dat.Choices[1], OStrings))
        endif
        if (dat.Attribute == 2) then
            if (dat.Skin == false) then
                set dat.Skin = true
                call IssueTargetOrder( Display[ary], "grabtree", CreateDestructable(LoadInteger(Options, 2, dat.Choices[1]), GetRectCenterX(Stage[ary]), GetRectCenterY(Stage[ary]), 0.0, 0.0, 0))
                call MultiboardSetItemValueBJ(dat.Instructions, 3, 5, "Black")
            else
                set dat.Skin = false
                call IssueTargetOrder( Display[ary], "grabtree", CreateDestructable(LoadInteger(Options, 1, dat.Choices[1]), GetRectCenterX(Stage[ary]), GetRectCenterY(Stage[ary]), 0.0, 0.0, 0))
                call MultiboardSetItemValueBJ(dat.Instructions, 3, 5, "White")
            endif
        endif
        if (dat.Attribute == 3) then
            if (dat.Choices[3] < MaxChoice[3]) then
                call UnitRemoveAbility(Display[ary], LoadInteger(Options, 3, dat.Choices[3]))
                set dat.Choices[3] = dat.Choices[3]+1
                call UnitAddAbility(Display[ary], LoadInteger(Options, 3, dat.Choices[3]))
            else
                call UnitRemoveAbility(Display[ary], LoadInteger(Options, 3, dat.Choices[3]))
                set dat.Choices[3] = 1
                call UnitAddAbility(Display[ary], LoadInteger(Options, 3, dat.Choices[3]))
            endif
            call MultiboardSetItemValueBJ(dat.Instructions, 3, 6, LoadStringBJ(3, dat.Choices[3], OStrings))
        endif
        if (dat.Attribute==4) then
            if (dat.size < MAX) then
                set dat.size = dat.size+5.0
                call SetUnitScalePercent(Display[ary], dat.size, dat.size, dat.size)
            else
                set dat.size = MIN
                call SetUnitScalePercent(Display[ary], dat.size, dat.size, dat.size)
            endif
            call MultiboardSetItemValueBJ(dat.Instructions, 3, 7, R2S((dat.size/formula)/12)+" ft.")
        endif
    endfunction

    private function PreChoice takes nothing returns nothing
        local integer ary = GetPlayerId(GetTriggerPlayer())
        local CharDat dat = LoadInteger(CD, ary, 1)
        if (dat.Attribute == 1) then
            if (dat.Choices[1] == 1) then
                set dat.Choices[1] = MaxChoice[1]
                if (dat.Skin == false) then
                    call IssueTargetOrder( Display[ary], "grabtree", CreateDestructable(LoadInteger(Options, 1, dat.Choices[1]), GetRectCenterX(Stage[ary]), GetRectCenterY(Stage[ary]), 0.0, 0.0, 0))
                else
                    call IssueTargetOrder( Display[ary], "grabtree", CreateDestructable(LoadInteger(Options, 2, dat.Choices[1]), GetRectCenterX(Stage[ary]), GetRectCenterY(Stage[ary]), 0.0, 0.0, 0))
                endif
            else
                set dat.Choices[1] = dat.Choices[1]-1
                if (dat.Skin == false) then
                    call IssueTargetOrder( Display[ary], "grabtree", CreateDestructable(LoadInteger(Options, 1, dat.Choices[1]), GetRectCenterX(Stage[ary]), GetRectCenterY(Stage[ary]), 0.0, 0.0, 0))
                else
                    call IssueTargetOrder( Display[ary], "grabtree", CreateDestructable(LoadInteger(Options, 2, dat.Choices[1]), GetRectCenterX(Stage[ary]), GetRectCenterY(Stage[ary]), 0.0, 0.0, 0))
                endif
            endif
            call MultiboardSetItemValueBJ(dat.Instructions, 3, 4, LoadStringBJ(1, dat.Choices[1], OStrings))
        endif
        if (dat.Attribute == 2) then
            if (dat.Skin == false) then
                set dat.Skin = true
                call IssueTargetOrder( Display[ary], "grabtree", CreateDestructable(LoadInteger(Options, 2, dat.Choices[1]), GetRectCenterX(Stage[ary]), GetRectCenterY(Stage[ary]), 0.0, 0.0, 0))                
                call MultiboardSetItemValueBJ(dat.Instructions, 3, 5, "Black")
            else
                set dat.Skin = false
                call IssueTargetOrder( Display[ary], "grabtree", CreateDestructable(LoadInteger(Options, 1, dat.Choices[1]), GetRectCenterX(Stage[ary]), GetRectCenterY(Stage[ary]), 0.0, 0.0, 0))
                call MultiboardSetItemValueBJ(dat.Instructions, 3, 5, "White")
            endif
        endif
        if (dat.Attribute == 3) then
            if (dat.Choices[3] == 1) then
                call UnitRemoveAbility(Display[ary], LoadInteger(Options, 3, dat.Choices[3]))
                set dat.Choices[3] = MaxChoice[3]
                call UnitAddAbility(Display[ary], LoadInteger(Options, 3, dat.Choices[3]))
            else
                call UnitRemoveAbility(Display[ary], LoadInteger(Options, 3, dat.Choices[3]))
                set dat.Choices[3] = dat.Choices[3]-1
                call UnitAddAbility(Display[ary], LoadInteger(Options, 3, dat.Choices[3]))
            endif
            call MultiboardSetItemValueBJ(dat.Instructions, 3, 6, LoadStringBJ(3, dat.Choices[3], OStrings))
        endif
        if (dat.Attribute==4) then
            if (dat.size == MIN) then
                set dat.size = MAX
                call SetUnitScalePercent(Display[ary], dat.size, dat.size, dat.size)
            else
                set dat.size = dat.size-5.0
                call SetUnitScalePercent(Display[ary], dat.size, dat.size, dat.size)
            endif
            call MultiboardSetItemValueBJ(dat.Instructions, 3, 7, R2S((dat.size/formula)/12)+" ft.")
        endif
    endfunction


    private function FuncInitCond takes nothing returns boolean
        local integer a = 0
        loop
        exitwhen a > 9
            if (( GetClickedButton() == CNew[a] ) ) then
                return true
            endif
        set a = a+1
        endloop
        return false
    endfunction

    private function ProcessName takes nothing returns nothing
        local integer ary = GetPlayerId(GetTriggerPlayer())
        local CharDat dat = LoadInteger(CD, ary, 1)
        local integer slength = StringLength(GetEventPlayerChatString())
        local integer a = 0
        local integer b = 0
        local boolean accepted = true
        local boolean length = true
        local boolean minlength = true
        if (dat.name == true) then
            loop
            exitwhen a > slength
                loop
                exitwhen b > NA
                    if (SubStringBJ(GetEventPlayerChatString(), a, a) == NOTALLOWED[b]) then
                        set accepted = false
                    endif
                set b = b+1
                endloop
                set b = 0
            set a = a+1
            endloop
            set a = 0
            if (slength > STRING_MAX) then
                set length = false
            endif
            if (slength < STRING_MIN) then
                set minlength = false
            endif
            if (accepted == false) then
                //call BJDebugMsg("Symbols are not allowed!")
                call SimError(Player(ary), Alert[1])
            endif
            if (length == false) then
                call SimError(Player(ary), Alert[2])
            endif
            if (minlength == false) then
                call SimError(Player(ary), Alert[3])
            endif
            if (accepted == true) and (length == true) and (minlength == true) then
                call SimError(Player(ary), Alert[4])
                set dat.Name = GetEventPlayerChatString()
                call DestroyTextTag(dat.tname)
                set dat.tname = CreateTextTagLocBJ( "["+dat.Name+"]", OffsetLocation(GetUnitLoc(Display[ary]), -40+I2R(StringLength(dat.Name)), 0), dat.size, 10, 35, 100, 35, 0 )
                call MultiboardSetItemValueBJ(dat.Instructions, 3, 8, dat.Name)
            endif
        endif
    endfunction
    
    private function KeyCond takes nothing returns boolean
        local integer a = 0
        loop
        exitwhen a > 9
            if (( Done[a] == false ) ) then
                return true
            endif
        set a = a+1
        endloop
        return false
    endfunction

    private function Init takes nothing returns nothing
        local trigger t = CreateTrigger()
        local integer a = 0
        call InitVars()

        loop
        exitwhen a > 9
            call TriggerRegisterPlayerKeyEventBJ( t, Player(a), bj_KEYEVENTTYPE_DEPRESS, bj_KEYEVENTKEY_UP )
        set a = a+1
        endloop
        call TriggerAddAction(t, function PreAtt)
        call TriggerAddCondition(t, Condition(function KeyCond))
        set a = 0
        
        set t = CreateTrigger()
        loop
        exitwhen a > 9
            call TriggerRegisterPlayerKeyEventBJ( t, Player(a), bj_KEYEVENTTYPE_DEPRESS, bj_KEYEVENTKEY_DOWN )
        set a = a+1
        endloop
        call TriggerAddAction(t, function NextAtt)
        call TriggerAddCondition(t, Condition(function KeyCond))
        set a = 0
        
        set t = CreateTrigger()
        loop
        exitwhen a > 9
            call TriggerRegisterPlayerKeyEventBJ( t, Player(a), bj_KEYEVENTTYPE_DEPRESS, bj_KEYEVENTKEY_RIGHT )
        set a = a+1
        endloop
        call TriggerAddAction(t, function NextChoice)
        call TriggerAddCondition(t, Condition(function KeyCond))
        set a = 0
        
        set t = CreateTrigger()
        loop
        exitwhen a > 9
            call TriggerRegisterPlayerKeyEventBJ( t, Player(a), bj_KEYEVENTTYPE_DEPRESS, bj_KEYEVENTKEY_LEFT )
        set a = a+1
        endloop
        call TriggerAddAction(t, function PreChoice)
        call TriggerAddCondition(t, Condition(function KeyCond))
        set a = 0  
        
        set t = CreateTrigger()
        call TriggerRegisterTimerEventSingle(t, 0.01)
        call TriggerAddAction(t, function NewDialog)

        call TriggerAddCondition(d, Condition(function FuncInitCond))
        call TriggerAddAction(d, function FuncInit)
        
        set t = CreateTrigger()
        call TriggerRegisterPlayerChatEvent(t, Player(0), "", false)
        call TriggerAddAction(t, function ProcessName)
        set a = 0  
    endfunction

endlibrary

And the Character Data:
JASS:
library CharacterData initializer Init
globals
    hashtable CD = InitHashtable()
    
endglobals

struct CharDat
// Core Variables:
    unit Character
    real Vitality
    real Dexterity
    real Focus
    real AttackMin
    real AttackMax
    real Defense
    real Health
    real Mana
    real CritChance
    real EvaChance
    real StunChance
    real BlockChance
    real DropChance
    real ClevChance
    real ArmChance
    real AttackRate
// Variables that link to other systems:

//CCS Linked Vars
    integer array Choices[4]
    string Name = ""
    string color = ""
    integer Attribute = 1
    boolean Skin = false
    multiboard Instructions
    real size = 100.0
    boolean name = false
    texttag tname = null
endstruct


function RegisterVars takes integer i returns nothing
    local CharDat dat = CharDat.create()
    set dat.Vitality = 1.0
    set dat.Dexterity = 1.0
    set dat.Focus = 1.0
    set dat.AttackMin = 2.0
    set dat.AttackMax = 4.0
    set dat.Defense = 0.0
    set dat.Health = 50.0
    set dat.Mana = 10.0
    set dat.CritChance = 0.0
    set dat.ClevChance = 0.0
    set dat.ArmChance = 0.0
    set dat.EvaChance = 0.0
    set dat.BlockChance = 0.0
    set dat.StunChance = 0.0
    set dat.DropChance = 0.0
    set dat.AttackRate = 1.0
    call SaveInteger(CD, i, 1, dat)
endfunction

function MoveText takes nothing returns nothing
    local integer a = 0
    local CharDat dat

    loop 
    exitwhen a > 9
        set dat = LoadInteger(CD, a, 1)
        call SetTextTagPos(dat.tname, GetUnitX(dat.Character)-25 - (I2R(StringLength(dat.Name))/2), GetUnitY(dat.Character), dat.size)
    set a = a+1
    endloop
    set a = 0
endfunction

function RegisterHero takes unit hero, integer p returns nothing
    local unit u = hero
    local integer i = p
   // set dat.Character = u
endfunction

function Init takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerRegisterTimerEventPeriodic(t, 0.03)
    call TriggerAddAction(t, function MoveText)
endfunction

endlibrary

Warning:
I know there are a lot of BJ's I will clean up the code at a later point.
 
Level 4
Joined
Mar 27, 2008
Messages
112
One tip it's alot easier to have all the character stats inside an array and use constant integers to point to each index like this
JASS:
//the real array inside the characterdata struct
real array stats[how many stats you have probably best to have a constant integer storing the max amount so you can just change that value if you add or remove stats]
//and then the constant integers
constant integer STAT_VITALITY = 1
constant integer STAT_DEXTERITY = 2
//etc...
constant integer STAT_TOTAL = //total amount of different stats here

/*this way it's way more easy to change the players stats without having many function or a big if/then/else
now you can do something easy like*/
method addStat takes integer statid, real value returns nothing
//this method is inside chardata struct for example
set .stats[statid] = .stats[statid] + value
endmethod
Also it's better not to use TriggerAddAction instead use TriggerAddCondition and if you have a condition just use an If and always return false at the end. This is faster and Actions leak a little bit as far as I know.
 
Level 11
Joined
Jun 30, 2008
Messages
580
One tip it's alot easier to have all the character stats inside an array and use constant integers to point to each index like this
JASS:
//the real array inside the characterdata struct
real array stats[how many stats you have probably best to have a constant integer storing the max amount so you can just change that value if you add or remove stats]
//and then the constant integers
constant integer STAT_VITALITY = 1
constant integer STAT_DEXTERITY = 2
//etc...
constant integer STAT_TOTAL = //total amount of different stats here

/*this way it's way more easy to change the players stats without having many function or a big if/then/else
now you can do something easy like*/
method addStat takes integer statid, real value returns nothing
//this method is inside chardata struct for example
set .stats[statid] = .stats[statid] + value
endmethod
Also it's better not to use TriggerAddAction instead use TriggerAddCondition and if you have a condition just use an If and always return false at the end. This is faster and Actions leak a little bit as far as I know.

Great idea about the stats! Will change.
I'm not sure what you mean about the AddAction/AddCondition.
 
Level 16
Joined
Aug 7, 2009
Messages
1,403
JASS:
function Act takes nothing returns nothing
    //Do Stuff Here
endfunction
function init takes nothing returns nothing
    local trigger t=CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(...)
    call TriggerAddAction(t,function Act)
endfunction
JASS:
function Cond takes nothing returns boolean
    //Do Stuff Here
    return false
endfunction
function init takes nothing returns nothing
    local trigger t=CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(...)
    call TriggerAddCondition(t,Condition(function Cond))
endfunction

The second solution is faster.
 
Level 4
Joined
Mar 27, 2008
Messages
112
I think, though this is just a guess, that when there is no condition added to a trigger it automaticly returns a true value for the condition so there still is a condition checked though it's automaticly true.
 
Level 11
Joined
Jun 30, 2008
Messages
580
New Logo made by me! Tell me what you guys think and what I should change (if anything)
This is the first time I have ever made any kind of art on the computer, it is all free hand (even the runes), the only thing not made by me is the font.

Enjoy :D

Argos%20Logo%20v8%20Resized.png
 
Level 11
Joined
Jun 30, 2008
Messages
580
New Thread Update!

Progress:

- Argos is in full swing again! New terrain of the starting area of Lakewood Plateau is being formed. Expect screenshots soon!
- New Lore on the first page!
- New Signatures and logos! Get your own now!
- New Concept and Design! Will be posted soon!

Here are the new signatures!
- Just copy the HTML code into your signature!



Argos%20Logo%20v13%20Signature%20Resized%20Project%20Leader.png


HTML:
[IMG]http://dl.dropbox.com/u/2795138/Argos%20Signatures/Argos%20Logo%20v13%20Signature%20Resized%20Project%20Leader.png[/IMG]





Argos%20Logo%20v13%20Signature%20Resized%20Coder%20copy.png


HTML:
[IMG]http://dl.dropbox.com/u/2795138/Argos%20Signatures/Argos%20Logo%20v13%20Signature%20Resized%20Coder%20copy.png[/IMG]





Argos%20Logo%20v13%20Signature%20Resized%20Terrainer.png


HTML:
[IMG]http://dl.dropbox.com/u/2795138/Argos%20Signatures/Argos%20Logo%20v13%20Signature%20Resized%20Terrainer.png[/IMG]




Argos%20Logo%20v14%20Signature%20Resized%20Modeller%20copy.png


HTML:
[IMG]http://dl.dropbox.com/u/2795138/Argos%20Signatures/Argos%20Logo%20v14%20Signature%20Resized%20Modeller%20copy.png[/IMG]





Argos%20Logo%20v13%20Signature%20Resized%20Lore.png


HTML:
[IMG]http://dl.dropbox.com/u/2795138/Argos%20Signatures/Argos%20Logo%20v13%20Signature%20Resized%20Lore.png[/IMG]





Argos%20Logo%20v13%20Signature%202D%20artist.png


HTML:
[IMG]http://dl.dropbox.com/u/2795138/Argos%20Signatures/Argos%20Logo%20v13%20Signature%202D%20artist.png[/IMG]





Argos%20Logo%20v13%20Signature%20Resized%20Fan.png


HTML:
[IMG]http://dl.dropbox.com/u/2795138/Argos%20Signatures/Argos%20Logo%20v13%20Signature%20Resized%20Fan.png[/IMG]





ENJOY!
 
Last edited:
Status
Not open for further replies.
Top