fuzzy notepad

Tagged: doom

[blog] Embedding Lua in ZDoom

I’ve spent a little time trying to embed a Lua interpreter in ZDoom. I didn’t get too far yet; it’s just an experimental thing I poke at every once and a while. The existing pile of constraints makes it an interesting problem, though.

[blog] Doom scale

I’ve been dipping my toes into Doom mapping again recently. Obviously I’ve done it successfully once before, but I’m having trouble doing it a second time.

I have three major problems: drawing everything too small, drawing everything too rectangular, and completely blanking on what to do next. Those last two are a bit tricky, but struggling with scale? That sounds like a problem I can easily solve with charts and diagrams and math.

[blog] 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.

[dev] Weekly roundup: legion of Doom

March’s theme is video games, sort of?

It’s started heating up here, and we’re in the middle of our usual ritual of trying to avoid turning the AC on for as long as possible. The house has been a bit of a sauna, which is somewhat distracting. Also a bunch of terrible crazy things happened on Twitter. Oof.

  • doom: I playtested other people’s maps from that ZDoom mapping project. There are a lot of maps, and I’m just about half done, and wow it takes a very long time to play through this much Doom. I hope some of my commentary is helpful to the other authors!

  • SLADE: I chased down a bizarre obscure bug and eventually concluded it was a problem in wxwidgets.

  • art: Lots of doodlin’. I animated something for the first time, for Mel’s birthday, and then drew myself a new avatar! I’m pretty happy with both of these, wow.

  • blog: Added some more suggestions to my Twitter post. Dabbled, briefly, in figuring out how to make Pelican host work I’ve done, like that Doom map.

I’ve got a few Patreon things to finish in the next few days, and along the way I’d very much like to work out a scheme for hosting other work on this domain.

[dev] Biweekly roundup: doubling down

March’s theme is video games, I guess?

It’s actually been two weeks since the last roundup, but there’s an excellent reason for that!

  • doom: As previously mentioned, someone started a “just get something done” ZDoom mapping project, so I made a map! I spent a solid seven days doing virtually nothing but working on it. And it came out pretty fantastically, I think. The final project is still in a bug-fixing phase, but I’ll link it when it’s done.

  • blog: I wrote about how maybe we could tone down the JavaScript, and it was phenomenally popular. People are still linking it anew on Twitter. That’s pretty cool. I also wrote a ton of developer commentary for my Doom map, which I’ll finish in the next few days and publish once the mapset is actually released. And I combed through my Doom series to edit a few things that are fixed in recent ZDoom and SLADE releases.

  • veekun: I managed to generate a YAML-based data file for PokĂ©mon Red directly from game data. There’s still a lot of work to do to capture moves and places and other data, but this is a great start.

  • SLADE: In my 3D floor preview branch, the sides of simple 3D floors now render. There is so much work left to do here but the basics are finally there. Also fixed about nine papercuts I encountered while making my map, though some others remain.

  • mario maker: I made a level but have neglected to write about it here yet. Oops.

  • art: I drew most of the next part of PokĂ©mon Yellow but then got kinda distracted by Doom stuff. I redrew last year’s Pi Day comic for the sake of comparison. I also started on Mel’s birthday present, which involves something astoundingly difficult that I’ve never tried before.

  • irl: I replaced my case fans, and it was a nightmare. “Toolless” fasteners are awful.

Pouring a solid week into one thing is weird; I feel like I haven’t drawn or touched Runed Awakening in ages, now. I’d like to get back to those.

I also still want to rig a category for posts about stuff I’m releasing, and also do something with that terrible “projects” page, so hopefully I’ll get to those soon.

[dev] Weekly roundup: video james

March’s theme is… is… I don’t know yet.

  • blog: I made a cheesecake. (By the way, it turns out I had enough leftover filling to make an entire second one! Wow.) And wrote about Valentine’s Day. And wrote about this eerie clone of tech Twitter. I’m actually kind of ahead of the game this month!

  • art: I started documenting my adventures playing PokĂ©mon Yellow. Very… slowly.

  • veekun: I came up with a rough YAML schema for PokĂ©mon data and faked a Red dump. The idea is to try replacing the relational database with just in-memory data, stored separately per-game and in a way that can be reproduced easily. There isn’t very much data anyway, in the grand scheme of things, and trying to keep it relational is getting to be a huge headache. I’d really like to have a simple proof-of-concept of this sometime soon; Sun and Moon come out towards the end of the year, and I’d like to have a redesigned site ready to go.

    I’m using camel for this, so I’ve found reason to hack a few more features into it already. I’ll clean them up and release them, ah, sometime.

  • floraverse: Yahoo is rejecting the store mail for some reason, which led to my discovering that Google Apps “aliases” are totally different from GMail “aliases”, and you need to have an address aliased in both places for it to actually appear in the “From” field.

  • doom: Someone has started a “just get something done” ZDoom mapping project, so I’m going to do that. The actual mapping time hasn’t started yet, but I went looking for inspiration in the form of textures and background music.

  • irl: Yardwork. Exciting.

I don’t know what to have as a theme. Runed Awakening still needs a lot of work; veekun needs an overhaul with a time limit; there’s this ZDoom mapping thing; and I’m drawing PokĂ©mon Yellow as I play it. So maybe the theme is just… video games? Sure, we can do that.

[dev] Weekly roundup: ambivalence

February’s theme is writing, and the major project is a book.

  • Runed Awakening: Wow! Fixed a central area! Laid groundwork for scoring! Lots of work on, er, a core mechanic! Lots of work on a major NPC and their related geography!

  • Don’t Eat the Cactus: I went on a brief diversion and created a tiny interactive fiction game called Don’t Eat the Cactus, which is based on true events.

  • SLADE: Some more papercuts. A microscopic amount of work on 3D floor rendering. (Also, 3.1.1 is out now, so that’s pretty cool. I may update my Doom guides at some point to mention this.)

  • blog: I made cheesecake.

  • art: I drew some miscellaneous stuff. Haven’t really been in the mood for daily comics, and my inspiration has run a bit dry; all I do every day is work on stuff or not work on stuff. I’m working on an art trade and a PokĂ©mon 20th anniversary thing, though.

  • book: Wow, yes, I did actually write some book, with only a few days left in the month. I wrote a solid chunk of a chapter, even. I don’t actually like how it came out; it’s very dry, with none of the usual casual tone in my blog posts. I’ll have to… work on that.

[dev] Weekly roundup: building steam

February’s theme is writing, and the major project is, er, a book.

I haven’t actually written a single word of a book? But oh dang I had one solid-ass week. I’ve been nocturnal for a few days and it’s been working pretty well.

  • art: Did a ton of doodlin’ practice. I think I’ve finally hit a point where I can sketch something and have a decent chance of getting it sort of right, which is amazing, and a confidence boost as well. I ended up crafting a brand new Twitter banner, which is absolutely gorgeous.

  • Runed Awakening: I built out several areas, fixed up a central critical puzzle, and had a lot of ideas for plugging together things I already had. I’m being vague, so that doesn’t sound like a lot, but it was a pretty big step forwards.

  • blog: I intended to write about abuse and harassment, and it sort of morphed into offense in general, but it seemed to resonate. Also I wrote about Twitter’s weird collection of subtle features, and I’m still getting suggestions for edits. Also also I switched the site to pretty solid https, which turns out to be pretty easy with Let’s Encrypt.

[dev] Weekly roundup: well, no wonder

February’s theme is writing, and the major project is a book.

I had a strange week.

I’ve had frequent headaches since around the end of January, especially when staring at text on a screen for long periods of time, which has made the theme of writing a little difficult. This week, I finally went to an optometrist. Lo and behold, my eyesight has worsened from 20/15 post-LASIK to 20/25. One pair of glasses later, and the headaches are gone. I barely notice the difference, but I guess teeny-tiny monitor text was just fuzzy enough that I tired my eyes out trying to focus on it all day every day.

I’ve also been a little disillusioned with drawing lately — it seemed like I couldn’t even move the tablet pen how I wanted any more. This week I discovered I’d somehow turned on the stabilizer (which smooths out your strokes), and it was high enough to mess with me but not high enough to be the obvious cause. Whoops.

Not a great start to the month, but at least that’s all taken care of.

  • art: One or two dailies, though I’ve taken a bit of a break, due to eye pain and lack of ideas.

  • spline: Trimmed blog posts to the first couple paragraphs on the front page of Mel’s personal site, so you can actually see the buttons at the bottom.

  • Runed Awakening: Dealt with some technical nonsense regarding touchability, which was satisfying but made no visible improvement. Did a lot of planning. Still feel like there’s too big a gap in the middle of the game, but I’m very gradually closing it.

  • doom: Playing with weapons again. Looking for sound effects. Experimented with improving function documentation on the ZDoom wiki.

  • blog: Wrote about UI changes.

  • slade: Worked on previewing 3D floors — mostly fixing tricky bugs with what I’d already done.

[dev] Weekly roundup: slow week

February’s theme is writing, and the major project is a book.

  • spline: Styled Mel’s personal site and put it in production. Did a lot of last-second oh-god-we’re-in-production-and-nothing-works fixes, like throwing in Disqus and GA and fixing permissions and whatnot.

  • blog: I made pretzels! Also I wrote about making pretzels. And about writing. And like two-thirds of a post about UI changes.

  • art: The usual. Also hourly comic day.

  • doom: Some more tinkering. Made a few weapons that are pretty sweet. Also made a little start of a ZDoom editing demo map.

[dev] Weekly roundup: second wind

January’s theme is web dev, and the major project is spline, the thing that runs Floraverse.

I had a lot of stuff to do that I sort of left to the very last minute, as I am wont to do, so I’ve been rushing to actually do some of it.

  • art: The usual. Bit lazier with them this week, since I’ve been busy with not-art, but now I miss it!

  • spline: Got image embedding working in the blog editor. Cleaned up a few places I was writing values into JavaScript in templates. Vendored archetype into a submodule, rather than hardcoding (!) a relative path to it. Migrated the clumsy generated Pyramid script to a CLI you can just run with -m, and added a command for creating a new user manually. Added front-page support to the blog.

  • SLADE: Submitted a pull request full of some old papercuts. Finished a branch that fixes and extends the Boom generalized labels for most specials’ speed args. Fixed one or two new papercuts.

  • doom: Sifted through a bunch of Realm 667 resources looking for some neat gems. Toyed with weapons and powerups and monsters, with a few interesting results. Eventually I’d like to sit down and actually make a map, but this is the kind of thing I can do for an hour or two, and it’s interesting to try balancing extensions to the vanilla gameplay.

  • quixe: I read about Lectrote, Andrew Plotkin’s IF interpreter that just bundles Quixe with a Chrome renderer, the same way Atom works. I’m not a huge fan of this approach usually, but IF requires support for a few layout tricks that are most easily accomplished with an HTML renderer anyway, so it makes some sense. Anyway, the post mentions that one of the concerns is speed, so I was inspired to go optimization-hunting, and I found an improvement of about 10% across the board. My benchmark story (Counterfeit Monkey by Emily Short, which is absolutely massive and does a ton of work at startup) still takes more than ten seconds just to load, but this is a vast improvement over the thirty seconds it took when I first started hacking on Quixe.

  • twitter: I improved my bot @flareon_favbots a little — it now reports offenders for spam, and makes an effort to tweet more than just when it’s first run. It’s blocked another hundred or so fav-spammers in the last few days!

  • veekun: Ported the CLI to argparse; previously it was optparse plus a lot of manual mucking about. Also started on a stub of a search interface built right into the pokedex library.

  • book: Started taking serious notes on a book about computer stuff.

  • blog: Started writing a post about, ah, writing.

  • flora: Created a stub of a repo for Mel’s personal site.

Hey, that’s not a bad haul. Still more to do, as always, but I’m making a dent and finally have some momentum back.

[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.)

[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.