Weaggles – The fancy graphics update

Last week (or two) I’ve been working on various aspects of the tank game. There have been quite a few changes and here’s a quick run down:

Awesome graphics

Unity 5 came with loads of goodies I didn’t have back when I started the project. One of them is the improvement of the graphics engine and the addition of physically based shading (and global illumination). Others are the availability of image effects and reflection probes in the free edition of the engine.

An image showing the differences between the legacy shaders and the new physically based shaders and image effects in Unity.

After tweaking materials, sky-boxes and lighting settings a little the effect was mind blowing. The second image is a bit of an oversell as Unity 4 did have reflective shaders (but it wasn’t that easy to set up, and also they didn’t blend reflections from different cube maps).

Among everything else I made the water look nice. By using both the main and secondary normal maps on the standard shader and animating the two offsets to go in different directions you can achieve this effect:

Animated water

…which is pretty much what the legacy “basic water” does, but better as it works with the standard shader instead (C# code here).

I wanted to keep the toony look so I went ahead and added a few fake image effects on top of everything :

  • an exaggerated ambient occlusion to increase the presence of blackness (and the contrast a bit).
  • a bloom effect that makes bright areas look even brighter;
  • anti-aliasing; and
  • a bunch of different blurs… just because

Exploding Weaggles

With the new terrain and revamped physics movement it becomes easy to get stuck in a hole (which is far worse than getting destroyed). To fix that weaggles can now get angry and explode in rage, destroying everything nearby… just like bombs (they even get the same red coloring). The explosion doesn’t happen instantaneously, you have to charge it for 3 seconds by holding a button, and you can cancel it at any time by releasing the button. You can’t take the enemy with you on reflex right before they shoot you, but you also won’t explode by accident. Despite the charging time, it’s a great utility that’s always available when you want to blow things up.

A Short animation of a weaggle getting angry and expliding.

Bullets

Another gameplay change is with the bullets. They are now truly physical (and along with them pick-ups became rigid bodies as well). What this means is that bullets are controlled by forces and also upon collision apply force to other rigid bodies they come in contact with.

Pushing a cog by firing bullets

This new mechanic allows you to push object from distance, ones you cannot reach otherwise or ones you don’t want to approach (such as bombs). When first shot bullets are unaffected by gravity (and behave like they used to), when they hit something they apply damage, ricochet in a random direction, fall to the ground, and remain as harmless rigid bodies for a while. This is interesting because for example you wouldn’t be able to push a crate by shooting directly at it (as that would break it), but if there’s a convenient wall next to it you can bounce bullets off it to make the crate move.

Did I mention that bullets now have a new model, leave a trail and create sparks when they hit something?

Screenshot showing the new bullet model and the trails they leave

Mobile

Last but not least I managed to get it running on Android. I tried building the game on Android right after I applied all the fancy graphics… big mistake. It was running with a frame rate of about 3 FPS. After reverting all that and reducing the terrain quality (as its resolution is pretty high) it was still performing poorly. Profiling showed that physics was eating the CPU, after reducing the quality of the physics simulation it now runs at 20 FPS and it looks something like this:

Mobile mock screenshots of landscape and portrait

At first neither portrait nor landscape looked right on my device, the camera was positioned wrongly. As a generic solution I animated the camera with the aspect ratio as a control variable so it should now look right on any aspect ratio (regardless of the device).

Another thing I did in relation to mobile was to atlas the textures and start putting everything into a single material for which the new rendering engine proved again ingenious. Just by using the new standard shader and a single material you can render all diversely shaded objects in the scene which was not possible with the many families of shaders in Unity 4. When switching to mobile you can now simply change the shader of a single material, which is amazing.

Coming up

I plan to dig into multiplayer again sometime soon, the new networking API solves a lot of obstacles I had stumble the last time I tried it. It is now quite easy to make mixed local-network multiplayer and also quite easy to allow players to join at any time.

A recent screenshot of the level. Shows the Unity terrain.

Destructible meshes, terrain and physics.

It’s been almost a year since I first started making Weaggles World War (the tank game), then there was a jam, then there was Winning Streak and then my summer job. For quite a while I had not opened this project, but last week I finally did and I started toying with it.

Unity 5 had broken a few things – some were easy to fix, others slightly less. The biggest problem I had (and still have) is that the collisions are now much more sensitive and sliding a box on a floor made up of boxes is not possible as it catches the edges of the boxes bellow (this problem). There probably is a workaround, but instead of fighting I just accepted it and decided to use a more interesting alternative – unity’s terrain. So, the old 3 levels are still there, but not very playable, and I’ll be making new ones using terrains. One handy trick that comes with height map based terrains is the ability to deform them at runtime, raise mountains or dig holes, make craters, etc  :)

I also tweaked a lot of physics and control settings. Tanks no longer move in set increments (no more ForceMode.VelocityChange or transform.rotation = X). Instead everything is internally controlled by forces, the way physics is meant to be.

I allowed crates to rotate freely on the map (not just the y axis as they used to) and with that I had to change the way the bouncy damage animation works (as they would jump on their local up axis… nothing drastic).  And last but not least – destructible meshes. Crates now will shatter when they take enough damage and spawn physical shards (which will disappear after a while). It just makes destruction so much more pleasing and makes you want to break a crate as soon as you see one ^_^.

A short gif video of destructible crate meshes.

Destruction! Yeah!

The shattering effect is not perfect as it’s a crate made of planks and the shards are irregularly shaped, but it does the job :)

Featured edit screenshot

Winning Streak – or how to achieve epicness in just 3 days

Play: here

After 3 days of sleep deprived struggle to get on top of things and add as many features as possible we finally did it. The jam’s over and we submitted in the very last hour. Over 900 games entered the competition along with ours.

It is silly, funny, bizarre and extremely buggy game. It completely exceeded my expectations and at the same time we couldn’t add everything we wanted and at the moment it is this cool thing which is half made.

The game is called Winning Streak and is at gamejolt. You play as a football streaker who wants to get some action, he runs about and avoids being caught by the football players and can also perform “tricks” to score more points. The idea is that it is being watched from the cameras set for the TV broadcast of the game and there are two commentators who narrate his actions and make funny remarks. It’s not a completely original concept, it came from these two games: The Streaking Game and Streaker 2013.

There was 10 of us on the battle field:
Patrick Lacey was writing the commentator’s dialogues, and Logan Byers and Frankie Fiore voiced them. Fredrik Larsson, Marcin Mazurski and Danil Tabacari worked on the 3D art, while Twimper and Xylra did some of the 2D stuff. Jake Thorne and me were doing the coding. We all worked pretty well together, especially considering we met less than two weeks before jam.

We’re currently pushing it further and want to continue development.

Here’s a promo gif :)

PokerFaceDance

Status Update (10.11.2014)

There is no release this week. Why? (here come the excuses) Well a couple of disasters stroke me: first there was my birthday, then I got sick (and still am), on top of that I’d decided to dive into online multiplayer code.

Oh.. the multiplayer code… I’ll get the hang of it, eventually. I had to learn a lot about how networking stuff work in Unity. Furthermore before I can make a fully functioning online version I have to revisit all of the game logic so far to make sure it works as expected and syncs across multiple instances of the game. On the other hand I’m glad I decided to do this now before there is too much content.

I don’t know how much it is gonna take before I finish this quest, but it doesn’t seem like an easy feat! So at least two more weeks. I’ll keep you folks updated  ;)

I chose a name for the game – “Weaggles: World War”. Because it abbreviates to WWW :D. Also “Weaggles” is also a very unique (made-up) word which is always a good thing. A close runner up was “Weagles: Waging Wars”, it lost because “world” can be associated with online (as well as the WWW).

In other news in two weeks time I’m taking part in the 72 hours “Indie vs PewDiePie” game jam hosted at GameJolt. I have a pretty funny idea and an awesome team, and it’s gonna be loads of fun. I need to get a lot of things ready before the jam starts (collaboration tools, streaming and recording, and other bits of tech) so it’s unlikely that I’ll do any progress on this game. Ah yes, I’ll be streaming the development on Twitch (as SuperIzzo), so you’re welcome to come :)

What’s in that box?

…who knows, maybe random goodies…

Here’s a quick status update.

My quick and dirty physics implementation has been replaced by the Unity Physics Engine. Everything is now physical; tanks can push other tanks or crates, climb up slopes and fall down in holes. On top of that movement is still grid based (which was actually the hard part).

I added a new kind of crate – the [?] Crate that drops a random power-ups when broken. The selection of power-ups isn’t that great at the moment (only 2), but it should grow bigger by the end of the week. Here’s a screenshot:

Powerup Screenshot

End of the week report.

Alright, it’s Sunday, so lets wrap things up.

Since Thursday…

  • I’ve added background music and 2 sound effects
  • Worked on general accessibility and minor irritating bugs
  • Added a main menu and game over menus
  • Added a second test level
  • Reorganized the project a couple of times

Generally weekends are not a good time for me, so that’s a reasonably good progress considering. I am not happy with all the hacks and cheats I am allowing myself to put in the code. I’m not used to this methodology at all, but it’s all for the sake of efficiency, we’ll fix that tomorrow :)

Anyways, here’s end result:

Play button image

Day 4 – making things pretty… er

Today was mostly dedicated to visuals. I started the day with 3 new block types:

  • ground/grass – which replaced the previous giant ground box, and allowed for making holes
  • water – so that the holes don’t look so awkward (its an impassible indestructible block, which allows for bullets to fly trough)
  • crates – for now they just take two hits, jiggle a bit and get destroyed (a little bit like bricks), but I have huge plans for them

Then I decided to add some texture, because plain colors were starting to look boring. I also meddled with Unity animations and finally got the hang of them (I think). Minor game-play tweaks, minor setting adjustments here and there, but nothing really significant on the functional side.