Having two local co op characters appear different from one another

No worries! That’s half the reason I was going to make this a full example project instead of a little short tutorial, there’s a bunch of quirks to this which you would only ever know after playing with it for a while. So I’ll address your questions first and get you working, then I can go over anything else you might need.

  1. Yes I have both characters deriving from a parent SideScrollerPerson so that I only have to make the baseline movement components once. I have the movement code in the parent class and both the children just inherit it naturally. This is what’s known as inheritance, a principal of object oriented programming, so it’s more good practice than 100% necessary, you could have them as different classes altogether if you wanted. This style is agnostic so you could do either, I just do it this way.
    image

  2. Are you using only 1 gamepad? Also forgot to mention you need to spawn the local player controller in your gamemode regardless. To test you either have to have 2 or to make a big workaround to having player 0 be the only gamepad As even with the project setting that’s supposed to skip assigning a gamepad to player 0, it still does. So the first keyboard and first gamepad will always only pass inputs to player 0. The 2nd gamepad would then pass inputs to player 1. This is an engine issue in that we don’t have many native tools (unless you use external plugins or build from source) to altering the gamepad system on the backend. I didn’t want to muddy your learning with a bunch of C++ and different plugins to accomplish this.

  1. The only thing I had changed other than the two settings above is making the default pawn a “PressAnyKeyToPlay” pawn, but that doesn’t apply to the simple way above, only for drop in drop out style of play.