Ejecta 1.3

Version 1.3 marks a huge update for Ejecta with many new features and countless bugfixes: In App Purchas API, WebGL, WebSockets, several new events and much more.

With support for Gradients and Patterns, this release also almost completes the Canvas2D API. See the changelog below for all the details.

Thanks to everyone who contributed and reported bugs!

As always, the newest release can be found on the Ejecta project page.


  • Added WebGL support (for an example with three.js see the readme)
  • Added API for In App Purchases
  • Added support for WebSockets
  • Added deviceMotion events
  • Added pagehide, pageshow and resize events
  • Added support for Patterns and Gradients
  • Added getImageDataHD/putImageDataHD
  • Added .style property for Canvas elements, removed old .scaleMode property
  • Added basic support for Video elements
  • Added support for hsl/hsla colors and 140 HTML color names
  • Added CommonJS style require; ejecta.require() has been depracted, use ejecta.include() instead.
  • Support for TypedArrays added in JavaScriptCore
  • Moved Canvas2D to OpenGL ES 2
  • Greatly improved image load times
  • Changed all 2D Canvases to use a backingStoreRatio of 2 by default
  • Simplified the whole file structure of the project
  • Fixed problems when drawing canvases onto themselfs
  • Fixed various issues with drawText()
  • Fixed various issues with path drawing
  • Fixed various multitouch issues
  • Fixed various memory problems
Wednesday, May 29th 2013 / Tags: Releases, Ejecta

Games Showcase

The Impact website now has a new Games List where users can showcase their own games made with Impact. Right now it looks a bit empty, but I'm sure it will fill up soon.

You can add your game by creating a thread in the Games Forum. If you already have a thread for your game, you will find a "Edit Game Info" link at the top of your thread, where you can upload a screenshot and set the URL.

Monday, April 8th 2013 / Tags: Games

Impact 1.22

Impact 1.22 fixes a number of issues with Internet Explorer on Windows8/RT and Windows Phone. Font loading should now be more robust in recent Ejecta versions as well.

As always, if you're updating from a previous version, take care to not overwrite your own files. You'll just need to update the files in lib/impact/ and lib/weltmeister/. Grab the new version from your download page.

Changelog - Impact

  • Fixed problems with small pre-rendered BackgroundMaps
  • Fixed Font loading issues with Internet Explorer and Ejecta
  • Fixed WinPhone not recognized as platform
  • Added ImpactMixin for easier integration with different environments (e.g. NodeJS)
  • Added generic and for User Agent Sniffing.
  • Added support for MSPointer events - this makes ig.input.mouse work on Windows based touch devices

Changelog - Weltmeister

  • Fixed focus problem after using menu buttons (thanks boomshanka)
  • Fixed ig.lib being ignored when loading entities
  • Modified the default collision tileset graphic to better indicate unused (yet solid) tiles
Sunday, March 31st 2013 / Tags: Releases

Impact 1.21

Impact 1.21 is a bugfix release that deals with a number of small problems and a quite big one.

Apple recently released a new version of their Safari Browser for Retina MacBooks that breaks many Impact games and produces garbled fonts and blurry scaled up versions of games. I wrote a bit more about this whole ordeal over at PhobosLab.

Impact 1.21 carefully works around these issues. If you want your games to run on Retina MacBooks in Safari, you should update.

As always, if you're updating from a previous version, take care to not overwrite your own files. You'll just need to update the files in lib/impact/ and lib/weltmeister/. Grab the new version from your download page.

Changelog - Impact

  • Fixed issue with ig.Timer pause() not working on the very first frame
  • Fixed ig.Input to ignore keys on Input and Textarea elements
  • Fixed Function bind() to be ECMA-262 compliant
  • Fixed scaling issues for images and fonts with Retina MacBooks
  • Fixed ig.input.mouse.x/y to take the CSS scaling into account
  • Fixed ig.Sound to disable sound completely if HTML5 Audio is not supported (Safari/Win)
  • Fixed ig.Animation rewind() method not returning to the first frame after gotoFrame() was called
  • Fixed constructor assignment in ig.Class
  • Fixed debug.css to honor the ig.prefix value
  • Fixed issues with preRendered repeating BackgroundMaps when screen coordinates are negative
  • Fixed an issue for one-way collision tiles, where an entity may move through the tile

Changelog - Weltmeister

  • Fixed Entity selection to allow for overlapping Entities (thanks alexandre)
Tuesday, December 4th 2012 / Tags: Releases

Ejecta 1.2

The Ejecta github project is still full steam ahead. This 1.2 release again brings a whole bunch of bugfixes, moves the Canvas implementation closer to the spec and adds some missing features. Notably, this release brings support for ctx.clip() for the Canvas element. The only missing Canvas features are now gradients, shadows and patterns.

Thanks again to everyone who contributed and reported bugs!

Grab the latest release version from the Ejecta project page.


  • Added support for ctx.clip()
  • Added support for XMLHttpRequest to access local files
  • Added support for auto-loading of @2x textures
  • Added navigator.onLine to check for internet connectivity
  • Added ejecta.getText() for prompt-style text input
  • Added Image.complete boolean flag
  • Fixed various bugs in XMLHttpRequest
  • Fixed various line drawing bugs with closed/unclosed paths
  • Fixed problems with ctx.transform() and ctx.arcTo()
  • Fixed ctx.fill() to use non-zero winding rule instead of even-odd rule
  • Fixed problems with unicode chars when drawing text
  • Fixed problems with ctx.imageSmoothingEnabled not beeing honored for different Canvas elements
  • Fixed failed Image loading when the Screen Canvas context was not created prior
  • Fixed touch event not reporting .touches and .changedTouches correctly

Also check out the awesome EjectaGL project by @vikerman - he made some good progress on getting WebGL support into Ejecta. We're looking into bringing this over to Ejecta proper for some future release.

Wednesday, November 28th 2012 / Tags: Releases, Ejecta

Ejecta 1.1

The Ejecta github project has been very busy in the last few weeks. We fixed a whole bunch of issues, made the project much more stable and added a good deal of new features.

A huge thanks goes to Tharit who fixed a lot of issues with vector functions and implemented the excellent and fast font rendering routines. Also thanks to anyone else who contributed to the project and reported bugs.

Grab the latest release version from the Ejecta project page.


  • Added the XMLHttpRequest API
  • Added font fillText(), strokeText(), textAlign and textBaseline
  • Added round and proper bevel line joins
  • Added destination-out, destination-over, source-atop and xor blend modes
  • Added softAuthenticate() for the GameCenter API
  • Added reportAchievementAdd() for the GameCenter API
  • Added support for fullscreen antialiasing (MSAA)
  • Fixed orientation issues
  • Fixed various line drawing issues
  • Fixed various touch event problems
  • Fixed various problems with getImageData()
Thursday, October 18th 2012 / Tags: Releases, Ejecta


Today, I'm releasing Ejecta – a fast JavaScript, Canvas & Audio implementation for iOS – under the MIT Open Source license.

Ejecta has been formerly known as iOSImpact. It still shares the same idea and some basic code with iOSImpact, but is otherwise a significant rewrite of it.

The whole Canvas implementation has been re-implemented from scratch and is now much faster, more robust and closer to the HTML5 spec. It also supports the vector drawing functions, such as lineTo(), bezierCurveTo(), fill() and stroke() as well as getImageData() and many others.

iOSImpact used a lot of Impact specific hacks and you needed a special set of plugins to make Impact work with it. This is no longer the case – Impact games now work without any modifications or plugins in Ejecta.

Ejecta has become much more generally usable. It's not only a tool to get Impact games running on iOS, but can also be used for many other Canvas animations and games.

Because Ejecta is no longer focused on Impact only, I decided to release it as Open Source to see what the community comes up with. I'm also hoping that the community will help out to fill the last gaps in the Canvas implementation and also provide some more functionality such as in-app purchases or WebSocket support.

Visit the Ejecta page for more info. If you're upgrading from iOSImpact, be sure to read the Integrating Impact Games article.

I also wrote a bit about some implementation details in my blog.

Wednesday, September 26th 2012 / Tags: Releases, iOS, Ejecta

Impact 1.20

Version 1.20 of Impact is now available on your download page. This version fixes a ton of issues, adds a lot of small features, improves performance and applies a bit of polish.

One of the features that will make your life easier is the new zoom functionality in Weltmeister. It's bound to the mousewheel by default; check your lib/weltmeister/config.js if you want to bind it to some other keys.

The whole Engine has been put into Strict Mode, which improves performance a bit and also surfaced global var leakage in some places. Try enabling Strict Mode for your own modules as well; it really helps to write saner code.

Impact now uses requestAnimationFrame where available. It won't make the code any faster, but helps the browser to draw frames in sync with the display's refresh rate, making animations much smoother.

As always, if you're updating from a previous version, take care to not overwrite your own files. You'll just need to update the files in lib/impact/, lib/weltmeister/ and the weltmeister.html file.

Changelog - Impact

  • Added alpha, letterSpacing and lineSpacing properties for fonts
  • Fixed widthForString, added heightForString for fonts
  • Added getMapByName() method for the Game
  • Added pause() method for timers
  • Added ig.System.drawMode to specify authentic, smooth or subpixel positioning; removed smoothPositioning property
  • Added ig.prefix to load Impact from any subdirectory
  • Added ig.assert() function for debug module
  • Added ig.debug.showPanel() method
  • Added lastSlope property for collision maps to allow for custom tiles
  • Added use requestAnimationFrame where available
  • Enabled strict mode for the whole framework
  • Fixed collision for one-way tiles
  • Fixed bug where the Game's .sortBy property was overwritten on instantiation
  • Fixed mousewheel support to support all major browsers
  • Fixed ignore killed entities in checks
  • Sorting by POS_Y now takes the entity size into account
  • Fixed module resolution and DOMReady when the page starts in the complete readyState.

Changelog - Weltmeister

  • Added Mousewheel zoom
  • Added _wmIgnore flag for entities
  • Added zIndex support for entities in Weltmeister
  • Auto append .js suffix in level save dialog if missing
  • Fixed variable name for levels if filename contains a dash
  • Fixed function to show currently selected tile in the tile selection menu
  • Fixed requiring entity modules multiple times in level files
  • Fixed sluggishness in Firefox when panning
  • Sanitized lastLevel cookie


Version 0.9.1 of iOSImpact fixes font drawing for multi-line strings and enables compatibility with Impact 1.20. It's still beta ;)

Wednesday, May 23rd 2012 / Tags: Releases