fuzzy notepad

Tagged: gamedev

[dev] Weekly roundup: pixel perfect

April’s theme is finish Runed Awakening.

Mel is out of town, so I’m being constantly harassed by cats.

  • irl: I cleaned the hell out of my room.

  • Runed Awakening: I finally figured out the concept for a decent chunk of the world, and built about half of it. I finally, finally, feel like the world and plot are starting to come together. I doubt I’ll have it feature-complete in only another week, but I’m miles ahead of where I was at the beginning of the month. The game is maybe 40% built, but closer to 80% planned, and that’s been the really hard part.

    I’d previously done two illustrations of items as sort of a proof of concept for embedding images in interactive fiction. A major blocker was coming up with a palette that could work for any item and keep the overall style cohesive. I couldn’t find an appropriate palette and I’m not confident enough with color to design one myself, so the whole idea was put on hold there.

    Last week, a ludum dare game led me to the DB32 palette, one of the few palettes I’ve ever seen that has as many (!) as 32 colors and is intended for general use. I grabbed Aseprite at Twitter’s suggestion (which turns out to default to DB32), and I did some pixel art, kind of on a whim! Twitter pretty well destroyed them, so I posted them in a couple batches on Tumblr: batch 1, batch 2, and a little talking eevee portrait.

    I don’t know if the game will end up with an illustration for every object and room — that would be a lot of pixels and these take me a while — but it would be pretty neat to illustrate the major landmarks and most interesting items.

  • spline/flora: I wrote a quick and dirty chronological archive for Flora. I then did a bunch of witchcraft to replace 250-odd old comic pages with the touched-up versions that appear in the printed book.

  • blog: I wrote about elegance. I also started on another post, which is not yet finished. It’s also terrible, sorry.

[dev] Weekly roundup: zoning out

April’s theme is finish Runed Awakening.

It took a few days to clear my plate and get up to speed, and I’m a little worried at how much time blog obligations seem to be eating this month, but I made some good progress.

  • twitter: I installed Windows 95 in a VM and documented the experience. I also wrote a good Twitter bot that tweets every word, distorted by some Unicode shenanigans.

  • blog: I wrote about emoji, at considerable length.

  • Runed Awakening: Ehh. I ran dry on major ideas and spent several days mostly struggling to drum up some more (or avoiding the question altogether, which is how the Twitter bot came to be). I did end up making a little progress, but not what I would call a week’s worth.

I’m halfway through the month and don’t have a whole lot to show for it, unfortunately. Learning how to have ideas is… difficult. With Doom architecture, I at least found a trick for getting my foot in the door: find an empty space and just draw something in it. I don’t know how to translate that to a text-based puzzle game where everything has to make a bit more narrative sense, which is a little frustrating.

I’ve had some more inspiration today, so that’s good, but I’m going to run dry again pretty quickly if I can’t find a reproducible way to generate new ideas. I have a hard time just sitting and thinking in the first place, which is a huge handicap. I’ve had the best luck when doing something tedious and purely physical, so my mind can wander, but I’ve never been able to duplicate the effect deliberately.

[dev] Weekly roundup: an awakening

April’s theme is finish Runed Awakening.

It took a few days to clear my plate and get up to speed, and I’m a little worried at how much time blog obligations seem to be eating this month, but I made some good progress.

  • blog: I scrapped a bunch of manual thumbnails from git and finally switched to Pelican’s thumbnailer plugin. I also wrote about my first computer(s).

  • art: I painted an Eevee, and it came out okay. I also did a quick painting inspired by Runed Awakening work.

  • Runed Awakening: Aha! Much like making a Doom level, the hardest part is just having ideas, and then having more ideas to fill in the details of the bigger ideas. I’ve got enough big ideas; it’s the little ones that are proving tricky. I did manage to fix a ton of bugs, finally add several alternative solutions for getting past the ███████, implement the ████████ ██ ████, add a new ████████ and an item that can ████████, and jot down some notes on future direction. It’s not quite a week’s worth of work, but it’s a solid few days’ worth, and I feel like it’s a big step forward. I hope I can keep it going!

[release] I made a Doom level

Yes, dear readers, I have a confession to make. Despite spending 29,000 words explaining why and how you should make a Doom level, I’ve yet to actually publish one myself.

I’ve been… orbiting? the ZDoom community for over a decade, but only really contributed in the form of minor wiki edits and occasional advice. I started a good few maps when I was a teenager, but I tended to get bogged down in making some complicated contraption work, and then get bored with the whole idea and lose interest.

More recently I’ve actually made a few maps that got as far as having an exit (!), but I never really finished them, and I haven’t published them anywhere.

So when the Doom Upstart Mapping Project 2 was announced, with the goal of just getting something done with the short time limit of a week, I figured I should give it a shot. And I did. I spent six straight days doing virtually nothing but working on this Doom map.

Results: pretty good! I’m pretty happy with it, and a few people have played it and enjoyed it. I put a lot of thought into it — or tried, anyway — and have a lot to say about it, so this is my developer commentary.

I’ve described the course through the map as I go, and I’ve tried to include some context for people whose knowledge of Doom is only “you shoot monsters”, so I hope it’s at least a little accessible. It’s really long, though. Again. Sorry. Not actually sorry.

[blog] You should make a Doom level, part 3: cheating

Part 1: the basics · Part 2: design · Part 3: cheating

Tens of thousands of words later, you’ve watched me build a little world, and hopefully tried building your own. All the way we’ve had to deal with Doom’s limitations. Flat surfaces. No room over room. The world can only move vertically. The only tool we’ve found so far that can get around those restrictions is the sky hack, and even that’s fairly limited.

I’ve saved this for last because it’s more complicated than anything else, by far. It also finally, utterly, breaks compatibility with vanilla Doom. You could apply everything I’ve said so far to vanilla with some tweaking — use line types instead of specials, make a Doom-format map, skip the separate light levels and other tricks. But, this, all of this, is very much ZDoom only.

Finally, the time has come.

It’s time to annihilate all of those restrictions.

Mostly.

[blog] You should make a Doom level, part 2: design

Part 1: the basics · Part 2: design · Part 3: cheating

I assume you’ve read the introduction, which tells you the basics of putting a world together.

This post is more narrative than mechanical; it’s a tour of my thought process as I try to turn my previous map into something a little more fun to play. I still touch on new editing things I do, but honestly, you already know the bulk of how to use an editor. Poke through SLADE’s keybindings (Edit → Preferences → Input) to see what hidden gems it has, click that “Show All” checkbox in the prop panel, and go wild. But please do comment if I blatantly forgot to explain something new.

(Fair warning: NVidia’s recent Linux drivers seem to have a bug that spontaneously crashes programs using OpenGL. SLADE is one such program. So if any of the screenshots seem to be slightly inconsistent, it’s probably because the editor crashed and I had to redo some work and it didn’t come out exactly the same.)

[dev] Weekly roundup: magnum opus

This month’s theme is game dev, and the major project is my text adventure, Runed Awakening.

I may have ended up drawing for like half the week, by accident.

  • SLADE: After having used it intensely for a while to write my Doom post, I spent most of a day fixing a bunch of little papercuts, plus (I hope) a crash someone experienced on OS X. I also cobbled together some preliminary support for 3D floors, which will be awesome.

  • Flora: Threw together a quick cutscene. I should really make an editor for these things so I don’t have to keep doing it. Maybe next month.

  • art: Oh wow. I spent the last three days of the week, pretty solidly, working on a single picture. I have a collage of the best thing I drew every two weeks for the whole year, and it only has one final slot left, and I wanted it to be the best I could possibly muster, and I may have been a little ambitious. It’s still not done. Almost.

  • Runed Awakening: Made a couple breakthroughs, implemented some more Main Plot stuff, hurrah. I don’t think I’ll have time this week to do any serious work on it, so it seems I didn’t get mostly-done this month as I’d hoped. I’ve cleared a lot of hurdles and laid a lot of groundwork, though, so I hope I can keep up the progress and have something worth showing by the end of January?

  • blog: Workin’ on parts 2 and 3 simultaneously. Fixing SLADE stuff kind of got in the way. I’m also having some kind of irritating driver problem that crashes SLADE at inopportune times, argh.

[dev] Weekly roundup: Doom

This month’s theme is game dev, and the major project is my text adventure, Runed Awakening.

Much better this week, though most of the effort went into blogging and fixing SLADE, and not so much went into my own game. I’ll try to remedy that this week.

  • art: I drew stuff nearly every day all week, which is a great turnaround from my rut. This is pretty cute. So is this! I had a flip through some of my drawings from earlier in the year and I can’t believe how terrible they are and how not-terrible they sometimes are now.

  • irl: I went through a huge pile of mail and whatnot that had accumulated under my keyboard. Started dealing with taxes, oh boy. I also did another round of going through an old hard drive I accidentally broke a couple years ago — the filesystem shattered a bit, so figuring out what’s there and what’s worth recovering has required some archaeology. Found IRC logs from 2003, though.

  • SLADE: I fixed some behavior related to working with a directory (vs working with a single-file archive), most notably teaching it not to delete files it doesn’t know about. I also implemented about 60% of LOCKDEFS support, i.e., having the UI actually tell you what numbers correspond to what keycards.

  • flora: More planning for the card game. Also a lot of work fixing the goddamn Rails nightmare that runs the Flora store.

  • anachrony: That’s, uh, the Doom map set I’m working on. I have no idea what I’m doing and it’s really tough to figure out how to design spaces I really like, but that’s the whole point of the exercise, so I go back to it every now and then. I basically just tried out some ideas for connecting areas together and kinda like how it came out, so, that’s good.

  • Runed Awakening: I got a good bit of planning done! No actual code written, oops; my time got eaten up by other stuff. I also drew a test illustration for an innocuous object, which was well-received, so I might end up illustrating every object. Maybe.

  • blog: It took several days but I finally finished part 1 about how you should make a Doom level. Still awaiting the avalanche of incredible three-room maps.

[blog] You should make a Doom level, part 1: the basics

Part 1: the basics · Part 2: design · Part 3: cheating

I love Doom. Or, well, I love Doom 2, which is the game we actually had when I was nostalgia years old.

I love the aesthetic — pixely in a 3D(ish) environment, and consistent in a way that meshes together really well. The classic levels are abstract (occasionally too abstract), but still detailed enough to feel like they could represent real places as long as you don’t think about it too hard. The environment is surprisingly dynamic: there are switches and devices everywhere. That seems to have gotten much rarer over time, as climbing polygon counts have required ever-heavier optimizations on environments, which make it harder to move at runtime.

Plus the engine is really simple, so mapping is really simple, and anyone can make a little world they can then move around in and share with others.

And I think that’s fantastic. Everyone should try making games. They’re a great medium, a way to express nearly any kind of creative idea, no matter what your interests. If you like music (Audiosurf), or art (BECOME A GREAT ARTIST IN JUST 10 SECONDS), or storytelling (Photopia), or programming (TIS-100), or puzzles, or human interaction, or ANYTHING, you can probably find a way to express it with a game. You don’t need to be good at everything. You can focus on one thing, or you can focus on everything, or you can pair up with people who have very different interests. A lot of the existing tools are aimed at programming types (probably since they’re all made by programming types), but they’re only getting better over time.

And what better way to get your feet wet than one of the oldest forms of homebrew game development: Doom modding.

I thought I’d try something different this month, especially because I keep writing ludicrously long posts (I say, as if this one were any better), and also this month I’m trying to focus on an intersection of gamedev and writing, and also it’s Christmas (???). So here is part 1 of a three-part series on how to build you a world.

[blog] ZDoom on a Wii U GamePad with a Raspberry Pi

Well. That was the idea, anyway. SPOILERS: It didn’t work.

Vladimir Costescu has upped the ante and bought a day of my time this month, requesting:

It would be cool to read about you tinkering with a Raspberry Pi or similar cheap device and trying to get it to do cool stuff (where “cool stuff” is left up to your discretion).

Well it just so happens that I already have a Raspberry Pi. I got it at PyCon US, I think three years ago, when they gave every single attendee a Pi for free. I thought it was super duper cool and I spent a whole afternoon tinkering in their Raspberry Pi lab and then I came home and put it in a drawer forever because I had no idea what to use it for.

At first I thought it would be cool to rig something that would download a random wad from idgames (like vectorpoem‘s WADINFO.TXT) and just launch it and let you play it. A teeny tiny portable Doom box.

Then I realized you’d still need a mouse and keyboard (well, at least a keyboard) to actually play, which is a little bit more cumbersome and detracts from the portability a bit.

But I remembered hearing about a Linux-only project that had managed to interface with the Wii U GamePad. Run ZDoom on a light wireless controller with gyros and everything? That sounds awesome.

So off I went.

[blog] Undertale

Undertale is a very good game.

So you should play it, because I am about to spoil the hell out of it.

No, really. Don’t read this if you haven’t played the game. It won’t even make sense. I’m reflecting on it, so I’m not gonna bother explaining stuff you would know if you’d seen the ending(s).

This is a heavily story-based game. Dissecting the plot without playing it will not entertain you and may ruin your enjoyment of the game later. I’m not kidding.

Okay then.

[blog] Flora

Mel, Jayson, and I are attempting to construct a game called Flora. It seems obvious now that we’ve actually started: between us we have the pixels, the words, and the binaries. That’s everything right there.

I could blather about my adventures figuring out how to make OpenGL do anything useful, but who the hell cares. Far more interesting is the adventure of figuring out what the game actually is.

We have a pretty simple approach here: we’ve each played some decent set of video games, and we each have unreasonably strong opinions about what was good or bad. All we have to do is make a game with all the good stuff and none of the bad stuff. Done. Ship it.

The big picture

The game revolves around Mel’s fictional universe, populated by all manner of colorful critters. The protagonists and namesakes are flowercats, so named because they are flowers with cats growing out of their stems.

It’s a top-down role-playing adventure, except everyone has a different idea of what that means, so let’s say it’s roughly the same style of game as Link’s Awakening. Turns out all three of us like adventuring: exploring a world, feeling like part of it, discovering secrets, finding teases of the plot, and hitting stuff. Luckily, the main characters are into the same kinds of stuff, so we’re off to a good start there.

The theme is turning out to be “elements”: both of nature (earth, fire, etc.) and of gameplay itself. We keep finding ways that distinct focus on each of exploration, puzzles, and combat seems appropriate. Possibly because each of us has a different favorite of the three.

Balance

Which brings me to the tricky bit: finding a middle ground between what we like and what drives us fucking bonkers.

  • Good: Exploring a wide, open world. Bad: Calling GTA4 a “wide, open world”. Backtracking like crazy. Fast-travel that makes you never see the world. A map that, paradoxically, doesn’t show you where anything is or how to get to it.
  • Good: Unlocking new ways to move through the environment. Bad: Realizing you don’t remember the ten places you saw an obstacle that you can now pass.
  • Good: Collecting stuff. Bad: Being forced to collect the same worthless plot items to progress. Collection that doesn’t actually lead anywhere. Collection you don’t have a prayer of finishing until you’ve otherwised finished the game, thus turning it into a lame “post-game”.
  • Good: A populated world. Bad: NPCs who walk back and forth their entire lives and only say one thing to you. A quantum world that seems to pause while you’re not around to look at it.
  • Good: Multiple ways to defeat obstacles. Bad: Letting the player skip an obstacle with no punishment. Fallout 3.
  • Good: A sense of progression. Bad: Screenfuls of stats that don’t seem to mean anything or change predictably. Huge numbers of stat-changing options. Minmaxing.
  • Good: Novel puzzles that instill a sense of accomplishment when solved. Bad: Puzzles the game solves for you. Puzzles that are afraid to be difficult. Puzzles that rely on the author’s perspective. Puzzles that you can opt to skip, thus making solving it a complete waste of time.

Avoiding the bad is going to be tricky, to say the least. Some of these plague virtually every game because it’s just damn hard to do anything else. Still, I have every confidence that we are uniquely suited to avoid pitfalls that the biggest and most successful game development studios have yet to subvert. Cause we’re awesome.

Status

So far we have one sprite drawn, and I’ve built an engine that lets it walk around a fixed region. (Spot the programmer art.) Basically done! I guess I’m building it half-from-scratch: I’m using pyglet and cocos2d, which provide a lot of basic niceties like event handling and layering and transformation and actions over time, but they’re both simple enough that I can easily understand everything they’re doing and could replicate it with a gun to my head. It’s the same kind of sweet spot as Pyramid is for Web development.

We have a Large Pad with tons of small ideas scribbled on it, and we brainstorm every other day. Currently trying to pin down how combat and advancement will work; there are a ton of options and getting it right is tricky. As the engine becomes useful, we’ll be able to actually try stuff out.

This is a side project among side projects for all of us, completely unfunded, with no deadline. So there’s no ETA, and we’ll just work on it as we feel inspired to do so. Interest is always interesting, of course.

The code is ISC and the assets are CC BY-NC-SA. All of it lives on GitHub. We’d still like to sell the completed game, but the plan is to only charge for the installer. (Oh, right: I develop on Linux (who doesn’t!) and it’s all Python and OpenGL, so it oughta run on pretty much anything.)

Yep, that’s all I got. May write about bits of it in more detail later, if there be interest.