It's now the year 2032. In the recent past, a major cyberwar decimated much of the global internet infrastructure. What remains of it has largely been seized by pre-existing power players. Many countries have shunned the global internet and attempted to close their electronic borders (with varying degrees of success), while governments in general have lost much of their power in favor of corporatoins, loosely-tied criminal and vigilante groups, and even skilled individuals. In a world where information is more valuable than gold (but maybe not Bitcoin), "Spy" may now be the world's top-paying job title.

Post news Report RSS Speaking Slang

The cyber-world of Spycursion has its own unique form of computer language called Slang. Slang will be familiar to those who have experience with coding, but we wanted to make it accessible those without experience. Here we run down our aim and ambition for Slang.

Posted by on

In this post we’re going to discuss one of Spycursion’s core features, an in-game programming language called Slang. By “core” I don’t necessarily mean a feature that players will interact with all the time (though I’m sure some will), but a feature that is literally a core part of the game. Spycursion contains thousands of different electronic devices — servers, laptops, phones, etc. — and, to some extent, all of them run on Slang. In fact, the Slang language was the very first code we wrote, which should give you an idea of how central it is to the game.

From a language design perspective, Slang has two main goals: Ease of use/learning, and the ability to obfuscate. The first goal is self-explanatory — it should be beginner-friendly. Here’s a simple program:

name = sys.args[ 0 ]
sys.print( 'Hello, ' name '!' )

As you might be able to guess, this program simply takes one argument, a name, and prints out a hello message. You might run this on the command line with “./hello Scott” and the program would print “Hello, Scott!” The code could even be shortened to one line instead of two:

sys.print( 'Hello, ' sys.args[ 0 ] '!' )

We hope that Slang’s syntax is easy to pick up, even for players who have never written code before. But experienced programmers will want to do a lot more than say hello to themselves, which brings us to Slang’s second design goal…

coin_flip() = sys.rand( 1 )
fun heads_or_tails ( )
    if ( coin_flip() == 0 )
        sys.print( 'Heads' )
    else
        sys.print( 'Tails' )
    fi
nuf
i = 0
while ( i < 10 )
    heads_or_tails()
    i = i + 1
done

You might think that the above code snippet is the equivalent of flipping a coin ten times… but you would be wrong! Its practical result is to flip a coin once and print that same result ten times. That’s because in this example coin_flip() is a variable, not a function.

There are plenty more nasty clever obfuscation tricks you can do with Slang. Virtually any string can be used as a symbol name, and symbols are delimited only by white space. Using the above example again, this means that i<10 would have a very different meaning from i < 10.

Why does this obfuscation matter? Remember that Spycursion is meant to be a game of… well, spies. Spies sometimes use Trojan horses — gifts, ostensibly well-meant, with a hidden nefarious purpose. And what better Trojan horse, in the digital age, than some piece of open-source software? “It’s safe, I promise! And you have the source, so you can even review the code yourself!”

Slang is still evolving, and will likely continue to evolve even after Spycursion is released. But for now, we’d love to have your feedback. How are we doing on our design goals of ease-of-learning and obfuscation? Beginners: Did this post make sense to you? Are you excited to learn more about Slang and/or Spycursion? Non-beginners: What would you like to see from Slang? Please get in touch!

Post a comment

Your comment will be anonymous unless you join the community. Or sign in with your social account: