Subscribe to GameFromScratch on YouTube Support GameFromScratch on Patreon

8. July 2016


Mesa is a key component of OpenGL support on open source platforms and just announced release 12.0.0.  Major features of this release are Vulkan drivers for Intel chipsets, OpenGL 4.3 support on modern GPUs, OpenGL ES 3.1 support and more.

The 12.0.0 announcement from the Mesa developer mailing list:

It's a real honour to announce Mesa 12.0.0.

This release has massive amount of features, but without a doubt the biggest
ones are:
 - Vulkan driver for Intel hardware from Ivy Bridge onward.
 - OpenGL 4.3 for nvc0, radeonsi and i965 (Gen8+)
 - OpenGL ES 3.1 on nvc0 and radeonsi
 - GLVND support for GLX, OpenGL
 - New gallium software driver - SWR.
 - DRI3 enablement for VDPAU, OMX and VAAPI

 - Gallium radeon drivers (r300, r600 and radeonsi) now require kernel 3.2 and
LLVM 3.6 or later.
 - Building SWR requires python2, since some of the generated files cannot be
distributed as part of the release tarball.

GameDev News

8. July 2016


Cocos2d-x is a popular open source C++ based cross platform game development library.  If you are interested in learning more about Cocos2d-x, we have a complete tutorial series available here.  The Cocos2d-x team just announced the release of Cocos2d-x 3.12.  Version 3.12 adds support for the Tizen platform, experimental support for VR, fixed some Android performance issues, add obb Android support and WebGL improvements. 

In addition to these features, there are dozens of new features and bug fixes, including:

[HIGHLIGHT] add VR support

[HIGHLIGHT] add Tizen support

[HIGHLIGHT] fix Android performance issue

[HIGHLIGHT] Web engine performance improved in WebGL mode

[HIGHLIGHT] support obb extension on Android

[NEW] Core: add `utils::findChild()`

[NEW] Core: add CSV format support to tile maps

[NEW] Core: add `FileUtils::getContents()`

[NEW] Core: cocos2d::Value supports unsigned

[NEW] Particle: add feature to pause/resume particle emitter

[NEW] Platform: support Windows 10 UWP x64

[NEW] UI: add clamp and shrunk feature for system fonts, currently only support iOS, Android and Mac

[NEW] UI: make ListView select item programmatically

[NEW] UI: add `EditBox::InputFlag::LOWERCASE_ALL_CHARACTERS` to lowercase characters

[NEW] UI: add `setBounce()` to WebView

[NEW] Web: refactor TMXLayer renderers

[NEW] Web: can force orientation in mobile browser

[NEW] Web: support high resolution TTF Label on retina display

[REFINE] Android: use clang instead of gcc to compile codes

[REFINE] Android: hide virtual button by default

[REFINE] Android: set music volume control as default

[REFINE] Android: usage clang insteand of gcc to compile codes

[REFINE] Audio: catch `IllegalStateException` exception to avoid crash when playing background music with SimpleAudioEngine on Android

[REFINE] Core: fix many warnings

[REFINE] Core: move StringUtils functions from deprecated header file to ccUTF8.h

[REFINE] Core: FontFNT will ignore chars that exceeds 65535 and print a warning information

[REFINE] Core: `Node::ignoreAnchorPointForPosition()` is deprecated and add `Node::setIgnoreAnchorPointForPosition()`

[REFINE] Core: allow inherit from platform FileUitils

[REFINE] Core: add optional alpha parameter to Color4B and Color4F

[REFINE] Core: Follow action can accept horizontal and vertical offset

[REFINE] Core: TMXXMLParse parse `id` element

[REFINE] Lua: rename all member functions named `end()` to `endLua()`

[REFINE] JSB: make selectedSprite opitional in MenuItemSprite

[REFINE] JSB: return null if read failed in `js_cocos2dx_CCFileUtils_getDataFromFile()`

[REFINE] Template: iOS tempalte is refined to make cocos2d-x game scene work better with other UIView

[REFINE] Template: remove ``

[REFINE] Template: ARC support on iOS and Mac OS

[REFINE] UI: TTF and BMFont label wrap mode will automanytically changed to char wrap mode when label's width is less than word's boundary

[REFINE] UI: UIWidget adds missing properties for clone

[REFINE] UI: UIScrollBar caches the texture created with base64 encoded images

[REFINE] UI: EditBox now prints lowercase letters by default

[REFINE] UI: enable WebView's local storage on Android

[REFINE] UI: improve EditBox implementation on WinRT

[REFINE] UI: make PageView indicator more tunable

[REFINE] UI: make PageView page turning event time tweak configurable

[REFINE] UI: RichText is improved: add effect of outline, shadow and glow; catch the event of open url; ability to extend tags; add anchor of image tag

[REFINE] 3D: skeleton animation is more efficient when two animations switch frequently

[REFINE] 3rd party: update webp to 0.5.0

[REFINE] Web: improve basic types to reduce memory usage

[REFINE] Web: Show line number in console statements

[REFINE] Web: Cache base64 image of PageViewIndicator and ScrollViewBar

[REFINE] Web: Pass error in cc.AsyncPool in onEnd callback

[REFINE] Web: Separate ccui.ListView event callback from ccui.ScrollView for its own events

[FIX] Android: fix compiling error if using NDK r11+

[FIX] Android: package name is `libcocos2dx` instead of application name if building with Android Studio

[FIX] Audio: AudioEngine can not work if the file path contains not ascii code on iOS

[FIX] Audio: SimpleAudioEngine::playEffect() doesn't work correctly on Linux

[FIX] AssetsManager: can not work

[FIX] AssetsManagerEx: use manifestUrl from remote version

[FIX] Core: `FileUtils::writeValueMap()` will crash on iOS if it contains `Value::Type::None` type element

[FIX] Core: `ClippgNode::setStencil()` may cause assert error if it is invoked before

[FIX] Core: `TextureCache::addImageAsync()` doesn't set pixel format corretly

[FIX] Core: `GL::SetBlending()` doesn't set dst correctly

[FIX] Core: vertex z can not work correctly if window size changed on desktop platforms

[FIX] Core: use `std::isnan()` instead of `isnan()` to fix compiling errors on some Linux platforms

[FIX] Core: crash on windows when using PolygonInfo

[FIX] Core: fix `libpng error: CgBI: unhandled critical chunk` error with Xcode 7.3

[FIX] Core: EXC_BAD_ACCESS random crash caused by reallocation of shared indices memory

[FIX] Core: memory leak of `utils::captureScreen()` on iOS and Mac OS

[FIX] Core: assert error if remove an event listener twice at the same time

[FIX] Core: FileUtils::getValueMapFromFile() returns wrong value if it is a number with scientific notation on Android

[FIX] Core: UIGrayScale shader is not reloaded when reloading shaders

[FIX] Core: `SpriteFrame::clone()` doesn't clone polygonInfo

[FIX] Core: `FileUtils::createDirectory()` fails on Mac OS with sandbox

[FIX] Core: `cocos2d::Value` operator overloading of comparison `==` returns wrong value in case Type::VECTOR

[FIX] Core: wrong content size if minisize

[FIX] Core: can not have a class named `Game` on Windows

[FIX] Core: crash if load bad image on Windows

[FIX] Core: custom shader uniforms and attributes do not have effect in DrawNode

[FIX] Core: blend mode doesn't work with animated sprite

[FIX] Core: `FileUtils::removeDirectory()` can not work correctly when the path is not end of `/` on iOS and Mac

[FIX] JSB: fix some bugs related with JSB debegger

[FIX] JSB: scheduler callback target lost

[FIX] JSB: missing scroll widgets constants

[FIX] JSB: if obj is undefined or null then attempt to access obj.__nativeObj leads to incorrect behavior

[FIX] JSB: use `require()` to require the same script twice may crash

[FIX] Lua: lua function is not invoked when error happens in websocket

[FIX] Network: HttpClient Content-type limitation on iOS

[FIX] Network: downloader crash when storage path contains spaces

[FIX] Network: SocketIO crash on reconnect

[FIX] Physics: PhysicsBody damping doesn't wrok

[FIX] UI: EditBox may cause `java.lang.IndexOutOfBoundsException` exception on Android

[FIX] UI: TextFieldTTF doesn't show password correctly

[FIX] UI: RichText crash on Windows

[FIX] UI: EditBox can not use custom font on Android

[FIX] UI: can not use TTF font on Android

[FIX] RenderTexture: `setOpacity()` has not effect

[FIX] 3D: `Sprite3D::createNode()` may not work correctly with particular model data

[FIX] Web: `getParentToNodeTransform` doesn't return result

[FIX] Web: remote image without extension in url can't be loaded as image

[FIX] Web: nested clipping nodes rendering issue in WebGL render mode

[FIX] Web: IMEDispatcher can't work in mobile Chrome


Cocos2d-x is available here.

GameDev News

8. July 2016


Released just a few days ago on the App Store is Continuous, a complete C# and F# development environment that runs directly on your iPhone or iPad.  It contains a fairly full featured IDE with capable text editor, programming friendly on screen keyboard and more.  In addition to the editor it contains everything you need for development, a port of the Roslyn compiler, VM as well as implementations of several key libraries such as Xamarins WinForms implementation.

From the App Store entry:

    • Continuous is always building and running your code so you can see changes as you type. Writing interactive apps in Continuous is a pleasure compared to the traditional code-build-run cycle. It frees you to make lots of small changes and see their effects immediately - no more waiting for builds or deployments and no more clicking around trying to get to the screen you're trying to code.
      Continuous looks and works in many of the same ways as traditional .NET IDEs so you'll feel right at home, but it also strives to advance the state of the art in IDEs with these features:
    • Full C# 6 and F# 4 compilers so you can use the latest tech
    • Automatic compiling and running so you can focus on the code and the results
    • Fancy text editor with tabs, semantic highlighting, inline error bubbles, and inline values that are updated as you type
    • Watch window enables you to view graphical objects in your app (UI and images), inspect live objects as your app runs, create instances of new objects, and call methods
    • Code completion with inline type info and documentation makes learning new APIs fun
    • Uses standard .NET file and project formats so you can share code with other IDEs
    • Includes Xamarin.Forms and UIKit to build apps and SpriteKit and SceneKit to build games
    • Split screen support so you can keep documentation by your side
    • Execution powered by a new IL interpreter


If you are interested in learning more I already did a hands-on video available here or embedded below.  After some more experience I may follow up with a full blown review.  If you are a C# developer and are interested on developing directly on your device, check out Continuous.  It’s a pretty amazing piece of software.


GameDev News , ,

8. July 2016


Tiled, a popular open source 2D map editor, just released version 0.16.2.  If you are interested in learning more about Tiled we have a complete tutorial series here on GameFromScratch.


The 0.16.2 is composed entirely of fixes, including:

  • JSON plugin: Fixed loading of custom properties on terrains
  • Lua plugin: Fixed missing export of object layer drawing order (#1289)
  • Fixed tile index adjustment when tileset image changes width (#1242)
  • Fixed --export-map [format] option (#1307)
  • Fixed shortcuts for some tools when language is set to Dutch (#1280)
  • Fixed a painting related bug affecting the top edge after AutoMapping (#1308)
  • Fixed issues when compiling against Qt 5.6 on OS X and Windows (#1309)
  • Fixed crash on maximizing with Maps view open on Windows (#1153, #1268, Qt 5.6.1)
  • Fixed focus issue while typing predefined object types (#1244, Qt 5.6)
  • Fixed silent fail when saving to restricted location on Windows (#965, Qt 5.6)


You can read the entire notes release here.

GameDev News

5. July 2016


In the previous tutorial we covered installing the Defold Engine and creating your first project.  Today we are going to be looking at the overall structure of a Defold game, as it varies slightly from previous game engines.  I assume at this point you’ve followed the previous tutorial, created an empty project and have it open in the Defold editor.


There is an HD video of this tutorial available here.


The default project should look something like:



The built-ins folder is exactly that.  It contains several resources and scripts usable in your game, but we will talk about that later.  The more important thing to be aware of here is the main folder and it’s contents.

Inside this folder we find main.collection, logo.atlas and a folder containing an image.  A collection is a very important concept in Defold.  In this particular usage, you can think of a collection as a level.  If we double click main.collection for example it will open up a scene editor, like so:



A collection isn’t simply a level however...  what it is is a container for game objects or other collections.  We will look at game objects in a second.  So yes, Collections can be used to compose game levels, but they have other purposes.  The also perform the role of “prefabs” in other engines.  For example you might have a prefab for an enemy, that contained the scripts controlling it, the graphics you used to draw it, the sounds it plays, etc.  This collection can then be used to “instance” a version of your prefab one or more times.


A moment ago I mentioned Game Objects.  This is another cornerstone to understanding Defold.  With main.collection open in the editor, you should see in the Outliner, the following:



You can see here that our collection (main.collection) contains a single Game Object named go, which in turn contains a single component sprite.  You’ll notice with sprite selected that the Properties show our sprite comes from /main/logo.atlas and uses the animation or image named logo and renders using the built in material sprite.material. 

If you’ve worked with a component based game engine, such as Unity or Unreal, should be immediately comfortable with this concept.  Basically Game Objects are the entities or items that make up your game.  You will notice with a game object selected, it has very few properties:


Basically a Game Object contains positioning information (location, rotation and scale) and an Id, which we will use later.

What makes a Game Object useful is it’s a container for Components.  If you right click a Game Object in the Outliner, you can Add Component (or press I)



You can then chose a component from the following list:


This is how you can attach a Sprite, Collision Object, Sound effect, etc... to your Game Object.


So in a nutshell, a Collection is just that, a collection of things.  Generally Game Objects and other Collections.  A Game Object is an entity within your game world.  It has a position and ID and is a container for several components.  Components are the things that make up your game object, sprites, sounds, etc.  Got it?


So then... what about code?


Well every game engine has a game loop somewhere.  A game loop is a pretty simple concept, it’s a loop that runs over and over again and looks something like this primitive psuedo code:




The exact contents of the game loop change from engine to engine but if you look at enough engines you will notice they are all very similar in the end.  It’s a loop that runs, checks for input, updates the game world, updates the physics engine if one exists then renders the results.  The actual game loop itself is often hidden away in a game engine and Defold is no exception.  So how then do you program your game?

Well first off you create a script.  A script is just another type of asset that can be added to your project.  To do so, right click the folder you want the asset to be created in (main), then select New->Script File.



Next you want to name your script.  In Defold scripts have the .script extension. 



This will create a new script file.  Double click it to bring it up in the editor:

function init(self)
    -- Add initialization code here
    -- Remove this function if not needed
    print("Game Created")

function final(self)
    -- Add finalization code here
    -- Remove this function if not needed

function update(self, dt)
    -- Add update code here
    -- Remove this function if not needed

function on_message(self, message_id, message, sender)
    -- Add message-handling code here
    -- Remove this function if not needed

function on_input(self, action_id, action)
    -- Add input-handling code here
    -- Remove this function if not needed

function on_reload(self)
    -- Add reload-handling code here
    -- Remove this function if not needed


I added a simple print() function call in the init() method.  Remember what I was saying about game loops earlier?  Well in Defold, during it’s game loop it makes various callback function calls at different points in the loop.  In this case init() is called when the script is first created, final() is called when it is done.  All the other methods are called each pass through the loop. We will look at each of these methods in detail in the future.


So now that we have a script, we actually have to attach it to something to get it to run.  Thankfully we already have a game object in main.collection named go.  Let’s attach the script to it.  Make sure main.collection is being edited, then in the outliner, locate go, right click it and select Add Component From File.



Select main.script then click OK:



Now that script will be attached to that game object.


This leaves one last question... how does the Defold engine know to create our main.collection to start all of this off in the first place?  Well that’s where game.project comes in.  This file contains several global configuration settings for your game.



In this particular case however, it’s the bootstrap that we are interested in.



You can think of main_collection as the entry point of your game.


That’s it for this tutorial.  Now that we have a good understanding of what the pieces that go together to make a game, next we will jump in and start getting our fingers dirty.  This tutorial is not going to be covering Lua programming.  If you are new to the Lua language, be sure to check out this tutorial series and you will learn everything you need to know to get up to speed.


The Video

GameDev News

Month List

Popular Comments

Substance Designer 5.6 Released
Subscribe to GameFromScratch on YouTube Support GameFromScratch on Patreon

15. December 2016


Allegorthmic just released Substance Designer 5.6.  Substance Designer is a tool for making PBR (Physically Based Rendering) based materials, often used with sister application Substance Painter.  This release brings seven new tools and filters to Substance Designer, including:

  • Height Blend: Blend multiple materials or scans using their height maps for added realism. Output includes blended height and a mask to easily blend other channels of your materials.
  • Horizon Based Ambient Occlusion: Artists can now generate an accurate ambient occlusion with real-world scale and depth of surface, simulating a raytraced bake in milliseconds.
  • Color Match: Fine-tune the overall tint of your scans without destroying the color of small elements.
  • Real-World Height to Normal: Set the width, length and/or maximum height of a surface to generate a world space accurate normal map, perfect for precise displacement or parallax effects.
  • Snow Cover: Add a snow cover to any pre-existing material and create realistic effects like a windy blizzard or snowmelt. All snow piles realistically and can be adjusted via multiple parameters including thickness.
  • Water Level: Adds an artificial water plane to a material. Tweak the water’s height, dirtiness, fogginess and freeze.
  • Material Blend Height: Use the Height Blend method to blend two full materials using their height map, as well as making sure the albedos match properly, all in a single node.
  • Non-Uniform Histogram Scan: The Histogram Scan node is a favorite of artists wanting to create nice animated masks and weathering. This new version adds custom inputs to drive the contrast and level of the mask on a per pixel basis, allowing for the generation of much more complex and rich masks


A 30 day free trial is available here.  You can read more about the 5.6 release here.  Below is a video demonstrating the new filters available in 5.6.

GameDev News

blog comments powered by Disqus

Month List

Popular Comments