[project1dev] Re: Project1 - SVN Update 754

  • From: Nick Klotz <roracsenshi@xxxxxxxxx>
  • To: project1dev@xxxxxxxxxxxxx
  • Date: Sun, 23 May 2010 21:32:40 -0400

If we don't keep building damage, who is to say somebody won't go, "oh lets
repair the buildings real quick", save/quit.  BAM!  Buildings are okay
again.

On Sat, May 22, 2010 at 4:30 PM, Alan Wolfe <alan.wolfe@xxxxxxxxx> wrote:

> ok cool
>
> i bet we can handle keepin some global variables in sync to save that stuff
> (:
>
>
> On Sat, May 22, 2010 at 1:17 PM, Kent Petersen <kentkmp@xxxxxxxxx> wrote:
>
>> That's all we need. I'm cool with that. No need to keep monsters or
>> building damage.
>>
>>
>> On Sat, May 22, 2010 at 12:33 PM, Alan Wolfe <alan.wolfe@xxxxxxxxx>wrote:
>>
>>> Hey Kent (and whoever else is interested)
>>>
>>> I'm thinking for saved games maybe that we would only save...
>>>
>>> * What houses you had built in your town and where they were
>>> * Which monster spawners have been destroyed / sealed.
>>> * Any "state" information about the area, such as if the boulder has been
>>> destroyed in the 1st map, and whether you have already killed the bat boss
>>> or not
>>>
>>> Everything else would be lost in a save/load.  so for instance when you
>>> went into an area or loaded a saved game, there won't be any monsters
>>> spawned yet, there wont be scorch marks on the terrain, there wont be fires
>>> burning (if we add stuff like that) etc.
>>>
>>> and im thinking too that when you go from one overworld area to another,
>>> this is all the data that will be preserved too.
>>>
>>> does that sound ok to you?  Is there any other information that you think
>>> we should be saving?
>>>
>>>
>>> On Fri, May 21, 2010 at 8:43 PM, Kent Petersen <kentkmp@xxxxxxxxx>wrote:
>>>
>>>> Interesting. You are right its not that complicated when you break it
>>>> down
>>>>
>>>>
>>>> On Fri, May 21, 2010 at 4:59 PM, Alan Wolfe <alan.wolfe@xxxxxxxxx>wrote:
>>>>
>>>>> Josh may change things but here's how i envision it (and how i would do
>>>>> it if i were writing it)
>>>>>
>>>>> #1 - the version number
>>>>> #2 - the hash of all the data stored
>>>>> #3 - the "encrypted" data
>>>>>
>>>>> *The Version Number*
>>>>> so writing the version number is easy.  we'll have an int to store the
>>>>> version number so the first 4 bytes of a save file will be the version
>>>>> number.  This makes it so if the game wants to load a file and it knows it
>>>>> uses version 5, but the file says it's version 3, it knows it's
>>>>> incompatible.  You'll be setting the current version number in the 
>>>>> Data_Save
>>>>> and Data_Load script commands.
>>>>>
>>>>> *The Hash*
>>>>> A hash is kind of like a CRC or checksum.  Basically imagine that you
>>>>> looked at every byte in a chunk of data and added it together and that
>>>>> number it gave you at the end was 42.  42 would be a hash of all that 
>>>>> data.
>>>>> That is a really simple hash, we can use something more complex if we want
>>>>> like MD5 or something else.
>>>>>
>>>>> The data saved into the file is just name/value pairs where the value
>>>>> can be a string or a number.  When you set the global variable
>>>>> "PlayerHealth" to 50, the name value pair is "PlayerHealth",50.  So, we 
>>>>> make
>>>>> a hash out of all of the name value pairs and then write that to the file
>>>>> next.  What that does, is if someone tries to manually change a value in 
>>>>> the
>>>>> file (like by using a hex editor), the hash wont match and we'll know they
>>>>> tampered with it.
>>>>>
>>>>> They could also alter the hash to make it match, but they'd have to
>>>>> know how the hash was calculated (which they can see by looking at the
>>>>> machine code in the exe...) but while this isn't perfect security, it 
>>>>> stops
>>>>> 99.999% of the people out there lol
>>>>>
>>>>> *The Data*
>>>>> Next up we need to write the data.  we would just write all the name
>>>>> value pairs into the file.  If people open up the file, they would see
>>>>> variable names like "PlayerHealth" and it would be really obvious that it
>>>>> was interesting data they might want to try to change.
>>>>>
>>>>> To further protect our save game files, i would use "xor" (exclusive
>>>>> or) to xor all the bytes in the data against a constant.  if you xor a
>>>>> number by the same number twice, you get the original number back, so 
>>>>> simple
>>>>> xor is a good way to do poor mans encryption (:
>>>>>
>>>>> So basically, we'd xor all the bytes in the file against 145 let's
>>>>> say.  That will jumble it all so that if people opened the file it would
>>>>> just look like garbage.  When the data is loaded, it'll be xor'd against 
>>>>> 145
>>>>> again so that it goes back to normal and we get our nice, readable 
>>>>> variable
>>>>> names back.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Fri, May 21, 2010 at 4:43 PM, Kent Petersen <kentkmp@xxxxxxxxx>wrote:
>>>>>
>>>>>> I am totally interested. What more can you tell me
>>>>>>
>>>>>>
>>>>>> On Fri, May 21, 2010 at 1:28 PM, Alan Wolfe <alan.wolfe@xxxxxxxxx>wrote:
>>>>>>
>>>>>>> i have some ideas, but im going to wait til the town stuff is more
>>>>>>> worked out.
>>>>>>>
>>>>>>> basically anything that needs to be saved / loaded has to live in a
>>>>>>> global variable, but its ok if some specific data gets lost, such as 
>>>>>>> scorch
>>>>>>> marks on the terrain.  Those guys don't need to persist across a 
>>>>>>> save/load
>>>>>>> :P
>>>>>>>
>>>>>>> We can worry about that stuff later after we get it working, to make
>>>>>>> sure things get saved and loaded correctly.
>>>>>>>
>>>>>>> josh is going to work on the actual saving and loading of the global
>>>>>>> vars, and the file is going to be not human readable (ie slightly 
>>>>>>> encrypted)
>>>>>>> and will be protected from tampering via a stored hash of the data being
>>>>>>> compared to hashing the data after load (if they dont match you know 
>>>>>>> someone
>>>>>>> screwed with the file).  more details available if you are interested, 
>>>>>>> it's
>>>>>>> not too complex stuff actually (even if it sounds complicated)
>>>>>>>
>>>>>>>
>>>>>>> On Fri, May 21, 2010 at 12:51 PM, Kent Petersen 
>>>>>>> <kentkmp@xxxxxxxxx>wrote:
>>>>>>>
>>>>>>>> could be interesting. Do you have any save load plans? Is that going
>>>>>>>> to be something we work on soon or not until the end?
>>>>>>>>
>>>>>>>> I do all of my saving in a csv format basically. Would you do
>>>>>>>> something similar or is there more organization that goes into it?
>>>>>>>>
>>>>>>>>
>>>>>>>> On Fri, May 21, 2010 at 10:25 AM, Alan Wolfe 
>>>>>>>> <alan.wolfe@xxxxxxxxx>wrote:
>>>>>>>>
>>>>>>>>> cool deal (:
>>>>>>>>>
>>>>>>>>> it's going to be interesting making sure our save / load stuff
>>>>>>>>> works right  with all the crazy data like how many enemies are alive 
>>>>>>>>> and
>>>>>>>>> what their positions are, which buildings are damaged or destroyed 
>>>>>>>>> and all
>>>>>>>>> the other stuff :P
>>>>>>>>>
>>>>>>>>> might be a lil work hehe
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Fri, May 21, 2010 at 10:21 AM, Kent Petersen <kentkmp@xxxxxxxxx
>>>>>>>>> > wrote:
>>>>>>>>>
>>>>>>>>>> Yeah sounds right.
>>>>>>>>>>
>>>>>>>>>> On Fri, May 21, 2010 at 10:18 AM, Alan Wolfe <
>>>>>>>>>> alan.wolfe@xxxxxxxxx> wrote:
>>>>>>>>>>
>>>>>>>>>>> i would just include it into the main menu code
>>>>>>>>>>>
>>>>>>>>>>> then when they click "main game" (new game) it would call the
>>>>>>>>>>> gamevars_clear function (that was defined in gamevars.lua).  That 
>>>>>>>>>>> function
>>>>>>>>>>> would do a data_clearvars() to kill all global variables, then it 
>>>>>>>>>>> would have
>>>>>>>>>>> a data_createvar() for each global variable the game uses.
>>>>>>>>>>>
>>>>>>>>>>> since those functions dont exist yet, i think gamevars_clear for
>>>>>>>>>>> now should just set some starting value to each global variable 
>>>>>>>>>>> used in the
>>>>>>>>>>> game.  Like it would set health to 100 or whatever the starting 
>>>>>>>>>>> health is.
>>>>>>>>>>>
>>>>>>>>>>> sound right to you?
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Fri, May 21, 2010 at 9:59 AM, Kent Petersen <
>>>>>>>>>>> kentkmp@xxxxxxxxx> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> I think that would cover it. How would you implement
>>>>>>>>>>>> gamevars.lua. Would you just add an include for it in the config 
>>>>>>>>>>>> lua?
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Fri, May 21, 2010 at 9:08 AM, Alan Wolfe <
>>>>>>>>>>>> alan.wolfe@xxxxxxxxx> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> cool deal.
>>>>>>>>>>>>>
>>>>>>>>>>>>> I'm also thinking that...
>>>>>>>>>>>>>
>>>>>>>>>>>>> #1 - We need a Data_ClearVars() function which will delete all
>>>>>>>>>>>>> global variables.  We would call this before loading a game or 
>>>>>>>>>>>>> creating a
>>>>>>>>>>>>> new game to make sure no values persisted from one game to 
>>>>>>>>>>>>> another that
>>>>>>>>>>>>> shouldn't be there.
>>>>>>>>>>>>>
>>>>>>>>>>>>> #2 - We need a function Data_CreateVar which you have to do
>>>>>>>>>>>>> before you can read or write to any variable.  If you try to use 
>>>>>>>>>>>>> a variable
>>>>>>>>>>>>> without creating it, it will throw an error.  I figure we should 
>>>>>>>>>>>>> make a rule
>>>>>>>>>>>>> that we are only allowed to use this function inside of 
>>>>>>>>>>>>> gamevars.lua,
>>>>>>>>>>>>> specifically in the Gamevars_Clear() function.  This makes it so 
>>>>>>>>>>>>> all global
>>>>>>>>>>>>> game variables are declared in one space, and if we mis type a 
>>>>>>>>>>>>> variable name
>>>>>>>>>>>>> or try to use a variable that doesn't exist, it will throw an 
>>>>>>>>>>>>> error and
>>>>>>>>>>>>> we'll see it.
>>>>>>>>>>>>>
>>>>>>>>>>>>> #3 - We'll need a Data_Save and Data_Load function for saving
>>>>>>>>>>>>> and loading games, but i'm thinking those guys will take a save 
>>>>>>>>>>>>> game name
>>>>>>>>>>>>> and a version number.  This way, if you do something to the 
>>>>>>>>>>>>> scripts like add
>>>>>>>>>>>>> or remove a global variable, and the save game data is no longer 
>>>>>>>>>>>>> compatible
>>>>>>>>>>>>> with the script, you can increment the version number so that 
>>>>>>>>>>>>> Data_Load will
>>>>>>>>>>>>> return failure if you try to load a save game of the wrong 
>>>>>>>>>>>>> version number.
>>>>>>>>>>>>>
>>>>>>>>>>>>> I put these guys on the coding todo list
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Fri, May 21, 2010 at 8:35 AM, Kent Petersen <
>>>>>>>>>>>>> kentkmp@xxxxxxxxx> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Ok, yeah that makes sense.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Fri, May 21, 2010 at 8:25 AM, Alan Wolfe <
>>>>>>>>>>>>>> alan.wolfe@xxxxxxxxx> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> hrm how about making a file, something like "gamevars.lua"
>>>>>>>>>>>>>>> and when they click "main game" on the main menu (which should 
>>>>>>>>>>>>>>> be "new game"
>>>>>>>>>>>>>>> eventually hehe) it calls some function from that file such as
>>>>>>>>>>>>>>> GameVars_Clear() which initializes all the game vars to sane 
>>>>>>>>>>>>>>> values?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Fri, May 21, 2010 at 7:54 AM, Kent Petersen <
>>>>>>>>>>>>>>> kentkmp@xxxxxxxxx> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Think I should put the health variable in the ui.lua or what
>>>>>>>>>>>>>>>> then? It only made sense to me to put it in the config.lua
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Thu, May 20, 2010 at 9:44 PM, Alan Wolfe <
>>>>>>>>>>>>>>>> alan.wolfe@xxxxxxxxx> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> oh...  config.lua is a special case lua file, it doesnt
>>>>>>>>>>>>>>>>> have access to all the functions that the other scripts have
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> the reason is, it runs that file before anything about the
>>>>>>>>>>>>>>>>> engine is set up.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Thu, May 20, 2010 at 9:41 PM, Kent Petersen <
>>>>>>>>>>>>>>>>> kentkmp@xxxxxxxxx> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Bug? I don't think global variables are working. Check the
>>>>>>>>>>>>>>>>>> config lua
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On Thu, May 20, 2010 at 9:40 PM, Apache User <
>>>>>>>>>>>>>>>>>> dhapache@xxxxxxxxxxxxxxxxxxx> wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> User:korgath
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Message: I thought I checked in these files but it looks
>>>>>>>>>>>>>>>>>>> like I didn't so I'm checking them in again. Sorry if I did 
>>>>>>>>>>>>>>>>>>> once already
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> --tried creating global variable for life but it doesnt
>>>>>>>>>>>>>>>>>>> seem to work
>>>>>>>>>>>>>>>>>>> --added life ui to main map (once again life value doesnt
>>>>>>>>>>>>>>>>>>> work)
>>>>>>>>>>>>>>>>>>> --updated bat hold to pop out bats at a different rate
>>>>>>>>>>>>>>>>>>> --fixed a type on bat
>>>>>>>>>>>>>>>>>>> --fixed a typo on trollhut
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> <Files Changed>
>>>>>>>>>>>>>>>>>>> U   ActRaiser/Scripts/Enemies/OverWorld/Bat.lua
>>>>>>>>>>>>>>>>>>> U   ActRaiser/Scripts/Enemies/OverWorld/BatHole.lua
>>>>>>>>>>>>>>>>>>> U   ActRaiser/Scripts/Enemies/OverWorld/TrollHut.lua
>>>>>>>>>>>>>>>>>>> U   ActRaiser/Scripts/GameOverworld/UI.lua
>>>>>>>>>>>>>>>>>>> U   ActRaiser/Scripts/config.lua
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> ==============================
>>>>>>>>>>>>>>>>>>> Project 1 Dev mailing list
>>>>>>>>>>>>>>>>>>> to unsubscribe, please send an email request to
>>>>>>>>>>>>>>>>>>> demofox@xxxxxxxxxxx
>>>>>>>>>>>>>>>>>>> Project 1 website: http://project1.demofox.org
>>>>>>>>>>>>>>>>>>> Project 1 SVN repository: http://pyotek.com/project1
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

Other related posts: