WIZARD TOWER

commentary

For university, at the start of 2021, I made three games. This is the second of them, and the one with the most narrative content. The assignment was to make a little role-playing-game dungeon-crawler with some rudimentary enemy AI. Because I’m sooo quirky and original, I flipped the dungeon concept on its head to mirror the in-game level-ups against an actual ascension up a tower.

Having spent an absurd amount of time (relative to the credit it was worth) on Particle Cannon, I was disappointed to say the least when piled-up deadlines turned the development of WIZARD TOWER into a mad rush. I’ve since been able to revisit it, fixing various bugs, balancing stuff out, and implementing three more enemy types (jellies, skeletons, and books), and I’m pretty happy with it as a little demo.

At the time, though, I was stressed out of my mind, already feeling burnout halfway through the semester, and frustrated that I wasn’t able to devote more time to making these games (something I more-or-less-enjoyed) instead of doing what I perceived as busywork for the other classes. For context, I’ve done around four classes a semester for four years, and I feel like these games are the only thing I have to show for that effort.

I have enjoyed almost everything about university except the university itself. It’s felt like a neverending trial I’ve been putting myself through for some tautological reason; I am here studying because I am studying here.

When I made WIZARD TOWER, I focused on how I was feeling, and made an uncompromisingly boring, repetitive, difficult, interminable piece of garbage. Which is sick, actually.

numbersNUMBERS

In WIZARD TOWER, the player juggles two stats: their BODY and MIND. I made this game fairly deep into the COVID-19 pandemic, and was very conscious that I was eschewing bodily exercise in favour of spending every waking hour sitting in front of my computer in my literal basement. Because I have a teeny tiny small brain, I bounce right off games with tons and tons of stats. It simply does not interest me to keep track of lots of numbers and optimise a build. So in this game you’ve got literally two stats and you should be grateful for them.

When you PUNCH, you deal damage equal to your BODY stat. Simple as. When you cast a SPELL (it’s always fireball, because who needs creativity), you deal your MIND stat, plus half that stat again (rounded up), minus 1. The twist with your SPELL is that it’s very unreliable at lower levels, with the chance of failure being the reciprocal of half your MIND stat plus 1. MIND seems less powerful at a glance, but the fact that you might take an enemy out with a single hit makes it quite viable. When playing games, I tend to mindlessly dump everything into intelligence.

MIND123456
damage124578
chance of fail67%50%40%33%29%25%

There are also two hidden stats: lck, which affects your chances of landing a critical hit or escaping a fight, and spd, which affects how fast you move around the tower and the order in which turns take place (though there’s always a chance, based on luck, that the turns go out of “initiative”).

Naturally, there’s also HP, which determines when you die, and XP, which determines when you level up. HP increases flatly by 6 points per level, but the amount of XP needed to reach the next level also increases. Enemies have all of these stats themselves; here’s a table:

spriteBODYMINDspdlckHPXP
player1110.25120
bat111.50.131
wandering eye120.25*0.2552
ghost130.330.194
spider320.750.164
jelly220.20.183
skeleton330.50.25114
book230.80.2563
* the wandering eye’s speed triples when it sees you

Is this even interesting? Probably not. I obfuscated all of this stuff from the player because I don’t think it’s that interesting, because the game looks better when it’s not clogged with numbers, and because I think it’s more fun for the player to just get a “feel” for what works and what doesn’t. When you get utterly bodied by a skeleton for the first time, you’re probably like “okay, probably shouldn’t pick a fight with that guy”. Actually, you’re probably like “what the actual hell, this is bad game design 101, trial and error is unfun”. If you’re having fun, you’re doing it wrong! “Just because it’s bad on purpose doesn’t mean it’s not bad” shut up shut up shut up

levels

My lectures proved a little misleading about automatic dungeon-generation methods; the pseudocode provided was basically “[normal instructions] use quadtrees [normal instructions]”, and googling quadtrees turned up a similarly unhelpful textbook chapter, and by that point I’d already implemented half the damn thing.

When I realised the result of using quadtrees would be far less visually-impressive than I’d been made to believe, and far more difficult, I switched tack to a basically-totally-brute-force “digger” that starts where the player is and winds a corridor away until it hits a dead end (which is where the ladder gets put). The digger then picks a random point along the corridor and repeats the process from there, placing that level’s item once it hits another dead end. All the while, it places rooms along the way, trying not to let any room overlap.

The player always starts in a 3×3 square room, just to give them some room to manoeuvre. Ideally, enemies don’t spawn within three tiles of the player, but that’s not guaranteed as sometimes there isn’t space elsewhere.

I generally like the way the maps turn out. I’m not sure they convey a tower per se, as portions of the 16×16 square space are frequently left unused, but they have good vibes. Bad vibes? Good bad vibes. Hostile architecture.

The player navigates using an A* search. My lecturer mentioned that I could look into path smoothing for this, but I kind of like the unpredictability? You’re a wizard bumbling around. It’s a consideration for the player when trying to avoid enemies. It’s bad on purpose.

Because of implementation quirks, it was infeasible to let the player navigate back down the levels, which inspired the recurring line of narration “The trapdoor slams shut behind you.” This felt right to me insofar as academia is itself a linear progression.

monsters

Back in high school, I wrote an MS Paint Adventures-style “Choose Your Own Adventure” in my school planner. Each day was its own panel, with a big stupid branching story. In the past I’ve spent a fair amount of time redrawing the thing digitally, and expect that eventually it’ll see the light of day, even though it’s not very good.

That story was called SP00KY M4N0R, and it was a creative escape from looming exams.

Towards the start of university, I made Retrace Steps, a short-film-turned-MS-Paint-Adventures-like-webcomic. That one was about the social side of university.

I’m not saying these were a conscious influence on WIZARD TOWER, aside from the fact I just used the same art style again, but I recall referring back to that SP00KY M4N0R panel with the monsters, and do think there are interesting connections to be drawn here if you go looking for them.

I wanted the monsters in WIZARD TOWER to be animal or otherwise inhuman. There’s no big guy with a sword who rocks up to knock you about. There’s not even another wizard for you to fight. This was a very conscious and deliberate decision to create these impersonal conflicts, because coursework always feels very impersonal to me. It’s not like the lecturers are your adversaries, they’re just these vaguely-ambivalent parts of the environment, and your interactions with them are very limited (I’m not saying “the monsters are lecturers!”, that’s not the metaphor here, but it’s part of the lens I’m using).

The monsters are just expressions of the tower, and just like the tower, they’re a foil to the player. Generally, I’d come up with an idea for a movement scheme, and then the idea for the monster itself would come with that.

bat

The bat was the first enemy I made, based on a totally-random movement algorithm that I think was provided in the lectures. The bat just flits between the walls unpredictably. It’s annoying when you’re trying to avoid it, and annoying when you’re trying to catch it. Due to a glitch, sometimes the bat “roosts” in one place for a little while; I couldn’t be bothered fixing this and think it adds character.

The bat’s generally inspired by Zubat from Pokémon. It’s just this really-common, boring, weak mob that’s more of a nuisance than a threat. The flavour text for it is nothing special; it just behaves like an aggressive-but-mundane bat. If I had all the time in the world and this was a proper game rather than a demo, maybe there’d be some lategame mechanic involving vampires somehow. That’s almost too interesting.

Originally, the bat had 2 HP, but I upped this to 3 HP to stop the player from being able to one-hit-kill bats at 2 MIND or 2 BODY. A lot of the HP values are calibrated this way, more according to the number of hits it takes to kill a monster than the actual values at play.

wandering eye

At the other end of the mundanity scale, the idea for this one was just a monster that rushes towards the player when it sees them. With vision being so important to the monster, having a prominent eye made sense, so I went for the bluntest possible implementation of that.

This is just the “mortifying ideal of being seen”. I think it is very common for people to feel unduly scrutinised, in many different contexts. Here, in addition to the aforementioned BODY issues I felt badly about at the time, this is a proxy for academic judgement. I think there’s also something of the male gaze to it.

Some of my favourite lines in the game are for this monster: “Sclera wicks away like candlewax, replaced from within the eye.” I think the one about seeing it on the inside of your eyelids is supposed to imply that the eye is somehow starting to replace your own eyes, setting them alight, but I might be giving my past self too much credit there.

The line “The eye sees through you.” is supposed to imply some inauthenticity on the player’s part, which was definitely something I was grappling with at the time.

ghost

Inevitability is another age-old horror trope. The zombie horde will catch up to ya sooner or later! So that’s the deal with the ghost; it’s slow as hell, but it’s always making a beeline for you, and the fact that it goes through walls means it can corner you pretty easily. The report I submitted alongside the game unironically includes the sentence “Death comes for us all, eventually.”

Based on its flavour text, the ghost seems to be having a pretty miserable time. It wants you, or your body. I’m also pretty sure the implication is that it’s the ghost left by a “previous” run through the tower—maybe not literally, but at the very least subtextually, it’s the ghost of a wizard much like you.

I enjoy that you can punch the ghost to death.

spider

Probably the most sympathetic of the monsters in the game (the bat’s kind of a nonentity), this one was a movement-scheme-first affair; I wanted a monster inspired by the ghosts in Pac-Man, that target a tile ahead of the player rather than the player themself. The game’s control scheme means you’re constantly communicating your intent to the game, by declaring which tile you want to go towards, and I exploited this with the spider by having it calculate its own route to that same tile.

Sometimes, this means that you end up chasing the spider, rather than the other way around! This is another bug that I consider a feature: “a spider is just as afraid of you as you are of it.”

The spider’s flavour text is mostly inspired by a vivid memory I have of a friend smashing a ghostly spider on a picnic table, only for one of the spider’s legs to continue dragging itself over the table, even separated from the body. It’s the most pronounced firsthand experience I have of something like that, and it left an impression on me—this sense that the creature was just a machine, a bundle of electrical impulses. I’m an arachnophobe, and their mechanical cruelty as creatures is something I find very unsettling about them.

Spiders have cropped up in a few stories of mine—in terms of public ones, you’ve got Spinnerette in Revolutionary and the Fikou-Nui in the second chapter of Missing Pieces, but I’ve got another WIP draft of a serial which has a spider as an enemy, another draft with spider-inspired monsters, and another that uses a fair amount of spider-based imagery. It’s just one of my things.

jelly

That aforementioned WIP draft also prominently features a gelatinous cube, inspired by an offhand bit of worldbuilding in Alexander Wales’ story Worth the Candle. I liked the idea of a monster that would blend into the tile pattern on the floor; whenever you go up a level, you see any jellies there quickly trying to hide themselves. The jelly is easy to avoid (unless your sprite blunders into it while navigating), but fairly tough in combat. It was a last-minute addition on the day of the deadline, and I couldn’t quite get it working, so I’m glad to have gone back to implement it properly.

Like the spider, there’s an implication of something very mechanical about this creature. I envisioned it as a magical roomba.

skeleton

Skeletons featured quite prominently in SP00KY M4N0R and it felt right to bring them back here. The skeleton is sort of the BODY counterpart to the ghost’s MIND, but in terms of stats it’s pretty stacked in both. This guy just wanders around randomly from tile to tile; I liked the idea that it’s blind, moving mechanically.

The line “It wants to see your bones.” is a reference to Will Wood’s song “Skeleton Appreciation Day in Vestal, NY (Bones)”, in a very literalist read on that song. And of course, “It’s so misunderstood.” references “Spooky Scary Skeletons”.

book

On the face of it, this is a laughably blunt goof about university, but the book monster dates back a little beyond that. It originated in an abortive Dungeons & Dragons campaign I ran, as a monster the players encountered in the restricted section of a library. That campaign formed the basis of the aforementioned WIP serial in which the jelly originated. The idea behind the book was that it somehow contained a portal to a pocket dimension, and there was this otherworldly parasite living there; a bookworm, if you will, though it’s more like a spider. It was my version of a mimic, which is basically the role it takes in this game. I considered doing actual mimics, but that seemed like a lot of hassle, and the book is more interesting to me.

The flavour text compels you not to judge it by its cover.

sunflower

One idle thought I had was for a plant-based monster that would randomly sprout up at different places around the map, before retreating back underground. A sunflower, or maybe a venus flytrap. The rudimentary way I implemented animation in the game engine meant this would’ve been a pain to code, so I knocked the idea on the head. If I had bothered making it, I imagine the flavour text would’ve focused on the feeling of being a shut-in, out of the sun.

items

If I’d really wanted to, I probably could have created a much bigger set of possible loot, but I think the set I included covers everything you’d expect it to. A potion to restore HP (the same amount regardless of your level), a scroll and some stardust to temporarily buff BODY and MIND, a clover leaf and skull that buff/debuff lck, a feather and gold ingot that buff/debuff spd, and a satchel to increase inventory space. That last one was by far the trickiest to implement, but I think I’ve been able to iron out the bugs with it. The consumable stat boosts appear more commonly than any of the other items; there’s a running theme with them that they’re rather unpleasant, even if they’re good for you.

In-game, the flavour text isn’t explicit about any of this, because of course it’s not.

scram

Hope you had fun with this game! Sorry I lied about the boss fight. My intention is that you’re the wizard boss, your own worst enemy, and the only way to win is not to play.

The last demo will come out next week, hopefully. You’re gonna love it.

Published by

wadapan

I write weird stories for the internet.

Leave a comment