Monday, 24 July 2017

plan.b notes

nerdy detail / spoilers.

Since making 868-HACK I've kept a list of ability ideas that might fit if I was ever working on it again. (Some might fit in other games in the family too - I think I used some for Imbroglio.) At one point I started planning a parallel-universe version with alternate interpretations of all the progs - could rotate some of the enemy counters, .C_BOM instead of .D_BOM, .ANTI-G instead of .ANTI-V - but a lot of the other ones there weren't interesting alternatives for so it felt weak.

In April I had to update the game which got me thinking about it again, I also happened to revisit the village where I'd lived while making it which got me thinking about my process again. A few days later I woke from a dream in which I'd been playing a new version of the game which featured a prog called .PLAN.B and an upgrade tree where across a streak you can improve progs of your choice (e.g. .WAIT gets a shield to block attacks while you're waiting, .WARP damages adjacent enemies as well as killing the one you teleported onto). The prog idea at least seemed good so I started coding it up straight away, one thing led to another and I guess I made a whole expansion pack.

A central principle of 868-HACK's design was to fit in as many different interactions between abilities as I could. An idea I didn't get working was a prog that directly referenced your other progs - maybe double the effect of the next one you use, maybe trigger another one at random, I tried several ideas along these lines but none of them worked very well. What dream-PLAN.B did was trigger a random prog from the sector you're on, and on waking up I was shocked that I'd not thought of it four years ago - it's way more interesting to play an ability that's not even in your hand than to play something in your hand cheaply but unreliably. The dream version had a fixed price but this made for some horrible interactions; at 4 or less you're getting the big effects like .ATK+ and .SIPH+ far too cheaply and at 3 or more you're paying too much for the small effects like .WAIT and .PUSH. Simpler just to use the cost of the prog itself - you're still getting a discount on it by not having to fight its enemy spawns. Aside from that it was perfect. The limited pool on each sector is manageable but always varied, and restricting it from selecting something that has no effect right now gives you a lot of control (also using .CRASH to remove unwanted options is a very niche interaction but cute). Plus it gives a use for the prog-walls on later sectors which usually you're never going to siphon.

The idea of upgrading progs wasn't practical since it required designing and balancing new specific effects for every prog; I would have had to make them with this in mind in the first place. But I got to thinking more generally about building something across a streak. I tried simply having your credits and energy carry over to the next game, but that just made all of the openings less challenging. So I went to a prog effect: .SAVE transfers a siphon to the next game (less of a direct advantage than resources because you still need to use it). Cue everyone suggesting more such progs to save different types of resource, but this doesn't add anything distinct and they start to get in the way of the immediately useful abilities you need to survive the current game. It's a problem that .SAVE isn't very situational - you want to use it at the last possible moment, when you know how many resources you'll have left. I tried some different limitations to avoid this, mainly using the same trick as .SCORE to get more out of it the earlier you use it, but that created the exact same dynamic as .SCORE so it wasn't worth the complexity, eventually I just went with the simple version. Even though you want to actually use it at the end it still influences your earlier choices about what to hold onto, and there are a handful of situations where you might have to use it earlier because you'll lose access to it.

Implementing .SAVE meant allowing progs to have siphons in their cost, so then I started thinking about what else could use that. I could just make a big attack that's extra expensive but it seems more natural to try to do something actually related to the usual siphon effect. I tried .3X3, spending a siphon to access all 9 tiles around you instead of the usual 5 - this sometimes made for an interesting choice whether to spawn more enemies to get more stuff, but also often just allowed you to pick up silly amounts of resources. Making it expensive to obtain wasn't enough to balance this. I could give it a resource cost as well but then it becomes kind of bad in the situations where you'd be spawning extra enemies, and more balanced but not any more interesting when you're getting extra resources - you just look if you're getting more than you're spending, nbd. So I ended up with .X, conceptually an ordinary siphon rotated 45°. It's cheap to obtain because it's not giving you any extra tiles, but it can let you get more out of your siphons depending on the board setup. Somehow I'm really bad at counting how many resources it'll get me, I'm so used to automatically reading good spots for the regular siphon and I don't notice when .X would get me more.

.QUIT is a suggestion Leon made ages ago that didn't make it into the original game, but with trying to put a bit more focus on streaks here I tried it out and was happy with it. It got a siphon in its cost too for symmetry with .SAVE (they're different effects but they're both operating outside of the usual game boundaries), this worked nicely for making it kind of "hard" to quit, you have to hold onto a resource that you'd prefer to use to keep that option open. I know for some risk-averse players the "obvious" choice will be to always siphon .QUIT if you can and always keep the ability to use it, but usually you can get a higher score if you go against that.

At the top of my list of parallel-universe progs was a mirror to .EXCH, converting energy to credits, this was in the game for a while (back then .EXCH spent 4 credits for 3 energy and .CASH spent 3 energy for 2 credits) and I took it out to make room for more interesting things, there's only space for so many effects that aren't directly dealing with threats, but maybe an expansion could bring it back? It was hard to find a version that wasn't sometimes ridiculously strong, usually almost useless, or both, I tried tacking on various side-effects, but in the end gave up on it feeling like a boring-but-strong resource exchange didn't fit in a set of exciting weird new abilities.

The hacker's basic attack does one point of damage and stuns the enemy for one turn; this stun is really important for being able to deal with large numbers of enemies tactically. I tried a .STUN+ prog which increases the length of stuns (like a mirror of .ATK+), it was okay but not good enough. But then I was trying to find the right price for .TRAP, which marked a tile to kill or maybe hit the next enemy to move there - I wasn't sure whether to make it cheap so you could lay down a wall of them or a bit more expensive - some of the tactical uses seemed good enough to pay 3+ for. I also needed a more computer-y name for it and when I hit on "firewall" the idea came all in one piece to also rename .STUN to .ICE (from classic William Gibson cyberpunk), price them both at 1, and have .FIRE just do damage without a stun so they each have one element of the basic attack.

Tried a whole bunch of different ideas for medium-sized attack progs, ended up with .MOSH .CULL .SORT, I liked making new ways that different situations could matter - whether enemies are next to each other, whether enemies are already damaged, whether you have a variety of enemy types, and I was glad to fill some of the gaps in costs (now there's a prog for every combination of 5 resources). I changed .CALM's cost to be symmetric with .SORT at 6 resources even though their effects aren't related. I had wanted .CULL cheaper so that .ANTI-V/.CULL would cost less than just using .ANTI-V twice but that made it way too strong with other combinations, these three all have to quite expensive because they can affect all enemy types, but that means they don't need as many other progs to go with them so you can focus more on collecting resources - at least that's my theory.

The main "secret" in 868-HACK is the bonus powerups that show up in streaks, these end up being really important to keep the difficulty high enough to be interesting for expert players so I thought for the expansion it would make sense to include them from the start, loses the secret but most of the people playing will know about it already (and for those who don't I guess it means the expansion adds even more content). I thought about putting in more of a metagame, maybe a map of the network giving some choice about which powerups you'll be facing, coming back to those ideas about accumulating a currency between games - something you could spend to avoid a particular effect you dislike. But in the end I felt like .QUIT accomplished most of this - some portion of the time it allows you to quickly skip an unfavourable combination. Choosing a class at the start of each game helps too with smoothing out bad luck, and the end-of-streak stat screen with records of "most used prog" etc. ties things together conceptually. The idea of choosing your powerups still made it in in the form of "USER-SELECTED POWERUP!", a metapowerup which accesses other powerups the same way that .PLAN.B is a metaprog which accesses other progs. I wasn't planning on adding many new powerups but having them every game makes them feel more repetitious (somehow worse than repeatedly having no powerup) and I ended up with 8.

An effect I tried for viruses was for their attacks to damage your resources, but across a game you don't get hit many times anyway and only a quarter of those will be from any specific enemy type (or even less, since usually being hit means you've been flanked by two enemies and then you can pick which one to attack while the other hits you), so I'd have to make the damage really high for it to be relevant and then on the occasions it does happen it ruins your game. So I switched it to a general effect where any hit also drains resources; this still didn't feel important because you can often spend resources to not get hit. So I thought about what else it could cost you, came up with MEMORY LEAK! losing you a prog when hit. This was really exciting, made it really worthwhile to spend resources to avoid hits, and sometimes to siphon extra progs just so you could afford to lose some. But it was super difficult, especially when combined with some of the other powerups that make it hard to avoid damage; you'd get into a downward spiral where once you've lost a prog that was helping you avoid damage then you're bound to take some more hits; over a quarter of my total losses in this version came from this one powerup, it was terrifying. So I made it only trigger the first time you get hit on each sector, it's very much domesticated but it's still a bit challenging in combination with other powerups.

I did want something that affected your resources though. Back in the day I'd tried some kind of "resource scarcity" powerup but it was pretty terrible, removing your ability to do interesting things. Also finding the right effect for Cryptogs was very difficult, because CRYPTOG TELEPORTS! is already so terrible that anything else combining with it is just really really bad. For a while I was just going to not have new powerup for each enemy type (because why should I?) but people kept asking about the mising ones so then I thought about cheating by having a "Cryptog" effect that conceals something else instead - what about your resources? So CRYPTOGCURRENCY! was born. Eventually I dropped the G, it was silly, I wasn't going to get away with pretending this had anything to do with the enemy type, but it got me to the idea. Just credits because hiding both removes agency - picking between certainty and uncertainty is a real choice, but picking with no information is arbitrary. I wanted .SHOW to interact with it but it was too much to just give everything away at once so I made it local - you have to spend turns (risking enemy spawns) to reveal all the credit values on floor tiles. It's a bit of bookkeeping to keep track of your range of possible credit values but it felt way too friendly to have the UI handle that for you, I want hostile alien perils not a cosy spreadsheet.

Tried making Cryptogs immune to progs but it was too much of a grind. Thought about how their real strength is their movement avoiding lining up with the player to be attacked at a distance; the invisibility is just icing; so I tried strengthening them with AI improvements - making extra efforts to avoid being attacked, a "shy" version that avoids the player unless enough enemies are on-screen to flank them. These were challenging but they were kind of too smart so there's no solution where you can avoid damage, also with the invisibility you don't get to admire their clever tactics, you just don't see them for a while and then they show up in an annoying corner; the game is about being smarter than your enemies, it doesn't work if they're both clever and numerous. So eventually I thought about making the invisibility itself stronger and got the TRUE CRYPTOG! Tara claims she thought of the idea first but didn't tell me because I'd probably actually use it and she didn't want me to, well I got there anyway. They're super annoying.

A major part of the game is executing several progs in one turn to pull off a big combo, instantly clear the screen, so I thought about having a powerup that made this more difficult. Maybe you have a limited number of points ("CPU cycles"?) to spend on progs and then it takes several turns to build them back up. Tried a bunch of different numbers but eventually settled on the simplest: one and one. So the SINGLE-THREADING CPU! can only execute one prog per turn, this is much harsher than my first idea (where you could use a combo but then have to wait) but it seemed like the most interesting twist.

The other big secret is the secret level (now titled "root sector" in the stat screen), originally this was a bit of a throwaway thing that I didn't expect to matter much, mostly I had a graphical glitch I wanted to use somewhere. It did take quite a bit of thought to find a way that made sense to access a secret within such a tight game - there wasn't room to be like "oh there's a door behind that rubble" or something, but I found a way of embedding it in the mechanics that made sense. I thought people might find it a fun challenge to visit it, I put some points there but in my testing it was too expensive to reach to make much difference to scores. I was fairly wrong! Once people discovered it, and some extra hacks to reach it more cheaply, some really high scores were achieved, they're playing at a level I'd never anticipated when making the game. To me this is pretty interesting, it's added an extra layer of complexity over top of the game I intentionally designed, but still in a way that makes sense within it. I've been making little changes along the way to try to balance it - I'd like it to remain a risk/reward decision whether to try for it in any given run, not be something that can reliably and profitably be done every time. Some of the changes to progs making them not repeatedly trigger in the same turn to make them play nicer with .PLAN.B also make them harder to use in secret level trickery, this is a bonus. Also I dropped the maximum number of progs in hand to 8 which makes it a bit tougher too (it was only 10 in the first place because number keys, but that limited the number I could encode in 64 bits on the ios high score tables, dropping it to 8 was necessary to add the new progs in the expansion - arbitrary technical limitations are great).

Tuesday, 11 July 2017


I have released an expansion for 868-HACK, get it on iOS as an in-app purchase or on Steam here.

It adds a new mode which introduces "bonus powerups" from the first game of a streak (these are difficulty modifiers that would previously only show up after winning a few games in a row), with 8 more powerups added to the 12 from the original, so there's more variety from the start. Also 9 new progs (for a total of 32).

These changes make the score of an individual run less meaningful - because it's always affected by random powerups and because some of the new progs interact with run streaks - so high scores in this mode are only for streaks (total score across a series of consecutive plays without dying).

The maximum number of progs held is dropped to 8 (from 10), which makes the choice of what to pick up a little tighter, and also adds a little more variety because you're less likely to be able to pick up the same combinations by the end of a game. The new mode also allows a choice of "character class" each game, which determines starting resources (previously this was randomly assigned); this choice gives an extra chance to respond to the random initial conditions so there are less "unfair" deaths at the start of a game.

There are a few minor changes to some of the original progs, mostly to clarify their interactions with the .PLAN.B metaprog which executes random other progs: it was annoying to have it repeatedly apply an unwanted effect when you were hoping to randomly trigger something specific. In particular .DELAY and .STEP can no longer be used repeatedly in the same turn - you can still .STEP across a distance by applying it after each move so it isn't any weaker; .DELAY is slightly weakened but it was very strong in the first place so that's okay. Some other progs could be used with no effect when there were invisible cryptogs around, on the grounds that you don't know where they are so maybe it's affecting them - even though in practice you often have enough information about their position that you might know; now these can only be used when they will definitely have an effect, so their availability might give a clue about a cryptog's position (e.g. .CRASH becoming available might tell you there's one diagonal to you). I think it's quite interesting to get these clues and I'm not at all sure why I ruled them out in the first place?