• 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.

ORPG: what is inportant

Status
Not open for further replies.
Level 2
Joined
Nov 4, 2008
Messages
7
Different types of heroes, with well-made spells.
Good, but playable terrain.
LOTS of items.
Interesting boss fights. Not "Attack for 30 seconds. Hopefully he deals less damage than you".
The map has to be fun.
 
Level 26
Joined
Aug 18, 2009
Messages
4,097
Setting - A unique and vast world to discover and understand that is tied by a complex background story.
Roleplaying - The character you play shall be involved in the story, not just as the solver of quests but one's presence influences the environment and/or the hero shall reflect upon his/her actions.
Vivid NPCs - Most likely, ORPGs include computer-controlled characters. Those are not only meant to ask the player for help but to participate and reappear.
Atmosphere - The player has to relate to the character and be raised emotions. I do not really think that wc3's standard camera view adds to depth there but it depends on the other features.
Gameplay - An interesting combat system that does not wear thin too fast (in case battles are included), riddles, mini games, maybe alternative fights now and then, some dialogs (that the player is actually tempted to read), rewards, interacting with the world, some sandbox mechanics. When I play a 3d RPG, I want to be able to play around with the physics and jump through the world.
Style - Systems and innovative gameplay concepts yes, but they shall fit neatly into the game, have good controllings and obey a general elaborated and coherent style.
 
Level 20
Joined
Jul 14, 2011
Messages
3,213
Gameplay: What most RPG's lacks these days is "something more than just killing". Most of quest require killing something, or finding something someone holds by killing it. There's no thinking, and since all the RPG goes around killing, it becomes boring.
 
Level 17
Joined
Nov 13, 2006
Messages
1,814
All of the above + small save/load codes. Save/load codes that are larger than they need to be (most maps have codes more than 2x longer than they should be) just piss me off ;\.

example
i cant make it shorter :p

i save 12 ability level, 10 item (refine level for each and for 5 item the socket stone was gold be max ~8-9 and i got 6 different socket stone)

then regular str/agi/int/lv/class/gold and lumber :D

but if most of rpg save alot thing then code must be long :/
 
i save 12 ability level, 10 item (refine level for each and for 5 item the socket stone was gold be max ~8-9 and i got 6 different socket stone)

then regular str/agi/int/lv/class/gold and lumber :D

but if most of rpg save alot thing then code must be long :/

Oh, you can make it shorter if you do good catalog design and use a proper save/load system. If you are using Acehart's or any other save/load system besides the one I wrote, your codes will be longer (possibly >2x) than necessary >.>.

For example, you don't need to save all of the abilities... if you always save 12 abilities all the time, your save/load is already setup incorrectly. If you save the full strength using some constant value, then you are saving stats wrong. If you always save all of the items, you save items wrong. If you always save items using a catalog containing all of the items, you design your catalog wrong (same with abilities). If you are saving out of your max gold or dividing by some constant, you are saving your gold wrong.

If you are doing all of the above, your save/load is 100% completely setup wrong.

If you are using Acehart's or Pipedream's lib for save/load, then you are using the wrong save/load system, meaning that not only are you saving more data, but that data is taking up more space, meaning now you get extra size from both your poor design and the poor design of the system you are using.


So no, a save/load code does not need to be long. Save/load codes are only long because most maps do them that way because the map maker is usually too lazy to do it right, meaning that all the users get to suffer, which is why long save/load codes tend to piss me off, as that shows that the map maker was only willing to go so far to make their map any good. A map like that isn't worth my time, meaning that that map just wasted my time >.>.
 
Level 17
Joined
Nov 13, 2006
Messages
1,814
Oh, you can make it shorter if you do good catalog design and use a proper save/load system. If you are using Acehart's or any other save/load system besides the one I wrote, your codes will be longer (possibly >2x) than necessary >.>.

For example, you don't need to save all of the abilities... if you always save 12 abilities all the time, your save/load is already setup incorrectly. If you save the full strength using some constant value, then you are saving stats wrong. If you always save all of the items, you save items wrong. If you always save items using a catalog containing all of the items, you design your catalog wrong (same with abilities). If you are saving out of your max gold or dividing by some constant, you are saving your gold wrong.

If you are doing all of the above, your save/load is 100% completely setup wrong.

If you are using Acehart's or Pipedream's lib for save/load, then you are using the wrong save/load system, meaning that not only are you saving more data, but that data is taking up more space, meaning now you get extra size from both your poor design and the poor design of the system you are using.

i dont use any lib, i made from myself, but similiar point, so i use a 70+ length character string then make it with position

1st i want make more string and each load code detect what string need for decode :p

example i have 12 ability(each of them could be max lv5 atm but work till 9 i think), i do this way

1st ability lv + 2nd ability lv * 10 + 3rd ability lv * 100 + 4th ability lv * 1000 + 5th ability lv * 10000 + 6th ability lv * 100000 + 7th ability lv * 1000000 + 8th ability lv * 10000000

and this i convert same way than we convert decimal to hexadecimal just here we convert decimal to 70+ (this not constants because i can put more character then string is longer so could be less load code) thing (i dont know the right word)

so overall 12 ability is max 8 character

same way with stats but each stat only 2 character long (because 70*70 already 4900 already far enough for saveing the stats)

i do same methode for gold lumber etc

sockets also a number and look like this
example a item got 8 stone, 2 pdef stone(stone type1) 1 mdef(stone type2) 1 critical(stonetype3) 2 attack level (stone type 4) 1 reflect (stone type 5) 1 hp stone ( stone type 6)

this will be 2+1*10+1*100+2*1000+1*10000+1*100000 and the result i convert to number

ok in my case i save items like this:
if u wear that item then 1st value will be lets 1 then refine level 1 character, 4character the socket if its socketable item,2 character the item (i save the item level what could be 50-1200)
overall 1+1+4+2 character if socketable item else 1+1+2

if u dont wear item then i save 0 only so code is shorter
overall:1 character

i dont save items from inventory just equiped items :) long time ago i tryed aceheart saveload code but dont understanded how its work, now i made alone on test map with test values and i now undewrstand this, i glad if u have some suggestion
 
Level 17
Joined
Nov 13, 2006
Messages
1,814
Sadly, your save/load code appears to be longer than necessary.

It doesn't appear that you are converting everything into 1 massive number, so it grows larger there. Furthermore, you are always saving all of the information rather than saving partial sets.


You are using BigInt right?

bigint?
regular int (i dont event thought bigint exist in jass, i mean i know onlt the regular int), so max value is 2^31 so around 2 000 000 000 iis compresed to 6 character.

mystring is =abcd....zABCD...Z0123456789-_=!$#

i use numbers because i do this

1st function convert number to string
2nd get the letter position from big string

then something like this set stringgolds = ItoS("923444123",5)
JASS:
function ItoS takes integer i, integer len returns string
    local string s = ""
    local integer m = 0
    local integer c = 0
    local integer l = StringLength(udg_LoadCode)
    local integer v = l * l * l * l * l
    local string n = SubString(udg_LoadCode, 0, 1)
    loop
        exitwhen i==0
        if i > v then
            set m = i / v
            set i = i - v * m
            set s = s + SubString(udg_LoadCode, m, m + 1)
        elseif v==1 then
            set m = i
            set i = i - m
            set s = s + SubString(udg_LoadCode, m, m + 1)
            set i = 0
        endif
        set v = v / l
    endloop
    loop
        exitwhen StringLength(s)==len
        set s = n + s
    endloop
    return s
endfunction

function SPos takes string s returns integer
    local integer l = StringLength(udg_LoadCode)
    local integer i = 0
    local string spos = ""
    loop
        exitwhen i == l or spos == s
        set spos = SubString(udg_LoadCode, i, i + 1)
        set i = i + 1
    endloop
    if spos != s then
        set i = - 1
    endif
    set spos = null
    return i - 1
endfunction

how can i compress more?:p
 
Rather than using many integers, you can form them all up into 1 giant one.

http://www.hiveworkshop.com/forums/jass-resources-412/system-bigint-188973/

My save/load stuff in Spells section runs off of BigInt.


Furthermore, you are still saving the actual data incorrectly... not only the wrong format, but the wrong way... you don't know how to save a partial set do you?
 
Level 17
Joined
Nov 13, 2006
Messages
1,814
Rather than using many integers, you can form them all up into 1 giant one.

http://www.hiveworkshop.com/forums/jass-resources-412/system-bigint-188973/

My save/load stuff in Spells section runs off of BigInt.


Furthermore, you are still saving the actual data incorrectly... not only the wrong format, but the wrong way... you don't know how to save a partial set do you?

its vjass, i use only regular we coz i pissed to jngp because allways i got problem with it if i try jassing with it :/

not only the wrong format, but the wrong way... you don't know how to save a partial set do you?

no but also i dont know what mean under wrong way...how else could u convert integer to string?

without item my code was also short, just with items will be long, but since i dont use vjass bigint cant help i think
 
I'm going to make this very simple for you to understand

2 and 1 are smaller than 2 and 1 as separate integers

2*2+1 = 5

2 and 1 make up 21

5 < 21


If you have more than one integer making up your save/load code, your code is longer than it needs to be. The more integers you have in your code, the longer it will be.

21 has 2x more digits than 5 does. This is the reason why most save/load systems, including AceHart's, have codes around 2x longer than the ones produced using BigInt. BigInt makes it possible to store all values into 1 integer. Without BigInt, you have to store them using multiple integers or you have to write your own BigInt library.


As for partial sets, we'll deal with that after you get your stuff saved correctly.

edit
If you want, you can convert my vjass BigInt 2 lib to JASS : ). It'll help decrease the size of your save/load code ;p. The alpha is in a thread in this forum =D.
 
Last edited:
Level 17
Joined
Nov 13, 2006
Messages
1,814
I'm going to make this very simple for you to understand

2 and 1 are smaller than 2 and 1 as separate integers

2*2+1 = 5

2 and 1 make up 21

5 < 21


If you have more than one integer making up your save/load code, your code is longer than it needs to be. The more integers you have in your code, the longer it will be.

21 has 2x more digits than 5 does. This is the reason why most save/load systems, including AceHart's, have codes around 2x longer than the ones produced using BigInt. BigInt makes it possible to store all values into 1 integer. Without BigInt, you have to store them using multiple integers or you have to write your own BigInt library.


As for partial sets, we'll deal with that after you get your stuff saved correctly.

edit
If you want, you can convert my vjass BigInt 2 lib to JASS : ). It'll help decrease the size of your save/load code ;p. The alpha is in a thread in this forum =D.

ok i understand that part about longer number get far more benefit from converting than many smaller int, i agree with this tottally (this is why i saved 8 ability like 1 bigger number), just ok i will check the library when i go back to home, i checked last time but i tryed to understand it but dont got how it work, i watched u create more trigger and etc

partial sets: mean example if i wear lv100 helmet, and lv100 boot and armor then make it to 2 code where 1st say if it is a set and second what equipment set?
 
The idea of saving partial sets is this.

If you have your standard wc3 inventory that can save items and the hero is only holding 4 items, don't save the extra 2 empty slots... that's just a waste of space... only save 5 slots, 4 for the items and 1 for holding 0 so that you know when to stop. An empty inventory should only save 1 slot.

After this, you also use advanced catalogs to lower the amount of space that each item takes up. If a hero can only equip warrior items, there is no need to use a catalog that includes wizard items... only use the warrior catalog. If a slot can only hold axes, there is no need to include armor when saving that slot.. just save axes. If you can only hold 1 sword and you just saved a sword, there is no need to include the sword catalog with future saves... remove it from your general catalog.

Someone was just asking me how he should do this and I gave him an algorithm that'll allow him to save partial inventories + remove catalogs as the necessary items are being saved.

If you are saving abilities and the hero is level 1, you shouldn't be saving level 40 abilities... that's just silly >.<. If you look at my SaveAbilities function, it saves abilities smartly... just like my SaveItemCharges function saves item charges smartly.. it doesn't save an item charge if the item can't have a charge >.<. It doesn't save a max item charge of 99 if the item can only hold 3 charges like other resources do... no, it saves the exact and precise item charge.

This is the exact thing I was talking about... most map makers are just sloppy about what they do. Later when you talk to them and say that there is a better way, most people will just say, "nah, you're wrong, what you say is just totally impossible." What's funny is that they will continue to say this even after you prove that you are right... they'll just go, that can't be working, even when it saves and loads properly.


For save/load, you always want to use BigInt and Catalog >.<. For saving values like gold, you want to use CompressInt.


There are many, many save/load resources out there (most of which that I have written) that help make good save/load easier, yet people will try to do it on their own and then wonder why their code is so much longer than it would have been if they had just taken the easy route and used the already made resources... yes, even map specific save/load systems lose to the general resources. Why? Because the general resources are used to create map specific save/load systems >: O. Notice that my resource isn't called The Ultimate Super Badass Save/Load System of the world >.<. It's called Save/Load With Snippets, meaning that it will teach you how to make your own save/load system using a collection of snippets >.<. Not using the snippets to make your own save/load system and instead writing your own snippets that don't even work as well is just silly. But then again, we have many GUI users who go, "I just want a save/load system." You can't have a general all purpose save/load system because not every map needs the same things or saves in the same way... they don't seem to understand that >.<.
 
Level 17
Joined
Nov 13, 2006
Messages
1,814
The idea of saving partial sets is this.

If you have your standard wc3 inventory that can save items and the hero is only holding 4 items, don't save the extra 2 empty slots... that's just a waste of space... only save 5 slots, 4 for the items and 1 for holding 0 so that you know when to stop. An empty inventory should only save 1 slot.

After this, you also use advanced catalogs to lower the amount of space that each item takes up. If a hero can only equip warrior items, there is no need to use a catalog that includes wizard items... only use the warrior catalog. If a slot can only hold axes, there is no need to include armor when saving that slot.. just save axes. If you can only hold 1 sword and you just saved a sword, there is no need to include the sword catalog with future saves... remove it from your general catalog.

Someone was just asking me how he should do this and I gave him an algorithm that'll allow him to save partial inventories + remove catalogs as the necessary items are being saved.

If you are saving abilities and the hero is level 1, you shouldn't be saving level 40 abilities... that's just silly >.<. If you look at my SaveAbilities function, it saves abilities smartly... just like my SaveItemCharges function saves item charges smartly.. it doesn't save an item charge if the item can't have a charge >.<. It doesn't save a max item charge of 99 if the item can only hold 3 charges like other resources do... no, it saves the exact and precise item charge.

This is the exact thing I was talking about... most map makers are just sloppy about what they do. Later when you talk to them and say that there is a better way, most people will just say, "nah, you're wrong, what you say is just totally impossible." What's funny is that they will continue to say this even after you prove that you are right... they'll just go, that can't be working, even when it saves and loads properly.


For save/load, you always want to use BigInt and Catalog >.<. For saving values like gold, you want to use CompressInt.


There are many, many save/load resources out there (most of which that I have written) that help make good save/load easier, yet people will try to do it on their own and then wonder why their code is so much longer than it would have been if they had just taken the easy route and used the already made resources... yes, even map specific save/load systems lose to the general resources. Why? Because the general resources are used to create map specific save/load systems >: O. Notice that my resource isn't called The Ultimate Super Badass Save/Load System of the world >.<. It's called Save/Load With Snippets, meaning that it will teach you how to make your own save/load system using a collection of snippets >.<. Not using the snippets to make your own save/load system and instead writing your own snippets that don't even work as well is just silly. But then again, we have many GUI users who go, "I just want a save/load system." You can't have a general all purpose save/load system because not every map needs the same things or saves in the same way... they don't seem to understand that >.<.

oh but in my case have few thing different:

i dont use invetory like item storage, i use multiboard invetory and i dont use the itemtypeid, just item levels, so if i save 1 item then just 2 character but in my map any class can wear any item if he got stat for it, and stating is free so u can do hybrid stat build.
so i dont save the physical invetory because i dont think that worth if equipments arent there=>dont need to save item charges coz i cant use armor with 2 charge :D


abilities work like libram pages just it is via gui, so add/remove ability just i wrote a dialog for could be level up when u reach x level (for each ability need different level)

but i got what u mean, and i agree about save load code are map specific still u gived few ideea, but still i feel myself dumb when i wacthed ur algorithm about how u make integer shorter coz was chinese to me (so dont understanded yet) :D


but i got a ideea, i can save in 2 character if ability is higher than lv2, so like this

if 1st abilitylv > 1 then
abilityon=abilityon+1
endif
if 2nd abilitylv > 1 then
abilityon=abilityon+2
endif

if 3rd abilitylv > 1 then
abilityon=abilityon+4
endif
.......

if 12th abilitylv > 1 then
abilityon=abilityon+4096
endif

but problem if every ability is higher than 1 level then code just longer with +2 useless character, now i merged too the 3 stat (str/agi/int like this str*10^6+agi*10^3+int) and it is just 5 character instead 6 and now the maximum value is 999 for each instead 4900 but still ok since i dont plan to make lv1000 in my map so atm cant be more than ~500 :D

still question the gold/lumber thing
its 4+4character to save atm, i dont use separator character because then longer with +1 character but anyway if u got no gold then still 4 character even value is 0 because if i avoid the separator character then character size must be fixed, else its shorter but when players have max gold then +1 character :D

i think about that, i can shorter if player got all ability on same level, then make something like this [1 where [=10 so its mean the next 10 ability is at lv1 just still think about i need character what i dont use in my string and still dont make problem (like %|\ etc)

oh and thx ur time :)
 
Level 17
Joined
Nov 13, 2006
Messages
1,814
You can still save partial custom inventories... it sounds like slots in your inventory equip specific items, so you can take advantage of that.

just idk how, coz dont have class limitation for equipments, i can wear low lv staff with low lv heavy armor or higher lv heavy armor with high level axe and potentional variation is enough high

(atm i save 1 character, inside this character i save refine level/if item have socket or no/item is weared or no then +2character the item if it is weared)
 
Level 17
Joined
Nov 13, 2006
Messages
1,814
You don't understand what I am saying..

Can you wear a staff weapon in a slot that holds armor pieces?
Can you wear gloves in the helm slot?

hehe right, ok got why similiar than regular things ok, acctually this reduce from 2 character length to 1 the equipments (exclude weapons coz i got more weapon than what i can code to 1 character).


ty
 
Level 17
Joined
Nov 13, 2006
Messages
1,814
around 14 i understand about ln give how much digit needed with x base, also i know how work the mod (the % symbol is useable too like *+-/? coz until now i converted real to int and made this: dividend - (dividend / divisor) * divisor)

also i got how can i convert from decimal to anything (but since i use string for this its got a limit coz string cant be unlimited long because after x dont have more character, atm i use ~75)

mainly that part i dont got about when u store 100 with 101 base or in gold case 1 000 000 with 1 000 001 base, coz idk how it work, normally if divisor higher then mod is same than the original nr so to 100 it is 100 what is 3 digit instead 2 (like with 62), u can explain this?

since string length its limited idk how can i do this with higher base than 7x
 
You have the number 30. You want to save the number 60. The second number has a max of 99. This means that you use base 100 to store it as base 100 can store up to 99.

Hex: FF*10 = FF0 = 255*16 = 4080
Binary: 1*10 = 110 = 1*2 = 2
Decimal: 12*10 = 120

Notice how each number ends with a 0, a full digit to store a number. You can have a number with every digit in a different base.

So, 30*100 = 3000 + 99 = 3099


That is what I meant by storing gold in base 1,000,001.

edit
Ok, this appears to be the catalog you want minus the levels

http://www.hiveworkshop.com/forums/...talog-level-slot-group-version-filter-212758/

If a warrior can equip something like a wand (no groups), then you can get away with this minus the level
http://www.hiveworkshop.com/forums/submissions-414/item-catalog-level-group-version-filter-212750/

^)^
 
Level 17
Joined
Nov 13, 2006
Messages
1,814
1st of all u can tell me how can i convert biogint library to normal jass?

ok i gues from global thing i must make global variables but what could i do with debug, private module Init, private static method onInit takes nothing returns nothing things? :D


about these links a bit chinese coz i dont used vjass and ur lv a bit higher than mine in this things
but let me ask this
call ItemCatalog.addGroup(cver, 'Hmkg', 1)
call ItemCatalog.add('afac', cver, 1, 2, 0, false)

its something like u create a item pool (i mean here item pool like in gui the unit group array) then u can sort item to different groups, right?

a secret question: i can ask what is the code length for this where these the components:
(min max value)
integer:0-9
integer:0-9
integer:1-170
integer:5-999
integer:5-999
integer:5-999
integer:0-999
integer:50-99 (but also can be 0 too)
integer:100-249(but also can be 0 too)
integer:250-399(but also can be 0 too)
integer:400-549(but also can be 0 too)
integer:500-549(but also can be 0 too)
integer:550-599(but also can be 0 too)
integer:600-649(but also can be 0 too)
integer:650-699(but also can be 0 too)
integer:700-749(but also can be 0 too)
integer:750-1200(but also can be 0 too)
integer:0-999 999 999(this 5x time)
integer:0-10 (x10 times)
integer:1-7 (this x11 times)
integer:0-1000000
integer:0-1000000
where have min/max value and chance for 0 thats item and i wrote 0 if not equiped, ofc i understand u can save to hash but i wrote for represnt the ranges, coz in 6/10 case its between 0-49,3/10 time its 0-149, 1/10 times 0-549

i am just curios what the possible length if lets say u use catalogs and bigint ?
 
its something like u create a item pool (i mean here item pool like in gui the unit group array) then u can sort item to different groups, right?

not even close

Also, your ranges are bad... I assume that this -> 1000000 is for gold... first, compress the ranges necessary... furthermore, for items, the ranges are variable if you do it right, so you can't really get a precise number. Furthermore, with items, you save partial sets. I can give you a worst case scenario, but again, you would have to list out all of your items with restrictions and what slots they can go into and what heroes can use them.


Also, rather than just hijacking this thread, you should post your own thread or pm me.


This is the last reply I am giving to you on this thread ^)^. I noticed that you weren't the op ;p.


And btw, with partial inventories, I have turned a 6 character save/load code into a 1 character save/load code np. With full inventories and good catalogs, I have turned a 6 char save/load code into a 2 char save/load code. The full demonstrations of this are in the latest unreleased interactive save/load tutorial.
 
Status
Not open for further replies.
Top