Push blocks. A Zelda staple, and for the first time in ages, something I’ve made before! Although, the ones in Lumo were shonky, had a bunch of edge cases, and could only be put in certain places else you could push them through walls... So yeah, about time I did this properly!
There’re a couple of ways to go with these: The player can use a button to attach themselves to the block, which has the benefit of allowing them to be pushed or pulled, or, they can lean into them and see if they move. I opted for the latter. Slightly contentious maybe, but it’s old-school, and I like removing button presses where I can.
I’m also going to support a couple of types: one-time use, and free-roaming. Each of this can be restricted further, based on the time of day (“only work at night”), or specified directions of movement.
Today was spent getting the structure in place.
The push block has four triggers around a central collision box. These turn it on or off, as the player enters and leaves. They also tell me which direction the player is coming from, so I can see if a push in that direction is allowed. If it is, I monitor the input direction and stick throw, tell the player character to blend into a push stance, and finally, move the block when they’ve been pushing for long enough.
There’s no error checking atm, and the only animation that’s hooked up is the stance.
Did the push animation and added the new animation states to the Anim Graph.
Spent a long time in the PushBlock code making sure the move feels good, and checking that the various ways the player may early-out are caught, and that the animations blend-out smoothly. For a first pass it's feeling pretty solid.
The blocks can have different push durations, and they all sphere-cast to make sure they’re not gonna slide into other objects. It's not 100% – they won’t detect anything that’ll intersect their corners (sphere cast, yo) – but it’s good enough.
Only things left are the ToD check, and to spawn any audio or VFX when moving/locking.
Placed a few in the world and they’re all good.
I’m going to use the combat roll to break some objects in the world, but I noticed that the camera wasn’t tracking the roll’s movement correctly. Spent the morning digging into this and there were two problems: A one line error in the camera code – it wasn’t taking the player's velocity into account – and the fact I was moving the PlayerCharacter directly, when I should have been going through the Movement Component.
This afternoon I got the push blocks to interact with pressure switches, which I’m sure will be a recurring theme!
The push block spawns in, after a cut-scene, once you’ve killed the bats and you can move it over pressure switches that open gates. Everything in the map is re-entrant, resetting nicely when you leave and come back later. Phew!
Added a pillar that will “break” when you roll into it. This triggers a quick level sequence to show a key falling into reach. Everything’s placeholder, but I’m thinking I’ll have another crack at getting the Chaos destruction stuff to work, and trigger it in the level sequence.
And again, everything’s tied up to the game-state and re-entrant.
The last of my gates is in -- still placeholder -- so next up: make things pretty and put the upper level of the Dungeon in,so you can move between different areas of the map!