Tag Archives: runed awakening

Introspection

Post Syndicated from Eevee original https://eev.ee/blog/2017/05/28/introspection/

This month, IndustrialRobot has generously donated in order to ask:

How do you go about learning about yourself? Has your view of yourself changed recently? How did you handle it?

Whoof. That’s incredibly abstract and open-ended — there’s a lot I could say, but most of it is hard to turn into words.


The first example to come to mind — and the most conspicuous, at least from where I’m sitting — has been the transition from technical to creative since quitting my tech job. I think I touched on this a year ago, but it’s become all the more pronounced since then.

I quit in part because I wanted more time to work on my own projects. Two years ago, those projects included such things as: giving the Python ecosystem a better imaging library, designing an alternative to regular expressions, building a Very Correct IRC bot framework, and a few more things along similar lines. The goals were all to solve problems — not hugely important ones, but mildly inconvenient ones that I thought I could bring something novel to. Problem-solving for its own sake.

Now that I had all the time in the world to work on these things, I… didn’t. It turned out they were almost as much of a slog as my job had been!

The problem, I think, was that there was no point.

This was really weird to realize and come to terms with. I do like solving problems for its own sake; it’s interesting and educational. And most of the programming folks I know and surround myself with have that same drive and use it to create interesting tools like Twisted. So besides taking for granted that this was the kind of stuff I wanted to do, it seemed like the kind of stuff I should want to do.

But even if I create a really interesting tool, what do I have? I don’t have a thing; I have a tool that can be used to build things. If I want a thing, I have to either now build it myself — starting from nearly zero despite all the work on the tool, because it can only do so much in isolation — or convince a bunch of other people to use my tool to build things. Then they’d be depending on my tool, which means I have to maintain and support it, which is even more time and effort poured into this non-thing.

Despite frequently being drawn to think about solving abstract tooling problems, it seems I truly want to make things. This is probably why I have a lot of abandoned projects boldly described as “let’s solve X problem forever!” — I go to scratch the itch, I do just enough work that it doesn’t itch any more, and then I lose interest.

I spent a few months quietly flailing over this minor existential crisis. I’d spent years daydreaming about making tools; what did I have if not that drive? I was having to force myself to work on what I thought were my passion projects.

Meanwhile, I’d vaguely intended to do some game development, but for some reason dragged my feet forever and then took my sweet time dipping my toes in the water. I did work on a text adventure, Runed Awakening, on and off… but it was a fractal of creative decisions and I had a hard time making all of them. It might’ve been too ambitious, despite feeling small, and that might’ve discouraged me from pursuing other kinds of games earlier.

A big part of it might have been the same reason I took so long to even give art a serious try. I thought of myself as a technical person, and art is a thing for creative people, so I’m simply disqualified, right? Maybe the same thing applies to games.

Lord knows I had enough trouble when I tried. I’d orbited the Doom community for years but never released a single finished level. I did finally give it a shot again, now that I had the time. Six months into my funemployment, I wrote a three-part guide on making Doom levels. Three months after that, I finally released one of my own.

I suppose that opened the floodgates; a couple weeks later, glip and I decided to try making something for the PICO-8, and then we did that (almost exactly a year ago!). Then kept doing it.

It’s been incredibly rewarding — far moreso than any “pure” tooling problem I’ve ever approached. Moreso than even something like veekun, which is a useful thing. People have thoughts and opinions on games. Games give people feelings, which they then tell you about. Most of the commentary on a reference website is that something is missing or incorrect.

I like doing creative work. There was never a singular moment when this dawned on me; it was a slow process over the course of a year or more. I probably should’ve had an inkling when I started drawing, half a year before I quit; even my early (and very rough) daily comics made people laugh, and I liked that a lot. Even the most well-crafted software doesn’t tend to bring joy to people, but amateur art can.

I still like doing technical work, but I prefer when it’s a means to a creative end. And, just as important, I prefer when it has a clear and constrained scope. “Make a library/tool for X” is a nebulous problem that could go in a great many directions; “make a bot that tweets Perlin noise” has a pretty definitive finish line. It was interesting to write a little physics engine, but I would’ve hated doing it if it weren’t for a game I were making and didn’t have the clear scope of “do what I need for this game”.


It feels like creative work is something I’ve been wanting to do for a long time. If this were a made-for-TV movie, I would’ve discovered this impulse one day and immediately revealed myself as a natural-born artistic genius of immense unrealized talent.

That didn’t happen. Instead I’ve found that even something as mundane as having ideas is a skill, and while it’s one I enjoy, I’ve barely ever exercised it at all. I have plenty of ideas with technical work, but I run into brick walls all the time with creative stuff.

How do I theme this area? Well, I don’t know. How do I think of something? I don’t know that either. It’s a strange paradox to have an urge to create things but not quite know what those things are.

It’s such a new and completely different kind of problem. There’s no right answer, or even an answer I can check for “correctness”. I can do anything. With no landmarks to start from, it’s easy to feel completely lost and just draw blanks.

I’ve essentially recalibrated the texture of stuff I work on, and I have to find some completely new ways to approach problems. I haven’t found them yet. I don’t think they’re anything that can be told or taught. But I’m starting to get there, and part of it is just accepting that I can’t treat these like problems with clear best solutions and clear algorithms to find those solutions.

A particularly glaring irony is that I’ve had a really tough problem designing abstract spaces, even though that’s exactly the kind of architecture I praise in Doom. It’s much trickier than it looks — a good abstract design is reminiscent of something without quite being that something.

I suppose it’s similar to a struggle I’ve had with art. I’m drawn to a cartoony style, and cartooning is also a mild form of abstraction, of whittling away details to leave only what’s most important. I’m reminded in particular of the forest background in fox flux — I was completely lost on how to make something reminiscent of a tree line. I knew enough to know that drawing trees would’ve made the background far too busy, but trees are naturally busy, so how do you represent that?

The answer glip gave me was to make big chunky leaf shapes around the edges and where light levels change. Merely overlapping those shapes implies depth well enough to convey the overall shape of the tree. The result works very well and looks very simple — yet it took a lot of effort just to get to the idea.

It reminds me of mathematical research, in a way? You know the general outcome you want, and you know the tools at your disposal, and it’s up to you to make some creative leaps. I don’t think there’s a way to directly learn how to approach that kind of problem; all you can do is look at what others have done and let it fuel your imagination.


I think I’m getting a little distracted here, but this is stuff that’s been rattling around lately.

If there’s a more personal meaning to the tree story, it’s that this is a thing I can do. I can learn it, and it makes sense to me, despite being a huge nerd.

Two and a half years ago, I never would’ve thought I’d ever make an entire game from scratch and do all the art for it. It was completely unfathomable. Maybe we can do a lot of things we don’t expect we’re capable of, if only we give them a serious shot.

And ask for help, of course. I have a hell of a time doing that. I did a painting recently that factored in mountains of glip’s advice, and on some level I feel like I didn’t quite do it myself, even though every stroke was made by my hand. Hell, I don’t even look at references nearly as much as I should. It feels like cheating, somehow? I know that’s ridiculous, but my natural impulse is to put my head down and figure it out myself. Maybe I’ve been doing that for too long with programming. Trust me, it doesn’t work quite so well in a brand new field.


I’m getting distracted again!

To answer your actual questions: how do I go about learning about myself? I don’t! It happens completely by accident. I’ll consciously examine my surface-level thoughts or behaviors or whatever, sure, but the serious fundamental revelations have all caught me completely by surprise — sometimes slowly, sometimes suddenly.

Most of them also came from listening to the people who observe me from the outside: I only started drawing in the first place because of some ridiculous deal I made with glip. At the time I thought they just wanted everyone to draw because art is their thing, but now I’m starting to suspect they’d caught on after eight years of watching me lament that I couldn’t draw.

I don’t know how I handle such discoveries, either. What is handling? I imagine someone discovering something and trying to come to grips with it, but I don’t know that I have quite that experience — my grappling usually comes earlier, when I’m still trying to figure the thing out despite not knowing that there’s a thing to find out. Once I know it, it’s on the table; I can’t un-know it or reject it meaningfully. All I can do is figure out what to do with it, and I approach that the same way I approach every other problem: by flailing at it and hoping for the best.

This isn’t quite 2000 words. Sorry. I’ve run out of things to say about me. This paragraph is very conspicuous filler. Banana. Atmosphere. Vocation.

Weekly roundup: Screw it

Post Syndicated from Eevee original https://eev.ee/dev/2016/11/21/weekly-roundup-screw-it/

November is a disaster and I’ve given up on it.

  • runed awakening: I found a decent DAG diagrammer and plotted out most of the puzzles and finally had visual confirmation that a few parts of the game are lacking. Haven’t yet figured out how to address that.

  • blog: I finished an article for SitePoint. Also I wrote a thing about iteration.

  • veekun: Playing Pokémon has made me interested in veekun work again, so I did some good ergonomic work on the YAML thing, which is starting to look like it might end up kind of sensible.

  • zdoom: I had a peek at my zdoom-lua branch again, dug into object lifetime, and discovered a world of pain.

Everything is still distracting, and Pokémon came out, so.

Weekly roundup: Screw it

Post Syndicated from Eevee original https://eev.ee/dev/2016/11/21/weekly-roundup-screw-it/

November is a disaster and I’ve given up on it.

  • runed awakening: I found a decent DAG diagrammer and plotted out most of the puzzles and finally had visual confirmation that a few parts of the game are lacking. Haven’t yet figured out how to address that.

  • blog: I finished an article for SitePoint. Also I wrote a thing about iteration.

  • veekun: Playing Pokémon has made me interested in veekun work again, so I did some good ergonomic work on the YAML thing, which is starting to look like it might end up kind of sensible.

  • zdoom: I had a peek at my zdoom-lua branch again, dug into object lifetime, and discovered a world of pain.

Everything is still distracting, and Pokémon came out, so.

Weekly roundup: National Novelty Writing Month

Post Syndicated from Eevee original https://eev.ee/dev/2016/11/07/weekly-roundup-national-novelty-writing-month/

Inktober is a distant memory.

Now it’s time for NaNoWriMo! Almost. I don’t have any immediate interest in writing a novel, but I do have plenty of other stuff that needs writing — blog posts, my book, Runed Awakening, etc. So I’m going to try to write 100,000 words this month, spread across whatever.

Rules:

  1. I’m only measuring, like, works. I’ll count this page, as short as it is, because it’s still a single self-contained thing that took some writing effort. But no tweets or IRC or the like.

  2. I’m counting with vim’s g C-g or wc -w, whichever is more convenient. The former is easier for single files I edit in vim; the latter is easier for multiple files or stuff I edit outside of vim.

  3. I’m making absolutely zero effort to distinguish between English text, code, comments, etc.; whatever the word count is, that’s what it is. So code snippets in the book will count, as will markup in blog posts. Runed Awakening is a weird case, but I’m choosing to count it because it’s inherently a text-based game, plus it’s written in a prosaic language. On the other hand, dialogue for Isaac HD does not count, because it’s a few bits of text in what is otherwise just a Lua codebase.

  4. Only daily net change counts. This rule punishes me for editing, but that’s the entire point of NaNoWriMo’s focus on word count: to get something written rather than linger on a section forever and edit it to death. I tend to do far too much of the latter.

    This rule already bit me on day one, where I made some significant progress on Runed Awakening but ended up with a net word count of -762 because it involved some serious refactoring. Oops. Turns out word-counting code is an even worse measure of productivity than line-counting code.

These rules are specifically crafted to nudge me into working a lot more on my book and Runed Awakening, those two things I’d hoped to get a lot further on in the last three months. And unlike Inktober, blog posts contribute towards my preposterous goal rather than being at odds with it.

With one week down, so far I’m at +8077 words. I got off to a pretty slow (negative, in fact) start, and then spent a day out of action from an ear infection, so I’m a bit behind. Hoping I can still catch up as I get used to this whole “don’t rewrite the same paragraph over and over for hours” approach.

  • art: Last couple ink drawings of Pokémon, hallelujah. I made a montage of them all, too.

    I drew Momo (the cat from Google’s Halloween doodle game) alongside Isaac and it came out spectacularly well.

    I finally posted the loophole commission.

    I posted a little “what type am I” meme on Twitter and drew some of the interesting responses. I intended to draw a couple more, but then I got knocked on my ass and my brain stopped working. I still might get back to them later.

  • blog: I posted an extremely thorough teardown of JavaScript. That might be cheating, but it’s okay, because I love cheating.

    Wrote a whole lot about Java.

  • doom: I did another speedmap. I haven’t released the last two yet; I want to do a couple more and release them as a set.

  • blog: I wrote about game accessibility, which touched on those speedmaps.

  • runed awakening: I realized I didn’t need all the complexity of (and fallout caused by) the dialogue extension I was using, so I ditched it in favor of something much simpler. I cleaned up some stuff, fixed some stuff, improved some stuff, and started on some stuff. You know.

  • book: I’m working on the PICO-8 chapter, since I’ve actually finished the games it describes. I’m having to speedily reconstruct the story of how I wrote Under Construction, which is interesting. I hope it still comes out like a story and not a tutorial.

As for the three big things, well, they sort of went down the drain. I thought they might; I don’t tend to be very good at sticking with the same thing for a long and contiguous block of time. I’m still making steady progress on all of them, though, and I did some other interesting stuff in the last three months, so I’m satisfied regardless.

With November devoted almost exclusively to writing, I’m really hoping I can finally have a draft chapter of the book ready for Patreon by the end of the month. That $4 tier has kinda been languishing, sorry.

Weekly roundup: National Novelty Writing Month

Post Syndicated from Eevee original https://eev.ee/dev/2016/11/07/weekly-roundup-national-novelty-writing-month/

Inktober is a distant memory.

Now it’s time for NaNoWriMo! Almost. I don’t have any immediate interest in writing a novel, but I do have plenty of other stuff that needs writing — blog posts, my book, Runed Awakening, etc. So I’m going to try to write 100,000 words this month, spread across whatever.

Rules:

  1. I’m only measuring, like, works. I’ll count this page, as short as it is, because it’s still a single self-contained thing that took some writing effort. But no tweets or IRC or the like.

  2. I’m counting with vim’s g C-g or wc -w, whichever is more convenient. The former is easier for single files I edit in vim; the latter is easier for multiple files or stuff I edit outside of vim.

  3. I’m making absolutely zero effort to distinguish between English text, code, comments, etc.; whatever the word count is, that’s what it is. So code snippets in the book will count, as will markup in blog posts. Runed Awakening is a weird case, but I’m choosing to count it because it’s inherently a text-based game, plus it’s written in a prosaic language. On the other hand, dialogue for Isaac HD does not count, because it’s a few bits of text in what is otherwise just a Lua codebase.

  4. Only daily net change counts. This rule punishes me for editing, but that’s the entire point of NaNoWriMo’s focus on word count: to get something written rather than linger on a section forever and edit it to death. I tend to do far too much of the latter.

    This rule already bit me on day one, where I made some significant progress on Runed Awakening but ended up with a net word count of -762 because it involved some serious refactoring. Oops. Turns out word-counting code is an even worse measure of productivity than line-counting code.

These rules are specifically crafted to nudge me into working a lot more on my book and Runed Awakening, those two things I’d hoped to get a lot further on in the last three months. And unlike Inktober, blog posts contribute towards my preposterous goal rather than being at odds with it.

With one week down, so far I’m at +8077 words. I got off to a pretty slow (negative, in fact) start, and then spent a day out of action from an ear infection, so I’m a bit behind. Hoping I can still catch up as I get used to this whole “don’t rewrite the same paragraph over and over for hours” approach.

  • art: Last couple ink drawings of Pokémon, hallelujah. I made a montage of them all, too.

    I drew Momo (the cat from Google’s Halloween doodle game) alongside Isaac and it came out spectacularly well.

    I finally posted the loophole commission.

    I posted a little “what type am I” meme on Twitter and drew some of the interesting responses. I intended to draw a couple more, but then I got knocked on my ass and my brain stopped working. I still might get back to them later.

  • blog: I posted an extremely thorough teardown of JavaScript. That might be cheating, but it’s okay, because I love cheating.

    Wrote a whole lot about Java.

  • doom: I did another speedmap. I haven’t released the last two yet; I want to do a couple more and release them as a set.

  • blog: I wrote about game accessibility, which touched on those speedmaps.

  • runed awakening: I realized I didn’t need all the complexity of (and fallout caused by) the dialogue extension I was using, so I ditched it in favor of something much simpler. I cleaned up some stuff, fixed some stuff, improved some stuff, and started on some stuff. You know.

  • book: I’m working on the PICO-8 chapter, since I’ve actually finished the games it describes. I’m having to speedily reconstruct the story of how I wrote Under Construction, which is interesting. I hope it still comes out like a story and not a tutorial.

As for the three big things, well, they sort of went down the drain. I thought they might; I don’t tend to be very good at sticking with the same thing for a long and contiguous block of time. I’m still making steady progress on all of them, though, and I did some other interesting stuff in the last three months, so I’m satisfied regardless.

With November devoted almost exclusively to writing, I’m really hoping I can finally have a draft chapter of the book ready for Patreon by the end of the month. That $4 tier has kinda been languishing, sorry.

Weekly roundup: Inktober 2: Electric Boogaloo

Post Syndicated from Eevee original https://eev.ee/dev/2016/10/16/weekly-roundup-inktober-2-electric-boogaloo/

The death march of Inktober continued.

  • art: Another batch of ink drawings of Pokémon. I earned myself a third grey Copic. I also ran the light grey one dry, somehow, so I ordered a refill… and while I was at it, ordered a fountain pen at Mel’s behest.

    I painted a couple things, which came out surprisingly less bad than I thought; one to cheer up some pals and one emulating some old art of Mel’s.

    I also drew some ridiculous nonsense.

    I went through my collection of sketchbooks, many of which were impulse purchases from before I was even trying to draw (just because I like fresh paper) and are completely blank. I found a couple with very old art in them, which was interesting and embarrassing. I found out I can doodle on paper much better than I thought, so I’ll probably be doing that more.

  • blog: I finished and published a post about Doom’s weird sense of scale. Halfway through the month and I’m caught up, so now I only have to do the normal amount of work in half the time, while also drawing a lot. Er, whoops.

  • veekun: I got about halfway through matching up ORAS’s encounters, which is an incredibly tedious manual process. I nudged magical into updating Global Link art and I finally fixed up the new code for grabbing box icons, so veekun finally has icons for every single Pokémon and not a bunch of embarrassing 404s everywhere.

    I also made veekun entirely HTTPS. The upside of Let’s Encrypt’s short expiration time (and my laziness in writing a cronjob to renew all my certs) is that every three months I’m suddenly inclined to go comb through a bunch of nginx configuration and spruce it up a bit.

  • isaac hd: I’d already hacked in some temporary dialogue code, but I spent half a day cleaning it up and turning it into something resembling a real feature. I fixed a lot of limitations that weren’t obvious just from looking at my previous example, such as “it can’t show more than one line of dialogue”. The results are encouraging!

  • irl: Some personal stuff consumed a bit of time.

I’ve apparently gotten faster at the ink drawings! I’m still a bit behind on writing, but I have some ideas for shorter posts relevant to stuff I’ve been doing lately. I have so much to do, but actively trying to do it all is gradually making me faster at doing it, which is nice.

Since November is NaNoWriMo, I’m thinking I might use it as a real writing catch-up month, like this has been an art practice month. I’m not working on a novel, of course, but I do have several prosaic things in progress: a book, Runed Awakening, some other fiction ideas, and of course this blog. The usual goal is 50,000 words in 30 days, so maybe I’ll try to write 2000 words every day? “Do a bunch of things simultaneously” is certainly more my style than “do a single thing for an entire month”.

Weekly roundup: Addled

Post Syndicated from Eevee original https://eev.ee/dev/2016/10/02/weekly-roundup-addled/

September was continuing the three big things in particular, but, ah.

  • art: I finished a secret loophole commission that I can’t show yet; drew a birthday thing for someone; edited my avatar to be more seasonal; resolved to cross Inktober with daily Pokémon; and then was convinced to maybe try real ink instead. That’s a lot! Making up for not drawing anything for a couple weeks while I was obsessed with Isaac’s Descent, I guess.

  • doom: I spent a little more time fiddling with Sandy-styled maps while watching Liz Ryerson stream Doom stuff, but I still have my classic frustrating problems of drawing everything too small and not having a good idea for the overall shape/flow of the world. I also streamed a couple hours of exploring the new Oblige, which was interesting, at least to me.

  • blog: Some more progress towards upstreaming my fix for <summary> in Pelican Atom feeds. Started taking notes for a paid post. Worked on a MegaZeux post and wrote most of a Doom metrics one, but couldn’t finish either.

  • twitter: I wrote @calloutbot, which will either make perfect sense to you, or not.

I think I may have the flu, but without any respiratory symptoms. Just enough that I’m vaguely tired and sore and not quite able to plan larger stuff like, say, blog posts. Or Doom maps, perhaps. I spent several frustrating days wrangling with two different posts and not getting anywhere with either of them before I remembered a roommate had had the flu about one incubation period ago.

I am thus slightly behind on writing, and haven’t done much else mentally-intense either. It sucks and I’m annoyed, but I’m taking a few days off to draw and do other low-intensity stuff before I make a mad scramble to catch up.


Meanwhile, about those, um, three things. I slipped a bit. A lot.

  • Draft three chapters of this book, September: a second chapter

    No, that didn’t happen.

    But! I decided that Isaac’s Descent HD would make a really good final chapter, since it’s an entire real game written completely from scratch. That means it’s also going to be a whopper. I spent like a third of the month distracted by building Isaac’s Descent HD, which is a prerequisite for writing about how I built it, so that’s some really good progress nonetheless.

    The game isn’t too far along from a player perspective, but I did a lot of engine work and took a lot of notes about it. And of course I took all those notes during Ludum Dare, which I can reverse-engineer into a PICO-8 chapter. So while there’s less visible progress than I wanted, I have a ton more stuff to work with now.

  • Get veekun beta-worthy, September: most games dumped; lookup; core pages working; new site in publicly-available beta

    Ha ha none of this happened. I totally dropped the ball.

    I did work on veekun, but I got caught up in dealing with encounters, and then my brain stopped working so good, so overall it didn’t make a whole lot of progress.

  • Runed Awakening, September: blah blah it doesn’t even matter

    I didn’t touch Runed Awakening all month. Sob.

I should probably be learning a lesson here about biting off more than I can chew, but I adamantly refuse to learn anything.

It’s okay if new veekun isn’t done in time for Sun/Moon, which is looking like it’ll be the case — the old site layout and schema should still hobble along just fine as they are. It would’ve been a great time to breathe some life back into the site, is all. I’ll still try to get as much done as I can, so maybe there can still be a usable beta, but I don’t know what I can magic up in six weeks when I’m also doing several other things.

I don’t know what I’m going to do for October. I’ve got a lot of blogging to do now, I still want to find time to experiment with music, and I also want to do two ink drawings a day for Inktober.

Other than all that, I suppose I’ll still “focus” on these three big things and just see what happens.

Weekly roundup: Quietly advancing

Post Syndicated from Eevee original https://eev.ee/dev/2016/09/18/weekly-roundup-quietly-advancing/

September is continuing the three big things in particular.

I had a drowsy day, but otherwise it was still an alright week.

  • blog: I published a post about music theory, which I oughta update to factor in all the stuff people have told me in the aftermath. I also wrote half of another post and stubbed out one or two more; just gotta finish some of them.

  • runed awakening: I did, er, the tiniest bit of planning, and then got distracted by music and game things for the rest of the week.

  • isaac’s descent hd: Physics is done. For real. I mean it. It works, and it works so good. It also has some tiny hints of gameplay now! I’m close to having the first puzzle room be playable: the switch works, the bridge appears and becomes blocking, and the spikes kill you. Just need to make the staff work and finish up the death handling.

  • music: I toyed with Renoise and LMMS, ultimately deciding I like LMMS more. I managed to make a decent chunk of a song that I actually like and that would work remarkably well as background music for Isaac’s Descent.

    And then LMMS crashed.

    I also dug out and cleaned off our keyboard, which had been buried in a closet somewhere for years. I taught myself to play the Pokémon Center theme!

  • veekun: I cleaned up some of the multi-version handling for this harebrained YAML concept. Also dug into ORAS encounters and got 90% of the way to actually extracting them.

I said last week that I’d dedicate a few days to writing, and I would still like to do that! Now is probably a good time to start. I’m behind on blog posts for the month, and I desperately want to get some momentum going with Runed Awakening again.

veekun is definitely not on schedule, but I’m getting excited and ambitious about working on it again, which is a really good sign. I don’t know how far along it’ll be when Sun and Moon come out, but that’s probably okay; veekun has always been a quiet technical resource, not a walkthrough. I think I’m going to try focusing on that idea in the future — for example, I’m probably at the point that I could create orthographic projections of all the maps.

I haven’t written anything for the book in a little while now, but it’s looking like Isaac’s Descent HD will be the final chapter, so working on it still counts as working on the book. Right?

I entered Ludum Dare 36

Post Syndicated from Eevee original https://eev.ee/blog/2016/08/29/i-entered-ludum-dare-36/

Short story: I made a video game again! This time it was for Ludum Dare, a game jam with some tight rules: solo only, 48 hours to make the game and all its (non-code) assets.

(This is called the “Compo”; there’s also a 72-hour “Jam” which is much more chill, but I did hard mode. Usually there’s a ratings round, but not this time, for reasons.)

I used the PICO-8 again, so you can play it on the web as long as you have a keyboard. It’s also on Ludum Dare, and in splore, and here’s the cartridge too.

Isaac's Descent

But wait! Read on a bit first.

Foreword

I’ve never entered a game jam before, and I slightly regretted that I missed a PICO-8 jam that was happening while I was making Under Construction. I’ve certainly never made a game in 48 hours, so that seemed exciting.

More specifically, I have some trouble with shaking ideas loose. I don’t know a more specific word than “idea” for this, but I mean creative, narrative ideas: worldbuilding, characters, events, gameplay mechanics, and the like. They have a different texture from “how could I solve this technical problem” ideas or “what should I work on today” ideas.

I’ll often have an idea or two, maybe a theme I want to move towards, and then hit a wall. I can’t think of any more concepts; I can’t find any way to connect the handful I have. I end up shelving the idea, sometimes indefinitely. This has been particularly haunting with my interactive fiction game in progress, Runed Awakening, which by its very nature is nothing but narrative ideas.

My true goal for entering Ludum Dare was to jiggle the idea faucet and maybe loosen it a bit. Nothing’s quite as motivating as an extreme time limit. I went in without anything in mind; I didn’t even know it was coming up until two days beforehand. (The start time is softly enforced by the announcement of a theme, anyway.) I knew it would probably resemble a platformer, since I already had the code available to make that work, but that was about it.


I already wrote about the approach to making our last game, so I can’t very well just do that again. Instead, here’s something a little different: I took regular notes on the state of the game (and myself), all weekend. You can see exactly how it came together, almost hour by hour. Is that interesting? I think it’s interesting.

I don’t know if this is a better read if you play the game first or last. Maybe both?

There’s also a surprise at the very end, as a reward for reading through it all! No, wait, stop, you can’t just scroll down, that’s cheating—

Timeline

Thursday

09:00 — Already nervous. Registered for the site yesterday; voted on the themes today; jam actually starts tomorrow. I have no idea if I can do this. What a great start.

Friday

09:00 — Even more nervous. Last night I started getting drowsy around 5pm, I guess because my sleep is still a bit weird. So not only do I only have 48 hours, but by the looks of things, I’ll be spending half that time asleep.

17:00 — I can’t even sit still and do anything for the next hour; I’m too antsy about getting started.

START!! 18:00 — Theme revealed: “Ancient Technology”. I have no ideas.

Well, no, hang on. Shortly before the theme was announced, I had a brief Twitter conversation that shook something loose. I’d mentioned that I rarely seem to have enough ideas to fill a game. Someone accidentally teased out of me that it’s more specific than that: I have trouble coming up with ideas that appeal to me, that satisfy me in the way I really like in games and stories. In retrospect, I probably have a bad habit of rejecting ideas by reflex before I even have a chance to think about them and turn them into something more inspiring.

The same person also asked how I want games to feel, and of course, that’s what I should be keeping front and center, before even worrying about genre or mechanics or anything. How does this feel, and how does it make me feel? I know that’s important, but I’m not in the habit of thinking about it.

With that in mind, how does “ancient technology” make me feel?

It reminds me immediately of two things: Indiana Jones-esque temples, full of centuries-old mechanisms and unseen triggers that somehow still work perfectly; and also Stargate, where a race literally called “Ancients” made preposterously advanced devices with such a sleek and minimalist design that they might as well have been magic.

The common thread is a sense of, hm, “soft wonder”? You’re never quite sure what’s around the next corner, but it won’t be a huge surprise, just a new curiosity. There’s the impression of a coherent set of rules somewhere behind the scenes, but you never get to see it, and it doesn’t matter that much anyway. You catch a glimpse of what’s left behind, and half your astonishment is that it’s still here at all.

Also, I bet I can make a puzzle-platformer out of this.

18:20 — Okay, well! I have a character Isaac (stolen from Glip, ahem) who exists in Runed Awakening but otherwise has never seen any real use. I might as well use them now, which means this game is also set somewhere in Flora.

I’ve drawn a two-frame walking animation and saved it as isaac.p8 for now. It’s enough to get started. I’m gonna copy/paste all the engine gunk from my unfinished game, rainblob — it’s based on what was in Under Construction, with some minor cleanups and enhancements.

19:00 — I’m struggling a little bit here, because Isaac is two tiles tall, and I never got around to writing real support for actors that are bigger than a single tile. Most of the sprite drawing is now wrapped in a little sprite type, so I don’t think this will be too bad — I almost have it working, except that it doesn’t run yet.

19:07 — Success! Apparently I was closer than I thought. The solution is a bit of a hack: instead of a list of tiles (as animation frames), Isaac has a list of lists of tiles, where each outer list is the animation for one grid space. It required some type-checking to keep the common case working (boo), and it blindly assumes any multi-tile actor is a 1×n rectangle. It’s fine. Whatever. I’ll fix it if I really need to.

19:16 — I drew and placed some cave floor tiles. Isaac can no longer walk left or jump. I am not sure why. I really, really hope it’s not another collision bug. The collision function has been such a nightmare. Is it choking on a moving object that’s more than a tile tall?

19:20 — I have been asked to put a new bag in the trash can. This is wildly unjust. I do not have time for such trivialities. But I have to pee anyway, so it’s okay — I’ll batch these two standing-up activities together to save time. Speed strats.

19:28 — The left/jump thing seems to be a bug with the PICO-8; the button presses don’t register at all. Restarting the “console” fixed it. This is ominous; I hope a mysterious heisenbug doesn’t plague me for the next 46½ hours.

19:51 — Isaac is a wizard. Surely, they should be able to cast spells or whatever. Teeny problem: the PICO-8 only has two buttons, and I need one of them for jumping. (Under Construction uses up for jump, but I’ve seen several impassioned pleas against doing that because it makes using a real d-pad very awkward, and after using the pocketCHIP I’m inclined to agree.)

New plan, then: you have an inventory. Up and down scroll through it, and the spare button means “use the selected item”. Accordingly, I’ve put a little “selected item” indicator in the top left of the screen.

Isaac hasn’t seen too much real character development; it’s hard to develop a character without actually putting them in something. Their backstory thusfar isn’t really important for this game, but I did have the idea that they travel with a staff that can create a reflective bubble. That’s interesting, because it suggests that Isaac prefers to operate defensively. I made a staff sprite and put it in the starting inventory, but I’m not quite sure what to do with it yet; I don’t know how the bubble idea would work in a tiny game.

20:01 — As a proof of concept, I made the staff shoot out particles when you use it. The particle system is from rainblob, and is pretty neat — they’re just dumb actors that draw themselves as a single pixel.

I bound the X button to “use”. Should jumping be X or O? I’m not sure, hm. My Nintendo instincts tell me the right button is for jumping, but on a keyboard, the “d-pad” and buttons are reversed.

20:04 — I realize I added a sound effect for jumping, then accientally overwrote the code that plays it. Oops; fixing that. Good thing I didn’t overwrite the sound! This is what I get for trying to edit the assets in the PICO-8 and the code in vim, when it’s all stored in a single file.

20:37 — I have a printat function (from Under Construction) which prints text to the screen with a given horizontal and vertical alignment. It needs to know the width of text to do this, which is easy enough: the PICO-8 font is fixed-width. Alas! The latest PICO-8 release added characters to represent the controller buttons, and I’d really like to use them, but they’re double-wide. Hacking around this is proving a bit awkward, especially since there’s no ord() function available oh my god.

20:50 — Okay, done. The point of that was: I rigged a little hint that tells you what button to press to jump. When you approach the first ledge, Isaac sprouts a tiny thought bubble with the O button symbol in it. PICO-8 games tend not to explain themselves (something that has frustrated me more than once), so I think that’s nice. It’s the kind of tiny detail I love including in my work.

21:04 — I wrote a tiny fragment of music, but I really don’t know what I’m doing here, so… I don’t know.

I had the idea that there’d be runes carved in the back wall of this cave, so I made a sprite for that, though it’s basically unrecognizable at this size. I don’t know what reading them will do, yet.

I also made the staff draw a bubble (in the form of a circle around you) while you’re holding the “use” button down, via a cheap hack. Kinda just throwing stuff at the wall in the hopes that something will stick.

21:07 — I’ve decided to eat these chips while I ponder where to go from here.

21:22 — So, argh. Isaac’s staff is supposed to create a bubble that reflects magical attacks. The immediate problem there is that my collision assumes everything is a rectangle. I really don’t want to be rewriting collision with only a weekend to spend on this. I could make the bubble rectangular, but who’s ever heard of a rectangular magic bubble?

Maybe I could make this work, but it raises more questions: what magical attacks? What attacks you? Are there monsters? Do I have to write monster AI? Can Isaac die? I need to translate these scraps of thematics into game mechanics, somehow.

I try to remember to think about the feel. I want you to feel like you’re exploring an old cavern/temple/something, laden with traps meant to keep you out. I think that means death, and death means save points, and save points mean saving the game state, which I don’t have extant code for. Oof.

22:00 — Not much has changed; I started doodling sprites as a distraction. Still getting this thing where left and up stop working, what the hell.

22:05 — Actually, I’m getting tired; I should deal with the cat litter before it gets too late. Please hold.

22:59 — I wrote some saving, which doesn’t work yet. Almost, maybe. I do have a pretty cool death animation, though it looks a bit wonky in-game, because animations are on a global timer. Whoops! All of them have been really simple so far, so it hasn’t mattered, but this is something that really needs to start at the beginning and play through exactly once.

23:15 — Okay! I have a save, and I have death, and I even have some sound effects for them. The animation is still off, alas (and loops forever), and there’s no way to load after you die, but the basic cycle of this kind of game is coming together. If I can get a little more engine stuff working tomorrow, I should be able to build a little game. Goodnight for now.

Saturday

07:48 — I’m. I’m up.

08:28 — Made the animation start when the player dies and stop after it’s played once. Also made the music stop immediately on death and touched up the sprites a bit. Still no loading, so death pretty much ends the game forever; that’s up next and should be easy enough. First, breakfast.

09:09 — The world is now restored after you die, and I fixed a few bugs as well. Cool beans.

09:14 — So, ah. That’s a decent start mechanically, but I need a little more concept, especially as it relates to the theme. I don’t expect this game to be particularly deep, what with its non-plot of “explore these caverns”, but I do want to explore the theme a bit. I want something that’s interesting to play, too, even if for only five minutes.

Isaac is a clever wizard. Canonically, he might be the cleverest wizard. What does his staff do?

What kind of traps would be in a place like this? Spikes, falling floors, puzzles? Monsters? Pressure plates?

What does Isaac’s staff do?

Hang on, let me approach this a much more sensible way: if I were going to explore a cavern like this, what would I want my staff to do?

09:59 — I’m still struggling with this question. I thought perhaps the cavern would only be the introductory part, and then you’d find a cool teleporter to a dusty sleek place that looked a lot more techy. I tried drawing some sleek bricks, but I can’t figure out how to get the aesthetic I want with the PICO-8’s palette. So I distracted myself by drawing some foreground tiles again. Whoops?

10:01 — I’d tweeted two GIFs of Isaac’s death while working on it, complete with joking melodramatic captions like “death has no power here”. I also lamented that I didn’t know yet what the game was about, to which someone jokingly replied that so far it seemed to be “about death”.

Aha. Maybe the power of Isaac’s staff is to create savepoints, and maybe some puzzles or items or whatever transcend death, sticking around after you respawn. I’ll work with that for a bit and see what falls out of it.

11:12 — Wow, I’ve been busy! The staff now creates savepoints, complete with a post-death menu, a sound effect, a flash (bless you, UC’s scenefader), a thought-bubble hint, and everything. It’s pretty great? And it fits perfectly: if you’re exploring a trap-laden cavern then you’d want some flavor of safety equipment with you, right? What’s safer than outright resurrection?

I can see some interesting puzzles coming out of this: you have to pick your savepoint carefully to interact with mechanisms in the right way, or you have to make sure you can kill yourself if you need to, since that’s the only way to hop back to a savepoint. And it’s a purely defensive ability, just as I wanted. And something impossibly cool and powerful but hilariously impractical seems extremely up Isaac’s alley, from what I know about them so far.

11:59 — Still busy, which is a good sign! I’ve been working on making some objects for Isaac to interact with in the world; so far I’ve focused on the runes on the wall, though I’m not quite sold on them yet. The entire game so far is that you have to make a save point, jump down a pit to use a thing that extends a bridge over the pit, then kill yourself to get back to the save point and cross the bridge. It’s very rough, but it’s finally looking like a game, which is really great to see.

12:28 — I finally got sick enough of left/up breaking that I sat down and tried every distinct action I could think of, one at a time, to figure out the cause. Turns out it was my drawing tablet, which I’d used a couple times to draw sprites? If the pen is close enough to even register as a pointer, left and up break. I know I’ve seen the tablet listed as a “joypad” in other SDL applications, so my best guess is that it’s somehow acting as an axis and confusing PICO-8? I can’t imagine why or how. Super, super weird, but at least now I know what the problem is.

14:28 — Uh, whoops. Somehow I spent two hours yelling on Twitter. I don’t know how that happened.

16:42 — Hey, what’s up. I’ve been working on music (with very mixed results) and fixing bugs. I’m still missing a lot of minor functionality — for example, resetting the room doesn’t actually clear the platforms, because resetting the map only asks actors to reset themselves, and the platforms are new actors who don’t know they should vanish. Oops.

Oh, I also have them appearing on a timer, which is cool. I want their appearance to be animated, too, but that’s tricky with the current approach of just drawing tiles directly on the map. I guess I could turn them into real actors that are always present but can appear and vanish, which would also fix the reset thing.

For now, it’s time to eat and swim, so I’ll get back to this later.

18:22 — I’m so fucked. Everything is a mess. The room still doesn’t reset correctly. The time is half up and I have almost one room so far.

I need to shift gears here: fix the bugs as quickly as I can, then focus on rooms.

20:05 — I fixed a bunch of reset bugs, but I’m getting increasingly agitated by how half-assed this engine is. It’s alright for what it is, I guess, but it clearly wasn’t designed for anything in particular, and I feel like I have to bolt features on haphazardly as I need them.

Anyway, I made progression work, kinda: when you touch the right side of the room, you move on to the next one. When you touch the right side of the final room, you win, and the game celebrates by crashing.

I made a little moving laser eye thing that kills you on contact, creating a cute puzzle where you just resurrect yourself as soon as it’s gone past you. Changed death so time keeps passing while the prompt is up, of course.

Now I have a whopping, what, three world objects? And one item you can use, the one you start with? And I’m not sure how to put these together into any more puzzles.

I made Isaac’s cloak flutter a bit while they walk. Cool.

20:31 — For lack of any better ideas, I added something I’d wanted since the beginning: Isaac’s color scheme is now chosen randomly at startup. They are a newt, you see.

21:07 — Did some cleanup and minor polishing, but still feeling blocked. Going to brainstorm with myself a bit.

What are some “ancient” mechanisms? Pressure plates; blowdarts; secret doors; hidden buttons; …?

Does Isaac get an improved resurrection ability later? Resurrect where you died? I don’t know how that would be especially useful unless you died on a moving platform, and I don’t have anything like that.

Other magical objects you find…?

Puzzle ideas? Set up a way to kill yourself so you can use it later? Currently there’s no way to interact with the world other than to add those platforms, so I don’t see how this would work. I also like “conflict” puzzles where two goals seem to depend on each other, but offhand I can’t think of anything along those lines besides the first room.

21:55 — I’ve built a third puzzle, which is just some slightly aggravating platforming, made a little less so by the ability to save your progress.

22:19 — I started on a large room marking the end of the cave sequence and the entrance to the sleek brick area. I made a few tiles and a sound effect for it, but I’m not quite sure how the puzzle will work. I want a bigger and more elaborate setup with some slight backtracking, and I want to give the player a new toy to play with, but I’m not sure what.

I’ll have to figure it out tomorrow.

Sunday

08:49 — Uggh, I’m awake. Barely. I keep sleeping for only six hours or so, which sucks.

I think I want to start out by making a title screen and some sort of ending. Even if I only have three puzzles, a front and back cover will make it look much more like an actual game.

09:57 — I made a little title screen and wrote a simple ditty for it, which I might even almost like?

11:09 — Made a credits screen as well, which implies that there’s an actual ending. And there is! You get the Flurry, an enchanted rapier I thought of a little while ago. It’s not described in the game or even mentioned outside of the “credits”, in true 8-bit fashion.

Now I have a complete game no matter what, so I can focus on hammering out some levels without worrying too much about time.

I also fixed up the ingame music; it used to have some high notes come in on a separate track, in my clumsy attempts at corralling multiple instruments, but I think they destroyed the mood. Now it’s mostly those low notes and some light “bass”. It works as a loop now, too. Much better in every way.

The awkward-platforming room had a particularly tricky jump that turned out to be trickier than I thought — I suddenly couldn’t do it at all when trying to demo the game for Mel. At their suggestion, I made it a bit less terrible, though hopefully still tricky enough that it might need a second try.

13:05 — Hi! Wow! I’ve been super busy! I came up with a new puzzle involving leaving a save point in midair while dropping down a pit. Then I finally added a new item, mostly inspired by how easy it was to implement: a spellbook that makes you float but doesn’t let you jump, so you can only move back and forth horizontally until you turn it off. I also added a thought bubble for how to cycle through the inventory, some really cute sound effects for when you use the book, and an introductory puzzle for it. It’s coming along pretty nicely!

14:13 — Trying to design a good puzzle for the next area. I made a stone door object which can open and close, though the way it does so is pretty gross, and a wooden wheel that opens it. I really like the wheel; my first thought was to use a different color lever, but I wanted the doors to be reusable whereas the platform lever isn’t, and using the same type of mechanism seemed misleading.

I might be trying to cram too much into the same room at the moment? It introduces the spellbook and the doors/wheel, then makes you solve a puzzle using both. I might split this up and try to introduce both ideas separately.

I think around 16:00, I’m gonna stop making puzzle rooms (unless I still have an amazing idea) and focus on cleaning stuff up, fixing weird bugs, and maybe un-hacking some of these hacks.

15:19 — Someone asked if I streamed my dev process, and I realized that this would’ve been a perfect opportunity to do that, since everything happens within a single small box. Oops. I guess I’ll stream the last few hours, though now no one can watch without getting all he puzzle spoiled.

I made a separate room for getting the spellbook, plus another for introducing the stone doors. The pacing is much much better, and now there are more puzzles overall, which is nice.

15:54 — My puzzles seem to be pretty solid, and I’ve only got space for one more on the map, so I’m thinking about what I’d like it to be.

I want something else that combines mechanics, like, using the platforms to block a door from closing all the way. But a door and a platform can’t coexist on the same tile, so the door has to start out partially open. And… what happens if you summon the platform after closing the door all the way? Hm. I wish my physics were more thorough, but right now none of these objects interact with each other terribly well; the stone door in particular just kinda ignores anything in its way until it hits solid wall.

16:04 — Instead of all that, I fixed the animation on the wheel (it wasn’t playing at all?), gave it a sound effect that I love, and finally added an explicit way to control draw order. The savepoint rune had been drawing over the player since the very beginning, which had been bugging me all weekend. Now the player is always on top. Very glad I had sort lying around.

16::57 — I guess I’m done? I filled that last puzzle room with an interesting timing thing that uses the lever, wheel, runes, and floating, but there are a couple different ways to go about it, and one way is 1-cycle. It bugs me a little that the original setup I wanted (repeat the platforming, then discover it won’t get you all the way to the exit and have to rethink it) doesn’t work, but, there’s no reason you’d think to do it the fastest way the first time, and I think being able to notice that adds an extra “aha”. Gotta resist the urge to railroad!

(Editor’s note: I later fixed a bug that removed the 1-cycle solution.)

I’ll call this done and let people playtest it, once I make it fit within the compressed size limit.

17:08 — God, fuck the compressed size limit. I started at 20538; I deleted all the debug and unused stuff inherited from rainblob and UC, and now I’m at 18491. The limit is 15360. God dammit. I don’t want to have to strip all the comments again.

17:39 — I ended up deleting all the comments again. Oh, well. I ran through it from start to finish once, and all seems good! The game is done and online, and all that’s left is figuring out how to put it on the LD website.

18:46 — Time is up, but this is “submission hour” and the rules allow fixing minor bugs, so I fixed a few things people have pointed out:

  • Two obvious places you could get stuck now have spikes. You can reset the room from the menu, but I’m pretty sure nobody noticed the “enter = menu” on the title screen, and a few people have thought they had to reset the entire game.

  • The last spike pit in the spellbook room required you to walk through spikes, which wasn’t what I intended and looks fatal, even though it’s not. The intention was for it to be an exact replica of the previous pit, except that you have to float across it from a tile higher; this solution now works.

  • One of those half-rock-brick tiles somehow ended up in the first room? Not sure how. It’s gone now.

  • Mel expressed annoyance at having to align a float across the wide penultimate room with no kind of hint, so I added a half-rock-brick tile to the place where you need to stand to use the high-up wheel.

Parting thoughts

I enjoyed making this! It definitely accomplished its ultimate goal of giving me more experience shaking ideas loose. Looking back over those notes, the progression is fascinating: I didn’t even know the core mechanic of resurrecting until 16 hours in (a third of the time), and it was inspired by a joke reply on Twitter. At the 41-hour mark, I still only had three and a half puzzle rooms; the final game has ten. The spellbook seriously only exists because “don’t apply gravity” was so trivial to implement, and the floating effect is something I’d already added for making the Flurry dramatically float above its platform. Half the game only exists because I decided a puzzle was too complicated and tried to split it up.

I almost can’t believe I actually churned all this out in 48 hours. I’ve pretty much never made music before, but I ended up really liking the main theme, and I adore the sound effects. The sprites are great, considering the limitations. I’d never drawn a serious sprite animation before, either, but I love Isaac’s death sequence. The cave texture is great, and a last-minute improvement over my original sprite, which looked more like scratched-up wood. I also drew a scroll sprite that I adored, but I never found an excuse to use it in the game, alas.

Almost everyone who’s played it has made it all the way through without too much trouble, but also seemed to enjoy the puzzles. I take that to mean the game has a good learning curve, which I’m really happy about.

I’m glad I already had a little engine, or I would’ve gotten nowhere.

I have some more ideas that I discarded as impractical due to time or size constraints, so I may port the game to LÖVE and try to expand on it. When I say “may”, I mean I started working on this about two hours after finishing the game.

Oh, and I’m writing a book

Right, yes, about that. I’ve been mumbling about this for ages, but I didn’t want to go on about the idea so much that actually doing it lost its appeal. I think I’ve made enough of a dent now that I’m likely to stick with it.

I’m writing a book about game development — the literal act of game development. I made a list of about a dozen free (well, except PICO-8) and cross-platform game engines spanning a wide range of ease-of-use, creative freedom, and age. I’m going to make a little game in each of them and explain what I’m doing as I do it, give background on totally new things, preserve poor choices and show how I recovered from them, say what inspired an idea or how I got past a creative roadblock, etc. The goal is to write something that someone with no experience in programming or art or storytelling can follow from beginning to end, getting at least an impression of what it looks like to create a game from scratch.

It’s kind of a response to the web’s mountains of tutorials and beginner docs that take you from “here’s what a variable is” all the way to “here’s what a function is”, then abandon you. I hate trying to get into a new thing and only finding slow, dull introductions that don’t tell me how to do anything interesting, or even show what kinds of things are possible. I hope that for anyone who learns the way I do, “here’s how I made a whole game” will be more than enough to hit the ground running.

I have part of an early chapter on MegaZeux written; I wanted to finish it by the end of August, but that’s clearly not happening, oops. I also started on a Godot chapter, which will be a little different since it’s for a game that will hopefully have multiple people working on it.

Isaac’s Descent will be the subject of a PICO-8 chapter — that’s why I took the notes! It’ll expand considerably on what I wrote above, starting with going through all the code I inherited from Under Construction (and recreating how I wrote it in the first place). I also have about 20 snapshots of the game as it developed, which I’m holding onto myself for now.

I want to put rough drafts of each chapter on the $4 Patreon tier as I finish them, so keep an eye out for that, though I don’t have any ETA just yet. I imagine MegaZeux or PICO-8 will be ready within the next couple months.

Weekly roundup: Ludum Dare

Post Syndicated from Eevee original https://eev.ee/dev/2016/08/29/ludum-dare/

August is loosely about video games, but really it’s about three big things in particular.

  • book: Wrangled LaTeX some more. Came up with a new style for admonitions (little set-out boxes) that I really like. Drew some icons for a few of them. Started on another chapter, for reasons; see below.

  • veekun: Regexing machine code for addresses was getting really clumsy, so I went one step further and wrote a disassembling pattern matcher thing. You write some assembly with some variables in it, and it finds occurrences of that code and tells you what the variables are. I can pretty much paste in entire functions, massage them slightly, and find matches. It’s pretty slick.

    The upshot of this is that loading original Japanese Red and Green now works! But Yellow doesn’t. So I fixed that, and now Japanese Blue is broken. Or maybe I fixed it and that broke Yellow again? I’m not sure. There were some tiny changes to core code between some of these games, and the pattern-matcher has no way to express alternatives. I don’t know if I’m better off inventing one or just fudging it.

    Anyway, pretty close to having all of gen 1 dumping Pokémon reliably. Still need to actually dump other stuff — moves, items, encounters, and the like — but that’s much more straightforward.

  • hax: I was still in a mood to dink around with Game Boy stuff, so I added Python 3 support to some relevant tooling and wrote a proof of concept for storing Pokémon maps in Tiled format.

  • blog: I wrote a thing about writing tests.

  • twitter: I taught @perlin_noise a few new tricks.

  • art: I drew a friend’s lizard pal based on a reference photo, which isn’t something I’d seriously tried before. Value-only, only one layer, only one brush. It came out surprisingly well.

  • gamedev: I participated in Ludum Dare 36, a 48-hour game jam. I’d never done LD before, and naturally I picked the only one that has no ratings round (for administrative shuffling reasons). Oh, well.

    The result was Isaac’s Descent, a short puzzle-platformer for the PICO-8. You can play it via the web (source code included), and I also wrote a post about it.


So! There are a few days left, but it’s pretty much the end of August. Let’s see how I did.

  • Draft three chapters of this book, August: one chapter

    Well, I didn’t get a chapter done. I did make huge progress on the chapter I started, though — plus I began a second chapter, and generated enough notes for the entirety of a third. I spent a decent amount of time wrangling Sphinx and LaTeX, too, which I would’ve had to do sooner or later regardless.

    So I didn’t do quite what I wanted, but I did do far more than I’ve put into any previous harebrained book idea, and it was a pretty decent chunk of work. I’m okay with that.

    Just what is this damn book, you ask? Ah, perhaps you should read that Ludum Dare post.

  • Get veekun beta-worthy, August: basics of the new schema committed; basics of gen 1 and gen 6 games dumped; skeleton cli and site

    Haha, no. I got gen 1 almost working for Pokémon only. It turns out that while gen 1 has the simplest data, it probably has the most convoluted storage.

    On the other hand, the detours taught me a lot about Game Boy architecture, which was interesting and helpful for making the dumper fairly robust thusfar. I also made some breakthroughs on architecture that had been haunting me for a while. I’ll have to move my ass in the next week or two to catch up — hopefully finish gen 1 and get a few other generations dumped real soon — but I think this is still doable.

  • Finish Runed Awakening, August: working ending; at least one solution to each puzzle; private beta

    Whoops! I did basically squat on Runed Awakening. I figured out most of the ending, which had been my major roadblock, but I didn’t touch the code or run the game a single time. Dang. It’s not like I was goofing off all month, either; I just didn’t have a big block of time to devote to the weird mishmash of writing and planning and programming that IF requires.

    I really want to finish this game, but end of October is not looking too great. I don’t know why it’s proving so difficult; it’s not that complicated, and I started on it almost two years ago now. I’ve made multiple other games just so far this year! Argh.

    If it’s any consolation (to me): I picked November as a target because Mel wanted to embed Runed Awakening on Floraverse as an update around that time. But Isaac’s Descent takes place in the same universe, so it works just as well. Goal accomplished!

Onwards to September. The only thing on the list with a real solid deadline is veekun, since the new games will be coming out. It’s a bit behind, but I’m pretty sure I can catch up. Gen 2 shouldn’t be too different from gen 1, and I’ve done gen 4 and onwards before.

Weekly roundup: Ludum Dare

Post Syndicated from Eevee original https://eev.ee/dev/2016/08/29/weekly-roundup-ludum-dare/

August is loosely about video games, but really it’s about three big things in particular.

  • book: Wrangled LaTeX some more. Came up with a new style for admonitions (little set-out boxes) that I really like. Drew some icons for a few of them. Started on another chapter, for reasons; see below.

  • veekun: Regexing machine code for addresses was getting really clumsy, so I went one step further and wrote a disassembling pattern matcher thing. You write some assembly with some variables in it, and it finds occurrences of that code and tells you what the variables are. I can pretty much paste in entire functions, massage them slightly, and find matches. It’s pretty slick.

    The upshot of this is that loading original Japanese Red and Green now works! But Yellow doesn’t. So I fixed that, and now Japanese Blue is broken. Or maybe I fixed it and that broke Yellow again? I’m not sure. There were some tiny changes to core code between some of these games, and the pattern-matcher has no way to express alternatives. I don’t know if I’m better off inventing one or just fudging it.

    Anyway, pretty close to having all of gen 1 dumping Pokémon reliably. Still need to actually dump other stuff — moves, items, encounters, and the like — but that’s much more straightforward.

  • hax: I was still in a mood to dink around with Game Boy stuff, so I added Python 3 support to some relevant tooling and wrote a proof of concept for storing Pokémon maps in Tiled format.

  • blog: I wrote a thing about writing tests.

  • twitter: I taught @perlin_noise a few new tricks.

  • art: I drew a friend’s lizard pal based on a reference photo, which isn’t something I’d seriously tried before. Value-only, only one layer, only one brush. It came out surprisingly well.

  • gamedev: I participated in Ludum Dare 36, a 48-hour game jam. I’d never done LD before, and naturally I picked the only one that has no ratings round (for administrative shuffling reasons). Oh, well.

    The result was Isaac’s Descent, a short puzzle-platformer for the PICO-8. You can play it via the web (source code included), and I also wrote a post about it.


So! There are a few days left, but it’s pretty much the end of August. Let’s see how I did.

  • Draft three chapters of this book, August: one chapter

    Well, I didn’t get a chapter done. I did make huge progress on the chapter I started, though — plus I began a second chapter, and generated enough notes for the entirety of a third. I spent a decent amount of time wrangling Sphinx and LaTeX, too, which I would’ve had to do sooner or later regardless.

    So I didn’t do quite what I wanted, but I did do far more than I’ve put into any previous harebrained book idea, and it was a pretty decent chunk of work. I’m okay with that.

    Just what is this damn book, you ask? Ah, perhaps you should read that Ludum Dare post.

  • Get veekun beta-worthy, August: basics of the new schema committed; basics of gen 1 and gen 6 games dumped; skeleton cli and site

    Haha, no. I got gen 1 almost working for Pokémon only. It turns out that while gen 1 has the simplest data, it probably has the most convoluted storage.

    On the other hand, the detours taught me a lot about Game Boy architecture, which was interesting and helpful for making the dumper fairly robust thusfar. I also made some breakthroughs on architecture that had been haunting me for a while. I’ll have to move my ass in the next week or two to catch up — hopefully finish gen 1 and get a few other generations dumped real soon — but I think this is still doable.

  • Finish Runed Awakening, August: working ending; at least one solution to each puzzle; private beta

    Whoops! I did basically squat on Runed Awakening. I figured out most of the ending, which had been my major roadblock, but I didn’t touch the code or run the game a single time. Dang. It’s not like I was goofing off all month, either; I just didn’t have a big block of time to devote to the weird mishmash of writing and planning and programming that IF requires.

    I really want to finish this game, but end of October is not looking too great. I don’t know why it’s proving so difficult; it’s not that complicated, and I started on it almost two years ago now. I’ve made multiple other games just so far this year! Argh.

    If it’s any consolation (to me): I picked November as a target because Mel wanted to embed Runed Awakening on Floraverse as an update around that time. But Isaac’s Descent takes place in the same universe, so it works just as well. Goal accomplished!

Onwards to September. The only thing on the list with a real solid deadline is veekun, since the new games will be coming out. It’s a bit behind, but I’m pretty sure I can catch up. Gen 2 shouldn’t be too different from gen 1, and I’ve done gen 4 and onwards before.

Weekly roundup: slow but steady

Post Syndicated from Eevee original https://eev.ee/dev/2016/08/14/weekly-roundup-slow-but-steady/

August is loosely about video games, but really it’s about three big things in particular.

  • book: Lots of progress! I’m definitely getting a feel for the writing style I want to use, I’ve wrangled Sphinx into a basically usable state, I’ve written a lot of tentative preface stuff and much of the intro part of the chapter, and I’ve written a ton of scratchy prose (like notes, but full sentences that just need some editing and cleanup later). Also worked around some frequent crashes with, ah, a thing I’m writing about.

  • veekun: I did a serious cleanup of the gen 1 extraction code; added some zany heuristics for detecting data that should work even in fan hacks (if there even are any for gen 1); and hacked multi-language extraction into working well enough for starters.

    Finally, and I do mean finally, I built some groundwork for versioning support in the Python API. This has been hanging over my head for probably a year and was one of the biggest reasons I kept putting off working on this whole concept. I just didn’t quite know how I wanted to do it, and I was terrified of doing it “wrong”. At long last, yesterday I pushed through, and now I can see the light at the end of the tunnel.

    I also committed what I had so far, which is a complete mess but also a working mess, and that makes me feel better about the state of things. You can have a look if you want.

  • runed awakening: I didn’t get any tangible work done, but after some months of agonizing, I finally figured out how to make the ending sensible. Mostly. Like 80%. I’m much closer than I used to be. Once I nail down a couple minor details, I should be able to go actually build it.


  • blog: I finally fixed veekun’s front page — the entire contents of blog posts will no longer appear there. (The actual problem was that Pelican, the blog generator I use, puts the entirety of blog posts in Atom’s <summary> field and wow is that wrong. I’ve submitted a PR and patched my local install.)

    I wrote about half a post on testing, which I’d really like to finish today.

  • zdoom: My Lua branch can now list out an actor’s entire inventory — the first capability that’s actually impossible using the existing modding tools. (You can check how many of a particular item an actor is carrying, but there’s no way to iterate over a list of strings from a mod.)

  • doom: Almost finished my anachrony demo map, but stopped because I wasn’t sure how to show off the last couple things. Fixed a couple items that had apparently been broken the entire time, whoops.

  • slade: I added the most half-assed stub of a list of all the things in the current map and how many there are on each difficulty. I vaguely intend to make a whole map info panel, and I still need to finish 3D floors; I just haven’t felt too inclined to pour much time into SLADE lately. Both C++ and GUI apps are a bit of a slog to work with.

  • art: I scribbled Latias with a backpack and some other things.

    I did two daily Pokémon, which is, at least, better than one. I think they’re getting better, but I also think I’m just trying to draw more than I know how to do in an hour.

    I hit a skill wall this week, where my own expectations greatly outpaced my ability. It happens every so often and it’s always maddening. I spent a lot of time sketching and looking up refs (for once) and eventually managed to pierce through it — somehow I came out with a markedly improved understanding of general anatomy, hands, color, perspective, and lighting? I don’t know how this works. The best thing I drew is not something I’ll link here, but you can enjoy this which is pretty good too. Oh, I guess I did a semi-public art stream for the first time this week, too.

    Now my arm is tired and the callus where I grip the pen too hard is a bit sore.

  • irl: Oh boy I got my oil changed? Also I closed a whole bunch of tabs and went through some old email again, in a vain attempt to make my thinkin’ space a bit less chaotic.

Wow! A lot of things again. That’s awesome. I really don’t know where I even found the time to do quite so much drawing, but I’m not complaining.

I’m a little panicked, since we’re halfway through the month and I don’t think any of the things I’m working on are half done yet. I did try to give myself a lot of wiggle room in the October scheduling, and it’s still early, so we’ll see how it goes. I can’t remember the last time I was quite this productive for this long continuously, so I’m happy to call this a success so far either way.

Weekly roundup: three big things

Post Syndicated from Eevee original https://eev.ee/dev/2016/08/07/weekly-roundup-three-big-things/

August is about video games. Actually, the next three months are about video games. Primary goals and their rough stages:

  1. Draft three chapters of this book
    • August: one chapter (at which point I might start talking about what the book is)
    • September: another chapter
    • October: yet another chapter
  2. Get veekun beta-worthy
    • August: basics of the new schema committed; basics of gen 1 and gen 6 games dumped; skeleton cli and site
    • September: most games dumped; lookup; core pages working; new site in publicly-available beta
    • October: all games dumped; new site design work; extras like search and calculators
  3. Finish Runed Awakening
    • August: working ending; at least one solution to each puzzle; private beta
    • September: alternate solutions; huge wave of prose editing; patreon beta
    • October: fix the mountains of issues people find; finish any remaining illustrations

Yeah, we’ll see how all that goes. I also have some vague secondary goals like “do art” and “release tiny games” and “do Doom stuff” but those are extremely subject to change. Hopefully I can stick to the above three big things for three months.

Anyway, this week:

  • blog: Finished and published posts on why to use Python 3 and how to port to it, plus made numerous suggested edits. Wrote a brief thing about my frustrations with Pokémon Go. And wrote about veekun’s schema woes, which helped me reason through a few lingering thorny problems.

    That might be a record for most things I’ve published within a calendar week.

  • art: I tried an hour of timed (real-life) figure drawings, which was kinda weird. I’ve really lapsed on the daily Pokémon, possibly because I changed up the rules to be an hour for a single painting, and that feels like a huge amount of time (…for something I don’t think will come out very well). I’ll either make a better effort to do them every day, or change the rules again so I stop putting them off.

    I drew Griffin’s Nuzlocke team kind of on a whim? A day-long whim?

  • book: I wrote some preface, which you’re probably supposed to do last, but it helped me figure out the tone of the writing. I’ve mentioned this before regarding previous failed attempts, but writing a book is surprisingly harder than writing a blog post — I can’t quite put my finger on why, but the medium feels completely different and alien, and I’m much more self-conscious about how I write.

    I did get a bit of a chapter written, though. I probably spent much more time wrangling authoring tools into producing something acceptable.

  • doom: I somehow drifted into doing stuff to anachrony again. Apparently I left it in near-shambles, with at least a dozen half-finished things all over the place and few comments about what on Earth I was thinking. I’ve cleaned a lot of them up, figured out how to fix some long-standing irritations, and excised some bad ideas. It’s almost presentable now, and I started building a little contrived demo map that tries to show how some of the things work. Someday I might even use all this for a real map, wow.

  • zdoom: Oops, I also picked up my Lua-in-ZDoom experiment again. After doing some things to C++ that made me feel like a witch, someone recommended Sol, a single-file (10k line…) C++ library for interacting with Lua. It is fucking incredible and makes everything so much easier and the author is on Twitter and fixes things faster than I can bring them up.

    I don’t know how much time I want to devote to this — it is just an experiment — but Sol will make it go preposterously faster. It’s single-handedly made a proof of concept look feasible.

  • ops: I spent half a day fixing microscopic IPv6 problems that have been getting on my nerves for ages.

  • veekun: After publishing the schema post, I went to have a look at where I’d left the new dumper code. I spent a few hours writing rock-solid(-ish) version and language detection, which doesn’t have much to do with the schema but is really important to have.

I just about filled a page in my notebook with all this, which I haven’t done in a while. Feels pretty good! I’m also a quarter through the month already, so I’d better get moving on those three big things.

Weekly roundup: doing better

Post Syndicated from Eevee original https://eev.ee/dev/2016/07/17/weekly-roundup-doing-better/

July is themeless.

I’m doing better!

  • art: Daily Pokémon continue, perhaps a bit too sporadically to be called “daily” but whatever. Also a sunset painting that came out really cool, damn. And this painting of a new Sun/Moon Pokémon. And a lot of other doodling.

    I’ve been trying out a bunch of Krita brushes, and I’m not quite happy with any of them, but I’m getting enough of a feel for what I like to start making my own.

  • twitter: I finally automated @leafeon_brands, my blocklist of advertisers. It now automatically blocks ads shown to my primary account.

  • blog: I wrote some stuff about color, which somehow took way longer than I’d expected — I was hoping for a day or two, and it feels like it took most of the week. That wraps up my June posts, so, er, I really gotta get moving on July.

  • book: I had a book idea that seems to have a lot more staying power than the last one or two, and I did a bunch of research and planning for it. I’ll talk about it later, when I have something to show.

  • flora: I was dragged into fixing shipping for the Floraverse store, which thankfully mostly worked itself out before it became too much of a nightmare.

I’m working on two posts at the moment, so I should be able to catch up soon. As soon as I can, I want to find some blocks of time to experiment with art, work on Runed Awakening and this book idea, and spruce up veekun.

Weekly roundup: video games

Post Syndicated from Eevee original https://eev.ee/dev/2016/06/26/weekly-roundup-video-games/

June’s theme is clearing my plate.

  • SLADE: I fixed yet another obscure geometry editing bug. I feel a little more cleansed every time I do. Also I found out that GZDoomBuilder based its own geometry code on SLADE’s and almost immediately borrowed my SLADE fix.

  • art: Still doing daily Pokémon. The half hour time limit is surprisingly harsh, but I think I’m making some progress, gradually. Also finished an old art trade.

  • runed awakening: I built out most of a whole puzzle sequence that had languished unfinished for a while, and drew a WIP or two of some of the rooms and objects involved. It doesn’t sound like a lot, and I wish I’d done more, but I made some good progress.

  • zdoom: On a total whim, I did an extremely simple proof of concept of Lua in ZDoom. There’s no approval or planned goals or anything for this; I just felt like trying it out. May or may not continue it. Ideally it would be able to replace ACS and at least massively enhance DECORATE.

  • blog: I wrote about video games again.

I think I ran out of small things on my plate, and now I’m finding all the large things a little daunting. And here I’ve invented another one. Argh. Still, keep moving forward.

Weekly roundup: sleepover

Post Syndicated from Eevee original https://eev.ee/dev/2016/06/19/weekly-roundup-sleepover/

June’s theme is clearing my plate, a concept that becomes increasingly nebulous as time goes by.

I accidentally went nocturnal over the past week, which always leaves me completely fried for a few days due to losing a day. So not the best week, but not the worst either.

  • art: I drew a very quick happy Minccino to try to cheer everyone up last weekend. Their tail fluffs are upside-down. Sorry.

    I drew and colored two old friends on a whim, trying to apply some things Mel had told me about color harmony. I think it came out as possibly one of the nicest things I’ve ever drawn, so, that’s nice, whoa.

    I started drawing daily Pokémon (in a predetermined random order), where the only rule is a time limit of 30 minutes. Here are Wobbuffet and western Shellos; I’ll be dumping them all in a Tumblr tag too.

    While I was out at lunch, I drew on paper for the first time in a while. I should probably do it more, but the results aren’t too bad.

  • Runed Awakening: Aha! I pixelled an NPC or two, possibly marking the first real character design I’ve ever done, as well as an item and an attempt at a room illustration.

    A couple friends played through the current state of the game, which led to a couple days of chasing down extremely obtuse minor bugs. It’s a little frustrating to have spent a lot of time and have so little to show for it, but one of the bugs was something that’s plauged me for over a year, so I guess it at least fits with the theme of getting rid of looming things. From here I should be able to get back to building things.

  • spline: I finally granted Mel the ability to create a new folder by themselves. So far I’ve always done it manually, which has gotten increasingly painful since the folders use the nested set model. There’s still no UI for rearranging them, but this removes a huge source of… requests for manual intervention.

  • veekun: I started reabsorbing the current state of the new YAML schema and thinking about how to get it where I want. Didn’t make any actual progress, though.

    Working on getting the remaining images veekun is missing, too.

Probably more of the same this next week. I want to make huge inroads on Runed Awakening, fix the other category of things I have to do manually for spline, and get some work done on veekun one way or another.

Weekly roundup: doodling

Post Syndicated from Eevee original https://eev.ee/dev/2016/06/13/weekly-roundup-doodling/

June’s theme is clearing my plate! I will finally stop spreading these vegetables around to make it look like I ate some of them, and just sneak them to the dog under the table.

  • art: I drew a beautiful manga, which is based on true events. I drew a new header image for here, replacing the old poor cutout of a JPEG exported from Pokémon Art Academy, and adjusted the colorscheme of the whole site to match it. And I did a lot of doodling. A loooot of doodling.

  • doom: I did a lot of work on my factory map for DUMP 3, but I don’t think I’m going to make the deadline. I’m okay with that. I did a mad scramble for DUMP 2 in April, then a longer mad scramble for Under Construction in May; I’m alright with not doing a mad scramble for a third month in a row. I can still make maps outside of a particular challenge.

  • twitter: I made @perlin_noise, a Twitter bot that tweets Perlin noise in various forms.

  • pyscss: I’d had a ton of GitHub mail marked unread for ages, so I finally spent a day fixing a lot of easy bugs and released 1.3.5. I don’t plan to spend significant time on this in the future — especially when there’s now a libsass in C and Python bindings to it — but it’s nice to see some obvious problems fixed.

  • blog: It’s been a year since I quit now!

It doesn’t sound like a lot, but honestly most of the time went into the Doom map and artwork, both of which are things I wanted to do this month. I’m not sure how I’ll schedule the mapping if I’m giving up on DUMP 3; maybe I’ll hop on Runed Awakening for a bit and look at the map again later with fresh eyes.

One year later

Post Syndicated from Eevee original https://eev.ee/blog/2016/06/12/one-year-later/

A year ago today was my last day working a tech job.

What I didn’t do

I think I spent the first few months in a bit of a daze. I have a bad habit of expecting worst case scenarios, so I was in a constant state of mild panic over whether I could really earn enough to support myself. Not particularly conducive to doing things.

There was also a very striking change in… people scenery? Working for a tech company, even remotely, meant that I spent much of my time talking to a large group of tech-minded people who knew the context behind things I was working on. Even if they weren’t the things I wanted to be working on, I could at least complain about an obscure problem and expect to find someone who understood it.

Suddenly, that was gone. I know some tech people, of course, and have some tech followers on Twitter, but those groups are much more heterogenous than a few dozen people all working on the same website. It was a little jarring.

And yet, looking back, I suspect that feeling had been fading for some time. I’d been working on increasingly obscure projects for Yelp, which limited how much I could really talk to anyone about them. Towards the end I was put on a particularly thorny problem just because I was the only person who knew anything about it at all. I spent a few weeks hammering away at this thing that zero other people understood, that I barely understood myself, that I didn’t much enjoy doing, and that would ultimately just speed deployments up by a few minutes.

Hm.

When I left, I had a lot of ideas for the kinds of things I wanted to do with all this newfound free time. Most of them were “pure” programming ideas: design and implement a programming language, build a new kind of parser, build a replacement for IRC, or at least build a little IRC bot framework.

I ended up doing… none of those! With more time to do things, rather than daydream restlessly about doing things, I discovered that building libraries and infrastructure is incredibly tedious and unrewarding. (For me, I mean. If that’s your jam, well, I’m glad it’s someone’s.)

I drifted for a little while as I came to terms with this, trying to force myself to work on these grandiose dreams. Ultimately, I realized that I most enjoy programming when it’s a means to an end, when there’s a goal beyond “write some code to do this”. Hence my recent tilt towards game development, where the code is just one part of a larger whole.

And, crucially, that larger whole is something that everyone can potentially enjoy. The difference has been night and day. I can tweet a screenshot of a text adventure and catch several people’s interest. On the other hand, a Python library for resizing images? Who cares? It’s not a complete thing; it’s a building block, a tool. At worst, no one ever uses it, and I have nothing to show for the time. Even at best, well… let’s just say the way programmers react to technical work is very different from the way everyone else reacts to creative work.

I do still like building libraries on occasion, but my sights are much smaller now. I may pick up sanpera or dywypi again, for instance, but I think that’s largely because other people are already using them to do things. I don’t have much interest in devoting months to designing and building a programming language that only a handful of PLT nerds will even look at, when I could instead spend a day and a half making a Twitter bot that posts random noise and immediately have multiple people tell me it’s relaxing or interesting.

In short, I’ve learned a lot about what’s important to me!

Ah, yes, I also thought I would’ve written a book by now. I, uh, haven’t. Writing a book apparently takes a lot more long-term focus than I tend to have available. It also requires enough confidence in a single idea to write tens of thousands of words about it, and that doesn’t come easily either. I’ve taken a lot of notes, written a couple short drafts, and picked up a bit of TeX, so it’s still on the table, but I don’t expect any particular timeframe.

What I did do

Argh, this is going to overlap with my birthday posts. But:

I wrote a whopping 43 blog posts, totalling just over 160,000 words. That’s two or three novels! Along the way, my Patreon has more than tripled to a level that’s, well, more reassuring. Thank you so much, everyone who’s contributed — I can’t imagine a better compliment than discovering that people are willing to directly pay me to keep writing and making whatever little strange things I want.

I drew a hell of a lot. My progress has been documented elsewhere, but suffice to say, I’ve come a long way. I also expanded into a few new media over this past year: watercolors, pixel art, and even a teeny bit of animation.

I made some games. The release of Mario Maker was a really nice start — I could play around with level design ideas inside a world with established gameplay and let other people play them fairly easily. Less seriously, I made Don’t Eat the Cactus, which was microscopic but ended up entertaining a surprising number of people — that’s made me rethink my notions of what a game even needs to be. I made a Doom level, and released it, for the first time. Most recently, of course, Mel and I made Under Construction, a fully-fledged little pixel game. I’ve really enjoyed this so far, and I have several more small things going at the moment.

The elephant in the room is perhaps Runed Awakening, the text adventure I started almost two years ago. It was supposed to be a small first game, but it’s spiraled a little bit out of hand. Perhaps I underestimated text adventures. A year ago, I wasn’t really sure where the game was going, and the ending was vague and unsatisfying; now there’s a clear ending, a rough flow through the game, and most importantly enough ideas to see it through from here. I’ve rearchitected the entire world, added a few major NPCs, added core mechanics, added scoring, added a little reward for replaying, added several major areas, implemented some significant puzzles, and even made an effort to illustrate it. There’s still quite a lot of work left, but I enjoy working on it and I’m excited about the prospect of releasing it.

I did more work on SLADE while messing around with Doom modding, most notably adding support for ZDoom’s myriad kinds of slopes. I tracked down and fixed a lot of bugs with editing geometry, which is a really interesting exercise and a challenging problem, and I’ve fixed dozens of little papercuts. I’ve got a few major things in progress still: support for 3D floors is maybe 70% done, support for lock types is about 70% done. Oh, yes, and I started on a static analyzer for scripts, which is a fantastic intersection of “pure programming” and “something practical that people could make use of”. That’s maybe 10% done and will take a hell of a lot of work, but boy would it be great to see.

I improved spline (the software powering Floraverse) more than I’d realized: arbitrarily-nested folders, multiple media per “page”, and the revamped archives were all done this past year. I used the same library to make Mel a simple site, too. It’s still not something I would advise other people run, but I did put a modicum of effort into documenting it and cleaning up some general weirdness, and I made my own life easier by migrating everything to runit.

veekun has languished for a while, but fear not, I’m still working on it. I wrote brand new code to dump (most of) RBY from scratch, using a YAML schema instead of a relational database, which has grown increasingly awkward to fit all of Pokémon’s special cases into. I still hope to revamp the site based on this idea in time for Sun and Moon. I also spent a little time modernizing the pokedex library itself, most notably making it work with Python 3.

I wrote some other code, too. Camel was an idea I’d had for a while, and I just sat down and wrote it over the course of a couple days, and I’m glad I did. I rewrote PARTYMODE. I did another round of heteroglot. I fixed some bugs in ZDoom. I sped Quixe (a JavaScript interpreter for some text adventures) up by 10% across the board. I wrote some weird Twitter bots. I wrote a lot of one-off stuff for various practical purposes, some of it abandoned, some of it used once and thrown away.

Is that a lot? It doesn’t even feel like a lot. I want to do just as much again by the end of the year. I guess we’ll see how that goes.

Some things people said

Not long after my original post made the rounds, I was contacted by a Vox editor who asked if I’d like to expand my post into an article. A paid article! I thought that sounded fantastic, and could even open the door to more paid writing. I spent most of a week on it.

It went up with the title “I’m 28, I just quit my tech job, and I never want another job again” and a hero image of fists slamming a keyboard. I hadn’t been asked or told about either, and only found out by seeing the live page. I’d even given my own title; no idea what happened to that, or to the byline I wrote.

I can’t imagine a more effective way to make me sound like a complete asshole. I barely remember how the article itself was phrased; I could swear I tried to adapt to a broader and less personal audience, but I guess I didn’t do a very good job, and I’m too embarrassed to go look at it now.

I found out very quickly, via some heated Twitter responses, that it looks even worse without the context of “I wrote this in my blog and Vox approached me to publish it”. It hadn’t even occurred to me that people would assume writing an article for a news website had been my idea, but of course they would. Whoops. In the ensuing year, I’ve encountered one or two friends of friends who proactively blocked me just over that article. Hell, I’d block me too.

I don’t think I want to do any more writing where I don’t have final editorial control.

I bring this up because there have been some wildly differing reactions to what I wrote, and Vox had the most drastic divide. A lot of people were snarky or angry. But just as many people contacted me, often privately, to say they feel the same way and are hoping to quit their jobs in the future and wish me luck.

It’s the money, right? You’re not supposed to talk about money, but I’m an idiot and keep doing it anyway.

I don’t want anyone to feel bad. I tried, actively, not to say anything wildly insensitive, in both the original post and the Vox article. I know a lot of people hate their jobs, and I know most people can’t afford to quit. I wish everyone could. I’d love to see a world where everyone could do or learn or explore or make all the things they wanted. Unfortunately, my wishes have no bearing on how the system works.

I suspect… people have expectations. The American Dream™ is to get a bunch of money, at which point you win and can be happy forever.

I had a cushy well-paying job, and I wasn’t happy. That’s not how it’s supposed to work. Yet if anything, the money made me more unhappy, by keeping me around longer.

People like to quip that money can’t buy happiness. I think that’s missing the point. Money can remove sadness, but only if that sadness is related to not having enough money. My problem was not having enough time.

I was tremendously lucky to have stock options and to be able to pay off the house, but those things cancelled each other out. The money was finite, and I spent it all at once. Now it’s gone, and I still have bills, albeit fewer of them. I still need to earn income, or I’ll run out of money for buying food and internets.

I make considerably less now. I’m also much, much happier.


I don’t know why I feel the need to delve so deeply into this. The original post happened to hit lobste.rs a few days ago, and there were a couple “what a rich asshole” comments, which reminded me of all this. They were subtly weird to read, as though they were about an article from a slightly different parallel universe. I was reminded that many of the similar comments from a year ago had a similar feel to them.

If you think I’m an asshole because I’ve acted like an asshole, well, that’s okay. I try not to, and I’ll try to be better next time, but sometimes I fuck up.

If you think I’m an asshole because I pitched a whiny article to Vox about how one of the diamond lightbulbs in my Scrooge McDuck vault went out, damn. It bugs me a little to be judged as a carciature with little relation to what I’ve actually done.

To the people who ask me for advice

Here’s a more good comment:

The first week was relaxing, productive, glorious. Then I passed the midpoint and saw the end of my freedom looming on the horizon. Gloom descended once more.

I thought I was the only one, who felt like this. I see myself in everything [they] describe. I just don’t have the guts to try and sell my very own software as a full time thing.

I like to liberally license everything I do, and I fucking hate advertising and will never put it on anything I control

It’s almost as if that [person] is me, with a different name, and cuter website graphics.

First of all, thank you! I have further increased the cuteness of my website graphics since this comment. I hope you enjoy.

I’ve heard a lot of this over the past year. A lot. There are a shocking number of people in tech who hate being in tech, even though we all get paid in chests full of gold doubloons.

A decent number of them also asked for my input. What should they do? Should they also quit? Should they switch careers?

I would like to answer everyone, once and for all, by stressing that I have no idea what I’m doing. I don’t know anything. I’m not a renowned expert in job-quitting or anything.

I left because, ultimately, I had to. I was utterly, utterly exhausted. I’d been agonizing over it for almost a year prior, but had stayed because I didn’t think I could pull it off. I was terrified of failure. Even after deciding to quit, I’d wanted to stay another six months and finish out the year. I left when I did because I was deteriorating.

I hoped I could make it work, Mel told me I could make it work, and I had some four layers of backup plans. I still might’ve failed, and every backup plan might’ve failed. I didn’t. But I could’ve.

I can’t tell you whether it’s a good decision to quit your job to backpack through Europe or write that screenplay you’ve always wanted to write. I could barely tell myself whether this was a good idea. I’m not sure I’d admit to it even now. I can’t decide your future for you.

On the other hand…

On the other hand, if you’re just looking for someone to tell you what you want to hear, what you’ve already decided…

Well, let’s just say you’d know better than I would.

Weekly roundup: spring cleaning

Post Syndicated from Eevee original https://eev.ee/dev/2016/06/06/weekly-roundup-spring-cleaning/

June’s theme is, ah, clearing my plate! Yes, we’ll try that again; I have a lot of minor (and not-so-minor) todos that have been hanging over my head for a long time, and I’d like to clear some of them out. I also want to do DUMP 3 and make a significant dent in Runed Awakening, so, busy busy.

  • blog: I published a very fancy explanation of Perlin noise, using a lot of diagrams and interactive things I’d spent half the previous week making, but it came out pretty cool! I also wrote about how I extracted our game’s soundtrack from the PICO-8. And I edited and published a two-year-old post about how I switched Yelp from tabs to spaces! I am on a roll and maybe won’t have to write three posts in the same week at the end of the month this time.

    I did a bit of work on the site itself, too. I linked my Mario Maker levels on the projects page. I fixed a PARTYMODE incompatibility with Edge, because I want my DHTML confetti to annoy as many people as possible. I fixed a silly slowdown with my build process. And at long last, I fixed the &nbsp; cruft in the titles of all my Disqus threads.

  • gamedev: I wrote a hecka bunch of notes for Mel for a… thing… that… we may or may not end up doing… but that would be pretty cool if we did.

  • patreon: I finally got my Pokémon Showdown adapter working well enough to write a very bad proof of concept battle bot for Sketch, which you can peruse if you really want to. I had some fun asking people to fight the bot, which just chooses moves at complete random and doesn’t understand anything about the actual game. It hasn’t won a single time. Except against me, when I was first writing it, and also choosing moves at complete random.

    I rewrote my Patreon bio, too; now it’s a bit more concrete and (ahem) better typeset.

  • doom: I started on three separate ideas for DUMP 3 maps, though I’m now leaning heavily in favor of just one of them. (I’d like to continue the other two some other time, though.) I did a few hours of work each day on it, and while I’m still in the creative quagmire of “what the heck do I do with all this space”, it’s coming along. I streamed some of the mapping, which I’ve never done before, and which the three people still awake at 3am seemed to enjoy.

  • SLADE: I can’t do any Doom mapping without itching to add things to SLADE. I laid some groundwork for supporting multiple tags per sector, but that got kinda boring, so I rebased my old 3D floors branch and spruced that up a lot. Fixed a heckton of bugs in it and added support for some more features. Still a ways off, but it’s definitely getting there.

  • art: I drew a June avatar! “Drew” might be a strong word, since I clearly modified it from my April/May avatar, but this time I put a lot of effort (and a lot of bugging Mel for advice) into redoing the colors from scratch, and I think it looks considerably better.

  • spring cleaning: Sorted through some photos (i.e. tagged which cats were in them), closed a few hundred browser tabs, and the like.

Wow, that’s a lot of things! I’m pretty happy about that; here’s to more things!

Weekly roundup: spring cleaning

Post Syndicated from Eevee original https://eev.ee/dev/2016/06/06/spring-cleaning/

June’s theme is, ah, clearing my plate! Yes, we’ll try that again; I have a lot of minor (and not-so-minor) todos that have been hanging over my head for a long time, and I’d like to clear some of them out. I also want to do DUMP 3 and make a significant dent in Runed Awakening, so, busy busy.

  • blog: I published a very fancy explanation of Perlin noise, using a lot of diagrams and interactive things I’d spent half the previous week making, but it came out pretty cool! I also wrote about how I extracted our game’s soundtrack from the PICO-8. And I edited and published a two-year-old post about how I switched Yelp from tabs to spaces! I am on a roll and maybe won’t have to write three posts in the same week at the end of the month this time.

    I did a bit of work on the site itself, too. I linked my Mario Maker levels on the projects page. I fixed a PARTYMODE incompatibility with Edge, because I want my DHTML confetti to annoy as many people as possible. I fixed a silly slowdown with my build process. And at long last, I fixed the &nbsp; cruft in the titles of all my Disqus threads.

  • gamedev: I wrote a hecka bunch of notes for Mel for a… thing… that… we may or may not end up doing… but that would be pretty cool if we did.

  • patreon: I finally got my Pokémon Showdown adapter working well enough to write a very bad proof of concept battle bot for Sketch, which you can peruse if you really want to. I had some fun asking people to fight the bot, which just chooses moves at complete random and doesn’t understand anything about the actual game. It hasn’t won a single time. Except against me, when I was first writing it, and also choosing moves at complete random.

    I rewrote my Patreon bio, too; now it’s a bit more concrete and (ahem) better typeset.

  • doom: I started on three separate ideas for DUMP 3 maps, though I’m now leaning heavily in favor of just one of them. (I’d like to continue the other two some other time, though.) I did a few hours of work each day on it, and while I’m still in the creative quagmire of “what the heck do I do with all this space”, it’s coming along. I streamed some of the mapping, which I’ve never done before, and which the three people still awake at 3am seemed to enjoy.

  • SLADE: I can’t do any Doom mapping without itching to add things to SLADE. I laid some groundwork for supporting multiple tags per sector, but that got kinda boring, so I rebased my old 3D floors branch and spruced that up a lot. Fixed a heckton of bugs in it and added support for some more features. Still a ways off, but it’s definitely getting there.

  • art: I drew a June avatar! “Drew” might be a strong word, since I clearly modified it from my April/May avatar, but this time I put a lot of effort (and a lot of bugging Mel for advice) into redoing the colors from scratch, and I think it looks considerably better.

  • spring cleaning: Sorted through some photos (i.e. tagged which cats were in them), closed a few hundred browser tabs, and the like.

Wow, that’s a lot of things! I’m pretty happy about that; here’s to more things!