Post

🐱Hey Farbs, whatcha making? 🧔Hi! I'm making this! 😼But Farbs, that's the incredible neon laserfish shmup Death Ray Manta SE. Rob made that already. 🧔That's true, and it's very cheap so I sure hope everyone has already bought a copy. Also, I'm making it again. 😾No! Bad Farbs! I want new games!

🧔I'm making new games. Also, at night, I'm doing this. 🙀Wow! Can you explain why? And can you maintain this conversation shtick? I can do one of those things. Sometimes I like to rebuild other people's games. For me it's a bit like doing a master study, and it's a bit like a jigsaw puzzle.

Previously I've rebuilt chunks of the first Zelda game in various forms of 3D, I've made Pong a whole bunch of times, and I recently had a go at pacman. Oh and of course ROM CHECK FAIL was made from chunks of about a dozen games. Building these helps me pay attention and learn what they're doing.

Also snapping the pieces into place is satisfying, and it's relaxing to build stuff without designing it first. Anyhow, that's what I'm doing with DRM. It's not for release, but it's interesting and fun, and if I remember I'll add to this thread as it comes together! Meanwhile: Another 3D Zelda.

The tech underpinning this port is the wonderful #RayLib, on top of which I've jammed a custom lua integration and everything I need to run a Meandering Thread of Execution. I love the Meandering Thread model, and if you're curious you can learn about it here: mastodon.social/@Farbs/11267...

mastodon.socialFarbs (@Farbs@mastodon.social)Attached: 1 image Now let's get to the fun stuff! Taleteller is my first project to use what I'm calling a Meandering Thread of Execution. Most games have a single update loop (eg pictured). One or...

Are you back? Welcome back. The other thing I'm using, as very detailed reference, is the Death Ray Manta SE source. Rob supplied the whole Game Maker Studio project file in the install folder, which is a wonderful thing to do. My tech takes a simpler approach and only ever runs from source :)

So anyway, source! Rob provided it, but it's from a slightly older version and I'm picky so instead I've found a ridiculously comprehensive GameMaker decompiler - delightfully titled UndertaleModTool - and I'm using that to snoop the current Steam build instead.

Today's progress is this! I added the big chunk of text at the bottom, which updates every few seconds to show the next paragraph. The blurry effect around the edges is the result of drawing multiple layers with different rotations, which was a bit of a pain 'cos RayLib doesn't do text rotation.

I solved it by moving and rotating the camera for each one, but that means every layer of every line of text is a unique batch, which is a bit poo. Oh well. Runs fast enough. Hooray for modern (ten year old) hardware. Now on to the game itself! Except... what's that? Oh. Oh no.

I'm not quite sure what qLw means, but I'm reading it as "Hey Farbs you need to sleep". G'night!

Pottering along, I've hit a bit of a conundrum. One of the reasons I'm doing this is to learn where, in this game I adore and admire, the balance lies between polish and just leaving things rough and moving on. However... to do that I'm copying the game as closely as possible. So...

...in my quest to learn where to take shortcuts I'm not taking any shortcuts. So am I learning anything?! Anyway, this toot brought to you by me wondering if the player spawn is off-centre for level 3 on purpose, given it's perfectly centred for literally every other level in the game.

Lol. I just spent the morning writing a little system for specifying game object locations via GNU Image Manipulation Program, so I could set the player spawn correctly for each stage. Then I started porting the Player class, which starts with x = room_width / 2; y = room_height / 2;

Oh hey look! I'm learning things again! Usually when I make a 2D game I'll have 3 or 4 categories of things that appear in the world - players, enemies, bullets, particles etc - and I'll create a collection for each and draw them in the order I want them to appear. That... might not work here.

As illustrated above, the very excellent Death Ray Manta has many many many layers of particles and effects and flashing doodads, and when there are that many the order you draw them in becomes rather important. But I like to render immediate rather than retained, so, uh, my tech can't do that. 😶

The title screen wasn't a problem because most of the art is on screen all the time, and drawing it all from back to front in a single function meant the code kinda matched the layout. I mostly didn't use the GameMaker approach of Objects and Sprites 'cos it was easier to blat things out in a loop.

So... what do I do about the 29 (yes, I counted) different depth layers in the game screens? Do I make and manage 29 object pools? Do I accumulate and sort render requests every frame? Do I use MSAA, Alpha To Coverage, and Z-Buffering? (No that would be shit). I think what I'll do is sleep on it 🙂💤

Hypnos, it seemed, had other plans. One utterly shit night of insomnia later, I've discovered the problem of efficiently rearranging hundreds of objects across dozens of overlapping collections as you iterate them is A Bit Difficult Actually.

So I spent today pondering changes to the Lua lexer, rebuilding my vector maths class, puzzling over garbage collection interception, and writing custom iterators. I think I can see a way out of this mess and back to making games. But first, hopefully, sleep.

0 reposts1 like

The answer was object pools, but with a nice system that lets me just do things like Doodad:spawn() and self.doodads:callunsafe("draw"). One of the things I set out to learn with this is how Rob makes it seem like there's so much going on. I think the answer is: There's a lot going on.

That screenshot, from my remake, has five different particle effects, the manta is doing a colour cycle animation, and the player just recovered from a 10 frame colour invert flashbang. What really shows Rob's commitment to SO MUCH STUFF though is this...

Here's the same part of the sequence, in the original. Once the whole thing is put together most of it is barely even visible 🤯 I love it. There's just so. Much. Stuff.