Archive:

Subscribe:Atom Feed

"Lumo Journal: Week 73"

Posted: 04 November, 2024

Lumo Journal

04.11.2024

It’s always the things you think’ll be easy…

The Jukebox needs a list of clickable names, one for each of the collectable Boombox tunes, and each of those needs to reflect if it’s been collected or not. Simple. A scrollable list box, populated on the fly, with dynamic entries. Not a problem in UE5, but is CommonListView documented anywhere? Er, no. Is it fuck.

My guess: create the entry, add it to the list, then change the text? Nope. Each entry needs an intermediary object, containing a struct of data that it pulls from. On the plus side, editing those intermediary objects automatically updates the list entries. On the bad side, that took me 3.5 hours to get working. And I can’t even play a tune yet.

What. A. Day.

05.11.2024

You can play tunes!

It’s not perfect, I would have preferred to run the music through the room’s reverb volume, but you can only play UI Sounds when the game is paused, and those (seem) to remain 2D and dry, not matter what I do. Really doesn’t sound as nice, but it’s good enough.

News! Wil Overton’s agreed to do the key art. He did such a wonderful job on the first game that it wouldn’t have felt right if he didn’t do the art on this one. So I spent an hour videoing a play through so he can get a feel for it, and spotted a load of niggly little bugs that I need to fix…

06.11.2024

Those bugs were too annoying… Fixed everything I saw yesterday, plus everything on my bug list. Most of them were pretty minor, but it’s better to get them out the way now, rather than in January.

Lesson of the day: you do not want a bug in a blueprint that only happens in packaged builds. At least with C++ you can attach the debugger to the running game and set a breakpoint. Blueprints? Have fun with those print strings, and making multiple builds until you track the damn thing down. Facepalm

This week’s been far too slow… Why do all my bugs take 10 minutes to reproduce!

07.11.2024

Current Gareth is very happy about Past Gareth’s choices…

I didn’t have a lot of time today, so I thought I’d spend it by writing console commands to dump state, and validate some of the things in the world. The most important thing being: the paint pickups.

I’ve always had a feeling that this was the one area where a slightly dodgy setup in the editor could create the sort of bug that would be an absolute bastard to find; like, say, there’s an achievement for collecting them all, and it fires early, or, uh oh, it doesn’t fire at all… (Bastard achievements) I’d have to crawl through every pickup, and work out if it was set up correctly…

So I wrote some code to do a brute force check; make sure each was referenced once, and only once, by a single RoomController.

Worst fears confirmed!

I had to cheat a little. Paint pickups effect attributes on the player’s state – but they’re not the only thing that does, Wand Charges do, for example – and there wasn’t an easy way to pull out the attribute that was being effected, and filter against it. But… I use DataAssets to swap out the effect and the visual stuff (meshes, materials etc), so that Past Gareth could make a single blueprint to act as the base for all the Paint pickups in the game (even though they’d look different in each level). By adding an empty interface the Data Asset, I could then filter against it in the code. Hacky, but it did what I needed.

Annnd, TIL: there’s a lovely macro, ENUM_RANGE_BY_COUNT that lets you iterate over an enum, via a template, and a built-in way to convert the entry to a string. I use enums to set & test bit fields all the time. These let me iterate over them, and dump out their current value to the screen. Bosh.

I could really do with a way to teleport to a specific room, and probably a couple more cheat commands to set the level to a specific state. There’re a few events that take a while to do and those have been slowing me down when I’m trying to reproduce a bug… I’ll cogitate.

08.10.2024

Ah, managed to break the fan blocks room. You can be in a trigger for the Screw and a Pushblock at the same time… Things go brrr. The proper fix for this would be to work out which direction the player is facing, see which object was closer, and do some jiggery pokery in the code to make sure the object the player wanted was the only one to respond. The “I need to ship this” fix: change the environment so you can’t interact with two objects at once. Hurrah!

Made a black hole that sucks the player toward it.

Previous Post: "Lumo Journal: Week 72" Next Post: "Lumo Journal: Week 74"

Friends:

If you like any of my work, please consider checking out some of the fantastic games made by the following super talented people: