Back on Twitter

About a year ago, I quit Twitter. Cold turkey. I was pretty addicted to it, but didn't realize for a long time. When I went to an island with no reception or wifi for a week, it finally dawned on me. It probably helped that I did a lot of meditation on said island, and so there was lots of introspection happening.

Once I had quit though, I barely missed it. I think everyone realizes at some point that Twitter is basically a giant anxiety machine, and so taking a break from it was a relief. Twitter has a way of encouraging extremist rhetoric, even for opinions that are totally reasonable or even banal. I don't really use Facebook but I've heard people say the same thing happens there too. It wears you down.

Boredom is really profoundly uncomfortable. But when I resist the urge to quell the boredom by going on social media or watching TV, I almost always manage to come up with something more interesting to do. I suspect that being occasionally bored is actually quite necessary.

So anyway, I'm back on Twitter these days, a little bit. I've turned off retweets for basically everyone and done some pruning to my follow list, which I hope makes it more manageable for me. I don't think there's any big lesson here, not even that social media is Bad; it just is what it is.

Rambling Thoughts About Artifact Adventure

1. I like that Artifact Adventure refuses to copy classes from other RPGs. You get that exciting moment of wonder: "What can they do? How are they different from each other? What's new about them?" I'm less excited that they map cleanly to the Final Fantasy classes: Warrior = Fighter, Hermit = Thief, Shaman = Black Mage, Explorer = Red Mage, Monk = Black Belt. Though that may be necessity of the form; how many ways can you configure the two qualities Good At Attack and Good At Magic? At least the Dreamer is new.

2. There's no equivalent to the White Mage. In fact, for as long as I've played there doesn't appear to be any healing magic at all. This is interesting. In many RPGs where the battle economy is balanced around how long you can survive on a fixed pool of MP (as opposed to RPGs where the economy is a meaningless sludge) a single delve into the dungeon can last for a long time. MP converts to HP at a very favorable exchange rate. But here, instead, every little papercut hurts because it shortens the distance you can delve directly. It makes more explicit the usually-latent risk/reward of pushing on vs returning to rest. And it means enemies are dangerous even when they don't do much damage because you fear that they do damage at all.

Continue reading...

I Made a Game for 7DRL: Dungeon Scoundrel

Back in March I did the Seven Day Roguelike game jam and ended up with a completed game: Dungeon Scoundrel. That's amazing to me; I entered with the intention of just making a little tech demo for the bigger roguelike I'm planning, Dog Rogue. Here are some thoughts about the design of Dungeon Scoundrel.

The Level Generator

The level generator in Dungeon Scoundrel is very simple but it does a reasonable job of making interesting spaces. When it makes a level it does the following:

  1. Do a drunkard's walk with a 60% chance of moving forward — unless doing so would move off the edge of the level, in which case it always turns. Anywhere the “drunkard” walks is open space.
  2. After the drunkard's walk is finished there's usually one or two hallways that abruptly end, where the walk terminated or turned 180 degrees. We can easily find these by looking for open tiles with exactly one adjacent open tile. To make this look more natural, it places a door there and grows a room with no other connections.
  3. Fix any tiles with a diagonal exit by filling them in. Since the game has 4-directional movement, such an exit might be confusing. This doesn't work perfectly — every so often I see a problem this should have fixed — but I haven't gone back and investigated it.
  4. Randomly draw from the open spaces to get the player's starting location, the stairs, monster spawn locations, and treasure chests. Originally I wanted to ensure every area in the level had at least 1 treasure and monster in it but I didn't have enough time to do that, so it's just random.
  5. If the either set of stairs isn't reachable from the player's starting location we reject the level and start over. This can happen when step 3 places a wall that cuts the level into two parts.

Unknown Items

A lot of roguelikes deliberately obscure what each item does. For example, an “effervescent potion” could do one of many things, and you won't know what it is until you try it. Maybe it heals you, maybe it makes you turn invisible, or maybe it explodes. And which potion is which changes from game to game, so you can't look up what effervescent potions do in advance.

In principle this sounds like an exciting mystery, but in practice it's often tedious. Every time you start a new game you have to go through the hassle of trying a bunch of stuff in a safe area just to gain a little information. Otherwise you’re essentially gambling that the potion will be the one you want when you drink it.

In Dungeon Scoundrel I still wanted to let the player have a little of this fun. My solution was to keep everything the same from game to game. So an effervescent potion's effect never changes. A beginning player can try to solve the exciting mystery, and an expert player can just cut to the chase.

Continue reading...

How I Found a Bug in Twitter by Debugging Chromium

Sometimes I browse Twitter at work, okay? Code needs time to compile.


Occasionally I noticed I was randomly getting taken back a page if I clicked out of viewing an individual tweet. This was really irritating because I like to read all the tweets posted overnight, so the bug would force me to scroll through many hours of tweets to find my place again.

There's only so many times you can think "I must have right-clicked and pressed 'back' on the context menu" before you decide to investigate. After a bit of poking I figured out how to reproduce it: if you click on a tweet to bring up the details lightbox (where the background is grayed-out) and double-click outside to try to return to the timeline then boom, the bug will trigger.

It seemed like a problem with Twitter. But it was also kind of bizarre; how does clicking on a UI element take me back a page? Could it be a bug in Chrome? Plus the bug didn't reproduce in Edge or Firefox, which furthered my suspicion. It shouldn't be hard to confirm one way or the other, I thought. I have a debug build of Chromium right here! I'll just slap some breakpoints around and see what happens.

Continue reading...

Why I Play Dungeon Crawl Stone Soup Every Day Even Though I Hate It

Dungeon Crawl sucks and I hate it.

Pop quiz, what's better a +4 Mace of Crushing or a +2 Flail of Electrocution? I certainly don't know. I can fall back on received wisdom: generally flails are better because they do more damage by sacrificing some accuracy. Flails and electrocution are rarer than maces or crushing, respectively, so on that metric the developers agree with me that you should pick the flail.

But if you want cold hard math to prove the choice... Let's see, the wiki says Electrocution has a 33% chance of doing 7+1d13 damage, which is an EV of ~5 damage, plus the flail's base damage of 10 gives ~15. A mace has a base damage of 8 and crushing gives it an average of 16.6% extra damage, which is ~9. But just comparing those numbers doesn't take into account the mace's increased accuracy or greater enchantment bonus, both of which are rabbit holes in and of themselves.

Continue reading...