Making

Whatever Alexander's working on, shared informally.

Major Redesign (Is Going To Help Me)

I'm enlisting, ov- okay enough of the XTC jokes. The great benefit of being a team of three is that if someone (me) wants to do something silly (completely redesign an upgrade and change how our weapons system works) than someone (me) can just do that and within a few hours we can see if it works.

Area 4 is really the problem child of BLIGHTWRECK. When we took our first stab at it almost two years ago (dear god), we bit off wayyyyy more than we could chew, and the end result was pretty underwhelming. This version of Area 4 was based around a now scrapped dash upgrade; you'd press a button and start sprinting. This was a carryover from PSYCRON 1, but ended up creating a bunch of different problems:

  1. None of the previous three areas were designed around having an upgrade that lets you move at double speed. When you dash outside of Area 4, you're likeley to either hit a wall or an enemy. This was also a problem in PSYCRON 1, but that game was incredibly short and also like $7 so nobody cared.
  2. In PSYCRON 1, the dash was awesome because it let you run on acid. We are underwater in BLIGHTWRECK. The closest we can get to that is letting the player run on top of crumble blocks. This is neat but nowhere near as cool.
  3. Because running didn't make you invincible, enemies suddenly became way more hostile.

Oh man, that sounds awesome!

Good afternoon Mr. Mondo! Is there something I can help you with?

Hi Edo. I was just thinking, this dash upgrade would be pretty useful. I've had to do a lot of running around.

Hmm, yes, but wouldn't your legs tire out? You might be better off with a bike.

That's not a bad idea...

For all these reasons, the dash was scrapped. Which presented a problem, if all of Area 4 is designed around the dash, what do you do when it's gone? You redesign the entire area.

The dash got shitcanned, because it sucked. But now we were one upgrade down, and you can't have an entire area carry itself on just one upgrade. So, we canibalized an upgrade from the final area, and introduced a different kind of movement upgrade. I'm trying to keep it secret cause I think it's pretty cool. I'll probably end up accidentally revealing it at some point though.

That wasn't the only thing we nuked though. In BLIGHTWRECK, you find a charge gun, a split gun, and a third gun. The third gun has changed around so many times that I actually can't remember what it's original design was. I think it was supposed to be some sort of sniper like bullet, that'd shoot slower, but do much more damage? This sucks for obvious reasons, because something already exists in the game to do that, the torpedo.

Okay, so how do we have this not overlap? Well, lets have change it into a split gun, so when your projectile hits a wall (or an enemy) it splits in half. This lets you introduce angling puzzles and all sorts of silliness. Except this also sucked! Its use was way too situational, and you end up in a Metroid Prime scenario where you just end up sticking with the default lemon blaster.

There was another problem. Beam switching sucked. Switching between the default blaster and the spreadshot was okay-but-not-great; adding a third weapon into that mix made things even worse, because you either have to have a quick swap to the appropriate beam (I'm calling them beams now), or you have to toggle through all of them. Matthewmatosis mentions a problem similar to this in his Mario Sunshine review and I think it's an excellent one. I was talking about this with Henry when we both came to the same realization. Why don't we just have beams stack? I tried it out and sure enough yeah it kicked ass, solved all our problems and made the game way simpler to control. This still left us with the problem of the split beam and how much it still sucked lukewarm cheese. The answer was simple: diffusion missiles.

Yes! We're bringing back the upgrade widely regarded as Fusion's weakest!

We don't want beam switching, but we do want a weapon upgrade. We don't want to have to redesign Area 4 (again). Letting you charge your torpedos and augmenting their ability seemed like a natural fit. Henry mentioned not being a fan of Missiles and Supers being different weapons, and I agree with him. So, we let you charge your torpedos, and when they hit a wall, they split off into individual projectiles. The result:

This is completely missing sound treatment, and maybe its behaviour will change a bit more before release, but as is, I'm pretty happy with this. Yesterday and today were a lot of work on weapons mechanics. Tomorrow might finally be the day I tackle playtesting the back half of Area 4. Will it work? Will it suck? I dunno, you'll have to play the game to find out :P

April 30th, 4:10pm PST | #blightwreck #area4 #torpedoes #game_design

Oh shit have I been doing this wrong the whole time?

Ever get that feeling? Gulp. So, had a fatal error today while working on BLIGHTWRECK. Unfortunately, when the game crashes, the editor also crashes, cause the editor is baked into the game. There's nothing more annoying than going to test a level, and getting a game crash. Anyways, my point being, the game crashed, and it happened right here:

While trying to capture this screenshot, the same bug happened again, and the game crashed, again, making this my third time running through this loop.

My first thought was, this is a problem with the platformer controller. As part of slope collision detection, the platformer component that powers the Player, several bosses, and several enemies uses a tile's ID to index into an array of slope heights. What happens if we get a tile outside of that range? Crash! This is extremely brittle, but also means that everyone (mostly me, because I'm laying stuff down) keeps the solid's layer extremely clean. Or, this used to be extremely brittle, cause I ended up adding in bounds checks after one crash too many.

Unrelated, I'm currently listening to "Must Be Wrong" off The Rentals' Seven More Minutes. What a fantastic song.

What do you think of The Rentals, Mr. Mondo?

Hmm, well, they're a bit peculiar aren't they? Their line up keeps changing, and none of their albums sound anything alike.

I think it's fun. Each new album is like a box of chocolates; you never quite know what you're going to get!

I'm more of a fan of weezer myself. I like their song 'Feels Like Summer'.

I see. Knowing you, that makes quite a bit of sense!

What?

Okay, so it's not an index error. Let's take a look at the log and seeeeee-

I should use the code block integration I set up. Ah well, too time consuming! Do I use too many exclamation marks?

Hm, a casting failure? So, my assumption was you could cast anything to anything else, and if the cast failed, it would return null. Turns out it just crashes. Whoops! This was a pretty simple fix, but was a good reminder that there's always more to learn. Even if you think you understand casting class semantics, there's always gonna be that one clam (literally) that ruins your day.

April 20th, 12:26pm PST | #blightwreck #crash #doofus

A royal pain in the batch

Shapes are primitive. Literally, they're primitives. In BLIGHTWRECK, this means that most things that are shapes are drawn in a completely different way to sprites. This means, when we wanna swap from drawing lines, points, circles, or rectangles back to sprites, we have to "flush" all the existing graphics data out so its rendered properly. This is probably not the most correct process, but the game is so far along at this point that I don't feel up to rewriting low level rendering logic.

Earlier this evening, I was working on the fifth area of BLIGHTWRECK, which is TOP SECRET!! Nobody is to know about what's in it, or what it's like!! Except for you! Faithful reader! Reading this blogpost!!! Anyways, fifth area, yadda yadda, this area is DARK. Not quite as dark as Area 3, but DARK nonetheless.

Some of the darkness from Area 3. Now, imagine this, but spookier and you get Area 5. Now stop imagining it, because like I've already told you, Area 5 is top secret!!!

So I was working on this mystery area, and running into a problem. Seemingly randomly, in certain rooms, the spotlight around the Player would glitch out, like so:

What the lights look like on a "bad" frame...
& how they're supposed to look.

What the hell was going on here?? This was infuriating to debug, because I'd seen it happen occasionally in the game's third area, but could never reliably recreate it. Stumbling into this room and seeing it happen fairly regularly, this seemed like my chance to squash it once and for all. Thus begun my debugging process:

Question 1. The opacity's changing, is this a new light being instantiated and destroyed?

I first tried hooking up a number of tests/checks/conditionals to make sure the offset light we were seeing was the same one the player instantiated at the start of the room. After satisfying that it was, I then noticed that other lights in the scene were suffering from the same issue. Blllaaaaaaaaaaaaargh. This problem was bigger than I thought.

Question 2. So are the lights actually moving?

Okay, so all of the lights randomly jump to the right? What's causing this? Are they physically moving? I ran through some tests trying to figure out what individual lights were doing, but realized this was a waste of time; the Player's spotlight light is static and only destroyed at the end of a scene, so let's hook up to that instead. And the debugger reported... That it was remaining completely stationary. Despite looking like it had physically shifted, its draw call was coming from the same place. Hmmph.

Question 3. What makes this room so special?

The problem didn't seem to be with the lights' positioning themselves, so I started to wonder what in this room was reproducing this issue so consistently when others weren't? In this specific room, there are:

  • The player
  • Any bullets the player spawns
  • Particles that fall from the ceiling
  • Reactive complicated draw volumes on the floor

Now, the keen-brained amongst you might've twigged at "complicated draw volumes", but there was a more obvious angle I wanted to try first. The ceiling particles would make a sound on hitting the ground/draw volume, and that happening seemed to coincide with the bug. So, first test, disable the particles.

And that fixed it! Yes! Problem solved! Okay, lets look at their drawing code and see what could be going wrong here...

Cool, okay, literally nothing lmao. Short of a completely empty Draw event, there's nothing remotely conspicuous going on here. We draw a singular pixel. Okay, so, let's take a look at-

Question 4. Maybe it's the complicated draw volumes?

Excitement! Suspense! We've gotten to the mischevous draw volumes. Let's crack open their draw code, how bad could it be?

"I can't read that!" Right click, open image in new tab.

Okay, lots of potential problems. Lets start with a nuclear solution, what happens if we just turn the entire draw event off?

The problem's gone! Woohoo! Okay, so to cut a very long story short I tried disabling the shader calls, the render target, the drawing sprites tiled-edly (this is more expensive than you'd think for stupid reasons, the stupid reason is me), but none of them solved the problem.

It couldn't possibly be the line drawing for the surface of the volume, could it?

... it was. But what?? I mean I know primitives are stupid, and dumb, and annoying, but what've they got to do with the light system which also renders entirely with primit- oh.

Answer: It was the stupid primitive batcher I set up

When you draw stuff, you do it in batches. If you have 50 friends, you don't ask them one at a time what kind of beer they want, order one, then ask the next person, you write down what everyone wants and order all at the same time. Graphics is sort of like that. Instead of telling the GPU "draw one line!" then running away to find out what the next line we want to draw is, we give it a big list of lines.

But what if mid order, the brewery shuts down and you have to go somewhere else? All those old orders will be wrong. Sure the next place might have an IPA, but maybe its a shitty one, thats more sour than beer. You don't want that, you want a clean break at the old brewery, and to have all the beers that were ready then, delivered.

I have this set up correctly for sprites, where if the texture we're targeting changes (ie, switching from the game window to the HUD), all the sprites queued up to be drawn are submitted and drawn to the correct texture. But I don't have this set up correctly for shapes. Once enough shapes/sprites are drawn, a batch is automatically submitted, because no GPU/brewery could process over 50 orders at a time, so this meant that the beahaviour was usually consistent. In this one room however, there were lots of tiny sprites (remember those tiled draw calls I mentioned?), and lots of primitives, so this was just heavy enough to trip the condition where the batch wasn't quite reset properly. The fix?

Minimalism is the spice of life.

Yeah, just force clean out the batch. There are better ways to do this, but this is fine for now, and wouldn't involve me potentially screwing up how other chunks of the game render. To be honest, I'm not entirely happy with this solution, its very hacky. The option's there should I want to fix this properly. For now, the player is spotlighted correctly, in all their glory. I'm going to sleep. My throat hurts.

April 12th, 11:39pm PST | #blightwreck #area5 #secret #rendering

And I Can Whitebox 500 Rooms

As of this evening, I whiteboxed out the final room in Area 4 of BLIGHTWRECK! Nothing is tiled, everything is unbalanced, and most of the scripting is broken. But it exists! This technically leaves just one area left to mesh out, but it hardly counts. Final areas are always easy. Ever played Super Metroid? Think Tourian.

Avert ye eyes! The map has been blurred to preserve the surprise, and because raw map tiles are wayyyy too explicit to share on this PG website.

Unfortunately I have a test on Thursday, so I need to end my BLIGHTWRECKING earlier than I'd planned tonight. I only got an hour in today, but an hour more work today is an hour I won't have to do in a week. Incremental progress, is still progress, never forget that!

Hold me accountable by watching my streak on makeswierd.art and bullying me in the chat there if I miss a day. Alexander out!

April 7th, 9:01pm PST | #blightwreck #area4 #progress

The Best Room In The Entire God Damn Game

People are not ready for this. This, right here, dear reader, is the best idea I've ever come up with. It's hilarious, it's scary, it's an interesting gameplay twist, it's everything you could possibly want in a BLIGHTWRECK. AND, it's in a chase sequence! How exciting!!

Okay, without further ado...

Look at this. Bask in its glory. Internalize it for when you run across it in-game later this year (gulp).

Okay, this might not look like much, but just you wait! It'll blow your god damn mind! Or, alternatively, maybe I'm getting excited over nothing. This room's gonna have an amazing gimmick you won't see coming.

I've said too much, off to the pub!

April 6th, 5:19pm PST | #blightwreck #level_design #crazy #mondobrain

Six years

I've been in the same room for the past six years. In March 2020, I came back early from a vacation in Iceland because I thought I was going to get locked in the country for a couple weeks until the whole COVID thing blew over. At the time, I was also in the middle of developing PSYCRON.

It was taking a bit longer than I thought it would to finish an entire videogame. Queue an entire career of underestimating how long things will take me. "Career", when I've only been at this seriously for the past six years. lol. Anyways, all this got me thinking about how much things have changed, how they haven't, and some other third thing I'm not quite poetic enough to put my finger on. I could've left it at two, but threes sound better in writing. Don't ask me why.

I think I find myself at a similar spot in BLIGHTWRECK's development. It's nearing the end, but simultaneously there's still about half a mountain to climb. That's not to say the game is only half finished, but these things don't work linearly in game development. The last 10% can expend 90% of your energy.

Communities change, people change, friend groups rotate. Things are always constantly shifting, constantly in flux. Nobody really knows where they're gonna be in a month, a year, or a decade. I find myself very fortunate that I feel like I know at least my approximate trajectory. Some people never figure out what they wanna do. I think I've got that sorted. Then again, I thought I had everything figured out at 22. And 21. And 20. And 19. And 18. And so on and so forth.

"The only thing I know for certain, is that I know nothing."
- Shigeru Miyamoto

In some ways, it feels odd to still be in the same room. I've slept, ate, worked, and partied all in this tiny little basement room. I've probably spent more time at this desk I'm sitting at now than anywhere else in the past six years. That would probably drive some people crazy, but this desk is where I've made entire digital worlds, wrote songs, talked into the small hours of the morning with friends in different timezones, countries, and sometimes continents.

Life is good. Life is stressful, but in general, life is good. I had a nice lie on the floor a few days ago. Not because I'm morbidly depressed or anything, but because it's cold and strangely comfy. I'm pretty sure its filled with mold, which would explain the spring-y feeling. Too much introspection is bad for the soul. Time to go make a cup of tea.

April 6th, 12:02pm PST | #blightwreck #psycron #old

Smeeeeaaaaaring

Sometimes you have to really muck around with your rendering engine. Sometimes, the rendering engine mucks back:

The definition of "good enough". Don't ever let your professors tell you everything has to be infinitely extensible, kids.

Several problems here:

  • An alpha test is failing in a shader, causing a circle on the screen to not update
  • Despite having its parallax zeroed, the background isn't aligning correctly
  • This scene requires two (kind of) full passes, and the second pass is occluding all the actors
  • This may indicate a fundamental problem with how an entire Area of BLIGHTWRECK has been set up in terms of art/visual pipeline. It's probably fine. Probably.

I was originally going to title this post "Holes Holes Holes", but I opted not to because I hate that movie and it sucks.

Update (5:18pm)

Hmmph. More of a pain in the ass then I thought. I wanted this room to have some "blight goo", this weird, texture warpy stuff that covers walls. But this effect is pulled off through a shader and some weird draw calls, meaning that part way through trying to render the actors layer, the game gets confused, and stops rendering to one of the bespoke render targets. Oops!

I had a brief ponder about ways I could fix this. These are (sort of) two separate incompatible render passes, as they're both a hacky way of doing post-processing in a game and engine really not set up for post-processing. Maybe the two actors could co-ordinate? Communicate that a two layer render pass is happening, and a handle to the background surface needs to be passed around so we can maintain context?

Scope Hammer! We'll just do a texas switch and hard swap some layers/vfx in after a certain flag is set.

March 31st, 3:44PM PST | #blightwreck #sob #bug

How many rooms are filled with Torpedoes?

BLIGHTWRECK has a lot of scenes... I realized this as I was staring at a map of area 4. This got me wondering, exactly HOW many?

The definition of "good enough". Don't ever let your professors tell you everything has to be infinitely extensible, kids.

Thanks to GeeksForGeeks, who I incorrectly attribute in this screenshot as W3. I cribbed some Python code, and hacked it into giving me only the directories I really cared about. In case this all reads as visual noise to you:

Yeowza! That's a big number!

Have I really made that many rooms? BLIGHTWRECK is decently sized, but I wonder how this would stack up in comparison to PSYCRON...? Well, thankfully I still have the source code! Let's take a look...

Five years... has it really been that long?

I've got a list of rooms here (thanks GameMaker for throwing them all into one big directory), so one regex expression (ie, rm_a\dr\d+) later and we get a grand total of...

Drumroll.....

...

...

.

204! 204 rooms! So we've already passed PSYCRON. Going by numbers alone, this means that BLIGHTWRECK is at least 134% better if you only care about quantity. This isn't including all the other rooms I still need to make for Area 4, and Area 6 though.

Who knows, by the end of development, we might even be 150% better!

March 29th, 1:54PM PST | #blightwreck #psycron

The Fish Hallway

Part of designing BLIGHTWRECK involves a lot of thinking about levels. Sometimes, I have to really stop and ponder. How does a level in thematically? What's its intent? What will it be like to traverse with different sets of gear?

Other times, you just need a hallway filled with fish.

Glub. Screenshot taken from SZNZ (our level editor).

It's a neat little distraction. Area 4 is very "stimulating", so sometimes its nice to have a room where you can just chill with the fish.

Spotlights! Looking at this screenshot makes me wonder if I should raise the ceiling and lower the floor so things are centered a little better...?

Right, enough distractions, back to the fish!

March 27th, 11:45AM PST | #blightwreck #level_design