The Mezunian

Die Positivität ist das Opium des Volkes, aber der Spott ist das Opium der Verrückten

Boskeopolis Land: Let’s Code a Crappy 2D Platformer Like Millions o’ Other People on the Internet & Lose Interest & Give Up Only a Few Months In, Part XXXXIX: Mind Your Manors

Mind Your Manors

I spent all month working on just this 1 level & still wasn’t sure I’d get it all done, including recording playthroughs o’ the level, by the end o’ October. But I did.

This level idea started out as just some kind o’ vague HalloweenMuertoween-style mansion with this basic wallpaper & floor graphics, but all the layouts I came up with seemed empty & boring. Originally, I had bottomless pits in the mansion, which made no sense.

So then I came up with the idea o’ giving the player a flashlight in this level & challenging them to defeat all the ghosts to beat the level, & the 1st thing I did was prototype the programming for this to see if I could implement it in a way that didn’t feel awful. ’Twas tedious tinkering with pixels to get the rotating flashbeam & flashlight arm to align with the collision lines, but it seems to work all right. Since I knew this gimmick would have a risk o’ being janky, I deliberately made this level laid back & easy ( this also made recording easy & fast ’nough to do in less than an hour, as opposed to, say, “Brier Flier”, which took multiple days ).

Unlike almost everything else in this game, the flashlight collision isn’t just a box, but is 3 lines tested gainst the ghosts’ hitboxes, using some algorithms I found online, as well as some extra algorithms I had to fudge up to handle rotating the lines.

I remember 1 decision I hedged o’er was whether to allow the player to duck & slide down slopes ( in this case, the stairs ). I felt that having the down input make the player both duck & lower the flashlight, making it impossible to do either by itself, would be annoying1. Originally, I had the camera-up & camera-down imputs move your flashlight, which fixed this problem; but I found that too awkward & feared it might be hard for players to figure out or adjust to & thought adding a message box to mention it would be lame2. On a keyboard a’least ( which I still use for testing, e’en though I added controller support probably a year ago ), you have to use the same fingers for jumping & running as changing the camera, which is fine for the camera, since you rarely need to move it, anyway — I considered it a bonus mo’ than anything else. But for moving your flashlight, it’s far more o’ a hassle. ’Ventually, I judged that ducking & sliding wouldn’t be all that useful in this level, so I just cut them out. This had the unfortunate, but not dire, downside that it made the Flashlight Player’s code less clean & concise as, rather than just calling the general player update function, I had to copy parts o’ it with the ducking & sliding code removed. The biggest annoyance for a programmer is code that is very similar, but slightly different, so you have to debate whether to have copypasta ( which can make changing this copied code harder or risk adding bugs if they diverge ) or complicating the code & making it run slower for all with conditions.

I’m embarrassed to say how much time it took just doing the graphics for this level — as is common. All the slight adjustments needed for the staircases transitioning into ceilings & walls bloated the tileset ( which is already rooming with the forest tileset ) so that it almost took up all the tiles I have reserved, when most tilesets take up less than 10% o’ that space. All the lines & ridged shading kept misaligning, so I had to readjust tiles, only for this misalignment to cascade down all the tiles next to that tile, & so on.

Boskeopolis Land “woods” tileset.

Meanwhile, mechanics like the door & the rug monster I just slapped together in 1 day. The door is just a fancy way to force the player to go up to the attic & down to reach the back yard while still allowing them back into the mansion afterward — a necessity to prevent this level from becoming unwinnable, in case there are still ghosts inside. The rug monster I ripped off from Super Castlevania IV after watching a playthrough o’ it, as I felt like this level was a bit too easy & empty. There are so many weird creatures & gotchas you can do in a Muertoween-themed level — I know I also wanted to have a’least 1 painting o’ a farmer who suddenly comes to life & stabs their pitchfork downward when the player comes near — that ’twas a struggle to fight the urge to try implementing all that & to stay focused so I could finish this thing sometime this century.

Since this level is easy & wants you to stop & explore every nook, I made the gem score require collecting all gems… sorta. I also implemented a score system wherein you gain gems for flashing ghosts in quick succession ( the time-score run shows this off ), so you can get a li’l leeway if you’re strategic ’bout defeating ghosts. Howe’er, this is much harder than just collecting all the gems — specially since the hard-to-find gems are in such large bunches that the ghosts would ne’er give you e’en close to ’nough to make up for them.

In hindsight, I think I made the time score too easy. I originally calculated it based on my time going round defeating each ghost as quickly as possible, only to later realize it’s faster to lure ghosts into bunches to defeat them all in quick succession ( which is where I got the idea for the aforementioned gem bonus ). In the time score I recorded, I played sloppily, so I beat the time score by 3 seconds; but you can clearly see that a player who’s actually good could beat that by several seconds.

This level’s music doesn’t come from Kevin MacLeod for once, but from Lobo Loco @ the Free Music Archive.

By the way, the ghosts here are “kappa-obake”, a pun off “kasa-obake”, those umbrella ghosts oft found in Japanese media, such as Super Mario Land 2: 6 Golden Coins. 1 o’ the meanings for the word “kappa” is an ol’ fashioned term for a coat — so these are coat ghosts with a single eye & a tongue, rather than umbrella ghosts. They originated from the “DISTURBED RESIDENCE” episodes o’ Boskeopolis Stories.

Things I forgot to do till after I already recorded: I just noticed while working on this level that the enemy counter icon in the HUD is a Cowpoker from “Playing Railroad” & thought to change it into a ghost icon for this level ( & ventually a chicken icon for “Foul Fowl Farm”, which also has this icon ), but forgot to do it.

What doesn’t count: there’s a glitch with the diamond that causes it to still appear e’en after you already collected it, only to disappear when you get near it. This is probably caused by an optimization I made months ago so that block interaction doesn’t happen ’less you’re near it. Howe’er, this doesn’t seem to happen in many other levels, so I need to figure out how I fixed it in those. Either way, I deliberately didn’t fix it yet since I knew it wouldn’t show up in the video, since I don’t go near there after the 1st run.

Learn mo’ ’bout Boskeopolis Land @

Read Boskeopolis Land’s horrifying code on its GitHub

¿Liked it? ¡Take a second to support this idiot on Patreon!
Posted in Boskeopolis Land, Programming