Epistory: Lessons learned while switching to Unity

April 16th, 2015 by Sophie Schiaratura

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

April 8th, 2015 by Sophie Schiaratura

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)

Epistory: It all starts with (good) intentions

April 3rd, 2015 by Sophie Schiaratura

FB_avatarMore about the game on indieDB

The beginning

When you start creating a game. When you think you have a great idea to turn into a great game. When that idea has just been tested and when your team thinks it may become that great game you have in mind. There is something you have to do without waiting. You may have already done it during the early design process but the original vision has changed now that you made different rough gameplay tests and added new members to the team. That thing – the title already spoiled it – is defining your intentions.

Whether you call them guidelines, pillars, objectives or mantra, it is the long term vision, the global idea of what you want to do with your project. You should keep it to the essential, as it will serve as a reference to drive the whole production.

Epistory is a keyboard driven game. So that is obviously one of our intentions. But there is another one we have, not so obvious, and which came from its genre. Define the genre was needed to better define the game and communicate about it, and that is exactly why it was a problem.

The Typing Game Problem

Our core feature is the full keyboard control. So I already hear you say that we could just call it a typing game and move on. The problem is that, when I think of a typing game, I have two things in mind – and it’s not just me, a quick google search will give you the same results. First, it is most likely a mini-game or an edu-game. In other words, something I do not plan to play for a long time, or to have fun with. Secondly, I will only type words. No deeper gameplay, no choices. And eventually my computer will remind me that I am not a very good typer!

Do not get me wrong, those games are not all bad – some are even really fun for a while. But they are absolutely not comparable to Epistory: the term typing game gives the wrong idea. In fact, it is probably harder to explain what we try to do with Epistory using this comparison than starting from scratch – but now that we are here, I will try anyway.

How it works - Move screenshot

Playing a game means making choices

What we absolutely want in Epistory is to make it really feel like a game and not just a typing application. For that, we believe that it requires a non-linear experience and meaningful choices. And when I say meaningful choices, I am not talking about a big decision which follows you for the rest of the game – well, not only that – but constant small choices. A few examples in games would be taking the short risky path or the long safer one, exploring the east or the west of the magic forest first, upgrading one skill instead of another… Even positioning your car in the fastest racing game implies constant quick choices. You made them depending on the track, your opponents’ position, your current speed, the ideal trajectory, and so on.

To make those choices meaningful, I try to remember that as a Past – Present – Future rule. The player needs to understand that he has a choice (Present). He has to know what it means from past experiences (Past, in this game but not only). And he has to expect something in the future from his action (Future). If it is not a meaningful choice, the player is not an actor but just obeys the game as there is no other possibility of action.

We made that one of our intentions – even if it is important in every game – to make sure it was applied to Epistory’s design. I am not going to describe Epistory’s gameplay deeper on this article – there are more to come, but we will not fall into the trap of your ordinary typing game.

Main character concept

A keyboard controlled adventure

So Epistory is an exploration / adventure game, and we like to call it like that. It gives the player the opportunity to explore an imaginary world, use magical powers to interact and fight enemies, and upgrade them as he wants.

You should see the typing aspect as an opportunity, not a constraint. Because that is what we did: using a keyboard as the unique game controller to create new gameplay experiences. Not only to type words, and not only to earn points. We like to say that you will type the story – but that is for another article.

Thanks for reading. Don’t hesitate to support us on social networks.

Website coming soon

Weekly update #68

March 25th, 2015 by Sophie Schiaratura

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

March 10th, 2015 by Sophie Schiaratura

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

February 23rd, 2015 by Sophie Schiaratura

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 #65

February 16th, 2015 by Sophie Schiaratura

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

Read it on the forum

Hello everybody,

Unfortunately it becomes harder and hard to find something to say in the weekly update without saying “debugging” and “fixes”. So, from now on, it will mostly consist in some explanation / recap of some game features.

So, let’s start with an overview of the world monitor:

 

worldMonitor_2_455

 

1/ Tap on a world to select it. When selected, the small description as well as the Norns displayed in [2] will be updated. Tap again to go to this world (you can also use the “Go to region” button). Worlds are unlocked through progression.

2/ All the Norns present in the selected world. The maximum number of Norns depends of the world.

3/ The magnifying glass button opens the menu [4]. You can also see an icon representing the current need of the Norn. If the Norn has no important need, nothing is displayed. In case of high hunger or high pain, the icon is displayed in red and a “!” is displayed on the world’s picture.

4/ “Go to Norn” will lead you to the world the Norn is in, “Teleport Norn” will teleport it in the current world.

That’s all! Have a nice week!

 

Some previous updates: 

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 #58: The Mini-Norn bug

Weekly Update #64

February 2nd, 2015 by Sophie Schiaratura

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

January 20th, 2015 by Sophie Schiaratura

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

Creatures Online Update #62

January 13th, 2015 by Sophie Schiaratura

Weekly Update #62: Gameplay video (mobile version)

Read it on the forum

Hello everybody, and happy New Year! :)

COyoutube455

Nothing too juicy to share with you this week, as we are not working on really interesting things, but rather on debugging and stabilizing the mobile version.
However, for those who missed the Twitch session before the Christmas holidays, we recorded a gameplay video (nothing new for those who watched the Twitch session though, it is a similar gameplay).

We wish you a nice week :)

Watch it on Youtube

 

Some previous updates:

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

Weekly Update #54 – 55: Let’s have a Mojito to celebrate!