Subscribe to GameFromScratch on YouTube Support GameFromScratch on Patreon
19. March 2018


If you are an Unreal Engine game developer, Epic just announced a pretty sweet give away.  They just released $12,000,000 worth of art assets from the 2017 MOBA Paragon.  The assets include 20 AAA quality characters, fully rigged, textured and animated, ready for game deployment.  Additionally they released 1,500+ assets used to develop game levels. 

The assets are usable without condition so long as you are using Unreal Engine.  If you are using a different game engine you have no rights to any of these assets.

To see the assets in action be sure to watch this video.

GameDev News

15. March 2018

Cocos Creator 1.9 has just been released.  Cocos Creator is a full game development IDE for creating cross platform 2D games built on top of the Cocos2d-x framework.  If you are interested in learning more about Cocos Creator, be sure to check out our most recent hands-on video.  The 1.9 release brings several new features and bug fixes, the largest of which is the addition of two new platforms of sorts, Facebook Instant Games and QQ Play in beta form.

Details of the release from the release notes:

  • Support for Facebook Instant Games, [see Documentation] (
  • Support QQ Play, [See Documentation] (
  • [Editor] Assets panel directly supports copy and paste resources (via right-click menu or shortcut keys)
  • [Editor] In the scene editor’s Rect edit mode, support for dragging a node’s white space, easy to change the value of the anchor
  • [Editor] Added “Sync” button to the particle component’s Property inspector. Clicking Sync will set the Custom parameter to be the same as File. (Synchronize button is only available if you check Custom and set File)
  • [Editor] Adds scale property to Timeline to facilitate editing of both scaleX and scaleY
  • [Engine] PhysicsManager Adds FIXED_TIME_STEP and MAX_ACCUMULATOR Parameters
Bug Fixes
  • [Engine] [Web] Fixed an issue where the input box could not pop up in some MIUI browsers
  • [Engine] Fix the issue that the audio may not stop after checking MD5 build
  • [Engine] Fixed issue where Label’s stroke may be truncated by one pixel
  • [Engine] Fixed an issue with exception-free messages in the cc.Class constructor
  • [Engine] [Animation] Fixed issue where one frame would be played less when the Animation component switched animations or manually set the AnimationState time
  • [Engine] [Wechat] Fixes Failed to Use Remote Service Loading After iOS Wechat Mini Game Native Code Pack Exceeding 4MB
  • As of v1.8.2, cc.eventManager is no longer recommended. Use cc.EventTarget or cc.systemEvent instead. The original API will be removed in 2.0.
  • As of v1.8.2, cc.inputManager is no longer recommended. Use the same interface as cc.systemEvent instead. The original API will be removed in 2.0.
  • As of v1.8.2, dragonBones.CCFactory.getFactory is no longer recommended. Please use dragonBones.CCFactory.getInstance instead. The original API will be removed in 2.0.
  • When copying and pasting resources in the Assets panel, the resource properties will still not be copied. (Since 1.9.0)
  • On a native platform, calling the action.easing(cc.ease***) method may cause the node’s logical data to be out of sync. Please use cc.ease***(action) instead. (Since 1.8.2)

Cocos Creator is available for download here for both Mac and Windows.

Hands-on video

GameDev News

15. March 2018

Google just open sourced Resonance Audio, their 3D spatial audio rendering SDK.  It supports multiple platforms and game engines including Unreal, Unity, wWise, FMod, iOS, Android and Web.  You can learn more about Resonance Audio here, while the source is hosted on Github under the liberal Apache 2 source license.  Resonance enables you to create and position audio sources in 3D, define audio properties of your world, position the listener and it then calculates the results for you.

The following is a simple HTML5 sample that illustrates creating a 3D audioscape using the Web api.  It creates 3 different sounds, a laughing woman, a waterfall and a bird chirping, all downloaded from  The lady laughing can be moved around using the arrow keys as well as page up/down to move around the Z axis.  You can move the listeners ear left and right using the A and D key.  Finally the bird chirping will appear every 4 seconds in a random location relative to the users ear, + or – 1 meter.

You can get more details and hear the demo results in this video, which I will also embed below.  The sound works best when heard through a set of headphones.

<!DOCTYPE html>
<html lang="en">
    <meta charset="UTF-8">
    <title>GFS Resonance Audio Test</title>

    <script src=""></script>

        var laughX = 0.0;
        var laughY = 0.0;
        var laughZ = 0.0;

        var x = 0.0;
        var y = 0.0;
        var z = 0.0;

        // Create an AudioContext
        let audioContext = new AudioContext();

        // Create a (first-order Ambisonic) Resonance Audio scene and pass it
        // the AudioContext.
        let resonanceAudioScene = new ResonanceAudio(audioContext);

        // Connect the scene’s binaural output to stereo out.

        // Define room dimensions.
        // By default, room dimensions are undefined (0m x 0m x 0m).
        let roomDimensions = {
            width: 3.1,
            height: 2.5,
            depth: 3.4,

        // Define materials for each of the room’s six surfaces.
        // Room materials have different acoustic reflectivity.
        let roomMaterials = {
            // Room wall materials
            left: 'metal',
            right: 'curtain-heavy',
            front: 'curtain-heavy',
            back: 'curtain-heavy',
            // Room floor
            down: 'grass',
            // Room ceiling
            up: 'grass',

        // Add the room definition to the scene.
        resonanceAudioScene.setRoomProperties(roomDimensions, roomMaterials);

        /// -----------------  Laugh audio
        // Create an AudioElement.
        let audioElement = document.createElement('audio');

        // Load an audio file into the AudioElement.
        audioElement.src = 'laugh.wav';
        audioElement.loop = true;
        // Generate a MediaElementSource from the AudioElement.
        let audioElementSource = audioContext.createMediaElementSource(audioElement);
        // Add the MediaElementSource to the scene as an audio input source.
        let source = resonanceAudioScene.createSource();
        // Set the source position relative to the room center (source default position).
        source.setPosition(laughX, laughY, laughZ);

        /// -----------------  Waterfall
        // Create an AudioElement.
        let audioElement2 = document.createElement('audio');
        audioElement2.src = 'waterfall.wav';
        audioElement2.loop = true;
        let audioElementSource2 = audioContext.createMediaElementSource(audioElement2);
        let source2 = resonanceAudioScene.createSource();

        /// -----------------  Bird noises
        let audioElement3 = document.createElement('audio');
        audioElement3.src = 'bird.wav';
        audioElement3.loop = false;
        let audioElementSource3 = audioContext.createMediaElementSource(audioElement3);
        let source3 = resonanceAudioScene.createSource();

        // Play the audio.;;

            //randomly position bird  -1 to +1 x/y relative to the listeners location every 4 seconds
            source3.setPosition(x + Math.random() * 2 - 1 ,y + Math.random() * 2 - 1,1);

        window.addEventListener("keyup", function(event) {

            // Move laugh audio source around when arrow keys pressed
            if (event.which == 37) // left arrow key
                    source.setPosition(laughX -= 0.10, laughY, laughZ);
            if (event.which == 39) // right arrow key
                    source.setPosition(laughX += 0.10, laughY, laughZ);
            if (event.which == 38) // up arrow key
                    source.setPosition(laughX , laughY += 0.10, laughZ);
            if (event.which == 40) // down arrow key
                    source.setPosition(laughX, laughY -= 0.10, laughZ);
            if (event.which == 33) // page up arrow key
                source.setPosition(laughX , laughY, laughZ += 0.10);
            if (event.which == 34) // page down arrow key
                source.setPosition(laughX, laughY, laughZ -= 0.10);
            if (event.which == 32) // space key
                laughX = 0;
                laughY = 0;
                laughZ = 0;
                source.setPosition(laughX, laughY, laughZ);

            // Move the listener left or right on A/D keys
            if (event.which == 65){ //A
            if (event.which == 68){ //D
        }, this);



The video

GameDev News Programming

14. March 2018

After several beta releases, Unreal Engine 4.19 is finally here.  This release includes a new raft of graphical features, a new dynamic resolution feature that should help PS4 and UE419XBox One developers scale across devices, a unified AR API that works on both Apple and Google devices, a new AR game template, a Maya and Motionbuilder live link plugin, sequencer improvements, improved landscape LOD, material layers and much much more.

Details from the release announcement:

Whether you are creating games, linear media, architectural visualizations, or product design tools, Unreal Engine 4.19 enables you to know exactly what the finished product will look like every step of the way. The new Live Link plugin seamlessly blends workflows between external content creation tools and Unreal Engine so you can see updates as you make changes to source content. And with the continued improvements to Sequencer, you can be the director with even more control of your scenes in real time.

When it comes to bringing the worlds in your imagination to life, the sky's the limit. Create breathtaking vistas in large, open worlds thanks to Landscape rendering optimizations. With the new Dynamic Resolution feature that adjusts the resolution as needed to achieve desired frame rates, those worlds will run smoother than ever before on PlayStation 4 and Xbox One.

It wouldn’t be a complete release without a mountain of workflow and usability improvements, and Unreal Engine 4.19 does not disappoint in this respect. Working with Material layers and parameters is easier and more intuitive. Features for debugging Blueprints are more powerful with the ability to step over, step into, and step out. You can now save content folders as favorites. Animation tools have been improved with pinnable commands, ability to have multiple viewports, and lots more.

As always, the newest version is available for download in the Epic Game Launcher. 


Be sure to read the release notes for comprehensive details of this release.

GameDev News

13. March 2018

Another quick update for the recently released Phaser 3 game engine, this one bringing Phaser to version 3.2.1.   Phaser is a popular and full featured 2D framework for developing HTML5 games.  This release is almost entirely composed of bug fixes and quality of life improvements.

Details of the release from the release notes:

Bug Fixes
  • Fixed issue with Render Texture tinting. Fix #3336 (thanks @rexrainbow)
  • Fixed Utils.String.Format (thanks @samme)
  • The Matter Debug Layer wouldn't clear itself in canvas mode. Fix #3345 (thanks @samid737)
  • TimerEvent.remove would dispatch the Timer event immediately based on the opposite of the method argument, making it behave the opposite of what was expected. It now only fires when requested (thanks @migiyubi)
  • The TileSprite Canvas Renderer did not support rotation, scaling or flipping. Fix #3231 (thanks @TCatshoek)
  • Fixed Group doesn't remove children from Scene when cleared with the removeFromScene argument set (thanks @iamchristopher)
  • Fixed an error in the lights pipeline when no Light Manager has been defined (thanks @samme)
  • The ForwardDiffuseLightPipeline now uses sys.lights instead of the Scene variable to avoid errors due to injection removal.
  • Phaser.Display.Color.Interpolate would return NaN values because it was loading the wrong Linear function. Fix #3372 (thanks @samid737)
  • RenderTexture.draw was only drawing the base frame of a Texture. Fix #3374 (thanks @samid737)
  • TileSprite scaling differed between WebGL and Canvas. Fix #3338 (thanks @TCatshoek)
  • Text.setFixedSize was incorrectly setting the text property instead of the parent property. Fix #3375 (thanks @rexrainbow)
  • RenderTexture.clear on canvas was using the last transform state, instead of clearing the whole texture.
  • The SceneManager.render will now render a Scene as long as it's in a LOADING state or higher. Before it would only render RUNNING scenes, but this precluded those that were loading assets.
  • A Scene can now be restarted by calling scene.start() and providing no arguments (thanks @migiyubi)
  • The class GameObject has now been exposed, available via Phaser.GameObjects.GameObject (thanks @rexrainbow)
  • A Camera following a Game Object will now take the zoom factor of the camera into consideration when scrolling. Fix #3353 (thanks @brandonvdongen)
  • Calling setText on a BitmapText object will now recalculate its display origin values. Fix #3350 (thanks @migiyubi)
  • You can now pass an object to Loader.atlas, like you can with images. Fix #3268 (thanks @TCatshoek)
  • The onContextRestored callback won't be defined any more unless the WebGL Renderer is in use in the following objects: BitmapMask, Static Tilemap, TileSprite and Text. This should allow those objects to now work in HEADLESS mode. Fix #3368 (thanks @16patsle)
  • The SetFrame method now has two optional arguments: updateSize and updateOrigin (both true by default) which will update the size and origin of the Game Object respectively. Fix #3339 (thanks @Jerenaux)

Phaser is available for download here.  If you are interested in learning more about Phaser 3 development be sure to check out our getting started video available here and embedded below.

GameDev News

AppGameKit Studio

See More Tutorials on!

Month List