Subscribe to GameFromScratch on YouTube Support GameFromScratch on Patreon Join the GFS Discord Server!
30. January 2013


Don’t you just love it when you are thinking about doing something, then someone else comes along and does exactly that thing for you?  Well, exactly just that very thing just happened to me.  I had long considered doing a comparison post of some of the most popular HTML5 game engines, facing them all against each other implementing a common game and see which one came out on top.


Well, just did exactly that.  In their words:

Today we are going to compare three popular JavaScript game engines: CraftyJS, ImpactJS and LimeJS. You really can’t go wrong with any of these great choices, but they do have their own strengths, weaknesses and style. Taking some time to get to know what’s out there is well worth it before embarking on a game


Most interestingly, he followed in the vein of popular TodoMVC example, of implementing a standard application to give you a quick glance at each framework in action.  The author has implemented a Breakout clone using each library.  Like so:

breakout screenshot


This is a very useful exercise, and I hope others pick up the baton and implement the same program in their framework of choice. 


In the end, ( spoiler alert ), the author comes to the follow conclusion:

So which engine is the real winner? I will leave that to you to decide. Since Lime and Crafty are free and open source, it’s easy to dive into them and give them a whirl. Impact is at a disadvantage here, as you need to pony up for the license before you can start playing with it. It’d be nice if Impact had some sort of trial period option.


If you are trying to select a JavaScript game engine, this is certainly a great read.

News Programming

30. January 2013


In this section we are going to cover navigating the Blender interface.  This includes both selecting items, and controlling the application camera.  It is important to realize that the app camera or view, is not the same as a scene camera.  A scene camera is used if you are rendering your graphics to an image or movie and we will cover that later.


Selection in Blender

First off, you can select an object in one of two ways.  First you can right click the object in the 3D view.  Secondly, you can select the object by left clicking it in the Scene graph.

You can perform more advanced selections in Blender as well.  Note, within all the images below, it illustrates selecting within an object, something we will cover in detail later.  Just be aware that the selection tools work on selections within an object, or selecting multiple objects, depending on the mode you are working in.


Select/Deselect All

Simply press A to select everything in the scene.  Press A again to deselect everything:



Box or Border Select

To select in a box or rectangular pattern, hold down the B key, left click and hold, while dragging the mouse over the area you want to select.  Press ESC or right click to cancel selection tool.



Circle Select

To select in a circular pattern, press the C key.  Then use the Mouse Wheel to increase or decrease the radius of the circle, move over select and left click to select.  Right click or hit ESC to cancel selection tool.



Lasso Select

You can preform a free form lasso style selection.  To perform a lasso style selection, hold down the Control key, click and hold the Left Mouse Button and drag mouse around selection area.  You can then use Control + Shift + Left Mouse Button drag to unselect within a selection.  Once again, press ESC or Right Click to cancel the tool.


Pressing A will remove any current selection. 


Camera manipulations in Blender


Now we will look at how you actually manipulate the application camera in Blender.  


Zoom the Camera In/Out

You can zoom the camera in and out using the mouse wheel.  Scroll the wheel forward to zoom in, toward you to zoom out.  You can also zoom out using the - (minus) Key and zoom in using the + (plus) Key.  If you don't have a scroll wheel and don't want to use the keyboard, you can also zoom using by holding Middle Mouse Button + Control + Drag.




Panning the Camera

Panning the camera is the act of moving it left/right or up/down.  You can pan the view using Middle Mouse Button + SHIFT + Drag.  You can also pan by holding Control + an arrow on the number pad, CTRL+8 for up, CTRL+ 4 for left, CTRL + 6 for right and CTRL + 2 for down.  Keep in mind, these are specific to the number pad, CTRL + # performs a completely different operation.




Rotating the Camera

You can rotate or orbit the camera by holding the Middle Mouse Button + Drag in the direction you want to rotate.  You can also rotate using the number pad, using the 2, 4, 6 and 8 keys.  Again, this only applies to the number pad, not regular number keys.




Frame Selected

You can have Blender automatically zoom and pan the view so the screen is full of the selected object.  To frame selected, first select an object in the scene by right clicking it.  Then press the . (period) Key.





Hotkeys / Actions used in the Tutorial

A Select/Deselect All
B + LMB + Drag Box/Border select
C + LMB + Drag Circle select
CTRL + LMB + Drag Lasso select



CTRL + MMB + Drag


Scroll wheel

Zoom out



CTRL + 2/4/6/8 on numpad

Pan view

MMB + Drag


2/4/6/8 on numpad

Rotate View

. Frame selected


Number Pad Commands

The number pad plays an important roll in Blender, which can be a bit difficult if you, like me, have a laptop without a full number pad.  Don't worry, most of this functionality can be achieved through other means ( many of which are shown above ), but if you have a number pad on your keyboard, grow to love it, it is well used in Blender.  The following are a map of functions tied to the number pad.  The second graphic shows the effect of the Number Pad with the Control Key pressed.


Number pad mappings

Blender Number Pad


Number pad mappings with Control pressed

Number Pad 3

Coming Next

Next we will look at the basics of modelling in Blender.



On to next part

27. January 2013


LibGDX is a popular Java based open source cross platform game programming library that supports desktop, Android, HTML5 and now… iOS.


Other details about this release:


  • Minor changes to the Livewallpaper API. Note that the LWP support is still a little buggy. It’s a contribution, and while i did quite a bit of clean-up it’s still not entirely where it should be. I’d be super happy if someone took on that backend!
  • If you want to deploy to HTML5 you now need to use GWT 2.5!
  • We have rudimentary Maven support. Thanks a ton to Team Gemserk for libgdx mavenizer and all their help with this!.
  • Android Daydream support, a contribution by talklittle! This one is stable.
  • Gdx controllers extension, for Android/Ouya and desktop. HTML5 could be an option too! Volunteers? (looking at you Nex) Some notes on the current stub backend for HTML5
  • The gdx-net API is now part of core. Fetching things via HTTP should work on all backends. Here’s a little test. Big thanks to Noblemaster and Gemserk who led this effort!
  • Not exactly part of the release, but here’s a quick rundown on how to make your libgdx game work with Ouya!
  • Again, not exactly part of the release, but here’s an awesome guide by Swarm on how to integrate Swarm with your libgdx app! Note that you should probably interface the Swarm API so your desktop project continues to work.
  • First release of the iOS backend



The iOS release does have some caveats though.  You need a Mac, XCode and ( here’s the stickler ) a MonoTouch license, just like the PlayN project’s iOS port.  Unfortunately, MonoTouch costs 400$, so this is one of those things you should be aware of upfront.


That said, iOS is often the biggest market place, so being able to port your game could be easily worth the 400$ price tag. 


The following features are in the queue for the 0.9.9 release:



You can read the entire release notes here, and access the source code here.


Nice work LIBGDX team.


25. January 2013


Rim have released Gameplay 1.6, a 3D cross platform library for writing games for Blackberry 10, Playbook, PC, Mac, Android and iOS devices using C++.  gameplayThis is a project we have been following here at GameFromScratch for quite a while, and given the complexity, its amazing just how fast you can get up to speed.


If C++ is your language of choice ( or LUA for that matter ), you really should check out Gameplay, it’s completely free and open source.


The following are the release notes of the 1.6 release:

  • Adds file Stream interface for reading/writing files instead of using fread/fwrite.
  • Adds Terrain class to support for heightmap based terrains featuring LOD, multiple surface layers, loading from PNG, RAW8/16, full transform, physics, patch culling and verticle skirt for cracks.
  • Adds object-space normal map generation to gameplay-encoder for terrain normal map generation.
  • Adds scene support for loading .terrain files in .scene files.
  • Adds scene support for inline cameras to .scene files.
  • Adds suppoft for defining .scene files without 'path' to gpb. New node can not be create in .scene file.
  • Adds static Scene::getScene(const char*) to query currently active scenes in a game, helpful for script access.
  • Adds support for multiple translate, rotate and scale commands in a single node entity within .scene files, processed in-order they are defined.
  • Adds scene support for material auto binding scene ambient color, light color and light direction.
  • Adds support for setting the depth compare function on materials.
  • Adds support for texture/sampler arrays being passed to materials.
  • Adds support for loading uncompressed DDS textures for the following formats: R8G8B8, A8R8G8B8, A8B8G8R8, X8R8G8B8, X8B8G8R8
  • Adds improvments to prefer higher quality mipmap generation.
  • Adds improved Gamepad API support for button enumeration, triggers and some mobile Gamepad support on BlackBerry.
  • Adds additional gameplay-tests for billboards, forms, gamepads and lights.
  • Adds support for launching the browser via launchURL(const char*).
  • Adds physics support for setLinearFactor and setAngularFactor on rigid bodies.
  • Adds methods to PhysicsCollisionObject to allow conversion to subclass types (i.e. PhysicsRigidBody, PhysicsCharacter, etc) from script.
  • Adds option for fullscreen without width/height config to use native desktop resolution.
  • Adds Linux support for OpenAL PulseAudio back-end.
  • Adds support for latest Bullet Physics 2.81 with NEON optimizations for mobile targets.
  • Adds support for preprocessor directive NO_LUA_BINDINGS in the gameplay project to omit inclusion of generated lua bindings in compilation for developer mode value.
  • Adds optimizations to Lua generator to only write generated files if they differ from existing files, reducing both build times and committing of unchanged script binding files.
  • Adds changes to Slider for setValueTextVisible, setValueTextAlignment, setValueTextPrecision and getters.
  • Adds Microsoft Windows 7 64-bit support.
  • Adds Apple iOS 6 support.
  • Fixes to external-deps to reduce the size of the libraries on Windows.
  • Fixes for Android to no longer need to copy files to the SD card before reading them. None of the Android samples require an SD card.
  • Fixes for animation of opacity on UI and fonts.
  • Fixes in UI for removing controls and also setVisible(bool).
  • Fixes for UI controls missing on MacOSX.
  • Fixes for setting UI alignment programmatically.
  • Fixes for lighting shaders.
  • Fixes to the texture minification mode from GL_LINEAR_MIPMAP_LINEAR to GL_NEAREST_MIPMAP_LINEAR for newly created textures with mipmaps.
  • Fixes minor memory leaks and possible access violations when calling Game::exit() from script.
  • Fixes physics debug drawing for large scenes causing the internal MeshBatch to grow to an enormous size.


This release certainly makes Gameplay on the desktop seem much more viable.  Terrain support is certainly a nice new addition as well.


Good job Gameplay team.

News Programming

22. January 2013

Amazon have released Game Connect a system for offering DLC and other game purchases ( subscriptions? ) using Amazons infrastructure.


At first glance this seems pretty minor, yet another payment processor, but it is actually a rather large deal… why?  Because your purchasable game content will be included on, bringing massive exposure to small players in the free to play space.  Additionally, people trust Amazon and can use their existing account, gift cards, etc to make payments.  In some ways this might be one of the biggest developments for small indie developers looking to monetize their games.


What is Game Connect?

Game Connect is a service provided by Amazon which enables customers to discover and purchase virtual items on and have these virtual items sent directly to their linked game account.

How does Game Connect help you find more customers?

• Convenience: Customers can link their existing accounts with their account in your game to purchase digital items, delivered directly to their linked game account.

• Trust and Security: Game Connect enables Amazon customers to purchase your games and virtual items using existing and trusted order processing and payments technology. 

• Discoverability: Your games and virtual items will benefit from the familiar Amazon personalization and recommendation engine, surfacing your products where it makes the most sense for customers.


Amazon mention that during beta, developers took an average of 2 weeks including testing to implement Game Connect in their game.  Unfortunately there is little developer information available, you need to email [email protected] if you want more details or to enrol.  EDIT:  Some developer information is available after all.  SDKs exist for Java, PHP and .NET.


The store is already only and you can browse it here.  As you can see, there is a fair bit of support already, including Second Life and Air Mech.

Amazon Connect


Is this a game changer, or just another payment processor?


Amazon have become a bigger and bigger player in the game development space, without many people realizing it.  Already their EC2 and S3 cloud solutions power the back ends of a large number of games.  Additionally their Kindle store provides an alternative to the mostly dismal Android App Store.


Some more links care of Reddit.  Here is the link to the In App Purchases documentation page.

Included are this tidbit

For In-App Purchasing for PC, Mac and Web-based games, please contact us to discuss revenue share.

For In-App Purchasing on Kindle Fire or through the Amazon Appstore for Android, developers earn 70 percent of list price on each paid app as well as on each in-app purchase. The fee for distributing apps through the Mobile App Distribution Program is $99 per year, which we are currently waiving.

 They currently support Pc, Mac and Web targets, as well as Kindle Fire and Android.  Notably absent is iOS.

The full Amazon press release is available here.


See More Tutorials on!

Month List