The Mezunian

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

Hamtaro: Ham-Ham Heartbreak

I can’t believe I forgot to write ’bout Hamtaro: Ham-Ham Heartbreak for my GBA tribute. Now’s the perfect time.

Long before that there My Li’l Pony: Friendship is Fatalities1 & those there bronies, Hamtaro was the emasculating franchise for a younger me2, who was ne’er that masculine, anyway. Back when everyone else was bitching ’bout Hamtaro ruining Toonami, I was complaining ’bout Tonami ruining Hamtaro—& I still stand by it.

Anyway, Nintendo—yes, Nintendo themselves, with Shigeru Miyamoto himself acting as director3—created 2 rather good Hamtaro games for the Game Boy Color & Game Boy Advance. The 1st was Hamtaro: Ham-Hams Unite! & was quite underrated. But this is a GBA tribute, & Valentine’s Day, so I’m not going to write ’bout it. ’Stead, let’s talk ’bout the mo’ popular sequel.

Both games had similar gameplay mechanics: they were both essentially adventure games, but with less emphasis on collecting & mixing items, & mo’ on collecting & using “Ham Chat.” “Ham Chat” was a special hamster language added onto English—or whatever language one was playing the game on. Pressing A on characters or things caused a prompt with a certain list o’ words to pop up. Selecting different words would cause different things to happen. However, if you didn’t know the word, it’d be just ?s, & you couldn’t select it. You learn words by hearing other characters use them. Thus, the way this mechanic worked was you went round learning words so you could learn mo’ words & advance the plot further.

In both games, you start with 4 main words which are the default: “Hamha,” which is just the basic “hello” & is used to start conversations with other characters; “Tack-Q,” which allows you to tackle forward; “Hif-Hif,” which allows you to sniff things, & is usually used for picking up items; & “Dig-Dug,” which was used for digging in dirt, & usually used for finding items in conspicuous dirt clumps or digging in warp holes.

One may ask why Hamtaro needs to learn the language a 2nd time after the 1st game. The sequel answers that: klutzy Hamtaro trips & falls into water, ruining his dictionary. ’Cause he has the memory o’ a trout, he has to relearn everything.

The main difference ’tween the 2 games is the plot: the 1st game had a simple plot wherein you just had to find all o’ the other “Ham-Hams” & convince them to return to Boss’s clubhouse for some surprise he wants to show off. It wasn’t much o’ a story, but it did give the player some control o’er what order to collect the Ham-Hams.

The 2nd game has a mo’ involved plot, albeit not one that’d e’er win a Nobel Prize: a hamster dressed up in a black devil costume named Spat hates love for no given reason & so tries to stir up trouble & break up relations. This is done through either subtle manipulation or good ol’ outright assassination attempts. Spat gets his name for his love to say “pfpth.” He also likes to laugh a lot, has the best music in the game, & is oft compared to Final Fantasy VI’s Kefka. He’s also the best character in the game.

’Nother difference ’tween Heartbreak & its predecessor is that you have 2 protagonists in this game, which are sometimes used for tag-team Ham-Chat moves, like “Hamlift,” wherein 1 lifts the other up to reach greater heights. The 2nd protagonist is Bijou, a character embroiled in 1 o’ Hamtaro’s many love triangles: the stoic brute with the heart o’ gold, Boss, is in love with her, but she’s in love with Hamtaro, who is the stock idiot hero too dumb to understand love. Like I said, Hamtaro’s not exactly Hemingway—& sadly was too early for the My Little Pony faux-intellectualist thematic analyses4 that litter the internet by those kinds o’ adults who strangely indulge in kids media while also being embarrassed by it, & rather than either getting o’er whatever preconceived notions they have or not watching the media, try to pretend the material is something it’s not.

While Heartbreak had a mo’ linear level progression, its level themes were a bit mo’ interesting: while Unite had mo’ domestic areas, like a school, a shop, a park, with a sky garden as the most exotic level, Heartbreak had a haunted manor, an amusement park, a jungle, & Spat’s very own tower, which made the story progression mo’ memorable. Then ’gain, I have a bit o’ nostalgia for the mo’ laid-back levels in the 1st game, too. Both had boring grasslands as the 1st level, too, but that’s by the Queen’s law, section 21 o’ the “Boring Beginning Act.”

Heartbreak also had mo’ minigames & 2 bosses, though the bosses weren’t much, & the minigames were oft annoying or filler. The bosses were mainly just timing a certain Ham-Chat technique @ the right time & in the right place, while avoiding things for the final boss. Meanwhile, you can make dances out o’ Ham-Chat words, find songs for said dances, & collect rocks so you can rub them into jewelry, which can be used to get accessories to wear on the title screen.

There’s also a dance competition that requires you to use some arcane combination o’ words to 100% complete the game. I think the only “hint” one could get for which words is that they’re some o’ the last words you learn, forcing this to be the last thing you unlock in the game.

Music

Spat’s Theme

It’s so good, it deserves to be mentioned twice.

Map

Catchy, but repetitive. Good thing you’ll only be on the map screen for a couple seconds @ a time.

Clubhouse

A hum-dum theme that fits the hum-dum tone o’ the clubhouse. Somewhat repetitive, too, though you may spend a li’l mo’ time here.

Sandy Bay

A catchy surf rock song for a surf-themed beach.

My subconscious tells me this song is a bit plagiaristic, but I can’t think o’ what it might be copying.

Boo Manor

Catchy for a slow, haunted theme. I ‘specially like the soft, sputtering percussions.

Moonlight

Not sure if I should give them credit for copying a song from Beethoven. Not a bad rendition, though.

Posted in GBA Tribute, Video Games

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 XII

‘Cept I hardly changed the actual code.

What I have done is finally figure out how to sort o’ get Git working, & now have Boskeopolis Land‘s source code on GitHub, so the whole world can see how li’l I know what I’m doing.

I’ve probably been spending mo’ time updating my dumb Wario Land 3 fan site than working on the actual game.

Posted in Boskeopolis Land, Programming

Mo’ than 4 Reasons Why This 4-Year Ol’ Article Is Wrong & I Need to Pontificate ’Bout it for Thousands o’ Words

It’s been a trend ever since I worked full-time as a book acquisitions editor: Blog-to-book deals. I acquired or oversaw the publication of more than a dozen bloggers-turned-book-authors. Sometimes it translated into book sales, sometimes not.

Speaking o’ trends, it’s a habit o’ business-oriented (¡eww!) writers to tuck self-promotion into opening paragraphs o’ articles any way they can. I s’pose the average reader—ha, ha, ¡what vulgar dopes!—doesn’t notice, but, ahem, experts such as myself are quite aware, & annoyed by it. & nothing’s worse than writing that makes me feel slightly pinchy. Ugh.

Point is: I know that blogs can lead to book deals.

However, I want you to think twice before you decide this is your path.

Here’s the prime problem: we see here that the article title doesn’t actually match the thesis o’ the article. The title says, “don’t,” but the article itself merely says, “think ’bout it 1st.” It’s like how the writers o’ newspaper articles oft don’t get to control the name o’ their article, oft leading to contradiction, such as that fucking dweeb Noah Smith mentions. But in this case, the writer obviously chose the title herself, so it doesn’t apply @ all.

Her 1st point is that “blog writing isn’t the same as book writing.” If she defines these by their specific mediums (“blog” defined as a series o’ articles online & “book” defined as a physical collection o’ paper pages bound together), then this is obvious. In fact, to treat 1 as the other would be physically impossible. Thus, that’s not what she’s saying @ all.

’Stead, she makes assumptions o’ content from form, for arbitrary reasons.

Blog posts, to live up to their form, should be optimized for online reading. That means being aware of keywords/SEO, current events/discussions, popular online bloggers in your area, plus–most importantly—including visual and interactive content (comments, images, multimedia, links).

“To live up to their form” is as valid a reason as “’cause I said so.” The SEO point is only necessary if one is shallow ’nough to be obsessed with hits that they’re willing to sacrifice any artistic decisions for them, which is no different than saying that writing books in a way that doesn’t perfectly fit market studies is “wrong.” My blog does fine without caring ’bout anything but the bare basics o’ SEO; only current events (I do talk ’bout current political issues sometimes; but I also write ’bout ol’ issues, like video games from the 90s); popular bloggers in my area, which is a ridiculous criteria, since the whole point o’ the internet is that it’s international—¿Who the hell e’er cared ’bout whether a blog was written in their locality?; & visual & interactive content, which usually distract from useful content mo’ than it actually adds anything. For example, this article’s trite photo o’ a stamp that says “blog” on it: this is not only cliché to the point o’ being annoying (& therefore not entertaining), it adds no info. It’s neither interesting nor informative, & therefore it is useless & shouldn’t be included. She only included it ’cause it’s a mindless tradition that bloggers follow; & that’s what her reasoning for her argument that blogs must be written a certain way goes: it’s mindless tradition, as is the usual guiding line for marketing types who despise, ’bove all, independent thought.

To be fair, I do agree with her defense o’ blogging as an art in itself & that people shouldn’t use it as a shallow way to market their “real” writing. Not only is it “almost silly to have to state” this, but it’d be almost silly to have to state that trying to get attention to art through inferior art is counterproductive. I don’t know ’bout other people, but I’m not one to respond to crappy art with the thought, Hmm… I bet this person’s other work is actually good.

But she goes on to contradict her own arguments in the 2nd point. She labels it, “Blogs can make for very bad books,” but then develops this argument by saying that stories written without editing or care will likely be bad. That’s true, whether in blog form or book form—we have plenty o’ examples o’ the latter to prove that. But e’en she adds the qualifier, “unless, of course, you wrote the book first and divided it into blog posts,” which is the equivalent o’ saying, “Blogs can make very bad books, ’cept when they don’t.” The existence o’ counterexamples debunks the claim.

@ the end o’ the point, she argues that books with visuals could be put in blog form well, for no reason. Indeed, I find this counterintutive: if any type o’ book would suffer from being put in online form, it might be that with visuals, which require mo’ detail, & thus lose quality in the conversion from high-resolution print pages to low-resolution online images that must also be compressed into somewhat blurry JPEGs or pixellated GIFs & PNGs & also take much longer to load. Meanwhile, text, being so abstract, will be just as good on a computer screen as in a book. Indeed, text could be made better online than in book form: rather than having to bother with the tedium o’ flipping through pages or keeping bookmarks, one could use anchor links or search for specific text. For a real-world example, for the article I made wherein I joked ’bout some funny parts o’ the Bible, e’en though I had a hard copy o’ a Bible, which was what I actually read, since I needed those brilliant footnotes to tell me a million times that God was a rather nifty guy, I also used an online copy when writing the article to help me find passages I lost in the hard copy, since I could just hit Ctrl+F & type in the passage I was looking for, rather than flip through thousands o’ pages, paying attention to every sentence. Computer monitors also don’t need to be held open like many books, which is useful for those who like to read while eating, such as gluttonous swine like me.

The 3rd point gets close to the argument she’s obviously trying to make with this article, muddled by the title & the vagueness o’ the rest o’ this article: if one wants to sell a book to big publishers, one shouldn’t publish it in blog form. That’s specific, though. She defends this generalization based purely on evidenceless experience; furthermo’, she admits that there’s exceptions to e’en this specific example.

Also, ¿are there truly people so ignorant o’ the publishing world that they honestly ask, “¿Would it be good for me to release my book online for free, where it’ll compete with any paid version, before selling it to a big publisher? ¿Would big publishers find it professional for me to hurt their sales by doing the equivalent o’ intentionally pirating my own work that I hope they’ll invest money to sell for me?”? I thought that the “no prior publication” condition for selling to big publishers was common knowledge.

& point 4 is just the article writer pushing her own opinion on what makes “good” books & blogs, which may be relevant if one wants to sell one’s book to just Jane Friedman, but not particularly useful for the vast majority o’ writers.

The assumption that web literature—including blogs—must be a “simplified, keyword-driven, ADHD world” is just an arbitrary generalization, & one that, like all the rest, she contradicts herself by noting that books oft do this now, too. This is not a symptom o’ the internet technology, which has no relevance to any o’ this @ all, but to the increasing commercialization o’ literature. It’s what capitalism does to all art: dumbs it down to the lowest common denominator. If she paid attention to book sales, she’d see that most o’ the hard-copy books that sell the best are those that “mimic the online world by chunking the content so the book reads “faster.” It’s certainly not Ulysses that’s on the New York Times bestseller list—though you certainly can read Ulysses online, & there’d be nothing to stop someone from splitting it into chapters & posting them as blog articles, or doing the same for a modern story written like Ulysses.

Maybe it’s that most o’ these articles are written by ol’ people not used to computer monitors, but I don’t have any trouble reading “meaty” literature on a computer screen; & the popularity o’ eReaders & web literature like Worm shows that this isn’t an isolated experience. So I ne’er understood this implicit connection ’tween internet technology, which should be content-agnostic, & simplistic writing.

What I love most is that @ the end o’ the article, she has a list o’ ways blogging books may work, which gives examples such as frivolous rules, like that it be “nonfiction,” “generating buzz,” & “expanding audience,” with 1 li’l point, “solves a problem for people,” being so open-ended that it could include everything. What isn’t focused @ all is that it creates work that people actually enjoy reading or that is actually creative or interesting.

But if you do want to “blog your book,” some guy has some article called, “279 Days to Overnight Success.” I want you to read o’er that title a few mo’ times & savor its juicy paradoxical diction. But then, I guess when you’re “single-minded in marketing” (¿aren’t most in marketing?) & have “the mind and heart of an entrepreneur,” you don’t need to worry ’bout such frivolous concerns as coherency.

But then, this shouldn’t be shocking @ all. ¿You know who this guy is? Why, he’s the very creator o’ our favorite waste-creation facility on the web: ¡Problogger!

Perhaps a better rule for writers than “don’t blog your book” is “don’t write your book like an entrepreneur.”

Posted in Literature Commentary

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 XI

& now there’s a video for “Golden Gear Solid”:

I’ve starkly changed the graphics. For the longest time I couldn’t decide what kind o’ theme I wanted this level to have. @ 1 point I came up with this background made up o’ a bunch o’ Tetris-shaped blocks, but then I came up with the idea o’ making it shadowy black, since people oft associate that with stealth. & since the eyeball guards didn’t really work as silhouettes, I changed them to weird abstract bots, since I thought they seemed mo’ mysterious, ‘specially as silhouettes.

Note that I had to add extra blocks for the diamond & message block, since the originals didn’t work well with this level’s palette.

Posted in Boskeopolis Land, Programming

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 X

& now I have a video for “Bough Down”:

I spruced up the graphics, including finally drawing the rope, giving the Pufferbees animation, & adding dark firs in the background. I wanted to do the last 1 to make the background feel a li’l less empty; but now I worry that the graphics may look too crowded, making things hard to see.

Also, I added the fir background to “Wasabi Woods”:

Posted in Uncategorized

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 IX

Here’s “Rooftop Rumble”:

I should point out that “Dagny” moves faster than Autumn, but her jumps are much weaker. As you can see, the trick to beating her is exploiting Autumn’s superior jumping abilities.

I also realized I’ve been forgetting to add the source code for the last few updates, so here:

Download Boskeopolis Land source code.

You’ll see that I finally organized everything now, rather than just throwing all the source files together & just throwing all the images into bin/Debug. This begged to happen, since I found out I now have well o’er 200 source files. & this shit isn’t e’en close to done.

Posted in Boskeopolis Land, Programming

MENTE PER IL CIBO (COME, COME, COME)

I hate food.

I hate its muddy aftertaste

that prods @ my attention hours afterward,

& I hate my bitchy belly folding into itself for it.

Food is needy & ne’er satisfied:

it demands to be heated @ a precise length o’ time

—not too short, not too long—

but cools much too quickly.

Fuck food.

Posted in Poetry

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 VIII

It’s been a while since I talked ’bout the li’l game-development project, which, believe it or not, I am still working on. For example, I just spent the days trying to fix the mess I caused by stupidly refactoring my inventory code.

In fact, I just fiddled the whole day learning how to parse JSON files through RapidJSON. This allowed me to implement 2 features:

  1. Saving, which is automatic, every time you return to the level select screen & collect a diamond. So, basically, anytime any saveable change happens.

    For those curious, the game currently saves total gems, level beaten, gem & time scores, & diamonds. I also plan to implement health upgrades, ’mong others (which is why, as you’ll see, Autumn’s max health is down to 2 now).

    I don’t know if I mentioned the diamonds yet. They’re just big items that act like DK coins in the Donkey Kong Country series. Like in that game, collecting them is permanent once you get it, whether you die or not. It e’en, as I just mentioned, saves immediately afterward, so if the game happened to crash a li’l afterward, you’d still keep it.

    I also changed to title screen to give a menu, allowing for a new save (o’erwrites save file ’pon next save, though not necessarily on using it) & loading. I’m still thinking ’bout how I’m going to implement multiple save files. Ideally, I’d have a menu allowing for as many files saved & opened as one’s file system could hold; but that’d probably require a menu that could access the user’s documents, & I have no idea how I would do that, ’specially in an OS-independent way.

    I started saving with JSON files, which were hilariously telegraphed & easy to edit so that one has perfect scores all round. But for reasons I can’t ’splain, I spent hours fiddling with writing binaries & shockingly found a way to do it & read it back correctly. I e’en found a way to compress booleans so that there are 8 bools in a single byte… for some reason. I don’t know—’twas interesting. ’Course, it still wouldn’t be too hard to edit the save file to get oneself a perfect save file (hint: change all the victory/diamond values to FF, all the gem scores & the total funds to 7F & all the time scores to 00).

    As you can see, I’m so great @ this game that I can get o’er 2 billion ₧ in every level—so much that it crowds out into the time scores.

    Sadly, this probably won’t become as famous as the “Konami Code.”

    E’en mo’ unfortunate: ’cause I’m a stodgy game developer, I fixed the gem-score o’erflow glitch, so that now you can only have a boring 99,999₧ max score.

    I did think ’bout fiddling with encryption; but honestly, it doesn’t matter, anyway.

  2. Not particularly important from the player’s perspective, but now the program can directly read the level files spit out by Tiled in runtime, which means I no longer have to copy & paste arrays from JSON files every time I make a change to a level.

But screw that. Let’s talk ’bout the exciting news: video footage o’ “Blueberry Burroughs,” as well as “Wasabi Woods.” & “Frigid Frigates.”

I spruced things up a bit in preparation, which delayed things a bit. In addition to the minor changed, like the diamond, the Bad Apples now allowing you to bounce off them like in a true platformer, & the tacky low-res photo background in the sewer section, I added a fence background. Believe it or not, that required me to rewrite the background code so that it could handle non-repeating backgrounds so the fence wouldn’t repeat vertically.

& then there’s the constellation. 1st, note that it slowly scrolls ’long during the whole level, so that the moon is on the right side @ the beginning o’ the level & on the left by the end, rather than looping constantly as if there were many moons in the sky. It’s touches like these that ensure this game won’t be done ’fore I’m 80.

But worse: the constellation background is actually randomly generated when the level’s loaded. This required me to refactor the “background” class so that it could allow other types, such as this constellation type. Logically, this wasn’t hard, since background had a remarkably simple interface: other classes only interacted with it through the common update & render methods, so making a polymorphic system round them was simple. Now the classes are “MapLayer,” “MapLayerImage” for what was “Background,” & “MapLayerConstellation” for the custom constellation. If anything, the only headache was changing the instances in the Map classes vector to pointers to allow for polymorphism. I gave up on trying to get unique_ptrs to work & just stuck with shared_ptrs. ¿Who cares?

Compare & compare.

Believe it or not, the hard part o’ the constellation background itself was not the random-generator, which was easy, but figuring out how to get an array o’ tiles splayed ’cross the screen so that they scroll the right way when the camera moves. After a day or so, I figured out some combination o’ code from the block-generation code & the background code worked.

I don’t feel too bad ’bout doing all that for just this background in the 1st level, since the actual hard part will work for any tile-based background I may want to do. (Think o’ it like the block-based layer 2 in Super Mario World.)

But there’s a much cooler part o’ the video (which, surprisingly, took much less time): what’s being recorded in that video isn’t actually me playing the game. I did play that exact way once, & recorded the inputs every frame &, @ the end, printed those arrays o’ arrays in a file.

The way input is read for the player has been refactored for this. Rather than directly reading the Input class, the player sprite has an InputComponent, which decides how input’s read. For InputComponentPlayer, it’s based off Input’s button presses, like normal; but InputComponentSequence holds the big array I mentioned & feeds it out to the sprite for movement cues, rather than actual button presses.

This, actually, I think is similar to the way the recording & playback o’ inputs for Mario’s movement on the title screen o’ Super Mario World may’ve worked, for those familiar with Lunar Magic & Super Mario World hacking. ’Cept mine’s much mo’ stable, since the sequence is directly tied to the player sprite, which means that whenever the player’s paused, the sequence readout’s paused, too.

There were amusing bugs when I was developing these, mostly caused by an o’ersight I still need to fix: the SpriteSystem creates a new player sprite during every map transition. This is ’cause different maps may have different player sprites, & the sprite system doesn’t bother to check whether the sprite type doesn’t change ’tween maps. This obviously resets all its data, including the sequence readout & recordings. I kludged this simply by making these static.

The 2 glitches were caused by the recording & readout, respectively. @ 1st only the movements for the last map were saved, which I realized without e’en seeing the glitch happen, simply by the smallness o’ the output file. However, the funnier glitch was the readout 1, wherein I saw Autumn get stuck in a loop in the middle map, constantly jumping up & back down the rightmost sewer hole & running left & then back right, seemingly absentmindedly. @ 1st, I was befuddled by how the sequence seemed to go on fore’er. I don’t know why it took me so long to realize that the sequence was simply being recreated ’cause the sprite was, since ’twas caused by the same thing that caused the previous glitch that I fixed so recently.

I do need to see if I can recreate this glitch (should only require making the InputComponent no longer static) so I can record a video o’ it.

There are still some quirks that I can’t truly fix. 1st, since its recording & readout are static, you can only use them once per program run. Trying ’nother level will cause them to continue from after the last level’s end. Also, pausing has no effect on the sequence, which would actually be useful. What I mean is, if you pause while recording, wait any ’mount o’ time, & then unpause, the sequence won’t record the pause @ all: on playback, it’ll act as if the pause ne’er happened @ all & go immediately from before-pause to after-pause. This is ’cause pausing actually isn’t tied to the player sprite @ all, but the LevelState (which makes sense, since it’s not something the sprite’s doing, but a meta command). Lastly, exiting the message that pops up when the message block in “Blueberry Burroughs” is hit requires a human to close it, e’en on sequence-playback. ’Gain, closing messages isn’t controlled by the player sprite, but the created MessageState. In fact, while the message is up, the player sprite isn’t e’en being updated, since it’s back in the paused LevelState. Hence, how the game pauses. ’Gain, though, this doesn’t affect the sequence, since it’s paused during the message as well.

Anyway, this input-recording business isn’t just for fun. As I mentioned earlier, I wanted to have “Rooftop Rumble” actually have a character hopping ’long the rooftops with you in a race toward the end, also being able to hurt you if she touched you. I settled for a ghost that simply floated forward, impervious to the level; but now, I should have no trouble getting an actual moving racer character as I originally envisioned.

I actually expected to have these videos & this article up sooner, if not for a bunch o’ hitches that got in the way—most o’ which took hours to figure out, but were fixed by simple changes (& were, correspondingly, caused by simple o’ersights).

The 1st was figuring out how to record decent video in the 1st place. I spent days recording o’er 2 dozen videos with different video software @ different resolutions. To allow me to configure screen sizes & modes (full-screen vs. windowed) & saving (’cause writing to files causes lag) without having the memory-wasting IDE open I e’en made up some arguments I can put into the console & added code to the game to read these through the main function’s argv array & adjust based on them on startup.

@ 1st, I could get 2 types o’ videos: small recordings that moved smoothly, but I couldn’t figure out how to not be resized blurrily in YouTube, & videos that were sharp, but had flickering all o’er the place. After fiddling with both problems, I found out some vsync flag I put in the renderer @ start-up caused the flickering. Removing it made recording videos work well.

After that & the pointless random constellation, I should’ve recorded the videos; but for some reason, I had the genius idea to refactor the inventory code to split its integrals from the specific window dressing for the level-select & level states (the different UIs o’ those different screens), possibly in preparation for the o’erworld state. I do think the inventory’s cleaner & easier to work with; but damn was this a pain to do.

Worse, it introduced a game-crashing error that seemed erratic & all o’er the place. After a while, I was able to pin-point it to spawning most sprites in the 8th Y-position o’ “Wasabi Woods.” I’m not kidding: it just-so-happened to affect that level as I wanted to record it & in such seemingly specific places. While most sprites caused the program to crash immediately while entering the level, including the spiky-fruit that was s’posed to be there, the rope & cracking ice cubes worked fine. The hydrant would only cause a crash ’pon waking up—according to my debugger, caused by a method call in its timer. Most o’ the time my debugger wouldn’t give me any info beyond ?s.

This unpredictable behavior could be caused by a simple error I made, which seemed to have nothing to do with this level or these precise values, but had to do with the code I changed for the refactoring, as I thought it should: in simplifying the inventory code, I pushed out its LevelSelect-specific code into LevelSelect, since it didn’t have much, anyway. But I did still update stuff specific to inventory. In moving stuff round, I put the inventory-updating call @ the end o’ the LevelSelect update method. Unfortunately, this violated a rule I made for myself that I apparently keep forgetting: it went after the code that handled changing game states, which meant that the game was deleting LevelSelectState & initializing LevelState, & then somehow returning to the update method in LevelSelectState & updating an inventory that shouldn’t exist. Logically, the game should’ve crashed whenever I entered a level, but for some reason it only broke ’pon entering 1 specific level with most kinds o’ sprites in the 8th block y-position on the left half o’ the screen.

There was also some crashing & slowdown in the cart & stealth levels, but I fixed that earlier: turned out I was testing block interaction for (& trying to render, though that didn’t cause any slowdown, surprisingly) sprites that weren’t on-screen; & since those levels had a lot o’ sprites, ’twas memory-intensive. Now that’s fixed & the levels work normally.

I’m sick o’ all these programming distractions & will be focusing mo’ on designing actual levels & art for a while:

I think “Soupy Sewers” is done ’nough that I can show it off, so expect a video for that soon, once I clean it up a bit. The level still has quirks—mainly the end, which has a truly lame section. Also, a wacky glitch with an enemy. Maybe that’ll be funny to show off.

I also hope to finally get round to drawing a cart sprite so I can show off “Hot Shop,” which is pretty much done, ’cept for the art, which is still quite rough.

I also have 2 sky levels that are still in alpha stages: 1 has you as an owl who can flutter all round, & will involve navigating a bramble maze; the other is a coin heaven where you have to collect all the gems to win. In that level you ride a moving cloud platform, & the level loops infinitely.

I’ve also been thinking ’bout what to do ’bout a map screen. I have decided, a’least, that it’s going to be a free-moving o’erworld (think like Super Mario 3D World, as opposed to the locked paths o’ Super Mario World or the Donkey Kong Country games). I don’t remember if I mentioned it yet, but 1 idea I had was to have an o’erworld like a Zelda game, but with 2D platformer levels ’stead o’ dungeons; but part o’ me thinks that’ll only add too much complexity for a novice game, & that perhaps I should set that aside for a later project, when I have mo’ experience. Plus, it may get in the way o’ the “Spiral” idea I know I mentioned already.

Posted in Boskeopolis Land, Programming

ENKONTRÓ UN JUERGUISTA DIBAGANDO MOLESTO

Un día kamino por la kalle.

Fue una mentira–

Nunka kamino por la kaye.

¿Ké tipo de persona loka

kamina en el sentro de la kalle?

En realidad, kamino por la asera,

pero prefiero desir ke kamino por la kalle,

porke me siento más jugoso,

y me gusta jugoso.

Bueno, mientras estoy kaminando por la asera,

bi un koche–

en aktual, bi muchos.

Pero, dudo ke se importe.

Nunka se importa lo ke dicho…

¿Por ké ablas así?

Posted in Española, Poetry