mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
HOSTCODE 'ironman' - WIP
This commit is contained in:
parent
d57adac84b
commit
86366b000c
11 changed files with 84 additions and 4 deletions
|
|
@ -37,6 +37,7 @@ typedef enum
|
||||||
{
|
{
|
||||||
SF_HIRES = 1, // Draw the sprite at different size?
|
SF_HIRES = 1, // Draw the sprite at different size?
|
||||||
SF_MACHINE = 1<<1, // Beep boop. Are you a robot?
|
SF_MACHINE = 1<<1, // Beep boop. Are you a robot?
|
||||||
|
SF_IRONMAN = 1<<2, // Pick a new skin during POSITION. I main Random!
|
||||||
// free up to and including 1<<31
|
// free up to and including 1<<31
|
||||||
} skinflags_t;
|
} skinflags_t;
|
||||||
|
|
||||||
|
|
@ -386,6 +387,9 @@ typedef struct player_s
|
||||||
INT32 skin;
|
INT32 skin;
|
||||||
UINT32 availabilities;
|
UINT32 availabilities;
|
||||||
|
|
||||||
|
UINT8 fakeskin; // ironman
|
||||||
|
UINT8 lastfakeskin;
|
||||||
|
|
||||||
UINT8 kartspeed; // Kart speed stat between 1 and 9
|
UINT8 kartspeed; // Kart speed stat between 1 and 9
|
||||||
UINT8 kartweight; // Kart weight stat between 1 and 9
|
UINT8 kartweight; // Kart weight stat between 1 and 9
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6318,6 +6318,7 @@ struct int_const_s const INT_CONST[] = {
|
||||||
// Character flags (skinflags_t)
|
// Character flags (skinflags_t)
|
||||||
{"SF_HIRES",SF_HIRES},
|
{"SF_HIRES",SF_HIRES},
|
||||||
{"SF_MACHINE",SF_MACHINE},
|
{"SF_MACHINE",SF_MACHINE},
|
||||||
|
{"SF_IRONMAN",SF_IRONMAN},
|
||||||
|
|
||||||
// Sound flags
|
// Sound flags
|
||||||
{"SF_TOTALLYSINGLE",SF_TOTALLYSINGLE},
|
{"SF_TOTALLYSINGLE",SF_TOTALLYSINGLE},
|
||||||
|
|
|
||||||
|
|
@ -274,6 +274,7 @@ void G_ReadDemoExtraData(void)
|
||||||
|
|
||||||
kartspeed = READUINT8(demo_p);
|
kartspeed = READUINT8(demo_p);
|
||||||
kartweight = READUINT8(demo_p);
|
kartweight = READUINT8(demo_p);
|
||||||
|
demo_p++; // lastfakeskin
|
||||||
|
|
||||||
if (stricmp(skins[players[p].skin].name, name) != 0)
|
if (stricmp(skins[players[p].skin].name, name) != 0)
|
||||||
FindClosestSkinForStats(p, kartspeed, kartweight);
|
FindClosestSkinForStats(p, kartspeed, kartweight);
|
||||||
|
|
@ -2110,6 +2111,7 @@ void G_BeginRecording(void)
|
||||||
// Kart speed and weight
|
// Kart speed and weight
|
||||||
WRITEUINT8(demo_p, skins[player->skin].kartspeed);
|
WRITEUINT8(demo_p, skins[player->skin].kartspeed);
|
||||||
WRITEUINT8(demo_p, skins[player->skin].kartweight);
|
WRITEUINT8(demo_p, skins[player->skin].kartweight);
|
||||||
|
WRITEUINT8(demo_p, player->lastfakeskin);
|
||||||
|
|
||||||
// And mobjtype_t is best with UINT32 too...
|
// And mobjtype_t is best with UINT32 too...
|
||||||
WRITEUINT32(demo_p, player->followitem);
|
WRITEUINT32(demo_p, player->followitem);
|
||||||
|
|
@ -2709,7 +2711,7 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
char msg[1024];
|
char msg[1024];
|
||||||
|
|
||||||
boolean spectator;
|
boolean spectator;
|
||||||
UINT8 slots[MAXPLAYERS], kartspeed[MAXPLAYERS], kartweight[MAXPLAYERS], numslots = 0;
|
UINT8 slots[MAXPLAYERS], kartspeed[MAXPLAYERS], kartweight[MAXPLAYERS], lastfakeskin[MAXPLAYERS], numslots = 0;
|
||||||
|
|
||||||
#if defined(SKIPERRORS) && !defined(DEVELOP)
|
#if defined(SKIPERRORS) && !defined(DEVELOP)
|
||||||
boolean skiperrors = false;
|
boolean skiperrors = false;
|
||||||
|
|
@ -3086,6 +3088,7 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
// Kart stats, temporarily
|
// Kart stats, temporarily
|
||||||
kartspeed[p] = READUINT8(demo_p);
|
kartspeed[p] = READUINT8(demo_p);
|
||||||
kartweight[p] = READUINT8(demo_p);
|
kartweight[p] = READUINT8(demo_p);
|
||||||
|
lastfakeskin[p] = READUINT8(demo_p);
|
||||||
|
|
||||||
if (stricmp(skins[players[p].skin].name, skin) != 0)
|
if (stricmp(skins[players[p].skin].name, skin) != 0)
|
||||||
FindClosestSkinForStats(p, kartspeed[p], kartweight[p]);
|
FindClosestSkinForStats(p, kartspeed[p], kartweight[p]);
|
||||||
|
|
@ -3143,6 +3146,7 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
// it would only break the replay if we clipped them.
|
// it would only break the replay if we clipped them.
|
||||||
players[i].kartspeed = kartspeed[i];
|
players[i].kartspeed = kartspeed[i];
|
||||||
players[i].kartweight = kartweight[i];
|
players[i].kartweight = kartweight[i];
|
||||||
|
players[i].fakeskin = lastfakeskin[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
demo.deferstart = true;
|
demo.deferstart = true;
|
||||||
|
|
@ -3334,6 +3338,7 @@ void G_AddGhost(char *defdemoname)
|
||||||
|
|
||||||
kartspeed = READUINT8(p);
|
kartspeed = READUINT8(p);
|
||||||
kartweight = READUINT8(p);
|
kartweight = READUINT8(p);
|
||||||
|
p += 1; // lastfakeskin
|
||||||
|
|
||||||
p += 4; // followitem (maybe change later)
|
p += 4; // followitem (maybe change later)
|
||||||
|
|
||||||
|
|
|
||||||
10
src/g_game.c
10
src/g_game.c
|
|
@ -2233,6 +2233,8 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
||||||
UINT16 skincolor;
|
UINT16 skincolor;
|
||||||
INT32 skin;
|
INT32 skin;
|
||||||
UINT32 availabilities;
|
UINT32 availabilities;
|
||||||
|
UINT8 fakeskin;
|
||||||
|
UINT8 lastfakeskin;
|
||||||
|
|
||||||
tic_t jointime;
|
tic_t jointime;
|
||||||
|
|
||||||
|
|
@ -2278,6 +2280,8 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
||||||
|
|
||||||
skincolor = players[player].skincolor;
|
skincolor = players[player].skincolor;
|
||||||
skin = players[player].skin;
|
skin = players[player].skin;
|
||||||
|
fakeskin = players[player].fakeskin;
|
||||||
|
lastfakeskin = players[player].lastfakeskin;
|
||||||
|
|
||||||
// SRB2kart
|
// SRB2kart
|
||||||
kartspeed = players[player].kartspeed;
|
kartspeed = players[player].kartspeed;
|
||||||
|
|
@ -2431,6 +2435,12 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
||||||
p->botvars.rival = botrival;
|
p->botvars.rival = botrival;
|
||||||
p->xtralife = xtralife;
|
p->xtralife = xtralife;
|
||||||
|
|
||||||
|
if (betweenmaps)
|
||||||
|
p->fakeskin = MAXSKINS;
|
||||||
|
else
|
||||||
|
p->fakeskin = fakeskin;
|
||||||
|
p->lastfakeskin = lastfakeskin;
|
||||||
|
|
||||||
// SRB2kart
|
// SRB2kart
|
||||||
p->itemroulette = itemroulette;
|
p->itemroulette = itemroulette;
|
||||||
p->roulettetype = roulettetype;
|
p->roulettetype = roulettetype;
|
||||||
|
|
|
||||||
17
src/k_hud.c
17
src/k_hud.c
|
|
@ -1699,6 +1699,7 @@ static boolean K_drawKartPositionFaces(void)
|
||||||
boolean completed[MAXPLAYERS];
|
boolean completed[MAXPLAYERS];
|
||||||
INT32 rankplayer[MAXPLAYERS];
|
INT32 rankplayer[MAXPLAYERS];
|
||||||
INT32 bumperx, emeraldx, numplayersingame = 0;
|
INT32 bumperx, emeraldx, numplayersingame = 0;
|
||||||
|
INT32 xoff, yoff, flipflag = 0;
|
||||||
UINT8 *colormap;
|
UINT8 *colormap;
|
||||||
|
|
||||||
ranklines = 0;
|
ranklines = 0;
|
||||||
|
|
@ -1784,15 +1785,25 @@ static boolean K_drawKartPositionFaces(void)
|
||||||
bumperx = FACE_X+19;
|
bumperx = FACE_X+19;
|
||||||
emeraldx = FACE_X+16;
|
emeraldx = FACE_X+16;
|
||||||
|
|
||||||
|
if (skins[players[rankplayer[i]].skin].flags & SF_IRONMAN)
|
||||||
|
{
|
||||||
|
flipflag = V_FLIP;
|
||||||
|
xoff = 16;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
flipflag = 0;
|
||||||
|
xoff = yoff = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (players[rankplayer[i]].mo->color)
|
if (players[rankplayer[i]].mo->color)
|
||||||
{
|
{
|
||||||
colormap = R_GetTranslationColormap(players[rankplayer[i]].skin, players[rankplayer[i]].mo->color, GTC_CACHE);
|
colormap = R_GetTranslationColormap(((skin_t*)players[rankplayer[i]].mo->skin) - skins, players[rankplayer[i]].mo->color, GTC_CACHE);
|
||||||
if (players[rankplayer[i]].mo->colorized)
|
if (players[rankplayer[i]].mo->colorized)
|
||||||
colormap = R_GetTranslationColormap(TC_RAINBOW, players[rankplayer[i]].mo->color, GTC_CACHE);
|
colormap = R_GetTranslationColormap(TC_RAINBOW, players[rankplayer[i]].mo->color, GTC_CACHE);
|
||||||
else
|
else
|
||||||
colormap = R_GetTranslationColormap(players[rankplayer[i]].skin, players[rankplayer[i]].mo->color, GTC_CACHE);
|
colormap = R_GetTranslationColormap(((skin_t*)players[rankplayer[i]].mo->skin) - skins, players[rankplayer[i]].mo->color, GTC_CACHE);
|
||||||
|
|
||||||
V_DrawMappedPatch(FACE_X, Y, V_HUDTRANS|V_SLIDEIN|V_SNAPTOLEFT, faceprefix[players[rankplayer[i]].skin][FACE_RANK], colormap);
|
V_DrawMappedPatch(FACE_X + xoff, Y + yoff, V_HUDTRANS|V_SLIDEIN|V_SNAPTOLEFT|flipflag, faceprefix[((skin_t*)players[rankplayer[i]].mo->skin) - skins][FACE_RANK], colormap);
|
||||||
|
|
||||||
if (LUA_HudEnabled(hud_battlebumpers))
|
if (LUA_HudEnabled(hud_battlebumpers))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -410,6 +410,10 @@ static int player_get(lua_State *L)
|
||||||
lua_pushinteger(L, plr->skin);
|
lua_pushinteger(L, plr->skin);
|
||||||
else if (fastcmp(field,"availabilities"))
|
else if (fastcmp(field,"availabilities"))
|
||||||
lua_pushinteger(L, plr->availabilities);
|
lua_pushinteger(L, plr->availabilities);
|
||||||
|
else if (fastcmp(field,"fakeskin"))
|
||||||
|
lua_pushinteger(L, plr->fakeskin);
|
||||||
|
else if (fastcmp(field,"lastfakeskin"))
|
||||||
|
lua_pushinteger(L, plr->lastfakeskin);
|
||||||
else if (fastcmp(field,"score"))
|
else if (fastcmp(field,"score"))
|
||||||
lua_pushinteger(L, plr->score);
|
lua_pushinteger(L, plr->score);
|
||||||
// SRB2kart
|
// SRB2kart
|
||||||
|
|
@ -575,6 +579,10 @@ static int player_set(lua_State *L)
|
||||||
return NOSET;
|
return NOSET;
|
||||||
else if (fastcmp(field,"availabilities"))
|
else if (fastcmp(field,"availabilities"))
|
||||||
return NOSET;
|
return NOSET;
|
||||||
|
else if (fastcmp(field,"fakeskin"))
|
||||||
|
return NOSET;
|
||||||
|
else if (fastcmp(field,"lastfakeskin"))
|
||||||
|
return NOSET;
|
||||||
else if (fastcmp(field,"score"))
|
else if (fastcmp(field,"score"))
|
||||||
plr->score = luaL_checkinteger(L, 3);
|
plr->score = luaL_checkinteger(L, 3);
|
||||||
// SRB2kart
|
// SRB2kart
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,8 @@ typedef enum
|
||||||
|
|
||||||
PR_MOVINGTARGET, // Randomised moving targets
|
PR_MOVINGTARGET, // Randomised moving targets
|
||||||
|
|
||||||
|
PR_RANDOMSKIN, // Random skin select from Heavy Magician(?)
|
||||||
|
|
||||||
PRNUMCLASS
|
PRNUMCLASS
|
||||||
} pr_class_t;
|
} pr_class_t;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -151,6 +151,8 @@ static void P_NetArchivePlayers(void)
|
||||||
WRITEUINT8(save_p, players[i].skincolor);
|
WRITEUINT8(save_p, players[i].skincolor);
|
||||||
WRITEINT32(save_p, players[i].skin);
|
WRITEINT32(save_p, players[i].skin);
|
||||||
WRITEUINT32(save_p, players[i].availabilities);
|
WRITEUINT32(save_p, players[i].availabilities);
|
||||||
|
WRITEUINT8(save_p, players[i].fakeskin);
|
||||||
|
WRITEUINT8(save_p, players[i].lastfakeskin);
|
||||||
WRITEUINT32(save_p, players[i].score);
|
WRITEUINT32(save_p, players[i].score);
|
||||||
WRITESINT8(save_p, players[i].lives);
|
WRITESINT8(save_p, players[i].lives);
|
||||||
WRITESINT8(save_p, players[i].xtralife);
|
WRITESINT8(save_p, players[i].xtralife);
|
||||||
|
|
@ -470,6 +472,8 @@ static void P_NetUnArchivePlayers(void)
|
||||||
players[i].skincolor = READUINT8(save_p);
|
players[i].skincolor = READUINT8(save_p);
|
||||||
players[i].skin = READINT32(save_p);
|
players[i].skin = READINT32(save_p);
|
||||||
players[i].availabilities = READUINT32(save_p);
|
players[i].availabilities = READUINT32(save_p);
|
||||||
|
players[i].fakeskin = READUINT8(save_p);
|
||||||
|
players[i].lastfakeskin = READUINT8(save_p);
|
||||||
players[i].score = READUINT32(save_p);
|
players[i].score = READUINT32(save_p);
|
||||||
players[i].lives = READSINT8(save_p);
|
players[i].lives = READSINT8(save_p);
|
||||||
players[i].xtralife = READSINT8(save_p); // Ring Extra Life counter
|
players[i].xtralife = READSINT8(save_p); // Ring Extra Life counter
|
||||||
|
|
|
||||||
22
src/p_user.c
22
src/p_user.c
|
|
@ -4167,6 +4167,28 @@ void P_PlayerThink(player_t *player)
|
||||||
{
|
{
|
||||||
player->stairjank--;
|
player->stairjank--;
|
||||||
}
|
}
|
||||||
|
// Random skin / "ironman"
|
||||||
|
if (((skin_t *)player->mo->skin)->flags & SF_IRONMAN)
|
||||||
|
{
|
||||||
|
if (player->mo) {
|
||||||
|
if (player->fakeskin != MAXSKINS)
|
||||||
|
{
|
||||||
|
SetFakePlayerSkin(player, player->fakeskin);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
INT32 i;
|
||||||
|
do {
|
||||||
|
i = P_RandomKey(PR_RANDOMSKIN, numskins);
|
||||||
|
} while (skins[i].flags & SF_IRONMAN || i == player->lastfakeskin);
|
||||||
|
|
||||||
|
SetFakePlayerSkin(player, i);
|
||||||
|
|
||||||
|
S_StartSound(NULL, sfx_kc33);
|
||||||
|
K_SpawnDriftElectricSparks(player, player->skincolor, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
K_KartPlayerThink(player, cmd); // SRB2kart
|
K_KartPlayerThink(player, cmd); // SRB2kart
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -334,6 +334,17 @@ void SetPlayerSkinByNum(INT32 playernum, INT32 skinnum)
|
||||||
SetPlayerSkinByNum(playernum, 0); // not found, put in the default skin
|
SetPlayerSkinByNum(playernum, 0); // not found, put in the default skin
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set mo skin but not player_t skin, for ironman
|
||||||
|
void SetFakePlayerSkin(player_t* player, INT32 skinnum)
|
||||||
|
{
|
||||||
|
player->mo->skin = &skins[skinnum];
|
||||||
|
player->fakeskin = skinnum;
|
||||||
|
player->lastfakeskin = skinnum;
|
||||||
|
player->kartspeed = skins[skinnum].kartspeed;
|
||||||
|
player->kartweight = skins[skinnum].kartweight;
|
||||||
|
player->charflags = skins[skinnum].flags;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Add skins from a pwad, each skin preceded by 'S_SKIN' marker
|
// Add skins from a pwad, each skin preceded by 'S_SKIN' marker
|
||||||
//
|
//
|
||||||
|
|
@ -484,6 +495,7 @@ static boolean R_ProcessPatchableFields(skin_t *skin, char *stoken, char *value)
|
||||||
// 1, true, yes are all valid values
|
// 1, true, yes are all valid values
|
||||||
GETFLAG(HIRES)
|
GETFLAG(HIRES)
|
||||||
GETFLAG(MACHINE)
|
GETFLAG(MACHINE)
|
||||||
|
GETFLAG(IRONMAN)
|
||||||
#undef GETFLAG
|
#undef GETFLAG
|
||||||
|
|
||||||
else // let's check if it's a sound, otherwise error out
|
else // let's check if it's a sound, otherwise error out
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,7 @@ void R_InitSkins(void);
|
||||||
|
|
||||||
void SetPlayerSkin(INT32 playernum,const char *skinname);
|
void SetPlayerSkin(INT32 playernum,const char *skinname);
|
||||||
void SetPlayerSkinByNum(INT32 playernum,INT32 skinnum); // Tails 03-16-2002
|
void SetPlayerSkinByNum(INT32 playernum,INT32 skinnum); // Tails 03-16-2002
|
||||||
|
void SetFakePlayerSkin(player_t* player, INT32 skinnum);
|
||||||
boolean R_SkinUsable(INT32 playernum, INT32 skinnum);
|
boolean R_SkinUsable(INT32 playernum, INT32 skinnum);
|
||||||
UINT32 R_GetSkinAvailabilities(void);
|
UINT32 R_GetSkinAvailabilities(void);
|
||||||
INT32 R_SkinAvailable(const char *name);
|
INT32 R_SkinAvailable(const char *name);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue