Even more personal announcements…

Of Work and Life

And so 4 years have passed. Oddly enough not much has happened since, I moved houses 3 times and worked in 3 different places. I found that being a workaholic doesn’t mesh well with crunch culture in the game industry. I did about 22 months of consecutive crunch (some weeks working over 80 hours), in the end I felt really burned out… it took me a while to recover… I remember I had enough saved up holidays to take an entire December, the first two weeks I was a wandering zombie, by the end of the holiday I still needed more time off.

Time flew by very fast, and on one hand I feel like I haven’t really achieved much, but on the other… hey I have some new things on my CV and also a couple of credits on MobbyGames (yey). Eventually I left my previous job after two years of employment, but the reason surprisingly enough wasn’t the crunch – it was an overly broad IP clause in my contract that constantly lurked at the back of my mind and kept taunting me with all the things I could not do – no gamedev, no art, no writing, no design, no music, no nothing. I realized I cannot exist in a universe where I am not allowed to create, so I left :D

Now I’m in a much better place, work is awesome and satisfying, new colleagues are great. I can finally start focusing more on personal growth and creating stuff… :)

YouTube and other…

I am dipping my toes in YouTube and Twitch, it’s been a long time coming. I am planning to do useful and fun things… eventually (probably start with fun and get to useful later). I spent some time learning about “content creation” (a technical term apparently, I didn’t know there is a whole science behind it). I am not currently taking it too seriously, just figuring stuff out and checking out the waters. I have been streaming a couple of hours a week and I published my first video a couple of weeks ago… found out video editing is fun, but very time consuming, I will need to find a better way to do it or make shorter videos.

I have been trying to be more active on Twitter as well, but… I don’t like Twitter, it sucks. Most of the tweets in my feed are attention seeking nonsense with the occasional cool thing popping – signal to noise ratio is really low. My scroll down experience is pretty much like this:
“hmm ok…”
“sure…”
“I don’t care”
“I don’t care”
“I don’t know you… I don’t care”
“great”
“uhuh…”
“Oh! What is this? *read* uh, I don’t care”
It could be that I don’t understand the ecosystem, or I haven’t been using it long enough. I’ll stick with it for now… but I think it’s kinda meh. I read somewhere that Twitter’s supposed to be like a cocktail party… cocktail parties sound boring, so I guess they nailed the experience. I think I’ll treat it the same way post random stuff no one but me cares about and it will be more like this blog, but mini.

Personal Brand

I also started working on a personal brand… of sorts. Since I needed profile picture for YouTube/Twitch and I didn’t want to use my photo (that would be lame), I drew a slightly exaggerated chibi self-portrait ^_^

Izzo-Dull-Icon-256px

Messy brown hair, check; brown eyes, check; dull expression, check; headphones, check; fox ears… ok, that was a creative choice :D I actually drew a bunch more since my initial idea was to use chibi emotes for YouTube videos, blatantly stealing the idea from Hazooma.
IzzoEmotesBut I really liked the dull expression emote so it is now also my new profile pic :)

I will need to redraw it at some point, as it wasn’t meant to be high resolution, and I didn’t want to spend too much time drawing them (there are some glaring mistakes when you stare for too long). I used a bunch of references and this tutorial was a strong influence, there were also other stuff I looked up on pinterest and google. It actually took a couple of iterations until I got it about right:ProcessI’ve got some other brand elements… in pretty generic terms triangles (and triangle fonts) and the colors cyan, blue, yellow and orange or something like that (it is actually pretty vague in my head too). Cyan/blue’s my favorite color because I like clouds and sky, yellow/orange just goes well with it and triangles are pointy (triangles are a very computer games thing, so I figured they fit). Thus this banner was born:

gimp-edit5-export-twitch-banner

While on the subject, I guess I never explained where “Super Izzo” comes from. My very very first online handle was “Kvadrat” (Bulgarian for “square”), but it didn’t take me long to realize that was lame. I needed something else, Hristoz (my name) is nicknamed Itso (same as how William becomes Bill) and is what friends called me, so I thought I might as well use that, but because I’ve always found the letters “X”, “Y” and “Z” to be the coolest in the English alphabet, in high school I started spelling it with two “zz” like an Italian would (think “pizza”). In some forums however “Izzo” was already taken (who would have thought it’s an actual Italian name). The first time that happened I had to come up with a new account name, I remembered something I had read in “The Game Maker’s Apprentice”:

These days, some of the most inventive games come out of Japan. Japanese designers have a history of taking crazy design scenarios and turning them into brilliantly addictive games…

…Titles for Japanese games often start with the word “Super” (Super Monkey Ball, Super Smash Brothers, Super Street Fighter, etc.)

…and I wanted to be an inventive brilliantly addictive game, so putting 2 and 2 together SuperIzzo was born and has been my handle on most websites for the longest time. In hindsight though I sound like a bootleg Super Mario clone, and my custom font doesn’t help the case either xD

So what’s next? Hopefully another blog post in less than 4 years from now and I will try to publish more content in general… no promisses.

More personal announcements

New job as a game programmer at West Coast Software LTD, doing top secret stuff :)

All personal projects that I have been working on before are suspended indefinitely and there won’t be any new releases, because… clear IP boundaries and such.

I will try to write more broad and general articles on development and design and will play a lot more games… and will maybe do game reviews ^_^. At least those are my plans regarding this blog thingy. There’s a really tiny chance I might try YouTube as well, but I know I’m too shy for that, plus, time constraints.

Unofficial Updates

It took quite a while but I finally got multiplayer networking working. The reason there is no official “Weaggles World War” update post yet is that although (most of) the functionality is there I still have GUI to design and implement… there are also a few new features.

Way back in October and November I also did some work on Winning Streak. The changes there have to do with scoring, the combo builder, physics, fireworks, character animation and IK… these probably make no sense when squashed together in the same sentence, but I’ll try to post a (first ever) detailed post on Winning Streak on this site. Last week or so I have been fixing some unfinished things I had left in WS… still a WIP. I want to eventually (and preferably soon) make another release, as the change log is growing bigger and bigger.

Last, but not least – this is just about to arrive by the post
ccnfvmkWith Occulus Rift CV1 coming out in a just week and Vive in two the hype is real. I won’t be able to invest into an expensive dev-kit but it occurred to me that Google Cardboard is a thing. I really like the idea that you can turn pretty much any mobile device into a VR kit just by adding lenses and strapping it to your face. I have quite a few VR game ideas I want to try eventually. Also I can imagine how cool WS could be with it – instead of watching the game through the TV (as it is now) players can actually be there on the bench as a part of the the audience enjoying it in its full glory.

EDIT: It looks amazing, unfortunately my phone has no gyroscope (DOH!)… so no head tracking.

EDIT 2: Since then I got a new phone(s) and a better cardboard, it’s awesome, head tracking still missing movement, but I can turn my head ^_^. Did so much VR, it deserves a separate post.

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 :)

A gameplay screenshot from untitled tank game v0.0.3

Six weeks in the making (v0.0.3) …

I was supposed to release a version last week (I’m really sorry to those who’ve been awaiting it). Instead I’m releasing it today, and I promise I’ll try to release something every 2 weeks (1 week is way too short to achieve something of reasonable size given the amount of spare time I have).

Now lets get to the point – version 0.0.3. Unfortunately the web player won’t work anymore. I upgraded to Unity 4.6 beta version which is not yet officially supported, instead here are binaries downloads:

So, what has changed since the last release? Oh boy, where do I begin…

Bombs!

An animation of a bomb that explodes

We had exploding tanks last time, it was only logical to add even more explosions this release (and keep the trend in future until the game can’t possibly handle any more explosions). Bombs are great, they are physics controlled rigid bodies, which wobble around and eventually detonate and go BOOOM, causing massive amounts of damage to anything that’s close to them. Bombs can destroys tanks and other bricks, but what they are really good for is damaging bases. The reason why they are so great (especially in PvP) is because, once someone plots a bomb the other players will see it and try to push it away from its target, before it goes off, but the player who put it there is not going to be standing still either.

Power-ups & Items

the 5 power ups in line

Three  more power-ups and new graphics. From left to right the current power ups are:

  • Speed-boost – on pick-up doubles the tank speed
  • Bomb – Adds 3 bombs to the player’s item slot (which can later be dropped with the “use item” button)
  • Two types of shields – the good old blue shield which protects against a single bullet but last forever and a new yellow shield which blocks every bullet, but has expiration time. When a tank spawns it get a short duration yellow shield this is to prevent spawn camping and give players the chance to react to the spawn. The pickup grants more time.
  • Last but not least – the gear. Gears “heal” the player’s base when picked up, but since they are the only way to increase it’s health they turn out quite valuable, especially that’s the only resource at the moment. They are dropped every now and then from the sky and there is 1 in 4 chance that a normal crate (but not a [?] crate) will drop a gear. Later on, I’ll make gears even more useful, collecting a number of them (5 or 10) and not dying will grant an upgrade… but that’s for later.

Since the addition of bombs it is now possible for tanks to hold items (one of a type, but they can stack) and if it’s a player it will appear as an icon with a number in one of the 4 corners.

Bomb item icon in the lower left corner of the screen

Allies

Yey! Friends!!! Never gonna be lonely again. You can now spawn up to 2 AI controlled ally units using the “unit” button. They can do pretty much everything the enemies units can, except they are on your team and are just slightly smarter. You should use them with care though as they cost resource to spawn.

An ally unit surrounded by enemies

One thing interesting thing that’s worth mentioning is – since the allies are on your team the game does not end if you are unable to spawn as long as at least one ally unit is on the map. This could be a little frustrating as you have to rely on that unit to win… but there is always the “Pause Menu -> Retry” option.

Other mechanics

No grid, more physics. I completely removed the grid mechanics and made the movement completely free and physics based. As a consequence there is no more snapping to angles or positions which not only looks and feels more natural, but also requires more skillz (I find it more engaging this way :3). Another interesting side effect is that tanks can rotate and push other tanks by bumping into them.

Water collider fixed. The water used to be an invisible box with a square in the middle. Then things (especially crates) could fall on top of it and look as if they are floating in the air. That has been fixed – the water is no longer a true collider in the physics sense, and everything could fall into it. Tanks will refuse to fall, but not because they collide with something, instead their motor will “break” just as the tanks start entering an empty cell with water underneath. The resulting behavior is pretty much the same except for a two things:

  •  it is possible to fall into the water if forces other than the motor push you there (say gravity makes you fall from a height, or a tank pushes you), and that’s causing a few bugs at the moment, which should be fixed next time (you can get stuck)
  • The other more interesting thing is – if you push something that can be stepped on (e.g. a crate), into the water, you can make a bridge and use it to cross over to the other side, here’s a short animation that illustrates it:

A short animation illustrating the bridge mechanic

GUI

I spent a lot of time working on the game ui, using the new GUI system in Unity 4.6 beta (which is the reason I upgraded and consequently broke the web-player). Personally, I find the new GUI system the most intuitive and well design framework for game UI I have ever used. It has many features but here are the ones I find most relevant:

  • Keyboard/Joystick navigation – you can go to and click any button without having to use a mouse. Since my goal is to make a console-like game that can be played in Big Picture mode that’s a major plus that really saved me a lot of effort.
  • Fluid(-ish) layout – the GUI can be designed to scale and adjust according to the screen size, which makes supporting different resolutions, aspect ratios and what not so much easier for me
  • Graphics design and animation – so much easier with the new GUI. And who doesn’t like animated windows and dialog boxes :)

In short summary, I remade the old GUI stuff (main menu and win/lose dialogs) and added a level selection screen and a pause menu (which, imagine that, pauses the game).

While on the subject of better usability – I realized that it very easy to get killed, simply because enemy tanks and bullets are somewhat hard to notice and keep track of, when they should really stand out more because they signify danger. So now tanks now have team circles which apart from indicating their team allegiance also improve the visual size and contrast of each tank. Bullets are also slightly larger and brighter.

Aesthetics

First and foremost sound effects – loads of them. Most actions and interactions produce sound effects which make the game sound interesting and cartoony. Although that’s not a purely aesthetic change as sound is a very powerful feedback tool (back to the subject of usability :D).

I also added two more audio tracks. All the game music so far has been generated with  cgMusic – a ingenious tool by Maciej Biedrzycki. I haven’t given it the proper credits in the game yet, so I should mention it here, at least :)

And one last point, I optimized the level rendering by combining all similar static meshes into a bigger one (kudos to Alex for this script). This in turn sped up the dynamic shadow rendering, which make the game look so much nicer, so shadows are now on by default. One other optimization I could do (later on, when the time comes) is to combine all textures into a single texture atlas and render all blocks with a single material as described here.

That is it for now.

Late Update (v0.0.2)

v0.0.2 is out you can play it here:

Play button image

I have not posted anything in over a week, so to avoid falling back any further here is a historically ordered summary of the progress since the last post.

Meet the Weaggles

First and foremost we have the weaggles now – small purple creatures that pilot the tanks and love destroying things. A name born by to unmatched creativity or simply lack of imagination (…cuz they have no arms, they can only wiggle).

A sketch and an in-game screenshot of the weaggle character

Left – a weaggle design sketch (pro art skillz),  Right – a 3D weaggle riding a tank in-game

Lights and Shadows

The next modification was rather minor, but made a huge impact. Making the light brighter changed the gloomy look of the game into a full of color bright and happy toon (which is what we want :)). Dynamic shadows contribute even further, however they come with a big performance hit (my rendering isn’t exceptionally optimal).screenshots of the game with low light, brighter light and shadows enablesOne thing that’s worth mentioning is the color ramp. There is a rule in art/color theory that states shadows are blue… so our ambient light is not the default unity gray, but rather dark blue. Likewise our sun (directional light) is not white, but soft yellow.Unity ambient light and directional light color settings

Spawn Mechanics

Kudos to Yani Genev for helping out on this. The original spawn mechanic was based on an abstract resource that was hidden somewhere, the player had 3 resource points (which are equivalent to 3 lives) and the enemy tanks had 20. If you broke the enemy bases, before the spawn resources were depleted you would be able to achieve victory (which was my way of making the bases an alternative target). The system worked, but it wasn’t as elegant as the one Yani suggested i.e. removing the abstract resource and making spawners pay with their hit points. The reason the new system is better is simple – there are less numbers for the players to keep track of. But there is more, destroying an enemy base or even just damaging it, has a more direct impact on the game (the more damage the less tanks). On the other hand having your base shot at isn’t as punishing – it used to take only 1 hit (and you lose all of your lives), now it drains your lives gradually.

The player base with its hp

Wiser AI

Now that they have someone controlling them it was expected of enemy tanks to become smarter. The AI now targets both the player’s tank and his/her base (as opposed to moving and shooting randomly). See above screenshot :)

Special Effects

EXLOSIONS and brick shattering all over the place, destroying things is now even more fun. When a tank is destroyed it explodes and bricks shatter creating physical particles. Here’s a screenshot showcasing both effects:An explosion and brick shards

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