Home Artists Posts Import Register

Content

Today, we dig into the display code, and learn to have a better overall approach to building a game.

I have a coding stream starting in an hour! If you miss the stream, VODS are also available. ('Videos' tab at the top.)

To new patrons: We’re in the middle of an absurdly-long update cycle. Here’s the summary and how to access content.


What's being worked on?

A detour into display logic

If I could sum up this week’s work in a word, it would be “Argh”.

So I’ve talked about the stimulation/sensation chain a lot. The final step of the chain is Actions: abstract things like “squirm” or “blush” that happen on the state side of things (as in, not the display side). These are simply represented as data. For the player to see the Action take place, it needs to be converted into a Concrete Action. That would be an actual animation (e.g. “pony_tall_squirm_weak”).

This is all still in data, not code. Observe.

Abstract action list. All Actions of all npcs/AI in the game start as a declaration here:


Behavior definition. The npc is given a situation, then told what action it will take in that situation:


Concrete display information. On the animation rig, the npc’s action is given animations, sfx, and whatever else it needs to display an abstract action:


Uh oh

It seems good so far, but now we’ve got a sudden and annoying problem. All of the code that reads display data has a core assumption built into it: we know who, why, when, and where this data will be coming from, and what we’re supposed to do with it. 

The Actions data breaks that assumption. Any npc, and even items like toys and clothing, could have any Action built into it, and that Action could have any form of display data. Meaning that we need to be prepared to take in any form and any amount of display data suddenly, dynamically, and without much context, and then turn that into a reliable output in the game.

Fuck.

Immediately, this exposes a weakness in the current display data code as a whole. I mean, if I’m gonna have to build a system that can use any form of display data from any source at any time… why not use that new system for literally everything everywhere? Why have a second set of display systems? The answer is “because I didn’t think of that and now I’m sad”.

So you’ve probably guessed where this week has been spent.


The Display Event Buffer

Or… Message Queue? If you’re interested in the concept, start here. Basically, I want all the display-specific commands to be sent into a buffer during a game tick. At the end of the tick, the display system reads through every command in the buffer, and executes them. Simple enough in concept, but enough to melt my brain a little.

I’m still in the middle of building this and it’s challenging. The more I build it, though, the more I think it’s a good thing I ran into this problem now, before building too much more. Just gotta reroute some things, and acclimate myself to this new pattern, and the display side of this game will be a lot easier to build upon in the future.

I’m still grumpy about it though. I thought I had the display code figured out. I should’ve been more aggressive about pushing through to the Actions portion of the Stimulation chain, and gotten a vertical slice built. Then this would’ve come to light much quicker. Live and learn >.<’


TED talk: Process, motivation, and what it takes to succeed as a lewd uwu pony developer

Take my teachings with a grain of salt. I am still learning.

The primary point of success or failure for a project like this is process. The code technically working is only a temporary victory, and only the first step in making it a worthwhile project. If the code works fine, but requires you to do an extra couple of steps to interact with it properly, then it’s like you’ve just added a couple of heavy rocks into your pockets while running a marathon. Your earlier victory is now your burden for the rest of the project.

Early on, I had no idea just how impactful those burdens would be. Getting things to just technically work was a huge undertaking. Each feature adding more complexity and more steps to my process just seemed inevitable. It sank the entire project, and now we’re rewriting the damn thing.

I’m not 100% sure this was even avoidable. A lot of the wisdom I have now about process comes from hindsight and experience. A beginner doesn’t know what their process should look like and can’t effectively plan ahead for it. But I do think, even as a beginner, you can get a lot further by just taking a step back in the project and asking “how many times am I gonna interact with this feature I’m making?” If it’s a lot, then your top priority ought to be making sure that it’s built so you can easily interact with it, even far in the future when you’ve completely forgotten about its specifics.

There’s value in this outside of programming. I structure my life this way as much as possible. Things I want to do a lot aren’t put away, but set out, prepared with space to use them, and with everything pre-plugged in. Adhd is a killer of motivation. You can’t rely on some kind of inner drive to make you act the way you want to. Instead, you’ve got to find ways to trick your mind into latching on to worthwhile things, like skill building and passion projects, rather than pure distractions. Structure and careful design of my surroundings are my substitute for motivation.

I suspect neurotypical people would benefit from this too. Motivation is fleeting. Good habits and a well-designed process override the need for it at all.

Thanks for coming to my TED talk >.>;


… and that’s all for now!

The challenges this week were rough, and we’re not done yet. But I’m getting far more confident in making big decisions about project design, and programming patterns. I spent a full day just reading and absorbing how different people solve the problem I’m having, and came away with a sense of calm resignation. I can build it, I wanna build it, and it’ll be great when it’s done. But also… damn it. Making a game is hard lol.

Thank you so much for supporting and encouraging me throughout this. Not to sound like a corporation here, but I appreciate the positive and negative feedback a lot. It’s very useful in terms of course-correction and sanity-checking.

I still can’t believe y’all are funding me through this whole thing >//<

Thank you so much! <3

Comments

No comments found for this post.