A Better Offline Version

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.

On Performance

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.

Wayward Alpha 1.3 Released

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.

A Fond Farewell to the World Map

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.

In memory:

A Fond Farewell to the World Map

No Screenshot Saturday/No Updates?

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.

Wayward Alpha 1.2 Released

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:

Screenshot Saturday: LOS/FOV Mock-ups

Last month at some point I was working on my line of sight or field of vision system. I was struggling with what I wanted to do visually with it. I made a mock-up to help me decide. I’m still not really happy with any of them at this point, but I will keep chipping away at it.

LOS/FOV Mock-ups