ZDoom / gzdoom

GZDoom is a feature centric port for all Doom engine games, based on ZDoom, adding an OpenGL renderer and powerful scripting capabilities
http://zdoom.org
GNU General Public License v3.0
2.33k stars 528 forks source link

SetSkin and GetSkinCount added to PlayerInfo class #2546

Open jon-heard opened 2 months ago

jon-heard commented 2 months ago

This pull request adds the ability to set the client player's skin through ZScript. Specifically it adds the following functions:

PlayerInfo.SetSkin(int skinId)

PlayerInfo.GetSkinCount()

The impetus behind this is to allow a map to contain a "changing room" of sorts, providing an alternative to the "Player Settings" menu.

Note - This is confirmed to work on multiplayer.

Note - I wasn't sure if PlayerInfo was the right place for these methods, but I saw SetFOV() in there, so it seemed appropriate.

Here's an example ZCODE using this functionality:

version "4.11.3"

class SkinAccessor
{
    static int GetSkinIndex()
    {
        return Players[consolePlayer].GetSkin();
    }

    static int GetSkinCount()
    {
        return Players[consolePlayer].GetSkinCount();
    }

    play static int SetSkinIndex(int playerNumber, int newValue)
    {
        if (playerNumber != consolePlayer) return -1;
        return Players[consolePlayer].SetSkin(newValue);
    }
}

Also, I've attached a working example. A PK3 and MOD file to add to Doom2 or FreeDoom2.

setskin_test.zip