Beer, White (paint) and (good) spirits!

Hi All,

Thing have been going at a rapid pace lately with the team now at 4 people!! To think I started this project over 3 years ago on my own to now have such a great team around me is an honour.

Beer stud

Aaran, our newest member of the team

Joining the team most recently was Aaran as our sound and music maestro. He brings to the team a wealth of knowledge not only in the sound space but also in the business and marketing areas.

As a full team we are very excited to announce –

WE ARE GOING TO PAX AUSTRALIA!!

It may not be a surprise to some of you but count this as our official announcement.

The team with the support of Sof

So with PAX on the road map we need to start thinking about everything that we need to do for that. One of the things that needed to be done was our team shirts. So as a team we all got together with the help of one of the amazing members of our local game dev scene, Sof, and screen printed our own shirts and jumpers.

So with a few supplies, a carton of beer and a few pizzas we began chipping away at the task. The results were amazing and we are really excited to show them off. We hope they are going to be one of the things that draws people in to say hi. That and the banner that we have for the booth background will also be a major feature but will save that for another day… 😉

Some cool swag for our cool team

Cheers,

Grae

Spread-Sheets and Ant-Meat: Loot tables and Corpse Harvesting

Hi everyone!

This is my first article here, thank you kindly for stopping by! Editor tools are all the rage, and XML-driven data is one of our core design goals for the modification and extendibility by our players. In that spirit, my latest goal was to overhaul the existing corpse harvesting system and replace it with a loot-drop driven system. To the un-initiated, the system involved opening up a corpses’ inventory after you had killed it and using weapons or tools to harvest resources from it. This proved to be cumbersome, as it required going into a menu screen and inventory management and forced you to stay in the menu until the harvesting process was over. We still want the player to be occupied while harvesting a corpse, as you are hacking apart a beast you just killed for it’s innards. That’s not the kind of thing that lends itself well to multi-tasking. The tools are also able to be equipped by the player. Is there a way we can do this, that is less disengaging for the player, and ties in to the existing systems?

Well yes, this article would be a bit anti-climactic if there wasn’t. When you abstract it, the corpse harvesting process goes like this: Kill a creature, interact with the creature, use a tool/weapon on the creature, wait, get the creatures resources. We can make this better. What if we combine the middle 3 steps into one? We end up with: Kill a creature, attack it with weapon/tool until the corpse is damaged enough, get the creatures resource. The systems already exist in the game for dropping items on the ground when dirt/grass/rocks are destroyed, so we can leverage that for use here. So, what’s good about this? The way that the player interacts with the world is consistent. When harvesting resources from a dirt block or grass blade, the player does not enter a menu and input a tool. The player attacks the target, and when it is destroyed, it drops the resources. This added consistency to corpse harvesting reduces the need to teach the player and is likely something a player will try without prompting once they understand that attacking things yields resources. This method also reduces player down-time staring at a menu screen, as they have to be actively engaged during the process. That’s the player experience of the new method, but we have additional complexity going on under the hood that is going to affect the balancing and make the experience more interesting for the player.

I’m going to give you a hypothetical. You’re a hunter. You’ve just downed a deer or similar big game with bullet or arrow to the neck. You go to claim it’s pelt to make a shawl to keep warm on the cold winter nights that are to come. Are you more likely to get a nice, clean, intact pelt by using a knife to cut around the sinew, or by using a hammer and pulverizing the creature until the fur is flung haphazardly from it’s frame? Right, it’s a dumb question, but I think you see my point. We have weapon types in the game, stabbing weapons, bashing weapon, slashing weapons. It would be interesting if the tool that the player chooses to attack the corpse with would yield different resources, or different chances of resources. This idea forms the basis for the loot table. We need a way to input a damage type into a loot table and get back a set of loot to drop for that creature. We also need to store and manipulate this data both while developing the game, and for players to modify once the game is in their hands. Are you thinking what I’m thinking? That’s right, an editor tool for an XML document.

There are several editor tools linked to XML documents already in the game, so we can crib the framework from these and modify to meet our needs. We need individual loot tables in a list, with the whole list stored inside a larger object. Each loot table is linked to a creature id, when the creature is spawned, it stores a reference to the loot table in the creature, to look up the items to drop when it is harvested. Some games just store what will be dropped by a creature when it is spawned. We are unable to do this, as we do not know which tool the player will use to harvest the creature. In each loot table is a list of loot drop items, which contain a reference to the item which they are associated with, and a set of percentage chances for each damage type that dictates their drop rate. We have also modified weapon items to have a harvest chance modifier, which is passed in when the loot is generated, which allows certain weapons to be better than other weapons at harvesting in the same class (sharp stone vs stone axe). This all works great, but one thing I found while testing was that I needed to see how loot was being generated in the editor. For this I just hacked in a button to generate a loot drop from the given input and show the output.

 

This works just fine for our needs. Right now, the loot generated is based upon the weapon that last hit the corpse as it ran out of health. In a future pass, I would like to keep a ratio of the damage done by each weapon type with each harvest modifier and have this play into the drop rates. But at this point, this is functional and gives us a lot of room to make things more interesting for the player.

Thanks for joining me on this little foray into loot tables! This stat driven stuff really gets me going, and I’m looking forward to doing some severe balancing with all the editor tools we have at this point. Look forward to a decent shakeup to existing experience coming soon!

 

Building a Nightmare

Hi All,

In the last week I have been working on one of the major big bads that you can encounter in Little Bit Lost, the Redback Spider!!!

While modelling this monster I recorded a video and put it together as a short time lapse. I am really happy with the result to the point it even gave me the creeps in the end.

Check the video below and feel free to post any comments or questions.

Thanks

Grae

The Grand Scale of Things

Another art update for you guys

 

Recently been hard at work modelling assets in the small time around life responsibilities and retail work. The biggest challenge I’m finding so far is modelling to scale. With the game based around the idea the player has shrunk down to the size of an ant I had it in my head that I must make everything as if it was 2-5cm tall. It didn’t click at the time that the grass for example is basically the size of a tree to the player. So would have to be modelled accordingly.

After realising that this was the case, it made modelling to scale a lot easier.

 

A neat trick to exporting from Maya to Unity is to set the scale in Maya to Meters then model the actual size you need. Then when exporting as FBX or OBJ, set export scale to CM and it would be a scale of 1:1 for Unity 🙂

Made life just a little bit easier.

Optimising Code – When Built In Methods Aren’t Fast Enough

Hi All,

I have recently being trying to get some further optimisations out of the world generation which has been a little bit of a bottle neck for a while. Running through the Unity profiler I found that my Perlin noise was one of the contributors to high CPU time.

After some investigation I found an article that mentioned a “fast floor” method. It got me thinking about the built in Unity Mathf.Floor and Mathf.FloorToInt methods and there performance. After a setting up some quick benchmarks using looping and stopwatches I benchmarked the Unity method against the one I built based of the mentioned article I found that the new method was twice to four times faster.

Implementing the method resulted in a substantial performance improvement. As can be seen in the above image the Floor methods are quicker and as they are used in a few places you can see the overall behaviour call is over 10% better. These performance results were done in engine and suffer a bit from that over head but as you can see in the below the frame rate in game.

We also have some very exciting news to announce soon, so keep an eye out for that too.

Cheers

Grae

Art Styles + Life Styles

Hi guys

Looks like it’s time I made a blog post! Exciting!

Coming onto the team with Grae has been an experience for sure. I’ve never taken on a roll as large as this outside of game jams so my nerves were dancing around during the first week. I’m absolutely loving the idea behind the game and the direction it’s going. So, what I’ve been working on:

New Creatures:
After planning out some sprints with Grae one creature I’ve been excited about creating is a Slater Beetle. I think seeing a giant one walking around in game would be a cool thing for players to encounter. So far I think I’ve managed to get the shell down packed.

New Craft-able Items:
One cool item I’m looking forward to seeing in the game is the Forge. A player can create after gathering some simple supplies around the world. Using the item cook food and after certain upgrades melt/manipulate certain items.

The biggest issue I’ve found so far in taking part in this project is, as my old lecturer used to put it, “life gets in the way” And only now I’m seeing how true those words are. Juggling my part time job and social aspects of life are one challenge but also my mental health. Not to get too far into it but I can easily say I think I’m working with the best dev I can right now, Grae has been so supportive throughout everything and I hope I can deliver some amazing content to show off to you guys soon!

Day Night Cycles – A revolving world

Hi All,

I have recently been spending time on getting the progression cycles and game play loops going. Part of fleshing this out is to give the sense of playing through a day and all its dangers then shifting gears at night when different insects come out and opportunities are aplenty for a skillful survivor. Building the cycles was not without its challenges and hopefully anyone dealing with the same may find this article helpful.

 

Blending the Skybox

This was an interesting challenge and one I couldn’t do without a bit of help. After a bit of research I was able to find references to a a shader that allowed for blending between 2 skyboxes and included a fog. As part of the swing between day and night you can lerp between 0 and 1 where each extreme is 100% of either the day or night skybox and 0.5 is a blend between the two. If you want to check it out have a look here.

Rotating the Sun

On face value this seems like an easy problem to solve but I had to think about it for a while as when a additional players joins they need their sun set correctly on their game client so that it matches the server, and if for any reason a player needs to go to debug mode and change the time they can. I made the below demo where I manipulated the time to show how the sun will flick between stages.

One of the reason the reason I had big problems with the cycles was putting the sun at the right spot it the sky. If you take time of day as a percentage of a whole day you can multiply it by 360 which gives you its angle in a circle. But when you know where the run should be and need to move it there smoothly you need to also know where it is now. This is where the problem comes in, if the sun has passed it’s half way point, the angle between 2 vectors does not return a value greater than 180. So what I needed to do was the below.

  var angleWhereShouldBe = (((timeOfDay / dayLengthInSeconds) * 360) -90) ;
  var localAngle = Vector2.Angle(Vector2.up, sunLight.transform.localPosition);
  Vector3 cross = Vector3.Cross(Vector2.up, (Vector2)sunLight.transform.localPosition);
  if (cross.z < 0)
  localAngle = 360 -localAngle;

Basically  if the sun is passed the half way point (determined by if the cross product of the 2 vectors returns a negative) then deduct the angle from 360. This gives you the correct angle.

It is also worth noting that I had issues with the concept as I was thinking about the vectors in 3D. The reality of it is that the sun only needs to rotate around on a single plane so its z coordinates are irrelevant. If you did want to do something fancy around the z I would suggest still using the above and a sine function of time to calculate the z position.

Other points of change were the sun needs its intensity changed over time which can be a simple lerp function for 1 part of the day. This gives the impression of a sun rise and sun set as the light increases or softens. I also adjust the ambient light using the same method so that I can get a more orange ambience during the day and softer blues at night. The sun needs to follow the player so I attached it as a child of a game object with a basic follow script to the local player. And finally, as the game is intended to be multiplayer there is a synchronise function to ensure that clients are at the same point in time.

I hope this has given some insight in to the thought process needed to solve the cycles and if you want to check out what the end product looks like see the below video. Also worth mentioning that it will be a lot better once Matt has given it the artist pass in the future.

Thanks

Grae

Optimisations and more to see

Hi All,

I have been working hard for the last few months on some changes to the way that the voxel chunks are loaded resulting in a reduction in the number that I need to have loaded. This was the result of changing from a cubic loading pattern to a diamond loading pattern that didn’t greatly reduce view distance but significantly reduce chunks required to be loaded.

 

As can be seen in the above 2D representation this is ~50% reduction but in 3D space this is a massive ~80% reduction! As an example in the old pattern a view distance of 7 chunks would require 3,375 chunks loaded in to memory. In the new system the same view distance loads 575 chunks!

Below is what this represents with the first image showing a can at a view distance of 6, the second is at view distance 11. Just under double the view distance but still less chunks loaded at 2044 compared with 2197. (Note: The fog was turned off to make the can visible.)

There still remains some strain on the CPU as the number of changes per chunk transition remains the same at each view distance but I am working on some additional optimisation to fix that as well, so keep an eye out for more to come!

 

Cheers,

Grae

Global Game Jam 2018

Over the weekend Matt and I had the pleasure of being joined by old friends and new to participate in the 10th annual Global Game Jam. The theme this year was “Transmission” which was a little reminiscent of last years theme “Waves”.

Our team consisted of Jake, Manuel, Mike, Drew, Fred, Matt and myself. We later recruited Aaran to do some music and audio.

We dove straight into the theme really thinking about what we wanted to produce and how we were going to achieve it. We settled on the idea of real time strategy style where the player took on the persona of a god transmitting their message to the people of a steam punk town, trying to route out a spreading heresy spread by a sinner through the use of various divine powers.

What resulted was a crazy weekend of intense work, learning of new skills, lack of sleep and bonding over an amazing shared experience.

You can check out Complication of Faith here or watch a video of what we had by the end of the weekend below.

 

Bringing the team together

Today marked the first day that Matt and I began working together on Little Bit Lost and an exciting day it was. We were able to really nut out a few ideas and a plan for the months ahead. From a personal perspective it was great to have someone to work with that brings fresh ideas and enthusiasm to the project.

Matt came up with some great new ideas and we will be really excited to share these with you over the coming months. We are already progressing with some of these ideas so keep an eye out for some cool new screenshots!

Cheers
Grae