Hey @bmingles! Welcome to the forums!
So here are some tools you’ll want to take advantage of:
Retriggerable Delay,
Timeline, and
Lerp.
You’ll have your input Retrigger the Retriggerable delay. The delay will be how long you want to wait before resetting roll.
After that, a Timeline, with the input execution of “Play from Start”. Double click it to open it, and give it a float. Give that float two keys with the first one being a VALUE of 0 and a TIME of 0, and the second one a VALUE of 1 and TIME of however long you think it should take to roll back to 0.
Back on the event graph, use a LERP node. In the Alpha, plug in your timeline’s float track you made (alpha goes 0 through 1 and that’s why those are the values in the timeline.
Before the timeline, GET your player’s roll and SET it as a variable. Make sure you’re just getting the X rotation float!
Then, GET that variable and plug it into your LERP’s A. Your B should be 0 (which is perfectly zero’d rotation.
Next, get your player’s rotation and right-click to break the rotation pin into X Y and Z. Use “Make Rotator” and plug in the Y and Z (because we want the player to keep their Y and Z) and then off of the LERP plug in your NEW X to that Make Rotator.
Then off of the “UPDATE” output on your Timeline, use “Set Rotation” with your ship as your target and that created rotator you just made!
Oh, and lastly, make a bool for “Currently resetting movement” whatever you want to call it. Before ANY of the movement code, after the event, check to see if it is currently resetting movement. IF IT IS, run the line down to the “STOP” command on the timeline. Then have the other output of the branch do your normal stuff.
This will make the timeline not interfere if you’re actively moving the camera even if it’s started to right itself!