Devblog post #1

2D Art
3D Art
Animation
Programming

Wan Yie: 2D Art – Designing an agile meat container

Introduction:

Hi I am Wan Yie Jim and I am responsible for the concept art for Survive & Thrive here at Four Nomads. In this blogpost I will write about the design decisions I made during our first few weeks of development.

The Process:

In a game such as Survive & Thrive you’ll very likely encounter animals to hunt and scavenge. Whether this creature will be for food or for their leather, many things must be taken into consideration. Subjects such as their habitat and appearance are the first things a designer has to take to heart. If the player is to encounter the creature in snowy areas, it’ will mean that the animal should at least have thick fur for warmth and somewhat fat signifying their health and perhaps even stamina. Should the player find the creature in the desert, then the creature should signify that it can live in dryer environments and it would very unlikely have hooves.

With that being said, it is safe to say that before we begin making the creature, we first must know in what environment we work with. The first environment Survive & Thrive works on is a very basic forest where there aren’t’ too many trees or high mountains. The second thing we need to take to consideration is its role in the world. Will the creature be a hunter or your prey?

For the first creature in Survive & Thrive we chose a prey animal so that the player will have something to hunt upon. Obviously a deer is the first animal that came up to me as it lives in the forest and is a “prey animal”, but isn’t necessarily easy to catch like a rabbit. The deer should at least put up a decent hunt for the player, but not necessarily be able to fight back, meaning it should be agile and fast to run from the player. A creature that runs all the time means that their legs must be muscular and adaptable without their bodyweight contradicting the entire being.

Concept_01

These aspects reminded me of a fast mount for the player as the game progresses. Thanks to the aspect of companionship I decided that the creature should have some features of a dog. However, not just any kind of dog will do. It should be a greyhound since they’’re agile from nature and usually used for animal racing because of it. The most obvious feature of a greyhound is their extremely thin stomach/waist. But a thin waist alone would not resemble something imposing. The chest will have to be large and big to contradict and enhance the slenderness of the waist for balance. However, since the animal must be fast, it may not be too heavy. To still keep a large size I chose for some manes around its neck, making the creature appear bigger while in reality it might not have to be so.

Deers usually live in herds with one alpha, leading the group. In reality the alpha usually has the bigger horns and is probably the largest in mass. And thus we embedded the same fact into the game, giving the leader of the herd the largest horns which should obviously imply its dominance. To finalize the design I chose to give the deer several glowing mystical rune patterns so that it looks less realistic and to foreshadow future events that the player may encounter upon discovering the world.

CA_02

Last thing to take to heart when creating a creature is to decide what colours it should have. At first I thought purple would make the beast more mystical, but in the end we woul’d like it to be camouflaged or at least not attract too much attention. On top of that, purple would not look well in the environment. To contradict the blue colour we plainly went for brown with a slight hint of orange and red- only on places to enhance the majestic front of the creature.

Back To Top


Jeen: 3D Art

Introduction:

Hi I am Jeen the 3d artist at Four Nomads and also one of the two founders. You can also follow me on Twitter @jeenvis. Contact me at: jeen@fournomads.com with all your 3d art related questions. Today I will be talking about the usage of image Planes for facial details.

The usage of (facial) image planes:

Since I’ve started my very first Animal Crossing game, a buggy emulator on my first computer, I’ve been in love with their way of portraying facial expressions. Especially when it’s combined with low poly models. It’s much clearer what kind of emotion is powering the characters when using these techniques.

How are we going to let this work:

We’ve chosen for a sprite sheet like texture that contains multiple facial features or expressions. The planes resembling the eyes, eyebrows and mouth are able to cycle the sprite sheet like texture using the offset from the uv’s. By doing so the eye will change to an image of another eye. Combining this with a changing mouth image plane and you’ve got some expressions fresh from the plate!

facePlanes2

But what about the eyebrows?

Will they change with the expressions of the character?

Well they will be changing their position, like when the character is surprised but the overall shape won’t be changed that much. However by using another image plane for the eyebrows instead of painting them inside the skin texture gives us more freedom in changing the eyebrows in later builds. For example when we got multiple characters using the same plane or texture but still have another eyebrow than the main character. The image plane also gives the low poly character mesh more depth because of the small distance between the plane and the mesh. Making it look like the brow is “elevating” in front of the face. Creating an illusion of depth within certain view angles.

facePlanes

The wrong way:

I started with uv’ing the objects in a quarter of the useable Uv space within my Maya. This was in understanding that there would be at least 16 (4 times 4) different face textures to change between. By using a grid based texture as guideline, I would have been able to put 16 face types within the texture.

But problems soon araised when talking about eventually putting more (or less) face types in the game. Because I cropped the UV space within Maya to a fourth of the usable space, we would be forced to add four face textures each time we wanted to add only one or two, or use a more complicated math sum to get the offset right. This wasn’t what we want so I changed the Uv’s of the facial texture back to using the whole Uv space that’s available.

The right way:

There was a better way to handle the face textures. We decided to make the face texture image planes use the whole Uv space that’s available in Maya, this way we would be able to change the tilling and the offset within Unity. Therefore ignoring any mathematical sums. If we now want to add a single face it’s possible. We adjust the tiling and offset within the Unity Material and add the face style to the texture. As long as all the faces use the same amount of space, we will be able to add as many faces as we want without staying to the times four routine.

Tip of the day:

When using face style image planes, don’t crop the Uv space in your 3d software. If you do so you would limit yourself. The Uv crop in your 3d software is hard to change once it’s in your game. The Unity Uv crop (by using tiling and offset) is more dynamic and therefore the better way to do this technique. If you’re using the Unity way of cropping the uv’s you are free to add a row at the right or bottom as long as you change the tiling and offset of the objects using the texture.

Back To Top


Daniël: Animation

Hi, my name is Daniël Balvert and I’m responsible for the animations of the game. Currently giving life to the main character and planning to work on the first animal right after!

After doing a lot of research and looking up reference for different tribes across the globe I started working on a couple of basic placeholder animations that are currently in the prototype. These include a sloppy walking animation and an incredibly basic idle animation. With these in the current prototype it makes the game feel more natural than a static model hovering around.

ControlsFinished

After finishing those I started on new versions of the animations. The new walking animation looks more natural and the Idle animation actually looks interesting now.

Aside from polishing up the older animations I started on new ones as well. The main character can run away from potential hazards now and I almost finished the foraging animations, so he’ll be able to collect food to survive! The plan is to give him several different animations for different objects so that there’s diversity to keep you as a player entertained!

WalkAnimation.gif

Once I’m done with the main character I’ll finish rigging the deer and bring him to life as well. The idea is to let it walk around, run away from you, notice you when you get too close for comfort and eat whenever it’s hungry. These should all be made soon.

Back To Top


Neander: Programming

Introduction:

Hi I am Neander the main programmer at Four Nomads and also one of the two founders. Follow me on Twitter @MrGiljam or contact me at: neander@fournomads.com with all your development questions.

The past few weeks I have been working on the first systems for Survive & Thrive. Before we started the project I have had made a small prototype but after reviewing the code I decided to start from scratch, beginning with the spawning of the world.

World Generation:

Before I started development on the world I went to the drawing board to decide on how we were going to build it up. We decided that we are going to make a pseudo-random procedurally generated world that consists of chunks. Each chunk has a biome type and a set of spawnable objects. Each chunk will be 30 units by 30 units and the world will be for now the size of 256 chunk wide and deep. This 256 number is based on a texture map in which every pixel represents a chunks biome type. This way we will have full control over how the world is laid out in terms of biomes but still have the ability to make the world feel random.

Blog_WorldSpawnMap

On the technical side. The world is spawned from the players position and it is generated by adding chunks in a grid of 3 by 3 around de players position. This position is first translated to a chunk coordinate so that all the chunks will connect correctly. When the player moves beyond the centerline of a chunk 3 new chunks will be spawned in the direction the player was moving, the opposite chunks their states will be saved if something changed and then deleted. When the player returns to the previous location the old chunk states will be loaded so that the world still looks the same. This is done with the use of a seed so that the world is the same random every time. This way we won’t have to save the whole world but only the parts that have changed, which gives us the ability to make the world almost endless.

Blog_WorldSpawn

Items & Editors:

When developing the filling of the world with objects I found out that we needed a solid system for handling object. I decided to make a base item script which holds a few variables concerning items, such as the id, path to the prefab, item type and biomes in which it can spawn. The id will be based on the item type enum, which has an item main type index, such as tree or animal and a iteration index. In the enum it look like this: Deer = 1001 and then the generated id will be: 1:100. Based on this id we can instantiate the object whenever we need them. All items are stored in a database object that has a few functionalities in it. During the development of this system I also needed to make some editor scripts to help streamline the item development process. The first editor that I made handles the process of generating a id in the inspector so that we can see the id of an prefab when we select it. The next editor script handles the process of saving all the items to an xml file so that the database can build a new instance of it at runtime. The last editor script, which I am particularly proud of, handles the same thing as the script before but does this whenever we hit the play button or just before we make a build. By adding this editor functionality we are always sure that the added objects exist in the database to be spawned.

Blog_Inspectors Blog_EditorBuildCode

Player:

After the world was in place with placeholder art and spawned correctly I started working on the player. I started with the spawning. This is based on a spawn coordinate that can be dynamically set and as described as above the world will then spawn around the player so that it always has ground to stand on. After this I added basic movement with keyboard and mouse input and with controllers. The controller input is handled by the inControl plugin that I use so that we eliminate compatibility issues. With the movement I also implemented the placeholder animations to make sure that all is set for the future.

Next Post:

Next blog post I will write a bit about how I did the basic AI and logic for the deer in the game and more ofcourse.

Back To Top