deckbuilding

Day 12 of 30. I've recently been diving back into a favourite game of mine, Slay the Spire. It's a deckbuilding roguelike: you ascend the Spire, fighting monsters using your deck of actions, and building that deck along the way. The monsters and paths through the Spire are random, and if you die, you start from the beginning.

For me, this game is almost meditative. There's no competition, no overly juicy interfaces, no actions-per-minute-fueled twitch reflexes. Just you, the Spire, your cards, and your slowly growing knowledge of the game's systems which, though simple, interact in intricate ways you must master to progress.

Despite the near-absence of flashy action, there are Twitch streamers that make a living from Slay the Spire. Since you don't compete directly against other players, these streamers instead show their prowess through metrics like how many times can I win consecutively on the hardest difficulty?

There's also something powerful to the deckbuilding and roguelike aspects of the game. They ensure a level of randomness that ensures you cannot win by pure strategy alone. Slay the Spire is not chess - though maybe this is an unfair slight against chess, where variants like Bughouse or Blitz challenge players to quickly process their perfect information about game state.

Similar to Hearthstone or Magic, Slay the Spire asks players to factor in probabilities, possibilities, risks. No two games are alike. No two positions are alike.


One of my favourite snippets of code (aside from Quake's fast inverse square root) is Henny, a nearly-one-liner that was entered in the Second International RoShamBo Programming Contest:

int henny() {
  return((*opp_history?opp_history[random()%*opp_history+1]+1:random())%3);
}

So let's say you're playing rock-paper-scissors with a friend - but not just once; no, you've agreed to play 1000 times in a row. Luckily, you have perfect memory, and can remember every move your friend makes (that's opp_history).

You also don't want to overthink it, so you land on a simple strategy: each round, you'll pick a random move your friend has made, and play the move that would win against that move. (And if it's the first round, you'll just pick at random.)

...and that's Henny. Nice, simple, effective enough to beat out 22000-line neural-network-based behemoths (to be fair, this was back in 2000, 16 years before Deep Learning was published).

Rock-paper-scissors, too, is a game of imperfect information. A game of chances and risks, where no two games are alike. Even though Henny is elegant, it didn't come close to winning: that honour went to Greenberg, itself inspired by the winner of the first contest in 1999. It turns out devious one-liners are sometimes not enough to win, even at a seemingly trivial game like rock-paper-scissors that, unlike Slay the Spire, has no intricate interacting systems.


There's also, at heart, just something wonderful about a game that respects you as a player. A game that's not trying to hook you on microtransactions or DLC updates. A game that doesn't even try that hard to be addictive. It brings me back to a time when, as a kid, playing SimCity Classic on an old Mac Classic II, I could be pulled into the game and its universe and not have to worry about whether grinding free-to-play was worth it. (I know, I know, back in my day...)

I won't pretend to be amazing at Slay the Spire - of the game's 20 "new game +" difficulty levels, I'm still on 11 - but it works for me as a break from the world's often hectic pace.