Sunday 16th February, 2020

It’s late and I’m listening to the second episode of I Only Listen to the Mountain Goats, which might be my new favourite podcast. I get through a lot of podcasts.

Tried on a couple of leather jackets today, and didn’t particularly like either of them; one too large and one too small (which was horrific). I do really want to get one, though. I used to have a really nice leather coat, which was my father’s, and now I don’t. I can’t remember what happened to it, which really kind of upsets me, if I’m honest. I wish I still had that.

No BotLG progress today, but instead I did some work on my own homepage. I mainly use it to have a published list of links and videos I want to remember and return to; I guess it’s a web log in the oldest, grognardian definition. I updated the stylesheet a little and then wrote a little tool for adding new entries to the JSON file that populates it. And that’s it for today.

Saturday 15th February, 2020

Took the cat to the vet for his yearly checkup and booster shots. He’s doing fine, and still charming around strangers. In fact, to quote the vet, “he’s so handsome he doesn’t even have to try, does he?” He’s a good boy.

When I got in, I spent a little time on BotLG — the “have a break from development at the weekend” rule has now well and truly gone out the window. Discovered that having monsters stop wandering around when the player is nearby is working out pretty well, but it does rather lead to them mobbing you if you stand still for a long time. I think I’m okay with that; it makes exploring areas infested with beasties a bit more perilous, and stopping to harvest materials is now something to actually think about. Plus, actually catching them to initiate combat is much easier, which was the primary goal of this change.

Later I did a little recreational spreadsheeting, and worked out some prices for items. I’m reasonably happy with what I came up with, but I’m sure they’ll end up being tweaked over time. Additionally, and even more experimentally, I made the amount of XP you earn for completing a gathering or crafting action related to the value of the item gained; in theory crafting higher-level and more valuable items will level you up quicker, which feels about right. I just have to get the amount of XP needed to level each time right, and make sure none of the skills feel better than others — I think hedge magic being the only source of quaffable potions is a little overpowered, and a quick look through my new spreadsheet shows mining could be a little too profitable, but we’ll see. I’m genuinely not too bothered about balancing. Old-school D&D never felt particularly balanced and (in my opinion) didn’t suffer for it. Let the players find their own routes.

The 2020 7-day roguelike challenge starts in a couple of weeks. Unfortunately, it starts right as I am resuming full-time employment, worse luck. I was considering giving it a go, with a focus on some aspect that BotLG lacks, so that I could port over anything interesting that I came up with, but I’m not sure I’ll have the time or energy for it now. We shall see.

Friday 14th February, 2020

I’m back on my Vaporwave vs Outrun bullshit again (I’ve discussed ~aesthetics~ on this blog once before), thanks to Pinkas:

I don’t know why but the YouTube algorithm brought this vaporwave classic video back onto my home page, so of course I ended up watching it again. While I was watching, I made some notes on how it applied to BotLG. I set off on this project with the vague intention that it should look like a vaporwave product. I haven’t 100% succeeded, but I’m still still pretty happy with the way it looks.

While both vaporwave and outrun use a lot of neon colours, outrun tends to be darker, and vaporwave often lighter, with more pastels alongside the neon. In this regard, BotLG is definitely more outrun; this is the color palette I’m sticking with throughout:

Outrun is the idealisation of the future from the past. Vaporwave is the idealisation of the past from the future.


For everything else though, I’m pretty on track: fonts inspired by old technology plus classic serifed ones, and a chunky pixel art theme that harks back to the home computer movement of the late eighties and early nineties.

Thursday 13 February, 2020

Had my regularly scheduled fortnightly evening with Simon, my friend and official BotLG playtester, explorer and rubber duck. Like me, Simon is a professional web developer and video game enthusiast, so it’s always good to get his opinion and have a second set of eyes look things over.

As usual, he left me with a pile of bugs to fix and visuals to tweak, which will keep me busy tomorrow. We also discussed combat balance, item design and the way the game is steadily becoming less idle and more roguelike over time, and that perhaps it’s time to just finally embrace that. I’m going to set the global action duration really small (perhaps 2 seconds) and see how that feels.

After a couple of hours dissecting the game, we ordered Chinese and watched a could of episodes of Inside No. 9, then agreed to meet up again next week, ahead of it usual every-other-week schedule. By then, I’ll be just about to head into my last week of development before returning to the world of full-time employment, so hopefully everything will be finished (mechanics-wise) and I’ll be focusing on adding content.

Simon has really been invaluable to this project; he’s played every major iteration, has found javascript bugs, recommended changes and pointed out issues and exploits; so I’m super-happy to have him listed on the colophon/credits page. Cheers, dude!

In other news, I felt like I wasn’t making too much progress this afternoon, so around 4pm I closed PHPStorm and booted up Monster Hunter World: Iceborne. Look, it counts as research, right? Since starting on the Iceborne campaign I’ve switched from my usual longsword and started to use the hunting horn; I’m now up to a hunt for Glavenus, and I feel like it’s starting to click. Obviously it’s great in groups when I can doot away playing songs and providing buffs as I hit the monster about the head, but it’s also really fun solo. I had thought it might be a bit lacking solo, to make up for it’s obvious group benefits, but it turns out the hunting horn is just all-around great.

I’ve got to add to musical instruments to BotLG. Murder-bard should definitely be an option…

Wednesday 12th February, 2020

Had a bit of a tough day today. I woke up late, felt rough, and for the first time in a while wondered if all the effort I’ve put into BotLG was worth it.

A merchant in his shop

I played around with the display of items, so now they have their icon next to their name wherever they appear, which looks good, and then made a shop interior location to house my newly coded merchants. I can configure the merchant NPC, plus the goods displayed alongside him, and the crafting station, so I can reuse the same basic map for multiple shops. I like it; it’s reminiscent of the shops in the early Final Fantasy games, and if it’s good enough for FF, it’s good enough for me.

From my checklist of mechanics to implement, there’s only account-wide storage and character retirement left to do, and then it’s all adding new content: locations, monsters, items, crafting recipes. I’m looking forward to that part. I want to completely reinvent the starting area, so players can get into a procedurally generated dungeon much quicker, and I can push the roguelike aspects heavier.

I hope it is worth it. I’m still quite proud of what I’ve made, and I think it looks pretty good for a browser-based game. I’ve spent a lot of time on it, but today at least, I can’t shake the feeling that the time might have been better spent.

Tuesday 11th February, 2020

I said yesterday that I was going to be busy today, and unlikely to get any game development done; that turned out not be entirely true.

I was busy. I spent most of the day with my stepfather helping out with some DIY — planing and rehanging doors, putting up shelves, drinking coffee — that kind of thing. It was nice to get to hang out with him for the day, just the two of us. Normally I only ever see him along with my mum, and often I only see them together with my sister, so it was good to share some time that was just us — even if we did spend it humping doors about. Doors are surprisingly heavy.

We were done by about 5:30pm, which left all of the evening free.

The Rat King as his retinue

First, I made a sprite for the Rat King, the end boss of the first dungeon. I’m no pixel artist, which is why I’m using Quale’s Scroll o’ Sprites, but I was able to make up something by merging together a couple of existing sprites from the sheet. I’m pretty pleased with it.

After that, I started work on turning NPCs into merchants who can buy and sell items. I honestly expected this to be more complicated and time-consuming than it turned out to be, but it’s finished now after only an evening’s work. I guess I had a solid foundation of item-management methods, and the years of experience writing e-commerce software didn’t hurt either. I’ll save the details for a proper dev post at the end of the week.

I’m going to bed happy and tired.

Monday 10th January, 2020

I’ve had a very productive day of coding today, most of which is covered in a post I published earlier and the changelog, so I’m not going to repeat myself here. Suffice it to say, dungeon generation is looking good, and I’m happy to have a few more recipes and skills implemented.

Instead I’m going to talk about some podcasts. I started the day by listening to the latest episode of Rule of Three, featuring Robert Webb on The Young Ones, which was excellent, as Rule of Three always is. I’m a bit of a comedy nerd; I enjoy seeing the nuts and bolts of why something funny works, and Rule of Three manages somehow to dissect the frog without killing it.

There’s also a new podcast I’m looking forward to diving into, Lore of Yore, which covers tales from old school gaming. It’s produced by Danny “Austerity” Nissenfeld, who is one half of the fascinating Titans of Text podcast, so I have high hopes. I’ll probably listen to that tomorrow.

Sunday 9th February, 2020

Made a start on the Monster Hunter World expansion, Iceborne, this afternoon. Not only do I enjoy the puzzle of figuring out each new monster (I just beat Beotodus and Banbaro, and tracked down a Viper Tobi-Kadachi), but the central farming – crafting – upgrading cycle is a source of inspiration.

I also played a little of Slashie’s Ananias roguelike on mobile. The more time goes on, the more convinced I become that BotLG can be even more a roguelike, and that I should lean more into those features and away from the idle ones. I’m seriously considering making most, if not all, gathering nodes have a limited supply of resources with a respawn timer. That would force more active play, and alongside that I’m thinking of slashing action times in half, to make the gameplay much more immediate.


Once I’ve got all the features I plan on implementing sorted, I can fiddle about with action durations and resource availability and generally balance the numbers. Limited resources that respawn and more immediate gameplay options would definitely work; I’ve been testing that with the wood logging nodes, but I still want the game to be playable as an idle one; there needs to be long-term actions that the player can set their character doing and then leave them to it for a while. One option is to make gathering more immediate, but have crafting take longer. You gather interactively while playing, and then idle in town turning your gathered materials into useful products.

Another option is to have a spread of materials available in each location; the most common would be infinite nodes that you can idle at, and rarer materials would limited and on a respawn cycle. This would make the gathering professions a little like fishing in most MMOs, where the fishable water provides an infinite supply of fish, but to catch a specific or rarer variety you have to hunt down a limited, respawning “fishing pool”.

Either way, what I’m concentrating on next week — tomorrow — is procedural dungeon generation. Once I’m happy with that, it’ll truly be more roguelike and I’ll feel less self-conscious describing it as such, and taking part in r/roguelikedev discussions.

Saturday 8th February, 2020

Inspired by the prolific bloggers I admire, and my purchase today of The Developer’s Guide to Content Creation, I’ve decided to try and blog here a little more frequently. I’m going to be marking all of these posts as asides and putting them in their own category, to separate them a bit from the regular development-focused posts.

Now, of course, I’m a PHP/devops developer by trade, and my primary hobby is creating this web-based roguelike game, so I’m sure these posts will still contain a lot of development talk, but I’m also allowing myself the freedom to write on less tightly focused subjects, and perhaps even be a little more personal. I think often they’ll be about what I got done the previous day, much like Richard Herring’s long-running (and delightful) Warning Up.

Today I went to IKEA to pick up a few bits and pieces. I wanted a couple of things for my desk at my upcoming job (a new wireless charger for my phone, and a pot plant, primarily) and, of course, ended up buying far more than that. It’s impossible to leave that place without buying a whole range of unnecessary widgets that seem like a good idea at the time. I love IKEA. I’m a nester at heart.

When I got in I helped a friend with some WordPress configuration for her excellent art portfolio site, then ended up chatting with Simon about combat balance and a couple of bugs he’d discovered in BotLG; I added them to the list for Monday.

I ended the day by making a good start on a PHP script to generate (hopefully) balanced weapons. I have a rule that I don’t work on BotLG over the weekend, though naturally that will change once I start work again next month. But for right now, I’m so full of ideas and enthusiasm it feels like a shame not to capitalise them when I’m sat at my keyboard.