[project1dev] Re: Project1 - SVN Update 754

  • From: Alan Wolfe <alan.wolfe@xxxxxxxxx>
  • To: project1dev@xxxxxxxxxxxxx
  • Date: Sat, 22 May 2010 13:30:27 -0700

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: