Subscribe to GameFromScratch on YouTube Support GameFromScratch on Patreon

25. July 2017

Available on Github, Crytek have released a preview version of the upcoming CryEngine 5.4 game engine.  Obviously being a preview you should expect some bugs and glitches and should probably wait on the final release in a production environment.  The 5.4 release contains over 620CryEngine improvements including Substance material importing, Vulkan support, a new component system and more.  Not included in the preview release, but part of the 5.4 release is also the release of the editor source code.

Details from the release notes:

With over 623 improvements, fixes and features this release includes all new Vulkan API support, and although it’s our first step on the road you can expect further support on this soon. Also included is the Entity Component System with unified standard entities across C++ and Schematyc.

For Artists, we have a much requested Substance integration for the reading of material archives and manipulation of texture inputs with in-editor graphing. Additionally, we have expanded the feature set of the terrain system to allow for better blending of terrain and objects within your level.

Iterating on existing technology there is a second iteration of the Asset System which provides improvements and extended usage across tools, with thumbnail generation and all new dependency tracking. To get started, you can find the CRYENGINE 5.4 Preview on Github HERE!

GameDev News

22. July 2017

HaxeFlixel 4.3.0 was just released.  HaxeFlixel is a Haxe port of the popular Flixel 2D game engine.  If you are interested in learning more about HaxeFlixel we have a complete audio and text tutorial series.

Details of the release from the changelog:

New features:
  • FlxTween: added cancelChain() (#1988)
  • FlxMatrix: added transformX() and transformY() (dcc66b3)
  • FlxCamera: added containsPoint() (#1964)
  • FlxSubState: added openCallback (#2023)
  • FlxSpriteGroup:
    • added insert() (#2020)
    • added clipRect support (#2051)
  • FlxSoundGroup: added pause() and resume() (#2043)
  • FlxDebugger interaction tool:
    • added tooltips (#2006)
    • added a selection rectangle (#1995)
  • FlxDebugger console: added an "Entry Type" quick watch entry (d354352)
  • FlxStringUtil: added getHost() (#1996)
  • FlxPoint: added toVector() (#2061)
  • FlxGamepad: added getAnalogAxes() (#2064)
  • FlxMouse: added getters for justPressedTimeInTicks (#2070)
  • FlxEase: added linear / smooth / smoother functions (#2080)
<?XML:NAMESPACE PREFIX = "[default]" NS = "" />Bugfixes:
  • FlxAnimation: fixed reversed animations (#1998)
  • FlxRandom: fixed getObject() not respecting startIndex (#2009)
  • FlxGroup: fixed remove() with Splice = true not decreasing length (#2010)
  • FlxStringUtil: fixed an issue with decimals in formatMoney() (#2011)
  • FlxMouseEventManager:
    • fixed overlap checks for off-camera sprites (#1964)
    • fixed pixel-perfect overlaps with offset (#1999)
    • fixed reset logic on state switches (#1986)
  • FlxPreloader: fixed missing assets with full DCE (764a5a8)
  • FlxG.cameras: fixed reset() not removing all cameras (#2016)
  • FlxAnimationController: fixed flipX / Y not being copied in copyFrom() (#2027)
  • haxelib run flixel: fixed the working directory not being passed on (61f2c20)
  • FlxDebugger interaction tool:
    • fixed selection of FlxSpriteGroup members (89a4ee2)
    • fixed selection of objects in substates (69042ab)
    • fixed selections being canceled on interaction with debugger UI (897f21f)
  • FlxG.html5: fixed platform detecting iPhone and iPod as "Mac" (#2052)
  • FlxTilemap: fixed a missing bounds check in getTileIndexByCoords() (#2024)
  • FlxAnalog: fixed mouse input without FLX_NO_TOUCH (#2067)
  • flixel.input: fixed Float being used for tick values (#2071)
  • FlxCamera: fixed object visibility for zoom < 1 (#2003)
  • FlxEmitter: fixed issues with lifespan == 0 (#2074)
Changes and improvements:
  • FlxBitmapText: allowed negative lineSpacing values (#1984)
  • FlxStringUtil: made getDomain() more robust (#1993, #1996)
  • FlxG.signals: changed gameResized to be dispatched after camera resize (#2012)
  • FlxAtlasFrames: allowed passing a parsed Description in fromTexturePackerJson() (#2021)
  • optimized expression watch entries (#2004)
  • FlxDebugger console:
    • allowed null objects in registerObject() to unregister (f52c73e)
    • registered a reference to the current selection of the interaction tool (1bb7b48)
    • prevented unpause after manual pausing through UI (56854fc)
  • FlxBasePreloader: improved the design of the sitelock failure notice (#1994)
  • FlxFlicker: made stop() public (#2084)
  • FlxAnalog: several fixes and improvements (#2073)

GameDev News

20. July 2017

AppGameKit 2017.07.19 update was just released.  AppGameKit is a beginner/indie focused game engine supporting C++ that can target several different platforms.  We covered AppGameKit 2 a couple years ago as part of the Closer Look At game engine review series if you want more information.  Release 2017.07.19 brings several new features including automatic shadow generation, 3D particles and normal map support.

Further details from the release announcement:

AppGameKit Player Apps

  • The AppGameKit Player on iOS will now display the Wifi IPv4 address over the mobile data one, if available

3D Shadows

  • AppGameKit now supports 3D shadow effects. Shadows are cast automatically from the directional light.

  • There are three different shadow modes you can choose from:
    • Uniform shadow mapping
    • Light Space Perspective shadow mapping
    • Cascade shadow mapping
  • The new shadow commands are;
    • SetShadowMappingMode
    • SetShadowSmoothing
    • SetShadowMapSize
    • SetShadowRange
    • SetShadowBias
    • SetShadowLightStepSize
    • SetObjectCastShadow
    • SetObjectReceiveShadow
  • New tier 1 shadow demo (found in the 3D demo folder)

3D Particles

  • Added 3D particle commands
  • Added a 3D Particle example to demonstrate their usage


  • Added SetObjectNormalMap command to add a normal map to a 3D object that uses the default shaders
  • Added LoadShaderFromString command to specify the shader source code directly as a string
  • Changed the mesh to light distance calculation to prefer closer lights regardless of light range when the number of lights is exceeded
  • If the number of pixel lights affecting a mesh exceeds the limit (currently 4) then the additional pixel lights will be applied to the mesh as vertex lights if possible
  • Added support for tangent and binormal attributes in 3D objects loaded from external files
  • Objects using a normal map that don't have any tangents or binormals will have them generated at runtime

  • Added normal mapping example project
  • Added support for the vertex color attribute for 3D objects using the default shaders

3D Model formats

  • Upgraded to version 3.3 of the Open Asset Import Library for 3D model loading
  • Currently supported 3D model formats are: .x .fbx .dae .3ds .obj .b3d .3d


  • DrawLine on all platforms will now draw the last pixel of a line whereas previously the last pixel was left blank
  • Fixed DrawBox drawing unfilled boxes incorrectly if the virtual resolution didn't match the window size

2D Physics

  • Fixed SetSpritePhysicsOff causing a crash if called inside a contact loop using GetFirstContact and GetNextContact
  • Fixed a crash when setting a physics sprite to a width or height of 0

Raw File Paths

  • Fixed LoadVideo not working with "raw:" file paths on non-Windows platforms
  • Fixed LoadMusic not working with "raw:" file paths on all platforms


  • Added RequestAppReview for iOS 10.3 to rate the app from within the app itself
  • Changed iOS splash screen to fade to black instead of white before displaying your app
  • Fixed OpenBrowser on iOS not accepting URLs containing spaces


  • Added FacebookActivateAppTracking command to send app events to the Facebook app console and record app installs


  • Added ShareImageAndText command to share both an image and text at the same time


  • Fixed assigning default values to an array of strings in a function generating an error if the number of values didn't match the array size exactly


  • Updated Mac projects to use libc++, any Tier 2 projects will need to update their setings accordingly


  • Fixed spelling mistake in GetSocketListnerConnection command name, this is a breaking change and will need to be corrected in existing apps
  • Fixed network client disconnect not being forwarded to other clients
  • Added SetNetworkAllowClients to restart client listening after calling SetNetworkNoMoreClients
  • Added KickNetworkClient to kick a network client off the network, only the host can do this


  • Fixed ReplaceString cutting off the end of the string if the replace count limit is met
  • Fixed a memory leak in CountStringTokens and GetStringToken


  • Fixed Ouya Tier 2 template failing to compile


  • Fixed Android GameCenter commands crashing if passed an empty string for the leaderboard name
  • Exported Google Android apps should now be compatible with Android TV
  • Fixed ViewFile and ShareImage failing after the first attempt in exported APKs

Virtual Buttons

  • Fixed virtual button commands reporting the wrong button ID in error messages

Tier 2

  • Fixed Android ShowCaptureScreen in Tier 2 causing an exception
  • Removed old Visual Studio projects, AppGameKit now only supports VS2015
  • Support for Visual Studio 2017 has been delayed, we're awaiting a bug fix from Microsoft to continue support
  • Added a 64-bit template project for Windows using VS2015
  • Added a 64-bit version of the Windows interpreter to the Players folder, it will not be used automatically to maintain backwards compatibility


  • Added support for 64-bit plugins in the 64-bit Windows interpreter, 32-bit plugins can only be used with the 32-bit interpreter
  • Added Example Plugin source code to the installed files on Windows, Mac, and Linux
  • Fixed a memory leak when calling plugin commands


  • Debugging from the AGK IDE will now attempt to use the loopback addres if no other IP addresses could be found


  • Fixed DrawLine on Linux sometimes being off by one
  • Fixed GetResumed and GetPaused not working on Linux
  • Linux apps should no longer exit when a socket disconnects

GameDev News

19. July 2017

The following tweet, sparked off a bit of an interesting conversation about game development, game engines, game journalism and it’s affect on end users.


I understand the perspective Adrian takes and I agree and disagree with him all at once.

First off, the part I agree with.   The end users should not be prejudging, or in this case, outright dismissing games based of the engine they are developed in.  This is like dismissing a film because of the way it was filmed.

However, that same analogy holds true.  Think back to the beginning of the 3D movie craze around the time of Avatar and all the CRAP films that were made because of this focus on 3D.  Dismissing a film because there was a 3D version available was a dumb thing to do... but being wary of it it certainly wasn’t.

This is where I stand on the subject, from a developers perspective.  When it comes to 2D games, I think this is pretty much a moot point.  The game engine is really quite transparent on 2D titles and really it’s the art that sets the tone.  With 3D however, it’s not so simple.  3D game engines certainly put their fingerprint on the games they create and game developers should be very aware of those fingerprints. 

There are two ways a game engine influences the underlying game, design and results.  Let’s quickly talk about both.

Design is when the structure of a game engine influences the structure of the underlying game.  For example Unity by default has a very level oriented work flow, while CryEngine has a very landscape/terrain focused design and both it and Unreal Engine are very 1st/3rd person oriented in their design.  In all cases this can be overcome...  Mortal Kombat is an Unreal Engine game, Cities: SkyLines was made using Unity and Star Citizen was made using CryEngine (now Lumberyard).  In every case though, this took a great deal of effort and wrangling an engine into doing what the engine didn’t want to do.  I remember a great deal of complaints among early Kickstarted CRPG games (like Wastelands 2) about the game engine negatively influencing the end game.

Where it is increasing noticeable though, its in the results (AKA graphics) and this is for a couple of different reasons.  First, when you are dealing with a 3D game, there is a great deal more computation going on behind the scenes than in a 2D title.  You have a 3D renderer, materials system, lighting system, physics system etc.  All of these things are complex and will come with defaults to make a developers life easier.  Thing is, every single time people go with the defaults, it’s a finger print left by the game engine on a game.  You will often see comments like “Unity games are ugly”, where in reality the end user is picking up on the default renderer, lighting, etc.  The other tell tale sign of a game engine is using assets from it’s collective asset store.  An asset store is a potential boon to developers, especially ones with limited resources.  On the other hand, hearing the same jingling, seeing the same model or texture, etc... will rapidly lead users to find the games feeling very “same-y”.  You would be amazed what our subconscious mind picks up, there is a reason we have Deja vu so often, and no... nothing was changed in the Matrix.

Another reason why end users might wish to be aware of what game engines a game was written in comes down to hardware.  Some engines simply run poorly on some hardware or have higher system requirements, etc.  For example, all CryEngine powered games could be customized and tweaked using the same process and could be expected to run similarly.  This is a very valid reason for consumers to be aware of what engine a game was written in.

Finally, some readers, even less technically inclined readers may in fact want a peek behind the curtain.  I certainly know I eat this kind of stuff up.

So, should journalists stop talking about what game engine a certain game is made with?  Certainly not.  Don’t focus on it, or condemn because of engine used, but discuss it?  For sure!

At the same time any gamer that’s dismissing games outright due to the engine they are created with are doing themselves and the games in question a massive disservice.  Finally, I don’t think game developers should be overly concerned which game engine they go with, so long as it fits their need.  They should however be very aware that these game engines do put their fingerprints all over their games if they aren’t careful!


17. July 2017

Even with the release of the newly branded Unity 2017 series, the previous 5.6.x branch is still being maintained.  Today Unity released patch 5.6.2p3.  Other than some changes to logos to match new branding, this patch consists entirely of fixes, including:

  • Editor: Updated Unity logos in About Window and Update Window to match new branding.
  • (917931) - 2D: Fixed an issue where adjusting Collider2D's Offset when Using Tiled Draw Mode and Auto Tiling would result in inconsistent behaviour.
  • (918524) - 2D: Fixed an issue where the Editor becomes unresponsive when switching from OpenGL to Metal with a tiled sprite in the scene.
  • (920360) - Android: Buildpipe - correctly split resources between APK and OBB when building with LZ4.
  • (924523) - Android: Gradle - Removed debuggable from Manifest when creating APK.
  • (924519 Android: Gradle - Make sure unity3d and other files from raw/ are uncompressed in the APK.
  • (none) - Android: Gradle - Handle too many errors; filter out warnings and detect too long error list.
  • (924517) - Android: Gradle - don't explicitly set debuggable attribute when building with Gradle to avoid lint security warning.
  • (924516) - Android: Fixed the NamePhonePad flag.
  • (922898) - Android: Moved GoogleVR initialisation to run on UI Thread thus fixing startup crash.
  • (887824) - Android: Gradle - Support custom library build.gradle files.
  • (918606) - Android: Fixed an issue with enabling Split Application Binary flag in Android player settings would affect other platforms.
  • (919308) - Android: Fixed an issue with alpha texture size in ETC1 texture compression with split alpha.
  • (925444) - Animation: Fixed layer root motion broken on standalone.
  • (914365) - Animation: Fixed a crash in PlayableTraverser::RootByType that was triggered when disabling a GameObject by using OnStateMachineExit.
  • (901588) - Editor: Restored SRGB write state after internal override.
  • (915524) - Editor: Fixed the case of "Generate Lighting" drop down menu being hidden when inspector was resized to minimal width.
  • (none) - GI Progressive Lightmapper: Fixed a crash in light probe rendering occurring when changing or removing probes.
  • (912603) - Graphics: Fixed sRGB flag returning false on the LDR target texture from a HDR to LDR image effect in a linear project.
  • (923842) - Graphics: Fixed an issue where overlapping cameras drawing to the same target would not composite correctly
  • (913828) - Graphics: Fixed an issue where a ComputeBuffer applied to a Material Block doesn't take effect when drawing via DrawMesh*Indirect.
  • (918788) - Graphics: Fixed a rare crash/hang which, could happen in very complex scenes, when graphics jobs were enabled.
  • (912723) - Graphics: Fixed a crash triggered by setting the SkinnedMeshRenderer.updateWhenOffscreen flag to true via a script.
  • (923517) - IL2CPP: Fixed an issue with setting enum type fields in .NET 4x with relfection using an integer value.
  • (894273) - iOS: Fixed an issue where iOS screen info was retrieved for every request instead of being cached
  • (880426) - Linux: Added an additional fix for uninitialized screen dimensions(/mouse input) at startup with some window managers.
  • (924516) - UI: For Name content type, use NamePhonePad touch screen keyboard type.

The patch is available for download for Windows and Mac OS here.

GameDev News

Month List

Popular Comments