HNHacker News
TopNewBestAskShowJobs

rossisred

159 karma · joined March 19, 2016

submissionscomments
rossisred··on Show HN: A WebAssembly game demo
That is a difficult question to answer as there are many factors involved, not just the choice of language. JavaScript can be really fast, but WebAssembly may provide more predictable performance and faster loading times. The project website is a good resource to learn about the differences: http://webassembly.org
rossisred··on Show HN: A WebAssembly game demo
Thanks! The characters are regular 3D models. The 2D elements are where the game differs from a lot of other games. If you use vector graphics the size of your assets will decrease dramatically, and your game will be resolution independent.

Regarding animation, this is a good resource to get started: http://robertpenner.com/easing/

rossisred··on Show HN: A WebAssembly game demo
Sorry, I got a bit carried away on the colors. I've made a few quick style tweaks that hopefully make it easier to read.
rossisred··on Show HN: A WebAssembly game demo
It should work in Chrome 57 or higher or in Firefox 52+. Support in Safari is not yet released as far as I am aware.
rossisred··on Show HN: A WebAssembly game demo
Yes, it is a custom format. The paths are "triangulated" on the CPU once and the resulting triangles are uploaded to the GPU for subsequent draw calls.
rossisred··on Show HN: A WebAssembly game demo
Thanks for sharing! Your article is what I was looking for and didn't find when I was working on the audio :) That is an interesting approach which I will definitely try.
rossisred··on Show HN: A WebAssembly game demo
The 2D elements (menu buttons, background trees, etc...) enter the game's editor as SVG, where they get converted to an intermediate vector format that is optimized to be loaded and rendered fast. That intermediate format is what's inside the wasm blob.

Regarding draw calls, I could definitely batch more than I do. But the game is rarely draw-call-bound so I haven't had a reason to optimize that part of the graphics pipeline.

Dart is still used in the game's editor, which has been stable for a couple of years now. For the production engine, C++ just makes too much sense. It is what made this WebAssembly demo possible :)

rossisred··on Show HN: A WebAssembly game demo
WebAssembly support landed in Chrome 57 :)
rossisred··on Show HN: A WebAssembly game demo
I wrote about this in my audio article [1]. Ideally, browsers will implement support for a configurable `sampleRate` in the `AudioContext` constructor.

There is a tracking issue [2] for Chrome but I wasn't able to find one for Firefox.

[1] : http://www.rossis.red/wasm.html#audio [2] : https://crbug.com/432248

rossisred··on Show HN: A WebAssembly game demo
Thanks for the heads up, that is curious. I don't have access to a linux machine at the moment, but will investigate later. There should be some output from binaryen in the JavaScript console, does it report success?
rossisred··on Show HN: A WebAssembly game demo
Yes it is :) Fun fact: the first prototype of the engine was built in Dart and later re-written in C++ for production.
rossisred··on Show HN: A WebAssembly game demo
The game is popular on the Chrome Web Store, and ~30% of those users are on Windows. Chrome Apps will stop working on Windows later this year, and Steam seems like a good place for them to transition. A full blown web version is another possibility.
rossisred··on Show HN: A WebAssembly game demo
I plan to keep the web version as a demo for now. It contains the first 4 levels of the game, and after you beat the 4th level it will ask if you'd like to continue to the various stores (App Store if you're on iOS, Play if you're on Android, else Steam).

My experience on the stores has been good, people who play the game seem to enjoy it. The hard part has been discovery :)

rossisred··on Show HN: A WebAssembly game demo
The game has its own custom engine and tools. The engine is in C++ and is small which made WebAssembly a great fit.
rossisred··on Show HN: A WebAssembly game demo
Hello,

I have also been taking notes while building this here:

http://www.rossis.red/wasm.html

I'm happy to answer your questions about it.