Posts

Showing posts from August, 2022

Implementing Pushey: Eggerland's Namesake Mechanic

Image
The Eggerland and Adventures of Lolo franchise draws much of its rich puzzling from the ability to push eggs and emerald frames. Snakey becomes mechanically interesting once you account for the game’s pushing mechanics, so let’s finish Snakey and do the pushey-push thing. B efore we begin, let’s go through some helpful context. Normally the ground doesn’t move much and that simplifies the code for standing on it. Programming challenges start to appear when mobile entities start standing on each other and pushing each other around, challenges that many games sidestep or don’t implement at all . We can’t just sidestep pushing for Eggerworld because pushing is a pillar of Lolo’s arsenal. Lolo can push a single egg or emerald frame as long as there is space for it to be pushed into. Once the pushed thing bumps into any obstacle, further pushing in that direction becomes just as immovable as any rock. FYI, each entity in our code is responsible for its own movement in its own update() meth

Implementing Snakey

Image
Snakey is a complicated beast, just standing there... menacingly . This one’s gonna be a doozie, so join me and we’ll embark on the most perilous implementation yet.

Mini-update 3

Image
This simple puzzle we’ve been sharing periodically is now a real, fully-solvable puzzle! Check out this video of us playing it: There’s still much to do, but we feel good about delivering some real value here. We still see demand for Eggerland and Adventures of Lolo content; streamers like Ugblut the Orc still dust these games off and play through them. You should check out his Twitch stream to watch him play through Adventures of Lolo 3 as well as other awesome games. This does mean we’ve prototyped mechanics for entities to push other entities around. Expect to see details on that in the next blog post. Stay tuned!

Choosing a Data Structure for the Game World

Image
We’re constantly refactoring our code behind the scenes, and as far as I’m concerned, that’s okay. You know what? It’s not just okay, it’s an excellent strategy for this project. I generally advocate for the leanest code to solve the most immediate problems. The code will grow and change as needed once we learn more over time. I’ve seen so many developers try to guess every wrinkle in the face of legitimate unknowns, and the most common results I’ve observed are analysis paralysis and overengineering. I think it’s usually more important to just get it done than to do it perfectly. This is how I picked a data structure for entities when putting Lolo into a puzzle room . Honestly it wasn’t a profoundly consequential decision (a two-way door) so I just picked a LinkedList and moved on. And yet retrospection is foundational to growth, especially in creative endeavors. So now let’s revisit that data structure through the lens of what we’ve learned since. At a high level, we’ve tried to ke