Lazer, Minecraft and 2016

Published on 8th December 2015

I'm very pleased to announce that due to some extremely good sales over the Black Friday period, along with some awesome new patrons, that I can afford to focus entirely on Phaser / Lazer related work for the next 3 months. After this point I'll need to supplement income with client work again, but it's still a great way to kick off 2016 :) (and who knows, maybe we'll have some more patrons by then too!)

Lazer News

After weeks of deliberation we've settled on Lazer as the new name for Phaser 3. There were several reasons for wanting a new name. The first was to avoid any potential trademark issues with CBS, the Star Trek brand holders. They own the word 'phaser' across all trademark categories that matter to us. This was a precautionary measure, no legal threat had been sent, but with the new series of Star Trek announced it just made sense.

More importantly Lazer is so fundamentally different from Phaser that my hope is it will avoid lots of confusion and support requests upon release. We've secured the domains (lazerjs.io and lazerjs.com), the npm package, twitter account and trademark application. Both Lazer and LazerJS will be valid names for the new framework, but mostly we'll just cal it 'lazer'.

Lazer Development

I've been hard at work on Lazer, as can be seen in the github repo. Being fully coded in ES6 has been a slight learning curve. More than this however I wanted the entire structure of Lazer to reflect the way I feel a modern game framework should be: i.e. as modular and functional as possible.

It's a topic for a longer post but I still wanted to explain the approach I'm taking: Phaser is massively coupled. I don't think there is a single sub-system that doesn't rely on a function from another. It's a result of how it grew so organically, and to be honest is how most other frameworks structure themselves. But I've come to learn and appreciate that when it comes to the web that is really the last thing you want. Under Lazer in nearly all cases a single js file contains just one function. And the functions are as independent as they can be. I'm using as few actual Classes as possible. Instead functions expect to receive correctly formatted Objects, which they then work upon and return a result from. It doesn't matter where these Objects came from, or what other properties they have, as long as they adhere to the expect schema the function requires.

This approach has a few important benefits: First of all it means the functions are significantly easier to test in isolation and to build test cases for. Secondly they're easier for you to replace should the function need to do things a little differently. Rather than swap out an entire class you can just swap a single function. It also means that generic functions can be used from multiple places, imported as required. Equally you can call them directly from your game code as well - rather than spin up a whole instance of a Class just to get to one part of it, you can literally import just that part and use it.

This approach is nothing new, in computer science terms it's been known as 'separation of concerns' (SoC) for years. I guess npm is a good modern equivalent. The difference being that everything you need is in the one repo, so you won't have literally thousands of dependencies to worry about.

Someone asked me on twitter why Lazer has more than one renderer. It's a perfectly valid question and the answer relates back to what I'm trying to achieve here: to get rid of the "one size fits all" mentality, and replace it with options. As the developer you get to make the choices. You should have have to rely on what the framework insists you use.

By adhering to SoC and embracing ES6 I honestly feel it's allowing me to write some of the most compact and tidy code I've ever committed to screen. And not only that, it's the most flexible as well. I like to think that Lazer will become the world's biggest collection of web game building lego bricks out there. We will always offer a pre-built 'lazer.js' file, which will be our recommendation of which bricks go well together and covers the most common use-cases - but for everyone else those bricks are all there, ready to be played with and put together exactly how you need them.

Phaser Development

Because I've been focused on Lazer it means I haven't been updating Phaser. It's hard for me to switch between the two of them as it de-rails my focus. To combat this I'm going to schedule in 'phaser weeks', where I'll dedicate the entire week to working through github issues and PRs. The first of these will kick off in the New Year, allowing for a 2.4.5. release by the end of January.

Minecraft Hour of Code

If you subscribe to Phaser World then you will have read that Phaser is powering the Minecraft Hour of Code - the largest learning event in world history. As you can appreciate this is extremely exciting for me! I was told today that there were 142,000 concurrent kids all learning how to code from this. Twitter is awash with some amazing photos too and tweets from the likes of Bill Gates and Satya Nadella. I know that Phaser only plays a small role in what is a much wider initiative, but damnnnn :)

Interphase 2 Delay

I'm sorry to say that Interphase 2 is going to be delayed. Originally it was slated for a December 11th release date. Which would have been fine had I not gone overboard on writing about building your own WebGL renderer. There was so much to learn and explore, and it's been utterly fascinating doing so - but it has meant I'm quite behind in all other areas of the book. I've put a tentative release date of end of February 2016. Hopefully I will come in earlier than this, but better safe than sorry.

Just to clarify: No-one has been charged yet. Gumroad doesn't charge for pre-orders until the book is actually released. I'm aware that no-one wants a sudden charge to appear on their accounts though, so when the book is 100% complete I'll send an email to all buyers to give them a weeks notice in advance, should they wish to cancel for whatever reason.

Looking to 2016

It's fair to say that 2015 has been an incredible year for Phaser. I'm massively proud of what I've achieved with it - and even more so of the truly amazing things you have all been building! But the web never stops, and it's evolving faster now than it has done in a while. With your continued support we can get Lazer finished and released, and take advantage of all the cool new things that are going on in the browser space. I'm extremely excited about what 2016 will bring.

Thank you to everyone who has supported me, in whatever capacity. Have a great holiday season and I look forward to writing again in the New Year.

Cheers,

Rich

I'm very pleased to announce that due to some extremely good sales over the Black Friday period, along with some awesome new patrons, that I can afford to focus entirely on Phaser / Lazer related work for the next 3 months. After this point I'll need to supplement income with client work again, but it's still a great way to kick off 2016 :) (and who knows, maybe we'll have some more patrons by then too!)

Lazer News

After weeks of deliberation we've settled on Lazer as the new name for Phaser 3. There were several reasons for wanting a new name. The first was to avoid any potential trademark issues with CBS, the Star Trek brand holders. They own the word 'phaser' across all trademark categories that matter to us. This was a precautionary measure, no legal threat had been sent, but with the new series of Star Trek announced it just made sense.

More importantly Lazer is so fundamentally different from Phaser that my hope is it will avoid lots of confusion and support requests upon release. We've secured the domains (lazerjs.io and lazerjs.com), the npm package, twitter account and trademark application. Both Lazer and LazerJS will be valid names for the new framework, but mostly we'll just cal it 'lazer'.

Lazer Development

I've been hard at work on Lazer, as can be seen in the github repo. Being fully coded in ES6 has been a slight learning curve. More than this however I wanted the entire structure of Lazer to reflect the way I feel a modern game framework should be: i.e. as modular and functional as possible.

It's a topic for a longer post but I still wanted to explain the approach I'm taking: Phaser is massively coupled. I don't think there is a single sub-system that doesn't rely on a function from another. It's a result of how it grew so organically, and to be honest is how most other frameworks structure themselves. But I've come to learn and appreciate that when it comes to the web that is really the last thing you want. Under Lazer in nearly all cases a single js file contains just one function. And the functions are as independent as they can be. I'm using as few actual Classes as possible. Instead functions expect to receive correctly formatted Objects, which they then work upon and return a result from. It doesn't matter where these Objects came from, or what other properties they have, as long as they adhere to the expect schema the function requires.

This approach has a few important benefits: First of all it means the functions are significantly easier to test in isolation and to build test cases for. Secondly they're easier for you to replace should the function need to do things a little differently. Rather than swap out an entire class you can just swap a single function. It also means that generic functions can be used from multiple places, imported as required. Equally you can call them directly from your game code as well - rather than spin up a whole instance of a Class just to get to one part of it, you can literally import just that part and use it.

This approach is nothing new, in computer science terms it's been known as 'separation of concerns' (SoC) for years. I guess npm is a good modern equivalent. The difference being that everything you need is in the one repo, so you won't have literally thousands of dependencies to worry about.

Someone asked me on twitter why Lazer has more than one renderer. It's a perfectly valid question and the answer relates back to what I'm trying to achieve here: to get rid of the "one size fits all" mentality, and replace it with options. As the developer you get to make the choices. You should have have to rely on what the framework insists you use.

By adhering to SoC and embracing ES6 I honestly feel it's allowing me to write some of the most compact and tidy code I've ever committed to screen. And not only that, it's the most flexible as well. I like to think that Lazer will become the world's biggest collection of web game building lego bricks out there. We will always offer a pre-built 'lazer.js' file, which will be our recommendation of which bricks go well together and covers the most common use-cases - but for everyone else those bricks are all there, ready to be played with and put together exactly how you need them.

Phaser Development

Because I've been focused on Lazer it means I haven't been updating Phaser. It's hard for me to switch between the two of them as it de-rails my focus. To combat this I'm going to schedule in 'phaser weeks', where I'll dedicate the entire week to working through github issues and PRs. The first of these will kick off in the New Year, allowing for a 2.4.5. release by the end of January.

Minecraft Hour of Code

If you subscribe to Phaser World then you will have read that Phaser is powering the Minecraft Hour of Code - the largest learning event in world history. As you can appreciate this is extremely exciting for me! I was told today that there were 142,000 concurrent kids all learning how to code from this. Twitter is awash with some amazing photos too and tweets from the likes of Bill Gates and Satya Nadella. I know that Phaser only plays a small role in what is a much wider initiative, but damnnnn :)

Interphase 2 Delay

I'm sorry to say that Interphase 2 is going to be delayed. Originally it was slated for a December 11th release date. Which would have been fine had I not gone overboard on writing about building your own WebGL renderer. There was so much to learn and explore, and it's been utterly fascinating doing so - but it has meant I'm quite behind in all other areas of the book. I've put a tentative release date of end of February 2016. Hopefully I will come in earlier than this, but better safe than sorry.

Just to clarify: No-one has been charged yet. Gumroad doesn't charge for pre-orders until the book is actually released. I'm aware that no-one wants a sudden charge to appear on their accounts though, so when the book is 100% complete I'll send an email to all buyers to give them a weeks notice in advance, should they wish to cancel for whatever reason.

Looking to 2016

It's fair to say that 2015 has been an incredible year for Phaser. I'm massively proud of what I've achieved with it - and even more so of the truly amazing things you have all been building! But the web never stops, and it's evolving faster now than it has done in a while. With your continued support we can get Lazer finished and released, and take advantage of all the cool new things that are going on in the browser space. I'm extremely excited about what 2016 will bring.

Thank you to everyone who has supported me, in whatever capacity. Have a great holiday season and I look forward to writing again in the New Year.

Cheers,

Rich