mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
More consistent handling of special event round icons
- Gametypes have "GPpic" and "GPpicMini" parameters
- These are shown in contexts where a Round Number would be shown in GP, but an eventmode is under way.
- Instead of having different rules to show up on the pause menu, titlecard, and tally/intermission...
- Pause Menu Roundqueue, Tally, and Intermission have all been aligned to the same rules.
- As long as the titlecard is standard, it will show the GP Pic per those rules. (GTR_SPECIALSTART and GTR_BOSS still have their unique behaviour here)
This commit is contained in:
parent
c673bb3ea9
commit
e060e9dadc
9 changed files with 101 additions and 57 deletions
|
|
@ -785,9 +785,11 @@ void readgametype(MYFILE *f, char *gtname)
|
||||||
INT32 newgttimelimit = 0;
|
INT32 newgttimelimit = 0;
|
||||||
UINT8 newgtinttype = 0;
|
UINT8 newgtinttype = 0;
|
||||||
char gtconst[MAXLINELEN];
|
char gtconst[MAXLINELEN];
|
||||||
|
char gppic[9];
|
||||||
|
char gppicmini[9];
|
||||||
|
|
||||||
// Empty strings.
|
// Empty strings.
|
||||||
gtconst[0] = '\0';
|
gtconst[0] = gppic[0] = gppicmini[0] = '\0';
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
|
@ -827,7 +829,15 @@ void readgametype(MYFILE *f, char *gtname)
|
||||||
else if (fastcmp(word, "IDENTIFIER"))
|
else if (fastcmp(word, "IDENTIFIER"))
|
||||||
{
|
{
|
||||||
// GT_
|
// GT_
|
||||||
strncpy(gtconst, word2, MAXLINELEN);
|
strlcpy(gtconst, word2, MAXLINELEN);
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "GPPIC"))
|
||||||
|
{
|
||||||
|
strlcpy(gppic, word2, 9);
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "GPPICMINI"))
|
||||||
|
{
|
||||||
|
strlcpy(gppicmini, word2, 9);
|
||||||
}
|
}
|
||||||
// Point and time limits
|
// Point and time limits
|
||||||
else if (fastcmp(word, "DEFAULTPOINTLIMIT"))
|
else if (fastcmp(word, "DEFAULTPOINTLIMIT"))
|
||||||
|
|
@ -926,6 +936,8 @@ void readgametype(MYFILE *f, char *gtname)
|
||||||
newgametype->name = Z_StrDup((const char *)gtname);
|
newgametype->name = Z_StrDup((const char *)gtname);
|
||||||
newgametype->rules = newgtrules;
|
newgametype->rules = newgtrules;
|
||||||
newgametype->constant = G_PrepareGametypeConstant((const char *)gtconst);
|
newgametype->constant = G_PrepareGametypeConstant((const char *)gtconst);
|
||||||
|
strlcpy(newgametype->gppic, gppic, 9);
|
||||||
|
strlcpy(newgametype->gppicmini, gppicmini, 9);
|
||||||
newgametype->tol = newgttol;
|
newgametype->tol = newgttol;
|
||||||
newgametype->intermission = newgtinttype;
|
newgametype->intermission = newgtinttype;
|
||||||
newgametype->pointlimit = newgtpointlimit;
|
newgametype->pointlimit = newgtpointlimit;
|
||||||
|
|
|
||||||
|
|
@ -607,6 +607,8 @@ struct gametype_t
|
||||||
UINT8 intermission;
|
UINT8 intermission;
|
||||||
INT32 pointlimit;
|
INT32 pointlimit;
|
||||||
INT32 timelimit;
|
INT32 timelimit;
|
||||||
|
char gppic[9];
|
||||||
|
char gppicmini[9];
|
||||||
};
|
};
|
||||||
|
|
||||||
extern gametype_t *gametypes[MAXGAMETYPES+1];
|
extern gametype_t *gametypes[MAXGAMETYPES+1];
|
||||||
|
|
|
||||||
10
src/g_game.c
10
src/g_game.c
|
|
@ -3030,6 +3030,8 @@ static gametype_t defaultgametypes[] =
|
||||||
int_time,
|
int_time,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
"",
|
||||||
|
"",
|
||||||
},
|
},
|
||||||
|
|
||||||
// GT_BATTLE
|
// GT_BATTLE
|
||||||
|
|
@ -3041,6 +3043,8 @@ static gametype_t defaultgametypes[] =
|
||||||
int_scoreortimeattack,
|
int_scoreortimeattack,
|
||||||
0,
|
0,
|
||||||
3,
|
3,
|
||||||
|
"TT_RNDB",
|
||||||
|
"TT_RNSB",
|
||||||
},
|
},
|
||||||
|
|
||||||
// GT_SPECIAL
|
// GT_SPECIAL
|
||||||
|
|
@ -3052,6 +3056,8 @@ static gametype_t defaultgametypes[] =
|
||||||
int_time,
|
int_time,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
"TT_RNDSS",
|
||||||
|
"TT_RNSSS",
|
||||||
},
|
},
|
||||||
|
|
||||||
// GT_VERSUS
|
// GT_VERSUS
|
||||||
|
|
@ -3063,6 +3069,8 @@ static gametype_t defaultgametypes[] =
|
||||||
int_scoreortimeattack,
|
int_scoreortimeattack,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
"",
|
||||||
|
"",
|
||||||
},
|
},
|
||||||
|
|
||||||
// GT_TUTORIAL
|
// GT_TUTORIAL
|
||||||
|
|
@ -3074,6 +3082,8 @@ static gametype_t defaultgametypes[] =
|
||||||
int_none,
|
int_none,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
"",
|
||||||
|
"",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4751,43 +4751,22 @@ void M_DrawPause(void)
|
||||||
|
|
||||||
if (grandprixinfo.gp == true && grandprixinfo.eventmode != GPEVENT_NONE)
|
if (grandprixinfo.gp == true && grandprixinfo.eventmode != GPEVENT_NONE)
|
||||||
{
|
{
|
||||||
const char *append = NULL;
|
if (gametypes[gametype]->gppicmini[0])
|
||||||
|
smallroundpatch = W_CachePatchName(gametypes[gametype]->gppicmini, PU_PATCH);
|
||||||
switch (grandprixinfo.eventmode)
|
else
|
||||||
{
|
smallroundpatch = W_CachePatchName("TT_RNSX", PU_PATCH);
|
||||||
case GPEVENT_SPECIAL:
|
}
|
||||||
{
|
else if (roundqueue.size > 0)
|
||||||
append = "SS";
|
{
|
||||||
break;
|
if (roundqueue.roundnum > 0 && roundqueue.roundnum <= 10)
|
||||||
}
|
|
||||||
|
|
||||||
case GPEVENT_BONUS:
|
|
||||||
{
|
|
||||||
append = "B";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (append)
|
|
||||||
{
|
{
|
||||||
smallroundpatch =
|
smallroundpatch =
|
||||||
W_CachePatchName(
|
W_CachePatchName(
|
||||||
va("TT_RNS%s", append),
|
va("TT_RNS%d", roundqueue.roundnum),
|
||||||
PU_PATCH
|
PU_PATCH
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (roundqueue.roundnum > 0 && roundqueue.roundnum <= 10)
|
|
||||||
{
|
|
||||||
smallroundpatch =
|
|
||||||
W_CachePatchName(
|
|
||||||
va("TT_RNS%d", roundqueue.roundnum),
|
|
||||||
PU_PATCH
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (smallroundpatch != NULL)
|
if (smallroundpatch != NULL)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -411,10 +411,16 @@ void level_tally_t::Init(player_t *player)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (roundqueue.size > 0 && roundqueue.roundnum > 0
|
if (roundqueue.size > 0 && roundqueue.roundnum > 0)
|
||||||
&& (grandprixinfo.gp == false || grandprixinfo.eventmode == GPEVENT_NONE))
|
|
||||||
{
|
{
|
||||||
roundNum = roundqueue.roundnum;
|
if ((grandprixinfo.gp == true && grandprixinfo.eventmode != GPEVENT_NONE))
|
||||||
|
{
|
||||||
|
roundNum = INTERMISSIONROUND_BONUS;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
roundNum = roundqueue.roundnum;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -2559,6 +2559,8 @@ static int lib_gAddGametype(lua_State *L)
|
||||||
|
|
||||||
const char *gtname = NULL;
|
const char *gtname = NULL;
|
||||||
const char *gtconst = NULL;
|
const char *gtconst = NULL;
|
||||||
|
const char *gppic = NULL;
|
||||||
|
const char *gppicmini = NULL;
|
||||||
UINT32 newgtrules = 0;
|
UINT32 newgtrules = 0;
|
||||||
UINT32 newgttol = 0;
|
UINT32 newgttol = 0;
|
||||||
INT32 newgtpointlimit = 0;
|
INT32 newgtpointlimit = 0;
|
||||||
|
|
@ -2621,6 +2623,14 @@ static int lib_gAddGametype(lua_State *L)
|
||||||
if (!lua_isnumber(L, 3))
|
if (!lua_isnumber(L, 3))
|
||||||
TYPEERROR("defaulttimelimit", LUA_TNUMBER)
|
TYPEERROR("defaulttimelimit", LUA_TNUMBER)
|
||||||
newgttimelimit = (INT32)lua_tointeger(L, 3);
|
newgttimelimit = (INT32)lua_tointeger(L, 3);
|
||||||
|
} else if (i == 8 || (k && fasticmp(k, "gppic"))) {
|
||||||
|
if (!lua_isstring(L, 3))
|
||||||
|
TYPEERROR("gppic", LUA_TSTRING)
|
||||||
|
gppic = lua_tostring(L, 3);
|
||||||
|
} else if (i == 9 || (k && fasticmp(k, "gppicmini"))) {
|
||||||
|
if (!lua_isstring(L, 3))
|
||||||
|
TYPEERROR("gppicmini", LUA_TSTRING)
|
||||||
|
gppicmini = lua_tostring(L, 3);
|
||||||
}
|
}
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
}
|
}
|
||||||
|
|
@ -2662,6 +2672,18 @@ static int lib_gAddGametype(lua_State *L)
|
||||||
newgametype->pointlimit = newgtpointlimit;
|
newgametype->pointlimit = newgtpointlimit;
|
||||||
newgametype->timelimit = newgttimelimit;
|
newgametype->timelimit = newgttimelimit;
|
||||||
|
|
||||||
|
if (gppic != NULL)
|
||||||
|
{
|
||||||
|
// Calloc means only set if valid
|
||||||
|
strlcpy(newgametype->gppic, gppic, 9);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gppicmini != NULL)
|
||||||
|
{
|
||||||
|
// Calloc means only set if valid
|
||||||
|
strlcpy(newgametype->gppicmini, gppicmini, 9);
|
||||||
|
}
|
||||||
|
|
||||||
gametypes[numgametypes++] = newgametype;
|
gametypes[numgametypes++] = newgametype;
|
||||||
|
|
||||||
// done
|
// done
|
||||||
|
|
|
||||||
|
|
@ -637,7 +637,7 @@ static void ST_cacheLevelTitle(void)
|
||||||
sprintf(buf, "TT_RND%d", i);
|
sprintf(buf, "TT_RND%d", i);
|
||||||
tcroundnum[i-1] = (patch_t *)W_CachePatchName(buf, PU_HUDGFX);
|
tcroundnum[i-1] = (patch_t *)W_CachePatchName(buf, PU_HUDGFX);
|
||||||
}
|
}
|
||||||
tcroundbonus = (patch_t *)W_CachePatchName("TT_RNDB", PU_HUDGFX);
|
tcroundbonus = (patch_t *)W_CachePatchName("TT_RNDX", PU_HUDGFX);
|
||||||
|
|
||||||
// Cache act #
|
// Cache act #
|
||||||
for (i=0; i < 10; i++)
|
for (i=0; i < 10; i++)
|
||||||
|
|
@ -1089,17 +1089,10 @@ void ST_drawTitleCard(void)
|
||||||
; // TODO: Ruby
|
; // TODO: Ruby
|
||||||
else if (grandprixinfo.gp == true && grandprixinfo.eventmode != GPEVENT_NONE)
|
else if (grandprixinfo.gp == true && grandprixinfo.eventmode != GPEVENT_NONE)
|
||||||
{
|
{
|
||||||
switch (grandprixinfo.eventmode)
|
if (gametypes[gametype]->gppic[0])
|
||||||
{
|
roundico = W_CachePatchName(gametypes[gametype]->gppic, PU_PATCH);
|
||||||
case GPEVENT_BONUS:
|
else
|
||||||
roundico = tcroundbonus; // TODO don't show capsule if we have other bonus types
|
roundico = tcroundbonus; // Generic star
|
||||||
break;
|
|
||||||
/*case GPEVENT_SPECIAL:
|
|
||||||
; // TODO: Emerald/mount
|
|
||||||
break;*/
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (roundqueue.size > 0)
|
else if (roundqueue.size > 0)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -378,13 +378,16 @@ static void Y_CalculateMatchData(UINT8 rankingsmode, void (*comparison)(INT32))
|
||||||
skins[players[i].skin].realname);
|
skins[players[i].skin].realname);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (roundqueue.size > 0
|
if (roundqueue.size > 0 && roundqueue.roundnum > 0)
|
||||||
&& roundqueue.roundnum > 0
|
|
||||||
&& (grandprixinfo.gp == false
|
|
||||||
|| grandprixinfo.eventmode == GPEVENT_NONE)
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
data.roundnum = roundqueue.roundnum;
|
if ((grandprixinfo.gp == true && grandprixinfo.eventmode != GPEVENT_NONE))
|
||||||
|
{
|
||||||
|
data.roundnum = INTERMISSIONROUND_BONUS;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
data.roundnum = roundqueue.roundnum;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -1456,14 +1459,29 @@ void Y_DrawIntermissionHeader(fixed_t x, fixed_t y, boolean gotthrough, const ch
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw round numbers
|
// Draw round numbers
|
||||||
if (roundnum > 0 && roundnum <= 10)
|
patch_t *roundpatch = NULL;
|
||||||
|
|
||||||
|
if (roundnum == INTERMISSIONROUND_BONUS)
|
||||||
{
|
{
|
||||||
patch_t *roundpatch =
|
const char *gppic = (small ? gametypes[gametype]->gppicmini : gametypes[gametype]->gppic);
|
||||||
W_CachePatchName(
|
if (gppic[0])
|
||||||
va("TT_RN%s%d", (small ? "S" : "D"), roundnum),
|
roundpatch = W_CachePatchName(gppic, PU_PATCH);
|
||||||
|
else
|
||||||
|
roundpatch = W_CachePatchName(
|
||||||
|
va("TT_RN%cX", (small ? 'S' : 'D')),
|
||||||
PU_PATCH
|
PU_PATCH
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
else if (roundnum > 0 && roundnum <= 10)
|
||||||
|
{
|
||||||
|
roundpatch = W_CachePatchName(
|
||||||
|
va("TT_RN%c%d", (small ? 'S' : 'D'), roundnum),
|
||||||
|
PU_PATCH
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (roundpatch)
|
||||||
|
{
|
||||||
fixed_t roundx = (v_width * 3 * FRACUNIT) / 4;
|
fixed_t roundx = (v_width * 3 * FRACUNIT) / 4;
|
||||||
|
|
||||||
if (headerwidth != 0)
|
if (headerwidth != 0)
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,8 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define INTERMISSIONROUND_BONUS UINT8_MAX
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
boolean rankingsmode; // rankings mode
|
boolean rankingsmode; // rankings mode
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue