Banner and Crosspost


Home    Overlay   Discord   Mutators   Maps   Integration   Links   About

December 16, 2021

AoE4 Overlay

An overlay app for showing information about allies and opponents as an in-game overlay. It also provides additional statistics, and supports a highly customizable streaming overlay.

Redirecting to the GitHub page...

December 7, 2021

Age of Empires IV

Age of Empires IV
Age of Empires IV

Age of Empires IV (AoE4) was released recently and I had fun both playing it and watching tournaments. In this post, I'll share my thoughts so far. Though I'm sure things will change as I play more, and the developers keep improving the game. Hopefully, we can learn something from both AoE4's successes and problems.

I'll start with a few topics each with a list of points to highlight what's great about the game and what could be improved, and then move to higher-level topics like game's focus, game-to-game variety, or victory conditions. The former focuses on features and pitfalls, while the latter should be more interesting from the game-design point of view. Skimming and skipping certain sections should work just fine as most sections are independent.

Campaign

So far I finished the English and the French campaigns. There are upsides (+) and downsides (-). The fact there are downsides doesn't mean developers did something wrong, it might be an inherent downside of doing a historic campaign. The actual importance of each point varies and is subjective. It's simply a list of various things I took note of – some are important, others less so. This also means that the ratio of upsides to downsides isn't important.

  • Great production quality
  • Educational videos further support the historic focus
  • Interesting mission design in some missions
  • Without following a set of characters, it's hard to care about the current characters or the outcomes of battles. In one mission you are fighting to put a king on the throne. In the next mission, he is dead and his children have broken the kingdom apart.
  • A different narrator for different civilizations would help to differentiate them.
  • Sometimes videos are overdoing it on close-ups, slow-motion, and cuts.
  • No co-op
  • No progression system affecting gameplay
  • No other choices between missions

Gameplay

I will discuss gameplay in more detail later in the post, particularly on what the game focuses and its implications.

  • The gameplay is similar to that of AoE2. There are differences, of course, it's faster and civilizations are more asymmetrical – both I see as improvements. The gameplay is less about micro, and more about macro and strategy.
  • Progressing through ages with landmarks is a great way to provide additional choices to players, and differentiate civilizations. Landmarks are also very thematic.
  • Hard counters can lead to interesting tactical and strategic gameplay. On the tactical level, a player might micro cavalry to hit archers while the opposing player will try to use spearmen to protect them. On the strategic level, this encourages scouting and tech switches.
  • Four resources and plenty of economic upgrades and mechanics add a lot of depth to the economy. Together they lead to plenty of meaningful decisions for players.
  • The naval combat isn't mechanically or tactically exciting, but it fits into the strategic dominance over the map and questions about where to gain and invest resources. So while this implementation wouldn't belong to a combat-focused game like StarCraft II (SC2), it does fit into AoE4.
  • Mongols are unique with how they can move their buildings (credit to Empires Apart).
  • Issuing the a-move command will make units not attack for a while. This reduces responsiveness.
  • After issuing the move command units will try to form a formation first before moving. This leads to some awkward pathing, units taking free hits, and the reduction of the game's responsiveness.
  • A side-effect of formations is that for example monks might not heal your knights because one unit wants to be in the back while the other in the front.
  • No patrol or follow command.
  • Cannot link wooden and stone walls. Cannot link walls with allies.
  • Random map generation needs additional checks.
Well, this is awkward...

Audio & Visual

This section is about how things look in-game, the next section will look at UI/UX separately.

  • The game has a strong fantasy with an idealized historic look supported by pleasant art style.
  • Its setting is familiar and easy to understand. Every historic building and movie works as free promotion for the game.
  • Great sound design. Units change language when you progress through ages. The sound of cavalry.
  • Gardens, fields, and roads are dynamically added when a structure is built. This supports the fantasy of building a medieval city.
Dynamically added gardens, fields and roads to buildings
  • Visual clarity issues. Some units are hard to tell apart (e.g., fishing ship from a demolition ship).
  • Units changing weapons to torches when targeting buildings is a nice touch. However, when they do, it becomes very hard to tell them apart. They should do it only when attacking buildings – not targeting one at any distance.
  • Cannot disable unit and structure response sounds.
  • Some graphical issues with LOD pop-ins and temporal stability of vegetation.
Can you tell which one is a fishing ship and which one is a demolition ship?
Units are hard to tell apart when they switch their weapons for torches.
Targeting a building at any distance will cause a unit to switch weapons.
Over the top visual rally effect
I wouldn't expect that a warship can completely hide here

UI/UX

Now for user interface (UI) and user experience (UX).

  • Fairly clean UI with minimal dead space (though it's lacking some identity).
  • Color-coded buttons for upgrades, units and structures improve clarity.
  • The supply count becomes orange when it gets near the limit. This helps to prevent supply blocks.
  • The number of workers assigned to gather each resource is shown next to the resource. You can click it to cycle through workers gathering that resource.
  • You can hotkey buildings that haven't started construction.
  • When placing a building you can click on any point and it will find the closest valid position for the building.
  • There exist key bindings that aren't in StarCraft (e.g. select all military production structures).
  • There are pings (though SC2 has an easier and more natural way of pinging).
  • You can hide UI when spectating (though not player scores, and you cannot do it when playing).
  • The in-game score is hidden by default unlike in AoE2.
Color-coded buttons – green upgrades, brown combat units, blue other
A villager build menu with color-coded buttons
Supply indicator – Idle villagers
Resources – Villagers gathering the resource
  • When focusing on a control group, the camera will move to the group's center. Unfortunately, that will often be somewhere in the middle of the map where none of your units are. It doesn't smartly choose the largest subgroup as in other RTS games.
  • The behavior of pre-configured hotkeys for "select all..." and "cycle through..." isn't good when it comes to centering camera. It either does it every time with a single hotkey press, or never no matter how you press it.
  • No control group stealing (in StarCraft 2 Alt+number)
  • No unit wireframes to click on. These two together remove a lot of flexibility in working with control groups.
  • No global production queue (present in AoE2).
  • What upgrades are done for a unit is not well indicated, if at all. In SC2 it's nicely shown with numbers and color-coded images, and the command card shows all other researched or available upgrades.
  • There are no waypoint markers (though shift-click works).
  • Shift-queuing buildings with villagers is a bit awkward, especially when building farms.
  • You can queue building gates only after a wall is finished.
  • You need to use ESC when changing what to build, but it can also deselect villagers.
  • The sacred sites victory condition UI element is a bit too much in your face, showing you the status of all sites all the time. While during spectating it doesn't show you the most important information – the timer to the victory.
  • Map not shown on the loading screen
  • Chat on the side can be easily overlooked.
  • The chat's profanity filter is extremely aggressive blocking normal words and unit names. To disable it you have to edit config files manually.
  • An excessive chat delay after posting a message to chat.
  • Forced Grid hotkey profile & no camera hotkeys.
  • Menus don't support the 16:10 aspect ratio.
  • Menus are a bit awkward, don't respond to the ESC key, and tax your GPU unnecessary.
  • Search parameters (1v1/2v2/3v3/4v4) often reset and you need to change them back.
  • No sound indicator when the game starts. Having one would prevent you from missing it when alt-tabbed. For some reason there is a noticeable sound effect during loading but it's somewhere in the middle.
  • Spectating UI is very bare-bones and closer to being a placeholder. Both SC2 and AoE2 had way better spectating interfaces for years.
Still not the best minimap clarity.
You cannot increase the minimap size or choose which icons to hide.
Redundant messages in chat with random delays between each of them
The mouse cursor not quite pointing where it should
Player card positions don't show teams well

Features

  • Multi-queuing for several modes at the same time (1v1/2v2/3v3/4v4) reduces queue times while giving players control.
  • You can change your civilization before the match in a lobby. This reduces issues where a civilization might be bad on certain maps. You cannot see the opponent's civilization to prevent excessive counter-picking. However, currently you can avoid certain players.
  • In-game spectating of live or old games from ladder is possible with a built-in delay. Players can hide their games if they want to. There is no way to filter by rank, league, or matchup. I think there is still a potential to improve spectating, I wrote about it here more.
A list of games to watch
Filtering what games to watch
  • No map vetoes
  • No ladder or leagues
  • No modding
  • The lack of co-op other than skirmish is disappointing. I didn't expect StarCraft II-like co-op, I don't think it would even fit well into AoE4 due to its different design. However, even a mode like Defend the Wonder from Age of Empires Online would be welcomed (it's a 2vAI survival mode). I imagine we might see something of that sort after modding is added. But a good part of the potential playerbase might have left by then (similarly how SC2 Co-op was released 5 years after the Wings of Liberty).

Economy focus

AoE4 focuses on the economic side to a much greater extent than games like StarCraft II or Company of Heroes where most of the depth comes from combat. For AoE4, this reflects in the increased number of resources, ways to harvest those resources, or upgrades improving gathering.

I don’t think AoE IV is as micro-intensive as StarCraft 2 or Age of Empires II. It focuses more on the macro aspect – strategy and decision making. It’s about positioning your army and making the right moves and developing your base correctly.

– TheViper (source)

A part of how civilizations and strategies are differentiated comes from which resources to get, but also how to get them. There are several options for how to get food (berries, sheep, deer, boar, farms, fish), and each civilization has preferred ways. Later in the game civilizations are differentiated by the use of various infinite sources of gold (Rus' Hunting cabins, Holy Roman Empire's bonus relic income, English farms, China's taxes, etc.). The optimal way how to get resources is also map-dependent resulting in many different game states.

Plenty of interesting decisions are available for players on the economic side – which resources to harvest, how to harvest them, when to get gathering upgrades, and when to start transitioning into infinite sources of food and gold. Food sources work as opt-in complexity – instead of using more efficient and finite resources (such as deer and boar), a player might decide to transition into farms earlier at the cost of a higher initial investment.

SC2 typically lacks these kinds of economic decisions. That's not to say the macro is easy, but there are fewer decisions to it. The closest thing is Zerg's creep which has multiple ways of spreading it – Queens, Nydus worms, Overlords, active tumors, and canceling Hatcheries – and they can be combined. In ZvT this feeds back into the Terran's economy when balancing MULEs against scans to clear creep. That's the best SC2 example of a macro mechanic with multiple options and such that interacts with the opponent's economy.

Spectating or switching civilizations is also made easier in AoE4 by the economic focus. Familiarity with basic units is enough for a viewer to understand fights. There are only a few unique civilization units, and often a civilization is differentiated by getting access to a basic unit earlier instead. The economic depth and complexity are hidden unless a spectator decides to look for them. And when it comes to learning a new civilization, it's gradual as the basic methods of gathering resources are shared between civilizations.

Various sources of food


Game-to-game variety

The focus on the economy can be problematic when it comes to gameplay variety. A combat-focused game gains plenty of game-to-game variety directly from combat interactions between players. With an economy-focused game this is less straightforward. In AoE4 the economic game-to-game variety comes from:

  1. Diverse and randomized maps
  2. Varied resource access depending on map control
  3. Hard counters and strategies feeding back into the economy by requiring a different resource balance and expansion rate.

This is the most important for multiplayer where players might play a single civilization over and over on just a few maps. Keeping the game-to-game variety up becomes the most difficult there, but it's also crucial for the game's longevity. And I would say it's working quite well so far after watching tournaments and streams.

The last two points have issues when it comes to team games. Player interaction is often limited there, games typically go for longer, and resource access is less of an issue. The game-to-game variety suffers because of that. And since lategame armies are more similar to each other compared to a game like StarCraft II, the game cannot compensate with it for the reduced economic variety. If I'm playing "build big armies and see them clash together" then I care less about economic complexity, and having more diverse armies to build is better.

Combat

The hard counter system leads to an interesting dance when it comes to the triangle of archers-spearmen-cavalry. There are other places where micro can shine, and hopefully these places will be preserved and cultivated – unlike the Scout micro against wildlife which made the early game more interesting but was removed in the last patch.

I was a bit disappointed with how siege and ship's firing arcs were handled. Relic did a great job with Company of Heroes games where limited firing arcs are widely used, but in AoE4 they seem mostly non-consequential. Limited firing arcs on ships are mostly just a visual flavor given ships can turn almost instantly. Doing a bit more with firing arcs could add additional depth and skill to the game.

It's also a shame there isn't a static unit similar to Lurkers or Siege Tanks. Such units again make the combat deeper, increase skill ceiling, and discourage a-move while being very clear visually and easy to understand. Out of all units, Mangonels resemble Siege Tanks the most, but they don't provide the same area-of-control, can be a-moved, and there exists upgrades that make their setup and teardown instant, which removes this type of gameplay altogether. It's less about their position and more about targeting the center of the enemy units. And then there are Springalds which are more akin to light tanks in terms of their mobility.

Overall, combat is good for an economy-focused RTS, but it could be better as well.

Sacred sites and wonders

Sacred sites are a nice addition. As a victory condition, they can break certain stalemates if you manage to control all of them long enough. And they incentive player interaction and map presence as they provide a steady gold income. However, unlike Company of Heroes games, the resource income from having map presence isn't so high that it limits viable strategies, and a player has to option to yield map control temporarily.

Sacred sites – sometimes with not so fair spawns

The wonder victory condition is there primarily to break stalemates that sacred sites wouldn't be able to. In 1v1 this typically isn't needed, but in team games having a victory condition like this is useful, mainly because there are many sources of infinite gold and a relatively strong defender's advantage.

That being said, I don't think this victory condition makes for better games right now. Especially on defensive maps it's too easy for one player to get one relatively early. And given it can be placed anywhere, it effectively places a limit on the game's length. A too short time limit undermines the fantasy players expect from team games – big battles and slow territory pushes. Since a wonder can be placed anywhere, it's likely that when destroyed, the defending team lost their armies and most of their bases and defenses protecting it. So a wonder limits the game length whether it's destroyed or not.

I see two ways how to address this: (1) increase wonders' time limit or cost further. (2) Or an interesting change would be to restrict the wonder placement to sacred sites. Its cost and time limit can be tweaked as well. This way it can prevent stalemates just as easily, but the wonder wouldn't put such a hard time limit on the game. The game could easily continue if a team failed to protect it. Either way, the current implementation always felt like it led to worse games no matter whether I have won or lost and whether it was my or the enemy team building a wonder.

Monument of The Great Khan (Mongol wonder)

Team games

  • Compared to SC2 games are less about rushes.
  • Games focus on macro which fits into the fantasy of building big cities and armies.
  • No shared passive team bonuses from civilizations (as in AoE2) and limited synergies between civilizations lead to a lower game-to-game variety.
  • Unit composition diversity across all civilizations is lower than in SC2. This further lowers game-to-game variety. A few factors in the lategame incentivize players to make all-around armies and thus more similar.
  • The wonder victory condition can have a detrimental effect on team games (as described in the previous section).
  • The need to transition to trading for gold is reduced compared to AoE2. It's shame since it's a good collaborative project.
  • Harder to carry a team due to slow armies and a few other factors.
  • Harder to join forces with big maps, slow armies, and a weaker defender's advantage compared to AoE2.
  • How the player elimination is handled...

To the last point, if a player leaves, drops, or is eliminated, all of their units and structures become neutral. Compare that to StarCraft II where if a player drops or leaves early, the control over units and structures is shared between the remaining players on the team. The player's income is equally divided between them as well. This means losing a player is bad for the team, but it's not unrecoverable. In SC2, it's common to see a team winning despite having fewer players controlling their economy and army. But in AoE4, a player leaving or dropping is much more punishing for the team. This leads to worse games and time wasted given long queues, game-setup times, and generally longer games.

When a player is eliminated their units become neutral. They still mine resources, some units like Trebuchets still fire, but overall they do not provide any assistance to the former allies.

Another place where player elimination could be improved is with the landmark victory condition. While in 1v1 the landmark victory condition is a nice streamlining of classical "destroy all buildings", in team games given large maps and the difficulty of keeping track of all players, it's much easier for one player to unexpectedly destroy another player's landmarks. The player might have had a fully functioning economy and maxed army, but they are completely eliminated without any chance to help allies or even chat. That's not a good way to handle player elimination in team games.

There are a few different options for how to handle this better.

  1. A player is eliminated only when all team landmarks are destroyed.
  2. Eliminated players can still chat and spectate. Playing team members can share control with eliminated players so they can help.
  3. Losing all landmarks leads to a different punishment – e.g., not being able to rebuild landmarks.

I do think that team games in AoE4 have a potential, however, right now I cannot say that they are actually that much better than team games in SC2. There is a lot of work to be done. Tweaking the wonder victory condition, as well as changing how a player elimination works would go a long way.

Conclusion

AoE4 is a very good iteration on AoE2 that is leaning more into faction asymmetry and took some notes from other games. It has a great campaign which is the most important thing to a large part of the playerbase. And the balance for the competitive scene is quite good for a newly released game. Where the game is lacking is polish and features. There are some game-breaking exploits, the game has many UI/UX issues, and is missing features that were common in both AoE2 and StarCraft II.

It's a rather safe iteration on AoE2. It doesn't push its boundaries in any way – no co-op campaign, dedicated co-op mode, or something else. Instead, the goal seems to be reaching some kind of feature parity with other games in its first year. This includes things like adding the patrol command, fully customizable hotkeys, or support for modding.

Overall, it's one of the best RTS in the market, the core gameplay is very good, and it's great to see more people playing an RTS because of it. But at the same time, I can understand that some people will be disappointed with an AAA game that neither pushes boundaries nor is a polished version of the old. Though AoE4 could become the latter with further development. And with AoE2 they have shown that they can keep on improving a game for a long time.

From the game-design point of view, for me, the most interesting things are the game's economy, victory conditions, the gameplay effects of hard counters, and the use of landmarks for progression and providing choices. Plus there are noteworthy things in UI/UX, visual and audio design as well. AoE4 is without a doubt an interesting game to look at.

Links to check out:

November 25, 2021

Mixed strategies

Mixed strategies
Mixed strategies

In this post I tried to explore mixed strategy Nash equilibria for a few strategies – all-in, standard, and defensive. Games often feature these archetypal strategies with a rock-paper-scissors relationship between them. I will also make it more interesting by introducing other variables like player skill and added randomness.

Disclaimer: This is a fun project. I'm no expert on game theory. I was interested in how this would look like, how I would implement and visualize it, and learn something along the way.

Rock-paper-scissors

Rock-paper-scissors is a simple game that will serve as a good example. There are three strategies, each one countering one other with a 100% winrate: rock < paper < scissors < rock.

We can represent that by a payoff matrix. We don't have to use winrates as payoffs, but it will be good for later. On the diagonal (rock-rock, paper-paper, scissors-scissors), I have put 50% for a draw. Also, I don't have to write payoffs for the second player as this is a zero-sum game. Those will be 100% minus payoffs for the first player (winrates adding up to 100%).

[P1↓ P2→] Rock Paper Scissors
Rock 50% 0% 100%
Paper 100% 50% 0%
Scissors 0% 100% 50%

Going for one pure strategy, for example always going for rock, isn't a good idea as it can be easily exploited by the opponent. If we did a game-theoretic calculation, we would discover that if both players are playing smart, they would choose each sign with an equal probability.

That's a mixed strategy Nash equilibrium. It's "mixed" because it's mixing different strategies – like going sometimes rock and sometimes paper. It's a Nash equilibrium because there is no incentive for one player to deviate from it given the opponent's strategy.

Model

This model is similar to rock-paper-scissors as we still have two players and three strategies. However, to make it more interesting (1) no strategy will have a 100% winrate against another, (2) we will take into account player skill, (3) and one strategy will be more affected by randomness.

How does that work?

  • Three strategies (all-in, defensive, and standard)
  • Player skill is represented by ELO rating
  • Strategy advantage over another is represented as a bonus to ELO rating
  • The all-in strategy represents a strategy where randomness plays a significant role. This is done by reducing the ELO rating difference by 50% when there is one all-in played, and by 75% with two all-ins.

I have chosen ELO because of its simplicity. It's an easy way to represent player skill, translate it into winrates, and represent strategy matchups as giving a certain ELO rating bonus. Alternatively, I could have used TrueSkill with mu as skill, and all-ins increasing sigma or beta for given matchups.

The randomness and reduction of skill difference for all-ins can come from for example doing coin-flip builds, not managing to scout a hidden building, or by focusing on a single early rush with minimal player interactions where the better player might not get the chance to outplay the opponent, or the randomness of those few interactions won't get averaged out.

To represent the relationship between strategies: all-in < defensive < standard < all-in, I have chosen these payoffs (winrates) for equally skilled opponents:

[P1↓ P2→] All-in Standard Defensive
All-in 50% 55% 35%
Standard 45% 50% 60%
Defensive 65% 40% 50%

And this is how it looks like when there is a 200 ELO difference between players:

[P1↓ P2→] All-in Standard Defensive
All-in 57% 68% 49%
Standard 59% 76% 83%
Defensive 77% 68% 76%

As expected it's now favoring the player one. Values on the diagonal aren't the same anymore. Since all-in strategy is more affected by randomness, two players all-ining each other will be more random and hence closer to 50% than a standard-standard game.

★ ★ ★

Now what if we tried to find mixed strategy Nash equilibria for different ELO differences between players? It would show how players should mix their strategies based on how good or bad their opponent is. This assumes both players are rational and knowing all this.

The optimal mix of strategies based on game theory.
The second chart belongs to the opponent – letting you compare which mixes of strategies face each other.

A significantly worse player (> 355 ELO difference) should always all-in as that effectively reduces the difference between players' skills. At the other end of the spectrum, the player is better off always being defensive, as they can outplay the opponent later in the game, and it's all about surviving the all-in.

In this model there are 5 phases where different strategies are viable:

ELO difference
Viable strategies
   ? – -355 All-in
-355 – -69      All-in | Standard
-69 – 70     All-in | Standard | Defensive
70 – 356 Standard | Defensive
356 – ?       Defensive

This shows the importance of good matchmaking as the most strategies are viable for even matches. The same will be the case for close matches in tournaments.

Surprisingly, in phase 2 we see the number of all-ins increase while the player is getting worse opponents. It's caused by the rise of standard strategy for the opposing player. That shows the dynamics between even with three strategies might not be intuitive.

Another counter-intuitive thing is that a strategy being buffed against another can lead to the buffed strategy being used less. It will cause its counter-strategy to be used more and subsequently stifle the buffed strategy. Here is an interesting example where all-in is significantly improved but only against the standard strategy. This made all-in better for some ELO differences, but significantly worse at others where the defensive strategy became more frequent.

Changing all-in to be significantly better only against standard has big repercussions

For comparison, I will also include how it looks when all strategies are affected by randomness exactly the same way. In this case, all strategies stay viable at any ELO difference. However, I don't think that's a realistic assumption for most RTS games.

All strategies stay viable if all strategies are affected by randomness exactly the same way

The impact of randomness

Let's plot how winrate scales for certain strategies that are affected differently by randomness.

It's not surprising that the more a strategy is affected by randomness, the closer its winrate is to the 50% line. Flipping a coin would be fully on the 50% line regardless of the player's skill (-100% skill reduction).

If the effect of randomness on all-ins is set to zero, we get almost the same scaling.

This is an interesting result as well – mixed strategies scale pretty much the same as standard vs standard. You would think that by choosing strategies at random, you would introduce some randomness and move closer to the 50% line. But for this effect to be visible I had to significantly increase the winrates of strategies that counter each other (from ~55% to 99% and 99.999999% winrates in the two following charts).

When strategies counter each other with a 99% winrate, the difference becomes visible and the game more random.
Other pure strategies are stacked under the all-in curve as there is no difference here.
This effect further increases with a 99.999999% winrate. Asymptotically mixed strategies will go to the 50% line.

Final words

Thank you for reading. My main goal for this post was to see how I would implement and visualize this, and learn things along the way. And there were things I didn't expect – the effect of added randomness to a certain strategy, or sometimes non-obvious behavior of mixed strategies.

Here is the repository with my code. This includes naive solutions to 2x2 and 3x3 payoff matrices. If I wanted the project to scale to more strategies, I would be smarter about that or use a library. Overall it was a fun project and the charts look nice. This cannot be directly applied to a game like StarCraft II where players aren't fully rational agents, builds are more on a continuous scale, and there are other variables like balance, maps, and more.

Links to check out:

October 25, 2021

Transmission 11: Co-op

TR11: A plan for co-op
Transmission 11
  A plan for co-op

In this post, I will look again at Co-op, and more specifically at one way how I could imagine putting it all together. Speculating and thinking about individual features is a lot of fun, but here I want to take a more high-level look and see how a comprehensive plan for co-op could look and what would even be its goals. Some of the discussed topics are more general and interesting even outside of co-op or the RTS genre.

Introduction

StarCraft II Co-op turned out to be a big success even though it wasn't excepted to be played for more than a couple dozen hours. Later it was greatly improved with new maps, commanders, enemy AI, new modes (weekly & custom mutations, and Brutal+) and progression systems (mastery, prestige, ascension). Despite all those improvements and the mode's success, I believe it still has the most potential for both growth and improvement in future games.

Previously, I looked at various individual features that could be tried or improved in Co-op:

  • TR04 (survival mode, asymmetric mode, stream integration, etc.)
  • TR05 (events, greater events, weekly mutations, progression, etc.)

Laying out possible options for features is great. However, it's yet another thing to choose which of these features would fit together and which to leave out. In this post, I want to look at one such plan, but first what are the goals for it?

  1. Increase gameplay variety.
    → Games are unlike each other, and something exciting can happen the next game!
  2. Provide challenge to players that are looking for it.
  3. Create a cohesive structure that can be seamlessly expanded with new content.

A place for future content

I want to touch on the last point first and make it clear that it's useful to think about how a system can be expanded later. Getting this right is especially important for free-to-play games as there are always new players coming in, and the need for content updates is higher.

After several updates, DLCs, or expansions, many games suffer from clashing mechanics and overwhelming players. A new or returning player might get confused by several progression systems, currencies, or mission lines – some of which can be outdated. If it's not clear what the player should focus on, the experience might become confusing and frustrating. New games are usually carefully tested when it comes to new player experience and good game flow. However, with the following updates, developers are trying their best to add things with the limited resources they have, and the new player experience can suffer because of that.

Increased complexity of the main screen after launch (Angry Birds 2).
While this is just a screen, it's often accompanied by cluttering of gameplay systems.

Prestiges are a good addition to StarCraft II Co-op. But if a new player that just leveled his first commander to the maximum level chooses to prestige their commander right away, the game might feel grindy. The player will likely be doing the exact same thing again as many prestiges have only a minimal impact during leveling. Prestiges were designed to add replayability for long-time players, however, a new player doesn't know that and might choose to prestige instead of trying out another commander or playing with a full commander kit on mastery levels.

Choices a new player will have after leveling up the first commander (StarCraft II Co-op)
The prestige choice might look like the most natural path of progression, but it might also feel the most repetitive.

Obsolete content can also cause issues in games. Apart from confusing players, it's also an inefficient use of development resources. Some games have to resort to removing obsolete content from the game, and then there is Destiny 2 which will remove even content that players have paid for. That's a PR nightmare. Ideally each update would improve the game in long term.

This leads us to another point, it's preferable if the goals of developers (or publishers) are aligned with the player goals. Examples of misaligned goals would be if the player progression was artificially slowed so players would buy boosts, or if a competitive game was releasing overpowered characters and nerfing them only before the next one is ready for release. In such cases the game's longevity will suffer.

To sum up, there are three things to look for: (1) the addition of new content shouldn't make the game confusing for new or returning players, (2) new content should improve the game in the long term, (3) and player and developer goals should be aligned.

Loopity loop

Now let's go back to the first point – gameplay variety – and look at the overarching structure spanning across multiple co-op games. You could think of it as being made of gameplay loops of different sizes. The point of these loops is to create a change in content, pacing, and tension. Books and movies also have a rising and falling tension, however, in games you typically find loops of all sizes and rewards increasing with the size of each loop.

What are some loops that you would be able to encounter in co-op?

  • Small gameplay loop – a macro-cycle
  • Bigger gameplay loop – defend then attack
  • 1 game size – play a game, get rewards, spend points, check unlocks
  • 2–3 game size – encounter and complete in-game event (optional, could replace bonus objective, higher challenge, and rewards that include unlocks for greater events)
  • 5–7 game size – complete a greater event (even bigger challenge and rewards, static, players can save unlocks for later)
  • Weekly size – weekly mutations provide a reason for players to come back, discuss strategies and rank commanders
  • 25-ish game size – level-up one commander
  • 3–4 months – seasons provide another reason to come back for new content and challenges. New commanders and maps could align with seasons.

Compared to SC2 Co-op, there are a few new loops – event loop, greater event loop, and seasonal loop. The last one might or might not align with commander releases. I believe the two smaller loops would add more variety to the co-op as it can get a bit stale between weekly mutations. More on this in the next section.

Event and greater event loops, and what gameplay sessions might look like

The next game

"Something cool can happen the next game" is something that has been missing in StarCraft 2 Co-op. While the mode provides a good variety through various means (random partner, map, commander, enemy race and AI, and map pattern), the game can still feel repetitive. Brutal+ greatly improves gameplay variety with random mutators, but rewards stay the same and it often feels like you either get something all right or annoying. There isn't the feeling of anticipation – what could be next?

Some inspiration could be taken from Diablo III. There is a hierarchy to encounters and excitement coming from them: elite group/boss < Treasure Goblin < Gelatinous Treasure Goblin (splits into more goblins). Encounters are randomized and can combine – leading to at times crazy situations when you pull half the map while chasing goblins. This is a variable ratio reinforcement schedule at its finest – affecting both encounters and rewards.

It would be great to have things in an RTS co-op mode that lead to similar experiences. What could be added to facilitate this feeling that something exciting can happen in the next game?

  1. Events can randomly appear in missions. These are fully optional and provide higher challenges and better rewards. Some could be challenging by themselves, others could make the game harder after completing them (e.g., enable some mutator), and some could be more like Treasure Goblins – not providing direct challenge themselves but encouraging players to extend more.
  2. Randomized rewards that could be and awarded for more rare events. These rewards could include in-game currency, experience, greater event unlocks, cosmetic rewards, or commander side-grades. I'm against incremental upgrades as seen in AoEO, but I could see a limited amount of rare side-grade upgrades working.
  3. My survival mode has solarite upgrades where you can choose one out of three randomly presented upgrades. If leaned more heavily into this design, you could get something closer to a deck-building game. For a survival mode on a single map, this adds much-needed gameplay variety. The current upgrade design isn't the best, but it's still exciting when you manage to stack +10 bonus range to turrets while playing a commander with strong static defenses. If these upgrades are meant to be exciting, there has to be at least a chance for them to be game-breaking.

Similar upgrades can be found in Orcs Must Die 3's Scramble mode (third-person wave defense) or in Alien Marauder or Age of Darkness (survival RTS games). In all cases, these choices lead to unique playthroughs while leaving players some agency. One difference is that my solarite upgrades are given for completing objectives on the map and not just progressing. That gives players reasons to venture on the map and makes offensive-focused commanders more useful. I hoped there was a similar incentive in Age of Darkness with malices and crystals where enemy waves spawn, but you can only trigger a wave early or gather a few small crystals after it's triggered.

Choose your reward from the available options (Alien Marauder)
Pretty much the same thing but with prettier UI and higher impact (Age of Darkness)
Blessings are given after each wave (up to five).
Random negative modification (malice) active for one night (Age of Darkness)
On a custom difficulty these can be permanent.

What else made you excited and motivated to play just a bit more? In Diablo, it's the unpredictability of encounters and item drops, and the loop of trying out new equipment and skills while obtaining new ones at the same time. In Civilization games, it's the "one more turn" syndrome where there is always one task that has been long underway and could be finished the next turn. Seeking closure is natural and so players are motivated to play "one more turn".

Challenge

What would be the main sources of a challenge for players seeking it?

  • More difficult the highest standard difficulty
  • Weekly mutations and their backlog that can be completed
  • Events & greater events (~weekly mutation difficulty)
  • Empowered greater events (~hardest weekly mutations)
  • Survival mode (~you will most likely lose)

Typically as challenges become more difficult, the room for error becomes smaller, and the role of randomness increases – which mutators did you roll? what's the map? what commander do you and your partner have? Before you could overcome this randomness with skill, but the more challenging the mission becomes, the less randomness you can overcome. Knowing a challenge beforehand reduces the role of luck, and enables strategic planning before the game – coming up with a plan and choosing the right combination of commanders or specializations. This can be a lot of fun, and I would say this is the most "strategic" activity the majority of players will do in StarCraft II.

Because of this, more difficult challenges (greater events and weekly mutations) would be known beforehand, and players could prepare for them. Difficult challenges would be also aimed more at parties instead of random matchmaking. This again reduces randomness and makes strategic planning easier.

Basic events are less challenging, and so those could appear randomly during normal missions. They would also be optional, and so players could adjust their strategy during the mission before engaging with the event.

The map and mutators are known before the game for weekly mutations in StarCraft II Co-op
This reduces randomness and lets players strategize.

Let's approach this topic by looking at the game's unpredictability. We typically want some unpredictability, but it cannot be too low or so high that player actions don't matter.

Content that's not challenging can become too predictable, and so there is a role for in-game randomness (RNG) to spice up the gameplay and increase gameplay variety (e.g., random events, AI, map, mutators). However, if we increase the difficulty, the challenge combined with RNG could mean that the game becomes too unpredictable – it's decided by the RNG, and players lose the power over the game's outcome. For more challenging content it's better to reduce or remove RNG and let the unpredictability come from player execution and strategy.

From a low to high challenge:

  1. Casual co-op (low challenge, RNG is good and increases gameplay variety/unpredictability)
  2. Co-op challenges (medium to high challenge, RNG should be reduced)
  3. Speed-running or competitive modes (maximum challenge, RNG can hinder gameplay)

Recommended RNG here is inversely proportional to challenge. However, that's just a broad recommendation and there are always exceptions. In the end, it's all to have good gameplay variety while keeping player agency. There can be fun casual games with no RNG, competitive games like Hearthstone with a great deal of RNG (for better or worse), or Fischer Random Chess with just initial board input randomness (to combat the excessive focus on memorization of openings and build-orders).

Fisher Random Chess randomizes the positions of back-rank pieces and mirrors the positions for the opponent

Mission variety

It can be difficult to have enough content that can be played with commanders. SC2 Co-op eventually reached 15 unique missions with randomized patterns, enemy factions, and the maps could be further enhanced with various mutators in different modes (weekly & custom mutations or Brutal+). Let's see what other approaches could help the effort for more content playable with co-op commanders.

  • When creating campaign missions, make it as easy as possible to later port the mission to co-op. While a co-op campaign would be great, every mission would likely not support all present and future co-op commanders, as that would limit the campaign and commander design too much.
  • Have an easy way for mapmakers to let players use their purchased and leveled commanders in custom maps. The system would automatically get which commanders the player has and what's their progression status. No experience would be granted for custom maps, but it would make things easier for mapmakers (thus better and more content) and make purchasing and leveling commanders more meaningful.
  • If there is a variety mode that changes rules each week, co-op commanders could be playable during some rotations.
  • Having good challenging content with interesting rewards will be enough for some players. I believe the addition of events, greater events, and some kind of survival mode would help here.
  • Increased randomization (events & bonus objectives, attack wave timing and spawn points, more diverse hybrids/heroic units, experiment with dynamic weather effects like rain, snow, desert).

A plan for Co-op

With all that out of the way, let's finally look at one possible plan for co-op. This plan builds upon SC2 Co-op, is by no means perfect, and could be structured differently – for example with more focus on the survival mode, 2v1, or something wholly different. There might better ways to approach it, and I'm looking forward to seeing what other games will do. SpellForce 3 will be adding a co-op system, and there might be something to learn from Overwatch 2's Co-op missions as well.

1. More challenging highest standard difficulty. Together with the challenge of basic events, this would make the baseline co-op experience better for experienced players. The goal is to push the need for different modes that provide a challenge a bit further.

Standard difficulty cannot scale to the same difficulties as Brutal+, but there is a design space for some difficulty increase. This could include stronger and more upgraded earlier waves, hybrids gaining new or improved abilities, randomized spawn points, an equivalent to harassing Nyduses and Warp Prisms – similarly how Terran AI harasses with nukes, or heroic units like Leviathans being a part of later attack waves. Not showing attacking wave indicators is another possibility, but that might not fit well into co-op.

The downsides of having increased maximum difficulty for standard missions are higher fragmentation of the matchmaking queue if there are more difficulties, or making it harder to advance to the next difficulty if there aren't more difficulties. This could be addressed with an improved system for mixed difficulties, which doesn't work that well in StarCraft II.

Attacks on the Void Launch mission can be scary when waves combine and include heroic units like Motherships
(StarCraft II Co-op)

2. Increased mission randomization. This is to increase gameplay variety for normal missions. Randomization could affect events, bonus objectives, attack wave timings and spawn points, or enemy heroic units. More commander-to-commander interactions can have a similar effect in the random queue. It would be also interesting to explore a way to start a map at different times of day and weather (rain, snow, desert). That could be a purely visual effect – either random or tied to certain mutators and events (e.g., Blizzard → snowing). This should make the experience more distinct and memorable.

3. Randomized rewards are something I enjoy in action RPGs like Diablo, and it could lead to more excitement about rewards and more interesting progression. It's an understatement to say that you are not very excited to get your 59.5k XP after a mission in SC2. However, it's important to strike a good balance between what's randomized and what isn't. Randomized rewards can be tricky to get right.

I imagine each mission would provide a consistent reward the same way as in SC2 Co-op, this would include experience and in-game currency if there is any. Events, greater events and other challenges would also grant randomized rewards (cosmetics, bonus XP and currency, commander side-grades, etc.). Granted that there would be an alternative way to get a specific commander side-grade if you were unlucky and wanted it badly.

4. Events and Greater Events. I talked about them previously and in this post, and I see them as the main way to increase gameplay variety, create rising and falling tension and difficulty between games, and in the case of basic events also increase unpredictability. The main distinction is that basic events can appear randomly during normal missions, while greater events are semi-randomized challenges that a player can unlock and complete at any time when in a party. Greater events provide a higher challenge and better rewards. There could be empowered greater events for even more challenge and rewards if more unlocks were spent on them.

There is a lot to talk about, but one question is particularly interesting. Would requiring a party for greater events be beneficial? On one side it's a bit bothersome having to talk to someone and form a party, but on the other side, it leads to a better social experience. The goal would be made to make this as painless as possible. First, unlocks for unlocking a greater event are provided by the party leader, and so a person helping is rewarded without spending any of his unlocks. Players are encouraged to help others.

Second, unlocks can be saved up. This means there is no pressure to party up when you don't feel like it. The unlocks can be spent later when a friend comes online. This also makes solo play in random matchmaking more meaningful as it impacts when you play later in a party. And it naturally shifts these more difficult challenges to when you are in a party.

For these reasons I think requiring a party for greater events could be beneficial. Automated dungeon finders in MMOs like World of Warcraft certainly made it a lot easier for players to enjoy the content, but at the same time, it also hurt the social side of the game which is the main selling point of MMOs. I think greater events could incentivize social interaction, and that would have a positive effect on the game in the long term. This is also why I argued for making it as easy as possible to go from talking to someone outside of the game to playing together (with links). Though I cannot be sure that requiring a party would have the desired effect. Plus it depends on other factors like other social systems, how often would you engage with greater events or what are rewards. If players engaged significantly less with the content because of the party requirement, then that would be a problem.

Automated dungeon finder in World of Warcraft
Great for getting to play the content, less good for socializing in the game

5. Weekly mutations and backlog. Weekly mutations have been a great addition to SC2 Co-op and it would be great to see them continue. One nice thing to add would be a list of previous mutations. It would mark which mutations you have completed, and let you play any of them when in a party. You could be given a reward for completing the ones you haven't already, but the reward would be lower than when completing it in its week. Still, that would be a lot of content for people who weren't playing each week.

I also previously suggested letting players repeat the current weekly mutation with unique commanders few times for limited additional rewards.

Weekly mutations could be promoted on the main screen

6. Survival mode is something that shouldn't be missing from Co-op. But there are multiple ways how it might be implemented. It could be part of greater events, an optional part of certain missions, or a separate mode altogether.

Another question is what exactly would be the goal? Is it to survive a certain amount of waves as in They are Billions and other recent survival RTS? Get the best score with infinite ever more difficult waves? Or complete as many side objectives while defending? My demo for SC2 Co-op was with infinite waves, but I also like the idea of a fixed amount of waves and side objectives to complete. That would enable some sort of dynamic difficulty by players choosing what they will try to complete, and increase variety by randomizing these objectives.

7. Game passes/seasons could be a part of Co-op. The main idea is to add something new for players to enjoy on a scale of 3–6 months. These might or might not align with commander and map releases. They could include new rewards, (greater) events, and other gameplay modifications which might or might not stay after the season ends (similarly to leagues on Path of Exile).

There could be additional monetization beyond purchasing a commander, but that would be tied with other modes like competitive, and I don't want to speculate on that here.

other notes

  • I didn't mention streaming integration. While I think it's great to have, it's not something defining co-op.
  • Asymmetric 2v1 with co-op commanders could be a lot of fun. If there was enough willpower to try it, I would lean more towards trying to seamlessly integrate it into standard co-op than creating a whole separate mode.
  • I didn't include anything similar to Brutal+, though (greater) events would likely include mutators. I don't think the mode is bad, but there are challenges with it in StarCraft II. This includes using mutators that were designed for something different, not knowing the mutators beforehand, and lower Brutal+ difficulties being more annoying than challenging. A lot of it could be improved, but right now I prefer the event-greater event system more.
  • There are a lot of ideas about other modes with mutators like my challenge mode, scaling modes where each mission adds mutators (or you choose from limited options), or player-created mutation challenges that can be completed by anyone or selected players. These are very interesting as well and could be used if co-op was structured another way.

Closing

This has been a long post, and I think I have touched on a lot of interesting topics. The goal here wasn't to show a recipe how to create a co-op, but instead to see what such recipe should even do, and then try to formulate something that I could imagine working. I don't expect the actual co-op mode to look anything like this, but hopefully the post was useful and interesting. Thank you for reading.

More links to check out:

And previous transmissions...

September 13, 2021

Transmission 10: Social Features

TR10: Social Features

Transmission 10
  Social Features in RTS

I wrote about socialization in RTS before, but with the new discussion topic on r/FrostGiant, I thought it's worth revisiting it. After all, socialization is important and helps to grow the community around the game. Plus I believe there are social features that have a potential and could be looked at.

★ ★ ★

My interaction with social features in StatCraft II (SC2) has been fairly limited. I mainly use discord and reddit for communication related to gaming. And of course, YouTube and Twitch deliver most of the video content, while Twitch is also a decent place to interact with other viewers.

While I did use official forums, I'm not sure it's worth having them when discord and reddit fill those rolls well and are more accessible and discoverable. It would be good to promote these communities (reddit, discord, etc.) in the game – together with currently live streams and other community content.

Basic features like a friend list, party chat, and direct messages are still very useful for communication in-game. A good ping system can reduce the need to chat in team games and lowers language barriers. But a built-in voice chat is something I have never used in any RTS game.

Some older games (BW, WC3) managed global chat channels a bit better than SC2. I also like the idea of putting players into chat channels based on their location (in addition to the global chat). It's probably a better experience to see players you have something in common and players you might see again, rather than a randomly selected group of players from the whole server.

★ ★ ★

Now let's look at some more interesting features. Some of them might be bigger in scope, but I believe it's the small changes that can make the biggest difference by reducing the barriers in how players interact with the game. This includes how easy and fast is it to go from talking with someone on discord to playing a game together, or the other way around – how easy is to share things to social media. If a feature is awkward, takes too many clicks, or doesn't work consistently, then players won't use it even if the feature itself could be great.

A player could generate a special link and post it both outside or inside the game. Clicking the link would send another player directly to join a lobby, a party, to an in-game spectating session in progress, to join a clan, a group, or to a replay hosted on the game's servers.

This could be a good improvement given how much communication nowadays happen outside of the game. Often times setting a party with someone is just a bit too much work for one or two games. With this you could generate a link, post it into the chat, and clicking it would automatically add the player to your party. The goal is to reduce the time and work it takes to go from chatting with someone to playing with them. Though links could have many other uses.

To prevent clicking on the link and launching the game only to realize the party or session is long over, the link could go first to a game's server. The server would check whether the session is still available, and if yes, redirect the user to launch the game if necessary and to the session. A feature isn't very good if it doesn't work consistently.

The game launching fast helps as well. I can go from desktop to killing demons in Doom Eternal in 10 seconds if I smash buttons. But I will be more reluctant to play few games if launching the game takes a significant amount of time.

Every second counts in games (source)

2. Easily shareable content

Another way to reduce barriers is to make sharing in-game content easy. I already wrote about post-game screens which tell a story that can be shared. I tried creating such post-game screens in my MM maps (image) and SC2 Co-op Overlay.

Post-game information in my SC2 Co-op Overlay
Opus Magnum is excellent at making it easy to share your solutions

Another interesting feature would be if after each game few interesting moments would be automatically identified. Players could replay them in-game (a sort of mini replay) to remind themselves of the cool moments, save them to their profile or share them. There could be an option to render them into a video for sharing outside of the game. Players could choose specific times from a replay, but having those moments automatically identified would make it significantly easier.

3. Streaming integration

Streaming integration can help to make streaming more engaging for both streamers and viewers. I wrote about it previously and created my own implementation as a proof of concept for my MM maps and the overlay app.

I believe there is some potential, especially for PvE modes. Other games have their implementations like Warhammer: Vermintide 2 where viewers can add buffs or items to players, spawn enemy units or activate mutators; or Riftbreaker lets viewers join as enemy mobs, and vote on upcoming events.

Viewers joining the game – no gameplay effect but it's still more engaging for the viewers

4. Social context when playing

Playing a competitive 1v1 or team games in a random queue can feel lonely. Giving more social context to the game can make it less lonely and your achievements more meaningful. Leveling a commander in Co-op feels more meaningful because you know you will be able to play it with other players (even if you switched to your main commander right back).

Other things that could help:

  • Showing notifications to friends or clan members when a player achieved something. Blizzard games do this to some degree for "achievements", but that mostly comes off as spam. Only the truly important events should be shown (e.g. a player advanced into the next league in 1v1).
  • Leaderboards for players in a clan or local area.
  • Show MMR in relation to people you might know. SC2 has divisions, but I don't think people care about the random players in a division. It could be better to frame your progress relative to noteworthy players like your friends, common opponents, etc.
Things in sections #2 Easily shareable content and #5 In-game spectating can improve the social context as well.
The focus on losing points isn't good, but the game nicely shows your progress relative to your friends
(StarCraft Remastered)

5. in-game spectating

In-game spectating could be a good addition to the game. I can see it work in various situations:

  • Spectate a friend's ladder game. This would be good for socializing and learning. The vision would be limited to your friend, and ideally no or minimal added delay. Low delay would be very helpful for coaching as well.
  • Spectating selected or a random player in the chosen league and matchup. This would be good for learning and socializing if more spectators are there. Spectators have full vision, can chat with each other. But there is an added delay to prevent abuse.
  • Spectating tournaments.

I wrote about this topic before:

There could always be a list of ongoing games that you might find interesting. You could update your preferences based on matchups you want to watch, favorite players, or leagues. Games with more viewers or with your friends would be more likely recommended.

Spectators would be able to chat with each other, form a party to join another game together, or bet on game outcomes. There could be cosmetic rewards tied to spectating and betting.

Overall, I believe this could be good for socialization, learning, and just maintaining interest in the game. Some days you just don't want to play, but you might hop in and spectate a few friend's games or with friends. I don't believe online streaming provides quite the same experience, it has a barrier to entry, and not everyone can or will stream.

My naive image of how in-game spectating could work with the lockstep architecture

6. in-game Betting

In-game betting could accompany in-game spectating. It's a lot more engaging to watch a match that you have bet on – even if it's meaningless internet points.

I imagine it being similar to the betting system on Twitch. There would be a betting currency that players would be given for free periodically. The only way to use it would be to bet on in-game matches or tournaments. Winning would get you more of the betting currency and there could be a chance for other rewards if the game supports it. But other than that, the betting economy would be self-contained without any option to purchase the currency or cash it out. Its sole reason is to make spectating more interesting. The only things to gain is to show your betting stats and occasionally gain few cosmetic rewards.

Betting has been done in the peepmode (arcade map) in games like StarCraft II, you can bet your Twitch points on Twitch, and Dota 2 has an extensive betting system.

Betting with Twitch points on a game's outcome

7. Clans & Groups

I have thought about clans for some time, but it's hard to find a good use for them in a game like StarCraft II. Most of the communication already happens outside of the game, and then going from there to playing the game should be as easy and quick as possible.

Still, some support for players to organize in-game is good – whether it's a clan or a group – basic features like shared chat, moderators, ability to post links and announcements.

Other clan features could include:

  • Clan leaderboards (of clans or players in a clan) if there are good metrics for that.
  • Clan cosmetics for all members – those could be obtained by individual members or by "leveling" the clan in some way. Perhaps these cosmetics would have more options for customization and combination to make them uniquely clan-specific.
  • Some small rewards could be given to everyone in the clan when a player obtains a certain reward. The goal of these would be to make clan members appreciate the one particular member who is directly responsible for that reward.
  • Then there are always clanwars but implementing things like that is likely to be difficult.

Closing

Thank you for reading. I highlighted a few social features in this article, and hopefully we might see some of them in future RTS games. I believe there is a potential for improvements – whether it will come from bigger features like streaming integration or from smaller changes reducing obstacles and framing things better.

Interesting links to check out:

  For discussion check this thread on r/FrostGiant. And check out my previous posts and transmissions.

Recent posts

Endlinks

Copyright

Powered by Blogger

Main post