Year In Review: 2020

TL;DR: We’re still making games.

COVID-19

The global pandemic hit all of us. Fortunately none of the team fell ill, though family members did, and there were several exposure or symptom scares. And while the team is distributed and work from home, that’s not the same thing in the middle of a pandemic, and when can’t really go anywhere else.

And of course we weren’t able to have occasional face-to-face meetings at conventions — or see fans.

Lights Going Out

Art by Ellen Barkin

We’ve been working on the next Six Ages game. “Lights Going Out” will let you continue the story of the clan you guided in “Ride Like the Wind” (though you can start a new one from scratch). Perhaps 3/4 of the events have been written and coded (with games like these, it’s hard to know exactly how many there will be, since we often add more towards the end, to fill in missing bits). And about half have been exhaustively tested. This is far enough that it’s now possible to play a significant chunk of the game without running into missing parts. Well, that’s what I tell myself, and then QA files bugs about missing parts.

Thumbnail by Jan Pospíšil

The exact art requirements are similarly hard to know in advance (since those new scenes may require new art). But I think well over half of the scene art is complete.

We just started thinking seriously about the endgame — what constitutes “victory” in a story game. Polishing and coding this is on the schedule for January.

There’s still too much uncertainty to talk about a release schedule, unfortunately. But it’s now far enough that we can start thinking about tuning, and testing the game as a whole instead of just in pieces.

Ride Like the Wind

Although most of the development effort has been on the new game, they share the same game system, and some “Lights Going Out” bugs are common. And we’ve been fixing bugs as players report them.

Luckily, there haven’t been too many of those, so I’ve held off on making a lot of updates. Plus, just making a release takes resources, and QA has been less available thanks to COVID-19. But I do expect a bug fix release next year.

Future

Last year, I mentioned prototyping a new game. A combination of events led to a digital prototype. There might well be a game there, but it’s still a side project to have in reserve.

Not Branching

Although people sometimes describe Six Ages (and its predecessor King of Dragon Pass) as “choose your own adventure” games, they are definitely not branching narratives. Choices do lead to other choices, but not along a predefined path.

Branching content can give the player a lot of choice, but even if you have only two choices for each decision, you can end up with a huge number of paths. And you’ll be creating content for pathways that will only rarely be visited. There are a variety of techniques creators use to deal with this. Six Ages and King of Dragon Pass address the problem by not turning their decisions into branches.

I’ve written (and spoken) before about how KoDP and Six Ages avoid the combinatorial explosion of branching by providing a political-economic framework to give your choices context and meaning. The narrative is broken into what we call “scenes” (they can also be called “floating modules” or “storylets”). Scenes are often picked at random, though with conditions to make sure they’re relevant or interesting. Typically they’re written to work in any situation. For example, a neighboring clan wants something from you. Whether they’re unfriendly or your allies makes a big difference, as does whether you can afford to pay what they ask (either in wealth or relations with other neighbors). Your response affects relationships (turning down a request has the potential to end an alliance), wealth, or internal politics (your own people have opinions too). This gives an implicit connection to the next scene (we lost a friend, we’re broke, people are grumpy, etc.). Essentially, most scenes connect to other ones—less directly than by branching, but more flexibly. And it’s easy to have more than two choices, to give players a wider range of action.

One way scenes connect seems rare in narrative games: a choice may trigger another scene at a later date. Plenty of story games have a time element (either by each choice advancing a clock, or treating time loosely and advancing the clock when conditions are met). The multi-generational scope of Six Ages means we can run a followup scene a year (or more) later, after ten player actions and another batch of scenes. For example, if you claim poverty, your neighbor may tell you they’ll be back next year. This is arguably a branch, since you made a choice and it leads to a repeat of the event. But intervening events may have changed the context, or invalidate the followup (for example, if a feud breaks out they won’t be back with a friendly request). It’s much more an emergent narrative than a branching story.

Diagram showing connections between scenes and responses

Six Ages does have scene sequences that are pretty close to a standard branching narrative. These tend to be a lot more complex for the QA team to test, since all the possible paths through the set need to be traversed. This is the chart that Jess made to track how a 6-scene sequence worked. The lines of flow are mostly implicit connections—choices in the second scene can impact your choices in the third or fourth scene, etc. They aren’t branches—in most cases, previous choices don’t preclude possible responses. But they’re distinct paths that provide context.

Our writer, Robin Laws, just finished writing another set of related scenes for Six Ages: Lights Going Out. I just finished coding them (into our OSL scripting language) today, so QA hasn’t had a shot at them. But I did my own chart to help with coding, and hopefully with testing. (This one just shows scene flow, not individual responses.)

Sketch showing how scenes might flow

Without the direct branching of “If you attack, turn to page 24,” sequences like this make use of state variables to keep track of what happened previously. This is hardly unique to Six Ages. All the scripting languages I’m familiar with let you do that. This sequence seemed particularly variable-heavy, however. I counted 25 variables that coordinate between 8 scenes. Some of this is for narrative continuity (what we learned and who we learned it from), tracking how often something has occurred (it may not be possible to do it again, or it may impact how easy a course of action is), which leaders were prominent in a previous scene, or magical effects. Not surprisingly, there’s an additional variable that can relate your decisions here to scenes that aren’t part of this set.

The goal of all this is to tell an interesting story that emerges from multiple player choices (not just story choices), unfolding after multiple game years. Almost as important, if you replay the game, you can make different choices for a different story—but even the same choices can give a different story, because the events can take place in a very different context.

August Update

I don’t have to tell anyone that this has been a strange year. I don’t know if I can really blame 2020 on the lack of blog posts, however. Some of the progress is hard to show, and we want to have a few surprises when the next game comes out.

The COVID-19 pandemic did impact things. We’re pretty sure one team member caught it but had almost no symptoms (and at a time when there wasn’t any testing to confirm it). Otherwise there hasn’t been any direct impact, since the team is distributed and people work out of their homes. But that is still very different when other family members are now doing that too, or you can’t leave your home. So we’ve all been affected.

An Orlanthi magician is about to hurl a lightning bolt

Despite that, work on the next game, “Lights Going Out,” has proceeded. Currently, 317 scenes have been written and coded. Two thirds of them have been exhaustively tested. (For comparison, “Ride Like the Wind” ended up with 364 scenes.) Most of the non-scene writing hasn’t started, though there are currently two rituals running. (One of those may need to be reworked.)

We have a lot of great art. I don’t know quite what our target is here (since a lot depends on the not-yet-written scenes). But more has been completed so far this year than in 2019.

Although most testing has focused on individual scenes (the “trees”) in isolation, we have done some QA based on just playing (the “forest”). I think you could play for 13 years before running out of yearly content. So while it’s not at all balanced yet, the basic game still works fine.

A shaman sits with her drum, spirits swirling about her

Although the basic game is the same, different things matter. The game takes place generations later, so factions other than the Seven Families are important. And you’ll possibly be interacting with the supernatural in different ways. Plus, the supernatural will impact you in different ways. I’m in the middle of tweaking the map for this.

And speaking about both games, you can indeed load a game you won and continue it. A number of factors are brought forward. At least one was something that we hadn’t originally planned for. (You can certainly play “Lights Going Out” without having won or even played “Ride Like the Wind,” though we hope it will be a richer experience if you have.)

As I mentioned in December, we’ve also been prototyping some ideas for a different game. As I write, its fate is unclear. For what it’s worth, as a separate project it hasn’t affected the “Lights Going Out” schedule.

Unfortunately, that schedule still isn’t solid. It’s taken longer to get here than I’d like, but I think we have made considerably progress during a challenging year.

Word Gets Around

In Six Ages, your relationships with other clans are vital. The game tracks a number of factors for each clan, including how much they like and respect you, any slights they hold against you, and whether they have a formal alliance or feud.

These factors are all dynamic. They’re adjusted not only when you interact with a specific clan, but also when you do something that is likely to be newsworthy and spread to other clan. For example, in one event a combat hero can gain the respect of a clan and its neighbors. This OSL code handles that:

otherClan.fearsUs += 40
otherClan.likesUs -= 40
# all clans adjacent to otherClan .fearsUs +=20
a = AdjacentClans(AllClans, otherClan)
foreach c in a {
    c.fearsUs += 20
}

Other events have even wider impact (this one on all Rider clans):

# LikesUs+=3 * q (all Hyaloring otherClans)
h = HyaloringClans
foreach c in h {
    c.likesUs += 3 * q
}

But these are just numeric values. As Sin Vega discovered in her attempt to play as a petty jerk, your deeds can earn you a more specific reputation:

“We are known for our rudeness”, says the lawspeaker later that year. It’s nice to feel appreciated.

“We are known as backstabbing weasels”, says the lawspeaker at Sacred Time. I might have gone too far this year.

These reputations reflect a suggestion (case 8801) from our QA lead Liana Kerr, who wanted a way to give players a stronger connection to their clan.

Behind the scenes, there are a number of trends or events that you can become known for. A single act of mockery towards guests won’t give you a valley-wide reputation for rudeness. But they accumulate, and if you keep at it, sooner or later this will be the most significant thing you’ve done. By the same token, attacking your allies is a shocking breach of tradition and protocol (not to mention good sense), and that gets everyone’s notice. Over time though, any of these can be less notable in people’s memory if you no longer do them.

Our explorers visit the Great Glacier

So each “known for” item has a numeric value, which indicates its significance. Visiting the Glacier is a big deal, but not as unusual as managing to defeat the Alkothi. But if you raid several times each year, the raid score will accumulate until it outweighs defeating the Hell Men. Or perhaps by then that feat was too far back to matter any longer, since the score for each item is reduced every year.

BecomeKnownFor("glacier")
An advisor says, “The clans of the valley know us for our many shrines.”

An advisor says, “The clans of the valley know us for having heroic clanfolk.”

Most of these actions are also tracked numerically through the standard relationship system (if you can defeat the Alkothi, you will gain much respect throughout the Valley), but others are a great way to reflect other player accomplishments like temple building or nurturing heroes. And the next chapter, “Lights Going Out,” will have items specific to its story. It’s a flexible system (we added several more late during development), and is a colorful and concise way to comment on the player’s story.

Year In Review: 2019

TL;DR: We released Six Ages: Ride Like the Wind for PC!

GDC

In March, I gave a talk about the design of Six Ages (and King of Dragon Pass) and how they work behind the scenes. This should be available in the GDC Vault.

PAX

We made a special demo version of the game to show at PAX West. (This gives a super-limited introduction and ends after one year.) Kitfox had a computer in their booth dedicated to this. It was great to see people actually playing the game, and meet one of the artists in person for the first time.

Update

While the game was being ported to PC, we were fixing bugs discovered by our iOS players. Originally we had hoped to make a single release, but rather than delay things, we released 1.0.8 to the App Store.

Lights Going Out

We had begun work on the second chapter, Six Ages: Lights Going Out, last year. It’s always hard to know exactly how many interactive scenes a game will need, since it isn’t until you play for a while that you know what’s missing. But assuming chapter 2 is about as complex as chapter 1, we’re about halfway through scene writing and coding. And the scene-specific QA is about 30% complete.

We don’t have any release information yet.

Port

Our goal was to release Six Ages: Ride Like the Wind for Windows and macOS in 2019. What that really meant was by mid-October, since indie games can’t launch whenever they feel like it and expect to get any attention. We needed to avoid as many similar game releases as possible, and beat the Christmas release cycle. (If we had slipped into November, we probably would have had to hold the game until 2020.)

It was a bigger project than we had expected, but Rusto came through and we did in fact release on 17 October.

Having a game on Steam has been a bit of a learning experience, since I tend not to buy my games there. I was surprised that you can buy a game you cannot actually launch. (We’re sorry that the game requires Windows 10, but there isn’t anything we can do about it.) GOG was different yet again. It was nice to have a publisher deal with many of the details.

I was a little disappointed that we didn’t get a lot of reviews, though perhaps we had done too well getting coverage of the iOS version, and it was hard for game sites to justify a second review. Plus, there really was no great release week — we came out at the same time as Disco Elysium, for example. Still, I was pretty pleased to see the Rock Paper Shotgun review.

And, we have been nominated for a few awards.

The port also gave us a way to sell Stan LePard’s soundtrack, which we had gotten requests for since the iOS release.

Future

I have no idea if the Indiepocalypse is real (since Six Ages was my first PC release), but it does seem like the publishing world is different than a year ago, and definitely since we re-released King of Dragon Pass. Although we are busy with the second Six Ages game, I think it’s a good idea to think about what might come after.

I have been making notes and trying things out. The prototype shown here won’t be the next game, since it felt boring. But maybe I will have something to share next year.

PC User Interface

We spent a lot of effort making sure that the mobile version of the game worked well on all screens, from the smallest iPhone to the largest iPad, and from the low-resolution (132 pixels/inch) iPad 2 to the super-crisp (458 pixels/inch) iPhone 11. So we wanted to make sure that the personal computer version worked equally well with a mouse, keyboard, and PC screens.

Layout

iPad and iPhone shapes

iPhones and iPads come in a pretty large variety of screen sizes. Many iPhones have a 16:9 aspect ratio and many iPads are 4:3, but you need to adapt to different shapes. For mobile, we had two main rules: always use the entire screen, and since the pixel size is constant, show more content on larger screens (i.e. cover less of the text and require less scrolling). A secondary rule was to show all artwork — it’s never cropped.

As most games treat them, PC screens are actually pretty limited in sizes. The actual pixel resolution doesn’t matter so much as the aspect ratio. Most screens are 16:9, some 16:10, and some 4:3. Other aspect ratios are rare.

All PC screens are large enough that we can show the menu and dashboard on the left at all times, like our iPad layout. And stretching management screens from the nominal 4:3 design to 16:9 generally worked well. That covers most of the three dozen screens, including dialogs like Emissary and Sacrifice.

4:3 iPad

Things got more interesting when there are illustrations (like interactive scenes). Pat Ward’s design assumed a 4:3 screen (those were the only iPads when we began the game), but I was able to add some blank space in a few places to deal with things like the 12.9 inch iPad Pro, where picture plus advisors no longer filled the screen.

16:9 PC

But significantly wider screens makes a difference. With a 4:3 aspect ratio, the text parchment covers part of the illustration. With a 16:9 screen, text can be on the side, leaving all the art exposed.

On a 16:10 screen, the text would end up too narrow if it were restricted to the side, so it will cover artwork.

Unfortunately, we ran into some layout issues with 5:4 screens. These are rare, so we violate the “fill the screen” rule and letterbox. (This is pretty common for games.)

Unlike iPad, where the larger iPad Pro lets us show more information, larger PC screens are just larger. Since text is larger, it can use more pixels, and look crisper. Other than that, the game looks the same on my 5120 * 2880 display or QA’s 1366 * 768 laptop.

Controls

Six Ages uses three custom controls: value sliders, filters to choose what’s shown (e.g. feuding or allied clans), and a similar picker to sort leaders.

Sliders don’t need a large target to adjust the value, since a mouse is much more precise, and you can click on the bar to increment or decrement.

In a standard desktop app, you’d probably use a popup menu to filter a list. Mobile UIs don’t usually use popups, which is why we had a horizontal picker. But for the PC, we went back to the default. The precision of the mouse means that this can be more compact.

We probably could have used a popup to sort leaders, but I wanted to emphasize that one control would show you different information, and the other the same information in a different order. So we kept the horizontal list.

Mouse

Rejected Knife Cursor

Most games use custom cursors, to fit the game theme. I really liked the idea of using the curved knife from the game logo, since once you flipped it, it was at the same angle as a standard arrow cursor. But nobody liked how it worked in practice. One playtester called it a “feather.” It was also unclear how large to make it. We eventually settled on a more traditional arrow, but in the colors of the knife.

Arrow Cursor

Many UI elements need a rollover state, to indicate that they will do something when clicked (and aren’t a decorative element). We didn’t need this for the mobile UI, so it was something we had to add to our buttons. (Thanks to Xin Ran Liu for working with me on this!)

Rollover is also a great way to show transient information — like a tool tip. We had a few places where you tapped to get extra information, so these were easy candidates for rollover. (Note that you want to see advice while interacting elsewhere on the screen; you click to show it, rather than have it disappear as you point to a response.)

The game has lots of scrollable lists and text, so the mouse’s scroll wheel usually scrolls. We broke this convention to support another common game convention: using the scroll wheel on the map zooms in or out.

Keyboard

Although the game can be played entirely with the mouse, it’s convenient to have a keyboard shortcut for common operations like dismissing news or picking a response. To make this work, responses are numbered.

And you can reveal an illustration behind text with the space bar.

I had wanted to let the player show advice via the keyboard, but decided not to delay the game to implement this.

Gold Master

The PC (i.e. Windows and macOS) version of Six Ages: Ride Like the Wind has reached “Gold Master” status!

While we are not actually shipping a CD off to manufacturing (like we did 20 years ago for King of Dragon Pass), we have a build that we can submit to Steam and GOG for their approval and release process. This also means that reviewers can be looking at a final build.

To get to this point, Rusto Games has been busy fixing bugs. And we’ve had our own QA testing as well as very helpful beta testers trying to find bugs. (QA also has the task of making sure bugs are actually fixed.)

The final phase is working with our publisher to make sure the stores are set up for release on 17 October.

Windows and Mac Release Date

It’s been a long road, but we are planning to release Six Ages: Ride Like the Wind for Windows 10 and macOS on 17 October!

https://twitter.com/KitfoxGames/status/1176873996249370624

It will be available on Steam and GOG, and you can wishlist it on either store.

We’ve updated the screen shots at sixages.com so you can see what it looks like on a computer. And our publisher, Kitfox Games, made an updated trailer.

P.S. We have no news today about other platforms.

Release Notes

We just released a new version of “Ride Like the Wind” on the iOS App Store. A lot of the changes are fixes for bugs reported by players. (As a reminder, we want to hear about problems no matter how you tell us, but our FAQ explains the best way to send in reports.) Other changes came about because we’re working on a sequel and a port.

Developing a sequel means reusing as much of the game as possible. This can mean extra scrutiny as part of the code is made a little more general-purpose, or just because we’re running it in a different context.

Developing a port makes you play the entire game again looking for bugs. Sometimes the bugs are in the game itself, not in the new code of the port.

I try to avoid the typical “Bug fixes and performance improvements” in the update notes and explain what you’re actually getting. But even with a thorough list of changes, I thought it might be interesting to go into a little more detail. This is, after all, a development blog, so I’ll share more of what goes on behind the scenes. (A few of the changes don’t have any particular explanation, so are not mentioned here.)

New interactive scene

While working on “Lights Going Out,” we were discussing how clans relate to each other, and I realized there was a common way missing. I got this working in the new game, then made a similar scene for the first one.

Reworked emissary flow

Emissary arriving and deciding on mission

The upcoming game will let you send emissaries for new purposes. On one hand, we didn’t need to change “Ride Like the Wind.” On the other, we were working on a port, so why not make the change once (before the dialog was ported)? The original approach was a little inconsistent if you were dealing with feuds, so the new flow gets rid of that rough edge. It’s also an opportunity to show more advice.

Improve compatibility with iPhone 4s

One player was using the smallest possible phone. The experience is still not optimal, but it’s a little better now.

Better handling of 10.5 and 11 inch iPad Pro, and 12.9 for map

The 11 inch iPad Pro didn’t exist when we were working on the previous version. Our original design was for the 9.7 inch iPad. Although the UI is adaptive, some of the art was designed for a specific aspect ratio. And, the newer devices also have safe areas for rounded edges or system UI.

Correct bonus for 3 treasures

I found some inconsistent coding while looking for how to best implement a “Lights Going Out” treasure. To make sure it doesn’t happen again, I added a unit test.

Fixed a couple curses

Cursing another clan had different effects in different scenes. The same curse is now consistent wherever you choose it.

Healers are much less likely to be war leaders

I also fixed a bug that occurred if a healer happened to be the best war leader. At the time of battle, the game picks an available person with good leadership as well as good combat. That may be strictly logical, but it’s not plausible that someone devoted to the peaceful healing goddess Erissa would direct warriors to attack.

Fixed bug that might have caused some scripts to be queued twice

This one was player-reported, a very rare combination of events.

Fixed some typos and incorrect recommendations

This was probably the most commonly reported category. Again, thanks to everyone who pointed them out.

Fixed crash after deleting saved game

This was probably the most benign crash possible (the app did delete the saved game), but also one of the more commonly reported ones. It was also hard to figure out exactly what was going on. I tried to fix it several times, but finally figured out a way to reproduce the crash and fixed it.

Distinguish between several ways to connect to the next game

Now that we actually have the next game in development, we’re working on making it meaningful that you played the first game (while at the same time making sure players can begin with the second chapter and not feel left out). There were some copy-paste errors that could have affected a few of the story paths.

Tip for ritual misstep

Another context-sensitive note about how unpredictable the Gods War is seemed appropriate.

Very minimal support for keyboard

The Windows and Mac version supports keyboard input. The level of support isn’t as strong, but if you happen to have a keyboard attached to your iPad, you can use it in a few places.

Some Notes on Porting

Many games can be brought to new platforms with some careful attention to the user interface on the new device. In fact, I’ve done this twice (adding iPad support to King of Dragon Pass, and adding iPhone support to Battle of the Bulge). You may need new art assets, and certainly a bit of new coding. But most of the game code is identical.

Back when I started working on Six Ages, this was my plan. Basic development was on iOS, in part because the tools were more reliable. I had experimented with two different solutions to bring that code to other platforms, and was optimistic that I’d be able to just rebuild the game. Then I’d be able to polish it, add support for platform-specific achievements, and start a new testing cycle.

Things didn’t work out as I’d planned. Both of the porting libraries I had expected to use were discontinued (one formally, one not formally abandoned but clearly not viable).

So instead of just recompiling, we were faced with rewriting. That’s a way bigger hurdle. And that’s why it’s taken longer than our original plan.

Achievements screen shot: “Most Recent Fort builder”

I’ll discuss this in more detail in the future, but we’re pretty much at the point of adding support for platform-specific achievements. QA has been testing the port, and we hope to bring in outside beta testers soon. Our publisher has suggested that people interested in testing the game sign up on Discord. If you’d rather wait until the last bugs are out, wishlist the game on Steam or GOG.