The Mezunian

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

Sucky Stages: “Glimmer’s Galleon” & “Windy Well” ( from Donkey Kong Country 2: Diddy’s Kong Quest )

Glimmer’s Galleon

View an interactive map courtesy o’ DKC Atlas

Today’s 1st lame stage is an easy 1: all I need to say is that this is a water level that’s dark & hard to see, 2 o’ the most widely-reviled video game gimmicks. I could also add that the original version o’ this game made it so that Glimmer, the fish following you & giving you the thin light by which to see, flashes the screen full white for a brief moment every time you turn round, which Nintendo had removed in later releases, presumably out o’ fear for causing people seizures. I could also add that this level is a maze; but I generally like mazes, so long as the controls I’m using to navigate the maze are enjoyable & I can actually see the maze.

Other bad marks ’bout this level:

This level is repetitive & is basically just a long winding path avoiding the same Lockjaws, Flotsams, Shuris you already saw quite ’nough o’ in “Lockjaws Locker” & Puftups, who you’ll see plenty o’ times in “Arctic Abyss” & the Enguarde section o’ “Animal Antics”.

Pictured: this level in a nutshell

You don’t e’en get the respite from Donkey Kong Country swimming controls most water levels offer, Enguarde, thanks to useless Glimmer getting in the way.

For Diddy’s Kong Quest this is a particularly weak level ’cause it’s the only level that takes place entirely underwater. 1 o’ the many decisions the developers o’ Diddy’s Kong Quest made that made that game stand out ’mong all the others as having the best level design is that most o’ what you could call its “water levels” break up the water navigation with on-ground sections, & oft add twists to the water sections that many players still remember. ¿Who doesn’t remember bumping seals to make them spray water into the boiling red water to make it blue & cool ’nough to swim through & then hurrying through it before it turned hot ’gain in “Lava Lagoon” or racing ’head o’ the rising water with a piranha fish that bites you as soon as it can reach you in “Slime Climb”? But I wouldn’t be surprised if many players forgot this level.

Pictured: better levels

Being a maze level, you can imagine that this level’s bonuses are just hidden in certain hard-to-find crevices that would not be hard to find if your vision was good. The 1st bonus is right ’bove the start, which is particularly cliché. The hero coin’s location is just 2 layers o’ hidden areas obscured by unmarked magical move-throughable solid material — the weakest element o’ this game’s level design that is on the same level o’ “puzzle” design as the kind o’ levels 10-year-ol’ I made in Lunar Magic.

This level’s bonuses are both the same: swim through a maze till you find the bonus coin. The only difference is that the 2nd bonus has bananas that mislead you — which is particular pernicious, as the DKC series has always upheld that following banana trails is always the best idea. For this level to break this sacred vow to add the slightest bit o’ challenge to yet ’nother maze is just sad.

The 1 thing ’bout this level that almost made it good is that its ending area being similar to the beginning o’ “Rattle Battle” would make the connection ’tween this & the next level feel seamless… if “Rattle Battle” were the next level. Unfortunately, the developers for some reason put “Krockhead Klamber” ’tween these levels.

Windy Well

View an interactive map courtesy o’ DKC Atlas

The bonus level “Animal Antics” is infamous for its Squawks section’s wind, making the already tricky challenge o’ navigating bramble mazes with Squawks e’en harder. But that wind mechanic was consistent: it pushed the same amount for the same duration before switching, going back & forth.

“Windy Well”, for some reason, ’scapes public ire, despite its windy mechanic being far jankier; & it’s not e’en a bonus level, but a level you must get through to beat the game. Rather than pushing you left or right for a specific duration, this wind slowly pushes you upward, sometimes up & down — but only @ certain points, & the game doesn’t do a good job o’ being clear where exactly these places are. Thus, it’s easy to enter a wind section only to pass just the edge o’ it or to just miss the bottom hitbox o’ it & plummet straight down to your death.

On the other end o’ the spectrum, there is a section near the middle wherein you’re s’posed to glide under Zingers while falling back down from wind up-pour… if you stupidly jump after reaching that platform. Otherwise, you can just run right under them. I’m actually not sure if this was intentional or not; but it’s not clever, since it relies on discovering a quirk to a counterintuitive mechanic rather than applying any logic. ¿Why would the wind only affect you @ all if you jump? It’s not e’en just being in the air: you reach the air a li’l when going up onto the platform in the 1st place & you can throw your partner up into the air all you want & they won’t be affected by the air. ( Note: one may think that the 1-up balloon on this platform may incite players to jump to get it, forcing them to go through the challenge normally; but you can just throw your partner up @ the balloon & still skip the challenge. So there’s truly no reason to do it. )

But truly, for a game that usually knew how to pace its elements, this level is too long & repetitive. It ne’er evolves much past dodging Zingers & Krook hooks, & there’s li’l variation. Sometimes the Zingers move in odd patterns; but you still find yourself dodging stationary Zingers e’en up to the end o’ the level — in fact, floating up through holes in a pattern o’ stationary Zingers is the last challenge o’ the level after the 2nd time you dodge Krook hooks. The level is just a bunch o’ challenges thrown together without any logical organization in terms o’ theme or difficulty evolution.

This repetition leads to ’nother problem with this level: it falls into the Donkey Kong Country 3 gimmick syndrome o’ focusing every element o’ this level on this 1 gimmick without any break to switch it up @ all. That this isn’t e’en a particularly inspired or interesting gimmick in the 1st place makes this baffling. “Gusty Glade”, ( which, don’t get me wrong, is also a shitty level with cheap wind that abruptly changes when you get near a platform’s edge, throwing you right off the edge without warning ) which you play in the preceding world, has wind, too, but it’s far less janky & has far mo’ variations: with Rattly & without, hopping on enemies, blasting up in barrels, & using hooks, none o’ which is used mo’ than 2 setpieces, & these are still broken up with regular platforming. Then ’gain, “Gusty Glade” is also not nearly so long, so it ends before it gets too tiresome. It pisses me off still; but “Windy Well” kind o’ pisses me off & bored me — & boring me is a far greater crime than pissing me off, as a’least the latter inspires some emotion in me. “Animal Antics”’s wind section, which actually is competently-designed & people who complain ’bout it are just bad @ it, has less variation, but is much smaller, & is only a portion o’ a larger level.

Pictured: this level in a nutshell

This obsession with its gimmick leads finding “Windy Well”’s bonuses to be uninspired: the 1st bonus is just falling in a hole that seems like it might make you fall & die, but has wind that keeps you from falling & allows you to float under the platform that continues the level to find a bonus barrel. Then, later, the level does something similar for a hero coin, but e’en mo’ obtuse: you have to jump, but not too high, or you’ll get hit by a Zinger, which is likely. I think you’re s’posed to roll off the edge & then jump, but e’en that will 90% o’ the time either still not give you ’nough speed & distance to clear the Zingers or make you miss the invisible wind hitbox & fall to your death. I was only e’er able to do it without getting hit with Diddy, e’en after many tries with Dixie. In truth, whene’er I did this on the many 102% runs I’ve done, I’d always just tank a hit to get this. Some may say this is me whining ’cause I suck, but I want to remind you that the hitbox is completely invisible, so it’s not strategic aiming; it’s guesswork — guesswork so anal that I’m still not e’en sure if it’s possible with 1 o’ the characters. If they were going to be so vague ’bout how the wind works, they ought to a’least give the player some leeway.

The bonus challenges themselves run into the opposite problem, having li’l to do with the level gimmick & just being generic challenges. The 1st bonus just has you use the wind mechanic to rise up to a hook, which isn’t a challenge, just pointless padding, & then challenges you to hop on a bunch o’ Flitters, which you’ve already done many times. The 2nd bonus is e’en worse: it has nothing to do with the gimmick or the level’s theme & is just a bramble room with Squawks challenging you to grab a bunch o’ stars. Much earlier levels had much mo’ interesting twists on this, such as Bramble Scramble’s bonus challenging you to hit bees in the way o’ stars. Why an end-game level would have a much simpler & easier version o’ a bonus from midgame is a mystery.

The only good thing I can say ’bout this level, other than its music, is the 1st challenge, which has nothing to do with the gimmick, challenging you to hop ’mong 2 short platforms with Click-Clacks on them, a particularly tricky variation o’ a challenge players will have done many times before.

E’en the palette for this level isn’t nearly as nice as “Kannon’s Klaim” & “Squawk’s Shaft”. This level’s black walls with green crystals feels far mo’ generic that you’d expect it to be the 1st palette for the mine-shaft theme, while “Kannon’s Klaim”’s brown walls & purple crystals & ’specially “Squawk’s Shaft”’s red walls & golden crystals are far mo’ colorful & exotic. Usually this game uses the mo’ exotic palettes for later levels, such as the bramble levels saving the autumnal sunset palette with purple sky & brownish gold brambles for the last regular level o’ the game or the swamp levels starting with typical green, but using the far mo’ exotic purple palette for their last level.

Posted in Sucky Stages, Video Games

The Epic Battle ’Tween Patches & Chester

When a gray cat named Chester invades Patches’s backyard, we almost reach a ferocious faceoff. Chester gains the lead when he gains higher ground after jumping on a stump, causing Patches to panic @ 1st. But then Patches rolls round on the concrete & then decides he’s bored o’ the whole matter. Chester is victorious.

Please don’t mind the random lumber strewn round the grass: I was hoarding it for the thousand slingshots I had to build after they keep breaking after shooting down the billion eggs tied to balloons with which Zipper the Fucking Dipper polluted the sky.

Posted in ¿What the Fuck Is this Shit?

Sucky Stages: “Donut Plains 2” from Super Mario World

I’ve already bashed this level in the big post I made comparing Super Mario Bros. 3 & Super Mario World 3 years ago & reminded you all how much I hate slow autoscrollers when criticizing Super Mario Bros. 3’s worst level 2 years ago, so this post was inevitable; & replaying through Super Mario World1 to get level ideas to steal2 & the recent “Great Stages” post after a 2-year hiatus was the perfect spur.

But before I write ’bout “Donut Plains 2”, it’ll help if I whet your appetite with the level that comes before it, “Donut Plains 1”. You remember ( since you haven’t lived in a fallout shelter for the past 3 decades & ’course have played Super Mario World ) that this was the iconic level that introduces the cape feather, as well as the cape-wielding Super Koopas you cadge them from, the baseball-throwing Chucks, & fire spewing Lotus Plants. The Baseball Chucks are, in particular, a great way to practice your cape swing by blocking his baseballs, as is the iconic bonus room halfway through the level that allows you to collect ’bout 600 coins flying through them in the air.

It is gainst this iconic level that “Donut Plains 2” truly brings on the letdown.

“Donut Plains 2” may be the slowest autoscroller I’ve e’er played. I swear that half o’ the time is spent with my shoving Yoshi’s face into the right edge o’ the screen in the desperate hope it might get me to the end mo’ quickly.

¿& what does this level do with this mechanic used in already far too many levels? Well, if you’re playing while in a coma you may stupidly let yourself get squished by the slow-moving yellow dirt. The last moving yellow dirt e’en stays on screen so long that if you go onto it after it 1st shows up, it will ’ventually crush you. The puzzle is to wait round in the perfectly safe ground before it till it reaches the top & then falls back down ’gain. This is the climax o’ this level, the best iteration o’ this lame mechanic they could muster.

EXCITING GAMEPLAY

Actually, that’s not e’en the end o’ the level: the level ends with a pipe & 2 random Spike Tops seen nowhere else in the level. I think the only way they could’ve introduced this enemy in a weaker way would be if they didn’t include the pipe & show this enemy’s main mechanic. They should’ve waited till “Vanilla Dome 1”. Yes, this level is so bad it makes good… well, much better than this level a’least, levels worse.

The most interesting iteration o’ the moving yellow dirt is the 2nd-to-last instance, when it comes in from the top & may, very rarely, block your jumps ’bove the Buzzy Beetles. Too bad, since the screen & dirt are going @ a snail’s pace, you’re forced to wait & pay attention to every detail so that you could see it coming before it came e’en close to getting in your way. This level is the equivalent o’ playing a game in super slomo — it saps e’en the slightest o’ challenge so that it almost feels like cheating & makes it agonizingly boring.

Imagine this level didn’t have autoscrolling3. ¿What would it lose? You wouldn’t have to wait in front o’ a wall slowly moving up & then back down. That would be a heartbreaking loss. ’Stead, you could run through as quickly as you could, weaving ’tween moving dirt. This level, like many autoscrollers, would be better if it weren’t an autoscroller @ all.

This is no surprise; autoscrollers, when useful, have 2 functions: they either force you to hurry & act quickly or they challenge you to dodge hard-to-dodge dangers within constricted space. Obviously this level, as well as just ’bout every autoscroller in just ’bove every Mario game ’cept for that fast airship in Super Mario Bros. 3 ( the only good autoscroller in that game ), fails that criteria, since this level is slow. But it fails the latter, too, since none o’ the dangers in this level are hard to dodge. ’Sides, one must be very creative with the layout o’ the onslaught o’ dangers one preys on the player to avoid monotony — the “elevator level”, e’en mo’ reviled from classic platformers than water levels. I’ve ne’er seen a platformer do slow autoscrollers well; only shmups succeed @ them.

“¿Are you truly going to bash an early-game level in a level made for kids for being easy?”. No, I’m going to bash it for having nothing to do. This isn’t the 1st level — there are a’least 7 levels before it, all o’ which are much mo’ interesting. “Donut Plains 1” is earlier, but it has all kinds o’ things thrown into it. The flying tutorial room is certainly easier, — you literally can’t die, save for time-up — but it feels much freer. “Donut Plains 2” is as easy as having an o’erly-protective mother: while great early-game levels throughout Mario games are easy ’cause they’re free & rarely punish you for just doing whate’er you want, this level is easy ’cause it doesn’t let you do anything but stand round in mother-level-designer’s strong grip.

’Sides, this level isn’t free: it’s just challenging ’nough to force you to pay attention to its tedium, like the platformer equivalent o’ Desert Bus. As I replayed this level multiple times to capture the screenshots you’re seeing, I was surprised by how easy ’twas to die simply ’cause I glazed off or was too far on the right edge & let a bat smack me or e’en maybe the level crush me once.

The 2nd worst part o’ this level is that not only do you have to suffer through it once, you have to suffer through it a 2nd time for the 2nd exit. Luckily, if you have foresight, you can take the secret exit route in the middle both times, which also includes a shortcut to the end. But letting me skip most o’ the level does not make a level better, but is itself a symptom o’ a bad level. I wouldn’t want to skip a fun level.

Furthermo’, the secret exit is as arbitrary & slapdash as the rest o’ this level. It’s just a random pipe in the middle o’ the level ’mong many. I s’pose that adds the challenge o’ testing every pipe before the screen zips by them. Also, you can actually get crushed gainst the pipe if you manage to mess up going into it before the dirt rises too high, which is possible, since Super Mario World has quite janky pipe entrance physics; but this is rare.

The room this pipe leads to has a wide empty space with just a football-kicking Chuck — ’cause caves are always the most fitting place for football players4.

After that irrelevancy, we have a combination o’ 2 o’ the most o’erused puzzles in Super Mario World: an item ( a Koopa shell ) locked ’hind turn blocks you need to be big to break with a spin jump & a turn block you need to throw the shell @ to create a vine. ’Course, if you have a cape or Yoshi, you can just fly or Yoshi jump into the hole with the key & keyhole, anyway.

¿So what is the outright worst part o’ this level? It’s basically just a weaker version o’ ’nother level. “Valley of Bowser 2” — which is tedious, too, mind you — does everything this level does, but better in every way, ’cept maybe that it’s longer & has e’en mo’ padding. & most o’ it isn’t e’en hardly harder than “Donut Plains 2”, so “Donut Plains 2” doesn’t e’en work as a warm-up to “Valley of Bowser 2”. While “Donut Plains 2” is just a bunch o’ virtually-identical towers o’ yellow dirt going up & down, “Valley of Bowser 2” has a moving maze o’ yellow dirt you must maneuver while avoiding being crushed gainst the brown dirt. It sounds much harder; but thanks to the slowness o’ the autoscrolling, it’s easy to avoid if you’re paying a bit o’ attention. It is genuinely easier than a’least 95% o’ the levels in “Donut Plains” & after.

After that maze there are a series o’ short races to get out o’ passageways before the rising yellow dirt crushes you. Howe’er, if you pay close attention, you’ll notice that the edge o’ the yellow dirt in the 1st passageway sticks out past the right edge o’ the brown dirt & that, if you were to wait on it, you’d be able to reach the ceiling o’ the 1st passageway & go ’bove it to the left to reach the key & keyhole. This is a far cleverer secret exit than “Donut Plains 2”’s & is actually relevant to the gimmick.

“Donut Plains 2”’s aesthetics do it no favors: it’s 1 entry in an o’erused & bland theme that does not fit with the world it’s in. Super Mario Bros. 3’s advantage to having mo’ exotic ( for the time ) themes was that its themes generally stuck to their worlds & none felt o’erused. Super Mario World, meanwhile, has world themes so generic that they spill out into other worlds. Thus, we get the absurdity o’ a game with a cave world ( 2, technically, since “Valley of Bowser” is quite cavelike already ) full o’ cave levels, & yet also has cave levels throughout other worlds, as if 2 cave worlds wasn’t ’nough caves for us5. ( “Plains”, which is e’en mo’ generic — the most generic theme possible, in fact, falls into this e’en harder ).

“Donut Plains 2” is a particularly ugly level in a game that, quite frankly, is quite ugly as a whole. 1 o’ the major downsides to implementing moving dirt is that it takes up the main background layer, so that all we get are sparse… shapes that only use 4 colors & don’t look anything like anything that would be on a cave wall but ’stead looks like something the laziest modern artist would make who doesn’t know any better ( & I like modern art, so if you fail to impress me with it, you know it sucks ). The sickly yellow dirt that looks like it may have some radiation poisoning from underground nuclear tests clash particularly with the lifeless gray o’ the rest o’ the dirt. It made me realize how wrong complementary colors that are super desaturated ( ’cause Super Mario World, despite revolving round a fantasy world, is desaturated to hell like it’s a 16-bit Call of Duty ) look.

“Donut Plains 2” is a particular problem in context. Coming just after the release o’ the 1st Sonic the Hedgehog game, Super Mario World was a particular target for the not-entirely-fair stereotype that Mario games are slow & bland6. But “Donut Plains 2” fits this stereotype perfectly: it is slow & bland.

Posted in Sucky Stages, Video Games

Sealab 2020 [ VERGISS DAS LEBEN DAS ICH FRÜHER KANNTE VERGISS DEN DEN ICH ZU HAUSE GELASSEN HABE ]

En mi refujio nuklear

en ke me rekuperaba de

el kaso de “C++”,

ojeaba biejos kuadernos

y leí un mensaje de me de 2015

ke adbirtió kontra

“la tiranía de 2015”,

a ke solo pude responder,

<Tengo malas notisias de 2020…>.

In my fallout shelter,

recuperating from

my case o’ C++,

I flipped through ol’ notebooks

& read a message from 2015 me

that warned gainst

“la tiranía de 2015”,

to which I could only respond,

<I have bad news ’bout 2020…>.

Also, as I was trawling through my ol’ blog posts, seeing what haiku I’d forgotten to post, I came ’cross this brilliant work o’ art & began to worry that people might think I’d plagiarized Kanye West’s magnum opus, which I hadn’t heard yet, only to realize that this predated “Lift Yourself” by o’er a year. Though it’s unlikely, I like to imagine Kanye happened ’pon my weird-ass obscure blog ( perhaps he was an EarthBound fan & was looking up info on it & stumbled ’pon the blog post I’d published a li’l mo’ than a week before ) & took inspiration from that poem, knowing that this blog was too obscure for anyone to find out.

Well, I did. & I’m-a comin’.

Posted in Española, Poetry

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 L

I didn’t finally give up on this immense waste o’ time ( though a sane person would’ve years ago ); I’ve just been implementing a bunch o’ things — all @ once ’cause implementing 1 form tore apart the code in other parts, so that the game was in a broken form till I finished most o’ it.

We have a lot to go o’er…

New Title Screen

As the video shows @ the beginning, the basic animation I had before has been replaced by a “trainer” like @ the beginning o’ Super Mario World. I don’t know why I didn’t think to do this till now, since the ol’ animation I had was rather generic & I clearly had autoplaying on my mind way back when I made “Rooftop Rumble”. Maybe I just hadn’t had the confidence yet.

Codewise, the TitleState instance just includes an instance o’ LevelState, but uses a slightly different update function & has a camera with different dimensions. The player character uses the same input component “Dagny” does in “Rooftop Rumble”. In the code as it stands now, the title screen randomly cycles through “Blueberry Burroughs”, “Wasabi Woods”, “The Amazon Jungle”, & “Rooftop Rumble” — though for this video I hacked the code so that it showed the same levels in the exact sequence I wanted so I could show off multiple without the risk o’ repeats.

’Cause I actually quite liked the building animations, I kept them in a shortened form @ the top o’ the screen ’hind the title. The curtains, which are flagrantly inspired by Super Mario Bros. 3 ( though they look mo’ like the curtains in Super Mario Bros. 2 USA ) I already drew for “Play in the Background”.

I probably spent mo’ time trying to record good-looking movement for each level. I didn’t spend ’nough time on “Blueberry Burroughs”, which is why it’s good that I skip it in this video. ¡But look @ that movement in “Wasabi Woods”! ¡That’s some dancing there! Actually, if you compare this to an earlier video you’ll see that I edited the level a bit, making it easier ( I always thought ’twas way too hard for the 3rd level o’ the game — still do, actually ) & making it so that you can play through the level without stopping, as shown in this video.

For those wondering who “Nasrin” is & why I’ve been stealing credit for their hard work till now, it’s referential humor that won’t make much sense now, since none o’ the relevant stories have e’en been published yet. Nasrin is a character who is a programmer & learns “programmagic” in some stories & also plays an authorial role in some stories. This is also a pun off the “Programmed by Nasir” message found in Final Fantasy & other Square games Nasir Gebelli worked on. The immense similarity ’tween their names & professions was too good to pass up, e’en if the joke will only make sense to anyone who doesn’t read this explanation decades from now.

Localization

When adding Muertoween-themed messages to that stupid marquee @ the bottom o’ the screen for “Mind Your Manors”, I discovered how limited my then implementation o’ text was. It just used basic C++ strings as basic arrays, which is… wrong. Calling bytes “chars” is 1 o’ the many lies C & C++ tell you.

Actually, to truly handle all kinds o’ unicode characters well you need a full-fledged character library; but that library probably wouldn’t work with the way I handle drawing characters, so I stuck with the next simplest solution: using u32strings. Using fixed-sized UTF-32 characters is simpler & probably mo’ efficient than using variable-sized UTF-8 characters as I can just worry ’bout converting from UTF-8 to UTF-32 once & then treat the new string as a basic array ’gain. On modern computers using mo’ memory to save running complicated conversion code code repeatedly is probably faster, ’specially since on most computers UTF-32 characters would be the size o’ a basic word. But I would still prefer it e’en if ’twere slower.

I’m quite sure the new text format still has flaws. While it can handle multiple character frames for a single character, such as used for “…”, it can’t handle combining characters, so Arabic translation would be problematic. Also, characters are pretty much hard-coded to being 8×8 pixels ( technically, I could change 1 constant to change that size for the WTextObj class; but many places where spacing has to be managed precisely would basically break if the character size changed; & since many screens try to squeeze as many characters as they can, I don’t e’en know how I could fit larger characters ). In order to implement Japanese, as shown in this video, I replaced most kanji with hiragana ( as many ol’ Japanese games did to save memory ), which is simpler. But I have no idea how one would implement the complex characters o’, say, Chinese, which have no simpler characters to fall back on, in only 8×8 pixels. But if you want to play the game in French, Japanese, or Russian, you’re golden… so long as you find someone to make the translations, as mine rely heavily on Google Translate & are probably as good as the English found in Ghost ’n Goblins. Also, none o’ the localizations are finished, since this simple platformer has a lot mo’ text than I would’ve imagined ( & it still doesn’t include error text yet ).

As I was implementing this, I cut out all text that is localized into separate JSON files, 1 for each language, & load the text from here. Changing the language changes what loaded text to use. To make a localization, one only needs to copy ’nother localization file & replace all the values with different values. If that language uses a different character set, just make a new image, put it in assets/img/charset ( & make sure it’s an indexed png with a’least 7 colors or 6 colors & transparency ), & put that filename into charset->image o’ the JSON file.

There are still many limits, though. As mentioned, some screens have limited space, which works for the English translation, but may not be ’nough space for some translations. Since starting this I have tried to make spacing dynamic to the text if I can or leave extra space just in case. Also, setting key bindings & typing filenames ( which will be relevant in the next section ) still use only basic alphabet letters.

I completely rewrote the code used for drawing text to the screen so that it’s much simpler & much mo’ dynamic. Rather than running half-hearted but complex code every time it drew text, the new version runs complex code @ the start to generate a simple list o’ lines, which each hold a simple list o’ character frames with character coordinates & position. This makes handling centering or right-aligning or changing specific characters in text much simpler. Now gradually appearing text doesn’t need to embed itself in the code that generates the frames but can just work on the frames afterward.

In addition to the centering & autoformatting in the ol’ text code, WTextObj instances can now have autopadding, which only applies if there is extra space. This makes working with text that may spill into multiple lines in other languages simpler. For instance, as the video shows, when “Empieza el juego” spills out into 2 lines, it still fits in the box, just with less padding ’tween lines.

Save Files

For the longest time I knew allowing only 1 save would be embarrassingly lame & that no serious video game made in the 21st century would have such a ridiculous limit1, but I was ne’er quite sure how I wanted to implement it. I also knew that I didn’t want to limit the player to only 3 or 4 saves, either; the player should be able to have as many saves as their hard drive can hold.

The way most computer games would handle multiple saves would be to have the player directly save a file to their hard drive & directly load it from the computer. Howe’er, including window system interaction in my game would heavily complicate my game’s ability to be crossplatform. The main platform I work on, Linux, doesn’t e’en have a single window system, but probably hundreds.

Finally, I compromised by allowing the player to create any # o’ files ( so long as they have the space for that extra 800 bytes ) by selecting the “New Game” box @ the bottom & having all files ’bove it. Each save file needs to be given a unique name. The player can also copy & delete saves ( when you copy a save, you have to give the copy a new name, which defaults to “[original name] copy”.

Technically, this system isn’t finished. While it all works well in terms o’ pure behavior, I haven’t implemented any scrolling, so if you have too many saves, they go past the bottom o’ the screen, hiding the “New Game” box & crowding into the options boxes.

I also implemented a basic backup system: whene’er you save it also creates a copy o’ that file with the “bak” extension. When loading, if the game e’er finds a save file missing or corrupted, it tries to replace it with the backup.

Hilariously, I figured out a way to simplify saving to a file as simple as a 1-liner. All this time I’ve been using some long code that manually plugs values into an external file. Now I realized I could just memcpy the save file’s data directly to & from the external file & it works just the same.

New O’erworld

I basically reprogrammed the o’erworld, as the ol’ version was hard to change & was sluggish. I have since learned that drawing hundreds o’ small tiles every frame is much slower than generating a few textures every rare update & drawing those few textures every frame, so I do that ’stead. Since terrain collision is just solid or not solid, it’s just a list o’ booleans for every tile & uses your position & some simply math to index into that list.

I completely revamped the event system, which I made way back when I 1st made the o’erworld, but ne’er used ’cause ’twas too clunky to edit. Now, like almost everything else in the game, it’s all separated out into JSON files. Furthermo’, now ’stead o’ just silently changing the map, we have a cutscene that moves to a chosen tile & starts changing tiles frame by frame.

Just a few days ago I decided to add a frame round the o’erworld — ’nother idea I stole from Super Mario Bros. 3.

In addition to normal level tiles, we have a new tile type…

Shop

I’ve been planning to implement this for years. I knew that if I gave the player tons o’ money, they would need somewhere to spend it.

This is 1 o’ those things that took way mo’ time to design than program. In terms o’ programming, it’s just a list o’ objects that set inventory values when you buy them. Howe’er, figuring out how to fit all o’ the info well into a single low-resolution screen was tricky. Luckily, my day job is web development & design, so I’m used to it2.

Speaking o’ web development, I made the shop work mo’ like an online shop ( & real shops ) wherein you select the items you want to buy, & then pay & get them all @ once when you select checkout. This admittedly made designing the screen harder, as it forced me to include a “Checkout” box, a box for shopping what products you have in your cart, & total price @ the top right. But it saves the player having to go through confirmation & “Thank you” boxes for every product.

I’d be happy if you could ignore the fact that the store is much bigger than Autumn — so that either Autumn has been shrunk to the size o’ a mouse or the store was made for giants.

Currently, there is only 1 shop that sells just an “Extra Aorta”, which increases the player’s max health by 1 hit on normal difficulty; an “Iron Lung”, which increases the amount o’ time you can spend underwater; & the 1st cycle’s bonus level, Play in the Background”. As the video shows, beating it doesn’t unlock anything other than 100% ( which will be necessary to unlock something special ). All o’ these I have been planning for years. I ’ventually plan to implement a’least 2 mo’ shops later in the o’erworld, as well as the other 3 cycles’ bonus levels. I also thought ’bout implementing alternate costumes, characters ( making Edgar & Dawn playable ), & a way to unlock normal levels without beating the level before them ( essentially level skips without actually giving you credit for beating those levels ).

New Level Select

It looks nicer & is divided by cycle now.

New Levels

The video foreshadows 2 levels I’m working on: an attic level & a bayou level. I sort o’ worked on these in the midst o’ working on the other stuff, so I couldn’t show them off beforehand. Anyway, neither is totally done — though “Bayou Jupiter” is almost.

Ol’ Levels

If you compare some o’ the levels shown in the video to their originals, you’ll noticed I updated them a bit, usually to spruce up their graphics, but also sometimes to better balance their difficulty.

The most changed level is “Minty Mines”, which has now been renamed “Blind Mice Mines” & replaced its minty green with teal. I felt having a green level right after ’nother green level would be too repetitive.

While I technically redesigned the level from the ground up, I kept most o’ the general theme: go right, then down, then left, get a key, & loop back to the beginning o’ the level to open the chest. The diamond is still locked ’hind a locked box a li’l before you get the key, forcing a bit o’ backtracking. I just cut out some o’ the awkward challenges, like the spikes on the stairs downward, which are hard to see, while adding mo’ basic jumps & falling spikes that fall too slowly to e’er hit you.

The main changes were the darkness gimmick & the secret exit. The darkness gimmick was something I implemented a long time ago for an aborted level — though I had to hack the rendering functions to allow the light switches & spikes to still be bright ’bove the darkness. I aborted the other level ’cause I felt “make the level hard to see” was unfair & not fun. But then inspiration struck: ¿what if I implement darkness on an early-game level & just not make it challenging? A level can’t be unfair if there’s hardly any risk o’ death. But the darkness & light switches do spruce up what was otherwise a boringly easy level. Early-game levels are always hard to make exciting without the ability to make them actually challenging. Darkness without real threats is a good way to fake it where it can’t truly exist.

Secret exits were something I’ve been wanting to implement for a long time. I always felt that with this game’s level sequence spiraling back round to the same areas repeatedly, secret exits that opened up paths to skip a cycle — as warp zones, effectively — would fit perfectly.

I already mentioned “Wasabi Woods”, but “Cotton Candy Clouds” was also made much easier. Since “Value Valhalla” was easier than this level, I almost switched them; but I wanted to keep the other “collect x # o’ gems” level farther from the 1st & felt like it’d be much mo’ interesting if I make the “Value Valhalla” level harder & the “Cotton Candy Clouds” level with its far less inspired gimmick ( stolen from Wario Land 3, ’course ) easier. I shortened the level by cutting out the weakest parts & added much mo’ space to the area under the brambles where you collect the diamond. The staircases where you go down & up while avoiding Pufferbees were awkward with the camera, & the 1st iteration, going down, was way harder than the ending iteration going upward. The final challenge pushing you to jump up 3 fading platforms @ once is far mo’ relevant to the gimmick. But to keep from the gimmick o’erpowering the level ( a typical rookie mistake & a commonly cited reason for why many people prefer Donkey Kong Country 2 o’er Donkey Kong Country 3), I added a section where you have to jump up thin platform without hitting the Pufferbee moving left & right & then jump out o’ the way before the Pufferbee comes back. This is much mo’ manageable for players still getting acclimated to the game.

I also spruced up the level’s graphics, taking advantage o’ the background & foreground layers that I hadn’t implemented yet when I 1st designed the level to eliminate cutoff, such as with the ladders gainst the cloud fringes. Most notably, I replaced the big cartoony brambles with the simpler bramble tiles found in “Brier Flier”. This was a hard decision to make, as I felt the older graphics were mo’ visually appealing & made it less obvious that the they were a grid o’ tiles. On the other hand… they made it less obvious that they were a grid o’ tiles, & thus harder to tell what parts were harmful & which not. I decided that keeping gameplay solid was mo’ important than visuals.

I moved “Chillblain Lake” to the 1st cycle, swapping with “Ice Box Rock”, which is now in the 2nd cycle. I debated this change, ’long with the “Cotton Candy Clouds” / “Value Valhalla” switch, but this time I went through with it. I still have qualms with having ’nother key & chest level so soon after “Blind Mice Mines” — to the point that I almsot considered making “Blind Mice Mines” have just a regular keycane goal if I didn’t think exploring the dark level for the key was an important part o’ that level’s challenge. Howe’er, I feel dodging the spiky olives in “Ice Box Rock” was far harder than anything in “Chillblain Lake”, & I feel making that challenge easier would ruin its fun, while this level doesn’t need to be harder than a 1st-cycle level to make its gimmick fun. Plus, with “Value Valhalla” still in the 2nd cycle & the 2nd cycle also having “The Amazon Jungle”, we already had ’nough pink levels in the 2nd cycle.

I made 1 change when I moved “Chillblain Lake” to the 1st cycle: I replaced the fish enemies with spikes on the walls. I felt the fish were too unpredictable to be easy ’nough for such an early level, while the spikes are frivilous: just stop in the center & swim straight up.

Other levels received mo’ minor updates:

  • I updated “Porcelain Dreams”’s pipes to replace most o’ the odd blocks on their corners with cornered pipes & added edge lines to the brick walls so there wasn’t so much cutoff. I plan to redesign much o’ this level, as I feel its gimmick is underutilized; but I ran into designer’s block & decided to wait till later.
  • For “Foul Fowl Farm” I removed a tricky Noko no Pollos.
  • For “Lunacy” I added extra space ’tween the spike shafts, which previously required far mo’ precise timing than I was comfortable with for a 1st-cycle level.
  • Finally, I added a diamond to “Gravity, Hypocrisy, & the Perils o’ Being in 3-D”, which I’m shocked I’d forgotten to add this whole time. I also increased the player’s speed, since I was actually kinda bored as I was playtesting it.

The Future

I can confidently say the game is mo’ than halfway done — which isn’t that impressive, since I’ve been working on this now for o’er 3 years. Other than finishing the o’erworld & shop, fixing the graphical limitations o’ the save screen & localization, implementing user-friendly error messages in case certain files go missing ( a downside to using so many JSON data files ), & sprucing up things here & there, which I’ll inevitably do as I go on ( ¿how much have I updated the graphics to “Blueberry Burroughs” since I 1st created it @ the beginning o’ this project? ), all that’s left is the rest o’ the levels, a final boss ( & possibly a hidden final final boss ), & credits.

O yeah — I’ve also been thinking ’bout replacing the big diamonds with cards, which you will be able to look @ through the options in the o’erworld to read flavor text full o’ references to Boskeopolis Stories. Basically, they’d be like the cards in Simpsons: Hit & Run. I’m still working on the card’s animation frames, so I haven’t e’en started on the options screen yet.

Posted in Boskeopolis Land, Programming

winter pinecones [ ICH WERDE DICH NÄHER IN EINEN SEKUNDE HALTEN DA IST ETWAS SCHWERES AN MEINEN ZÄHNEN ¿WAS IST MEIN GESCHÄFT? ICH BIN NUR SO FROH DASS DU HIER BIST ]


Deprecated: Creation of dynamic property Mezun\DasThema\SrcSetItem::$width_tag is deprecated in /var/www/public/wp-content/themes/dasthema/src/SrcSetItem.php on line 36

Deprecated: Creation of dynamic property Mezun\DasThema\SrcSetItem::$absolute_filename is deprecated in /var/www/public/wp-content/themes/dasthema/src/SrcSetItem.php on line 63

Deprecated: Creation of dynamic property Mezun\DasThema\SrcSetItem::$width_tag is deprecated in /var/www/public/wp-content/themes/dasthema/src/SrcSetItem.php on line 36

Deprecated: Creation of dynamic property Mezun\DasThema\SrcSetItem::$absolute_filename is deprecated in /var/www/public/wp-content/themes/dasthema/src/SrcSetItem.php on line 63

Deprecated: Creation of dynamic property Mezun\DasThema\SrcSetItem::$width_tag is deprecated in /var/www/public/wp-content/themes/dasthema/src/SrcSetItem.php on line 36

Deprecated: Creation of dynamic property Mezun\DasThema\SrcSetItem::$absolute_filename is deprecated in /var/www/public/wp-content/themes/dasthema/src/SrcSetItem.php on line 63

Deprecated: Creation of dynamic property Mezun\DasThema\SrcSetItem::$width_tag is deprecated in /var/www/public/wp-content/themes/dasthema/src/SrcSetItem.php on line 36

Deprecated: Creation of dynamic property Mezun\DasThema\SrcSetItem::$absolute_filename is deprecated in /var/www/public/wp-content/themes/dasthema/src/SrcSetItem.php on line 63

Deprecated: Creation of dynamic property Mezun\DasThema\SrcSetItem::$width_tag is deprecated in /var/www/public/wp-content/themes/dasthema/src/SrcSetItem.php on line 36

Deprecated: Creation of dynamic property Mezun\DasThema\SrcSetItem::$absolute_filename is deprecated in /var/www/public/wp-content/themes/dasthema/src/SrcSetItem.php on line 63

Deprecated: Creation of dynamic property Mezun\DasThema\SrcSetItem::$width_tag is deprecated in /var/www/public/wp-content/themes/dasthema/src/SrcSetItem.php on line 36

Deprecated: Creation of dynamic property Mezun\DasThema\SrcSetItem::$absolute_filename is deprecated in /var/www/public/wp-content/themes/dasthema/src/SrcSetItem.php on line 63

Frosty March ~

huddled together

winter pinecones.

Posted in Haiku, Senryu y amigos, Poetry