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