A_SignPlayer is an action that changes the state of an Level End Sign to reflect that the player hit it (goes to
SeeState). It will also change the skin color of the actor to become the "opposite" of the player's current skin color (the frame is also changed to adjust the end sign's shade of the color displayed – see List of skin colors > Skin color opposites for more details), and will display the End Sign Icon sprite (
PLAYc) for the player's current skin as an overlay in front (which is colored to match the player's own skin color). If the player's skin does not have this sprite however, the actor will not have any icon displayed in front of it.
Code – A_SignPlayer
// Function: A_SignPlayer
// Description: Changes the state of a level end sign to reflect the player that hit it.
// var1 = unused
// var2 = unused
void A_SignPlayer(mobj_t *actor)
if (LUA_CallAction("A_SignPlayer", actor))
// Set the sign to be an appropriate background color for this player's skincolor.
actor->color = Color_Opposite[actor->target->player->skincolor*2];
actor->frame += Color_Opposite[actor->target->player->skincolor*2+1];
// spawn an overlay of the player's face.
ov = P_SpawnMobj(actor->x, actor->y, actor->z, MT_OVERLAY);
ov->color = actor->target->player->skincolor;
ov->skin = &skins[actor->target->player->skin];
P_SetMobjState(ov, actor->info->seestate); // S_PLAY_SIGN