
We got animated doors! #pixelart #gamedev

This post talks about 2d maps created in Tiled, and how we implemented walls and
Y-order. You may think about it as Z-order, but as our maps are flat, we only need to arrange things by their Y coordinate.
How do I know which tile in Tiled is passable, and which is not?
Especially that we have such a luxury as thin walls.
My answer is Tiled feature – Terrains (https://doc.mapeditor.org/en/stable/manual/terrain/),
AKA Wang tiles (a good article for gamedevs: https://dev.to/joestrout/wang-2-corner-tiles-544k).
If a side of a tile has a terrain named “wall”, it’s not passable – as simple as that.
This way, our level designers don’t have to mark up the map – the walls are already in the tileset.
So, our objects (and object layers in Tiled) do have Y coordinate, so we know in what order
to draw them.
But what about tiles on a map?
What if our maps have multiple complex layers, maybe even a tree of layers?
What if these layers have similar objects with different Y coordinates, like multiple trees
or pillars or whatever?
Shall the level designer split each object into a separate layer and assign it a Y-order property?
This sounds like too much manual work, prone to error.
Our answer is – automatically split layers into “island” segments, and internally set
each segment’s Y-order according to the lowest tile (with the highest Y).
3 segments for 3 trees on a single layer, with a different Y-order
The next step is to only assign Y-order to segments based on the walls
assigned to tiles of that segment. The engine reasonably assumes that
a wall is on a floor level, and everything above it is fluff – tree top,
wall bottom, and so on.
Think of a door mat:
This is more precise, because sometimes our wall tiles have tiles
both above and below them.
Greetings.
In today’s devblog I’d like to share a part of my journey into the world of game development, as well as give some advice to all those who are also thinking about getting into writing for video games.
I studied in Poland to become an animator, and later in my career I switched to writing screenplays for TV and feature films. Together with my co-writer, Helga, we wrote a few episodes for shows here and there, and successfully sold one feature film, which we’re really proud of. Though, unfortunately the development on that film was halted due to the ongoing war in our country. In parallel to all that I wrote various film reviews and think pieces for mine and my co-writers facebook page. Ours is a small and humble blog, but we did go viral a few times. The blog is what actually led to me being noticed by our team lead, Hugh Hoyland. He had this idea for an old-school RPG videogame brewing in his head, and was in search of a writer who could help flesh out the concept and write the narrative content for the game.
Now, it’s been my dream for quite a while to switch to the videogame medium, so I was quite excited to jump onto this opportunity. However, this was uncharted territory for me and I was lost at first. I was used to writing non-interactive media, where everything went according to my whims. Trying to write with a player interaction in mind was a completely different beast.
My biggest question at first was about the format in which a game narrative would be written. After all, my task was to write a non-linear narrative with lots of branching paths. I remember designing short narrative adventures in Microsoft Powerpoint using hyperlinks, but other than that I had no idea on how this is done by professionals.
Fortunately I knew someone who could help: Brian Bucklew, the developer of an insanely complex roguelike called Caves of Qud. He introduced me to some key concepts about writing games and also recommended some software I could work with. Many thanks to you, Brian!
First, he introduced me to a concept of a Storylet — a unit in non-linear storytelling. You can read more on the concept here: https://emshort.blog/2019/11/29/storylets-you-want-them/
Storylets are what makes writing for a game difficult. A standard document such as a screenplay no longer fits. We need something that can create branching paths, a tree of decisions and variables.
That’s where Brian recommended some engines I could use. The engine is what determines the format in which you will write, so you better make sure you and the rest of the development team are on the same page. You don’t want to be in a situation where you write something big and cool in an engine that the devs don’t know how to implement in the game.
First up is Twine — a free open-source tool for interactive fiction. It does not require programming knowledge and it’s very easy to learn and easy to use. It might seem a bit basic at first, and Twine probably won’t be your final choice when it comes to engines. But it’s a great tool for initial prototyping and testing various ideas.
I used it at the very start in order to demonstrate how my narrative would work.
In the game I can have a situation where you do a quest with many possible outcomes. But for the sake of clarity I’d break the quest down to its most basic components, such as “Player does X” and “X leads to character B dying”, and then I’d put it all on the board in order to see how a narrative evolves. You can also use Twine to make very simple narrative text adventures.
Twine can be found here. It’s free and open source.
Next up is Ink. It’s a narrative scripting language for games, made by Inkle Studios. It’s a very cool tool for making your interactive story more stimulating in terms of visuals and audio. It’s very cool and also you can integrate it with a game engine such as Unity or Unreal.
Then there’s Inform7, a language for writing parser games. In case you don’t know, parser games are a genre where you give computer commands by typing complete words and sentences. This might be not a great fit for writing a modern RPG, but if you want to create something like an old-school adventure game, Inform7 is your ticket.
Finally, I’d like to share what tool I ended up using — Articy Draft. ArticyDraft is an purchasable app you can use for writing you can use for complex video game narratives.
I picked it up because the devs behind Disco Elysium said they were using it.
On the most basic level you can use this app to write branching stories, add images to them, and then you can test them inside the app to see how it all looks. Additionally, you can create pages for character and location descriptions, draw maps, create outlines for the plot etc. You can even do a little bit of scripting, such as adding RPG skill checks.
The app it’s also versatile. You can use it to write lore for your game, diaries, design docs. It’s pretty great. It also has Unity and Unreal integration tools, though I can’t speak for them as we are using a custom engine for our game. I’ve been using Articy Draft 3 extensively for our project, and also I now use it for almost all of my narrative writing.
It currently costs 69.99$ on Steam, though be aware that Steam has only the older 3.0 version. Or you can purchase a subscription on the developer’s website for 6,99 EUR. There’s also a free version that has some limitations. You can try it out to see if Articy is to your liking.
Today I want to tell you about how our game, Stepsons of the Universe, came to be and how it changed over time.
Originally “Stepsons of the Universe” was an idea in @HughHoyland and his friend’s head.
It was a Classic Roguelike with a generation ship as its setting. The ship’s decks mapped naturally to roguelike levels. Initial concept combined tropes of every sci-fi work they could think of: bits of Heinlein and Asimov, “Aliens”, “Predator”, Larry Niven’s “Smoke Ring” etc.
Now, I haven’t been on this project since its inception. I joined way later as a writer for the game. There was another writer on the project before me.. Part of my job was finding out what the game was even going to be. The plans for the game were initially very ambitious and also pretty vague. To illustrate what I mean, the original writer had a faction called “hippies”, and it was described by him as a bunch of careless slacker that didn’t do anything of use. This clashed pretty hard with what was otherwise a pretty serious tone of the story. It was also hard to fathom a faction surviving in harsh conditions, when they didn’t do anything for said survival.
The biggest goal for me was to identify what was at the core of the story. What’s unique about it? What could be the selling point? For me, it was the concept of the world being split into different time periods. That sounded like something I haven’t seen that often before. A lot of CRPGs were set in various periods of our past, a lot toyed with the idea of various old ideologies making a comeback in unconventional settings (Caesar’s Legion from Fallout: New Vegas comes to mind), but no game I know took you on a journey through all of history.
Ok, “all of history” might be quite an exaggeration. We’re a small team, we can’t make something so detailed and big. But the general idea was too compelling for me to throw away. I was hooked by the concept of writing a game where the player interacts with an entire course of history.
Right now we are focused on making a vertical slice of the game, and the first in-game act takes place in a Neolithic era. The first act went through many changes, but as of now it is fully written and we’re doing our best in order to bring it into a game-ready format. It’s a lot of work, as it turns out, and we’re learning as we go.
Made from this spritesheet:
{
"name": "Vertical door, 2-tile",
"door": {
"walls": [
{"offset": [-1, 0], "wall": "east"},
{"offset": [-1, 1], "wall": "east"}
]
},
"multitile": {
"tileset": "ArthurVista-dors-4export-v1.0",
"static_tiles": [
{
"name": "opened",
"fragments": [
{"offset": [-1,-1], "id": 34},
{"offset": [0,-1], "id": 35},
{"offset": [-1,0], "id": 44},
{"offset": [0,0], "id": 45},
{"offset": [-1,0], "id": 96},
{"offset": [0,0], "id": 97},
{"offset": [-1,1], "id": 54},
{"offset": [0,1], "id": 55},
{"offset": [-1,2], "id": 64},
{"offset": [0,2], "id": 65}
]
},
{
"name": "closed",
"fragments": [
{"offset": [-1,-1], "id": 34},
{"offset": [0,-1], "id": 35},
{"offset": [-1,0], "id": 44},
{"offset": [0,0], "id": 45},
{"offset": [-1,0], "id": 70},
{"offset": [0,0], "id": 71},
{"offset": [-1,1], "id": 54},
{"offset": [0,1], "id": 55},
{"offset": [-1,2], "id": 64},
{"offset": [0,2], "id": 65},
{"offset": [-1,1], "id": 74},
{"offset": [0,1], "id": 75}
]
}
],
"animations": [
{
"name": "open",
"fragments": [
{"offset": [-1,0], "name": "door-v-open-upper-nw"},
{"offset": [0,0], "name": "door-v-open-upper-ne"},
{"offset": [-1,1], "name": "door-v-open-upper-sw"},
{"offset": [0,1], "name": "door-v-open-upper-se"},
{"offset": [-1,1], "name": "door-v-open-lower-w"},
{"offset": [0,1], "name": "door-v-open-lower-e"}
]
},
{
"name": "close",
"fragments": [
{"offset": [-1,0], "name": "door-v-close-upper-nw"},
{"offset": [0,0], "name": "door-v-close-upper-ne"},
{"offset": [-1,1], "name": "door-v-close-upper-sw"},
{"offset": [0,1], "name": "door-v-close-upper-se"},
{"offset": [-1,1], "name": "door-v-close-lower-w"},
{"offset": [0,1], "name": "door-v-close-lower-e"}
]
}
]
}
}
My programming language of choice, Rust, allows you to write code in independent libraries of modules, called “crates”. Other languages do it too, it’s nothing new, but in Rust it’s seriously easier, and the benefits are immediately usable.
This has this effect on our progress: a programmer can work on independent crate for months, without a visible effect on the main project. It happened when we worked on crates for:
Now I can declare that Thin Walls are officially ready for beta testing.
Wait, what Thin Walls?
In short, this is one of my bad decisions that prolong development for months and lead to overengineering. It is a gimmick – I wanted to have not only traditional roguelike full-tile walls, but also walls between tiles.
This broke a cascade of things:
But now it’s usable in the game engine. Thanks to this, I have the map from an earlier post running in the engine. Green lines are a debug tool for actual walls, red circles are tile visibility.
I’m finally working on something that resembles a game. This something is an example for Combat crate. In Rust, again, there is an out-of-box mechanism with which you can create examples for each crate, for documentation, demonstration or learning purpose. I also use them to try out my code design for this crate.
In this crate, that depends on Thin Walls above, you actually control a character, and, tada! you have a team of enemies that can attack you with melee or ranged attacks. This crate is about creating the dumbest AI that I could think of.
It’s still blocked by the lack of pathfinding and some features in visibility on Thin Walls, but hey, I’m getting close to that.
Here is the Combat crate example. Looks a bit like LaserTag room, isn’t it?
Some of Snorri’s new animations and ArthurVista’s environment. Slightly NSFW… well, not really. We just need the naked base to start animating different clothes on top of it.
A feature that was long due, integration with Tiled editor.
It uses so called Wang tiles to mark up the walls on the map, so the editor can design not only visuals, but also a topology of the map. In future, we will expand the number of tile kinds that game engine “understands” in the map.
It’s still rough around the edges, rendering order needs to be improved, but it’s the beginning.
Temporary character credit: body/female/reptiles/red_winged.png: by Nila122, Johannes Sjölund (wulax), Stephen Challener (Redshrike) on OpenGameArt one two three.
Hello everyone. It’s been a while since we posted on this blog, so I felt like we should do a little re-introduction about our studio and the project we’re working on.
For the past several years, we’ve been working on a role-playing video game called “Stepsons of the Universe”. It is a game, in which you explore a strange anachronistic sci-fi world, where humanity has split itself into communities, each mirroring a specific part of the real-world history.
You begin your journey in a rural area, where tribes of people live as if the Neolithic period has never ended. You’ll have to find a way to survive in these harsh conditions, as well as take part in local conflicts. As you venture further into the world, your surroundings change, almost as if you’re going forward in time. You’ll find places that are stuck in the Medieval era, or in a Renaissance era, or maybe a series of settlements engaged in a miniature version of the Cold War (though, do keep in mind that the specific historical eras, that are going to be featured in the game, are not currently set in stone).
A mock-up image using in-game assets of how the game is potentially going to look. Not the final product
As you progress, you’ll learn new skills, acquire new equipment, and complete various main and side quests. Along the way, you’ll have to interact with an AI named SHTURO and share information with it, as you both attempt to find out what happened to humankind in this universe and how to stop an incoming world-ending cataclysmic event.
Our ultimate goal is to create a unique role-playing experience with an engrossing narrative, a fast-paced dynamic combat system, as well a distinct visual style. We want to make a game inspired by the classics that we grew up with, such as the original Fallout, Rogue, Chrono Trigger, Ultima IV, and many others.
Players will be able to craft their own character, with a certain set of skills and stats, each of which will affect their future play style and unlock certain branches of the storyline, some of which are only available to characters with specific stats.
The game will feature a turn-based tactical combat, inspired by the likes of Jupiter Hell and All walls must fall. Both the player and the NPCs make their turns at the same time, so when a player takes a shot from a gun the enemy does so as well, and bullets, projectiles and other types of attack all take time either determined by a specific animation, or a speed of projectile. So as the enemy shoots at you, you have a chance to dodge or take cover, as the bullet takes time to reach its target. It’s a much faster, more aggressive style of combat than the ones we usually see in turn-based RPGs, where in crowded battles you can spend a lot of time just waiting for all enemies to take their turns.
What’s unique about our combat system is that the players will have a choice to either take a combat action, or a speaking action. Instead of swinging away at the enemy or shooting from a bow or a gun, you can try talking to them mid-battle, persuading them to stop fighting, betray their comrades, or maybe intimidate them into surrender. This action will also take time, so you’ll have to choose between fighting and talking. Not all battles can be resolved with words though, so be careful. This particular aspect is inspired by tabletop role-playing games, where there is always an option to talk as a secondary action during your turn. This part of role-playing experience has been historically very overlooked when it comes to translating tabletop rules into the medium of video games.
A few words about our team
As of now, we’re a small and humble bunch. We call our team “Spooky Action at A Distance”, or SaaaD for short, which is a cheeky reference to the fact that most of us live quite far from each other and have never met in person.
I’ll start with myself. My name is Snorri, and I’m the narrative lead on the game. I’m the one writing the story, and the dialogue, I design and plan all the quests, and, as of recently, I am also making animations for the game (gotta use that Animator’s degree for something). Before coming onto this project, I’ve been mostly writing TV Shows and feature films. My short film, “Hyperion: a scholar’s tale” has also been featured in an International animation festival Animator in Poznan.
Next up is @HughHoyland, who is the project founder as well as the lead programmer. “Stepsons of the Universe” is an old dream project of his that he originally started with some of his friends. He has brought me onboard in 2021 and we’ve been working ever since.
The art of our game has been so far mostly done by the talented arthur_vista (you can find more of their work here). They make our sci-fi nonsense look extremely pretty and appealing to the eye. We are extremely lucky to have them.
There is also Maria, a Senior Researcher in Ukrainian Centre of Marine Ecology. Decided to switch her career to software development and is now making great progress in Rust, because marine research in Ukraine will be hazardous until the total demining of the Black Sea.
It’s about now that I should also point out that all members of our team are from Ukraine, and most of us are still living there despite the 2022 invasion. We’re making good progress on the game, but as you might understand, working while under constant threat of bombing raids, blackouts, and other hazards is quite tough. We have already lost at least one member of our team to this war, and we can’t know for sure what will happen to us next. So while we’re committed to finishing this thing, there will most certainly be setbacks and maybe even bigger problems. Please, be patient with us.
As of now, we have a functional game prototype, over 250 pages of written dialogue and quest descriptions, and some very nice pixel-art character models and assets.
I’m hoping to give you more updates in the future, and starting from now I will try to write more development updates on this page.