This is for 3P VERT SPLIT but a few changes can make it work for horizontal as well.
1. Add new type of SplitScreenInfo to enum ESplitScreenType so it now looks like this:
2. Define it in the DefaultProperties block:
eSST_NONE, // No split
eSST_2P_HORIZONTAL, // 2 player horizontal split
eSST_2P_VERTICAL, // 2 player vertical split
eSST_3P_FAVOR_TOP, // 3 Player split with 1 player on top and 2 on bottom
eSST_3P_FAVOR_BOTTOM, // 3 Player split with 1 player on bottom and 2 on top
eSST_4P, // 4 Player split
eSST_3P_VERTICAL // 3 Player Vertical Split each get 1/3 width of screen
3. In GetPixelSizeOfScreen(), add this:
4. I have no clue what the SafeZones are for, but this how I set them up.
out_Width = Canvas.ClipX * 3;
out_Height = Canvas.ClipY;
For HasTopSafeZone(), HasBottomSafeZone() and HasLeftSafeZone() I used the same case block as 2P_VERTICAL
5. In UpdateActiveSplitscreenType(), I commented out the code existing for case 3 and made it
return (LocalPlayerIndex < 2) ? false : true;
On testing this using DebugCreatePlayer, it shows a 3P Vertical Split with some left-over part of the screen. I tried changing the definition to accommodate the entire screen but all this did was make the game part black even though I can see each player's HUD.
SplitType = eSST_3P_VERTICAL;
To make the split horizontal all you have to do is change the definition. (hint: SizeY and OriginY take the values instead of SizeX and OriginX)
Hope this helps.