-
My Computer Tells Me to Go to Bed
Every night at 12:15 AM my computer tells me to go to bed.
No, really. A voice says “time to sleep.” Then this window pops up:
yeah, it's a little verbose
If I hit “ok” the window pops up again a minute later. Sometimes I move the popup out of view and ignore it for a few minutes. Sometimes I snooze it and keep coding (or writing - it’s 12:28 AM right now). But most of the time I go to bed.
-
stranger video: staring contests with strangers
Update: the day after I posted this stranger video went viral in japan. It was a ton of fun. The viralness has died off for now; I’m working on a separate post about the experience of using stranger video at peak popularity.
I have a new project. It’s called ‘stranger video.’ It’s about staring at strangers.
(this is my friend, not a stranger)
stranger video has some rules:
- you are paired with a stranger for a video call.
- video is tightly cropped to just your face and cuts out if there’s no face in frame.
- no audio, no text chat, just silent video.
- video cuts out as soon as one of you blinks.
You can play it at stranger.video
It’s the most uncomfortable thing I’ve built. I hope you love it.
-
Flappy Dird: Flappy Bird implemented in MacOS Finder
I made a game. It’s called Flappy Dird. It’s Flappy Bird inside MacOS Finder.
ad placements start at $2,000
It has instructions, high score tracking, and marquee banner ads. You double-click to start a game and select any file in the window to jump. It runs at 4 frames a second and can’t run much faster. It occasionally drops inputs for reasons that you’ll understand if you finish this blog.
I’m going to lay out how Flappy Dird works and how it got there. Head to the github repo if you want to check out the code or play the game yourself.
-
Making a real-time game in Google Sheets
I made a game. It’s in a Google Sheet:
really, really, I'm fine
There’s some stuff going on here! But in addition to aesthetics this game is “real time” - the spreadsheet tracks the time when you complete tasks and compares those times to where the animated blue progress bar is. Your final evaluation (in the lower right) tells you whether you completed your tasks early, on time, or late. This is all driven purely via Google Sheets formulas - no Apps Script or other trickery needed.
Let’s talk about how this works!
-
Measuring something changes it - and sometimes that's enough
Every night I write down six seconds of my day that I want to remember.
Some nights I struggle to come up with something worth writing down. That’s ok! Sometimes I’ll struggle for many days in a row. That’s less ok.
But when I have multi-day stretches where I have nothing to write down I notice. And noticing causes me to start changing my behavior. Journaling this way helps me seek out memories worth remembering.
Measuring and optimizing the right metric can be powerful. Measuring and optimizing the wrong metric can be disastrous. But sometimes the act of measurement itself is sufficient to change behavior for the better.
-
Hexagone: a font that converts hex color codes to rgb
So here’s a neat trick:
the font is called hexagone because it gets rid of hex
By changing the font I’m able to automatically convert hex color codes to RGB! What’s going on?
-
Swedish Furniture Conglomerate Survivors
Basics
- Genre: survivors-like
- Links: play it on itch or check out the code on github
- Engine: Godot 3.5
- Time Spent: ~August 8th - 20th
- Other Stuff: I built this game at Recurse Center, a magical place that functions like a writers retreat for programmers. Consider applying!
Gameplay Video
I like the 'pop' that the ghosts make
-
Wub: Say nonsense words fast
Basics
- Genre: Competitive toungue twister
- Links: play it right here or play it on itch
- Engine: A little hand-rolled javascript
- Time Spent: ~4 hours one evening
- Other Stuff: I built this game at Recurse Center, a magical place that functions like a writers retreat for programmers. Consider applying!
In Wub you’re prompted to say some silly phrases while a timer plays. When you finish saying the silly phrases the timer stops. The first phrase you say is “wub wub1.” That’s why it’s called wub.
wub wub wub wub wub
-
Interestingly, the API does a better job of detecting the phrase “wub wub” than detecting a single wub! ↩
-
Infinite Hamlet: Typing Shakespeare via twitch chat
I turned off Infinite Hamlet on September 30th.
Some quick stats: 41 unique chatters submitted 4,400 characters and completed 136 lines of hamlet. Running it was a ton of fun! I’m excited to revisit this kind of game in the future.
Basics
- Genre: twitch-plays-pokemon-like
- Links: play it live on twitch
- Engine: Godot 3.5
- Time Spent: ~2 weeks on and off
- Other Stuff: I built this game at Recurse Center, a magical place that functions like a writers retreat for programmers. Consider applying!
Gameplay Video
To play Infinite Hamlet you attempt to type out all of Hamlet one character at time via twitch chat. That’s the whole game. It’s called “Infinite Hamlet” because of the infinite monkey theorem
Riveting
-
Implementing Wordle in the Firefox address bar
So here’s a neat trick:
If only the font was monospaced
That’s the firefox address bar! And I’m playing a full game of Wordle in it! What’s going on?
-
Game 6: Put the DVD logo in the Corner
This game was linked from New York Times Watching newsletter on Friday September 8, 2023. This was super cool for me! Margaret Lyons I have no idea how to get in touch with you but thanks for mentioning my game!
Basics
- Genre: Uh. Arcade action game / childhood dream achievement simulator (?)
- Links: play it on itch or check out the code on github
- Engine: PICO-8
- Time Spent: 4 days (June 27th - June 30th)
- Other Stuff: I built this game at Recurse Center, a magical place that functions like a writers retreat for programmers. Consider applying!
Gameplay Video
My favorite part was adding manual 'particle effects' by drawing individual pixels to the screen
-
Game 5: ReShape Tower Defense
Basics
- Genre: Tower defense with a vaguely roguelike choose-1-of-3 upgrade system
- Links: play it on itch or check out the code on github
- Engine: Godot 3.5
- Time Spent: Uh. 15ish days? May 8th - May 13th part time, May 29th - June 11th full time1.
- Other Stuff: This game shamelessly rips off the UI of DesktopTD, one of my favorite games of the flash game era. Thanks for the many hours of enjoyment, DesktopTD!
Gameplay Video
I was so excited when I first combined 'many projectiles' and 'exploding projectiles'
-
More context than you want or need: I started making a tower defense, went on a trip and worked on it in my off hours, dropped it to make click click trick for a game jam, and then started back up on a new tower defense on June 7th (using the bones of the original TD). ↩
-
Game 4: click, click, trick
Basics
- Genre: Rhythmic puzzle game
- Links: play it on itch or check out the code on github
- Engine: Godot 3.5
- Time Spent: May 15th - May 21st (1 week)
- Other Stuff: The first few levels of the game are probably too hard. If you almost immediately get stuck check out “the game is too damn hard” below.
Gameplay video
No phones in sight just squares pulsing to beats
-
Game 3: Don't Send Me a Puddle (Ludum Dare 53)
Basics
- Genre: Physics puzzle game
- Links: play it on itch, read the code on github, or check it out on the Ludum website
- Engine: Godot 3.5
- Time Spent: April 28 - May 1 (72 hours)
- Other Stuff: This is my first game jam game1 - neat! It’s the first time I’ve made my own game music - neat! I threw away most of my work from the first day of the jam - less neat!
Gameplay video
If I showed any more you'd get spoiled!
-
Alright I did a two-hour game jam and made a relaxing drive but that doesn’t really count. ↩
-
Game 2: Sisyphus Needs a Nap
Basics
- Genre: Launcher, almost idle. Inspired by “Learn to Fly” and some other games popular in the Flash era.
- Links: play it on itch or check out the code on github
- Engine: Godot 3.5
- Time Spent: April 11-13, April 18-26 (12 days with some traveling in between)
- Other: Sisyphus Needs a Nap got more plays on itch in a single day than platris did over its lifetime! It also made it to the top of itch’s “new and popular web games” page. Neat!
Gameplay Video
alright I cheated and started part of the way through the game but it's more fun that way.
-
Game 1: Platris
Basics:
- Genre: stressful puzzle platformer? You play tetris and a platformer at the same time.
- Links: play it on itch or check out the code on github
- Engine: Godot 3.5
- Time spent: March 30th - April 7th, but I already had a basic tetris implementation
Gameplay Video:
the enemy is named doug
get new posts via twitter, threads, bluesky, mastodon, or rss