Devlog 03 - 1/11/2026 - Beginning Combat System
Addressing Perfectionism
I actually had a bit of trouble getting back into programming this weekend, largely due to worrying that I might do something wrong or break what I already made trying to add the combat system. Perfectionism has been a real problem for me in the past and one that I’m actively working against. I have to remind myself that I will inevitably do something “wrong” and that this project is just for fun, so it’s okay if it’s not perfect because it was never going to be. I understand that intellectually, but emotionally it’s still anxiety-inducing. I’m sure that’s a pretty common thing.
I’m moving from doing things that I knew how to do to things I’m learning how to do, so while my code was for the most part nice and …
Devlog 03 - 1/11/2026 - Beginning Combat System
Addressing Perfectionism
I actually had a bit of trouble getting back into programming this weekend, largely due to worrying that I might do something wrong or break what I already made trying to add the combat system. Perfectionism has been a real problem for me in the past and one that I’m actively working against. I have to remind myself that I will inevitably do something “wrong” and that this project is just for fun, so it’s okay if it’s not perfect because it was never going to be. I understand that intellectually, but emotionally it’s still anxiety-inducing. I’m sure that’s a pretty common thing.
I’m moving from doing things that I knew how to do to things I’m learning how to do, so while my code was for the most part nice and neat before, now it’s going to be getting pretty messy and will need multiple passes. And besides, it’s not like my original code was perfect. I found and fixed a pretty funny bug with the head bobbing animation in that I forgot to get the absolute value of the velocity. What it was supposed to do was stop the animation if the player wasn’t moving, but what it actually checked for was to stop the animation if the player wasn’t moving or if they were heading southwest. Because they were moving in the negative X and negative Y, their X any Y velocities were both less than or equal to 0. I didn’t notice because I thought it was an optical illusion with the stairs, but with the hand movement added it was a lot more obvious. Speaking of…
Combat System Progress
Mostly what I did this weekend was set up the combat inputs and the groundwork for the combat system, which because the combat relies on directional strikes, meant adding in placeholder art.

That sword I made yesterday. That arm I grabbed off a model I made back in 2018 I think. I was going to make the arm too, but I realized it’d be impossible to get the proportions right without making a full body first. There’s also a mockup torso I nabbed from a completely different project from I want to say 2021, but no legs or left arm yet.
Getting the arm to look right was actually really awkward, since it’s so hard to tell when you’re making something in Blender how it’ll look from a first person perspective. I spent over an hour bashing my head against the wall (kinda literally) trying to get the arm to stop clipping through the environment using a custom depth pass before ultimately giving up and just making the arm tiny and putting it about chin level. The deciding factor for that was realizing that the proper sized arm was also way too high up and jutted out at an unnatural angle just to achieve that screen position. Animations in first person games are about cheating to camera and I’m not super comfortable with that, but there’s that perfectionism talking again. I’m trying to think of it as the player being like a 2D character in a 3D world, with their first person models being like sprites overlaid on the HUD. Unfortunately, this means I can’t do cool interactions like sword clashes without more camera trickery, but whatever, maybe I can redo it later.
I should clarify I also have the weapon arm and torso moving with the walk animation timelines. I based the weapon movement off Dark Forces, which I think uses the same pattern as Doom, just slow arcs up and to the left and right to simulate foot movement. It doesn’t quite sync up with the head bobbing from the footsteps, but I think it looks alright, it’s almost like a trailing secondary action.
Timelines Vs. State Machines
The big decision I had to make this week was whether I want to animate the attacks with timelines or state machines. That was what I was agonizing over with the perfectionism and worrying I was going to screw up.
I’m basing my combat system off the one in Dark Messiah of Might and Magic. If you haven’t played it, the basic idea is that you hold down the attack button to draw back your sword and then release it to attack, and you can do different directional attacks based on the directional inputs when you press attack. So if you’re moving left, you do a horizontal strike from the left, if you’re moving right you do a strike from the right, and then because you can hold the attack it doesn’t end up feeling awkward.
I’ve got the inputs working; that part was easy. All it has to do is read the last movement input vector, unrotate that, and then check if the player is moving forward, backward, left, right, or standing still and save that to an enum. The next step involves actually making the strike, and I need animations for that, thus setting up the sword arm placeholder model.
So anyway, my choice was to either run the animations with a play animation node and control the positioning with a timeline similar to how I animated the head bobbing, or set up a state machine, which is like a flow chart that you can only connect certain animations to others with careful logic, so the left attack drawback animation can ever lead into the left attack swing animation and there’s no chance of screwing up. State machines are probably the right choice, but I decided to go with timelines for a couple reasons. Firstly, I’ve never really used state machines and don’t feel comfortable building an entire complex combat system out of them. Secondly, I want the attack damage to scale with how far you let the animation play before releasing the attack, so if you wait the full half second or however long, your damage scales up to full. I know how to do that in a timeline but I don’t know how to do that in a state machine. I’m setting up some careful logic to prevent overlapping actions. It doesn’t scale well, but if I keep the system simple it should work.
Plus, the first experiment I ran to see if I could control the animation with a timeline worked like a charm, and that’s a little encouraging. If you’re curious, it looks like this:

And that’s just about it for this week. I’ve also got the arm raising and lowering when you fall in water and the raytrace coming out of the sword to check collision on a swing. Plan for next week is to add an attack animation and set up the attack button to actually attack. I don’t know if I’ll have time to add blocking this month, depends on how finicky it is to get the attacks working.