/* attempt to deal with prototype, bootstrap, jquery conflicts */ /* for dropdown menus */

Jump to content

Beals Software

4: Adsense

GameSaveSystem - Alternate Implementation: Save & Swap

Github Link: https://github.com/dbeals/GameSaveSystem

The initial implementation of incremental saves is great and I'll be sticking with it for most of my games, but there are instances that it simply isn't a good fit (games that have large save files for example.) So, to get around this I have added a new implementation: save and swap. I want to point out ahead of time that the new implementation does still keep one backup copy. I'll be adding a flag to not create the backup in the next commit; I would have done so now, but I didn't think about it until afterwards. Here's the breakdown of the process, using MySave.sav as the save name:

When you save the first time, it goes directly to MySave.sav.
Every save after that creates a MySave.sav.new.
Once the save has completed, it renames MySave.sav to MySave.sav.bak.
Then it renames MySave.sav.new to MySave.sav.

The new implementation can be found in SwapSaveManagerBase and has pretty much the same interface as the incremental SaveManagerBase - SaveGame(SaveName), LoadGame(SaveName), AutoSave(), Export(ZipFilePath), and Import(ZipFilePath).

As a side note, if you're not keen on using the base classes that I've included, 99% of the work is done via the SafeSaveHelper and SwapSaveHelper static classes. You can download the library and utilize the system with those classes alone.

If there is any other implementations that you can think of, let me know!

GameSaveSystem on GitHub

I've just posted the core of our game save system to GitHub.

One of the things that's really annoyed me (and I'm sure others) is the complete loss of a game save. Two recent instances where this has happened to myself: I completely lost a Fallout 3 save due to a save failure and I completely lost my Darksiders 2 game save due to a glitch (I picked up a sword I needed and when I loaded I still "had" the sword, but didn't have anything and couldn't move forward.)

To get around this, our game save system implements incremental saves. We tell the system that we want to save "DonnyAwesomeSave.sav" and the system will automatically create incremental saves for us each time we save. So, the first time it will create DonnyAwesomeSave.1.sav, then the 2nd will be DonnyAwesomeSave.2.sav, etc. There is a configurable maximum so that you're not creating TONS of saves (our standard is 3.) Then, the system will automatically rollback to the most previous save if the system fails to load (we display a message in this case, stating that the save failed to load and we are rolling back to a previous save.)

The system also provides a simply interface for auto-saves, utilizing the underlying system.

The other major thing I hate is trying to roundup all of my game saves when it comes time to move to a new computer/fresh install. So, the system has a built in mechanism for zipping up and exporting as well as unzipping and importing game saves. As noted, the export only exports the most recent version and the import cleanses existing files that match the imported file name.

There is still a bit that needs to be added, but for the most part it's all there. We'll be adding examples and such when we get some free time.

Generic "Game Account Services" Service

I'm hastily scrawling this down here, basically just brainstorming the idea that I have.

I spent a little bit of time today implementing the database structure for a generic game account services - high scores, achievements, game saves, parental controls, etc. I hate to use a big name, but the idea is basically Xbox Live/Steam for indie games without all of the store/game hosting/etc. I guess a good comparison would be what GameJolt offers through it's services, but, again, without the hosting.

Basically, I'd like to have a place to host my leaderboards, cloud saves, achievements, etc ("game account services" as I've been calling them), but without the restrictions that are placed by the other services available. For Xbox Live you have to be on the Xbox and (as far as I know) online services aren't available to indie games. For GameJolt you have to host your game there and it has to be free. Steam is a pain to get on to and some people simply do not like the service (I'm assuming Desura and such are the same.) As far I can tell, there isn't a service available that offers just the services, with no strings attached.

Originally I had planned on creating an account service like a lot of the big shot companies do (i.e. a "BSGames" account), but I don't want to add another account for users to manage and I believe other indie developers could benefit from a system (so I'd like to stay away from naming it a "Beals Software account".) To avoid the extra account, the idea would be to integrate with something else; we'll just use OpenID as an example.

So, you would go to the "Game Services" site, log in with OpenID and that would create your Game Services account. Whenever you wanted to log in there (or say a mobile app), you would log in with your OpenID credentials. When you wanted to log in through a game however, you would log in using your OpenID username and an authentication token that is made available from the Game Services site (which you can easily change/regenerate.)

The current structure already supports this (as well as a full user system in case I can't really find something to integrate with), along with high scores tables, data items (game saves), awards and parental controls. However, I'm curious if anyone else would find this beneficial or if I'm just wasting my time. Obviously I have visions of grandeur where lots of indie games utilize it, but I don't want to waste my time/energy if I'm overthinking it/missing something that already offers it.

Keep Them Sleeping on itch.io and GameJolt

I apologize, I'm terrible at keeping this blog up to date. I need to hire a socialite to do all of my social stuff while I'm working (that or get my wife to do it lol.)

Quite a bit has changed in Keep Them Sleeping since the middle of April. I'm going to be lazy and just post the change log:
Version 0.6.2
 - Asteroids will no longer damage pods of dead patients.
 - Updated initial sequence to be smoother and more involved.
 - Implemented bacteria level - not used at the moment, but will be in the future.
 - If a processor is lost, the last process is dropped (so, if you go from 4 to 3 processors, the 4th process will fail.)
 - Updated immune system stabilizer to order patients - diseased first, then infected, then by immune system level.
 - Updated chryo-sleep stabilizer to order patients by sleep level.
 - The chryo-sleep stabilizer now respects available processes (it won't use up the last process nor will it apply medicine when there are no available processes.)
 - Added Date/Time and emergency timer to UI.

Version 0.6.1
 - Added Firefly group to the name generator (enter 'browncoat' into the override panel.)
 - Added splash screen
 - Corrected issue with title screen

Version 0.6.0
 - Corrected some UI bugs (some calculations were off.)
 - Corrected bitmap font rendering (some calculations were off.)
 - Moved settings from C# Properties.Settings to custom solution (Properties.Settings was not working properly.)
 - Added help messages (popups show when a patient gets infected and such for the first time.)
 - Added context-based help messages (right click on a panel to get a popup about it.)
 - Started adding intro sequence
 - Adjusted score so that a patient waking up is counted as a negative (you are now deducted 600 points, up from 0.)
 - Chryo-sleep stabilizer administers shots at 30 or lower (up from 25.)
 - A negative response to the sleep medication lowers sleep level by 15 (down from 25.)
 - A notification is now printed to the console upon overdose and paralyzation.
 - A notification is now printed to the console to notify that a patient woke up, but they were pralyzed.
 - Added new events - projectiles can now cause additional damage (to the hull and pods.)
 - Added new game over scenario - ship is destroyed (hull integrity reaches 0.)
 - Removed Help option from the 'pause screen'.
 - Added Override Panel option to the 'pause screen'.
 - Added a load of cheats to use from the override panel after a game has started.
 - Added notification when the last of an inventory item has been used.
 - Corrected issues with cheat mode - disease, overdose and paralyze now work correctly.
 - Added 'Easy' mode - start with 2 processors, more repair bots (both hull and pods will repair quicker) and processes cannot fail.
 - Broke White Rabbit font
 - Fixed White Rabbit font
 - Fixed console window so that it displays the proper number of lines.
 - Added Tips section above.
 - Raised chance of injections succeeding - booster is now 95 (up from 85), infection is now 95 (up from 85), disease is now 95 (up from 90), sleep is now 95 (up from 85).
 - Added rare chance for two items to produced.
 - Updated cheat mode so that you can right click an action and it will finish immediately.
 - Cure infection and cure disease shots now boost the patient's immune system slightly (at the start of the process, rather than the end.)
 - Altered the override panel so that it is no longer case-sensitive.

Version 0.5.5
 - Improved tooltip handling
 - Added background image.
 - Added scrolling space background.
 - Adjusted patient score calculation.
 - Adjusted time calculation.
 - Gain for curing disease increased to 40 (up from 30.)
 - Tooltips no longer contain levels (leveling was initially planned, but is not going to be used as it doesn't fit in the timespan of a playthrough.)
 - You can no longer repair a pod that is not damaged.
 - Added cursor to UI skin.
 - Corrected typos in the immune system stabilizer output.
 - Chryo-sleep stabilizer now actually displays output.
 - Chryo-sleep stabilizer now properly injects sleep medication.
 - Disabled profiling system.
We still have a bit to do - mainly adding support for loading compressed audio and adding audio (there is currently no music and only 1 sound effect.) Other than that, we're going to be working on some more UI options for it as well as refine the gameplay mechanics and make it more intuitive.

You can pick up a copy on itch.io at http://bealssoftware.itch.io/keep-them-sleeping or on GameJolt at http://gamejolt.com/games/strategy-sim/keep-them-sleeping/27679/ . As always, any and all feedback is welcome.

In other news, we are still working on Seeking Imagination, but we're putting Lord Sen's Battle Arena on the backburner until we can resolve the issues with it and implement some sort of servers system for multiplayer. In the meantime we're fleshing out the designs and prototypes for a few other games.

That's all for now; my lunch break is over so I'm back to work.

Failed Kickstarter and New Projects

Whelp, unfortunately our Kickstarter for Lord Sen's Battle Arena wasn't successfully funded. The game will still be coming out, but we're not sure how we're going to approach it. Our options are to finish the work and put it out with my ugly art or put it off until we have the funds to pay the artist. This also gives us a chance to review the direction of the project before continuing, so we're taking a little break through April on it.

Keep Them Sleeping
In the meantime we're going to be working on smaller projects and ideas. The first of which is Keep Them Sleeping - a small Windows game that puts you in the shoes of the Emergency Pod Management Bot on a spaceship.

The inhabitants of the medbay pods have been put into chryo-sleep due to the length of the journey. Somewhere along the way, disaster strikes, ripping apart the hull and disabling most of the automated systems. It is your job to keep the patients alive and asleep.

Here's a screenshot:
Posted Image

You can see some more on our website (http://bealssoftware.com/?module=project&id=14). You can also download it from there or directly here: http://www.bealssoftware.com/download.php?id=2.

Most of the primary features have been implemented, now we're just refining some things, adding better visual feedback and adding audio. I'm also contemplating changes due to the mechanics not being completely intuitive.

As always, any and all feedback/suggestions/etc. are welcome!