Subscribe to GameFromScratch on YouTube Support GameFromScratch on Patreon

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


21. January 2013


This one is a big one.  If you have never heard of it, monoGame started life as a way to port XNA applications to the various Mono targets (including iOS and Android), built on top of OpenGL.  With Microsoft basically retiring XNA, monoGame has basically become the future of XNA.

The biggest and most obvious addition in this release is 3D support, but there are a number of other great new features:image


What's New?
  • 3D (many thanks to Infinite Flight Studios for the code and Sickhead Games in taking the time to merge the code in)
  • New platforms: Windows 8, Windows Phone 8, OUYA, PlayStation Mobile (including Vita).
  • Custom Effects.
  • PVRTC support for iOS.
  • iOS supports compressed Songs.
  • Skinned Meshs
  • VS2012 templates.
  • New Windows Installer
  • New MonoDevelop Package/AddIn
  • A LOT of bug fixes
  • Closer XNA 4 compatibility

    The also added a new installer that will install a binary release of Monogame on Windows for use with Visual Studio.  MonoDevelop users can update with the Add-in Manager.

    Head on over here for the release announcement.


    Nice work Monogame team!

    News , , , ,

    21. January 2013

    I am testing my blogging software in a different mode.  That is what this post is all about, nothing exciting, sorry.




    Testing concluded and working mostly well.


    If anyone is curious, a while back I did a series of posts about blogging on MacOS and the search for a Windows Live Writer alternative.  Ultimately I choose to go with MarsEdit.


    Over time I've really enjoyed working with MarsEdit, much more so than WLW actually, but I still do a lot of work on Windows and MarsEdit has a pair of pretty heavy downsides.  I use BlogEngine for this sites blog, and it supports blog API seems to be catered towards WLW, it used the Metablog standard, but with extensions.  Those extensions are to support Pages and Tags, two things I used heavily.


    This means if I published using MarsEdit, no TAG support.  Even worse, if I edited an existing post, it removed the tags.  This was to say the least a bit of a bummer.  I also can't create Pages, which are basically just posts that are outside the timeline of the blog.  I use these for table of contents posts, like the index page for almost any Tutorial post I write.


    So I fired off a support/feature request to Red Sweater.  Impressively I go a response, not a form letter, an actual response with suggestions to try setting my blog type to Wordpress and trying again.  It somewhat worked, but isn't quite perfect.


    I am hoping to get there eventually, but in the meanwhile, a gigantic tip of my hat to Red Sweater, that is exceptional support!  I certainly wouldn't expect the same from Microsoft, and they are a company I hold in incredibly high regard when it comes to customer service.


    So, there you go.  If you are looking for a Mac based blogging software, give MarsEdit a shot.  If you are running MarsEdit with BlogEngine and run into issues, try setting your blog type to WordPress.


    That is all.

    18. January 2013



    Welcome to our first Programmer Art tutorial series.  The ultimate goal in these tutorials is to instil  a programmer with the capacity to create their own art assets, in this case using Blender.  One thing I want to make clear right off the hop, this won't teach you how to create *GOOD* art, that part takes many years of practice.  What it will do however, is cover all of the bits you need to know to create "programmer art" for your game.  Who knows, in the end way may even make an artist of you!


    Over the series we will hopefully be covering general Blender navigation, modelling, texturing, animating and possibly rendering.  Each of these topics could actually fill a book, so the focus here is purely functional in scope.  I would say think of this as the Coles notes version of Blender, but apparently outside of Canada, that expression means nothing…  So instead, think of this as Blender for Dummies, where I am in fact assuming you Dummies are actually rather clever! :)  This post is going to be an overview of Blender itself, the interface can be a bit daunting at first. If you are already somewhat comfortable with Blender, you may want to skip ahead.


    Meet Blender

    Blender for those of you that may not have encountered it before, is a free and open-source 3D modelling application available for Mac OS, Windows and Linux ( and more… ).  It is a remarkably capable package containing tools for modelling, animating, paint, texturing, rendering and even editing video.  Heck, Blender even includes a full featured Python powered game engine!

    Blender has a bit of a reputation for being… difficult.  In many ways, especially since more recent UI overhauls, this is mostly an unfair reputation.  On the other hand, Blender is certainly different.  If you have some experience with other 3D applications, you will find Blender a bit daunting at first.  Don't worry, once it clicks it gets a lot better.  One of the big issues with Blender is a lot of the documentation out there is for Blender 2.4 and earlier and those versions were massively different.

    Obviously before we begin, we need to get a copy of Blender.  Simply head over to the download page and download the most recent version for your platform of choice.  In this tutorial, I will be using 2.65a, simply because it is the most recent version.  Blender updates on generally a 6 week schedule, so if your version is slightly newer, it shouldn't be a huge difference.

    So, if you haven't already, download and install Blender.  Once it's installed, load it.  


    Welcome to the UI

    So, now that you have fired up Blender, you should see:

    Blender Start Screen


    Clicking once will remove the splash screen.  This leaves you with the default starting scene below, minus the pretty blue annotations that is.

    Scene Details


    Lot's of stuff in there, each item labeled above.

    The point light and camera are simply graphical icons for non-visible scene attributes, the Camera is used to render the scene from and a Point light, which you can think of similar to a light bulb in the real world.  The transform widget is a very handy little guy that we will cover shortly.

    The Cube is simply a 3D model so your scene doesn't start outempty.  The cursor can be thought of as a pivot point that transform are performed relative to, we will see it in detail later.  Behind it all is a grid.  This is simply for reference and can be turned off if you want.  The thing to keep in mind, the grid isn't actually part of your scene, its just there to assist you, like the rulers in Photoshop.

    There are two very important things to be aware of right now:

    1- The camera you see on screen, isn't the same as the camera ( or perspective ) you use to view your scene.  The camera ( seen above ), is used for rendering your 3D scene into an image or movie.  If you are simply modelling or are ultimately exporting to a game engine like Unreal or Unity, you don't need the camera at all.  You manipulate your view of the world through a different means, that we will cover very soon.  Simply put, if you aren't rendering to an image or movie, you don't really need a camera, although they can be useful for visualizing your results.

    2- This is just the starting scene.  At any time you can delete everything here.  Go ahead if you went.  Click in the scene and press the 'A' key, which is the same as Select/DeSelect All.  Then hit X to delete the selected items.  You will see a prompt box like so:

    Delete Prompt Blender




    Either press X again, or click Delete, and voila:

    Empty Blender Scene


    A completely empty scene, minus of course the cursor/pivot and the grid.


    If you prefer Blender start with an empty scene every time you start up, you can now save your changes.  Select File->Save User Settings ( or CTRL + U ).

    Blender Save User Settings


    Keep in mind, Save User Settings will save all changes you have made to Blender as your defaults, such as key binding changes, window location, visibility and size.  To go back to the original default if you mess something up, simply select Load Factory settings.


    If you want to customize the Blender interface, take a look at this video I put together earlier.  Just remember, if you mess things up, you can always start fresh by choosing Load Factory Settings.  The following video is completely optional, as the process can be a little confusing.  That said, the UI is amazingly flexible, as you will see.  The video is available in 1080p if the text is hard to read.



    A look around the interface

    Blender is an amazingly customizable interface, you can turn it into just about whatever you want, but it is also very easy to screw things up.  Any window can be split appear, changed, merged together, etc.   The following video I made earlier shows how you can customize the interface to your liking.  For now, I wouldn't bother too much, it can be a rather confusing process and this tutorial will assume you are using the default settings.

    Blender Screen Aspects


    Screen Layout Selection

    The Screen Layout selection can be used to select between various different layouts.  The one displayed above is 'Default'.  As you are working on different aspects, you will switch between different modes, for example, the Animation layout is optimized towards animation tasks, UV Editing is for texturing tasks, etc.  


    Tools and Properties Panel

    As mentioned in the diagram, you can toggle the left and right panel ( Tools and Properties ) by hitting the T or N key.  The Tools panel will be used quite commonly, when you use a tool ( like a bevel for example ), if it requires input or has options, they will appear on the tools menu.  The Screen Properties menu is used much less commonly, mostly to configure screen viewport settings, like texturing modes, size and scale settings, etc.  You can also use it to fine tune the position of objects numerically.


    Animation Timeline

    This timeline is used during the animation process, we will cover it in detail later.  You can dragon the window above it down or close it completely for now if you want.  Refer to the earlier video for details on how to resize, split and merge windows.


    Properties Windows

    Yeah, it's kinda confusing having two windows named properties, I know…  This guy is important and you will be using it a lot.  This is where textures are handled, special effects, modifiers, render settings and more are created, accessed and applied.  We will deal with it various times in later tutorials.


    Scene Graph

    This is your scene in hierarchical form.  You can use it to hide, select and delete various objects within your scene.  Your scene is ultimately a tree of nodes, which in turn contain other nodes.   In a complex scene, this will be a godsend.  For simpler scenes and these tutorials, we will rarely use it.  



    Hotkeys used in this tutorial


    A Select/Deselect All
    X Delete selected
    T Hide/Show Tools panel
    N Hide Show properties panel


    Coming Next

    In the next tutorial we will learn how to navigate around the Blender UI.



    On to next part

    Month List

    Popular Comments

    Cross platform Java game library PlayN v1.6 was released
    Subscribe to GameFromScratch on YouTube Support GameFromScratch on Patreon

    Home > >

    8. March 2013

    Version 1.6 of the cross platform Java based game library PlayN was released recently.  PlayN enables you to target desktop, HTML 5, iOS and Android all using a single Java code base. 



    Here are the release notes for this release:

    PlayN v1.6

    • The complete API changes are summarized in this JDiff report.
    • Below is a summary of the interesting changes.

    Project Layout

    • The way projects are organized has changed, please see Migrating15to16 for details.


    • Implemented tinting for layers (only on GL backends). See Layer.setTint and Layer.tint.
    • Added Log.setMinLevel to allow suppressing log messages below a certain level. (Recommended by Google for Android release builds.)
    • Added Sound.release for releasing audio resources sooner than waiting for GC to do it.
    • Added Assets.getMusic which allows backends to make some optimizations relating to large audio files.
    • Graphics.setSize was removed, and special setSize methods were added to individual platform backend code that can reasonably support them (e.g. HtmlGraphics.setSize).
    • Added GLContext.Stats for debugging rendering performance on GL backends. (See Triple Play's HUD class for an easy way to display these stats.)
    • Deprecated Canvas.setTransform because it interacts poorly with automatic scale factor management in HiDPI modes.
    • Added CanvasImage.snapshot which can be used to create an immutable snapshot of a canvas image which has higher render performance.
    • Added TextLayout.ascent/descent/leading for cases where an app needs to know more about the text that will be rendered by aTextLayout (for underlining, for example).
    • Added Json.Writer.useVerboseFormat to cause the JSON writer to generate pretty printed output (rather than compact, everything on one line output).
    • Added support for nested clipping regions (e.g. clipped groups inside of clipped groups).


    • Made the Java backend look for .wav audio files and then fall back to .mp3. This allows a game to use uncompressed .wav audio files, and only compress them when preparing an Android, iOS, or HTML build.
    • Made playback of large MP3s work (when loaded as music).


    • Added HtmlAssets.ImageManifest which can be used to pre-load the dimensions of all images known to your app, and enableAssets.getImageSync to (sort of) work in the HTML backend. A wiki article explaining this will be forthcoming.
    • Added support for HiDPI mode. See HtmlPlatform.Config.scaleFactor and HtmlAssets.setAssetScale.
    • Added HtmlGraphics.registerFontMetrics for overriding the (hacky) measurement of font line height.
    • Removed source code from the stock POMs. HTML backends now need to add the source jar files to their html/pom.xml. See playn-samples for an example.


    • Fixed issue with audio not stopping when device was put to sleep.
    • Images loaded locally are now marked as "purgeable" and "input shareable". Google for "android" and those terms to learn more.
    • Added AndroidGraphics.setCanvasScaleFunc which allows games to use lower resolution canvas images if desired. This is useful on devices with low memory.
    • Added AndroidAssets.BitmapOptions which allows games to downsample images if desired. This is useful on devices with low memory.
    • Added GameActivity.prefsName for customizing the name of the Android preferences file.
    • Added GameActivity.logIdent for customizing the Android log identifier. It defaults to playn which is what was hard-coded before.
    • Rewrote sound backend based on SoundPool. Music (large audio files) still relies on the old more-hardware-resource-intensive approach.


    • Added IOSPlatform.Config for specifying configuration options.
    • Added IOSPlatform.Config.frameInterval for specifying target FPS on iOS.
    • Added IOSImage.toUIImage for custom platform code that needs to manipulate an image loaded via IOSAssets.getImage.
    • Numerous bug fixes and performance improvements.


    Additionally, TriplePlay 1.6 was also released.  TriplePlay is a library built over top of PlayN to support higher level functionality like UIs and animation.

    The following are TriplePlays release notes:



    • Added Scroller makeVisible.
    • Added LongPressButton which supports both a normal press interaction and a long-press interaction.
    • Added AxisLayout.Policy CONSTRAIN off-axis sizing policy.
    • Added Field MAXIMUM_INPUT_LENGTH style.
    • Added TableLayout colspan for configuring a column span on an element.
    • Added ValueLabel.
    • Added Style ICON_CUDDLE and UNDERLINE (the latter for underlined text).
    • Added TableLayout.Column free to allow weighting of free columns.


    • Added AnimGroup for creating a group of invoked-in-parallel of animations that are either added to an Animator later, or are added to a serial animation chain.
    • Moved animation creation methods from Animator to AnimBuilderAnimation then now returns an AnimBuilder which is a cleaner design.
    • Clarified behavior of Animator add and then, made then freak out if used incorrectly.
    • Fixed bugs with repeating animations.



    • Added Transform randomScale and randomOffset.


    • Various bug fixes and small API improvements. See API changes.


    • Added NativeTextField Validator and Transformer for (native) text validation and transformation.


    • TintingShader was removed as PlayN layers now support tinting directly.




    For existing PlayN 1.5 developers, there is a guide for migrating to 1.6.


    blog comments powered by Disqus

    Month List

    Popular Comments