If you cannot view this newsletter correctly, click here to view it online

Editorial

Issue 151 cover

Welcome to another issue of TheGameCreators Monthly newsletter.

I'm sure like many of you, a lot for us here at TheGameCreators have either been away on holiday or have taken a much needed break from work to recharge our dwindling batteries. I myself, having recently moved to a beautiful part of the world, still feel as if I am on an extended vacation, which makes it rather difficult to get motivated for any personal projects!

Last month, I found myself rushing to complete an entry for the Indie Game Contest 2015, and meeting the deadline with hours to spare. I've also started playing around with 2D Physics to see what exciting opportunties lie in that direction, and I've got to say, I've become very inspired as a result.

So now I need to pep myself up as I'm part of an ongoing group project, which currently is mainly in the hands of a small team of 3D modellers who are producing some amazing work in preparation of some sample maps and gameplay to help us get a feel for our final direction.

All in all, I expect to have some exciting times ahead personally for developments and hope to be able to share some sneek peeks either in this newsletter or on one or more of the various TGC development boards.

My advice to all of you budding developers, who may feel they've run out of inspiration, or that the journey seems to be a bit of a struggle is to take a step back, maybe for a couple of days and then return to your keyboards with fresh eyes.

Good luck and don't forget, you've got thousands of fellow developers in your corner.

Dave Hawkins.

contents

(1) Steam Deals (2) GameGuru Store (3) GameGuru (5) Gallery Peek (6) Lee's Blog (7) Twitch (8) AGK news (9) Age of Knights (10) AppGameKit Tutorial (11) YouTube (12) Keep up to date

Steam Deals!

There are some great Deals on TGC products on Steam right now. Just click on the images below to take advantage of these savings before they end.

There's also a great deal run by BundleStars, Degica, PC Gamer and The Game Creators. Click the link below to get this awesome deal!

Skyborn Game Maker Deal

GameGuru 4 Pack - Save 60%

Ideal for a team of players so you can make your own multiplayer maps and play them together. Offer ends 29th Sept.

 

GameGuru MegaPack 3 - Save 60%

 

 

Add this DLC to your pack at a reduced price. Offer ends 24th Sept!

 

GameGuru Death Valley - Save 60%

GameGuru Death Valley Pack Steam Store Page

 Add this DLC to your pack at a reduced price. Offer ends 29th Sept!

GameGuru Store News

The GameGuru store continues to grow, so fast in fact that we feel you may have missed some great media from the last year or so. This month we're going to take a dip into the store with a focus on Sci-Fi, an area that many users have asked about but may have missed some of the excellent items available.

powerpack.png

Even in the future, you can't do without power, and this power lines pack from Tazman would be at home just as easily in a sci-fi game as a modern day scenario.

scifi2.png
Carrying on with the futuristic theme, the great scifi corridor 2 pack from Pasquill is ideal for all your space station or underground complex needs and matching seamlessly with this scifi corridor pack

BSPweapons.jpg

Finally this month for models, is a reminder of the excellent Scifi weapons pack by BSP.  Click on the image above to watch them all in action.

Slightly harder to showcase, but well worth a look and a listen are these two very versatile audio packs, both  artists have created some great packs that all serious game designers should check out.

SounDesign has a large number of Sound effect packs that have content for virtually any genre. While Robot Voices by Nickydude are a must have for a wide range of scifi games.

Become a Store Artist!

The Game Creator Store connects creative artists and musicians with enthusiastic GameGuru game developers. Can you create game ready 3D models or themed atmospheric music for the GameGuru community? If so, sign into the GameGuru website and sign up to HERE!

GameGuru Latest

GameGuru-Newsletter-Header.jpg

Almost the entire month of GameGuru development has been spent on performance work and we're pleased to say the main phase of our C++ conversion has resulted in virtually a fully functioning engine from the first compile. We have of course had a number of niggling bugs which was to be expected, but we can happily report a fully running engine with a functioning editor and test game!

We have now supplied the build to a hand picked group of Beta testers. Once we've had their feedback and fixed any issues they find we'll be looking to release the update to everyone.

GameGuru's main rendering engine is also going under a complete overhall. The aim here is to move from a DirectX9 system to a DirectX11, modern renderer. This will mean the engine will perform much faster and allow us to do many more visual effects as we evolve GameGuru. Our lead developer Lee Bamber is well underway with this work and you can keep up to date on his progress by following his developer blog. It's a great way to learn how games are made.

Light house by user Valentin321

(Above is a great image by Valentin321 from the Game Guru Gallery)

All of this work is of course going to take a little more time, and as always we thank you for your patience during this long but vitally important phase in GameGuru development.

We did take a little time out this month to release a quick build of GameGuru called 1.34 for public release, which addressed a small flaw in media encryption. While not major, it did close a loophole in the process that allowed some media to be extracted. This is now a thing of the past, and we can tell you that it has already made life a little harder for potential media pirates, so although minor in terms of features, it has had a great benefit for game developers and store artists.

Don't forget if you want to keep up to date during the month, that the GameGuru weekly news is published more or less every Monday with lots of exciting progress news and hopefully soon some great screenshots.

 

A look at the Galleries

Every month we try to take a look at the galleries to see what our amazingly talented users are working on, and every month we are never disappointed. 

First off the bat is this atmospheric contribution from the GameGuru gallery called Black Room #3 by GDNomad.

GDNomad.png

Next up is this excellent screenshot from the Steam Artwork pages stood out, and reminded us of several AAA games, which is no mean feat for an engine still very much in development

hell.png

Do you have a game that you'd like to share screen shots from? Please post your best images into the Gallery online and maybe we'll feature you in the newsletter. We really do love to see what you are developing and this motivates us to make the engine do more so your games can keep getting better.

Lee's Development Blog

Lee was away for a few weeks in late August, a much needed break from toiling over his keyboard! However, he still had time to blog some progress from last month, so let's look at the highlights.

On the 6th August, Lee spoke of a pretty important step forward in the GameGuru development process

After what seems like a very long and dark journey into pretty uninteresting streams of code, and plenty manual donkey work cut and paste stuff, I finally see a glimmer of light at the end of the first tunnel. We have the engine updated to a new framework, VS 2015 is behaving, every command GameGuru uses has been mapped and ready for conversion over to a new C++ basis.  It’s just a matter of connecting the various chunks together and we should be able to see something real soon, and as I type I am resurrecting the IDE source code to fit nicely with what we’ve done so far.

On 10th August, just before he escaped to a more sunny climate

I say ALL because from tomorrow I am officially on my summer holiday (well packing) during which time I will be flying, diving, swimming and drinking to my hearts content. If I survive all that I will return before the end of August to hopefully test a completely functional and substantially faster internal version of GameGuru!  What a great thing to come back to work for.  As some of you may know I expanded my core team to include a full-time Ravey many moons ago, and as a result he knows just as much about the engine as I do, and while the proverbial cat is on holiday, the proverbial mouse will be free from daily cat shaped distractions and allowed to code in peace.  I am eager to see what he comes up with and what kind of performance our combined reformation produces in what will be the first major internal version to address issues relating to game speed and overall frame rates.

On his return he was pleasantly surprised to find...

After what must feel like an eternity, I have returned from my globe trekking and sun soaking to resume my role as chief coder of many things. And many things have been happening in my absence, not least an enormous amount of work done by Ravey who pretty much pulled 12 hour days, and some weekends at the same pace, to ensure my return would be greeted with a C++ powered GameGuru, and I was not disappointed!

In addition to Ravey's excellent process of which we hope you've already updating yourself on in the GameGuru news article, Lee was also able to provide a sneek peek of an up and coming scifi DLC, which we hope will plug a much needed gap in the content, and inspire users to new heights.

dlc.jpg

Twitch this!

Our Twitching continues every Wednesday at 4pm GMT/ 11am EST/ 8am PST. This doesn't of course mean attacks of nerves brought about by our endless development work, but our regular live Twitch broadcasts where we cover aspects of game creation with GameGuru as well as spend some time with a simple Q&A with our users.

We've covered lots of areas so far, and we will continue to do so in the weeks and months to come.

twitch.png

Click on the banner above to listen to all of the latest broadcast and don't forget to bookmark the page so you can be there every Wednesday.

 

AGK Latest

AGK-Newsletter-Header.jpg

Finally we have a real treat for you!

In this video we're showing the new bone based animation features that will be part of the next major update to AppGameKit. The demo is running at 400+ fps on a Windows PC and we also show it running very smoothly on an Android Nexus 9. The latter part of the demo shows the progress of the new physics engine which utilises Bullet Physics.

boneanimation.png

The system can also handle older style models that used limb based animation instead of vertex weighted. Each limb is a separate object placed in a hierarchy and each can be colored, textured, etc, separately from the others, or even detached from the main object and made into a fully independent object, with its own child limbs going with it. The next step will be to use this system to show animated objects, hopefully this will be demonstrated next week.

 The Physics work also continues with the next milestone focusing on;

A full list of fixes and new commands can be found in the official development blog in the forums.

 

Age Of Knights - WIP

We like to take a look around the forums to keep up with what our talented community are up to, and it was a pleasure to find this little gem from called Age of Knights (A WIP progress title for a WIP game). Written by community member Crazy Programmer this looks a lot of fun and features some great home grown art.

ageofknights.png

You can check out the latest build for Android here and the author has promised a Windows version soon, so why not give it a try and tell Crazy Programmer what you think.

AppGameKit Mastery - Digital padlocks and you!

AGK-Mastery-Header.jpg

by Steve Vink 

As with all of the tutorials in this series, the code created for this tutorial can be simply dropped into your project with the addition of the #include statement, and used immediately in your project. The driving force behind the series is simple: Beginners can drop the code into a project and use it immediately. Intermediate users can analyse the code, learn new methods and concepts, and ultimately modify and enhance the modules. Advanced users can jump on the forums and discuss the many different ways to achieve the same outcome, enhancing all of our knowledge and expertise within the AppGameKit community!

Download the Code

You should download the code prior to reading the tutorials, as you will need to refer to the functions involved.

 

Protecting your assets

lock.jpgThere is a question that occurs frequently around the forums, and that is the question of protecting your game assets from the world. Right now there is no magic command to do this, but with a little ingenuity it’s possible to add at least some protection to images, sounds, and anything else you ship with your game.

There are two things we will achieve with this month’s drop-in module. They are:

  1. Encryption of the files to protect them from the average user.
  2. Prevention of alternative assets being used in your game.

It is clear that if anyone really wants to steal the media shipped with your game, they will find a way to do it. But we will create a system that will prevent anyone but the most determined of hackers from succeeding. It is also important to remember that the AAA games are the primary target for would-be pirates, making the smaller productions much safer from wrong-doers.

Preventing the replacement of your assets is also important. You don’t want your logo and branding to be replaced and your game repackaged as somebody else’s work. You also don’t want the game being misrepresented with poor-quality replacement media. We will combine two methods to both encrypt and stamp the files with a signature that stops all of these activities.

 

Step 1 – Encryption

Before shipping the game, you must encrypt the files. You will most likely write a separate utility to perform this encryption, using exactly the same drop-in module we are creating here. You might also encrypt game files on the fly in your game, such as game progress files.

The simplest way to encrypt files is to use the binary operator XOR (Exclusive OR). There is a special property in this operation; by using it twice on the same data you can both encrypt and decrypt with the same key. Let’s start by creating a unique key:

#constant cCODE = "aBc123!"

You need to create your own code in the constant cCODE. This is the encryption/decryption key, and also the salt for the signature (more on that shortly).

We will load our file for encryption into a memblock:

 

function encryptFile(inputFile as string, outputFile as string)

                // Load the file into a memblock

                mb = CreateMemblockFromFile(inputFile)

endfunction

The encrypted file with be 40 bytes longer. The first 40 characters are the signature of the file, which we use to help prevent our files being cracked. We need to create a second memblock that is 40 bytes larger than the file to encrypt:

 

function encryptFile(inputFile as string, outputFile as string)

 

                // Load the file into a memblock

                mb = CreateMemblockFromFile(inputFile)

               

                //Create the memblock which we will encrypt it into

                mbMain = CreateMemblock(GetMemblockSize(mb) + 40)

 

endfunction

 

Now we will create the signature. In reality this is a SHA1 hash string (Read more about hash strings here). What does this mean? We take some of our data and use the SHA1 algorithm to create a 20-byte (40-character) hexadecimal string. We add the previously created key (our salt) to make the key more indecipherable. When we need to ensure the file has not been tampered with later, we check that the file contents and salt produce the same signature. If they do not, we know that the file has been edited or replaced. We will use the first 128 characters of the file to create our signature.

 

 

                // Write the hash code

                SetMemblockString(mbMain,0,sha1(getmemblockstring(mb,0,128) + cCODE))

 

For the main process, we rewrite all of the bytes of data in the file, XOR’ed with the key. This is done one byte at a time, each byte being transformed successively by one character in the key. When the key runs out, we start again at position one in the key:

 

                // Get the encryption code length

                codeLen = len(cCODE)

                //loop through the bytes and encrypt them

                codeCounter = 0

                for n = 0 to GetMemblockSize(mb) - 1

                                inc codeCounter, 1

                                if codeCounter > codeLen then codeCounter = 1

                                SetMemblockByte(mbMain, n + 40,GetMemblockByte(mb, n) ~~ val(mid(cCODE,codeCounter,1)))

                next n

 

 

Finally, we rewrite the file to disk:

                CreateFileFromMemblock(outputFile, mbMain)

 

Step 2 – decryption

When the program runs, you need to decrypt the files. The process is the reverse of the encryption, and checks the signature to make sure the files are intact and haven’t been replaced.

 

function decryptFile(inputFile as string, outputFile as string)

 

                success = 0

               

                // Load the file into a memblock

                mb = CreateMemblockFromFile(inputFile)

               

                //Create the memblock which we will encrypt it into

                mbMain = CreateMemblock(GetMemblockSize(mb) - 40)

               

                // Get the encryption code length

                codeLen = len(cCODE)

 

                //loop through the bytes and encrypt them

                codeCounter = 0

                for n = 40 to GetMemblockSize(mb) - 1

                                inc codeCounter, 1

                                if codeCounter > codeLen then codeCounter = 1

                                SetMemblockByte(mbMain, n-40,GetMemblockByte(mb, n) ~~ val(mid(cCODE,codeCounter,1)))

                next n

 

                // Check the hash code

                hash$ = GetMemblockString(mb,0,40)

                hashed$ = GetMemblockString(mbMain,0,128)

                if hash$ <> sha1(hashed$ + cCODE)

                                exitfunction success

                endif

 

                CreateFileFromMemblock(outputFile, mbMain)

                success = 1

 

endfunction success

 

As soon as the file is decrypted, you must load it into your game and then delete it. This is the weakest point of the system while the file exists - unencrypted – in the game folder. Of course it is still impossible to replace the assets due to the signature.

There are safer ways to perform the same routine for images. It is possible to make image memblocks and encrypt these. When decrypting them and loading into your game they never have to be written to disk as you convert the memblock directly to an in-game image. But the trade-off is the size of the files you must ship with your game, often 5 to 10 times larger than a jpg or png file.

Summary

Once again, we have created a very simple solution to a seemingly complicated problem. Download the CodeThe download includes the module and a demo program. Encryption does not lend itself to a visual demonstration, but it allows you to select any file, and produce an encrypted and decrypted version. Check the files in the output folder, and you will see the encrypted, unreadable version with a file size 40 bytes larger than the decrypted version.

Try setting yourself the challenge of creating a generic encryption program to convert assets for any game. Drop the module into any application to take advantage of the encryption and decryption functions, and don’t forget to create your own key!

 

Until next time,

Happy Coding!

 
 

TheGameCreators YouTube Channel

Youtube ChannelTheGameCreators YouTube Channel is still going strong with over four years of content to browse and view:

Youtube ChannelTake a look at our channel now, and make sure you hit the subscribe button to stay up to date with new video uploads. Very often you'll get advanced previews of upcoming news.

We've also create a new GameGuru channel to focus on GameGuru tutorials and gameplay. You can access it here

TheGameCreators on Facebook & Google+

Find us on Facebook to discover more about The Game CreatorsJoin thousands of fans on TGC's Facebook page to keep bang up to date on news, user projects from the forums and discussions.

We're keen to hear from all our avid users and we always love to hear what you've been up to with the tools we sell. So if you have something you want to share with the wider TGC audience why not post it into the TGC Facebook page?

GameGuru

gamegurufacebook.jpgGameGuru has it's own Facebook page now. Whether you simply want to see the update and progress news as it is released, or get involved in technical discussions about LOD, Light and lots of other topics, sign up to this page today to be part of it.

 

AppGameKit 

You can join in the Facebook discussions in our AppGameKit group page with over 650 members and we also have an AppGameKit Facebook page.

 

Google+

You can also follow our products on Google+ 

TheGameCreators on Google+

GameGuru on Google+

AppGameKit on Google+ 

"All work and no play makes Jack a dull boy"

Jack Torrence - The Shining.