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!
If that is what you expect from this ORPG I suggest removing the supporter signature.
Hagge has learned over BoW how to make good loading/saving codes.
Encoder is not needed and I do not like the case sensitivity part of it even tho it is much safer.
Also I have a question. First you say that 60 characters is way too much to write down for a saving code. When I prove to you that 60 characters is indeed a very small numbers you directly change the subject to changing the saving system to Encoder from Hagge5's customly made one which would make it even harder to write down.
We know how to program all the core things for the ORPG, the only thing we need help with is content. Please comment more on the content of the map instead of the core systems.
i think my last post was meant to you to see that 60 is a max for encoder, and it save all bunch of bullshit's i am indeed supporting, just wanted to say that.
Wait, I'm searching for a word.... oh I got it! CONFIDENT
You tried to force upon me to use it with the fact that the code is short and it's the best and blah blah blah....
Encoder
(between these, almost guaranteed never to hit min or max size, will typically stay in middle)
ZZZZZ-ZZZZZ-ZZZZZ-ZZZZZ
to
ZZZZZ-ZZZZZ-ZZZZZ-ZZZZZ-ZZZZZ-ZZ
So if I just save only a hero with level one I get a 21 character long code and most of the saves I get a 60 char long. Reeeeaaaallllyyyyy short.
Don't you have better thing than messing around the map developement threads and advertising your system?
So if I just save only a hero with level one I get a 21 character long code and most of the saves I get a 60 char long. Reeeeaaaallllyyyyy short.
Don't you have better thing than messing around the map developement threads and advertising your system?
I'm just making sure people are using a good save/load system or are coding their own correctly so that I don't have to type a huge code if I want to play their game ; (. I never actually mentioned Encoder here =), other people did ;p.
For all of that info with the catalog sizes, the code is much shorter than what you'd have in any other system. In other systems, it could be as much as double the size.
That has absolutely nothing to do with Encoder. The only thing it handles is security and registration of save/load commands. For that, you have to understand how save/load works since you are handling all of the saving and loading of the data yourself through the use of BigInt.
And at the bare minimum, I really recommend using BigInt since it can deal with very large numbers. I know that if you don't use it, you'd either have to code a library identical to BigInt from scratch, use a string calculator like in Pipe's (much worse), or do a very crappy save/load code. BigInt is just a data structure for storing very large integers, that is all.
This is an example of very simple save/load done with BigInt using 0 security (just the plain vaues). If you look, this is about the same thing you'd do if you coded it from scratch. BigInt just has things that lets you easily convert between bases and work with numbers way bigger than could ever fit into an integer =).
JASS:
struct tester extends array
private static method save takes nothing returns string
local Base encryptKey = Base["0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"]
local BigInt int = BigInt.create(encryptKey)
local string s
//storing values of
//501 out of a max of 1000000 (gold) (d1)
//1938 out of a max of 1000000 (d2)
//5821 out of a max of 28392 (super powers) (d3)
//1 out of a max of 1 (bool) (d4)
//0 out of a max of 1 (bool) (d5)
//11 out of a max of 11 (player id?) (d6)
//19 out of a max of 1000 (unit level) (d7)
//12 out of a max of 16 (flags) (d8)
call int.add(501,0) //encode 501 (max doesn't matter, put biggest value here)
call int.multiply(1000000+1)
call int.add(1938,0) //encode 1938
call int.multiply(28392+1)
call int.add(5821,0) //encode 5821
call int.multiply(1+1)
call int.add(1,0) //encode 1
call int.multiply(1+1)
call int.add(0,0) //encode 0
call int.multiply(11+1)
call int.add(11,0) //encode 11
call int.multiply(1000+1)
call int.add(19,0) //encode 19
call int.multiply(16+1)
call int.add(12,0) //encode 12
set s = int.toString()
call int.destroy()
//display the code ^_^
return s
endmethod
private static method load takes string s returns nothing
local Base encryptKey = Base["0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"]
local string loadCode = s
local BigInt int = BigInt.convertString(loadCode, encryptKey)
local integer d8 = int.divide(16+1) //12
local integer d7 = int.divide(1000+1) //19
local integer d6 = int.divide(11+1) //11
local integer d5 = int.divide(1+1) //0
local integer d4 = int.divide(1+1) //1
local integer d3 = int.divide(28392+1) //5821
local integer d2 = int.divide(1000000+1) //1938
local integer d1 = int.toInt() //501
call int.destroy()
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "d1: " + I2S(d1) + "==" + "501")
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "d2: " + I2S(d2) + "==" + "1938")
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "d3: " + I2S(d3) + "==" + "5821")
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "d4: " + I2S(d4) + "==" + "1")
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "d5: " + I2S(d5) + "==" + "0")
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "d6: " + I2S(d6) + "==" + "11")
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "d7: " + I2S(d7) + "==" + "19")
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "d8: " + I2S(d8) + "==" + "12")
endmethod
private static method onInit takes nothing returns nothing
local string s = save()
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "2G9Z2EVGV87IY\n" + s)
call load(s)
endmethod
endstruct
I'm just recommending different venues for you because otherwise a lot of people go to CodeGen or Acehart's stuff, which results in these massive save/load codes that I hate to type =(. And if they code it themselves, 99 times out of 100, they store numbers by digits of the save/load code base rather than by digits of different bases.
Encoder is not needed and I do not like the case sensitivity part of it even tho it is much safer.
Also keep in mind that in the load command, to remove case sensitivity, you need only add this to your load command- StringCase(GetEventPlayerChatString(),true)
Encoder itself does not have a save or load command (the framework does).
But remember that I'm not necessarily recommending Encoder. I've shown you 2 totally different ways to do this so that the save/load code is easier to create and of high quality.
I am talking about the map ^)^. I go over 1 system at a time rather than all at once ;D.
For example, the next thing I'm planning to address is the wasd movement system. The only plausible way to do that would be with abilities on items as regular abilities would have a delay and a very slight cast time. Believe me, I once tried to use regular abilities as sort of commands too and that is how I know ^)^. However, items do respond incredibly fast because they don't have the weird cast time that the regular abilities have (even with a channel of 0).
It's good to address the core systems before you actually start them >: P
But anyways, as long as you are educated in the tools that can be used for save/load, I'm totally ok ^)^. Like I said, a lot of people just code it the wrong way or go to CodeGen/Acehart's and I try to prevent that =D.
edit
Also keep in mind that for the ability hot key idea for movement, a user would have to keep hitting the keys over and over again in order to move as they couldn't just hold it down. This is the reason that only arrow keys have been used in the past.
It's just not feasible to do wasd movement ^)^. And for online, arrow keys aren't really a good way to go as they have way too much delay : ), that's why most maps just go with point n' click.
I am talking about the map ^)^. I go over 1 system at a time rather than all at once ;D.
For example, the next thing I'm planning to address is the wasd movement system. The only plausible way to do that would be with abilities on items as regular abilities would have a delay and a very slight cast time. Believe me, I once tried to use regular abilities as sort of commands too and that is how I know ^)^. However, items do respond incredibly fast because they don't have the weird cast time that the regular abilities have (even with a channel of 0).
It's good to address the core systems before you actually start them >: P
But anyways, as long as you are educated in the tools that can be used for save/load, I'm totally ok ^)^. Like I said, a lot of people just code it the wrong way or go to CodeGen/Acehart's and I try to prevent that =D.
edit
Also keep in mind that for the ability hot key idea for movement, a user would have to keep hitting the keys over and over again in order to move as they couldn't just hold it down. This is the reason that only arrow keys have been used in the past.
It's just not feasible to do wasd movement ^)^. And for online, arrow keys aren't really a good way to go as they have way too much delay : ), that's why most maps just go with point n' click.
No problem, I know arrows has incredible delay, and Ive dealt with all of these issues.
The wasd uses wasd, and triggers when a unit begins casting, therefore removing this cast delay.
When you move, you won't have to spam-click, it works like this:
W: Start moving forward
W (when moving): Stops moving forward
A: Turns X decrees left (X will be setable for each player, they choose themselves)
D: Turns X decrees right (X will be setable for each player, they choose themselves)
S: Turns 180 decrees (to turn around quickly and get to some angles without having to spamclick a/d 10 times)
About savesystems, the one you called simple gui-compatible or w/e seemed kinda nice actually. From what I understand it generates codes for everything on It's own.
I'm a little confused though.
First thing first, I cant find which part of the code actually LOADS stuff, therefor its kind of hard to add items after load etc.
A little tutorial on how I can refer to the integer the loading player wrote in the code would be nice (whats the udg_/Local called?)
I'm also abit confused on how I do when I add new variables:
JASS:
//copies GUI variable data into array vars
private function CopyData takes integer id returns nothing
set test[0]=udg_test[id]
set test[1]=udg_test2[id]
nb set test[2]=udg_test3[id]
endfunction
//loads values from code into arry vars
private function LoadData takes BigInt i, integer id returns nothing
set test[2]=i.divide(10000)
set test[1]=i.divide(100000)
set test[0]=i.divide(1000000)
endfunction
//erases GUI vars
private function UnloadData takes integer id returns nothing
set udg_test[id]=0
set udg_test2[id]=0
set udg_test3[id]=0
endfunction
//writes to GUI vars (creates units, does w/e)
private function FinalizeData takes integer id returns nothing
set udg_test[id]=test[0]
set udg_test2[id]=test[1]
set udg_test3[id]=test[2]
I assume I'm supposed to create a new array for each test, Increase the divide thingy for last divide*10 and... yeah, pretty much that. Will it work on It's own afterwards?
If I save an item, I set an integer thingy like the test(X) to the item that is saved? Like, I have a list of items saved in arrays...
Like this if he has crown of kings?:
Item[1]==Claws of attack
Item[2]==Crown of kings
set test4==2
If you explain these things to me, I would actually consider it. Not because it's shorter, but because it seems safer compared to my GUI version, were player names will be slightly altered (nothing advanced, something like all Z=Y and B=A, etc.) and then scattered throughout the code.
I really suck at jass, so we'll see if I can make it work
Oh, and sverker, I actaully don't mind him posting about this stuff, since he's just making sure were doing a good job.
The framework thing I linked automatically does the save/load commands for you. It also automatically calls those 4 functions correctly during save/load. You don't need to know where the save/load is done.
If you don't want case sensitive codes, what I can do is add a small line to it for you to make it so that codes aren't case sensitive =).
So, what I'll do here is go over those 4 functions for you.
The first thing is that those GUI variables are just there as a demonstration. You create your own GUI variables.
The next thing is that you really only need 1 array for everything. First value goes into slot 0, second value into slot 1, etc. You'll see why the data isn't just put into the GUI variables in a few =P.
This function copies all of your data into the array. All values, units and etc, should be copied over to your array here. This only copies the data, that is it.
For example, in the demonstration, I'm copying my 3 test variables into my test array.
The integer id refers to the id of the player being copied.
JASS:
//copies GUI variable data into array vars
private function CopyData takes integer id returns nothing
set test[0]=udg_test[id]
set test[1]=udg_test2[id]
set test[2]=udg_test3[id]
endfunction
This is done when a code is loaded. The code is passed to this function as a BigInt, i. The id again refers to the player id (player loading the code).
In this case, the values stored inside of the code are being read into the array that stores values. Remember that integers have to be read backwards, so this is why the last value is being read first.
Now, it doesn't seem like you understand how integers are combined and taken apart.
This is from my Saving and Loading tutorial, which explains how save/load systems work.
However, this was not enough for some people. A lot of people knew how to actually merge numbers to get the code smaller, but the problem was that Warcraft 3 could only have a value of up to 2147483647. The value of 1666666lp6484848 as a number is 8445401677339545808355929060, well beyond the 2147483647 limit. Pipedream came out with a save/load system that could handle any sized number, meaning all of the values could be merged. This was possible because it had its own big number library, which was made to handle really big numbers. Nestharus developed his own big number system called BigInt.
Merging a number requires that each number be converted into its own base. The base converted to is the maximal value that number can have.
Converting between bases is pretty easy. It ((digit*base+digit)*base+digit)*base, etc...
For example, converting the number 1234 into base 10, it is
Remember that each digit in a number is a placeholder. It can hold a value up to the base size - 1 (the -1 because of 0). This means that if one were to multiply a number by a base, that number would have room for another number in it. 1234 can also be thought of as 1,2,3,4. To combine them, just multiply by the base and add the next digit.
Merging numbers of different bases is a little different. Multiply by the base of the next digit and then add the digit (make room for it**).
For example, merging 12, 16, and 18 of bases 15, 20, and 25.
The numbers within a value are retrieved by splitting it back up. What is called modulo arithmetic is used. It is an operation taught to elementary school students when they first learn division. When dividing a number by a number, there is a remainder, and that remainder is the answer to the modulos of that number by the other number. The modulos operator is %. The button for modulo on the windows calculator is Mod.
Rather than multiplying by the base, do number%base.
//loads values from code into array vars
private function LoadData takes BigInt i, integer id returns nothing
set test[2]=i.divide(10000)
set test[1]=i.divide(100000)
set test[0]=i.divide(1000000)
endfunction
This next one erases GUI variables. This is also where you'd remove a player's units or w/e. This is done when a coded is successfully loaded before it is actually finalized (everything is created).
In this case, I'm just resetting all of the GUI variables back to 0. Resetting these variables is rather pointless for my demonstration, but this shows you that you should erase any data that needs to be erased here. For example, removing units.
JASS:
//erases GUI vars
private function UnloadData takes integer id returns nothing
set udg_test[id]=0
set udg_test2[id]=0
set udg_test3[id]=0
endfunction
The final one creates all of the data. In this case, I'm just writing to my GUI variables, but this is where you'd create units and set the player's gold and what not.
JASS:
//writes to GUI vars (creates units, does w/e)
private function FinalizeData takes integer id returns nothing
set udg_test[id]=test[0]
set udg_test2[id]=test[1]
set udg_test3[id]=test[2]
So as you can see, this framework is very low level. You essentially have to do all of the save/load yourself. However, it is much easier to use this than creating an entire save/load system from scratch =).
This does require vjass knowledge obviously. I can't make it go through GUI because of BigInt, otherwise I would =). I can easily call 4 GUI triggers and pass the necessary information to them so that all of the code can be done in GUI, but again, the BigInt stuff makes that kind of pointless : P.
-Movement Stuff-
I don't think a lot of players will like that very much =).
edit
Also keep in mind that if you want to save things like items and heroes, you will still need catalogs.
I would for a change like to see more realistic thing's in this ORPG, well fishing is OVER USED in allmost every single ORPG i said allmost.
I would like if there would be a black smith or a leather worker or a tailorer for a job's that you will do for other's and yourself, i would like it to be a mini game like i dont know use a hammer on a hot piece of metal and get your blade? and for leather working you need to stich the pieces of leather that you hunted and i dont know this kind of games will bring WHOOLE another level of gaming, i think this is extremely possible to do.
In alchemism you will have to brew the potions yourself, adding the correct ingredience at the right time and use a ability for "mixing it up". It will be kinda 3D.
1) Find the hunter outside in the forest
2) Complete the hunter's quester
3) he ask you if you wanna be a hunter
First part of Hunting is Skinning:
How to:
1) Kill a animal
2) Use your knife to skin the animal
3) You get mats
4) Rare skins is also available to be dropped, but from things like dragons
Second part is Leather working
1) Take your skin back to the hunter, and find the table.
2) decide what you want to make with your profession menu (thinking like building menu, just with ability's
3) use your knife to create the material.
You made the video well, sverker.
You haven't read up to well on the combat though, inflicting damage while he is under the effect of Open Wound will break it, it will also disappear after Spine Crush.
Noticed a bug were "switch" didn't grant you the mana if you had max mana while casting cuz of it, lol.
A little spell list, so you all understand better. All spells costs 50 mana, no buffs stacks:
Offensive:
•Slice - Deals ? damage
•Thrust Stab - Deals ? damage and inflicts open wound. Open wound deals ? damage after 5 seconds. It will dissapear if the target takes damage.
•Spine Crush - Deals ? damage. If the target has Open Wound it deals ? extra damage and removes the buff (that extra damage is more than the open wound end damage)
Defensive:
•Switch - Changes spells and grants you 60 mana. Still costs 50 mana to cast.
•Protection Barrier - All allies will take 50% less damage for 6 seconds.
•Complete Block - The next hit you take deals 0% damage, and then the buff is removed. Lasts (max) 3 seconds (or something, dont remember). If both this and barrier is active at the same time, barriers effect will not apply until this buff dissappears.
Makes up for some timing with shields, and some teamwork with the Open Wound buff.
More strategies will be avilable with the future "magic" spells.
Idk what you meant by "magic the game" sverker, but as far as I know we havent decided how you earn it, just that it is one or more extra spells.
1) Find the hunter outside in the forest
2) Complete the hunter's quester
3) he ask you if you wanna be a hunter
First part of Hunting is Skinning:
How to:
1) Kill a animal
2) Use your knife to skin the animal
3) You get mats
4) Rare skins is also available to be dropped, but from things like dragons
Second part is Leather working
1) Take your skin back to the hunter, and find the table.
2) decide what you want to make with your profession menu (thinking like building menu, just with ability's
3) use your knife to create the material.
Yeah something like that, except you dont have to complete a quest to get the prof (just annoying). You won't have to select your knife to get it, it drops like loot (several mensu opens were you will choose keep or drop for each item). Then you go to some shop and make some stuff/trade for stuff (I like the idea of trading more, since you could give everything from equipment to berries).
Don't think hunting will be an ''official'' proffesion, but more the general creep-killing of the game.
I would like to see weapon enchantments on player's since it is first person view that would be imba tastic and since you are using villager model pfff hardcore pwnage @ razosh well it is better for the project if he does a couple of thing and then post updates cuz it too much work to tell what you did, and it cost alot of time, 24 is small number for life and project IMO.
There will be attatchment for each item (Weapon, Shield, Armor and Sigil). Items will come in ?4? different rare classes.
1: Common, +5 stats.
2: Rare, +7 stats.
3: Extreamly Rare, +9 stats.
4: Divine (WHAAAAAAAAAAA THEEEEEEEEE FUCKKKKKKKKKKK HE GOT THAT ITEM OH MY GOD!!!), +12 stats.
Explenation:
Imagine a talent tree but instead of talents there are stats.
Each item has "X" selected stats from the stats tree.
A common item will have 5 points spent into the stats tree.
A rare item will have 7 points spent into the stats tree.
etc.
This will make the game very much balanced since you would go for a "build" only using items with the stats you prefer.
Lets say that I want to increase my healing stats to the max, then I would like to only get items which provides better healing capabilities for me. This balances the game since each "build" has its weakness.
This will make trading a much more important role in the game since it is hard to get a item with all it's stats points spent into the correct stat for your build.
Please note: All content of this message has not been discussed with Hagge5 which means that some of this messages content might not be in the final product. Stay tuned for any edits to this message.
--------------------------------------------------------------------------
We have been working to finish all the main systems of the map. At the moment we have yet to create:
*Save/load system
*Brewing system (Alchemism)
*PvP system
*Leveling system for every profession
We also have some features unfinished.
@Friday Hagge5 will stop his summer job (Finally, you are free Hannes! Oh wait... you still gotta program our game... Nvm!)
So expect things to move forward a little bit faster.
Thats all for now, thanks all for the wonderfull support and the awesome ideas! Highly appreciated
Rare loot for rare bosses?
Example: 10% chance game that a specific element spawn (a hidden door, idk). You will need key, which is a questitem that is found by defeating bla and bla, and by finding bla, bla and bla. Once entering, all players who fights the boss inside will get one shot at him, you fail once, he dissappears.
And then he might as well be hellishly hard to.
That's the idea of bosses anyways. Puzzle --> battle.
Or for the divine ones (example): puzzle--> battle -->puzzle --> puzzle --> battle --> puzzle --> boss battle.
(battles to find new quest items (better named interaction items))
It'll be great! I'd love to have something with a rarity almost as high as mew!
Of course you won't know exactly what your'e supposed to do to find a specific boss. Find a quest item or an NPC and one thing leads to another.
Your idea is indead great the question is however if you can make it great I have no doubt you can do the game great, however I'm not sure if you can make the game great to explore and experience.
Sverker, I highly doubt 2-3 weeks. The main systems might be done in that time, but it will take alot more to make all npc's, and all the custom "spells" for the enemies!
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.