In my game, the player doesn’t actually “run” on the wall at all.
If the game detects that he should be able to wall run, it alters gravity’s effect to make him fall more slowly and simply uses launch commands configured orthogonal to the surface normal to send him forward. So technically, he’s in a “falling” state, but by making him fall slowly and also shoot forward, and changing the animation to look correct, I can fake a “wall run”.
Which, honestly, is probably what you WANT, since typically a “wall run” doesn’t give the player control over their movement. They can’t go slower or faster or change direction, it’s not handled the same way normal walk/run commands are. It’s simply propelling the player along a straight line (or curve) which touches the wall.
The UT wall slide seems to basically lower the gravity exactly as you describe. I saw in the UTCharacterMovement GetGravity method they check if you are wall sliding, and if you are it lowers the gravity.
You should also be able to add another movement type. I’m not sure how doable this is without getting into the C++. There’s PHYS_WALKING, FALLING, SWIMMING, CUSTOM, etc… You could probably add another type, or just do something in CUSTOM. And then in blueprint do your CUSTOM movement code.