Below is an email interview I conducted with Erik Onarheim. Erik and others are working on an open source game engine named Excalibur.js.
1. Can you tell us a little bit of your background as a developer? When did you start? What was your first language? What is your current language of a choice?
2. Where do you currently work and what is your position?
I’m a senior software developer at Renaissance Learning in Minneapolis; we build educational software that helps kids learn to read. I do a little bit of everything from front-end to server-side, databases, and DevOps. I spend a good amount of time mentoring and reviewing code.
3. Can you tell us about your current open source project, Excalibur.js?
Excalibur is an open source 2D game engine for the web. Our goal is to make it easy for people to make games. We want to make building a game approachable to both the new hobbyist and the professional developer.
Excalibur uses a film/theater metaphor: Actors, move around the screen and perform actions. Scenes are the stages (or levels) for actors to do things within. Last but not least, Cameras are used to view the action.
4. What made you want to begin developing your own game engine? Was the engine the result of building a game or the end objective from the beginning?
I’ve been interested in making video games since I started playing the original Nintendo, which was definitely a contributing factor to my software career and game dev hobby.
Excalibur started as a work presentation advocating for TypeScript. The presentation was meant to showcase the possibilities of TypeScript, so I built a small platformer to demonstrate. I figured that other folks could probably use what I had made, and Excalibur was born! That said, building a game engine is one of those classic developer traps; it’s easy to get stuck working on the engine and never actually make a game. I try to build small games on a regular basis with the team. Ludum Dare (http://ldjam.com/) has been a great way to do that!
5. What were the factors that led you to selecting Typescript for the project?
6. What led you to the decision of open sourcing your project?
At the time most available game engines were commercial closed-source products. I wanted to build something that others could use to build games for free. The story has certainly changed in the last few years. Many game engines are now open source (or at least source open), and it’s a lot easier for hobbyists to gain access for free or low-cost.
7. Compared to your position as a Senior Software Engineer, how does being the lead contributor of an open source project differ from being the lead of a work project?
In many ways it’s similar: mentoring, designing, testing, and the imposter syndrome. I feel like being a maintainer has helped me in my career. Being part of a team, designing, planning, testing, working through conflict, shipping and supporting code. I think the best thing being a maintainer has taught me is patience and kindness are paramount when leading a team or a project.
Sometimes I catch myself thinking “what do I know about making video games or running a project or programming?” but then I look back at what I’ve accomplished with the team, the things I’ve built with them, and the things that I’ve learned. That realization helps. I recommend this post if anyone ever feels like a phony.
8. Do you have any clear idea of how many people have used Excalibur as the engine for their game?
If we base our estimate on GitHub stars, we’ve had hundreds of people try out the engine or at least take a serious look at it. We’ve had several people reach out to us directly over the years, mostly hobbyists like us. We had someone recently port one of their old Flash games to Excalibur, which was awesome!
9. How many people have contributed to the project? What is your process for accepting other’s code?
Around 45+ people have contributed with code and more than that have contributed by opening issues or fixing documentation. We are always looking for folks to help and contribute however they can, and we welcome any feedback on things that could be different or better!
Generally we encourage people to open an issue, get consensus on a course of action, write code, and finally open a PR for review and possible merge. We try to be the most inviting and friendly project out there, all are welcome. We have all of the specifics in our contributing document https://github.com/excaliburjs/Excalibur/blob/master/.github/CONTRIBUTING.md
10. How does Exaclibur.js compare to other HTML5 game engines? What are the pros and cons of it compared to Pixi, Phaser or any of the others?
Excalibur shares a lot of the same basic features as Phaser, melonjs, impactjs, playcanvas, easeljs, and others. Excalibur is written directly in TypeScript, but many others include TypeScript support including Phaser. The biggest pro for Excalibur in my mind is our focus on keeping things simple and TypeScript focused. The biggest area that we can improve is the developer onboarding and documentation experience. Excalibur has some okay docs, but Phaser definitely has a wealth of docs and community out there. Others, like Pixi and Three.js, are focused on visual rendering and are more low-level APIs for interacting with 2D or 3D canvases.
Excalibur focuses on 2D game development and building games in TypeScript that are easy to read, understand, and program. Excalibur has been a labor of love by a small team and it caters to the way that we want to build games. Most of us aren’t full-time game devs and so we’re learning as we go, which is why we tend to focus on trying to keep the API intuitive and not make assumptions about what our users may or may not know.
If you want to pick a game engine for the web, please try Excalibur, but don’t take my word for it, try other engines and libraries and see which of them makes you happy!
11. Throughout the project what were the hardest technical problems that you ended up solving? Were there any that you didn’t solve and in what way was the design of the engine impacted by that?
The most challenging thing we built was the physics system for collision. We spent a lot of time tweaking to make it useful and helpful. We built in a tree based spatial partitioning system, which is a fancy way of only checking for collisions if objects are close to each other making it very efficient.
We spend a lot of time thinking about and iterating on the APIs as we build games ourselves, which is why we haven’t reacted 1.0 yet. We’re trying to find the pain points. It might sound odd but the fact that much of the core team only has time to commit to one or two game jams a year means that we come across APIs we developed that we’ve forgotten how to use. API design is hard, and we often don’t get it right on the first try. It’s useful to see the engine with fresh eyes, and to get feedback from others on the team and the community to make Excalibur the best it can possibly be.
The next technical hurdle this year is to be happy with the APIs and the performance of the engine and have a release candidate for 1.0. Some of the hardest decisions will be identifying APIs to change significantly or drop all together.
12. As an engineer what are you most proud of in your Excalibur.js?
I’m very proud that we’ve continued the project for so long (8+ years) and built several games with it. I’m also especially proud of what we have been working on this year, a brand new graphics API, WebGL based rendering that will increase draw performance significantly, and the Entity-Component-System (https://en.wikipedia.org/wiki/Entity_component_system) support for more maintainable (and extensible) game code.
13. Would you say that being in Minnesota has helped or hindered your career in technology? How so?
I wouldn’t have the career I have without being in Minnesota. With the cold outside and my homebody tendencies, it meant I spent a lot of time indoors with the computer tinkering and programming. This is really when I really became passionate about computers and set me off down this path.
I was lucky and privileged enough to go to the University of Minnesota for computer science. Which by some lists, it is in the top 100 schools in the states for computer science (take that statement with a grain of salt). I got a great start, learned a ton, and met some great life-long friends. After university, I joined General Mills as a full-time developer after an internship, which was a great first job. It seems getting that first job/internship is the hardest part, and there are so many great places to start working in tech in Minnesota.
Additionally, there are so many good opportunities here to grow, it’s not just a fly-over state! We have so many local meet-ups and conferences, like Twin Cities Code Camp was where I gave my first talk about making HTML5 games. There is also MDC, NDC, MidwestJS, Open Source North, IGDA Twin Cities, and more. Folks should definitely check some of these out. Also, I recommend giving a conference talk a try at least once!
14. Where can everyone find more information about you and your project?
Thanks for interviewing me! You can find me on Twitter (@ErikOnarheim) and at https://erikonarheim.com, and on github. And more about Excalibur on Twitter (@excaliburjs) for news and releases. If you are new to development or experienced we do our best to be as friendly and inviting as possible.
Check out our website https://excaliburjs.com, it comes complete with samples (https://excaliburjs.com/samples) and a gallery (https://excaliburjs.com/gallery/) of some of the jam games we’ve made. We also have a Google Group for any questions https://groups.google.com/forum/#!forum/excaliburjs