RingRacers/src/r_skins.h
toaster 8bb41b787b Fix SECRET_SKIN locks preventing Rivals from showing up
Previously, there was a permanent exception for Eggrobo (the default bot skin).
Now that exception is generalised for the specific skin the bot is being assigned, which we assume is intentful and correct.

In addition, the randomclass PR_BOTS now controls K_RetireBots as well, matching the other two random calls done for bot skins.
2023-10-05 18:12:32 +01:00

141 lines
3.5 KiB
C

// SONIC ROBO BLAST 2
//-----------------------------------------------------------------------------
// Copyright (C) 2016-2023 by Vivian "toastergrl" Grannell
// Copyright (C) 1993-1996 by id Software, Inc.
// Copyright (C) 1998-2000 by DooM Legacy Team.
// Copyright (C) 1999-2020 by Sonic Team Junior.
//
// This program is free software distributed under the
// terms of the GNU General Public License, version 2.
// See the 'LICENSE' file for more details.
//-----------------------------------------------------------------------------
/// \file r_skins.h
/// \brief Skins stuff
#ifndef __R_SKINS__
#define __R_SKINS__
#include "info.h"
#include "sounds.h"
#include "d_player.h" // skinflags
#include "r_patch.h"
#include "r_picformats.h" // spriteinfo_t
#include "r_defs.h" // spritedef_t
#ifdef __cplusplus
extern "C" {
#endif
/// Defaults
#define SKINRIVALS 3
// should be all lowercase!! S_SKIN processing does a strlwr
#define DEFAULTSKIN "eggman"
#define DEFAULTSKIN2 "tails" // secondary player
#define DEFAULTSKIN3 "sonic" // third player
#define DEFAULTSKIN4 "knuckles" // fourth player
/// The skin_t struct
struct skin_t
{
char name[SKINNAMESIZE+1]; // descriptive name of the skin
UINT32 namehash; // quickncasehash(->name, SKINNAMESIZE)
UINT16 wadnum;
skinflags_t flags;
char realname[SKINNAMESIZE+1]; // Display name for level completion.
// SRB2kart
UINT8 kartspeed;
UINT8 kartweight;
//
INT32 followitem;
// Definable color translation table
UINT8 starttranscolor;
UINT16 prefcolor;
UINT16 supercolor;
UINT16 prefoppositecolor; // if 0 use tables instead
fixed_t highresscale; // scale of highres, default is 0.5
skinrecord_t records;
char rivals[SKINRIVALS][SKINNAMESIZE+1]; // Your top 3 rivals for GP mode. Uses names so that you can reference skins that aren't added
// specific sounds per skin
sfxenum_t soundsid[NUMSKINSOUNDS]; // sound # in S_sfx table
// contains super versions too
spritedef_t sprites[NUMPLAYERSPRITES*2];
spriteinfo_t sprinfo[NUMPLAYERSPRITES*2];
};
enum facepatches {
FACE_RANK = 0,
FACE_WANTED,
FACE_MINIMAP,
NUMFACES
};
typedef enum {
ENGINECLASS_A,
ENGINECLASS_B,
ENGINECLASS_C,
ENGINECLASS_D,
ENGINECLASS_E,
ENGINECLASS_F,
ENGINECLASS_G,
ENGINECLASS_H,
ENGINECLASS_I,
ENGINECLASS_J
} engineclass_t;
engineclass_t R_GetEngineClass(SINT8 speed, SINT8 weight, skinflags_t flags);
/// Externs
extern INT32 numskins;
extern skin_t skins[MAXSKINS];
extern CV_PossibleValue_t Forceskin_cons_t[];
/// Function prototypes
// Loading
void R_InitSkins(void);
void R_AddSkins(UINT16 wadnum, boolean mainfile);
void R_PatchSkins(UINT16 wadnum, boolean mainfile);
// Access
INT32 R_SkinAvailable(const char *name);
boolean R_SkinUsable(INT32 playernum, INT32 skinnum, boolean demoskins);
UINT8 *R_GetSkinAvailabilities(boolean demolock, INT32 botforcecharacter);
// Setting
void SetPlayerSkin(INT32 playernum,const char *skinname);
void SetPlayerSkinByNum(INT32 playernum,INT32 skinnum); // Tails 03-16-2002
// Set backup
INT32 GetSkinNumClosestToStats(UINT8 kartspeed, UINT8 kartweight, UINT32 flags, boolean unlock);
UINT8 R_BotDefaultSkin(void);
// Heavy Magician
void SetFakePlayerSkin(player_t* player, INT32 skinnum);
void SetRandomFakePlayerSkin(player_t* player, boolean fast);
void ClearFakePlayerSkin(player_t* player);
// Visual flair
UINT32 R_GetLocalRandomSkin(void);
// Sprite2
UINT8 P_GetSkinSprite2(skin_t *skin, UINT8 spr2, player_t *player);
#ifdef __cplusplus
} // extern "C"
#endif
#endif //__R_SKINS__