So a friend of mine has a magic wardrobe that he uses to grow combustibles. Teenage me is in absolute awe of this, so I’ve had it in my head for ages that I’ll immortalise it with a pop-up shop/tent in the game, that you can go to swap herbs for potions and ting.
Since the skeleton came out so well, I thought I’d push myself a bit further and try sculpting the tent. It took all day, but it came out pretty well.
And yes, I spent a very long time trying to make it look like a Saints strip. I think that’s actually the best bit. Pretty sure my friend will dig it, until he realises he's the shop-keeper.
Animated a jump and walk-cycle for the skeleton. Need to do a strafe and an attack, then I can get onto some AI.
Also created a new material for the tent, with vertex world position offset scaled by vertex colour. It’s nice and subtle, but the canvas wiggles about in the breeze.
Animated left and right strafes, and a backward walk cycle. And listened to plenty of Acid, cos it’s 303 day.
Started to create a wrapper class around ACharacter to reparent the character’s skeletal mesh under a tilted scene component (everything in the game is tilted ~20 deg away from the camera to create the false perspective) and then noticed that I’d already done it. Exactly a year ago… So, tided that up, did a little refactoring to add in the Utility AI stuff, and ran with it.
Setup the skeleton’s animation blueprint, and 2D motion graph and then made a start on the AI.
Thought I’d use EQS to get locations near the player, but the end result was too start/stop, so I reverted to the MoveToActor stuff in the character’s movement controller. That’s automatically updated with new positions as the actor, so it ends up looking a lot smoother. Currently have the skeleton running around, chasing the player, randomly moving if it can’t see the player, and trying to melee attack if it’s in range. Not quite finished off all the animations for attacks though…
Starting to see some patterns / commonly used things in AIActions, so I’ve begun adding helper functions to the C++ code to save myself some time.
I’ve been pretty successful at keeping the AIActions generic and concise – probably because I’m not doing anything too complicated – but they’re by far the largest things I’ve done in Blueprint up to now, which means I’m starting to chafe against the bits of BP that annoy me: keeping them readable, and tidy.
Honestly, I really don’t find BP quicker to use. I end up typing most of the node name, and then spend too long dragging connecting lines between things / tidying up the results. Meh.
Got a bit more fancy with EQS. Am now using it to find an arc of good locations behind my skeleton, that I can jump to. But… running a query is not a blocking operation, and it’s not necessarily going to return on the same frame, which complicates things in specific situations.
If I enter an action to jump, I’m entering the action before the EQS has finished (doesn’t make sense to query the world, every frame, as part of the action’s scoring) so any functions, say in the NPC or AIController, that are acting as delegates, get told the action has been entered even though there’s computation on the go. Which bit me on the arse when I wanted to rotate the skeleton in the direction it was jumping. Sorta fudged a way around it, but I’m wondering if I should support delayed entry into actions to let stuff like EQS finish…
Anyway, the skeleton’s walking about, stopping to attack the player (no anims for that atm) and jumping away from sword swipes. It’s clever enough to know if the player is facing it, and if the swipe is actually going to hit. Obviously needs VFX and SFX, but it’s coming along…