Tread-based movement system concept; single-input backwards movement logic issues

I’m attempting to create a somewhat-novel blueprint locomotion control scheme based on a zero-turn mower, or a Bobcat, or several heavy machine controls where it has individual tread controls. In these setups, two levers represent each tread, where both forwards is both treads spinning forwards (“full speed” forwards), both levers backwards is both treads backwards, and levers in different directions would spin you in place quickly. In this same scenario, hitting only one forwards or backwards would result in you both turning but much more slowly due to the drag force of the other tread not moving, and with forward or backward movement but again less so than both, resulting in somewhat of a semi-circle with partial movement and rotation. Instead of the classic WASD or arrows, I’m utilizing Q & E for forward left and forward right, respectively, and A & D for backwards left and right respectively. I’ve already got a blueprint gate in place to track how many inputs are being pressed, and if it’s one it does a function for the single-inputs and if it’s two it does a function four double-inputs, and for three or more it doesn’t do anything to prevent accidental or on purpose spam, any odd/unintended character behaviors from conflicting movement logic, and also to encourage more careful inputs by players. In this case it’s a bipedal mech, so I will be implementing additional logic for both of the tread inputs for a single side (Q+A or E+D) to equal a strafing movement as well. But I’m having some issues with my single-input logic, which is the meat of the issue. At this point I think it has to do with me utilizing the 3rd person template, as I think the pre-built character movement script is causing the issue.

This is my current, stripped-down single input logic function. It sets a maximum walk speed then goes on to determine which button is pressed and implements the proper movement based on that, I also have some extraneous logic from troubleshooting where I have a UI that shows the “Active Tread” from 0-3 to confirm which button is being pressed, as well as boolean statuses on if they are true or false for each button, and one more for how many total inputs are being counted, that UI logic is not shown here but mentioned just to explain some of the extra bits. The crux of the issue is thus - I get my Actor Forward Vector and input it into a Rotate Vector node into the input pin A. I then have a float value for RotationSpeed, and as this is a slowed-down version for any one tread input where the other is only providing drag, I’m simulating that by muliplying that rotation speed by either 0.5 or -0.5 (for left and right rotation along the axis), then putting that into the split pin B input for Rotate Vector and only into the Z (Yaw). These four Rotate Vector outputs I then directly connect to the input pin for World Direction on the end goal Add Movement Input node, with a scale of 0.3 or -0.3 for forwards or backwards. The forwards inputs work exactly as I intended, the movement input triggers the animation as intended, it moves and slowly accelerates to the maximum pre-defined speed, and also rotates in the corresponding proper direction (left forward rotates the character slowly right simulating only a left tread spinning forwards, right forward rotates the character slowly left, etc). However, the issue comes down to the reverse movements. I’ve tried so many different combinations of things, including using negate vector directly from Get Actor Forward Vector but only to the Rotate Vector nodes for the backwards movement, I’ve tried my current setup with the negative value scale factors in the Add Movement Input nodes, I’ve tried separately using Set Actor Rotation and putting that into world rotation and also settings it separately and leaving world direction in Add Movement Input empty. I’ve tried using Get Actor Forward Vector and multiplying by -1 before inputting into Rotate Vector nodes for the two backwards inputs/movements. Any two negatives cancel out and cause forwards movement, such as negate vector or a -1 multiplier to try to get opposite of forwards vector, along with a negative scale factor. Any single negative results in backwards movement but somehow against all logic it causes the spin speed to increase beyond intention, so that the character’s actively rotating so quickly that despite finally achieving backwards movement it spins mostly in place. I’ve tried a fully separate system to avoid Add Movement Input node and just manually move and rotate the character as intended with the below setup -

Obviously getting my character’s forward vector and rotating by rotation speed * either 0.5 or -0.5 and inputting that into the Rotation From X Vector node here. But even though it mostly works (the movement speed seems slower) and does result in proper movement and rotation backwards, it simply slides along without animating as the lack of an actual input node means it is never recognized and doesn’t trigger the animation. I could manually trigger the animation but I’d rather do it correctly in a more ‘future-proof’ way rather than forcing the movement jankily and having that come up later on in dev that I’d have to fix anyways. I cannot figure out why my inputs are either cancelling all backwards movement but otherwise rotating properly, or why the single-negative to attempt backwards movement results in the incredibly fast spin-speed, the logic of it doesn’t add up. I’m ashamed to admit it but I’ve even tried ChatGPT for this and unfortunately it’s stumped as well, there’s something I’m fundamentally missing on why my rotation speed is overwritten despite being set so statically for the backwards movements but again never once for the forwards movements, I don’t understand how negate vector or taking the forward vector * -1 doesn’t just work and my lack of understanding is killing me. This is my just deserts for attempting a ‘novel’ control scheme to try to make mech piloting to be more heavy-machine driving of a feel rather than the ‘typical’ movement mechanics.

Any advise or assistance would be greatly appreciated.

It looks like a large part of my odd snapping to a world aligned axis issues and inability to move backwards was caused by a default of the character class called “Orient Rotation to Movement” which was stopping me from manually setting the rotation. It means my current rotate vector options now broke but I can redo that logic with Add Actor World Rotation, so I think we’re good here. Thanks so much to anyone who looked at this, y’all just being my rubber duck helped a lot actually.