After fighting an insectile corruption and embracing the power of fire, we left our heroine and her companion at the edge of the Forgotten Forest. Along the treacherous, twisting paths of her adventure, she began to uncover the secret pieces of her story. Now she must fight not to drown under the crushing weight of uncertainty and fight with dignity to restore her inner peace.
Discover new enemies, learn new magic and explore two brand new dungeons full of mystery. Be brave; for there is no turning back on the way to the truth.
After a bug in our save system was found, we cannot guarantee compatibility between the update and the current (Halloween) version. Depending on where you last left the game it will work, or not. Regardless of the state of the save, we recommend a new game because of the work that has been done in the first two dungeons.
Please be aware that this update marks the end of our early bird pricing. Epistory now be fixed at $12.99 due to the major updates that have been done since launching on Early Access.
Thank you to everyone who has supported us on this adventure so far. We hope you will enjoy this new chapter and we can’t wait to hear your feedback!
Epistory needs to establish a subtle, layered narrative voice within its opening moments. Join the game’s writer in a deep exploration of why this story is harder to begin than most.
Wether you’re writing a game, or a movie, or a novel: it’s always difficult to start a story. There’s just so much riding on those opening moments. This difficulty is basically the premise for Epistory’s plot, in which a struggling writer is trying to start a novel. The player assumes the role of the muse, helping the story come to life.
Epistory adds an additional complication: as well as attracting the player’s interest immediately, it must also establish the narrative voice. In this article, I’ll be explaining more about what this means and how I’ve tried to solve the problem.
What’s In A Voice? By ‘narrative voice’, I simply mean the voice of the narrator: who is telling the story? Why? And in what context? Are they speaking to the audience directly? Are they writing a letter? Is the audience an active party in the story, or are it given a camera’s eye view into someone else’s world? Ultimately, narrative voice defines the relationship between the storyteller and the audience.
Most narrative voice is established by its medium and a few quickly-gleaned implications. When a written story starts with a line like “Call me Ishmael” (a laMoby Dick), we instantly understand that there is a person telling the story to the reader. We understand that the narrator has their old world view, and agenda, and feelings. But when we watch a film and a camera sweeps across the Earth – like no human can do – we understand that a picture of the world is being presented to us impartially. We are invited to watch through a window.
Whose Voice Is It Anyway? In Epistory, the narrative voice comes from a writer who we never see. All the words of narration – from the introductory sequence to the writing stretched over the levels – are the words this writer has written in their novel. The player’s goal is to help the writer create the story: typing words and discovering things to encourage the author’s inspiration. This is a very hard thing to explain in-game: not least because we don’t meet the writer. We have to inferher presence. Originally, the game’s script did this the obvious way: it begins with a writer saying “I hate writer’s block! How am I ever going to write this story?”, and quickly settles down into the story itself, “She looked like a lost little girl”. This establishes the narration as the writer’s voice and ensures it makes sense within the context of the game. This works – but it’s messy because it creates two distinct narrative voices. The author’s (“I hate writer’s block!”) and the story’s (“She looked like a lost little girl”). Because we don’t really know which is which, we have to infer every time – and so there’s a constant dissonance. It’s hard to know who is telling the story. Also, writers tend not to ask themselves questions in their own prose, so the voice may not sound authentic to player.
A New Voice I wanted to try and do something a bit more subtle and seamless: using a single voice that represents all the narration. I’ve tried to do this by presenting the story as a work-in-progress and showing the writer’s edits. The theory runs like this: The game begins on a black, foggy screen. A blank canvas. Then some text appears: “Once upon a time”. This is how all fairy stories start, right? The player knows that a story is beginning. But the text is quickly erased character-by-character. The story has changed, the writer’s hand is revealed by implication. The writer tries again, and this time she writes: “It was the best of times, it was the worst of times”. This is how Charles Dicken’s A Tale of Two Cities - the best-selling novel of all time – begins. Even if the player doesn’t follow the reference (and most won’t!), they should understand that the story has been restarted. But this beginning is rejected too, and so it is also erased. The pattern has been established now: the author doesn’t know how to start the story. So, third time lucky, the narrative begins in earnest: “There was a girl. And she rode on the back of a great fox.”. And hey presto – the fog clears to reveal the player-character.
Voice of Reason Because there is only one narrative voice, the player can trust that it represents the words of a story being written around their actions. We build on this start by adding more interactions which make the player aware of the author – and vice versa – by changing text as the player interacts with the world. It’s a subtle idea, and maybe not everyone will get it. I expect most people won’t be able to articulate it. But subconsciously, I believe people will understand that a story is being written around them by an unseen author.
Successful execution relies on two things: using recognisable (or cliched) opening lines, so that the player understands what the writer is trying to achieve (ie, the beginning of a story); and a character deletion effect, so that the player is aware that the writer is deliberately erasing and rewriting text. Sound effects can help reinforce the idea of writing and erasing, too.
This, however, is not the whole story. While we work hard to establish and contextualise the narrator’s voice early in the game – we later sow in a few seeds of dissonance. Because in Epistory, not all is what it seems…
For the next few days we will focuson ironing out the bugs and quirks that were reported. Most notably any save bug that you or we encounter. The game is currently playable in several settings but the save is sometimes a bit dodgy so that is our top priority.
Then, in the coming weeks, we will continue to produce the next chapter of the game. We should be able to deliver it in a month. A month and a half, maximum.
We will of course do minor content release in between chapters with stuff like improved UI and feedback, bug fixes & general polish. We want to avoid players going through a new chapter while it’s only half done because it will ruin part of the joy of discovery.
We are also going to create an unstable branch for the game so you can try our latest advancements before we make it available for everyone. We may also add a separate branch for people wanting to try the new areas before they are finished if you ask for it.
Bite sized news for small stuff. Today: Burning brambles.
Welcome to another installment of our fluffy sweetness. If you missed our Critters gifs last week you can check them here.
Ok! To recap, we had a world quite pleasant to walk in, decent levels and dungeons, epileptic Critters… and a girl riding a giant fox fighting against monsters and corrupted nature. Fighting how? With words. I mean MAGIC FIRE WORDS!
So, here’s the fire animation, shown in our previous paper on art direction, in action. Yes, we know, burning the forest is bad but these brambles were evil, very very evil.
Imagine you’re hanging around with your fox and brambles block the road: burn them! There are monsters on your way out from the dungeon: burn them! There are cute critters… wait… stop. May I draw your attention on the fine and not final spell forging animation before the girl sets the world on fire?
Hope you felt the magic. See you next week for another incredible Fluffy Friday!
Discovery of what unity can do in terms of jiggly bones and overriding animations.
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.
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?
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.
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.
Bite sized news for small stuff. Today: Adding critters.
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*
So, here they are presented with their idle animation. Minding their own business until you come along:
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.
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.
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.
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:
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 !
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 !
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.
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.
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
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
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
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.