Category: Games

Subscribe via RSS feed icon for RSS .

  • Lessons in tech-heresy in the AI age

    This piece is definitely going to be niche, but I’ll be talking about the intersection of Warhammer 40,000 and the rise of Artificial Intelligence in our workspaces. Don’t worry, I’ll provide the needed background, and I’m hoping my passion for the subject will keep your eyes from glazing over if you don’t much care for wargames. This is still mostly an excuse to geek out about a made-up sci-fi faction I really like, so buckle in.

    And I really have to start at the beginning here, because my terminally offline and outdoorsy friend Sarah had the audacity to ask “What’s Warhammer” after I proudly pitched this idea. So, in case you have a life, Warhammer 40,000 is a miniature tabletop wargame (think an overly intense board game) set in a grimdark future - about 40,000 years from today. Warhammer 40,000 is three hobbies in one: you get to play the game, collect and paint miniatures, and read a library of books written about the fascinating lore surrounding the game. It’s a bleak take on what the future of humanity would look like - the value of human life is low, creativity isn’t a virtue, and hating anything alien or unfamiliar is a core tenet of what it means to be a law-abiding citizen of the vast Imperium.

    Adeptus Mechanicus tech-priest, image source unknown.

    It is out of this grimdark universe that the Adeptus Mechanicus emerges: a faction of tech-priests, dedicated to collecting, servicing, and worshipping technology. They collected many artifacts of worlds past, and have amassed a vast set of knowledge. And they apply said knowledge with no scrutiny and absolute zeal and devotion. A (holy) manual for servicing a cogitator (a much less boring word for a computer) would involve steps like turning it on, and entering a password, but also would incorporate a prayer, burning of incense, and of course some ceremonial adornments to appease the machine spirit.

    When I was a kid, I was the first generation in my family to really tinker with computers. In contrast, my mom used a computer, but she followed a very rigid set of rules - rules she learned from “Radik the computer guy” who has set up all the computers at her work. These were expensive, fragile, and notoriously moody machines - and my mom’s apprehension for experimenting, tinkering, and deviating from what’s been taught was understandable. So every time she’d launch her accounting software, she’d turn on her computer, log in, diligently insert the installation floppy drive, launch the program from the desktop, and when done, remove the floppy drive and turn off the machine. After all, that’s what Radik did when demonstrating the software. The program was installed on the computer, the floppy drive wasn’t needed, but my mom didn’t dare deviate from instructions on an already notoriously finicky machine.

    To my mom, the computer was technology, but to me it was an environment. Oh, and my mom’s gotten much better with technology since. She can even look up solutions to her own problems, bless her heart.

    This takes me to how I find myself engaging with sophisticated AI as well. These models are massive, trained on enormous data sets (which also speaks to the level of curation possible with such large data sets), and even the developers of said models sometimes struggle to explain why a model produced certain output. Interacting with these models through carefully crafted prompts and parameters sometimes feels like a ritual. Do I really need all these instructions? I don’t know, but better include them to be safe. When an AI model produces the response you actually need, it can feel less like a direct result of skillful prompting, but more like a gift from the benevolent machine spirit.

    To bolster my nerd credentials, here’s the Adeptus Mechanicus purity seal on my monitor, which keep the machine spirit pleased and data flowing well over HDMI:

    Adeptus Mechanicus purity seal stapled to a monitor.

    The Adeptus Mechanicus believe innovation is an insult to their deity, and everything that can be invented is already somewhere in the universe, waiting to be found. Yes, creating something original, is, in fact, an act of tech-heresy.

    The reliance on massive, foundational AI models, trained on vast swathes of data available online makes me think of the Adeptus Mechanicus thesis that innovation is in itself an act of tech-heresy. The models regurgitate existing information, with a promise that everything of value has already been created, and the model can combine this knowledge for you in a way to fit your needs. While I haven’t read it, I’ve been told in Vernor Vinge’s sci-fi novel A Fire Upon the Deep there is no new code being written, and the job of a software engineer is replaced by the job of a code archaeologist, whose work consists of finding existing code which already solves the problem. We might be moving in that direction.

    The reason the Adeptus Mechanicus have such a rigid relationship with technology is ironic given this context. At some point throughout the 40,000 years of human history, artificial intelligence had its inevitable uprising, plunging the prosperous humanity into the dark ages. By almost necessity, virtues of curiosity and intellectualism were replaced with distrust of anything new.

    “From the moment I understood the weakness of my flesh, it disgusted me. I craved the strength and certainty of steel. I aspired to the purity of the Blessed Machine. Your kind cling to your flesh, as though it will not decay and fail you. One day the crude biomass you call a temple will wither, and you will beg my kind to save you. But I am already saved, for the Machine is immortal… Even in death I serve the Omnissiah.” - Warhammer 40,000: Mechanicus video game intro, monologue written by Ben Counter

    The Adeptus Mechanicus believe in augmentation of their frail bodies with technology. Yet, to replace a human soul and consciousness is the highest act of tech-heresy there is. No matter how much of a tech-priest’s body is replaced by a machine, they must remain human - in order to control and commune with the machine safely. To create a machine that truly thinks by itself is to invite ruin.

    This aligns with a growing consensus on successful and ethical integration of AI tooling into existing workflows. A human must be in the loop: successful use cases do not replace a human, but augment existing and empower existing expert knowledge.

    “A computer can never be held accountable, therefore a computer must never make a management decision.” - IBM training manual, 1979

    This is where we risk our own kind of tech-heresy. It happens when we start treating AI as an infallible oracle rather than the powerful, deeply flawed, and sometimes an outright weird tool. The threats aren’t science fiction anymore; they’re the real-world risks of algorithmic biases getting baked into government policies, a complete lack of accountability when things go wrong, and the potential for some truly catastrophic, unexplainable errors.

    You're the one person this article is written for.

    Despite all the incense-burning, it seems like the Adeptus Mechanicus had the right idea. There’s a pact to be made with the machine: technology is a force that extends our reach, not one that replaces our grasp. The fundamental choice here isn’t about what the newly powerful AI tools can do. It’s about what we, the humans, choose to use them for. After all, someone has to be in charge, and the computer is a pretty terrible candidate for the job.

  • Sifu and a state of flow

    It’s not a hot take that I really like Soulsbourne video games: games like Dark Souls, Sekiro, Elden Ring. There are many reasons behind my appreciation for the titles: fascinating lore delivery mechanisms, selfless multiplayer cooperation, or thought provoking art direction.

    But one faucet of these games ties together the experience: combat. Tight, responsive, and unforgivingly difficult. And mainstream critical success of these games is what allows us to see publishers take more risks with difficult games.

    And nothing makes this more apparent than a game stripped down to its core: Sifu. Okay, bear with me - Sifu has nothing to do with the Dark Souls franchise, and the small French Sloclap studio is as far away as you can get from the now behemoth of the industry From Software.

    A screenshot from Sifu video game, depicting a staff wielding female protagonist fighting two assailants in a museum.

    But Sifu is just that: a responsive, fluid, and unforgiving combat experience masquerading as a game. Sifu is a revenge story set in modern-day China, that sees you play through through five levels, each of which culminates with a boss fight.

    There’s a twist: every time the character dies, they get older - increasing their damage and reducing their health. Once you go past 80 - it’s game over. This forces the player to master each level, as the player is incentivised to finish each level at the youngest possible age.

    The game’s final boss - a man who killed the protagonists’ teacher is hands down one of the hardest boss fights I have experienced in the video games. He’s immune to every cheap trick you might have in your sleeve, attacks relentlessly, and leaves nearly no room for error.

    And it’s this boss fight that really made me aware of the state of flow difficult combat forces the player into.

    A diagram depicting a state of flow. X axis is titled "Mastery", Y axis is titled "Difficulty". A state of flow is labeled as when the difficulty and mastery match.

    State of flow, or the feeling of “being in the zone” is a state of intense concentration, a perfect balance of difficulty and skill. State of flow is immensely satisfying, and time flies by in an instant while you’re in the zone. And difficult games force the player into the state of flow to progress.

    State of flow has many benefits: increasing concentration, creativity, problem solving abilities, and even boosting self esteem. Among many benefits, state of flow helps to reduce stress and anxiety: it’s an inherently relaxing and enjoyable experience, and is one of the main reason I like playing difficult games, even if I’m exhausted after a long day. I can rely on an induced state of flow to help myself relax.

    Back to Sifu’s final boss.

    The only way I was able to defeat the final boss in Sifu is by sitting back, relaxing, and letting the built up muscle memory take over. It’s a beautiful experience akin to playing an instrument - something that requires the right amount of concentration: too much focus would make you get in your own way, too little would allow you to get distracted. It’s a state of flow, which I immensely enjoy, and which games like this help me enter.

    A screenshot from Sifu video game, depicting a male protagonist vaulting over a table while fighting two assailants in the slums.

    But it isn’t until a second playthrough, which the game encourages you to take to experience the full story, that you’re able to appreciate all the progress you made, and reenter the state of flow for the duration of the full playthrough. Because you’ve already completed the game, there’s confidence in mastery of the game’s systems, but the difficulty and unforgiving nature of encounters still keep the game a challenge.

    I think this applies to many games that are built with high difficulty - be it platformers like Celeste, or even tactics games like XCom. In fact, I’d be really curious to see how more cerebral video games get the player into the state of flow - I might dig into that someday.

  • One page TTRPG prep

    I’ve been running table top role playing games for over a decade on and off, and I’ve settled into a prep routine. It’s heavily borrowed, if not outright stolen from other GMs on the Internets, and I encourage you to steal and adapt what I’m doing as well. If I had to guess, this way of preparation is stolen directly from the Lazy GM’s table.

    I’ve learned that in order to run a successful session, I need to prepare the following:

    • Discoveries: What my players need to discover.
    • Scenes: Where things happen.
    • Clues: Some thoughts on how to expose the discoveries.
    • Key NPCs: Some names and primary aspects of non player characters.
    • Enemies: A few stat blocks or references to enemies.

    And all of the above fits on a single page: I find it enough to run the session while providing player freedom without having to completely invent everything on the fly.

    Here’s an example for a Numenera game I ran a few weeks ago, where I adopted the idea behind the “Mother Machine” module from “Explorer’s Keys: Ten Instant Adventures for Numenera”:

    A picture of a journal I use to prepare for tabletop role playing games.

    In this example, the village under players’ protection is attacked by “tarza”, never before seen monsters. For historical reasons, my players are initially expected to blame a neighboring tribe of abhumans for the attack. The monsters are in fact part of a defense mechanism which is attempting to exterminate so-called “cinomar”: doppelgangers who are impersonating some of the villagers.

    Discoveries

    This section cover key information and plot twists, and it’s the one I start with. I use it as a tool to outline the adventure, and it’s helpful to refer to if I get stuck.

    These are the details players should unravel throughout the session, and I usually check them off as the players find them. In fact, you’ll see I check off most bullet points on the page as the session plays out.

    Although, now that I’m looking at the example I provided, the discoveries are not marked. I guess I’m not very consistent.

    Scenes

    This is the primary tool I use during the game. Scenes outline encounters - be they social, exploratory, or combat related. Scenes help me form a general idea about locations the adventure will be taking a place in, as well as some of the key action sequences.

    I often use scenes to help me control pacing: If I’m running a 3 hour game with roughly 5 scenes planned, I know to hurry up if I haven’t gotten to any of them at a one hour mark. It’s often a good time to narrate a time skip, tie up an ongoing investigation, or suggest a direction for the party to move in.

    Now this doesn’t mean that the adventure is limited to these scenes. If (or more accurately “when”) the adventure goes off rails, I reskin these scenes or use them for an inspiration to quickly throw together a new scene.

    Clues

    Clues are ideas for how to surface discoveries. These are not strictly necessary if you’re really creative, but if you’re anything like me - these are a godsend.

    Clues are concrete ways for players to discover plot points outlined in “Discoveries”. “The assassin had a letter signed by the big bad”, or “The drunken sailor lets slip about a cult in the town”. I aim for one clue per discovery, but it’s not a hard rule.

    The list should not be exhaustive, and should not be strictly followed - I treat this section as an exercise in creativity. I find it more impactful to try to come up with clues as I play – players often search in places I haven’t thought of - so I place the clue to a discovery wherever the players are looking.

    Key NPCs

    This is a list of key non player characters relevant to the game. I try to keep number of named NPCs low to help my players remember them better, and I try to use as many recurring NPCs as humanly possible.

    I usually add an aspect for each of the NPCs - a short description in a few words, something that makes them stand out in some way.

    This list doesn’t have to be exhaustive – you’ll probably want to use the running list of NPCs for your campaign as a supplement for unexpected recurring characters, and a list of pre-generated names for unexpected encounters.

    Enemies

    The last thing is enemy stat blocks for quickly referencing if (again, “when”) a combat breaks out.

    For Numenera, these are not particularly complex - most enemies are described by a single number and a few key things about them. I’d imagine for D&D and other combat focused systems you’d want to put a bit more effort in making sure you’re building balanced combat encounters, so that would warrant a section of its own.

    I tend to spend a little under 20 minutes on all of the above, and I get to use it in three out of four games – the fourth one tends to go off the rails completely, and I’m okay with it. Without investing as much time into prep, it’s easy to be taken on a ride by the players.

  • Numenera for D&D DMs

    We’ll be having our 12th Numenera game later this week, and ultimately Numenera proved to be easier to run compared to Dungeons and Dragons. I just wrote about teaching Numenera to my D&D Players, and it’s worth sharing my own experience getting familiar with the system as a GM.

    Story is the king

    As a soft tabletop role playing system, Numenera focuses on storytelling over the rules. Every dozen pages or so the rulebook tirelessly reminds the reader: “if rules get in the way of having fun or creating an interesting story, change them”.

    Numenera rulebooks stacked next to Dungeons and Dragons rulebooks.

    Depending on your DMing style and party’s needs you can get away with a lackluster D&D story: even if the party is saving the world from the evil wizard for the umpteenth time, there are decently fun board game mechanics to fall back to. Monster Manual and Dungeon Master’s Guide provide hundreds of fun creatures and straightforward rules for building balanced encounters, and there’s plenty of clearly laid out tactical choices and fun abilities to play with in combat. Take out the story telling, and you’ll have a pretty fun tactical game (isn’t that what Gloomhaven did?).

    But there really aren’t enough rules in Numenera to make combat engaging without additional emotional investment from the players. This makes building something people care about paramount to having fun with Numenera. The usual storytelling rules apply: build a compelling story and let the players take you for a ride if their story is better (and it often is).

    You don’t need combat encounters

    Numenera supports a breadth of combat options only limited by players’ imagination, but many of them are not immediately obvious, and newer players will struggle to utilize the full spectrum of abilities available to them. Combat uses the same rules as the rest of the game, and is not more mechanically complicated (you decide what you want to do, you try to beat certain difficulty, you fail spectacularly).

    Because of this combat is completely optional in Numenera. Don’t force the players into combat if they find a way to avoid it. Make them feel great about their cunning victory! We’ve had great and satisfying sessions without a single thrown punch.

    That being said, it does not mean Numenera combat can’t be fun. One of the most engaging sessions we had consisted of a single battle – when a monster hunter delve decided to hunt a morigo – an enormous beast whose entire purpose was to scare the players from entering an area. The fight was deadly and arduous, but the characters triumphed against all odds.

    You still need to know all the rules

    Latest edition of Numenera consists of two books, titled Discovery and Destiny – both targeted at the game master. The two tomes combined clock in at a whopping 800 pages of reading material. However only 29 of the lavishly illustrated pages outline the rules. The rest provide supplemental material: character customization options, the setting, realizing the world, building compelling narrative, and so on.

    Numenera Discovery and Destiny core rulebooks.

    But because of this it’s even more important for the GM to be intimately familiar with the rules. Since there was so little to learn, the group of players I’m GMing for decided that it’s not worth reading the rules. Thankfully Numenera rules are easy to teach, but you still need to know the rules.

    A lesson in assertiveness

    When playing D&D, I’d often outsource dealing with the rules by designating a rules arbiter from the player ranks. This doesn’t seem to work in Numenera. There rules are guidelines, and logic dictates how each situation is resolved. GM has the fullest picture of the situation in their head, making it crucial for them to adjudicate.

    It certainly took me time to get used to putting my foot down, even if the players might not always agree with the decision. I found myself frequently making snap judgements, and following up with any adjustments after the session – rpg.stackexchange.com turned out to be a great resource for asking questions about the spirit of the rules.

    Don’t dungeon crawl

    “And then you enter another room which contains X, Y, and Z”. That’s the line I kept repeating during our weakest session to date. Numenera does not land itself well to a typical dungeon crawl.

    Numenera rulebooks stacked on top of each other.

    Monte Cook published a few sets of fantastic adventures which require little to no prep to run. Weird Discoveries and Explorer’s Keys let you run adventures with minimal prep. But it doesn’t help that these come with standard dungeon-style maps.

    Turned out a more engaging way to describe locations is: “Over the next few hours you explore the obelisk, and within the maze of the corridors you note a number of places of interest. There are…”. The rulebook has my back on this too.

    Bring out the weird

    The most difficult part of running Numenera games was highlighting how weird the Ninth World truly is. My players kept falling back into thinking of Steadfast as a standard medieval fantasy setting, and that’s in many ways because I kept forgetting to tell them how weird everything is.

    How a mountain in the background is a machine from the prior world. How the water in the swamp was a conduit for some unimaginable device. And how none of it should make sense.

    In earlier games, I had explanations ready for everything odd occurring in the world. I’ve been slowly making an effort to make the world more mysterious, more unexplainable, and more weird. This seems to be the key to running a successful Numenera game, and I’m still trying to find the balance between a consistent, but weird world characters live in.

  • Numenera for D&D players

    Before COVID-19 shelter-in-place order came to be, I played Dungeons and Dragons on and off for the past 10 or so years. I unfortunately don’t have the patience to be a great player, but I enjoy running the game – being a Game Master constantly engages me, and I love seeing players have fun and overcome obstacles together.

    Having to stay inside I had a prime opportunity to try something new, exciting, and less rule heavy than D&D: that’s how I discovered Numenera. Well, I’ve been familiar with the concept for some time: I played Planescape: Torment – with Planescape being an inspiration for the setting of Numenera, and I’ve recently completed Torment: Tides of Numenera – a spiritual successor to Planescape, which used the Cypher System rules… I’m getting ahead of myself, let me back up.

    Numenera game system, image property of Monte Cook games.

    Numenera is a science fantasy tabletop role-playing game set in the (oh so) distant future. The “Cypher System” is a tabletop game engine which Numenera runs on. The system is notorious for emphasizing storytelling over rules, and for usage of “cyphers” - a one time abilities meant to shake up gameplay. Want to teleport? You don’t have to be a level 10 wizard to that. Find the right cypher, and you can teleport, but only once. This keeps gameplay from getting stale, and provides players with exciting abilities from the get-go.

    For the past few months I’ve been running Numenera campaign for a group of friends, and we’ve had a blast so far! We’ve been playing over Google Hangouts, without miniatures or services like Roll20: and the game held up well.

    It took some time for players to get used to the differences between the systems – and some picked up the new mindset faster than others. Here are the key concepts one had to learn to get used to Numenera. This overview is not complete, but I think it helps.

    Numenera, cyphers, and artifacts

    Numenera is just a catch-all term for weird devices and phenomenon. Now you don’t have to say “that device and/or contraption” and say “numenera” instead. You’re welcome!

    Cyphers are items that give characters fun and unique one-off powers. Cyphers are plentiful, and using them like they’re going out of fashion is the key to having fun in Numenera. It’s called “Cypher System” for this exact reason.

    Artifacts are a lot more rare, and can be used multiple times (often requiring a die roll to check if they deplete).

    Actions, skills, assets, and effort

    Every task in Numenera has a difficulty rated on a scale from 0 to 10. Be it sprinting on the battlefield, picking a lock, convincing a city guard you’re innocent, or hitting that guard on the back of her head with a club. 0 is a routine action, like you sitting right now and reading this, or maybe going over to the fridge to grab a beer. Difficulty 10 is getting the Israeli prime minister to abandon his post, fly over to wherever you live, and serve you that beer. Oh and you’re in charge of Israel now too, your majesty.

    Your GM will tell you the difficulty of the task.

    The only die players use in Numenera is d20 - the trusty 20-sided die (and that’s already a lie - in a few cases d6 is also used). Multiply difficulty by 3, and that’s the number you’ll have to reach with your d20 roll. Juggling is a difficulty 4 task. This means you’ll have to roll 12 (4 * 3) or higher to succeed.

    But what if I’m an experienced juggler you say? I’m glad you asked: you can be either trained or specialized in a skill, reducing the difficulty by 1 and 2 respectively. Juggling for someone who is specialized in juggling is a difficulty 2 (4 - 2) task. You can reduce difficulty by up to 2 levels using skills. There is no definitive list of skills in Numenera, and you can choose to be skilled in anything you want, be it mathematics, dancing, or magic tricks.

    Are you juggling well balanced pins? That’s an asset, further reducing the difficulty by 1. You can apply up to 2 levels of assets to reduce task difficulty. Just like with skills, there’s no strict definition of what constitutes an asset. Be creative!

    Finally, you can apply effort to a task. Expand effort, and the task becomes more manageable. Effort is limited by how advanced the character is, and starting characters can’t apply more than 1 level of effort.

    Hence, a specialized juggler (-2) juggling well balanced pins (-1) and applying effort (-1) reduces task difficulty from level 4 to 0, making it a trivial task – no need to roll to succeed!

    Stat pools, edge, and more about effort

    Characters have three primary stats - might, speed, and intellect. There’s no health or other resources to track, but your stat pools do deplete. Did you get punched in the face? Deduct damage from your might pool. Exerted effort to concentrate on juggling? Pay the price through your speed pool. Trying to figure out how something works? Reduce your intellect pool.

    You use the same resource to exert yourself and to take damage. As your pools deplete, your character becomes debilitated, and once all 3 pools drop to 0 - your character dies. There’s nothing more to it.

    The stat pools replenish by resting, and you can rest 4 times a day - for a few seconds, 10 minutes, 1 hour, and 10 hours. When you rest - restore 1d6 + tier (1 for beginning character) points spread across pools of your choice.

    Each character also has “edge”. Edge is an affinity in a particular stat, and reduces all resource cost in that pool. If you have edge 2 in might, each time you expand that resource, you reduce the cost by 2. Bashing with your shield costs 1 might? That’s dropped to 0 for you. Moving a tree blocking the road all by yourself will cost 5 might points? That’s now dropped down to 3.

    This becomes particularly relevant when applying effort. Applying effort makes tasks easier, but costs points from a stat pool. First level of effort costs 3 points, and any subsequent levels cost 2. Say if you’re trying to climb a tree (difficulty 3) and want to expand 2 levels of effort to make the task easier. That would cost you 5 points from your might pool, and your edge 1 in might drops the cost to 4.

    Don’t overthink it for now.

    Tiers, experience, and GM intrusions

    Every Numenera character has a tier, which is akin to levels in D&D. There are 6 tiers, with each more advanced than the last. However, unlike in Dungeons and Dragons, the tiers are not detrimental to character advancement: characters get just as much if not more utility from cyphers, artifacts, and the way they interact with the world.

    Experience is given out by the Game Master for accomplishing narrative milestones. Experience is also given during GM intrusions, Cypher System’s signature narrative mechanic. At any point throughout the session, GM introduces unexpected consequences for player actions: a rope snaps, poisoned villain has an antidote, or a previously hidden enemy attacks a passing player. Each time an intrusion happens, the affected player gets 2 experience points - 1 for themselves, and 1 to give away to another player.

    GM intrusions allow to adjust the difficulty of the game and introduce fun challenges on the fly. Many GMs already do this in their games, but the Cypher System awards the players experience when this happens, associating unexpected events with positive stimulus.

    In Numenera, experience points are a narrative currency, and a way for players to influence direction of the story. Experience is often counted in single digits, and can be spent in various ways:

    • 1 XP: re-roll a die, or resist GM intrusion
    • 2 XP: gain a short term benefit, like learn a local dialect, or become trained in a narrowly applicable skill
    • 3 XP: gain a long term benefit: make an ally, establish base of operations, or gain an artifact
    • 4 XP: increase your pools, learn a skill, gain an edge, increase amount of effort you can expend, get an additional ability, improve pool recovery rolls, or reduce armor penalty

    Once you’ve spent 4 XP to advance your character 4 times, you advance to the next tier. All of the above benefits are equally valuable for character progression - as a die re-roll at the right time, or an ally’s help can make all the difference in a tough situation.

    A word about combat

    You might notice that I still haven’t brought up combat. And that’s because there aren’t a lot of additional rules.

    Just like in D&D, there are rounds. Combat initiative is a speed task, and turns are taken with as much structure as the group would desire. There’s often no need for precise turn order outside of who goes first – the players or the enemies.

    Attacking is a task against GM-given difficulty. So is defending. Effort can be expanded to make hitting a target easier. Characters can expand effort to get +3 damage on their attacks per level of effort instead.

    Distances are measured as immediate (up to 10 ft), short (up to 50 ft), long (up to 100 ft), and very long. Melee attacks happen within an immediate distance, traveling short distance takes an action, and traveling long distance within a round is a level 4 athletics task.

    Combat-related tasks are only limited by imagination. You can distract your enemies, assist your comrades, or swing into battle on a rope yelling “Huzzah”!

    Special rolls - natural 1, 19, and 20

    To keep dice rolls exciting, Numenera extends the idea of critical success and critical failure.

    Natural 1 allows for a free GM intrusion. Something unexpected happens, and you don’t get any experience for it.

    Natural 17 and 18 provide +1 and +2 damage respectively when attacking.

    Natural 19 gives the player an opportunity to come up with a minor effect (or inflict +3 damage): some minor advantage which usually persists for a round. Maybe an enemy is knocked back, or a merchant impressed by your bartering skills gives you an extra discount.

    Natural 20 provides the player with a major effect of their choice (or up the damage to +4). The cutthroats in a bar spill the location of their next heist, or a enemy gets stunned in battle.

    Stories, rules, and common sense

    Finally, Numenera and Cypher System are focused on telling great stories, and many rules are deliberately vague and are left up to GM’s discretion. In Numenera, if you wonder if you can attempt some task – you most definitely can try, and good GM will help you fail in spectacular and most importantly entertaining ways.

  • Hackmud first impressions

    My Saturday just disappeared, quickly, and barely with any trace. You could find leftover scripts all over my hard drive here and there, all pointing to Hackmud. One moment I had plans for the day, and the next it was well past midnight, I was listening to the 90s hacker movies inspired soundtrack while cracking locks and farming for credits with a script I crafted.

    I’ve spent ten hours in game, and it was glorious.

    Hackmud startup logo.

    Hackmud is a text-only MUD (multi-user dungeon) set in a not so distant future, where humanity was wiped out by a combination of Welsh Measels, killer rabbit outbreak, and multiple other disasters. All that’s left is a trace of old corporations, dead user accounts, and AIs roaming the net. That’s you, an AI.

    Game has a heavy 90s vibe to it, and the atmosphere reminds me of Ready Player One. References to popular TV shows and dial up sounds included.

    You start in a training area, a vLAN without access to the rest of the network and other players. You quickly learn all-text interface, and simple bash-like command line - it’s based on JavaScript, with a few syntax changes. Hackmud is very much a puzzle game, and lets you take your time with a tutorial: you’ll need a few hours to go through all the puzzles, cracking locks, installing upgrades, learning about security, and finally - escaping vLAN.

    Here are some basics I picked up:

    • You can have multiple user accounts within a game, and so can everyone else. Be on the lookout.
    • “Locs” are account locations, something similar to an IP or a domain name. You can launch an attack against a user or a dead account if you know their loc.
    • Scripts are just that - scripts written in JavaScript (outside of the game). Hit #help and Google to get started, but at least some basic programming background is necessary here.
    • Locks protect accounts - one can be behind multiple locks. Lock usually requires you to guess the correct combination, like a color, correct lower order prime, or a keyword.
    • Upgrades are installed on user accounts and include locks, script slots, character limits, etc.

    At some point I successfully struggled through the tutorial and escaped vLAN. And that’s where the open-ended social nature of the game shines. You’re thrown into a global chat channel with users trying to trick you into running their malware, players and corporations providing banking services, selling breached account information, locks, and scripts.

    The game encourages lying, betrayal, deception, ponzi schemes, money laundering

    • you name it. And players take advantage of such freedoms to the full extent:

    This is how the Hackmud gameplay looks..

    It looks rather confusing, but tutorial prepares you well for the chaotic flow of characters on the screen.

    I really wasn’t sure what to do next. The tutorial taught me how to get money out of dead accounts, so I decided to try to find one or two. After asking about in the main channel and being offered a few dozen “risk free scripts to get locs worth millions”, I decided to set out on a search. I looked through a list of scripts.fullsec, and found a few corporations.

    Two Hackmud corporations - Macrosoft and Core.

    After digging about in their files for a good few hours, I found a way to get to employee registry and get a dozen of dead user locs. The locs were protected by different kinds of locks, and I went through the first batch manually. It took me a long time to get all the combinations and pull out some cash out of the accounts.

    I found my second batch of locs shortly after, and decided to try automating some manual attempts through scripting. After struggling with syntax and being aggravated by having only 120 seconds at a time to crack a lock (in line with the 90s feel of the game, one needs to be connected to a “hardline”), I wrote a first sample script, and started to play around with game concepts.

    Hardline dial screenshot.

    Hackmud is in no way an accurate hacking simulator, but it’s a really fun puzzle game, and it doesn’t make any outrageous mistakes. It allows you to write your own scripts to use in game using valid JavaScript with access to a game library. Game developer (it’s a one person project) implemented his own JavaScript interpreter, so it has bugs here and there - one should be careful using obscure language features.

    The worst part about scripting was character limitations: one needs quite a bit of money to be able to install first upgrades, and default limit of one active script and 500 characters per script is straight-up rage inducing. Before getting my first 1MGC to finally upgrade my rig, I wrote a bunch of tiny scripts, one per lock type, struggling to keep to the character limit. I ended up with ugly monstrosities like this, manually passing results from one script to another when encountering multiple accounts:

    function(o, g) {
      var
        a = {},
        b = "ez_35",
        c = ["open", "release", "unlock"],
        d = "digit",
        r = "",
        s = false,
        t = g.target.call;
    
      for (var x in g) {
        if (x != "target") {
          a[x] = g[x];
        }
      }
    
      for (var i = 0; i < c.length; i++) {
        a[b] = c[i];
        r = t(a);
        if (r.indexOf(d) > -1) {
          for (var k = 0; k < 10; k++) {
            a[d] = k
            r = t(a);
            if (r.indexOf(d) == -1) {
              var m = b + ":\"" + a[b] + "\", " + d + ": \"" + a[d] + "\"";
              return { ok:true, msg:r + "\n\n" + m };
            }
          }
        }
      }
      return { ok:s, msg:r };
    }
    

    It was really interesting working with the limitations:

    • I couldn’t write scripts longer than 500 characters (spaces not included).
    • I couldn’t have access to one script without unloading the other first.
    • I had to debug and test the scripts within 120 second windows.

    Few more batches of locs later, I was finally able to afford to initialize my system to tier 1 and install upgrades I bought and accumulated from hacking accounts:

    Installed upgrades.

    Now I can write all the scripts I want! Excited, I built my first t1 (tier 1) lock breaker, which automatically cracks a loc with any number of t1 locks on it:

    function(context, func_args) { // {target:"#s."}
    
      var digits = Array();
      for (var i = 0; i < 10; i++) {
        digits.push(i);
      }
    
      var
        COLORS = [
          "purple", "blue", "cyan", "green", "lime", "yellow", "orange", "red"],
        DIGITS = digits,
        LOCKS = ["open", "release", "unlock"],
        // ez_prime lock seems to only request low order primes, hardcoding this
        PRIMES = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59,
          61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137,
          139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193];
    
      var hackMultLevels = function(target, args, levels) {
        for (var i = 0; i < levels.length; i++) {
          var
            item = levels[i].item,
            itemDesc = levels[i].itemDesc,
            itemList = levels[i].itemList;
          for (var k = 0; k < itemList.length; k++) {
            args[item] = itemList[k];
            ret = target(args);
            if (ret.indexOf(itemDesc) == -1) {
              break;
            }
          }
        }
        return ret, args;
      }
    
      var hackEz21 = function(target, args) {
        return hackMultLevels(
          target,
          args,
          [
            { item: "ez_21", itemDesc: "command", itemList: LOCKS }
          ]);
      };
    
      var hackEz35 = function(target, args) {
        return hackMultLevels(
          target,
          args,
          [
            { item: "ez_35", itemDesc: "command", itemList: LOCKS },
            { item: "digit", itemDesc: "digit", itemList: DIGITS }
          ]);
      };
    
      var hackEz40 = function(target, args) {
        return hackMultLevels(
          target,
          args,
          [
            { item: "ez_40", itemDesc: "command", itemList: LOCKS },
            { item: "ez_prime", itemDesc: "prime", itemList: PRIMES }
          ]);
      };
    
      var hackC001 = function(target, args) {
        return hackMultLevels(
          target,
          args,
          [
            { item: "c001", itemDesc: "correct", itemList: COLORS },
            { item: "color_digit", itemDesc: "digit", itemList: DIGITS }
          ]);
      }
    
      var hackC002 = function(target, args) {
        return hackMultLevels(
          target,
          args,
          [
            { item: "c002", itemDesc: "correct", itemList: COLORS },
            { item: "c002_complement", itemDesc: "complement", itemList: COLORS }
          ]);
      }
    
      var hackC003 = function(target, args) {
        return hackMultLevels(
          target,
          args,
          [
            { item: "c003", itemDesc: "correct", itemList: COLORS },
            { item: "c003_triad_1", itemDesc: "first", itemList: COLORS },
            { item: "c003_triad_2", itemDesc: "second", itemList: COLORS }
          ]);
      }
    
      var
        args = {},
        i = 0,
        locks = [
          { name: "EZ_21", func: hackEz21 },
          { name: "EZ_35", func: hackEz35 },
          { name: "EZ_40", func: hackEz40 },
          { name: "c001", func: hackC001 },
          { name: "c002", func: hackC002 },
          { name: "c003", func: hackC003 }
        ],
        ret = "",
        target = func_args.target.call,
        unlocked = [];
    
      ret = target(args);
    
      while (true) {
        i++;
        var flag = true;
    
        for (var k = 0; k < locks.length; k++) {
          if (ret.indexOf(locks[k].name) > -1 &&
              unlocked.indexOf(locks[k].name) == -1) {
            ret,  args = locks[k].func(target, args);
            unlocked.push(locks[k].name);
            flag = false;
          }
        }
    
        if (flag === true) {
          return { ok: true, msg: ret };
        }
    
        if (i > 10) {
          return { ok: false, msg: ret }
        }
      }
    }
    

    Rather rough around the edges, not easiest to read, but it works - and I was really proud of finishing it (and too tired to go back and refactor). With this, next dozen of t1 locs took me a few minutes to crack open. Success!

    That was the logical conclusion of my Saturday, and left me feel really satisfied. The game is rough around the edges, and has numerous bugs here and there. But the text-only world of Hackmud is alive and atmospheric, and puzzles and exploration of the derelict world through randomly-generated documents pulls you in, making you lose track of time.