Subscribe to GameFromScratch on YouTube Support GameFromScratch on Patreon

18. мая 2016


Another week another Unreal Engine release, this time 4.12 Preview 4.  Once again this is a preview release, so don’t expect to use it in production work and expect bugs.  The biggest feature of this release is a preview of VR Mode announced back during GDC.  This enables you to place and move actors in the editor while using a VR headset, currently Vive and Oculus Rift are supported.

Of course there are a host of fixes in this release as well:

Fixed in Preview 4 - CL 2978217
Fixed! UE-30690 Behavior tree serialization is creating duplicates of task services on every save
Fixed! UE-30693 Server logging regressed
Fixed! UE-30763 Make details panel favorites experimental
Fixed! UE-30417 SetWorldOrigin in console command crashes editor
Fixed! UE-30515 Debris particles constantly firing in ending sequence of Infiltrator Demo
Fixed! UE-30606 Crash adding Begin Play to Character blueprint after breaking links
Fixed! UE-30663 Crash transforming cloth bone unweighted at current LOD in persona
Fixed! UE-30157 If variables are connected to pins of Layered blend per bone, the all variables' value are recognized as the last pin's value.
Fixed! UE-30588 Curves loaded from DDC do not always work on additive animations
Fixed! UE-30563 Memory leak in active sound on world teardown due to async traces
Fixed! UE-30539 Preferred audio device settings not overriding default audio device settings
Fixed! UE-30142 Landscape3 in ContentExamples Landscape crashes when using erosion tool
Fixed! UE-30429 Odd collision in VehicleGame track results in Buggy driving above the landscape
Fixed! UE-30462 Landscape grass placement changed
Fixed! UE-30372 Unusual Rendering on SunTemple with iPhone6+ Metal
Fixed! UE-30739 [CrashReport] UE4Editor-OpenGLDrv.dylib!FPlatformOpenGLContext::VerifyCurrentContext()
Fixed! UE-30775 Fix checkin error for InputDevice version checking
Fixed! UE-30767 Add protection against calling unsupported InputDevice methods on devices with Android version before KitKat
Fixed! UE-30579 StrategyGame fails to launch on Firefox
Fixed! UE-30553 Multiple Launches required to get Project running on Firefox
Fixed! UE-30699 Correct SupportsVulkan check for Vulkan shader format
Fixed! UE-30034 Xbox One: Level assets are not rendering for several samples
Fixed! UE-29328 Linux SCW crash Assertion `!"Illegal formal parameter mode"' failed.
Fixed! UE-30069 On one Retina MacBook Pro using re-opening UE4Editor after previously quitting it will cause a GPU hang on Nvidia requiring a force-reboot of the Mac
Fixed! UE-28411 Linux crash report folders are not placed in the Saved directory
Fixed! UE-30509 Crash running project examples in Standalone game on Mac
Fixed! UE-30498 Bad shadow flickering in Flying template
Fixed! UE-30469 tvOS Code fails to package if a space exists in directory name
Fixed! UE-30536 Large values of "Reflection Capture Resolution" cause extreme Graphical artifacting and degredation with no Warning to the User
Fixed! UE-30620 ContentExamples: Material_Properties level: Example 1.10 not enabled
Fixed! UE-30732 Crash opening QA-Sequencer - UE4Editor_Engine!FStaticMeshVertexBuffer::Init()
Fixed! UE-29556 Normal maps do not render on BSPs
Fixed! UE-30389 GPU Driver crash when setting reflection capture resolution to unreasonably high values
Fixed! UE-30341 [CrashReport] UE4Editor_Engine!FReflectionTextureCubeResource::InitRHI() [reflectioncapturecomponent.cpp:703]
Fixed! UE-30286 Player loses all input when unplugging the controller while in ShooterGame
Fixed! UE-30671 Opening Level Blueprint Produces Error (Third Person Blueprint Project)
Fixed! UE-30567 Misspelling in Parallax Occlusion Mapping level of Content Examples
Fixed! UE-30446 Paper2D map is missing from Windows Content Examples in 4.12 Binary
Fixed! UE-30287 Launch on iOS from windows fails for Match3 project obtained through launcher
Fixed! UE-30740 [CrashReport] UE4Editor_Sequencer!FSequencerTrackNode::GetDisplayName() [sequencertracknode.cpp:264]
Fixed! UE-30688 Crash adding a second animation to UMG on Mac
Fixed! UE-30656 Camera is not set to the characters camera when sequence is over
Fixed! UE-30680 Master tracks (camera cuts, fade, play rate, etc) should appear before folder nodes
Fixed! UE-30654 Packaged sequence does not autoplay
Fixed! UE-30666 Crash undoing UMG widget added to an animation
Fixed! UE-30529 Scroll bar does not have fixed width in Sequencer
Fixed! UE-30577 Multiple Transform track on Camera created from Add Master Sequence
Fixed! UE-30676 Crash using assign actor in sequencer on Mac
Fixed! UE-30490 [CrashReport] UE4Editor_SteamVR!FSteamVRHMD::D3D11Bridge::UpdateViewport()


To get the newest preview, simply download it using the Epic Game Launcher.

GameDev News

17. мая 2016


In our previous tutorial looking at the Heaps game framework, we looked at creating an initial application.  As part of that tutorial we used s2d to draw some text on the screen.  Today we are going to look a bit closer at using 2D graphics with Heaps.  Let’s start straight off with a simple example:

import h2d.Bitmap;
import h2d.Sprite;
import h2d.Text;
import h2d.Tile;
import hxd.Res;
import hxd.res.Font;

import js.Lib;

import hxd.App;
class Main extends App {
	override function init() {
		// Example one, create a new Bitmap using a Tile
		var logo = Res.logo.toTile();
		var bitmap = new Bitmap(logo, s2d);
	override function update(dt:Float) {
	static function main() {
		new Main();


When we run this example:


For this example to work you need to copy an jpg, gif or png file named logo to the resource directory.  Don’t forget you need to tell Haxe where this directory is using the –D resourceDir flag (see previous tutorial for more information ).  In this example we convert the resource to a Tile object, which you can think of as a rectangular region within an image (even if it encompasses the entire image).  Finally we used this tile to create a Bitmap object, which is brings together the thing to draw ( the Tile ) and where to draw it (the Sprite). More on these later.  As before to display it on screen the bitmap is parented to the s2d object, which is a Scene object that is created for us automatically.

Let’s look at another quick source example, the performs a very similar task:

import h2d.Bitmap;
import h2d.Sprite;
import h2d.Text;
import h2d.Tile;
import hxd.Res;
import hxd.res.Font;

import js.Lib;

import hxd.App;
class Main extends App {
	override function init() {
		// Example two, create a bitmap manually using BitmapData 
		and draw it to screen.
		var logoBitmapData = Res.logo.toBitmap();
		var bitmap = Bitmap.create(logoBitmapData);
		// Set the pivot point of our bitmap so it is positioned 
		relative to it's center
		bitmap.tile.dx = -Math.round(bitmap.tile.width / 2 );
		bitmap.tile.dy = -Math.round(bitmap.tile.height / 2);
		// Now center the bitmap to the screen
		bitmap.x = s2d.width / 2;
		bitmap.y = s2d.height / 2 ;
	override function update(dt:Float) {
	static function main() {
		new Main();


And running this one...



Here we again create a Bitmap to be drawn on screen, but this time using a different process.  In the first example (which is that way you would do things 99% of the time) we loaded the resource as a Tile.  In this example we instead load it using the toBitmap() method.  This is VERY VERY VERY confusing, and is why I decided to show it as an example.  toBitmap() does NOT create a Bitmap object, instead it creates a BitmapData object.  This naming convention was quite poorly chosen in my opinion and leads to a great deal of confusion.  BitmapData can be thought of the raw bytes of information that go together to make all the various pixels in our bitmap.  BitmapData is stored in system memory and is extremely slow to work with.  That said, you can easily manipulate this information, so if for example you wanted to convert all of the individual pixels to grayscale, you could.

Another change here is we didn’t set the Bitmap’s parent (s2d) during construction.  Instead we manually add the newly created bitmap to our scene by calling addChild().  This function will take any Sprite derived class.  We will get back to that in a second, but it’s an important concept to understand.  This second example shows a couple other key concepts.  Notice how we set the position .x and .y?  Well these are simple pixel coordinates to represent where the image should be drawn relative to the origin of it’s parent (s2d in this case).  The origin by default is the top left corner.  In this example we set the pivot point (or origin) by specifying dx and dy.  These are delta values that tell you where drawing calls are made relative to.  In this case we will perform drawing calls on this object relative to it’s mid point.


That’s about all I want to cover at this point in time, but there are a few key Heaps classes we should understand before moving on.



If you come from other game engines, this terminology is very confusing.  Almost universally a Sprite represents and image ( bitmap or texture in memory ) and the position to draw it at.  In heaps however, a Sprite is only about the position of the object. Sprite is the only type of object that can be added to Layer (and thus Scene) ‘s addChild() method call. 



Drawable inherits from Sprite and is the parent class for things that can actually be drawn on screen.  Bitmap inherits from this class, but so to does Text which we used earlier, as does Anim and Graphics.



s2d is an instance of Scene which is ultimately the root of the 2D scene graph.  At it’s core, Scene is actually a Sprite itself ( via Layer ), but it also holds a special object called Stage and is capable of responding to a number of UI events, as we will see in an upcoming tutorial.



This is another one of those things can be a bit confusing.  A Tile is a rectangle within a texture or image, but ultimately represents a source rectangle that is going to be displayed.  For example, the tile of a bitmap could represent only a portion of the source image.  Consider the following change to our original source:

	override function init() {
		var logo = Res.logo.toTile();
		var bitmap = new Bitmap(logo, s2d);
		bitmap.tile.setSize(Math.round(bitmap.tile.width / 2),	
		Math.round(bitmap.tile.height / 2));


When this code is run we get:



The underlying image of our Bitmap is unchanged, but we are only using a quarter of it because we shrank the dimensions of the tile.  This Tile approach is handy when dealing with sprite sheets, where you have several different frames of animation in a single source texture.  We will see this process in a later tutorial.


16. мая 2016


MakeHuman 1.1 was just released today.  This marks the first release to Make Human in nearly two years and adds major new functionality such as a new pose system and completely new and more game friendly skeleton support.  MakeHuman started life as a Blender plugin but was since spun off into a stand alone application.  It enables people to quickly and easily create fully rigged and textured human models.  Oh and it’s complete free and released under the CC0 Creative Commons open source license, perhaps the most liberal license in existence.



Major components of this release include:

  • Many bug fixes and stability fixes
  • Many targets improved and minor modeling corrections
  • Completely new skeleton and posing system, with support for pose loading from BVH, and support for custom weight and proxies
  • New pose system with auto-rigging, support for T-pose export, and initial support for special poses like high heel shoes
  • New skin library with age variation
  • New expression system now based on a face bone rig, including a library with facial expressions.
  • Improved topologies/proxies
  • FBX export now supports binary FBX and should work for most third-part applications which support FBX



You can read the full release notes here.


You can watch a video of MakeHuman in action below.

GameDev News, Art ,

16. мая 2016


There was a new release of the popular open source Java based LibGDX game framework today, version 1.9.3.  If you are interested in learning more about LibGDX I have done extensive tutorial series covering it available here.  This series brings a number of small changes, but by far the biggest update is on iOS compatibility, which I will get to in a moment.  First the changes:

- Switched to MobiDevelop's RoboVM fork (
- Addition of Intel Multi-OS Engine backend for deploying to iOS
- Updated iOS native build scripts to iOS 9.3 and TVOS 9.2
- API Addition: GestureDetector#pinchStop() called when no longer pinching
- API Addition: API added to Graphics
- API Addition:, grab the GL version and implementation type.
- API Change: Lwjgl3WindowListener -> filesDropped(String[] files) adds drag'n drop support for the lwjgl3 backend
- Added isComplete() to ParticleEffect to make it easier to know when all the emitters are done, behaves the same as in the 2D API.
- API Change: renamed Lwjgl3WindowListener.windowIsClosing() to closeRequested() to better communicate its intent.
- Add IndexData.updateIndices method to increase performance when used with IndexBufferObjectSubData. 
- Added FlushablePool
- Added ShapeCache see
- API Change: moved shape builder logic out of MeshBuilder, see:
- API Change: Table reset now calls clearChildren, not clear.
- Fixed crashes in when isPlaying is called. Errors are now logged only rather than crashing the app.
- Added emulation of ScreenUtils for GWT
- Improved performance of glReadPixels() on GWT. New method is 20-30 times faster
- Fixed crash on Mac when using LWJGL2, custom cursors and embedding the game in an AWT window
- Fixed getDisplayModes(Monitor monitor) returning wrong data on LWJGL2 backend
- Fixed Gdx.input.getCurrentEventTime() not being set on LWJGL3, fixes GestureDetector and flick scroll not working
- Fixed not being able to select non-latin characters in TextFields
- Bullet: added CustomActionInterface, see
- Add window size limits option to LWJGL3 app and window configurations

Perhaps the biggest component of the 1.9.3 release is how they are handling iOS support.  As you may recall the technology they relied on for iOS support, RoboVM, recently was killed off by Microsoft.  This left the LibGDX team in a bit of a bind and they found not one, but two solutions.  The first is a new RoboVM like technology from Intel called Multi-OS Engine (Moe?) and the second is to go back and fork the last known good version of RoboVM and bring it up to date.  Both have some advantages and drawbacks that are discussed on the LibGDX blog.

GameDev News

15. мая 2016


The following is a recap of major events in the world of game development for the week ending May 30h, 2016.  I do a weekly video recapping the news available here with this week’s video embedded below.  This post is a collection of links mentioned in the recap.



The Video

GameDev News

Popular Comments

Visual Studio 2013 is now.... free?
Subscribe to GameFromScratch on YouTube Support GameFromScratch on Patreon

Home > News >

12. November 2014


This one falls under the category of “extremely awesome news”, Microsoft just announced Visual Studio Community 2013 and it’s completely free.
You may think to yourself… big deal, there is already Express and it’s free too.  Unlike Express however, Visual Studio 2013 Community is actually the complete version of Visual Studio, nothing has been stripped out.
Here is the announcement from the Visual Studio blog:

Visual Studio Community 2013 is a new edition that enables you to unleash the full power of Visual Studio to develop cross-platform solutions. Create apps in one unified IDE. Get Visual Studio extensions that incorporate new languages, features, and development tools into this IDE. (These extensions are available from the Visual Studio Gallery.) Find out more details about Visual Studio Community 2013  here.

Download Visual Studio Community 2013.

What's in Visual Studio Community 2013 

  • Professional-grade editing, code analysis, and debugging support 
  • Support for open-source workflows (Git)
  • Compilers for managed languages, C++ and more
  • Cross-platform mobile development for your preferred device and platform, including the web, Android, iOS, and Windows Phone with the free Visual Studio Tools for Apache Cordova extension
  • Take advantage of cloud services with simplified Azure SDK integration, and incorporate modern app analytics and telemetry with Application Insights
  • Access to all the Visual Studio 2013 extensions on the  Visual Studio Gallery
  • Visual Studio Community 2013 includes Update 4, which is a cumulative update of all previous Visual Studio 2013 updates

Watch the  Visual Studio Community 2013 video to learn all about what you can do with this release:

Introducing Visual Studio Community 2013 

Several other Visual Studio 2013 products are available for download with Update 4, including the following:

  • Visual Studio 2013 Update 4 
  • Azure SDK for .NET 2.5 
  • Visual Studio Tools for Unity (VSTU) 2.0 Preview 
  • Kinect for Windows 2.0 SDK RTW 
  • Visual Studio Tools for Apache Cordova CTP3 
  • TypeScript 1.3 

To get more details on these releases, go to the  release notes for Visual Studio 2013 Update 4.


So, what's the catch? There's always a catch, right?


Yes, there is a catch, but it’s a pretty generous one.  From the Community page:


Q: Who can use Visual Studio Community? 
A: Here’s how individual developers can use Visual Studio Community:
  • Any individual developer can use Visual Studio Community to create their own free or paid apps.
Here’s how Visual Studio Community can be used in organizations:
  • An unlimited number of users within an organization can use Visual Studio Community for the following scenarios: in a classroom learning environment, for academic research, or for contributing to open source projects.
  • For all other usage scenarios: In non-enterprise organizations, up to 5 users can use Visual Studio Community. In enterprise organizations (meaning those with >250 PCs or > $1MM in annual revenue), no use is permitted beyond the open source, academic research, and classroom learning environment scenarios described above.

Q: How does Visual Studio Community 2013 compare to other Visual Studio editions? 
A: Visual Studio Community 2013 includes all the great functionality of Visual Studio Professional 2013, designed and optimized for individual developers, students, open source contributors, and small teams. 

So, basically if you are part of a team with 5 or fewer members, and made less than a Million dollars last year… Visual Studio is now completely free.


Merry XMas!


blog comments powered by Disqus