In this video I discuss some of the changes in 1.3 and planned features in 1.4. I also discuss a little bit about the performance issues that 1.3 had and how I resolved them.
Recently, I have discovered an interesting project called Awesomium, a windowless browser framework based on the Chromium/WebKit engine (Chrome/Safari). This has finally lead to HTML5 game developers (a rare breed at the moment) to reach offline targets without developing their own wrapper. My offline version currently consists of supplying the raw source files and expecting the user to know to run the index.html – which just runs in their browser anyways, and due to security settings, some users don’t even experience the sound and music.
Hopefully coming up, I will have a real offline version that doesn’t run in your browser and isn’t dependent on having any browser at all. Unfortunately it’s a bit over my head still as there’s no examples out there to just run local resources in a wrapper and requires some C++/C/C# coding.
Performance is getting to be a real issue here. I have chipped away at it each release by improving many different aspects of the code; however, the issue still lingers there – becoming more apparent the more you play Wayward. Could it be the monsters? Could it be the particles? Could it be the environmentals? All of these things do impact the performance, yes, but the performance is actually being hindered from another factor – the technologies that the game exists on itself. The slowdown (from what I have tested), is actually coming from drawing images (through HTML5’s drawImage) – all the different graphical elements on the screen: layered tiles, character, enemies, environmental, items, lighting, particles, text/item animations, etc.
Each movement we have to render a brand new screen – 13×13, 169 tiles. But not only 169 tiles, we have to loop this 13 times (since there’s 13 layers of tiles – some that overlap others). The looping surprisingly takes no time at all – the thing that takes the time is the drawImage functions being called 169 times per move. This doesn’t even include the other stuff I mentioned above like the monsters, lighting, and animations for example. I mention those three examples because these ones in particular take more resources than anything else. How could this be? Aside from HTML5’s drawImage not being the best for performance in it’s current state, if you want to do other more complex things like opacity (lighting/animations) or image mirroring (monsters), this can reduce performance up to 50% depending on the browser.
To put this in to perspective,
- Want to draw a colored square 1000 times? Okay, cool, that will take a measly 6 milliseconds.
- Want to draw a simple image 1000 times? Okay, well, that will cost you 19 milliseconds.
- Oh you’re the fancy type? You want to draw an image with opacity 1000 times? Well, now we’re talking 40 milliseconds.
I suspect something else weird is going on here too aside from canvas specific performance. The performance degrades over time and garbage collection doesn’t seem to be firing in the correct instances. The CPU keeps going up and up. I understand some of these issues, and I can try to work on some of these issues about by buffering and pre-rendering certain things; however, pre-rendering isn’t the solution as different browsers have opposite results. Not only that, but pre-rendering will actually hurt me in a world with manipulative terrain. Right now I just have to re-draw the screen when I dig some dirt. Imagine regenerating that pre-rendering of an even larger portion.
So i’m kind of stuck here. If any technical HTML5 programming types happen to stumble upon this, I would love to hear your thoughts.
As always, you can play it at the normal place/link:
I code-named this release “Gameplay” because many of the changes were in effort to help aid game mechanics and an overall increase in fun/enjoyment. There’s quite a lot of tweaks and fixes in this release as well. Read them all, over on the Changelog.
New to this release is the ability to download an offline version. For some reason, even though I am making a browser-based game, people would still rather download it… then… run it in their browser anyways? Not sure about that one, haha. Download it here.
The biggest changes in this release is the re-introduction of procedural world generation, changes to the goal or “win” mechanic, monster spawn scaling (rather than monster difficulty scaling), and overall less grinding. As always, I’m already looking forward to the next release where we will see a huge amount of new items, recipes, and other content.
This release also features some amazing artwork from Dusty Melling. There’s a few of them to see for yourself in the game.
Coming up in Alpha 1.3, we will be departing with the much beloved, world map. It’s replacement is procedural generation. Unfortunately procedural generation won’t replace everything – that special designer’s touch will be missing, something that code can only attempt at imitating. Furthermore, in Alpha 1.3, caves and dungeons will be missed the most, as they won’t be here anymore. Although I plan to add them back in, in some form in Alpha 1.4 and beyond.
I know, what’s up with that?
Well, for this release, most of the stuff I am working on is back-end, tweaks and other fixes, so really, there’s not really all that much to show off visually. As for the updates: I have been doing weekly and sometimes daily updates via the changelog. If you want to be notified of anytime it is changed, just subscribe via your email at the bottom of the page.
As for a current update: I am trying to figure out what is causing slowdown on late-game (on some machines, on some browsers). Also known as, the most boring part of making a game.
In this video I discuss some of the bigger changes in alpha 1.2 and talk about some of the dumb things I ruined with it, haha. I also mention some of the proposed features in the next release, alpha 1.3.
Yep, that’s right, it’s finally out! Since you’re already here on the website and everything, you probably know how to play it already, and you may have already done so. But if not, play it HERE. Or not, whatever man.
If you are interested in the changes, read about them here: Changelog. As always, I would love to hear what everybody thinks about it.
Here’s some (not the most exciting) promotional images:
Nothing really too exciting this weekend, but I can tell you that I am finishing up some of the remaining to-do before releasing alpha 1.2. Look for it soon 🙂