Sunday, March 6, 2016

Hacking ICE in the world of "No Crypto For Old Men"

It's the end of day two of the Seven-Day Roguelike competition, and No Crypto for Old Men is coming along really nicely.

Today, I really focused on getting some interesting things to do into the game while fighting the "Intrusion Countermeasures Electronics", or ICE.  Basically, this is the combat system of the game, but instead of fighting monsters with your sword, you are fighting security programs with terminal commands.

My goal with this combat system was to help the player feel like a clever hacker, just like in the movies, where they pop into a network, type some esoteric commands into a console, and watch the expensive and high-tech servers fall like dominoes.  And make it all look really easy when it's done.

To that end, you have a pretty limited number of things you can type in the console, and the gameplay revolves around figuring out when to type what.  There's an onboard wiki and help system that should (hopefully) make this a fairly simple task, but it will require some reading and poking and experimenting to get it right.

Once you understand the handful of commands, it's just a matter of sussing what you need to do to circumvent the ICE.  For this part of the game, I took a lot of inspiration from the excellent co-op game Keep Talking and Nobody Explodes.  It's an easy game where you have to defuse a fictional bomb by looking up esoteric instructions in a bomb defusal manual.  The challenge comes from executing the complicated instructions under a time pressure, but what was interesting to me was how well it conveyed that sense of doing something important and "smart" just by following instructions.  Even though you were just doing what the manual said, the game succeeded in making you feel like a bomb squad expert during play – especially when you defuse the bomb!

So I'm taking that idea and running with it in a new direction here.  The conceit of the game is that a newly-elected President Trump has demanded that all data is available to the FBI (this policy position, sadly, appears to be the only part of my game that is not science fiction).  All ICE is now hackable by definition; every security system must, by law, have a back door.  And as anyone in IT knows, that's the kind of genie that won't stay in a bottle.  Within days of the policy decision, there is a "Hacker's Wiki" that details all known back doors, and it is usable to quickly defeat the encryption on bank transactions, personal communications, surveillance systems, etc.

The player can thus look up any (well, most) ICE they encounter in the Wiki and find instructions on how to defeat it.  In essence, you get the instructions for the puzzle.  Then, you merely need to execute the actions to solve the puzzle.

To achieve this, I've got a pretty robust ICE description system in place in the code.  Each block of ICE has a cadre and a release that can be used to learn about the general class of ICE and the specific instance in the wiki.  And it has a modular description system to describe when it should fail.  I've created several of these modular pieces so far, and they can be mixed and matched to create any number of back door types.

For instance, some of the weakest ICE is susceptible to the Hammer command, which creates a bunch of workers that attack the ICE with buffer overflows.  Each block of ICE has a publicly-viewable registry of icons (either "+" or "-") that would normally seem to be meaningless, but if you count the number of "+" signs, you'll know how many Hammer workers you should attack the ICE with to get it to shut down.  Thus, one of the modular pieces is a note that the ICE shuts down if it has as many Hammer workers as it has plusses in its registry.  Another would shut down the ICE if it has as many Hammer workers as it has minuses.

ICE from the same cadre will tend to have similar solutions, so that as you play, you should pick up on which ICE blocks behave in which way, and not need to reference the wiki, which will make you feel like even MORE of a hacker.  "Oh, this is the Nakatomi series.  I can take that down with just a few buffer overrun attacks.  Shouldn't be more than a moment...there!"

Another modular rule looks at the Drain workers attached to this ICE, which attack certain channels of the registry.  Instead of a simple count, Drain workers toggle the channels in the registry on and off, and the goal is to turn all the registry items to the same symbol.

A third modular rule might be to just allow access when you type the correct username and password.

In addition, these modular rules can be made sequential, so that you might need to do several of these steps in a row, or parallel, so that if you fulfill any of them, the ICE falls.  These can even be nested, so that you can do sequences of parallel tests.

Using these modular pieces, I should be able to make any number of interesting tests and puzzles for the "hacker" to attack.  I've already got a library of eight fairly robust ICE blocks, and more will be easy to create.

Hopefully, this will end up being a really unique, interesting, and engaging departure from traditional roguelike combat while still capturing that roguelike feel.  In many ways, it has parallels to the higher-level experiences in popular roguelikes, where you need to cleverly use your potions, your armor, your scrolls, etc., to navigate the death labyrinths, so I think it's a pretty solid direction.

Saturday, March 5, 2016

End-of-Day Screenshot for "No Crypto For Old Men"

It's been a long day of game-jam-level development, and I have a lot of cool stuff to show for it.  Here's a screenshot showing the game in its current state:


This screenshot may be a little misleading, so let me explain that not all of what is shown here is actually working.  Some of this content is "mockup" content.  For instance, while the help and the cmd and the legend commands are all actually working, the interactive scan command is not.  And the map has nodes that look pretty but have no code backing them up to cause them to function in the manner they will in the final game (but the framework is there to add it).

I have it working now where you can wander around the network, and do a few rudimentary interactions with nodes.  I'm pretty pleased with how it feels; I just hope that it doesn't feel too overwhelming to players to have to learn a little proto-OS in order to play (although I think that's exactly what will make this feel like you are a clever hacker).

Friday, March 4, 2016

No Crypto For Old Men

The 7DRL begins this weekend, and I'll be making a game called No Crypto For Old Men, a cyberpunk themed "hacking" rogue like that sees you attacking digital networks, fighting ICE, and stealing important data in a post-cryptography world ushered in by poorly-thought-out technology policy decisions.

My plan is to start work on this tomorrow (Saturday, March 5th) and finish a week later.  Updates will be posted here.

The game will be built using rot.js and HTML5, so it should work on most modern web browsers.

Sunday, March 22, 2015

New "Ardennes" mission up, new mechanics

In the post-7DRL cooldown, I've been putting some touches on the Ardennes game that I had hoped to get into the game during the competition but didn't have the time to complete.




The main new feature is a new mission, called Cat and Mouse.  You are trying to evacuate a field hospital when a sniper opens fire.  You have to flush out the Master Sniper from the surrounding village before the Nazi front arrives so you can get the wounded soldiers in the hospital to safety.  It features a fun hidden enemy mechanic with custom Focus cards for sniffing him out.



Another new feature is the new Wound Cards.  Instead of just applying a condition, wounds now get inserted into your focus queue, polluting your ability to respond to challenges if you don't keep on top of them.


Finally, there's a new method for responding to attacks my enemy forces - a new Flip Defense system.  When an enemy attacks, you will (usually) get a chance to flip a card out of your queue to prevent its effect.  Just make sure you have the right cards available or else you'll suffer fire!  Hexes with particularly good stealth or tactical advantage give you additional "flips", but they must be shared by all soldiers in that hex, so be careful!

Enjoy the game.

Friday, March 13, 2015

Ardennes is Playable



Okay, it was a long week, but Ardennes is now playable.

There are two scenarios in the game.  Flight to Weiswampach is the "easy" scenario, and The Trois-Ponte Gambit is the hard scenario.  The game randomizes the mission, so if you want to play the other scenario, just reload the game's page a few times.

Good luck on your missions.

Wednesday, March 11, 2015

7DRL Wednesday Update

So, Wednesday has come and gone, and I didn't get as much done as I had hoped.  Not being able to work on the game all day is taking its toll on progress.  Originally, I'd planned to take the week off of work, but as that has fallen through, my development time is much more constrained.

Sadly, this is manifesting itself in me doing things the "quick and dirty" way instead of the "smart" way.  With more time, I'd have structured this beast a little better.  Such are the wages of game jams, though - I'm used to it.

New features today:

  • Actual text styles.  Instead of defining each text field, I can now just say, 'give me a header'.
  • Enemy actions.  The enemy can now apply wounds to soldiers when they attack.
  • Wounds.  Soldiers now bleed from their wounds, and can die.  I still need to remove the soldiers who die from the game, but that shouldn't be too troublesome.
  • Various bug fixes.


Tuesday, March 10, 2015

7DRL Tuesday Development

Today in Ardennes development, I got the enemies firing back at our soldiers.


A framework is in place where I can pretty easily add different kinds of mechanics to what the various challenges can do.  Currently, all they can do is target some or all soldiers in a location, and then fire at them.  Wounds are not implemented yet, but it can tell when it hits soldiers and when it doesn't.