All Hail Temos cover
All Hail Temos screenshot
Genre: -

All Hail Temos

Anatomy of an Adventure - Devlog #7

The standard model for RPGs is to have a main quest and side quests. The main quest is usually a big epic world-ending problem, that the player is taking the part as a Chosen One to solve for a unique reason. There is a big bad guy, and they need to be stopped, and you need to stop them. Along the way, you can farm, collect items, and help people out in various ways.

It’s a good model, and it there are a lot of good games that use it. All Hail Temos is doing something different.

All Hail Temos puts you in the position of a non-Chosen One, so you are not foretold to solve the world ending problem, and the world is not ending. Instead there are many problems and situations in the world that create adventures and opportunities, and you can live heroically solving or taking advantage of those situations.

Side quests are usually very simple, and are also usually disconnected from other events in the world, but in All Hail Temos, many adventures are connected by some characters you could interact with on a previous adventure, changing your future outcomes.

So how does this work?


Anatomy of an Adventure



Let’s start with a visualization, an adventure flowing from left to right:



The blue, green and red arrows represent different ways you found this adventure:

Maybe you are travelling with someone who wants to do something, and they introduce you to this adventure.

Maybe you run into a group of cultists performing some ritual and decide to introduce yourself, or sneak in and see what’s going on.

Maybe you are asked to rescue someone being held captive, and have to break into a fortified location.

There can be several or many ways into a given adventure, but once you start it, most of the situation flows forward from there. There can be different ways of dealing with the problems in the adventure, and then eventually the adventure will come to a close.

When the adventure ends, depending on how you started (blue, green or red), you will have a contextual ending to the adventure, which may open up new adventures, or resolve the issue.

In any case, the world is now changed, the characters you interacted with have changed, and the adventure is complete.

How will this affect the gameplay?



If you previous made choices that block the red path into an adventure, maybe you can still find the blue or green path to finding it, or maybe choices you have made have cut you off from it.

Branching narratives mean that you get different results, and different results over time can create unique situations where something may or may not be available by the time you find it.

I think this will keep the situations feeling more natural and connected with your actions, and am hoping that this creates possibilities for replayability.

Conclusion



This was a short introduction to the method I am using in All Hail Temos to create adventures that live out in the world, and giving you many ways to find them. I’ll write more about them in the future, once I figure out how to do it without too many spoilers.

If you’d like to learn more about All Hail Temos, or follow the development, please Wishlist and Follow.

No Carry Weight Limit - Devlog #6

In many RPGs, and specifically Scrolls-like games, carry weight is something that is there to add realism to the game. The items you pick up have a weight, and you have a limited amount of strength and endurance, so the more you carry, the slower you should go. Or, there should be a limit to what can be carried, because it is more realistic that way.

After you have reached your maximum carrying weight, you either can’t move anymore, or you move very slowly. There could be a smooth transition to slowing down, or it could have a staged effect, where you move normally until you reach a threshold and then it changes.

I think these are good hardcore features, and intend to offer them as difficulty options for players who want different sorts of limitations on their play, such as a later survival mode.

But for the default case in All Hail Temos, I don’t want carry weight to impact the player at all. They can carry as many things as they want, and it will not effect them in any way, besides having to deal with a larger inventory, which creates it’s own problems, but is a different design problem.


No Default Weight Maximum?


But why remove this limitation for the default difficulty? It adds immersion, and it creates a sense of consequence for picking things up.

As stated above, I will have difficulty settings to enable or disable different options that can change the way the game is experienced, but I have a specific vision for the default experience that I want to achieve.

Removing the carry weight limit, and any penalties for carrying a lot of weight changes several aspects of the game, but let’s look at them first from what these effects are when a carry weight limit exists:

The player is adventuring, and hits the carry weight limit. They must now change their behavior, in the following ways:


  • Stop searching for and looting items, reducing progression
  • Start min-maxing cost to weight pickups, making looting more work
  • Eventually run out of min-max cost weight as well for their area, and stop looting


When a player wants a higher level of immersive difficulty, this can be fun, but in other cases this is not fun. This stops or slows down the adventure, because now the player has to go back to sell items, or know they are stopping progression, or know they have to come back later just to mule items around. None of this is fun for people not looking for this kind of extra work as part of their immersion.

So, I will just remove the carry weight as a limitation, and you can carry a nearly unlimited amount of items. I have made the world physics rules work to support this, so this is normal in the game world, due to normal things having magical properties, such as storage for items being a type of portal system putting items into a storage dimension.

Without a carry weight limit, you stop adventuring when you have a new goal you want, such as selling your loot to go buy something better, or returning to talk to NPCs about some quests, or a higher level goal you have, rather than because you ran out of carry weight.

Carry vs Equipped Weight


I think a more interesting weight system is your equipped weight, which are all the items you are actively wearing or wielding.

These items do effect your character, based on your stats and skills, it will make your character move or act faster or slower, and may stop them from being able to wear or wield some items, because they do not meet the minimum stats for doing so.

In this way, for normal difficulty weight of items still matters, but it only matters for the items you are actively equipping.

Conclusion


All Hail Temos’s design is attempting to focus on the fun of playing in an open world, with many adventures to take part in, and not stopping those adventures due to limitations that normally aren’t fun.

If you’d like to learn more about All Hail Temos, Wishlist and Follow the game on Steam.

First Person Melee Combat - Devlog #5

8 Directions & Combos



Melee combat in All Hail Temos is based on two systems:


  • An 8 Directional Swing system, based on the direction you are moving.
  • A customizable combo system, the sequence of 8 directional swings you perform, while keeping a chain of hits.

The purpose of these systems is to provide different methods of attacking your opponent, and each directional will have a different Rock, Paper, Scissor type effect with various armor and actions of your enemy.



8 Directions



For the sake of this article, I will refer to your movement direction as compass directions, so pushing forward on the keyboard or gamepad means north. Pushing left means west, down is south, right is east.

If you are moving west, then your attack will come from the east, travelling west. Matching the direction you are moving. If you are moving east, then you will swing from west to east, matching your movement.

Moving north east (up-right) means your swing will come from south west (bottom-left) to the north east, as you are moving.

If you move forward, it is a thrusting attack forward, and backwards is an overhead swing.

Per weapon type, such as one handed medium sized melee weapons, like a sword or an axe, these movement will always be the same, when you execute any given direction. This will allow you to learn how to move with respect to an enemy to strike them.

Strikes in this game are made with a collider close to the weapon, and fairly well-fitted colliders on all enemies, so to hit them, your weapon must actually collide with the area of their mesh… where you can see them.

This should improve the action portion of the game, as there is a high skill ceiling for hits and misses, as there are not large hit boxes, and hits only happen with a correct collision of the weapon.

Because of this, your movement must be based on making hits, not just aligning the enemy in front of you and attacking. You must know which 8 directional strike you will perform and then where you should be relative to the enemy to get a hit, so there is a lot of room for a high skill ceiling on movement, positioning and timing your strikes.



Customizable Combos



Combos are meant to take this system further, so that if you can get consecutive strikes, in a particular pattern you get a critical strike for the next strike. If you can keep the chain going and complete another combination, then you can keep increasing the next critical strike.

Combos are customizable because you can pick your own combinations. There are defaults, but you can pick any pattern of combination that you want.

The trick to stacking combinations, is that you can never do the same combination twice in the same combination stack. So you must make and memorize new unique combinations, and then be able to land hits without missing to progress your combination.

The First Collision is the Hit



Weapon colliders are fairly small so that you must actually strike the enemy with where your weapon is to land a hit, and the weapon will detect what it hits first and after it either hits a shield, or a body part, it becomes inactive, so the rest of the swing will not effect anything.

This means if the collider of your weapon first hits your enemy’s shield, or they are blocking you, then you will have to deal with that penalty, doing reduced or no damage to them.

If they are blocking or holding a shield, and your weapon hits their body first instead of the shield or blocking area, then you landed a full strike on them. So combat is based on making your weapon hits land, rather more reliant on stats and buffs. After hit has occurred, on a body or a shield, then there are normal RPG calculations to perform any damage reduction, and what damage is taken and any effects that are delivered, like electricity or fire.

8 Directions, 8 Effects



Each directional hit has a normal effectiveness, and a special effectiveness. If you hit someone, you hit them. But the direction you swung from will have an additional effect on the opponent.

Attacking north is a thrusting attack with a sword (or a push-bash with a mace or axe), and has a Piercing force that has a Rock, Paper, Scissors interaction with the blocking type and armor type of the enemy.

If the enemy is blocking, there are 3 blocking type:


  • Wide: A wide block is like a shield.
  • Narrow: A narrow block is like using your sword, or a buckler.
  • Sticky: A sticky block is either using something like a chain, or it is a technique that follows the attack, and “sticks” with it, to capture the attack.

These work in Rock, Paper, Scissors fashion with the 3 attack types:


  • Lateral
  • Vertical
  • Diagonal

The Rock, Paper, Scissors formula goes like this:


  • Vertical beats Wide
  • Lateral beats Narrow
  • Diagonal beat Sticky

And secondarily, as R.P.S. does:


  • Vertical ties Sticky. Vertical loses to Narrow.
  • Lateral ties Wide. Lateral loses to Sticky.
  • Diagonal ties Narrow. Diagonal loses to Wide.

Thrust (north) and overhead (south) are vertical. East and west are lateral. NE, SE, SW, NE are diagonal.

Picking the correct attack can cause more damage to be delivered, by neutralizing the effect of the armor or the block. So knowing your enemy, and how to defeat them can make your combat more effective.

Sneak Attacks - Being Unaware



When an NPC is unaware of you, you get a bonus because they are not defending their vital organs.

If you are performing a melee attack on an unaware enemy, you get a 2X damage increase, because it is assumed you can hit a more vital area due to them not defending themselves at all.

With a ranged attack damage is only 50% higher, as you hit will them but are not able to pinpoint vital areas.

There is an advantage to shooting unaware enemies, but it is not immediately a dominant strategy due to being out of balance.


A Feather Sword attacks from right to left. Feather swords make enemies float like zero-gravity.

Skill Level Ups



Skills are leveled up by using them, which gains each skill independent XP, and an overall XP for the entire skill group. Each skill and skill ground can level up, granting them the ability to gain more skills.

To actually get the new skills, or increase the level of a skill. You need to visit a Shrine of Temos, and exchange the XP accumulated in your skill to either level that skill up, making it more powerful, or

Skills are sometimes tunable, so that you can choose to expand more stamina for more power. This way you can tune how you want to use your resources to deal with problems. Super Jump could be tuned to jump less far, but use much less stamina so it could be used more often.

Hit Colliders



Hit Colliders are close to the meshes, so for the sword object, the hit collider will be close to the sword model, and the colliders for enemies will also target limbs fairly close to the model.



Sword Collider is wider than the sword to ensure a hit is detected when swiping past small objects.

The benefit of this, is that is makes the gameplay more possible to be precise with target strikes.

Gear and skills will determine your characters ability to strike through armor and blocks, but the configured for hit colliders is very near the visible mesh, so if your sword actually hits the shield, then that is the place of contact.

In Melee combat, the first collision found will be the hit, and if the animation takes the model through further collisions, those do not count towards the hit. So if you hit a shield, that is where the calculation is made. You may still break through the shield and cause damage, but it will be reduced, or you may be completely blocked by the shield.


Hit colliders on a spiders limbs and body so different targets can be hit or can block you

Same with whatever kind of clothing you are wearing, it will test the hit, and determine the damage that makes it through the clothing, such as metal or leather armor, versus fabric clothing.



Consistent Strikes



When you swing an attack, depending on the skill and weapon a different animation will play in each of the different directions or combination attacks, but for a given weapon and skill level, you will always have consistent animations, so you can learn where your sword will land at a given time during the strike.

The strikes are designed to follow same path every time, allowing you to be able to learn where they will be, and when, so you can get a strike on the target you are aiming for.

It’s design is intended to fell “Analogue” like a pinball machine, everything is moving, the enemy and you are both changing your positions, and you are looking in different directions, and the timing of the swing must be matched the distance from the enemy, and your angle to the enemy, as the sword’s collider must physically touch the the leg collider first, before touching a shield collider, so that it will hit the leg. Otherwise it hits the shield

This gives the player ultimate action control over where the collision occurs.

Hit Stops



Hit stops are a simple effect where the character hitting, and character being hit have an slight animation pause to add more weight to the strike, but making a tiny slow down.

This has actually been with us since one of the first video games ever, as Space Invaders had a pause to the player and invaders on a bullet striking an invader.

In All Hail Temos, the hit stop pauses the animation of the character doing the melee attack for a few frames, and the character being struck by the melee attack for double those frames. This gives weight to both characters, but with a larger penalty for the one being struck.

This also provides another strategic element of striking, in that all the enemies around that are not struck are not being stopped, and can still move and attack the player during those frames. This will not create any significant disadvantage, but it does slightly change the playing field as you strike or are struck, along with improving the feel of making contact.

Hit Window



During the sword swing animation, there is a “Hit Window”, where in that time if the collider of the sword will hit the collider of the enemy. In this time there are different strengths of damage, so that in the early phase it may do less damage, and in a later phase it may do more damage, and this damage slides all the time, so getting a different timed hit will deliver a different force, again giving you control over whether the attack does more or less damage.

Feedback will be given in different sizes (ex: larger flash effect) the more damage is done, so the timing can be learned just by playing, without studying any information how when attacks are more powerful. It will be obviously when the hits occur which hit was more powerful.

As the player gets used to timing the strikes, the strikes will become more effective. The changes in damage is based on what the weapon is doing during that portion of the strike.

Like swinging a baseball bat, there is a time when the bat delivers the most power, and other times where it strikes but transfers less force. And there are times went hitting with the bat would effectively not transfer force, which is outside the “hit window”.

How does this affect gameplay?



I think a lot of this is fairly straightforward in how it effects practical gameplay, so I will instead go into more foundation of how it effects gameplay as a structured design.

For instance, Combos require a kind of positioning and timing still, because to advance the combo, you must know what position you must be in for a given strike, and set up the strike with your stepping movement.

Since you can set up the combinations yourself, this allows you to figure out which stepping patterns work best for you against different enemies. The skill has a multiplier on stamina, so as you complete the combo, the moves regenerate stamina on combo complete and also do more damage, so that chaining a combination move builds up magical charge, which makes the attacks more devastating.

Conclusion



These are the different factors and features of melee combat, which is designed to be a system for controlling the direction of your strikes, while having fairly precise colliders for weapons and enemy targets.

This can hopefully allow for a wide degree of skill to be developed at hitting enemies with weapons, and a very fluid feel to combat, as everything is about timing, and distance and direction, like any physical engagement would be, which should hopefully give a good depth to the combat, along with the item powers, magic, skills and progression that effect how the stats effect the outcome, and affect the health and stamina of the enemy.

For players less interested in deep actions, button mashing will still hit the enemy frequently enough, but they won’t get the benefits of chaining combinations of hits, with the damage increase and stamina regeneration.

If you’d like to learn more about All Hail Temos, please wish list and follow.

An Open World Branching Narrative System - Devlog #4

In my Scrolls-like first person open world RPG All Hail Temos, one of the most important systems is the Narrative System, which handles conversations between the player and NPCs, or NPCs and NPCs, or NPCs speaking out loud in exclamations, and is also in charge of managing the quests and a good deal of the world logic.

There are a lot of ways to approach this, and one popular way is to use the type of branching dialogue system that Skyrim or Fallout uses, in conjuncture with day-night job schedule system and a task based quest system. This is a popular method, and is used in a lot of RPG games with different kinds of setups. Some are more dynamic, and some are more statically scripted.

One of my primary concerns was that I want to be able to make the narrative content inside All Hail Temos (AHT) to be absolutely gigantic as the game development progresses, so that years and years of writing can all live together, and still maintain it’s logic and cohesion, and be able to be worked on and developed. And I also needed it to not be too onerous to make additions or understand what is going on.

Just describing a summary all the different design points I wanted inside this system would be a full blog post in itself, and I’m looking forward to writing about it, but first I should give examples of how the system actually works, and how I build it.



Interactive Fiction - Ink Lang.



Here’s a list of talks about the Ink language developed by studio Inkle:



Ink is the language I decided to base my system on, because of their design goals of trying to keep writing the dialogue as close to writing a novel as possible, which is the most writer-friendly, and their very clever methods of using very simple data to control complex data in the massive chaos that a branching story creates.

The basic tenants of Ink’s data usage that interested me are:


  1. All data stored is just a named integer: ex: “times angered” = 0, 1, 2, 3…
  2. All data can be treated as either a “counter” or a “state”. A counter is just the above, a named value that goes up and down: angry = 6
  3. A state is a list of ordered named counters under a label, that can only be 0 or 1, and when a state is active (equal to 1), all previous counters in the ordered lists are set to 1. ex: lifespan: born, alive, dead. If I set the state to “alive”, then born and alive are both 1, and dead is 0. This can never go backwards, only forwards.



Example state group “lifespan” with 3 states, only flows one way.

That’s it. Those are the core data rules. Counters are named numbers. States are a list of names that are either 0/1 and can’t go backwards, and all previous items are set to 1.

This is simple and brilliant, as it is a toolbox that can do almost anything, but has the one important constraint that states only go 1 way, and anything in the order of the state items are always true (1) if a further along item is true.

But, Ink was created for writing interactive fiction, not a 3D open world. They have begun to expand what they use it for, and Heaven’s Vault has a 3D style movement interface, but it is ultimately reading very much more like a choose your own adventure book than something like Skyrim or Fallout: New Vegas, which have a lot more flexibility in where you are, and who you are talking to, and a very dynamic context.

My Narrative System - NAR



NAR is what I’m calling the All Hail Temos narrative system, as it is good for the ending of text files (.nar), and it’s short and descriptive and doesn’t appear to be used by anyone else according to Google. I started trying to adapt what Ink was for an open world game, where there are often many different narrative threads or quests going on at any given time, and the player can pick and choose what they want to do now.

There’s a lot more to this freedom, and some of it is very similar to how Ink provides flexibility, but other aspects of it are quite different. For one, Ink is designed primarily to deliver a narrative and any other gameplay has to be tuned to work with this. I think Ink could be used for this kind of open world RPG game, but it is not purpose suited.


Here are the basic types of interactions that I want to allow with NAR:


  • Approaches: An NPC approaches the player, and starts the conversation.
  • Barks: An NPC says something to themselves or another NPC within earshot of the player. 2+ NPC might have a short conversation.
  • Replies: An NPC doesn’t have any conversations available, but can reply with a short response, which might be general or tuned to the context of an active situation.
  • Prompts: This is the primary method for starting a conversation, which a player can ask an NPC about a subject, get directions, get or progress a quest, or any other intros into a conversation. Prompts can link to Dialogues, or have a short question and answer directly.
  • Dialogues: When a player selects a Prompt and it is longer than question and answer, they are redirected into a Dialogue section. These can branch, go into depth, or redirect to other dialogues. In NAR, I call these “dialogues”, but I prefer to refer to them as conversations as they may have more than the player and 1 NPC. Any available NPCs could join in on the conversation, and they can trigger events in the game, which makes all dialogues a type of simple interactive cut scene.
  • Stages: This is where in the world an NPC is at the moment, and can have different Stage Stations they move between, such as doing a patrol, or working on a blacksmithing anvil, or standing at a sales counter. The NAR system handles the placement and activity of all NPCs that aren’t in combat or following the player as a companion.
  • Stage States: Every stage can have multiple states, such as a store having day and night states, such that in the day it has a sales person in it, and the door is open and chairs are available for sitting, and at night the door is closed and there isn’t a sales person and the tables are put on top of the tables. States can also be used for events, such as monsters attacking a town, then NPCs would be in different locations, doing different things (ex: defending the walls), or it could represent a change in the narrative, such as a store having had a fire, and now the inside is burned and the furniture is gone.


These are the core elements of the NAR system, so instead of having NPCs on dynamic schedules where at 8AM they go to work and 5PM they go home and eat and 10PM they go to sleep, I do essentially the same thing but with stages that use counters and states inspired by Ink.

An Example




Let’s see an example of some NAR Prompt data to see some of the elements in action, I’ll crop it to 2 prompts to give the idea without getting too long:

== ENTARA_WORK_FARM == { AtStageState(protect_farm_intro, protect_farm_met) } #p:1
- (entara_work_farm)
* (entara_work_farm1) !{protect_farm_intro} [Your Farm?][House]
You: Nice to meet you, is this your farm? -> ENTARA_WORK_FARM_INIT_OPEN #line:5001
~ Advance(protect_farm_intro)
* (entara_work_farm2) !{protect_farm_intro} [Looking for work][Work]
You: I'm looking for work, do you need anything done? -> ENTARA_WORK_FARM_INIT_WORK #line:5002
~ Advance(protect_farm_intro)


To start with there is a == TOPIC_HEADER == which has a {condition} and a #tag. This tells me if we can use any of these prompts, based on whether all the conditions are true. The tag in this case gives me the default priority for all these topics, #p1, which is high priority. All prompts that meet the conditions are given to the player, and just sorted in order. If there is 1, or 3, or 30, the player will see them all.

I try to give 3-4 choices for any given topic, but there might be multiple topics active, such as asking for directions, which are lower priority. In practice, the list won’t get that long, but I don’t limit it, I just prioritize which are first based on priority and what you have been talking about or doing recently.

Once a topic has been selected, it will run it’s course and can’t be cancelled until you finish it, so I keep them fairly short, but once completed you will never see it again. The conversation element happened and is done. It’s recorded in your Journal so you can be reminded of it, but I don’t leave it as a grayed out option which is popular in some games. You can bring up your Journal at any time, and it will help you read relevant conversations in the past.

There is a bunch of markup here in the prompts, similar to Ink, but I also have this [Short Text][Icon] option for optional radial wheels for gamepad players, and I also always show the first link with “You:”, the player, so you don’t have to guess what you will say if you select this prompt, you can see it. Mouse and KB players will get a list of choices, which may get abbreviated, but also see the full option.

Both of these lines redirect to the same sub-topic (Prompt -> Dialogue) ENTARA_WORK_FARM_INIT_WORK.

There are also #line:5002 type tags which are used for playing audio files and translation into other languages, and a command line with ~ Advance(protect_farm_intro) that advances a state so we know we have started this line of conversation.

States and Conversations



Here’s an example of the states related to the above prompts:

states:
protect_farm: protect_farm_intro, protect_farm_met, protect_farm_know, protect_farm_find_exploit, protect_farm_success, protect_farm_fail




The overall state name is “protect_farm” and it has 6 state values in it, which are all set to 0 when a new game is created. With one of the above topics selected, we advance the state to protect_farm_intro, which sets that to 1 (true) and the rest remain 0 (false). Once this is set, it can never be unset. We can trust that this state will always be true for any narrative test we want to do. If I were to advance to “protect_farm_fail” , then all the states with be 1 (true), and could never be changed.



There will be an art to ordering states such that it always makes sense which order they are in, as the flow of logic can only go 1 way. Should fail be last, or success? It will depend on if something could fail, but then be fixed and ultimately succeed. In this case, you can succeed, but ultimately somehow fail, or it could just stay at success and never advance to fail because the option isnt available or wasn’t selected.


Starting with 1 prompt, a trimmed example of branching dialogue.

Here is the conversation that continues, in part:

-- ENTARA_WORK_FARM_INIT_OPEN --
- (entara_farm_open)
- +
Hygara (pleased): Yes it is. Well, I rent it. You were just at the mansion of my land lord, did he ask you to come here? #line:5021
~ Set(offer_work_2)
~ Advance(keep_farmer_met)
* (entara_farm_looking_around) !{offered_work} [Fighter][Combat]
You: I'm just looking around. He asked me if I had a job and I told him I was already employed, so he told me to leave. #line:5022
Hygara: Where do you work? #line:5023
> (entara_farm_intro_myself) [Fighter][Combat]
You: I am a new recruit to the Lord Mayor's service. #line:5024
> (entara_farm_intro_myself2) [Explorer][Explorer]
You: I'm an explorer. #line:5025
Hygara: Do you always walk around the backwoods when you arrive somewhere new? #line:5026
>> (entara_farm_intro_myself2a) [Like Exploring][Explorer]
You: That's what I like to do. #line:5027
Hygara: I suppose I like farming about the same. #line:5028


This structure is basically the same as the prompt, but it starts with the NPCs talking, and in this case Hygara only has 1 line before you have more prompts.

Then it has sub-prompts, which indent inward, making it easy for me to write immediate replies without having to jump all over the place, and pretty easy to see which prompts go with with conversation section, and allows sub-sub-sub prompts inside a single sub-topic section.

As my design goals stated, I wanted to be able to have a very scalable system where a lot of dialogue and options could be written quickly. While there are a lot of little markup and formatting that need to be follow (really just indenting and the symbols), it reads similar to a screenplay, but with options.

How does this affect gameplay?



The most important part is how this affects gameplay, as always.

This system will allow a lot of different narratives to be written, and simplifies the hardest part of branching narratives, which is making sure all the branches don’t get into a locked state where you can’t progress the story.

Because the state data can only flow in 1 direction, and all the previous states are always true when a further state is true, and remaining states are false, it is very simple to make tests and get answers that reflect the “state of the world”.

This also allows multiple ways to get to a state. I am only tracking what state something is in, not how it got there. So there may be many ways to set a state. In that case I would have counters or other states where I track how those went, and testing groups of conditions allows me to tell how you got to any situation so I can write custom responses to your actions.

This structure should lead to less bugs in the narrative and quests, as the Inkle folks have found, and the simplified writing will make it easier to write more content, as the standard node-based dialogue systems become very unwieldy as they grow. Text is the natural medium for writing, and the NAR system, following Ink, stays with text and remains similar to a screenplay, so more dialogue can be written, with different branching narratives.

The negatives of branching narrative for game development is more work. Every branch means another set of writing to do, and as branches increase, so does the amount of writing. But with this system, and by being methodical in how I write with it, I can write quickly and provide more choices for players than I would be able to do in a standard node-based narrative model that most games of this type use.


Comparison: How node-based dialogue is often displayed and written

Because NAR also integrates the NPC schedules, and special events and scripted scenes together means it can be more cohesive and all of these things are normal elements of writing in NAR, and not special events that can only be afforded to be added rarely. I can easily create another Stage State where a store has been damaged, and items are missing, and the NPCs around the store talk about the incident when appropriate.

Conclusion



Open World branching narratives are always ambitious endeavors, but thanks to the pioneers at Inkle creating Ink and giving excellent talks about how it works, and how to write with it, I was able to create something which I think will make a good open world narrative system. I’m very much appreciative of how open they were and continue to be about this information and how much thought and refinement they put into it.

When All Hail Temos reaches 1.0 I will also release the full spec for the language and a C# API, and I hope my work will help someone else in the future!

If you’d like to find out more about All Hail Temos, please Wishlist the game, so you know when it’s coming out, or Follow to see more updates like this.

Balancing Skills From Stats - Devlog #3

Continuing on the discussion from my last post I am now going to describe how I am balancing what skills you can use based on the stats you selected.

Skills are things you can do, and I put them into skill groups named:

Combat: Related to fighting

Influence: Related changing peoples minds

Craft: Related to building things, understanding things

Experiment: Related to trying things out, testing things, understanding

Seduce: Related to changing peoples behaviors

These are used very loosely to map into all kinds of situations, so for example Seduce is used by Merchants and Bureaucrats to get things they want, and it’s used by military leaders to have people follow them. Seduce is related to Influence, but skills are separated so that the world of possibilities lies in only 1 of the skill groups, providing variety.

Skill groups are also used as a way to do skill checks. Such as you have to have at least Level 5 Crafting ability, to perform some action or dialogue.



Stat to Skill Group Distribution



I want all my base data in the game to have relations to choices the player made about their character’s configuration, so skill groups are based on 3 sets of Stats, in varying amounts. Here is a table matching stats points to skill groups, which provides asymmetric balancing.


Note: I changed “Awareness” to “Aware” for formatting.

This table shows my mapping of how a stat (Strength, Agility, Wit, Awareness, Charm) gets mapped by value into each skill group.

In balancing my groups, I wanted a distribution of the skill groups that used more of a given stat to be balanced more in favor of that. So I went with all values were cubed. So if you have 2 points of Strength in a skill group, that is 8 points (2 * 2 * 2). If you had 3 points that was 27 points (3 * 3 * 3), creating a wide scale. That assignment looks like this:


Now differences are more obvious.

The end goal is that where you place your stat points gives you access to some high level skills in some areas, but not all areas. With the current balancing I see between 2.5 and 1.5 high level skill groups when assigning most of your points into 2 stats. You only have 25 points, and there are 5 stats, and 1 is the minimum stat value. So at most 2 stats can have 10 points assigned to them initially, leaving 2 more points to assign to make up the total of 25 points.

This is asymmetrical, and some distributions of points do give more high level skill group access, but because the stats also have individual meaning, just having more high skill groups may not yield better results for a certain build type. You can construct a character with high level skilled combat, but can only pick up light weapons like daggers, because their strength is too low. So more factors come into play for the big picture.

Testing it with different builds



Here is a sample set of 10 characters with different distributions of stats. The numbers are assigned in extreme ways to test the boundaries, but there will be good builds with middle levels as well, bigger numbers does not mean better outcomes, just different skills available to work with:



And here is how they map to skill group max levels. Skills are available at different levels, and so the maximum level gives you higher level skills.


Max Skill Groups per Actor by Stat allocation

My goal was to have a distribution between max level 1 and max level 13. Some have 12 or 14 as the maximum, but otherwise the distribution is there. Dump stats get you a max level of 1, and putting 10 into stats gets you around 12-14.

This distribution doesn’t have to be perfect, because skills can be placed at any level to balance that progression properly, but having this range of 1-13 allows all the stat selection to map onto these skill groups. And skills will be selected both to make sure all the skill groups have good skills in them, and to map to the naming of the skill group, so that the world makes sense. When you look at the value of a stat, you can understand why a related skill group would be at that max level, so it makes sense you can’t use a high level skill with a low stat, and builds have differentiation.

How does this affect gameplay?



The most important part of this, is how it affects gameplay. Let’s take a look at a couple of the tests and what they mean for gameplay.

Actor #10 Test Build



Stats: Strength 10, Agility 10, Wit 1, Awareness 3, Charm 1
Skill Max: Combat 14, Influence 1, Craft 7, Experiment 3, Seduce 12

Actor 10 put everything into Strength (10) and Agility (10) and dumped the rest. This means they can get high skills in Combat (14) and Seduce (12) and mid-level skills in Craft (7), but only low level skills in Influence (1) and Experiment (3).

Being good at combat makes sense, and I mapped Strength as partially being “healthy” and a component of Beauty, which is part of the Seduce skill group.

However, Actor #10 has a Wit of 1 and Charm of 1, so even though they have high level Seduce skills, they could not use them in dialogue because they are incompetent at saying intelligent things or being charming. To use their high level seduce skill, they need to focus on non-verbal based seduction methods, which are skills I will add to the game, so that the play style is viable.

Actor #9 Test Build



Stats: Strength 1, Agility 2, Wit 10, Awareness 10, Charm 2
Skill Max: Combat 7, Influence 3, Craft 8, Experiment 12, Seduce 1

Let’s compare actor 10 with actor 9. Actor 9 also has medium level Combat (7), but they dumped their Strength (1) and instead have high level Combat because of the other stats Agility (2) and Awareness (10). Because their Strength (1) is so low, they can’t wield axes, swords or hammers, and will be stuck with small weapons like daggers or cudgels. They are not strong enough to pull a bow. Casting spells usually does not require strength, and is mixed into Combat skills.

By specializing in something like daggers or casting, which meet their Strength maximum, while using their high level Combat skill to do larger damage with them.

So both actor 10 and 9 have high Combat builds, but they would have to approach their playstyles differently to maximize their advantages in combat.

Actor 9 also has high level skills in Craft (8), and Experiment (12), only having low scores in Seduce (1) and Influence (3). While these are high skills, the max only goes to 8 for 1 skill, still keeping them out of the elite skills of those groups.

So actor 10 can be an elite fighter, but actor 9 can be good at many things, yet actor 9 still can’t be elite at those things.

I like how this distribution sets up different possibilities that have viable explanations. The final balancing will be done per skill, so that applying the skill during gameplay feels right, and it reasons that the appropriate character build can use each skill or not, in a way that asymmetric balance to allow min-max but multiple dominant strategies.

Magic Numbers



One of my goals for balancing is to have 1 or 0 magic numbers, which are used to help balance the stats. Having more than 1 magic number means the distribution will be complicated, and a person just thinking about it will probably not understand all the combinations. Having 1 number means there is a linear correlation between 2 values and players can understand that intuitively. Having 0 magic numbers means the map is what it says and it doesn’t change. This is the easiest to understand, if its small enough to remember, and is where I used the perfect balancing method I wrote about in the last blog.

In the case of mapping stats to skills, I needed to use 1 magic number, as just cubing the values and adding them together did not separate them into a distribution that met my above requirements.


Magic Scaling Numbers

I just multiplied these numbers to the end result of my calculation for mapping stats to skill group max level, and got the distribution I was looking for. To me, this is another good foundation for scaling the higher level elements of the game.

Goals
When the foundations are in place, then future tuning is more cohesive, because the tuning itself is built on the assumptions of how the world is being divided up in it’s design. Each piece of the game I design is mapped to these skill groups, and uses these stats, so their relationships together weave throughout the game.

Decisions you made in the beginning of the game will matter throughout the entire game, but there is viable play in many areas, but also room to min-max better outcomes. The goal being that the total space of outcomes is high enough that there should be multiple dominant strategies, and then how you play is more your preference, even taking min-maxing into account.

If you’d like to find out more, please Wishlist the game, so you know when it’s coming out, or Follow to see more updates like this.

Perfect vs Asymmetric Balancing - Devlog #2

How to balance an RPG? There is no perfect answer, and instead I think it can be described as “What you do is what you get.”

You are building a system, and from the functioning of that system, you will get the results that system produced. It seems redundant to type it out, but it is very much a cause and effect of how the system is designed, rewards and penalties will be assigned, and players will want to maximize rewards and minimalize penalties.

If other aspects of the game are also very good, maybe they will tolerate less than perfect maximum rewards and perfect minimum penalties, to see a more interesting story, or make more personal choices, but the balance of statistics and skills should support all these things as a foundation, because the incentive structure will in large part dictate how many players play, because of how they are rewarded, thus defining what type of game this is. What you do, is what you get.

So with that rambling preamble done, I will turn towards my methods of mixing perfect balancing versus asymmetric balancing to create a system that has a solidly balanced foundation, with a number of asymmetries that map to the theme and gameplay of the game.


Getting coverage on things you can do, and how well you can do them

Stats, skill Groups and Jobs



Stats and are skills are core to RPGs, you perform skills, such as casting Magic Missile, and your stats help determine the success and strength of the skill usage.

In All Hail Temos, I divide up skills into skill groups:


  • Combat (CBT)
  • Influence (INF)
  • Craft (CFT)
  • Experiment (EXP)
  • Seduce (SDC)

These skill groups are then balanced with stats, but I have an intermediary step to create both a perfect balance foundation, and an asymmetrical balance, for how stats are distributed inside.

Stats



To explain this, I need to introduce the stats for the game, which have 5 base stats, and 10 derived stats, which are all the combinations of the 5 base stats, in unique pairings with each other. The base stats should seem familiar, but are tuned a bit to get better thematic coverage:


  • Strength (STR)
  • Agility (AGL)
  • Wit (WIT)
  • Awareness (AWR)
  • Charm (CHM)

These 5 base stats are then combined to all their permutations with 10 derived stats:


  • Precision (PRC) = STR+AWR
  • Beauty (BTY) = STR+CHM
  • Grace (GRC) = STR+WIT
  • Endurance (END) = STR+AGL
  • Accuracy (ACR) = AGL+AWR
  • Social (SOC) = AGL+CHM
  • Flexibility (FLX) = AGL+WIT
  • Deduction (DED) = WIT+AWR
  • Convincing (CNV) = WIT+CHM
  • Personality (PER) = CHM+AWR

Together these are 15 combined stats. And there is a perfect balance between the number of derived stats, and the base stats. Thematically, I also tried to get a very wide coverage of potential elements of a character’s abilities, which we are reducing to stats, and to inform how I should create the game to allow all these stats to be expressed. After all there is no point having a stat that is a dump stat, because it is never used in the game. Better to cut it, or expand the game in at least some way so that the stat is incorporated in a way that thematically and gameplay wise makes sense.

Skill Groups



Next I assign 3 of these stats to the skill groups, without ever repeating or leaving any out, so there is perfect balance of the 15 stats into the 5 skill groups, with 3 each.


  • Combat: Strength, Awareness, Agility
  • Influence: Social, Personality, Convincing
  • Craft: Accuracy, Wit, Endurance
  • Experiment: Deduction, Flexibility, Precision
  • Seduce: Beauty, Grace, Charm

To convert this assignment, I give each stat 2 points, so each skill group gets 6 points. The player selects a job that contains 2 skill groups, so the player is selecting a total of 12 points of stats when they pick their job, which is distributed in this perfectly balanced above way.

But, here is where I add in asymmetry to the design to give things a more thematic shape, based on how all these terms connect together and can be interacted with in the world.


  • Combat: Strength + 2, Awareness + 2, Agility + 2
  • Influence: Charm + 3, Agility + 1, Awareness + 1, Wit + 1
  • Craft: Agility + 2, Wit + 2, Awareness + 1, Strength + 1
  • Experiment: Awareness + 2, Wit + 2, Agility + 1, Strength + 1
  • Seduce: Charm +4, Strength +2, Wit +1

This creates a situation where there is an asymmetric balance, so not all the numbers relate evenly with each other evenly, on top of a lot of symmetrical balance, where all possible options are present, and no duplicates exist. Which I’m calling perfect balance, for the purpose of this article, to underline both of those qualities are true: all unique combinations exist, no duplicates.

Jobs


As I mentioned above, the player selects a job, which is what selects all of these stats and skill group assignment. Every job has 2 skill groups, which I can asymmetrically balance as a major and a minor skill group for that job. The jobs are:


  • Explorer = Combat, Influence
  • Saboteur = Combat, Craft
  • Tactician = Combat, Experiment
  • Assassin = Combat, Seduce
  • Merchant = Influence, Craft
  • Detective = Influence, Experiment
  • Spy = Influence, Seduce
  • Engineer / Inventor = Craft, Experiment
  • Artisan = Craft, Seduce
  • Bureaucrat = Experiment, Seduce

The assignments of all skill groups are such that in all the jobs, there are all combinations present, and no duplicates. So perfectly balanced. But, the distribution of which job is major (first listed), and which is minor (second listed), is asymmetrical and was tuned to be in the theme of the world and gameplay, and not for perfect balancing, unlike the 10 derived stats which are perfectly balanced from the 5 base stats.

The player will select one of the above jobs, which give them a major and minor skill group, which give them 12 points of stats total, divided among the stats that comprise the skill group, with 3 stats per skill group, at 2 points each.

After selecting their job, the player is given 12 points to assign how they want, so they get 50% nature (all given by a single choice) and 50% nurture (selected individually). This creates another perfect balance, 50-50.

How will this affect gameplay?


Until I get a lot of player feedback, I won't know how things will initially be received, but there is actually a lot more missing from this balancing article, which is the skills themselves. When you swing a sword, cast a spell, try to pick a pocket, etc, how is all of this information balanced there?

It’s balanced individually, for that skill. So this is where the real balancing of the game occurs. All the balancing I did above is to provide the framework to balance individual skills you will use in the game. How far you can dash, or shoot an arrow, will be determined by the way that specific skill uses the underlying system of stats, skill groups and jobs.

By the way, you can change jobs. Any time you want, but it doesn’t take effect until the next time you go up a level in a related skill group to that specified new job. Your selected job gives you a type of cap on a type of progression you can do with skills from other job’s skill groups, and when you change jobs, you lose access to high level skills in all your non-selected jobs, but keep access to low and mid level skills. So, you can level and play across the range of jobs and skills, but not all at the same time, but you can keep adding more low and mid level skills to your usable skill set. I will write a post about this in the future.

Conclusion



So, that is how I created the stats, skill groups and jobs used in All Hail Temos, so that you can get a mix of perfectly and asymmetrical balanced relationships that describe how your character exists in the world, and what gameplay is possible.

If you would like to see how all these stats and jobs can be viable gameplay, wish list All Hail Temos on Steam.

How to Rewind Time - Devlog #1

Kicking off the Devlog series for All Hail Temos, this is how I implement saving the game, but instead of normal save game files, I want full timeline Rewinding, so the player can travel back to any point in the past, at a certain granularity, and then play forward from there. It also means no worrying about saving, because everything is always being saved, and you can always go back and try something again.

For UX reasons, I will still have a bookmark of save games, so you dont have to scrub through the timeline if you know you want to remember an area for rewinding to.

This does make Save Scumming a first-class feature of All Hail Temos, so I make it easy to go back and try different options, and I introduce you to the reality of time travel into a story with many branching paths. But that is a design discussion, and this is a technical devlog.



Introduction



Every change in the game is stored in a sequential record, and then when you rewind, you can rewind over your entire play session, including when you reloaded previous game saves before, those are all just in the time line linearly. So you will have a you-tube like scrubber bar and you just go back in time to where you want to Rewind to. Then your Journal gets a summarized version of this, which is your actual Historic Record, and is what will be in your journal book, even though all the information exists in the timeline, the book only contains the Historic Record. Later I will add a toggle so you can actually get the entire timeline in the book.

Side Note: Your gameplay Journal can be exported as an EPUB in a later release.

Journal Historic Record - what you have done


The Journal Historic Record, looks like this:


0
1
2
3
456


You start the game: 0 and advance to 1 -> 2 -> 3 -> but then you played 455 more snapshots worth of gameplay, and did a rewind all the way back to #3, which created the new 456 to start making changes from. All the 0-456 exist in the timeline, but your journal only sees 5 items.

Snapshots of the Game - Instant-Frames



Every snapshot of time above contains a lot of changes inside of it. I call the full snapshots of the game, which is normally called a save file, an Instant-Frame (or I-Frame) and the individual changes in the snapshot I call Progress-Frames (or P-Frame), which roughly also map to terms used in MPEG encoding. That looks like this:


---
i: 456
start:
985473299343: 9875
123173621736: 1001
progress:
# location: progress IDs, ...
985473299343: 9876, 9877, 9878
123173621736: 9879, 9808
---



This shows the snapshot 456, has 5 changes in it, across 2 different locations. Location 985... and 123... have several changes made to them. So these are the I-Frame and P-Frame numbers together. Which are made sequential by the Journal Historic Record, by just putting the snapshot I-Frame number in a sequence.

Changes to the Game - Progress-Frames



Finally, this is the change data (Progress-Frame), which contains all the information needed to rebuild exactly what was happening when the game was being played, and also constantly updates where the player is, what they are doing, their physics information, and the same for any other NPCs in the location.


file: i_p_001_456
---
p: 9876
seed: 756894
seed_advance: 126
day: 76543.4
day_last: 76543.4
state:
- Tenin.returned_horse_cart
counter:
Tenin.angry: 6
start:
1: ACTIVE, 337,0.523, 123,321,213, 0,90,270, 0,0,0, 0,0,0
actor:
1: 10000, 123,321,213, 0,90,250, 0,0,0, 0,0,0
98754321: 0,123.4
object:
# Destroyed object
628374: -1,1
# Removed object, by the player
628374: 0,1
---


This repeats the I/P frame information, so you can always easily tell where you are, and search for them in the text files. I also put this information into the filenames that are stored, so modders can easily look at the files. There will also be instructions on all file formats, in case people want to mess with things, to enable low level modding types. It also gives the time in-game days since the player started, so we know the current time, and it gives the last time this file was updated, as it stores both a fixed change, and updates about what people are doing.

I also keep the Seed and times advanced since re-seeding for the Random Number Generation. This allows me to reset the seed, call it the number of times advanced, and the next random number will always be the same.

Storing State at Every Location, for Every Situation



In AHT, every time you go anywhere, the location you are seeing was set up specifically to be that way, at that time, in your circumstances. If you had answered a question differently, or done a quest, the stage may have different actors there, different furniture or props, anything could be changed, as it was completely set up by your narrative stage, when you triggered spawning that area. So I already know the starting state of any location in precise detail, so the only thing to track are things that have changed.

In the state section, I say that the Narrative has changed, and you advanced a quest-line of returning a horse cart. In the counter section, I update a counter that also changed, so this guy has gotten angry more 6 times. Since its angry, it is a counter going up. But if it was irritated it might go up or down, depending on how they are reacting to what you are doing in the world. You could make someone angry who isn’t there, because you did/said something, and after 1 day and you enter a location, they confront you over it.

In the actors sections, I give the UUID of the actors (1 = the player), and what they are doing currently, and information about that.

Example of Change State



For instance the player is free roaming around, and I give their current animation, time into that animation, position XYZ, rotation XYZ, momentum XYZ and rotational momentum XYZ. So I know where they are, what they are doing, and how to carry the physics into a reloaded scene.

Maybe they were jumping off a roof, and had forward momentum. I don’t want them to lose that, and they just fall on the ground, but I’m also saving minimal information, so it doesn’t take a lot of file IO or space, and is easier to parse as a human. Its also written in a pseudo-barebones-YAML format I made. The other actor (Tenin = 987...) is at station 0 (Guarding), at 123.4 seconds into that action.

Objects of Loot and Destruction



Finally objects tells me if an object has been destroyed, or taken, and by who (actor UUID, 1 = player). So the player took that item out of the area.

The other object was destroyed, by the player. Other actors could destroy or take things too, and this leaves exact information for any quests related to theft. You could trick someone else into stealing something for you, and in my narrative logic, I can test whether it was the player or someone else who took it.

But, if they player has the item and they didn’t take it, I can then narratively say that they tricked or convinced the other people to do it for them. If the other person is their friend, then they have built alliances I can acknowledge in some narrative way, and if the other person was attacked by them afterwards and the player took it, which I also know, I can narratively say they were devious.

Conclusion



I hope you have enjoyed this explanation of how to save and rewind time in All Hail Temos. If you are are interested in game, the Prologue demo is planned for release in the beginning of September. Wishlist it to remember.

Interview on SWW Show Podcast

I did this interview a few weeks ago, and talk a bit about the development and goals of All Hail Temos:

https://podcasts.apple.com/us/podcast/sww-interviews-episode-90-all-hail-temos/id1435072446?i=1000565975916

Just to update the current basic roadmap:

- A Prologue Demo in late August or early September
- Steam NextFest in October
- Launch in EA in late October or November
- About 3 month in EA before launching 1.0
- More content releases regularly, with more story and more places to explore