Hey, it's Karanrimé here. This is a small archive of what is essentially this game's blog. Here I will discuss current and future mechanics, and why things are they way they are in my own designs for this game. If you have anything to say, please reach out to me in the Experimental server, as that is where I spend most of my time working on the game. My current iteration is the one that I am by far the most happy with, which is why I've decided to start on this blog in earnest rather than continue my rants in the #suggestions channel of the experimental server.
With the motivation of just about everyone on this planet at an all-time low, I have finally overcome the depression (if not the stress) that I've been going through apparently since High School. Oops. My last post here aged like milk, but rest assured that I have always had Over Time in the back of my head. I have been working on this on and off since 2018. I'm sure as hell not going to stop now.
In newer versions of Over Time, Units deal bonus damage to each other based on the type of unit they are. Light Infantry counter Medium and Heavy infantry, as well as Light Cavalry. Heavy Infantry counter all Cavalry, Artillery counter all Infantry, and so forth. The burning question, then, was how do we implement this in any digital format of the game? The answer, as is with most things relating to the inspiration of this game, lies with Age of Empires II.
The Armor Class System in aoe2 is pretty simple: units deal damage based on their attack classes, and units receive damage based on their armor classes - the only calculations the game needs to make when one unit attacks another are the ones for the classes shared by both units: the attack classes of the attacker, and the armor classes of the defender. Of course, a game made in 1999 still forces the game to run the calculations for irrelevant armor classes, but there's a default armor value of 1000 that (most) units have for classes they aren't supposed to have. This is a high enough value that it isn't a problem without heavy modding (256x tech mod, anyone?), so it kinda just stuck. Over Time uses a DEFAULTATK of -9999 and a DEFAULTDEF of 9999 just for safety's sake, then has checks everywhere to make sure classes with their attack value set to the default or defense value set to the default don't get used, just so the game doesn't have to keep returning -19998 or -9999.
For both Over Time and Age of Empires II, the pseudocode for this looks something like:
totaldamage = 0
for each armorclass {
thisdamage = (attackerATK - defenderDEF)
totaldamage += max(0, thisdamage)
}
return totaldamage
Implementing this in Over Time ran into a hiccup: some units resist bonus damage dealt to them by certain categories of units. For example, the French Chevalier resists 2 damage dealt to it by Heavy Infantry. I can't just give the Chevalier 2 Class 6 (Heavy Cavalry) armor, as that adversely affects its interaction with light and medium cavalry that also deal Class 6 damage.
My next thought to alleviate this issue, just like the original system, came from aoe2. The Ethiopians civilization in that game have a unique tech called Royal Heirs. This (as of relatively recently- remember this game is 26 years old) lets their camel riders and shotel warriors resist damage dealt to them by enemy cavalry units. They implemented this pretty cleverly, and it's a fun little deep dive:
Units that have a negative value for an attack type let the value contributed by that type to the total damage dealt be negative, rather than forced to 0.
All cavalry units deal -3 attack versus the Royal Heirs armor class (Class 39, for those counting).
Shotel warriors and camel riders have -3 defense versus the Royal Heirs attack class, raised to 0 by the Royal Heirs technology.
Over Time, for context, currently only has 13 armor classes (numbered 0 to 12), and I quickly counted that I would need to implement 9 additional armor classes just to implement all the resistances in this fashion. The Royal Heirs method is cool, but there has to be a better way...
Well, I've already mentioned the term I've coined for the solution: Resistance. In addition to an attack and defense value, each armor class also has a resistance value, which does two things:
Sets the minimum value that this armor class can contribute to the total damage to the additive inverse of its value (which makes said min a negative number).
Decreases the damage taken to this unit from units that have the armor class of the resistance's type.
Now, all I have to do is give the Chevalier unit a resistance of 2 in its Class 3 (Heavy Infantry). Since all Heavy Infantry have the Heavy Infantry defense class, the minimum amount of damage the calculation of Class 3 can add to the total damage is -2, rather than 0. Since (most) Heavy Infantry don't deal bonus damage to other Heavy Infantry, and no Heavy Cavalry takes Class 3 bonus damage, this -2 also becomes the end result of that part of the calculation, properly making the Chevalier take 2 less damage.
A Phalanx does 4 Class 0 (base) damage, and 6 Class 6 damage. The Chevalier has 2 Class 0 defense, and 0 Class 6 defense. Since Heavy Infantry turn cavalry armor against them, the result after just Class 0 and Class 6 is 4 + 2 + 6 = 12 damage. Classes 1, 2, 4, 5, and 7-13 all contribute the minimum 0, as every single value for those listed Classes is the default. Class 3 is where it gets interesting: the Phalanx does the default -9999 damage, and the Chevalier blocks the default 9999 damage, for a total of -19998. Normally, this would just be set to 0 and moved on from, but the Chevalier's 2 Class 3 resistance means that this 2 is subtracted from both the damage value and the minimum damage dealt: it's now taking the maximum value of -20000 and -2, instead of -19998 and 0.
This means that it subtracts 2 from the total damage dealt! It's now only 10 instead of 12.
The ideas I'm most proud of are the ones that improve on concepts I've borrowed from other media. I hope it's obvious that I'm proud of this one too.
May you always land hits on those who will crumble to it,
-Karanrimé
I, unfortunately, have no sagely advice to give to you on the glorious day. I have been backed up with a large quantity of schoolwork and other forms of procrastination. I intend to start the blog back up in earnest shortly with some Nation-specific tips and guidelines for how I built them to be played.
I believe that a0.0.2 is nearly complete, so be on the lookout for the next release!
To Futures Untold,
-Karanrimé
Today's blog post lacks the introductory material that other blog posts have, because Artificial Progression (as I want it to be seen) is a new topic that sounds very scary.
Over Time was designed around two main design philosophies:
Players need to learn new mechanics as the game progresses.
Strategy Games (in general, Age of Empires III and Against the Storm do very good jobs of mitigating the length concern) take too long to finish a game.
This first one was given to me by a good friend of mine who I have kept very close contact with over the years. I do not know him irl, he and I met on Discord, but he's still very close to me and he has basically been mentoring me in game design and development since before Over Time got started.
The second one is more of a general complaint, and one that I don't want to get into further, because this is a niche complaint that doesn't necessarily apply to the population at large. If you like long games, then by all means, keep playing long games. I'll be over here playing Over Time instead.
To facilitate this first philosophy, I created the system of Artificial Progression that Over Time uses today. This sounds very scary to someone who doesn't know what it means, and quite frankly, it kind of is. Artificial Progression removes the agency that players have over the pace of the game because the timeline moves forward without them. This lack of agency over the passing of time is what pressures players to continue pressing through the tech tree even while knowing they can't (well, shouldn't) get through the whole tech tree by the time the next Age rolls around. This takes advantage of the primal human fear of being left behind, and adds to the need to feel advanced that triggered many European nations to adopt gunpowder as the Napoleonic Era of warfare started.
The goal of removing this agency is, in short, to make the game feel more authentic, and as players have elevated levels of authority in other facets of the game, I feel this is a tradeoff I am happy to make.
May your Nation's advancement outpace even the sands of Time itself,
-Karanrimé
A dollar auction is a hypothetical auction where the object of value is a single dollar bill. The catch is that both the winner of the auction and the person who comes in second end up paying the money they bid, so that the optimal situation for both participants ends up being that they must continue the bidding war far past where either participant would have liked to: the auction is for more than a dollar, both participants are losing money, and the goal is simply to lose the least amount of money.
That was the principle behind how I wanted Mercenary Companies to work: you invest your Play Power into external Influence (which is, funnily enough, the metaphor I've been aiming for; draw power is roughly equated to population) and if you are the player with the most influence, you have some control over the actions of the Mercenary Company, and gain a bonus in that you have access to that other Nation's unique units. If you have invested influence and you don't have the most? too bad. you can at least try to pull it out and convert it back into Play Power so it isn't actually quite as bad as the dollar auction scenario.
To that end, I decided that Mercenary Companies essentially be Nations without their own source of Influence. This means that they are relatively slow to start and easy to kill (which buffs Nations that snowball off of eliminating other players) whilst also not being totally unable to do basic tasks, now that Production Queues are a mechanic that exists.
As I said in my last post, this is a similar concept to City-States in Civ 6: minor players that aren't trying to win the game, only help the player who is exerting the most influence over them. And the question becomes: is it worth the short-term gain from destroying the Company to not keep them around for long-term gain?
Mercenary Companies can appear as any Nation not being played by a human player, as well as a small roster of explicitly defined Mercenary Nations. Some of these are Nations whose bonuses I have ready to implement and just haven't yet, and others are Nations whose development is exclusively those units as a Company. Explicitly-defined Mercenary Nations tend to have more complicated Unique Units than other Nations, because it adds more depth to the game if this particular Nation can come up more often and have its particularly strange Unique Units being used in conjunction with relatively tame Player Units.
I was still left with the conundrum of how exactly hiring units from Mercenary Companies would work, and to that extent, I sort of still am. While there will be no further posts on this specific topic, I may do a deep dive into some of my thought processes behind other mechanics while the Experimental game is in a lull and the development of the app has slowed.
May your victories be sweeter than your defeats are bitter,
-Karanrimé
Lanchester's Square Law is a mathematical equation that judges the outcome of fights based on the relative sizes and strengths of the units that the armies are comprised of. There are multiple conditions that are not met when trying to apply the Square Law to Over Time, but the basic principle applies: as the relative size of Army A over Army B increases, the resulting battle becomes exponentially more devastating for Army B and exponentially less costly for Army A.
This has consequences when it comes to combat over multiple turns. By far, the most important one is how a small early victory can snowball. If player 1 has two early-game Infantry (the specific type not being dependent on the ruleset used, for once,) and player 2 has only one, then player 1 will win that first engagement very quickly. After that, each time both player gain an additional infantry unit, player 1's lead will simply grow further, until it is enough to pressure and destroy player 2's city.
In essence, this means that 30-40 turn games are won or lost by about Turn 9, and that the losing player has no valuable reason to continue the game to its end. This is diluted somewhat by the nature of ffa game settings, but any setup with two balanced teams of n players will suffer.
This leaves me with two massive design questions, one of which I have already tackled somewhat in designing the distinction between early-game and late-game Nations, and the other of which is the first subject of today's blog post: what kind of mechanic can be implemented in such a simple Hearthstone-esque combat setting to prevent this snowball from rolling up too quickly, without making it impossible to set up snowballs at all?
One strategy that players already employ is the Army Drop. This is about the RTS equivalent of massing versus flooding, but comes with the risks of taking early damage and the drawback of needing hand space to pull off correctly. In games that I have personally played, I have played an army drop twice, one successfully and one less so.
My successful army drop came in a 2v2 game with myself and against some friends. I was facing a similar situation to the one described above, but I was about to get a technological advantage and use that to my advantage rather than wait too long for sheer numbers. When at last, the moment came, I played 10 upgraded infantry units the moment the upgrade card came out, and the game flipped from being a clear win for the other team to being a clear win for myself.
At this point, the city I was defending had lost about 70% of its HP, and if we had been playing on the v1.0 ruleset, I would have lost that city. This was the opportunity cost of making that army drop: that there was a massive threat to the player making the drop and that if it didn't come quickly enough, I would have lost the game. This is an example of how army dropping was too much risk for too much reward, and the massive number of reworks that have occurred since that game would have made the strategy moot anyway.
My less successful drop came in the infamous N2 game, a free-for-all played on the original ruleset between a total of 16 players. It was significantly later in the game, and I was hiding behind a very overbuffed unit (a rule about enhancement cards that has been since toned down significantly), and had started doing a similar thing with a particular decoy. While the drop itself went without a hitch, I didn't have the technology I needed quite yet, and I made a blunder that lead to me losing that decoy and consequently the rest of my army, before any upgrades could come in for them.
The game was practically unwinnable from that point, but I wanted to play on from there anyways.
Army dropping is not a strategy I like. It's not a strategy that I want to remove entirely, because that is nigh-impossible in a game format such as this, but it's a strategy I want to create alternatives to that create the same effect in a more developer-friendly light. That brought up the question, however: how would I do that?
The answer came to me relatively quickly, for the number of things that I think about in trying to balance the game for competitive play: that players should be able to retreat their armies behind their buildings before the combat round starts. This flips the order of units before buildings on its head, and allows players to publicly mass units behind a layer of buildings. This lets players put armies down to free up space in their hand, flee behind their buildings, and take economic damage in exchange for being able to mass up their units behind. This economic damage is a way for the other player to further their lead with the gold gained from destroying enemy buildings, so that the overall end result is the same as if army-placing were a thing.
This puts both players on two separate clocks and makes combat more engaging by offering the option of sacrificing economy for a larger military in a different sense.
It also makes it much easier for players to "drop" a pre-existing army, rather than losing all progress the moment a battle goes awry.
--------------------------------------------
The other topic of the day is Mercenaries.
I think of mercenaries and mercenary companies as sort of an analogue to city-states in Civ 6: They're neutral players that aren't trying to win, but rather just trying to aid whoever they like most. There is a lot of fog surrounding how I want to implement mercenaries, so here are a couple of design questions for you to ponder. If you have any insights for me, stop by the Experimental server and give me your two cents.
Who are mercenaries?
Are they other neutral players that exist or are they assets independent of the basic city-building mechanic and are more akin to bands of traders?
If they are other players, what disadvantages would they have over human players?
If they aren't, what would their mechanic be?
Which Nations should be allowed to be mercenaries?
Will unplayed but released nations be used as mercenary factions, or is it restricted to certain not-in-game nations?
Are mercenaries built based off of hiring units from groups of units or are whole nations treated as "companies" to hire from?
What units are so nation-specific or have such a game-changing impact that they shouldn't be mercenaries?
How big should the mercenary pool be?
What should mercenaries cost?
Gold will not be a restrictive resource at the point where mercenaries become a major factor.
Does the metaphor of Play Power = Influence apply to taking control of Mercenary companies?
Again, come down to the Experimental server and throw your thoughts into #suggestions! My next post will almost definitely be a resolution of the mercenary problem
May prosperity (but probably not peace) be upon your people,
-Karanrimé
The problem with starting an old thing on a new page is very simple: you, the viewer, have no idea where I am starting from.
Ever since the first game I have ever run on the main server, I've been thinking of ways to improve and expand the game. Some of these changes very quickly made their way into the main server. Basic Cavalry units need their DEF nerfed? ok cool lemme do that.
But, unfortunately, most changes are significantly more radical than that. To have a place to test out these changes that I didn't have to push to the base game, I built the Experimental Server. From there, I have tested many different decks, nations, implementations, and balance sets.
Because I am terrible at numerals, we are currently sitting on the v1.0 patch in the experimental server, after throwing out at least four other rulesets.
If you are familiar with the base-game, here are the main changes that the v1.0 patch has introduced in comparison to it:
Nations and Leaders, in a format inspired by Several outside sources, including AoE2, RoN, and Civ 6. A relatively normal Nation has access to three bonuses at any given time, and a total of three unique units throughout the game.
Nations have two intrinsic bonuses: one related to their culture, and one related to their geography. Horse Guard Grenadier is a bonus based around the Franks' extensive use of heavy cavalry in combat, whereas Burgundian Vineyards is a bonus based around the geographical ease of accessing and producing wine and the strategic implications of having a designated industry.
Leaders are additional layers of decision-making behind the initial Nation choice, providing an additional bonus that may be changed partway through the game if the situation calls for it. The Franks, for example, can use Joan d'Arc to buff their unique heavy cavalry, or they can use Charlemagne to make their medium infantry stronger in anticipation of an enemy player trying to counter their overwhelmingly powerful heavy cavalry.
Unique Units are based on the certain combat units that Nations employed relatively often or relatively efficiently. As long as there is historical basis, this isn't that particularly complicated: some people do some things better than others.
Production Queues, Technology Trees, Supplémentaire and Zusatzlich, a completely different way of researching technologies and creating units.
Production Queues work very similarly to other turn-based games. You task a building to do something and after X amount of turns it pops out, completed. This could be units, additional build charges, or completing a technology.
Over Time doesn't utilize a traditional 'tree' format, but rather a loose set of technologies. Over Time's core facet has been and always will be Artificial Progression, so technologies from future Ages are still inaccessible. Technologies can be boosted in multiple different ways: there are cards that accelerate progress, there are quests one can complete to accelerate progress (a la Civ 6), or a technology can be accelerated once its respective research building is completed.
Supplementaire and Zusatzlich are French and German, respectively, for 'Supplementary,' a role I certainly hope they fill. These are sets of buildings that provide small extra bonuses to your empire, as well as the much larger bonus of massive boosts to about half of their Age's technologies each. These bonuses are randomized each Game, so no two games are ever quite alike. There are (as of right now,) 129600 possible sets of bonuses for a single game, which is probably more than the number of games of Over Time that will ever be played with this ruleset.
Unit Reclassing: Light/Medium/Heavy Infantry/Cavalry + Artillery and Decoys. This post is getting quite long already, so I'll spare you the details, but each unit has some distinction to how it is used, and bonuses against other units.
This is not the time or place for an extended history of all of the variations that the Experimental version of Over Time has ever existed in. What basically exists as my previous iterations of what this discussion will be are in the #suggestions and #changelog channels of the Experimental Discord Server, and will remain there as a way to archive the past iterations of this 'internal' monologue of mine.
That is all for me in this post, but come back tomorrow for my discussion on Lanchester's Square Law, Retreating armies, and Mercenary allies.
Happy Conquests!
-Karanrimé