Forbidden Lore Design Diary #8: The Sidewalk Ends with FIREBALLS

Got some worrying personal information tonight. So, I buried myself in programming. Nothing like some scrolls of fireball to distract oneself from loved one suffering over a thousand miles away.

Today’s lesson: ranged attacks! Status effects! Crowd control!

In addition to Potions of Healing, the tutorial has now guided me to create a Scroll of Lightning Bolt, Scroll of Confusion, and Scroll of Fireball. Since magical shenanigans lie at the heart of the game I want to create, I was paying close attention.

Of course, if I’m adding arcane devastation to the mix, I felt like I had to beef-up the monsters a bit. Instead of randomly sticking between zero and two of them in every room, the engine now seeds the room with between zero and five of them. Only seems fair.

I was also not impressed with how the tutorial handled fireballs. To show the area of effect, it presented a simple square — even though the blast radius is very much a RADIUS. You know, a circle. So the beasties in the square may or may not have gotten tagged by the spell depending on how close to the corners they were.

Time to do some off-road coding.

    def highlight_radius(
            self, 
            center: Tuple[int, int], 
            radius: int,
            console: Console,
            bg_color: Tuple[int, int, int], 
            fg_color: Tuple[int, int, int],
        ) -> None:
        """
        Twiddle the foreground and background colors of all visible tiles within a circle
        """
        x, y = center
        max_x = min(x + radius, self.width)
        max_y = min(y + radius, self.height)
        min_x = max(x - radius, 0)
        min_y = max(y - radius, 0)
        for check_x in range (min_x, max_x + 1, 1):
            for check_y in range (min_y, max_y + 1, 1):
                if (self.distance((x, y), (check_x, check_y)) <= radius 
                        and (self.tiles['walkable'][check_x, check_y])
                        and (self.explored[check_x, check_y])):
                    
                    console.tiles_rgb["bg"][check_x, check_y] = bg_color
                    console.tiles_rgb["fg"][check_x, check_y] = fg_color
        

    def distance(self, start: Tuple[int, int], end: Tuple[int, int]) -> int:
        """
        Returns the distance between two grid points, rounded up.
        
        Might someday be enhanced to care about whether or not those two points on the grid
        can actually see each other; for now, just a Pythagorean Theorem wrapper.
        """
        x1, y1 = start
        x2, y2 = end
        return int(round(math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)))

Yup, that’s effectively the first proper Python code I’ve written myself. Results in something that looks like this:

WHO WANTS SOME

Everything highlighed in red there is gonna get hit by a fireball. How do they feel about it?

FRAGABOOOOM

They were not fans. Killed the four orcs outright, and definitely took a chunk out of both trolls.

In addition, I figured out how to update the mouseover text to show you the critter’s current health. The game needs more feedback in general, but that’s a first step towards showing you that what you did had an effect even if you foe didn’t drop.

But this iteration of the game marked another milestone. After I took that screenshot, I went back to the code for another round of fiddling. At that point, I should just escape out of the game and restart it … but I wanted to see if I could keep going. After blasting that room, I wanted to see if I could keep going, clear out the dungeon before I got overwhelmed.

And I did it. And I felt kinda like a badass.

This was the first time I had fun with this game as a GAME.

It is still, objectively, kind of a piece of shit. But it’s a piece of shit that has stretches were it’s damned interesting. This is kind of awesome.

Anyway. I’ve hit the end of this version of the tutorial. The tutorial is an update of an older version that just hasn’t gotten to all the chapters the author wanted to cover. So I can keep going, but I won’t be able to copy-paste like I used to. Now, I’m going to have to figure out a lot of the details on my own.

That feels manageable. That feels like a good exercise at this stage, really.

So, next step: figuring out how to save the game.

I wanna take a BIG ol’ detour into laying down an initial version of the magic system, one that doesn’t rely on one-shot items. But, no, saving and loading the game is super important, and I should probably figure out how that works sooner rather than later.

Forbidden Lore Design Diary #7: Talk To Me Over A Drink

Banged-out two episodes of the tutorial today: creating the interface, and items & inventory.

Basically, I can now communicate with the player AND give the player shit to pick up. Whoo-hoo!

HP bar! A healing potion just lying on the ground! Text to tell me WTF is going on! So much game!

I’m starting to get a little judgy about how the code is architected, though. I was curious to know if the toolset I was using had in built-in tools for pop-up interfaces, and the answer is … kinda?

I now have pop-up windows for both message history and for my inventory. I was expecting those to each be part of a new class of some sort, but nah, each of them is a bespoke entity crammed into the code which processes commands and figures out what to do next. That just seems sloppy to me; I would have expected those windows to be their own thing, somehow.

That HP bar WAS its own thing, but I know that I’m going to want a mana pool of some sort to power the player’s spellcasting. So I’ve already refactored that into a more generic component so I could get the mana-point bar in there. (Right now, it’s purely for show; I definitely haven’t implemented spells yet.) They’ll likely be joined by an XP bar at some point. For the final game, I don’t think I want to use an experience-point-based progression system, but for the early going, it’ll do.

I’m also a bit confused by the decision to make all items default to being “consumable.” I’m hoping that’ll get rolled back later in the tutorial.

So, yeah, I’m seeing a whole bunch of shit I think I’m going to refactor after I get to the end but before I get into my own version of the game hot and heavy.

But, still. This game is coming together, and that’s really cool.

Justice Playthrough #130: Unmoored

A solo game that wants you to have a die, a deck of cards, and a Jenga tower to play it. I guess those are a thing.

Page 39, Game 27: Unmoored by Lari Assmuth

Terrorists are fucking the world, so the Time Cops are gonna send you back in time to deal with them before they ever become a problem. But as one of the game’s acknowledged sources said, science isn’t exactly an exact science with these guys. You’re getting jerked around the time-space continuum willy nilly, losing pieces of your identity as you go. You are, as the title suggests, unmoored.

You’re probably fucked. But you still have a future to save, dammit.

You draw cards, and write entries in your log based on what they’re telling you. At various points, you’ll pull blocks from the Jenga tower. When it falls, ya done. Hope you accomplished something before you lost all traces of yourself to temporal Alzheimers.

I don’t have a lot to say about this one, other than it looks really interesting. Which is why I don’t have much to say; I might just want to experience this one for myself. What the hell, if I get my hands on a Jenga set and have an afternoon to devote to what’s basically a writing exercise, I might very well give it a try. If it sounds appealing to you, it’s worth a look.

All right, Al. Where am I headed next?

Page 1, Game 22: MidBoss by Eniko

“A possession based traditional roguelike with turn-based gameplay.”

Ziggy says I’m an orc?! Oh, boy.

Justice Playthrough #129: Sanguine Sanctum

New rule: if your game makes me feel like I need to barf, I’m gonna say mean things about your game.

Page 7, Game 27: Sanguine Sanctum by Modus Interactive

The pool of blood wants stuff. Go find stuff, feed the pool of blood.

Feeling kinda judged here, pool of blood

Some games are about telling a story, others are about interesting/challenging gameplay. Sanguine Sanctum punts on both. Finding the various red lumps coveted by the pool of blood is just a matter of wandering around, clicking/stepping on enough things for the game to reward you. What is the pool of blood? No idea. Why do you want to feed it? Eh, it’s not like you have anything better to do. What’s going to happen if you feed it? Fuck if i know. Maybe it’ll get up and direct Season 2 of Firefly or tear the world in half or something, I don’t know, I’m just a cat.

No, this one’s all about the mood. Sanguine Sanctum just wants to establish a creepy psychedelic grove and let you wallow in it. So, how does it do that?

The system … is down! The system … is down!

By throwing sweet statue rave parties, of course!

Actually, it just kinda throws weird shit against the wall. Maybe some of it will stick for you.

That really didn’t engage me, but what the hell, it’s fine. Where the game outright lost me was the sections — and there are many of them — when the game deliberately fucks around with motion in order to try and enhance the sense of wrongness.

Prepare to enter the tie dye zone

I’m too basic to record animated screenshots. But the game likes to do this thing where the walls — like the ones above — move at a different speed than the floor. You’re walking past them, but they’re not moving like they should! Creepy, right?

Actually, for me, it induced motion sickness. I played this game for about half an hour, and came out of it needing to lie the fuck down. It wasn’t fun, it was just nasty.

So, yeah, I’m not gonna play this one to the end.

If you’re looking for a creepy game driven entirely by visual mood and read the “motion sickness” bit and were like “Pfft, what a pussy,” then by all means, give this one a look. But I definitely can’t say I recommend it.

What physiological reaction is this game gonna provoke?

Page 39, Game 27: Unmoored by Lari Assmuth

“You are a time-traveller on a crucial mission, but something has gone terribly wrong‚Ķ”

Ah, it’s gonna stimulate the Bill and Ted centers of my brain. Most excellent.

Justice Playthrough #128: Mutiny Island

Promising game, but much too raw in its current state.

Page 15, Game 21: Mutiny Island by Elushis

You’re the captain of the pirate ship Red Dawn, but oh, no! Mutiny! That scoundrel Morgan the Mutineer (one assumes he put “Morgan the Perfectly Loyal Crewman” on his job application, the lying swine) has seized control of your ship. You’ve been dumped unceremoniously on the titular Mutiny Island, where presumably you’ll find your way back to civilization and make them rue the day the didn’t simply shoot you in the face.

Welp. Nothing for it but to wander around picking-up random bullshit.

It looks lovely, like an old-school top-down JRPG. And I gotta give it props for the theme. Unfortunately, it’s let down in two crucial areas.

First, teaching itself to you. It really doesn’t. I had to trial and error my way into what the buttons do, and the “Options” page doesn’t help at all. I finally learned which button was “Attack” — great! It was Button 5 on my controller. Which one is that? (Turns out it’s the right bumper.)

But a vastly larger problem is that this game is SLOOOOW. I don’t mean slowly paced, like a self-indulgent “interactive” novel. No, I mean physically; the framerate absolutely CHUGS, and I have absolutely no idea why. My PC is a quad-core Intel i7-8550U with 16 gigs of RAM. It’s not a top-of-the-line gaming PC by any stretch of the imagination, but it’s not a total piece of shit, either; it’s handled much more graphically ambitious games than this.

But I don’t think a faster processor would have helped. I kept an eye on my CPU and Memory stats, and they seemed fine; despite how badly it was laboring, the game wasn’t maxing-out my machine. There’s something REALLY wonky going on in the underlying programming. I noticed that when I found an area beneath the island where there was less stuff, the game’s performance suddenly hit something vaguely resembling “acceptable.” So I don’t know what behind-the-scenes algorithm is responsible for kneecapping Mutiny Island’s performance, but until the dev sorts it out, this game is going to remain a really unpleasant experience.

The very notable lag between me pushing a button on my controller and something actually happening on the screen made combat absolutely miserable. There were a couple of times I accidentally selected a dialog option (without even getting to read it) because I was button mashing trying to get the goddamn text to appear faster.

This was especially problematic when a murderous snake jumped me while I was inspecting something on the screen. If a dialog/interaction box pops up, monsters will NOT do you the courtesy of waiting until you’re done before they murk you. Given how slowly everything reacts, that was infuriating.

There could be a nifty little retro RPG here, if it can sort out its technical issues. Until it does, though, there’s just no way I can recommend it.

What kind of performance am I gonna be looking at for this next game?

Page 7, Game 27: Sanguine Sanctum by Modus Interactive

“It desires more. Feed It. Nourish It.”

If Little Shop of Horrors has taught us anything, it’s that feeding mysterious creatures as much as they want is ALWAYS awesome. I’m in!

Forbidden Lore Design Diary #6: Let The Beatings Commence

Holy shit, you guys. It’s a game now.

LET’S PUNCH SOME TROLLS YINZ

I mean, don’t get me wrong, it’s a fucking TERRIBLE game. If I came across it during my bundle playthrough, I’d pimp-slap the bejesus out of it for completely wasting my goddamn time. Tactics are simplistic and obvious, there’s no mechanism for healing yourself or upgrading your abilities, there’s next to no on-screen feedback for what’s happening, the win state is boring, the lose state is even more boring … this game is shit.

But, nevertheless, after this tutorial, I can now roam the dungeon and punch orcs! And punch trolls! And they hit back! And can kill me, which only seems fair! Trolls hit harder.

The code that makes this stuff happen is, by and large, comprehensible to me. I don’t get every nuance. (And it doesn’t help that this edition of the tutorial begins with “Okay, this is how we’re going to totally reorganize the code, because this way is better.” The author is probably right, but still … grr. Would have appreciated if they’d go back and retrofit the existing tutorials. Eh, it’s free learning, I can only bitch so much.)

Even if I don’t get every nuance, though, I can see where stuff goes. When I think about “Okay, how am I going to tweak this to handle an action-point-based mechanism instead of strict turn-taking?”, I have a really good notion of what needs to happen where. It’s pretty dope. I’m probably wrong in several important respects, but I know where to start.

Even more fun, I got to do a little debugging!

The latest version of the code knocked-out the feature by which you could hit “Escape” and quit the game — but only if you were still alive. Once you were dead, you could escape-out just fine.

Trollums McGee has killed me, and is now just standing over my corpse. Apparently, my existence was the only thing giving his meaning.

I thought it was due to some nuances I wasn’t understanding in terms of how the event handlers were firing, but naw, there was just a block of code that hadn’t been copied over, but should have been. So MY code is actually infinitesimally better than the canonical code at this stage of the tutorial!

AND I figured out how to dump objects to the console for debugging purposes, which is super valuable. Also inadvertently got a sniff of just how many events get fired every time the mouse twitches on-screen. Spoiler: several.

Just for giggles, I also tweaked the AI so that the monsters don’t need to see me to bum-rush me; in this version, they all have security cameras and walkie-talkies. Doesn’t take long before the entire dungeon descends upon me. This makes things pretty fuckin’ brutal.

This is really awesome. My little game may be terrible, but it exists, and it’s mine.

Justice Playthrough #127: Anomalies

For a “game” that’s about creating eldritch abominations existing beyond the shackles of Euclidean space-time, that was kinda pleasant.

Page 37, Game 10: Anomalies by Schmidt Workshops

Anomalies just chucks you straight into the deep end of the pool. What’s this game about? What are you trying to do? What CAN you do? Fuck off, pal. You’ll figure it out.

i wait wat huh how????

The above control panel is very seriously the first thing you’ll be presented with. What does all that shit do? Why is it doing it? Oh fuck off, who cares. Just whack Randomize and see what happens.

is that a thing huh wat

You can mouse around to look at a kind of irradiated donut with glowy bits passing through it. At first I thought the irradiated donut with glowy bits was the point of the game, but no. You want to mouse around until you find The Creature, when you can then inspect more closely with the WASD keys.

The Creature is entirely the point of this exercise.

blak goat of the wuds with 1000 young?

The screenshots are seriously not doing the experience justice. That thing above throbbed and flowed, with the flowers floating and spinning across its surface, like if Yog-Sothoth were trying to impress a hippie elder goddess. The creatures sing, with strange, discordant voices. I feel like if I listen long enough, I’ll hear secrets.

helo blobbie thing

I feel like this should be a tool that lets me do something, but fucked if I can figure out what. Apparently, if you’re willing to hack some of the source images, you can fuck around with the background. I’d like to make an animation of one of these creepy eldritch fucks waving and convulsing on some sort of neutral background, for me to record and … use to freak out my players in Starfinder? Once the plague passes and we start playing Starfinder again?

I don’t know.

Chaos is the engine powering life. The spread of chaos is our triumph. And the greatest joy is the ecstasy of victory.

This is a very cool toy. I want it to somehow be more than a toy, even if I have no idea what, precisely, that would look like. But it is nevertheless a very cool toy, and I’m glad I got to play with it.

What manner of sanity-draining madness awaits in this next entry?

Page 15, Game 21: Mutiny Island by Elushis

“Mutiny Island is an open-world style pirate game. Reclaim your ship, The Red Dawn, by any means!”

Arr, ’tis to be PIRATE madness, then! Avast!

Justice Playthrough #126: Barrel Roll

A throwaway joke of a game that comes surprisingly close to actually being a lot of fun.

Page 53, Game 10: Barrel Roll by Matthew Lawrence

Your jet fighter is janked! Fight your controls, and try to get … somewhere!

This reminds me of Bear-ly There, but zoomier. You have two controls, and they’re not what you normally expect from a flight simulator. One causes you to pull up, and the other causes you to stop rolling. This means exactly what it implies: if you don’t hold down that button, you are locked into the game’s titular barrel roll.

WHEEEEEEEEE uh oh gonna barf

But these two controls are adequate to get you … anywhere. If you just wrap your head around the weirdness of it all.

I actually found it fun to coax my twirling puke machine in the rough direction I wanted to go. Unfortunately, there are two main problems here:

First, the game is entirely too merciful. For a game about a jet fighter locked in an extended departure from controlled flight, there are remarkably few explosions. Specifically, there are none. If you encounter terrain, you just bounce off of it. If you run out of fuel, you just hang out there in the sky. If I’d been perpetually one ill-advised twitch from a spectacular explosion, I think I would have gotten a lot more invested.

why i not ded?

But second, what the hell am I trying to do? On the first level, I figured out that I was supposed to fly through the finish line zone. There’s an arrow that occasionally pops up and shows me the way to the nearest fuel canister, which is nice and all, but when I get the thing, I don’t want directions to the NEXT aerial refueling power-up; I want to know where I’m trying to go. I never did figure that out in the second level.

This game was apparently slammed-out in 48 hours for a jam, and honestly, it’s fine if you approach it in those terms. It’s a perfectly harmless, ridiculous little diversion. But with a little more direction and risk, I really think it could have been something special. Something that had me cursing and pulling my hair and going “God DAMMIT I thought I was going to clear that mountain THIS GAME IS BULLSHIT!” before restarting and trying again.

Will the next game live up to its potential?

Page 37, Game 10: Anomalies by Schmidt Workshops

“The Generative Art Game”

Ooh. If this is about an AI making arts, it just might.

Justice Playthrough #125: Penicillin Issue #2

Are the players in your fantasy RPG campaign too, shall we say, comfortable? Do they suffer from insufficient existential dread? Do you miss the sweet squeals of “WTF MAN WTF?!?!” at your table?

Page 33, Game 8: Penicillin Issue #2 by Micah Anderson

This zine has some ideas for your fantasy role-playing enjoyment. They are system agnostic; coming up with game stats is YOUR problem. Assuming you even want to bother coming up with mechanical ways to represent these ideas. That will make them realer, and accordingly, more awful.

The first half of this zine is bloody fantastic. In D&D, recovering from grievous injuries is about as difficult as ordering a pizza, and recovering from a disease is as simple as finding a journeyman-grade spellcaster, assuming you aren’t already murderhoboing with one. What if recovery from injuries and illness was more … disquieting than that?

What if halflings weren’t less of a separate species, and more sentient fungus squatting in the corpses of dead children? (The fungus sometimes infests the living and/or mature, but that tends to go … badly.)

What if your wizard’s familiar nestled inside your skin like a blanket? And what if that were the least disturbing thing about it?

Quality drops sharply in the back half of the zine. There’s a mad lib, a lengthy bit of free verse crammed into a wolf mask, and a spinner you can (but will not) use to replace your dice.

Also, the black text on pink background (or, worse, pink text on black background) is often very unpleasant to read, and not in a way that enhances the experience.

Nevertheless, there’s some really fucked-up shit here. I can definitely recommend it for GMs looking to make their fantasy worlds less rote and more creatively dark.

What cliches will this next entry seek to defile?

Page 53, Game 10: Barrel Roll by Matthew Lawrence

“Fly back home with damaged wings”

Ah, sounds like the less glamorized “Live to fight another day” aspect of dogfighting. Dope.

Forbidden Lore Design Diary #5: Howdy, Neighbors

I am no longer alone in the dungeon.

Everyone’s maintaining social distancing, as is responsible

There are now trolls (“T”) and orcs (“o”) scattered throughout the dungeon. They really don’t do anything, they just whine to the console about how nice it would be if I coded action handlers for them, too. But, to be fair, I can’t do much to them, either. I can just walk up and kick them. Which is rude, but, pretty harmless, you know?

I’ve also been tinkering with the color palate to make it look more like what I might expect to see in a later product. Yeah, it’s pretty drab, but those shades of gray make it pretty clear what’s happening, at least to me. Color will come from the things you can interact with; I’m fine with the bits defining the environment being kinda dull.

When it comes to coding action handlers, I’m following along pretty well, much more so than I was during dungeon generation. Which is good, because I think that’s going to be one of my major points of deviation from the script when it comes time to start developing the game; I think I want an action-point-based mechanism instead of a strict my-turn/their-turn progression. I feel like it gives me more stuff to play with.

Once the game gets deep into development, I’ll need to implement two different “modes” of travel: combat, which is strictly regulated by the action point mechanic, and non-combat, where you can just wander around and do whatever. That could be tricky — but that’s also a detail that’s going to be WAY down the line.

Next tutorial implements combat, at which point this kinda becomes an actual game. Which is really exciting.

Also still poking through the Python tutorial. Today’s topic: lists! You can do many, many things with them. Most of them are pretty straighforward, but some of the options get really esoteric. Whoever wrote the tutorial has an interesting idea of what constitutes “readable,” but that’s true of any language’s partisans, really. Once you become “fluent,” some really wacky shit becomes perfectly intelligible and you lose sight of how anybody could possibly find it opaque.