Finally, with the completion of the transition to a new web-oriented game engine, Paddlers version 0.2 is ready. In this short post, I summarize the changes and what they mean for the Paddlers browser game.
This milestone has been a lot of work, although it barely shows in the demo. For the past seven months, I implemented zero new features. Not that I am out of ideas, quite the contrary! I am rather unsatisfied with the game-play and the UI of Paddlers as-it-is and I am keen to improve that. However, I had to hold back. I needed to get two big technical changes done before adding more features on top of the already shaking pile of code.
First, the game engine that I used so far, Quicksilver, entered maintenance-mode. I was torn between moving to another established game engine or just creating my own engine that is focused 100% on the web. I ended up going with the latter. Thus, Paddle, the game engine for Paddlers, was born.
A beta version of Paddle is now deployed with Paddlers 0.2 but it is too early to introduce it as an engine for other users than myself. But I am pleased to tell you that Paddlers 0.2 looks almost identical to 0.1.3, even though only a small part of the rendering code from Quicksilver has been integrated into Paddle.
While writing my own graphics backend for Paddle, I was able to fix a thing or two that bothered me previously. For example, before WebGL rendered exactly one pixel for each browser pixel. Depending on the pixel density of the device’s screen, this ended up looking quite pixelated. Now, in Paddle, I can control exactly what resolution I want. See below for a direct comparison before and after, using the same source image.
Shocked face rendering compared between versions.
The other big problem was that Stdweb is dead. Quicksilver used Stdweb and so did I in the Paddlers frontend for many things, such as networking, threading, and text display. Moving over to wasm-bindgen took some time but it also brought new opportunities that make it completely worth it.
Screenshot of Paddlers 0.2.0 in the mailbox view
At last, I can move on and think about adding new (major and minor) features to Paddlers again. I hope that the next release, presumably 0.2.1, will contain not only fixes to bugs that I introduced with 0.2.0 but also finally brings out something that can be considered a game.
I am now trying to identify a minimal set of features that would make the game worthwhile playing. If I manage to keep this list short enough, it might be possible to pack them all in the next release.
However, Paddlers is primarily an experimental playground for me to do some hobby-research on how Rust and web-technologies can best be merged together. I will continue to explore and write articles about my experiences.
The Rust programming languages had its first stable release in May 2015. Although it is in its core a systems programming language, it has been adopted rapidly in different environments. Many programmers love using it and the community is growing quickly.
WebAssembly is a new web standard (1.0 since October 2017) that allows running bytecode in the browser. While it is possible to compile C/C++ and other languages to Wasm, right now the tooling for Rust is definitely the most advanced. Partly because both the Rust and the Wasm project originated at Mozilla and are actively pushed by them.