Archive for the ‘Uncategorized’ Category

Epistory: Fun with bones in Unity

Thursday, June 11th, 2015

More on IndieDB

Discovery of what unity can do in terms of jiggly bones and overriding animations.

The inception

A while back, after slowly becoming mad tweaking animations and movement behavior on our avatar, I decided to have some simple fun with Unity. See where the limit was and what’s possible in a certain domain. Since I was obsessed with the character’s animation, my attention was driven towards improving what our animator gave us in terms of natural movement. Even though the animations were quite good, I wanted some physics madness in there. So I went on a quest to mess with the bones of mecanim.

It turns out it’s rather straightforward to activate the so called “jiggly bones”. A few changes in your model before export does the trick. It does however require a great deal of value tweaking and physics engine know-how. You may follow this tutorial if you want to try it for yourself.

Here’s what I could do as a quick ‘n dirty test. This will *not* be in the game. Even if the effect could be nice, It is at the bottomest bottom of our priorities.

jiggly bones 350px

 

But doing this as a playful “what if” helped me learn a lot about how Unity works with animations and physics. Even better, I would never have thought of what I’m about to show if I hadn’t gamed the system.

A few days later, the movement and animation finally polished, I found one last thing I could do, turn the head of the fox in the direction of where the avatar will go next. Providing a subconscious feedback on the movement. Using the head bone and overriding the animation, it should be possible. Right?

epistory fox head move

 

It turns out it is. This gif was taken when a bug prevented the fox to move or turn so you can clearly see that the head orientation is overridden (and a bit disturbing, sorry).

How to do it

First, you have to get a reference to your head bone:

private void Awake()
{
  HeadBone = /*find the headbone in the hierarchy*/.transform;
}

There’s nothing to do to your model. All you have to do is use the LateUpdate function which is called afterthe internal update of the animations.

private void LateUpdate()
{
  Quaternion
    look_at = Quaternion.LookRotation(Direction, new Vector3(0.0f, 1.0f, 0.0f));
  look_at *= Quaternion.Euler(-90.0f, 0.0f, 0.0f); // Our models are rotated
  HeadBone.rotation = look_at;
}

You can do all sorts of crazy stuff with this.

The result

fox turn head subtle 350px

 

Here you can see the result in game. Slowed down on purpose to make sure it’s seeable in a gif. The effect is very subtle but you can see that the head will always point to the right direction (almost instantly) and the body follows soon after.

The next time you are frustrated with a particular task or simply bored out of your mind after a day of repetitive tweaks. Do yourself a favor and just play with the tools on your workbench. Who knows what kind of gem you’ll unearth.

}

Epistory: Fluffy Friday #2 – Adding critters.

Tuesday, June 2nd, 2015

More on IndieDB

Bite sized news for small stuff. Today: Adding critters.

header

After our world building, level crafting & dungeon inaugurating, we were left with a grim realization. For all the beauty in display, we were missing something crucial. We had a beautiful but empty painting. A canvas ready for: Life! *crackling thunder*

critters idle2

So, here they are presented with their idle animation. Minding their own business until you come along:

critters run2 text2

They’ll spawn in small groups where it’s relevant and flee when you come close. Now that the system is in place we could add more variety if we find the time. It’s not completely done but I can already tell you it adds a lot to the look & feel of the game.

We’ll show more soon and I wish you a nice week.

Epistory: Paper on art direction

Monday, May 11th, 2015

More about the game on indieDB

A paper on art direction

The “Art Direction” is basically a set of visual rules you decide to follow during all the creation process of your project. All the visuals you will design will stick to it, and in the end your project will end up coherent, with a specific look everyone will recognize.

“Paper” please

When Epistory was just in the shape of a playable prototype, we were just finishing a serious game on 1st world war. Despite the seriousness of the theme, the Art Direction of this project was really cute, showing flat scrapbooking characters and paper styled interfaces.

Our game about 1st world war. Notice the “scrapbooking” art style !

 

We really enjoyed making all the game assets with this look, but couldn’t push the style beyond the limits. Then Epistory came within our grasp: “A muse lost into a writer’s mind, creating the world as he imagine the story, fighting against the blank page fear” ? Hell yeah ! We immediately saw that we could continue with the paper style thing, but pushing it a lot further into a full 3D game !

Art “right” Direction

We first started to look for interesting references and we made moodboards with it.

Some of our “papercraft” styled references

 

We quickly noticed that the scrapbooking style couldn’t be enough. Despite the 2D movements of the avatar, we had to make full 3D environments, and relying only on 2D paper collages would appear flat and boring. We decided to go for a more “papercraft” approach, with some additional elements taken from the origami techniques.

First 3D test to see what we could do with those papercrafting/origami techniques. Once we defined the shapes, we worked on a basic colored layout.

 

Paper pot

After testing differents approaches we ended up with a mix of different paper techniques:

> Scrapbooking for the environments ground tiles:

> Animated objects made of paper crafted volumes for destructible assets:

 

> Folded paper for texts and logos:

> Origami/folded paper for the monsters:

“Hot paper”

Once we had chosen the path of paper, all the assets had to stick with it, even special effects and particle systems ! We made “folded paper” styled textures, and used almost no alpha or additive techniques. It was complicated at first to find elemental paper styled effects to replace “classic video game effects”, but once we did the first ones we just had to stick to the technique.

 Fire effect without using the classic additive method, only with plain opaque paper sheets !

“Crapbooking”

The major drawback of this Art Direction is that it is often difficult to create assets “looking like paper” but with a non realistic look. We wanted to keep things cartoonish, with strong shapes and colorful
environments, but when you have to make a style of paper you can find in real life, the risk is to end up with a great but too realistic asset. The difficulty is to make believable paper looking assets, but still looking cartoon… It’s an everyday fight to maintain consistency between the assets, but
the challenge is motivating and we believe the final visuals of the game will make it really unique !

 

Like the game on Facebook

Follow the game on Twitter

Epistory: Lessons learned while switching to Unity

Thursday, April 16th, 2015

More about the game on indieDB

epistory_c_to_unity2_455px

 

Paradigm Shift

When we started working on Epistory, we had to choose whether to use our proprietary engine or not. For reasons that go beyond the scope of this post we decided to go with Unity. While the prospect of working with a tool as streamlined as Unity was stimulating, after five years working in a workflow dominated by C++ my C# habits were rusty if not inexistent.

After some time with C# I remembered and saw some of the neat tricks you can do with this language. I also received and read a few tips for Unity itself that can do wonders to keep performance high and coding time low. I will keep this as code free as possible and direct you to the relevant documentation -if necessary- to get all the juicy details that would needlessly blow up the length of this post.

Stay organized

While Unity is very flexible and lets you do basically anything, it can be a blessing as well as a curse. If you don’t force yourself to organize the project and the code from the start, it will become messy really fast. One performance hit that is negligible at the beginning but can grow into a big problem later down the road is the caching of your GetComponent(). Basically each time you ask for a specific component in a GameObject, Unity will go through its component list. In most cases you can safely cache the result and keep a reference. If you start adding components at runtime you’ll have to decide whether to cache it or not.

Leave no warnings behind

Even though most programmers will treat warning as error -or at least minimize the amount of warnings- it bears repeating. The more serious warnings are almost always a bug waiting to be triggered. That is even more important in C# because of some leeway given to the developer. For example: you can hide a virtual function if you don’t explicitly add the override keyword to the sub-class function declaration. And a warning will remind you to make your intentions explicit. The difference between overriding and hiding is that the overridden function will call the runtime type and the hidden function will call the compile-time type.

False friend

The switch statement is a good way to keep the code readable. But in this case its behavior is slightly different in C#. You cannot fall through to the next case section. You have to place a break/return/goto… However, there is a walkaround. You can use something like “goto case 1;” to jump to another case. More details here

Missing Link

LINQ can be a powerful tool to interface a program seamlessly with a database. Even though its syntax can be off putting, you should at least try it before you leave it. You can use SQL-like statements to query an xml file, for example. You can also use it to perform operations on IEnumerable (a.k.a. Arrays and Array-like) classes. All you can eat buffet here

 screenshot_epistory_prog2_455px

Daily routine

Coroutines can be achieved in pure C# but Unity made their use very easy and intuitive. It is akin to starting a new thread without the problems associated with thread safety issues like concurrency, race condition & deadlock. The coroutine also behaves like any other member function. It has access to other functions and member variables.

I will leave the implementation details aside (see links below) but know that it can easily be used to provide easing to an object over time or calculate the next score increment. Another, more advanced, use-case is a very elegant way to implement a state machine. More information here and there and state chartshere

Eventful delegation

Event firing and registering is built into the language. Events & delegates are two sides of the same coin. The delegate provides an equivalent to an array of function pointers and the event is the message being sent. This makes for painless event driven programming and we all know how much a game can be event heavy.

This could make a post topic by itself so I leave you with the documentation and an in depth tutorial/study

Epilogue

There you have it. A non-exhaustive list of tips, tricks and gotcha. Thank you for reading and feel free to ask any question in the comments.

Weekly update #69

Wednesday, April 8th, 2015

Weekly Update #69 – The Ecosystem

Read it on the forum

Hello everybody,

Sorry about the late update, it was meant to be posted Friday but we were a bit busy… anyway, let’s have an overview of Creatures Online’s ecosystem today! 

Here’s how the player can interact with ecosystem:
- Tap on a critter to wake it up
- Critters can’t be drag & dropped directly, but it is possible to move them like decoration elements after clicking on the corresponding icon on the interface allowing you to move / sell agents
- Small critters (such as insects) generally can’t be interacted with
- …but some can still be drag and dropped (for example, fishes)
- …and you can still tap on some other ecosystem-related things, such as bee nests

And here’s how the Norns can interact with it:
- Even though the players can’t interact with every insect, Norns can. Sometimes they hit or eat some insects, which you can reward or punish.
- Flowers, mushrooms & grass patches grow naturally and are randomly placed.
- Ecosystem varies depending of the environment. For example, the Hatchery consists mostly of flowers and butterflies. Thus, placing an insectivore critter may be a bad idea as butterflies tend to stay out of reach (yes, you can see the critters eating grass / insects)

 That’s it! Have a nice day.

ecosystem455

 

Some previous updates:

Weekly Update #68 – The game’s shop

Weekly Update #67 – The Splicing Machine Video 

Weekly Update #66 – The Hatchery Machine interface

Weekly Update #65 – Explanation / recap of some game features

Weekly Update #64 – Why is debugging mandatory?

Weekly Update #63: Tweaking and answering questions about the video

Weekly Update #62: Gameplay video (mobile version)

Weekly update #68

Wednesday, March 25th, 2015

Weekly Update #68 – The game’s shop

Read it on the forum

Hello everybody!

This week I’ll simply do a summary regarding the game’s shop.

pictureShop_455

As you can see on the picture above:

(1) Spotlight: More and more objects are available in shop according to your current level. This category shows the latest items unlocked.
(2) Resources: In this tab you’ll find coins and golden eggs.
(3) Genetics: You can buy here genes pack to use with the Splicing Machine.
(4) Toys: Self-explanatory. Toys mainly relieves Norns’ boredom.
(5) Decoration: A lot of items are present here, which are purely for decoration. Though actually there may be some exceptions.
(6) Ecosystem: You can buy here plant pots (to grow fruit plants) and critters. Naturally occurring flowers, grass patches and insects can’t be bought as they depend of the world.
(7) Others: You can buy here coin machines and nests for your Norns to sleep.
(8) Hide / shows a small description of the concerned item.
(9) Upon buying an object, the game let you place it. However, you can stock objects you don’t want to place immediately. That’s why you can see a “Use” button here: I already have one of these objects in stock.

That’s all for today! Have a nice week

Some previous updates:

Weekly Update #67 – The Splicing Machine Video 

Weekly Update #66 – The Hatchery Machine interface

Weekly Update #65 – Explanation / recap of some game features

Weekly Update #64 – Why is debugging mandatory?

Weekly Update #63: Tweaking and answering questions about the video

Weekly Update #62: Gameplay video (mobile version)

Weekly Update #61: The Twitch Session Official Date

Weekly Update #67

Tuesday, March 10th, 2015

Weekly Update #67 – The Splicing Machine Video

Read it on the forum

Hello everybody,

Sorry about the absence of weekly updates! Here’s one with a short video displaying the Splicing Machine:

As you can see in the video:

  • Each Norn has 8 cosmetic genes, each one impacting the appearance of the Norn. Changing the 1st one will have an impact on the belly, the 2nd one on the pattern the Norn has and so on.
  • There are 12 possible genes
  • There are 4 body types, each gene corresponds to one of them. The body of the Norn is an “average” created from these genes. See for example how the body shape changed when I replaced Bananou’s genes with Feral genes.
  • Two Norns with the same genes will look the same in the Splicing Machine as the preview shows you how the Norn should look with these genes. That’s why Bananou and Brugno seem similar.
  • However, once spliced they can have small differences even with the same genes. If you look carefully, in-game Bananou has 2 white spots on the hips, while Brugno has a white mark on the right arm.
  • The pattern on Norn fur is defined by genes #2 and #3, but the color for these patterns are defined by genes #5 and #6.
  • Time required for splicing depends on the number of genes modified (and the type of these genes).

That’s all! Have a nice week

 

Some previous updates: 

Weekly Update #66 – The Hatchery Machine interface

Weekly Update #65 – Explanation / recap of some game features

Weekly Update #64 – Why is debugging mandatory?

Weekly Update #63: Tweaking and answering questions about the video

Weekly Update #62: Gameplay video (mobile version)

Weekly Update #61: The Twitch Session Official Date

Weekly Update #60: The Science Kit in Colour

Weekly Update #66

Monday, February 23rd, 2015

Weekly Update #66 – The Hatchery Machine interface

Read it on the forum

Hello everybody,

This week I’ll present you a small summary regarding the Hatchery Machine interface:

Creatures_Online_Hatchery_interface_455

When opening the Hatchery machine, you’ll see 2 different sections:
- The “My Eggs” section, which contains your eggs
- The “Eggs Store” section, which allows you to obtain new eggs

From the “My Eggs” section, you can see your eggs and hatch them if you want to (1). You can also see the 8 appearance genes of this egg by clicking on (2), allowing you to have an idea of how the Norn may look without hatching it. If your game is linked to a Facebook account, you can also send this egg to a friend (3).

You have a limited number of egg slots, but you can buy some more using coins or Golden eggs (4).

Click on (5) on the “Eggs Store” section to see which appearance genes each egg can contain (6). Eggs can be bought with energy, which refills automatically with time.

That’s all! Have a nice week!

 

 

Some previous updates: 

Weekly Update #65 – Explanation / recap of some game features

Weekly Update #64 – Why is debugging mandatory?

Weekly Update #63: Tweaking and answering questions about the video

Weekly Update #62: Gameplay video (mobile version)

Weekly Update #61: The Twitch Session Official Date

Weekly Update #60: The Science Kit in Colour

Weekly Update #59: Twitch news and debugging

Weekly Update #64

Monday, February 2nd, 2015

Weekly Update #64 – Why is debugging mandatory?

Read it on the forum

Hello everybody,

Concerning the main advancements of last week:
- We fixed a bug with the “rubber band” (the line you can draw from a Norn to an object on mobile device to give orders more easily) which was not displayed
- We also fixed some compilation errors (Unicode related)

…and that’s all. Sorry to have only some debugging information to share with you once again, but debugging is mandatory (unless you would like to have this kind of Norns).

Have a nice week!

underwater455

Most plants can’t be grown underwater, but some of them can.

 

Some previous updates: 

Weekly Update #63: Tweaking and answering questions about the video

Weekly Update #62: Gameplay video (mobile version)

Weekly Update #61: The Twitch Session Official Date

Weekly Update #60: The Science Kit in Colour

Weekly Update #59: Twitch news and debugging

Weekly Update #58: The Mini-Norn bug

Weekly Update #57: Special abilities and XP

Weekly update #63

Tuesday, January 20th, 2015

Weekly update #63 – Tweaking and answering questions about the video

Read it on the forum

Hello everybody,

This week, we added possibility to switch worlds by tapping on the teleporters. Before that, the only way to change the current world was by using the world monitor (the interface allowing you to see your worlds and in which world each of your Norn is).

C4teleporter455

We also tweaked the volume of some sound effects. Some were quite piercing.

By the way, I would like to answer to these two questions / concerns I have encountered regarding the latest video:
- There are different Norns voices, one of them being much like the old classic Norns voices. Simply, none of the Norns in the video had it. It depends of the Norn.
- If you don’t collect coins / XP by yourself, they will be automatically collected after some seconds, you actually don’t need to collect them one by one.

That’s all! I wish you a nice week.

 

Some previous updates: 

Weekly Update #62: Gameplay video (mobile version)

Weekly Update #61: The Twitch Session Official Date

Weekly Update #60: The Science Kit in Colour

Weekly Update #59: Twitch news and debugging

Weekly Update #58: The Mini-Norn bug

Weekly Update #57: Special abilities and XP

Weekly Update #56: The Localization