Planet Gamedev

Gamasutra Feature Articles

Educational game accelerator co.lab is shutting down

May 27, 2016 11:25 PM

After a partnership with Zynga and the NewSchools Venture Fund, co.lab founder Esteban Sosnik announces the accelerator is shutting down. ...

The story behind the cancelled Legacy of Kain game

May 27, 2016 10:39 PM

A dramatic new storyline, inconsistent demands from Square Enix, and struggles with fine-tuning game difficulty seem to be what doomed a sequel to the cult classic Legacy of Kain. ...

Total War: Warhammer becomes fastest-selling Total War game on Steam

May 27, 2016 09:32 PM

The latest Total War game shoots up the Steam sales chart, with a little help from a license from Warhammer. ...

Get a job: Cryptic Studios is hiring a Project Manager

May 27, 2016 08:19 PM

The Star Trek Online dev is currently seeking a Project Manager to work closely with programmers and game producers to organize and coordinate the development of the Cryptic game engine.  ...

PC makers are chasing the VR wave with high-end backpack PCs

May 27, 2016 08:06 PM

Virtual reality is a hot topic this year, and PC hardware manufacturers like HP and MSI are hoping to catch a bit of that heat by producing high-end PCs you can wear as a backpack. ...

Preserving the dream of the '90s Virtuality VR game tech

May 27, 2016 07:32 PM

Kotaku UK finds a VR preservationist at a U.K. games festival and shares his story of studying and maintaining some of the earliest VR game machines, including the magnet-based Virtuality 1000. ...

Unity and Unreal devs can now access WorldViz's 'warehouse-scale' VR tech

May 27, 2016 06:45 PM

WorldViz has what it calls a 50 x 50 meter motion tracking system for VR, and next month that tech will be accessible to game developers via new Unreal Engine 4 and Unity 5 plugins. ...

Game From Scratch

Haxe and Heaps Tutorial Series: 2D Animation and SpriteSheets

by Mike@gamefromscratch.com at May 27, 2016 06:35 PM

 

Welcome back to our ongoing tutorial series on using the Heaps framework with the Haxe programming language.  In the first tutorial we covered the configuration and programming a simple game using Heaps.  Then we covered the basics of 2D graphics in the next tutorial.  In this tutorial we are going to look at using 2D animation in Heaps.  We are going to cover three specific ways, first using a sequence of images for each individual frame of animation, second using a single simple spritesheet image and finally we are going to look at using a texture atlas.  All of the images used in this tutorial are available here, while the project files, source, images etc. are all available to Patreon backers.

 

As always there is a HD video version of this tutorial available here and embedded below.

 

First copy the animation frames into the resource folder.  Each is named along the lines of walk01, walk02, walk03, etc like so:

image

 

Now let’s jump into the code.  The process is almost identical to the sprite handling process from the previous tutorial:

import h2d.Anim;
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 {
	
	
	var animation:Anim;
	
	override function init() {
		Res.initEmbed();
		var tiles = new Array<Tile>();
		
		tiles.push(Res.walk01.toTile());
		tiles.push(Res.walk02.toTile());
		tiles.push(Res.walk03.toTile());
		tiles.push(Res.walk04.toTile());
		tiles.push(Res.walk05.toTile());
		tiles.push(Res.walk06.toTile());
		tiles.push(Res.walk07.toTile());
		tiles.push(Res.walk08.toTile());
		tiles.push(Res.walk09.toTile());
		tiles.push(Res.walk10.toTile());
		tiles.push(Res.walk11.toTile());
		tiles.push(Res.walk12.toTile());
		tiles.push(Res.walk13.toTile());
		tiles.push(Res.walk14.toTile());
		tiles.push(Res.walk15.toTile());
		tiles.push(Res.walk16.toTile());
		
		animation = new Anim(tiles, 10, s2d);
	}
	
	override function update(dt:Float) {
	}
	
	static function main() {
		new Main();
	}
	
}

 

Here we populate an array of type Tile with all of the images.  Remember Heaps will automatically make available any resource type with an appropriate loader.  Finally we pass this array to the constructor of Anim.  Anim is a special kind of drawable that contains several tiles that represent individual frames of animation.  Also in the constructor we pass along the frame rate to play the animation at, as well as the parent to play the animation relative to, in this case the default scene, s2d.  When you run this code you should see:

GIF

Pretty simple eh?

 

It’s also quite common to want to group all of your sprites together in a single image.  The following example does exactly that using this evenly spaced spritesheet (click for full sized image).  Just be aware, this code requires the width and height of each tile to be the same size.

animation

 

Now the code:

	override function init() {
		Res.initEmbed();
		
		var tileSrc = Res.animation.toTile();
		var tiles = tileSrc.grid(512);
		
		animation = new Anim(tiles, 10, s2d);
		animation.speed = 5;
	}

 

This code has basically the exact same end result.  Basically we load the entire spritesheet into a single tile, then split it into a number of smaller tiles using the grid() method, passing in the dimension to cut by.  Hopefully in the future this function will be updated to take both a width and a height value, removing the square requirement.  As you can see from this example, you can modify the Anim object after the fact, changing the animation speed, it’s position, rotation, scale etc.

 

One final option is to use an Atlas.  An Atlas is basically another form of spritesheet, but instead of being fixed dimensions, it comes with a text description file that says where each frame of animation within the texture is.  This allows you to more tightly store your images in a single image.  In terms of creating an atlas file, two options are LibGDX’s TexturePacker or CodeAndWeb’s TexturePacker.  Of course you could create the file by hand if you preferred.  Now some more code:

	override function init() {
		Res.initEmbed();

		var frame = Res.animationAtlasv1.get("walk01");
		
		var bmp = new Bitmap(frame, s2d);
		bmp.x = 400;
	}

 

As you can see, there is also a loader for Atlas files, so it’s simply a matter of accessing it via the Res interface.  In this particular example we are retrieving a single frame of animation that we use to populate a Bitmap and display on screen.  The Atlas loader also has the option of return an Anim object if preferred.

 

The Video

Gamasutra Feature Articles

Breaking down the anatomy of a mission in a mobile action game

May 27, 2016 06:13 PM

This is how Sticky Studios created a system that its designers could use to quickly create a wide variety of missions for The Man From U.N.C.L.E. game. ...



Don't Miss: John Romero and Tom Hall recount the making of Doom

May 27, 2016 06:09 PM

In this timeless video postmortem, designers John Romero and Tom Hall share their stories of developing id Software's seminal '90s first-person shooter Doom. ...

Rez's Mizuguchi reflects on his 'unorthodox' route into game dev

May 27, 2016 05:51 PM

"I wanted to make games with the future in mind," writes Tetsuya Mizuguchi in a new Edge feature. "The interviewer said to me: 'You are kind of out there, but we could probably use someone like you.'" ...

Blog: The mistake of chasing the king

May 27, 2016 04:53 PM

When an idea becomes big, you can bet that someone is going to try and make a game similar to cash in. But trying to emulate the king's success often doesn't work out. ...

Geeks3D Forums

Intel HD Graphics Driver 20.19.15.4457

May 27, 2016 04:24 PM

Download now, atm only for HP OEM

DriverVer=05/10/2016,20.19.15.4457
 
no Vulkan support
no obvious changes to OpenGL, at least not those recently discussed at I...

Gamasutra Feature Articles

Come to GDC Europe for tips on coworking with devs to make better games

May 27, 2016 04:19 PM

Heads up, European devs: GDC Europe is just months away, and today conference organizers are pleased to debut an intriguing session on the growing popularity (and power!) of game hubs across Europe. ...

Data shows Miitomo is in decline, suggests downloads alone aren't enough

May 27, 2016 04:05 PM

SurveyMonkey's data tracking arm, SurveyMonkey Intelligence, has taken an in-depth look at the performance of Miitomo one month after the game launched, and it's not exactly good news.  ...

Blog: 5 reasons why you want to quit Clash Royale

May 27, 2016 03:29 PM

"I'm burned out by Clash Royale and it seems that so are the people around me. Where it previously felt strategic and fun, it now feels random and frustrating." ...

Tencent wants to help Stellaris developer Paradox break into China

May 27, 2016 03:28 PM

"As China's game market further develops, players will advance to more sophisticated and complex genres such as grand strategy and simulation games." ...

Game From Scratch

UrhoSharp Release Version 1.0.557

by Mike@gamefromscratch.com at May 27, 2016 03:23 PM

 

UrhoSharp is a fork of the Urho3D game engine to C#, originally created by Xamarin the end of last year.   Originally Xamarin screwed the licensing up but have since addressed that mistake.  This release contains:

Features

  • [Core] Update Urho3D to 90eccb6 (~ it was 450 commits behind) - a lot of cool bugfixes
  • [Core] All Urho methods will throw an exception (instead of native crash) if called after App.Stop
  • [Forms.Core] Update UrhoSharp XForms dependency from 2.1 to the latest 2.2.0.31
  • [iOS] Pause/Resume methods for iOS

Bugfixes

  • [Core] Octree.RayCast is not surfaced
  • [Android] Fixes for Android crashes (thanks to Storyo for help)
  • [iOS][Android] RenderPathCommand doesn't work in iOS and Android
  • [iOS][Android] Variant type doesn't work in non 64bit environment

New samples:

  • FeatureSamples/PBR Materials - it demonstrates loading a scene that showcases physically based materials & shaders

Samples and VS Templates are also updated.

 

The release details were taken from this post.



Spriter R8 Released

by Mike@gamefromscratch.com at May 27, 2016 03:18 PM

 

BrashMonkey just released Spriter Release 8.  Spriter is a 2D boned based animation system, very similar in scope to Spine that we just recently covered.  It enables you to animate 2D images by creating and posing a series of bones, much like armatures in the 3D world.  Release 8 brings a number of new features and bug fixes, including:

Additions and Enhancements

  • Image packing dialog now remembers previous settings
  • Added ability to add padding (transparent pixels surrounding each image) to spritesheets
  • Added ability to embed spritesheet information into the scml or scon file. The embedded information is not loadable by Spriter, but this will allow developers to create implementations that don't require a separate file for texture atlas information.
  • Added the ability to choose whether to save spritesheeted projects as scml or scon
  • Changed 'overwrite default pivot' to also automatically sets the sprite to default pivot point mode in the current frame

Bug Fixes

  • Fixed a bug where right-clicking a pivot point and choosing Set to Default Pivot Point, would only set the pivot point to the default value, but not apply the default pivot point state to the sprite
  • Fixed a bug where you couldn't drop objects outside of the hierarchy in the hierarchy window to remove them from all parent bones
  • Fixed bug where you couldn't edit the pivot point of a spritesheeted image from the file dialog
  • Fixed bug where creating a spritesheeted project from the imagepacking dialog with multiple spritesheets would create a project that would load correctly, but had the incorrect folder structure within the file
  • Fixed a bug where double-clicking a spritesheeted folder in the fileview would open up an empty pivot point editing widget
  • Fixed crash when adding a skin to a project
  • Fixed a bug where right clicking on skin controls would cause the right click menu to pop up. This bug also prevented the uv skin controls from popping up when double right clicking on skin controls

 

The original release announcement is available here.

cbloom rants

PS4 Battle : MiniZ vs Zlib-NG vs ZStd vs Brotli vs Oodle

by cbloom (noreply@blogger.com) at May 27, 2016 04:09 PM

(see charts at the bottom)

Everything run at max compression options, level 99, max dict size. All libs are the latest on github, downloaded today. Zlib-NG has the arch/x86 stuff enabled. PS4 is AMD Jaguar , x64.

I'm going to omit encode speeds on the per-file results for simplicity, these are pretty representative :


aow3_skin_giants.clb :
zlib-ng encode   : 2.699 seconds, 1.65 b/kc, rate= 2.63 mb/s
miniz encode     : 2.950 seconds, 1.51 b/kc, rate= 2.41 mb/s
zstd encode      : 5.464 seconds, 0.82 b/kc, rate= 1.30 mb/s
brotli-9  encode    : 23.110 seconds, 0.19 b/kc, rate= 307.44 kb/s
brotli-10 encode    : 68.072 seconds, 0.07 b/kc, rate= 104.38 kb/s
brotli-11 encode    : 79.844 seconds, 0.06 b/kc, rate= 88.99 kb/s

Results :

PS4 clang-3.5.0

-------------

lzt99 :

MiniZ : 24,700,820 ->13,120,668 =  4.249 bpb =  1.883 to 1
miniz_decompress_time : 0.292 seconds, 53.15 b/kc, rate= 84.71 mb/s

zlib-ng : 24,700,820 ->13,158,385 =  4.262 bpb =  1.877 to 1
miniz_decompress_time : 0.226 seconds, 68.58 b/kc, rate= 109.30 mb/s

ZStd : 24,700,820 ->10,403,228 =  3.369 bpb =  2.374 to 1
zstd_decompress_time : 0.184 seconds, 84.12 b/kc, rate= 134.07 mb/s

Brotli-9 : 24,700,820 ->10,473,560 =  3.392 bpb =  2.358 to 1
brotli_decompress_time : 0.259 seconds, 59.83 b/kc, rate= 95.36 mb/s

Brotli-10 : 24,700,820 -> 9,949,740 =  3.222 bpb =  2.483 to 1
brotli_decompress_time : 0.319 seconds, 48.54 b/kc, rate= 77.36 mb/s

Brotli-11 : 24,700,820 -> 9,833,023 =  3.185 bpb =  2.512 to 1
brotli_decompress_time : 0.317 seconds, 48.84 b/kc, rate= 77.84 mb/s

Oodle Kraken -zl4 : 24,700,820 ->10,326,584 =  3.345 bpb =  2.392 to 1
encode only      : 4.139 seconds, 3.74 b/kc, rate= 5.97 mb/s
decode only      : 0.073 seconds, 211.30 b/kc, rate= 336.76 mb/s

Oodle Kraken -zl6 : 24,700,820 ->10,011,486 =  3.242 bpb =  2.467 to 1
decode           : 0.074 seconds, 208.83 b/kc, rate= 332.82 mb/s

Oodle Kraken -zl7 : 24,700,820 -> 9,773,112 =  3.165 bpb =  2.527 to 1
decode           : 0.079 seconds, 196.70 b/kc, rate= 313.49 mb/s

Oodle LZNA : lzt99 : 24,700,820 -> 9,068,880 =  2.937 bpb =  2.724 to 1
decode           : 0.643 seconds, 24.12 b/kc, rate= 38.44 mb/s

-------------

normals.bc1 :

miniz :   524,316 ->   291,697 =  4.451 bpb =  1.797 to 1
miniz_decompress_time : 0.008 seconds, 39.86 b/kc, rate= 63.53 mb/s

zlib-ng :   524,316 ->   292,541 =  4.464 bpb =  1.792 to 1
zlib_ng_decompress_time : 0.007 seconds, 47.32 b/kc, rate= 75.41 mb/s

zstd :   524,316 ->   273,642 =  4.175 bpb =  1.916 to 1
zstd_decompress_time : 0.007 seconds, 49.64 b/kc, rate= 79.13 mb/s

brotli-9 :   524,316 ->   289,778 =  4.421 bpb =  1.809 to 1
brotli_decompress_time : 0.010 seconds, 31.70 b/kc, rate= 50.52 mb/s

brotli-10 :   524,316 ->   259,772 =  3.964 bpb =  2.018 to 1
brotli_decompress_time : 0.011 seconds, 28.65 b/kc, rate= 45.66 mb/s

brotli-11 :   524,316 ->   253,625 =  3.870 bpb =  2.067 to 1
brotli_decompress_time : 0.011 seconds, 29.74 b/kc, rate= 47.41 mb/s

Oodle Kraken -zl6 :    524,316 ->   247,217 =  3.772 bpb =  2.121 to 1
decode           : 0.002 seconds, 135.52 b/kc, rate= 215.95 mb/s

Oodle Kraken -zl7 :    524,316 ->   238,844 =  3.644 bpb =  2.195 to 1
decode           : 0.003 seconds, 123.96 b/kc, rate= 197.56 mb/s

Oodle BitKnit :    524,316 ->   225,884 =  3.447 bpb =  2.321 to 1
decode only      : 0.010 seconds, 31.67 b/kc, rate= 50.47 mb/s

-------------

lightmap.bc3 :

miniz :  4,194,332 ->   590,448 =  1.126 bpb =  7.104 to 1 
miniz_decompress_time : 0.025 seconds, 105.14 b/kc, rate= 167.57 mb/s

zlib-ng : 4,194,332 ->   584,107 =  1.114 bpb =  7.181 to 1
zlib_ng_decompress_time : 0.019 seconds, 137.77 b/kc, rate= 219.56 mb/s

zstd :  4,194,332 ->   417,672 =  0.797 bpb = 10.042 to 1 
zstd_decompress_time : 0.014 seconds, 182.53 b/kc, rate= 290.91 mb/s

brotli-9 : 4,194,332 ->   499,120 =  0.952 bpb =  8.403 to 1 
brotli_decompress_time : 0.022 seconds, 118.64 b/kc, rate= 189.09 mb/s

brotli-10 : 4,194,332 ->   409,907 =  0.782 bpb = 10.232 to 1 
brotli_decompress_time : 0.021 seconds, 125.20 b/kc, rate= 199.54 mb/s

brotli-11 : 4,194,332 ->   391,576 =  0.747 bpb = 10.711 to 1 
brotli_decompress_time : 0.021 seconds, 127.12 b/kc, rate= 202.61 mb/s

Oodle Kraken -zl6 :   4,194,332 ->   428,737 =  0.818 bpb =  9.783 to 1 
decode           : 0.009 seconds, 308.45 b/kc, rate= 491.60 mb/s

Oodle BitKnit :   4,194,332 ->   416,208 =  0.794 bpb = 10.077 to 1
decode only      : 0.021 seconds, 122.59 b/kc, rate= 195.39 mb/s

Oodle LZNA :  4,194,332 ->   356,313 =  0.680 bpb = 11.771 to 1 
decode           : 0.033 seconds, 79.51 b/kc, rate= 126.71 mb/s

----------------

aow3_skin_giants.clb

Miniz : 7,105,158 -> 3,231,469 =  3.638 bpb =  2.199 to 1
miniz_decompress_time : 0.070 seconds, 63.80 b/kc, rate= 101.69 mb/s

zlib-ng : 7,105,158 -> 3,220,291 =  3.626 bpb =  2.206 to 1
zlib_ng_decompress_time : 0.056 seconds, 80.14 b/kc, rate= 127.71 mb/s

Zstd : 7,105,158 -> 2,700,034 =  3.040 bpb =  2.632 to 1
zstd_decompress_time : 0.050 seconds, 88.69 b/kc, rate= 141.35 mb/s

brotli-9 :  7,105,158 -> 2,671,237 =  3.008 bpb =  2.660 to 1
brotli_decompress_time : 0.080 seconds, 55.84 b/kc, rate= 89.00 mb/s

brotli-10 : 7,105,158 -> 2,518,315 =  2.835 bpb =  2.821 to 1
brotli_decompress_time : 0.098 seconds, 45.54 b/kc, rate= 72.58 mb/s

brotli-11 : 7,105,158 -> 2,482,511 =  2.795 bpb =  2.862 to 1
brotli_decompress_time : 0.097 seconds, 45.84 b/kc, rate= 73.05 mb/s

Oodle Kraken -zl6 : aow3_skin_giants.clb :  7,105,158 -> 2,638,490 =  2.971 bpb =  2.693 to 1
decode           : 0.023 seconds, 195.25 b/kc, rate= 311.19 mb/s

Oodle BitKnit : 7,105,158 -> 2,623,466 =  2.954 bpb =  2.708 to 1
decode only      : 0.095 seconds, 47.11 b/kc, rate= 75.08 mb/s

Oodle LZNA : aow3_skin_giants.clb :  7,105,158 -> 2,394,871 =  2.696 bpb =  2.967 to 1
decode           : 0.170 seconds, 26.26 b/kc, rate= 41.85 mb/s

--------------------

silesia_mozilla

MiniZ : 51,220,480 ->19,141,389 =  2.990 bpb =  2.676 to 1
miniz_decompress_time : 0.571 seconds, 56.24 b/kc, rate= 89.63 mb/s

zlib-ng : 51,220,480 ->19,242,520 =  3.005 bpb =  2.662 to 1
zlib_ng_decompress_time : 0.457 seconds, 70.31 b/kc, rate= 112.05 mb/s

zstd : malloc failed

brotli-9 : 51,220,480 ->15,829,463 =  2.472 bpb =  3.236 to 1
brotli_decompress_time : 0.516 seconds, 62.27 b/kc, rate= 99.24 mb/s

brotli-10 : 51,220,480 ->14,434,253 =  2.254 bpb =  3.549 to 1
brotli_decompress_time : 0.618 seconds, 52.00 b/kc, rate= 82.88 mb/s

brotli-11 : 51,220,480 ->14,225,511 =  2.222 bpb =  3.601 to 1
brotli_decompress_time : 0.610 seconds, 52.72 b/kc, rate= 84.02 mb/s

Oodle Kraken -zl6 : 51,220,480 ->14,330,298 =  2.238 bpb =  3.574 to 1
decode           : 0.200 seconds, 160.51 b/kc, rate= 255.82 mb/s

Oodle Kraken -zl7 : 51,220,480 ->14,222,802 =  2.221 bpb =  3.601 to 1
decode           : 0.201 seconds, 160.04 b/kc, rate= 255.07 mb/s

Oodle LZNA : silesia_mozilla : 51,220,480 ->13,294,622 =  2.076 bpb =  3.853 to 1
decode           : 1.022 seconds, 31.44 b/kc, rate= 50.11 mb/s

I tossed in tests of BitKnit & LZNA in some cases after I realized that the Brotli decode speeds are more comparable to BitKnit than Kraken, and even LZNA isn't that far off (usually less than a factor of 2). eg. you could do half your files in LZNA and half in Kraken and that would be about the same total time as doing them all in Brotli.


Here are charts of the above data :

(silesia_mozilla omitted due to lack of zstd results)

(I'm trying an experiment and showing inverted scales, which are more proportional to what you care about. I'm showing seconds per gigabyte, and percent out of output size, which are proportional to *time* not speed, and *size* not ratio. So, lower is better.)

log-log speed & ratio :

Time and size are just way better scales. Looking at "speed" and "ratio" can be very misleading, because big differences in speed at the high end (eg. 2000 mb/s vs 2200 mb/s) don't translate into a very big time difference, and *time* is what you care about. On the other hand, small differences in speed at the low end *are* important - (eg. 30 mb/s vs 40 mb/s) because those mean a big difference in time.

I've been doing mostly "speed" and "ratio" because it reads better to the novice (higher is better! I want the one with the biggest bar!), but it's so misleading that I think going to time & size is worth it.

Geeks3D Forums

MSI Afterburner 4.3.0 Beta 3

May 27, 2016 01:33 PM

Revision history - Version 4.3.0 Beta 3
 

  • Added GPU Boost 3.0 technology support for NVIDIA Pascal graphics cards:
    • Added percent ...



OpenGL Extensions Viewer 1.4.1 for Android

May 27, 2016 01:06 PM

OpenGL Extensions Viewer for Android displays the vendor name, the version, the renderer name and the extensions for OpenGL ES 1.0 to ES 3.1

New in this update

- Display scr...