The King Is Dead, Long Live The King

Welcome to the final dev blog to grace this corner of the web, and say hello to it’s new home, now available from our main news feed, which has special filters so you only need to know about GameGuru if you read it through the GameGuru website, but will now be published at the same time on the TGC news site, and also links created for Facebook and Twitter. I will also be making efforts to post as announcements through the Steam system as well, to get maximum news about GameGuru out there.

It’s been fun posting here, especially when I could get away with sharing less-than-finished screenshots, mad sketches from backs of napkins and videos that did nothing to improve the image of GameGuru, but I guess I had to grow up sometime. It does mean I will no longer be told off for making silly posts, so that’s a good thing.  If you still want silly, I will continue my Twitch broadcasts each week and I dare say I’ll find more ways to antagonise the management in the future. I have ensured these blogs remain active in archived format, so students of history can look back at what it takes to make a game maker.


For now, thanks for reading my crazy antics over the last few years. I built up quite a readership here, and just like my previous Google Blog, and games tech in general, it’s time to move to more advanced technology, spreading the word even further and turning our ‘social-amp’ right up to eleven.  Be well and happy coding!

More Steam Control For Me

My plan was a productive day of coding on the save/load feature, but as circumstances conspired against me, emails came first and found myself doing lots of ‘not coding’, and then at 1PM I had a call which lasted a few hours and involved the transfer of knowledge on how to upload updates to Steam.  Up until this point I have delegated it, but I needed quicker access to the process so I can get you updates sooner, so I am now an expert at making builds, uploading to Steam and making them public.

I did find time to take the advice of my fellow viewers from Thursdays Twitch Broadcast and update my title page LUA scripts to use the ‘require’ command that eliminates duplicate code by putting it in a module that can be called up and used at any time.


Perfect for the resolution detection code which was pretty big and bloaty when it came to reading the scripts for different pages of the standalone game.  Now everything is a little neater and it’s a technique that now I’ve learned it, will be making its presence felt with my scripting from now on!

Amazingly, I have nothing planned for the weekend and no meetings the following week so I am anticipating plenty of coding in the next 10 days, which is cool.  Providing the distractions from ‘email land’ are not too plentiful, I should not be at all surprised if I have finished the bones of the save and reload feature by then, which would be a great time to release it to my beta testers for some close quarters scrutiny.  Until next week, have a great weekend and happy game making!


All Pages Now In LUA

Been a busy few days, but I can report all the title and game menus from the standalone game are now re-coded as LUA scripts. That’s the title, options, load game, loading, in-game menu, graphics menu, sounds menu, save game, win, lose and next level.  All chains together as before, and tested with a single and multi-level standalone game.  The only missing bit now is the save functionality and the subsequent reload step, which will take a little more thinking.


Initially I was tempted to do a LUA dump, but since found this was my imagination and completely not possible without a heck of a hack, so plan be was do it like before and create a custom file with everything the game needs to restore its progress, and then I had the benefit of writing save and load routines for the graphics and sound settings (which need to retain things like which graphic quality setting, music volume and sound volume).


In writing this, I discovered the wonderful world of LUA file commands.  The current system actually saves its in-game settings in two files, and manages those files when the settings are changed, and uses them when a new game session is launched.  It got me thinking the same commands could be used for the entire GameGuru game progress storage system.  Naturally there is a LOT that is currently hidden from my current LUA system, and from bitter experience resurrecting a game ‘mid-play’ can be treacherous but I have a sneaky suspicion that using the LUA commands as an abstraction layer could produce some very clean code (and more commands for scripters).

Back in the day you just needed to store the players level, position, health and weapon, and you were done. This time, I need to consider things like enemy positions, dynamic entity locations, AI states, LUA globals and a large pot of additional player statistics you probably didn’t even know existed.  I also need a few thoughts on whether I should save the exact body position of ragdolls, mid-animation frame values and transitionary elements.  I know some AAA games don’t, and some even force you back to checkpoint style locations, but I don’t want to rule anything out at this stage.  I was going to add a system which allowed the user to select a slot and give the save position a name, but I am now leaning towards taking a screenshot, and creating an autogenerated name such as ‘Game Save XXX : level ZZZ : Time YYY’ where ZZZ is the name given to the level when it was created and YYY is the internal game time.  This way there are no prolonged typing mid-game and the feature can be coded quicker. I am thinking the screenshot (much like games like Thief and Assassins Creed) will reveal more about the game progress than any text might.  This is the last bit of design work before I get stuck into mining the engine for all the game statistics worth storing.

As my evening is pretty packed, it’s now time to walk the dog, get something to eat, pack and set off for one of the last few meetings of the month which takes place Wednesday.  I have moved my Twitch broadcast to Thursday 4PM GMT if you want to tune in and discover new depths about GameGuru.

Back To LUA Land

With the first salvo of open source files out in the open, I returned to my Monday desk to find a few more emails on the subject, but decided to spend the time progressing the LUA conversion of the title and game pages. I now have a save menu, and a good transition for all pages except the graphics, sound, win and lose pages which I plan to do Tuesday. I also had to go through about 12 GameGuru related emails which backlogged from the meetings last week and the open source day on Friday. The HIDEHUDS command is now fixed which means it no longer hides the TAB TAB menus, plus a few more fixes, including a sneak peek at a HUGE game a user sent me to show a specific bug with Character Creator heads. As I can reproduce, I am very likely to find a fix for this after the LUA title page and save/load work, and help what looks like an amazing game getting to release. I say amazing but I only had a few minutes to play through it, but in those few minutes I was in space, I explored a star base, transported to a dropzone, stole a vehicle and encountered some kind of enemy base, and then I was attacked and destroyed.  I think you will be in for a treat when the game finally gets released, and I am very pleased these types of projects are being attempted with GameGuru.  More news, and perhaps a pic, on Tuesday.

Meetings Almost Done

I don’t recall a year where I had so many meetings this close together, but I can finally see the light at the end of the tunnel with one more next week, two in two weeks time and one at the end of February, and then it should be back to one per month and I become a coder again.  Normally meetings are standard business tools, but our take all day and most of them I have to drive 2 hours before I can attend them.  The agenda point agreed was that I return and spend a day sorting out some of the old TGC products, ready for open sourcing, so no GameGuru news today.

I still have a little more work to do, such as find a suitable server location for a huge collection of FPSC Model Packs which we will be making free, and add the source code for four plugins to the Dark Basic Pro open source code. Both will now live on GitHub and I hope these products give a little more pleasure in their twilight years.  Of course I am always interested if anyone would like to contribute as a collaborator on either of these projects, so email me if you would like the responsibility with a C.V and credentials at

I can report that work on the new LUA-powered title and game screens is going well, and I am really excited about the process of externalising the hard coded stuff so you get ultimate power over what you create, and I get to focus more on the parts you really want to see such as a CLONE feature in the LASSO widget menu :)

More Customization Ahoy

As I relentlessly march through my code, I am taking the time to externalise anything that gets in my way, which now includes the About page and the In-Game Menu too, which can now be scripted using LUA instead of being hard coded with a few pre-fixed graphics. The script even takes care of loading the images it wants so apart from some commands to leave, pretty much everything on screen is customise friendly (as it ought to be).


As you can see in the shot above, I decided to start the Load page script as it was a new item of the main menu and it makes sense to have all the menus converted and ready to go before I start the actual parsing of game state data for the actual save progress part.  And here is the LUA script that created it (so far):

– LoadGame page script

g_strBestResolution = “”
g_imgBackdrop = 0
g_sprBackdrop = 0
g_posBackdropAngle = 0
g_imgHeading = 0
g_sprHeading = 0
g_imgButton = {}
g_imgButtonH = {}
g_sprButton = {}
g_posButton = {}
g_imgCursor = 0
g_sprCursor = 0

function loadgame_init()
— choose ideal resolution
g_strBestResolution = “1366×768″
iSmallestDifference = 99999
for i = 1, 8, 1
if i == 1 then iAvailableWidth = 1280; iAvailableHeight = 720;
elseif i == 2 then iAvailableWidth = 1280; iAvailableHeight = 800;
elseif i == 3 then iAvailableWidth = 1366; iAvailableHeight = 768;
elseif i == 4 then iAvailableWidth = 1440; iAvailableHeight = 900;
elseif i == 5 then iAvailableWidth = 1600; iAvailableHeight = 900;
elseif i == 6 then iAvailableWidth = 1680; iAvailableHeight = 1050;
elseif i == 7 then iAvailableWidth = 1920; iAvailableHeight = 1080;
elseif i == 8 then iAvailableWidth = 1920; iAvailableHeight = 1200;
else iAvailableWidth = 0
iDifference = math.abs(GetDeviceWidth()-iAvailableWidth) + math.abs(GetDeviceHeight()-iAvailableHeight)
if iDifference < iSmallestDifference then
iSmallestDifference = iDifference
g_strBestResolution = iAvailableWidth .. “x” .. iAvailableHeight
— backdrop
g_imgBackdrop = LoadImage(“titlesbank\\default\\” .. g_strBestResolution .. “\\loading.jpg”)
g_sprBackdrop = CreateSprite ( g_imgBackdrop )
SetSpritePosition ( g_sprBackdrop, 0, 0 )
SetSpriteSize ( g_sprBackdrop, 110, 110 )
SetSpriteOffset ( g_sprBackdrop, 5, 5 )
— heading
g_imgHeading = LoadImage(“titlesbank\\default\\load-game-hover.png”)
g_sprHeading = CreateSprite ( g_imgHeading )
SetSpriteOffset ( g_sprHeading, GetImageWidth(g_imgHeading)/2, 0 )
SetSpritePosition ( g_sprHeading, 50, 8 )
— buttons
for i = 1, LOADGAME_BACK, 1
if i==LOADGAME_BACK then
strButtonName = “back”
g_posButton[i] = 90
strButtonName = “blank”
g_posButton[i] = 20+(i*7)
g_imgButton[i] = LoadImage(“titlesbank\\default\\” .. strButtonName .. “.png”)
g_imgButtonH[i] = LoadImage(“titlesbank\\default\\” .. strButtonName .. “-hover.png”)
g_sprButton[i] = CreateSprite ( g_imgButton[i] )
SetSpriteOffset ( g_sprButton[i], GetImageWidth(g_imgButton[i])/2, 0 )
SetSpritePosition ( g_sprButton[i], 50, g_posButton[i] )
— cursor
g_imgCursor = LoadImage(“titlesbank\\default\\cursor.png”)
g_sprCursor = CreateSprite ( g_imgCursor )

function loadgame_main()
— control menus
SetSpritePosition ( g_sprCursor, g_MouseX, g_MouseY )
iHighlightButton = 0
if g_MouseX > 50-(GetImageWidth(g_imgButton[LOADGAME_BACK])/2) and g_MouseX <= 50+(GetImageWidth(g_imgButton[LOADGAME_BACK])/2) then
for i = 1, LOADGAME_BACK, 1
if g_MouseY > g_posButton[i] and g_MouseY <= g_posButton[i]+GetImageHeight(g_imgButton[i]) then
iHighlightButton = i
for i = 1, LOADGAME_BACK, 1
if i < LOADGAME_BACK then
TextCenterOnX ( 50, g_posButton[i] + 0.5 + (GetImageHeight(g_imgButton[i])/2), 3, “EMPTY PROGRESS SLOT”)
if iHighlightButton == i then
SetSpriteImage ( g_sprButton[i], g_imgButtonH[i] )
SetSpriteImage ( g_sprButton[i], g_imgButton[i] )
if g_MouseClick == 1 then
if iHighlightButton==LOADGAME_BACK then
— move backdrop
SetSpritePosition ( g_sprBackdrop, math.cos(g_posBackdropAngle* 0.0174533)*5, math.sin(g_posBackdropAngle*0.0174533)*5 )
g_posBackdropAngle = g_posBackdropAngle + 0.002

function loadgame_free()
— free resources
for i = 1, LOADGAME_BACK, 1
DeleteSprite ( g_sprButton[i] )
DeleteImage ( g_imgButton[i] )
DeleteImage ( g_imgButtonH[i] )
DeleteSprite ( g_sprBackdrop )
DeleteImage ( g_imgBackdrop )
DeleteSprite ( g_sprHeading )
DeleteImage ( g_imgHeading )
DeleteSprite ( g_sprCursor )
DeleteImage ( g_imgCursor )

You will notice I am not using any ‘screen capture’ style saving system for the first build, but I have an idea to make the capture a background wash so you can see the point you saved in full detail (just by hovering over the save slot in question).  I will code the LUA script to handle eight fixed save slots, but I will leave the underlying code capable of saving and loading a thousand slots (for you to provide your own GUI solutions).

It’s time now for me to pack a bag and set off out the office again for the last of my yearly meetings, this time in Manchester to discuss general strategy and overview of current TGC projects, and hopefully the Gammon & Egg I’ve just wolfed down will not make me tired during the 2 hour drive.  Has been real fun and rewarding to see the features so long requested starting to take shape and I hope to bring you them soon in a build near you!

And So It Begins : Save/Load Progress

It looks like “Save/Load Progress” has just taken the lead in our community voting board, which was my personal favourite to win given the number of requests I have had for it, and the fact it leads directly to an overhaul of the LUA capabilities of GameGuru.  As the assets are now in testing, this was my first day of actual coding again after all the meetings.  I first did some research and discovered I cannot just dump the whole of the LUA system into a block of memory to save all states, it does not work quite like that.


This means we have to do it the old fashioned way with individual lines saving each piece of data we deem worthy of restoration. Of course there will be LOTS of data, but if I can use LUA to make this process transparent, easy to add to and relatively quick then we’ll be laughing.

I also pledged to take every opportunity to externalise hard-coded stuff, so as the LOAD and SAVE buttons will be part of the standalone game menu, and the menu is currently hard coded, I decided step one was to convert it to LUA script based.  Right now I have it running in a LUA loop with a single button displayed, but that’s a pretty cool step as it means I just need to add the rest of the buttons, the backdrop, the interface controls and some new commands to trigger the page to advance to loading, or set up a level restore, or quit the standalone, e.t.c.  You can see now why it was my favourite :)  More progress on this (and a better shot) come Tuesday.

Barbarian Fun

Continued my work on the Fantasy Pack DLC update, you know, the one with four new characters and many cool improvements?  Well I started the integration of their cool new animations and of course the writing of the scripts to make them unique to fight against.  I decided to make the Barbarian and Knight slow, and the Ranger and Skeleton fast.  I did hit an export bug where all my character body models used the Barbarian animation set but I have sent a request to get those fixed so I can continue Monday with the right moves.  That said, it’s been such fun just working with the Barbarian, with his menacing walk and two brutal axe attacks.


I am warming to the idea of keeping plenty of the animations hidden inside the model, and allow third party users to explore the secrets of these assets. It also means I spend more time working on bugs, fixes and small tweak improvements than writing highly complex AI scripts which I am sure can be bettered by the community.  Of course should my plate ease up, I would be happy and delighted to write a combat script that used every animation the Barbarian has (listed below):


For my own script work, and the Fantasy update, I will be implementing two attacks per character, with two of the four using a run charge to surprise the player.  This together with the cool graphics for each character should be a welcome addition to the DLC.

It’s 5PM which means my body needs to eat and switch tracks to some office paperwork that has been building up, and perhaps a quick look at this darn NVIDIA driver bug which is causing GameGuru to show black flashing geometry which their most recent update failed to fix. It’s easy to just blame NVIDIA, but I am going to see what it is within my own DX code that could cause this strange behaviour.  I can then report something solid to NVIDIA should they wish to act.  Until Monday, have a great weekend and happy game making!

Thursday Fantasy

As you can see from today’s progress so far, my Knight in shining armour needs a weapon (or a flaming torch). Fortunately, my artist is on the case exporting what I need for real-time simulation and then I can have fun creating some melee combat scripts for each of my fantasy characters (barbarian, knight, archer and skeleton).  I spend a good deal of each day answering forum, support and email questions but I am pretty happy with the progress made on the Fantasy Pack DLC Update which will be going out free to all existing owners of the pack once I have implemented and tested hand to hand combat.


The only exception will be the archer who will use a bow and invisible arrows to attack from range, and use a script to manoeuvre to distant locations in order to attack.  Would be nice to have an arrow simulation in there too, but I need to ensure I don’t spend all of 2016 on one DLC when there are far more users using the core product who also need many things, not least of which is the start of the Building Editor.  Finally, if you missed this Thursdays Twitch Broadcast you can still watch the broadcast recording from the main GameGuru website, or on the Twitch Channel prior to next Wednesday when it will be Ravey who takes over while I am away on another meeting.

NOTE: If you are a frequenter of the main GameGuru website forum, you might be interested to learn we now have special badges awarded to anyone who makes a Steam review and provides feedback on the product. This helps us with Steam ranking, and also helps us understand what you think about the product and ideas for improvement.  To claim your badge, simply email

Wednesday Guru Meeting

My monthly meetings are usually general strategy and management (one of the hats I wear is CEO and need to be there), but today we had a proper GameGuru meeting and travelled all the way down to nearly-London to host it. Starting at 8AM, and finishing at 5PM, with barely a pause to eat the contents of a sandwich we bashed out all our ideas for 2016 and where they fit in the grand scheme of things.  On my return, I found some cool new art which will supplement the SCIFI DLC (yes, MORE content for anyone who owns this DLC).  I am also keen to gift a few items from each DLC into the core product for free (as tasters) and would be interested in learning from existing DLC owners how much content would be fair to copy across (5%, 10%, etc). We have feedback that GameGuru is not giving enough assets away for free as part of the main product, and oddly the 1000 items already provided as part of the core is not sufficient. Perhaps some higher quality items from the DLC might redress this concern from new GameGuru users, and I welcome feedback on this from all sides.


If you are familiar (i.e. already bought) the SCIFI DLC you will probably know by now my solution to adding transporter technology was a green glowing decal for the outbound beam and a cylinder with green goo for the return journey. Not exactly the pinnacle of science!  Well, Adam has taken pity on my poor efforts and created actual transporter pads with a few variants which will be pre-configured for immediate transport of the player when you stand in the particle beam, which will make a much more convincing effect!  This addition will join others in an update to the SCIFI DLC in the very near future to back-up our desire to make sure each asset pack we sell is cram packed with value.

Thursday will be a mixed bag as I go through 2 days of email backlog and innumerable action points from the various meetings, but I am also determined to spend at least half the day getting the latest update out on Steam, get the DLC updates out my door and in the hands of testers and to a release stage, and continue to visit all forums and social hotspots that may pose a GameGuru question. If you feel I am missing any sites, just let me know in the comment below.  Also, as another reminder, my Twitch Broadcast this week is Thursday at 4PM GMT. Lee will be there!

1 2 3 17