Navigation

Phaser World Issue 173

Published on 29th March 2024

Here is what the team has been up to this week:

Arian: Greetings! This week we got our hands on the source code of the online editor. We developed a new plugin to access local files. This way you can use the editor from our Phaser.io website while editing projects that you have on your system. This will allow you to use other local tools such as web bundlers and Git. This is possible thanks to Google Chrome's File System Access API.

We are also working on some editor issues that you have reported in the editor repository. In addition to GitHub, you can contact us through the #phaser-editor channel on the Phaser Discord. Happy weekend!


Robert: ¡Felices Pascuas!

Time has been flying and its almost April, with so many amazing things on the Phaser roadmap! The current ES6 process has been particularly tedious, verifying comments and functionality while trying to strip out as little as possible. This pruning is aimed at enhancing the code’s efficiency and maintainability without compromising functionality. To make things work exporting was not named, functioning like how it did, and I am looking at how many internal functions could be exposed. None the less the holiday ahead is a welcomed break, enjoy!


Francisco: Happy Easter.

This week we have released a template with Next.js, which is a long-awaited template that will bring joy to those using Next.js with Phaser.

We have also continued working on the Phaser Template Installer, which is a command-line-based tool that allows the installation of the multiple templates we have been developing. I'm happy to announce that we now have the first version of this tool ready for release soon, and I'm attaching a screenshot:

img2


Can: Happy Easter, everyone!

This week was all about working on Discord template and the tutorial. We are really proud to have this kickstarter project for those attending to Discord App Pitches and after!

Hope you all find it useful. If you have any feedback, requests, questions that we can do better, shoot it away!

Can't wait too see what you all are coming up with!

img3


Rich: Hey everyone. As you can imagine, since we formed Phaser Studio, my weeks are much less about coding and more about planning and meetings. This week, I've been interviewing for a CEO for Phaser Studio, which is pretty exciting - and honestly, is as much about him interviewing me as me interviewing him! Someone asked me the other day why I'm not the CEO. The reason is that's a very specific role. Part of it is product development - which I will always be deeply involved in. But the other side is helping manage the team, finding opportunities, talking to customers, investors and partners, and generally looking after things on a day-to-day basis. You know, the kind of stuff a proper grown-up company should be doing. And that's not what I enjoy. I'm a coder at heart, and I love nothing more than sitting down and writing code or helping others. So, CTO is the perfect role for me. I get to do what I love, and someone else gets to do what they love. And who knows, maybe I'll get more time to code again? :)

We're currently hiring a front-end developer. This is a short-term contract ideally suited to a freelancer. The role will help us clear some of our backlog and get new parts of our site over the finish line. If you're interested in the role, please get in touch. For the right person, it could lead to a longer-term position, too.

We've released some great things this week! The Phaser + Next.js Project Template, the Phaser Discord Game Template, and we've also finished a brilliant new 'create game' CLI tool, which will be out early next week. This is a really exciting tool that will help you scaffold out new Phaser projects in seconds.

I think the ability to run Phaser games on Discord could be huge. It's such a popular platform, and the ability to embed games directly into it is a game-changer, opening up a whole new platform for developers. It's still very much tied into their Voice Channel-based activities, but I hope it expands to the main chat channels soon. It would be really handy for us to add a bot to our Phaser Discord that can launch a code editor, pre-populated with code, right there in the Discord app when someone needs help with code - even better if you could both pair-program on it in real-time! That would be amazing, and genuinely useful, but it needs to happen without being tied to Voice activities to properly fit into the flow.

I've also managed to get some coding in this week :) I can't quite say what it's for just yet, but suffice it to say it's an exciting new area for Phaser. When we're ready, I'll open it up for a limited beta test and announce it here. It's going to be a lot of fun.

I hope you all have a great weekend and a great Easter if you celebrate it. Things will be a little quieter next week as it's a short week for us, but I'll still be around. Take care, and happy coding!


A Week in the Pixel Mines

Ben: Tales from the Pixel Mines - 2024.03.28

Last week, you got an unfiltered stream of consciousness. This week we've dialled it back a bit, but I'm still hard at work on the new rendering system.

I started by developing a new data class, which puts all the constant information about shader attributes and uniforms in one place. This allows us to compute every value for a shader's inputs, and set uniforms and attributes quickly and accurately. A sample entry might be:

img1

So when we get an attribute or uniform that says it's an INT_VEC2, we know how many terms are in it, how many bytes each term uses, how to set it as a uniform, what type an attribute binding should be, etc. This greatly simplifies and centralises the logic around setting uniforms and attributes. (Or not setting them; this work is all about figuring out how to avoid unnecessary steps.)

After that, I've knuckled down and designed a new way of processing rendering. It sounds like a huge overhaul, but in reality it's just standardising what we're already doing. A core principle here is: Make it impossible to represent invalid state in the system. So I've been designing functions for rendering, with parameters that coincidentally require us to define everything in such a way that we can't mess up the WebGL state.

The core of this is three abstractions, which make it easy to think about the rendering process:

▪ Render Steps, which assemble all the data necessary to draw, including running other render steps.

▪ Contexts, which are like a whole easel ready to paint on. Not just a framebuffer, but viewport, stencil, etc.

▪ Draw, a renderer function which takes a context, shader program, and data, and does all the WebGL work at once. No chance to mess up external state!

And when that's implemented, we'll be able to add mask FX, as we've intended all along.