diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 21eefaadd..72646fc2f 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -3414,7 +3414,7 @@ void D_SetupVote(void) else WRITEUINT8(p, gt); - if (cv_kartencore.value && cv_encorevotes.value == 0 && (gametyperules & GTR_CIRCUIT)) + if (cv_kartencore.value && cv_encorevotes.value == 0 && (gametypes[gametype]->rules & GTR_CIRCUIT)) WRITEUINT8(p, secondgt|VOTEMODIFIER_ENCORE); else WRITEUINT8(p, secondgt); @@ -3917,7 +3917,7 @@ static void Got_Mapcmd(UINT8 **cp, INT32 playernum) else if (gametype != lastgametype) D_GameTypeChanged(lastgametype); // emulate consvar_t behavior for gametype - if (!(gametyperules & GTR_ENCORE) && !bossinfo.boss) + if (!(gametypes[gametype]->rules & GTR_ENCORE) && !bossinfo.boss) pencoremode = false; skipprecutscene = ((flags & (1<<2)) != 0); @@ -4768,7 +4768,7 @@ static void Got_Teamchange(UINT8 **cp, INT32 playernum) { players[playernum].spectatorreentry = (cv_spectatorreentry.value * TICRATE); - if (gametyperules & GTR_BUMPERS) // SRB2kart + if (gametypes[gametype]->rules & GTR_BUMPERS) // SRB2kart { players[playernum].roundscore = 0; if (K_IsPlayerWanted(&players[playernum])) @@ -6001,7 +6001,7 @@ static void PointLimit_OnChange(void) } // Don't allow pointlimit in non-pointlimited gametypes! - if (server && Playing() && !(gametyperules & GTR_POINTLIMIT)) + if (server && Playing() && !(gametypes[gametype]->rules & GTR_POINTLIMIT)) { if (cv_pointlimit.value) CV_StealthSetValue(&cv_pointlimit, 0); diff --git a/src/doomstat.h b/src/doomstat.h index 1a9ad1b9a..2f3dde5ae 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -531,9 +531,6 @@ enum GameTypeRules // free: to and including 1<<31 }; -// TODO: replace every instance -#define gametyperules (gametypes[gametype]->rules) - // TypeOfLevel things enum TypeOfLevel { diff --git a/src/g_game.c b/src/g_game.c index 9793a6e0c..e8cc6fee0 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -2220,7 +2220,7 @@ boolean G_CouldView(INT32 playernum) return false; // I don't know if we want this actually, but I'll humor the suggestion anyway - if ((gametyperules & GTR_BUMPERS) && !demo.playback) + if ((gametypes[gametype]->rules & GTR_BUMPERS) && !demo.playback) { if (player->bumper <= 0) return false; @@ -2962,7 +2962,7 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps) itemamount = 0; growshrinktimer = 0; bubblehealth = 0; - bumper = ((gametyperules & GTR_BUMPERS) ? K_StartingBumperCount() : 0); + bumper = ((gametypes[gametype]->rules & GTR_BUMPERS) ? K_StartingBumperCount() : 0); karmapoints = 0; wanted = 0; rings = cv_kartringsstart.value; @@ -3370,7 +3370,7 @@ mapthing_t *G_FindTeamStart(INT32 playernum) if (!numredctfstarts && !numbluectfstarts) //why even bother, eh? { - if ((gametyperules & GTR_TEAMSTARTS) && doprints) + if ((gametypes[gametype]->rules & GTR_TEAMSTARTS) && doprints) CONS_Alert(CONS_WARNING, M_GetText("No CTF starts in this map!\n")); return NULL; } @@ -3450,7 +3450,7 @@ mapthing_t *G_FindBattleStart(INT32 playernum) } } - if ((gametyperules & GTR_BATTLESTARTS) && doprints) + if ((gametypes[gametype]->rules & GTR_BATTLESTARTS) && doprints) CONS_Alert(CONS_WARNING, M_GetText("No Deathmatch starts in this map!\n")); return NULL; } @@ -3599,7 +3599,7 @@ mapthing_t *G_FindMapStart(INT32 playernum) { // In platform gametypes, spawn in Co-op starts first // Overriden by GTR_BATTLESTARTS. - if (gametyperules & GTR_BATTLESTARTS && bossinfo.boss == false) + if (gametypes[gametype]->rules & GTR_BATTLESTARTS && bossinfo.boss == false) spawnpoint = G_FindBattleStartOrFallback(playernum); else spawnpoint = G_FindRaceStartOrFallback(playernum); @@ -3612,12 +3612,12 @@ mapthing_t *G_FindMapStart(INT32 playernum) // -- CTF -- // Order: CTF->DM->Race - else if ((gametyperules & GTR_TEAMSTARTS) && players[playernum].ctfteam) + else if ((gametypes[gametype]->rules & GTR_TEAMSTARTS) && players[playernum].ctfteam) spawnpoint = G_FindTeamStartOrFallback(playernum); // -- DM/Tag/CTF-spectator/etc -- // Order: DM->CTF->Race - else if (gametyperules & GTR_BATTLESTARTS) + else if (gametypes[gametype]->rules & GTR_BATTLESTARTS) spawnpoint = G_FindBattleStartOrFallback(playernum); // -- Other game modes -- @@ -4096,12 +4096,12 @@ boolean G_GametypeUsesLives(void) // boolean G_GametypeHasTeams(void) { - if (gametyperules & GTR_TEAMS) + if (gametypes[gametype]->rules & GTR_TEAMS) { // Teams forced on by this gametype return true; } - else if (gametyperules & GTR_NOTEAMS) + else if (gametypes[gametype]->rules & GTR_NOTEAMS) { // Teams forced off by this gametype return false; @@ -4873,7 +4873,7 @@ static void G_DoCompleted(void) } // See Y_StartIntermission timer handling - if ((gametyperules & GTR_CIRCUIT) && ((multiplayer && demo.playback) || j == r_splitscreen+1) && (!K_CanChangeRules(false) || cv_inttime.value > 0)) + if ((gametypes[gametype]->rules & GTR_CIRCUIT) && ((multiplayer && demo.playback) || j == r_splitscreen+1) && (!K_CanChangeRules(false) || cv_inttime.value > 0)) // play some generic music if there's no win/cool/lose music going on (for exitlevel commands) { S_ChangeMusicInternal("racent", true); diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 8bb9737e4..d8180e319 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -2549,9 +2549,9 @@ static void HU_DrawRankings(void) V_DrawString(4, 188, hilicol|V_SNAPTOBOTTOM|V_SNAPTOLEFT, (modeattacking) ? "Record Attack" : gametype_cons_t[gametype].strvalue); } - if ((gametyperules & (GTR_TIMELIMIT|GTR_POINTLIMIT)) && !bossinfo.boss) + if ((gametypes[gametype]->rules & (GTR_TIMELIMIT|GTR_POINTLIMIT)) && !bossinfo.boss) { - if ((gametyperules & GTR_TIMELIMIT) && timelimitintics > 0) + if ((gametypes[gametype]->rules & GTR_TIMELIMIT) && timelimitintics > 0) { UINT32 timeval = (timelimitintics + starttime + 1 - leveltime); if (timeval > timelimitintics+1) @@ -2572,7 +2572,7 @@ static void HU_DrawRankings(void) } } - if ((gametyperules & GTR_POINTLIMIT) && cv_pointlimit.value > 0) + if ((gametypes[gametype]->rules & GTR_POINTLIMIT) && cv_pointlimit.value > 0) { V_DrawCenteredString(256, 8, 0, "POINT LIMIT"); V_DrawCenteredString(256, 16, hilicol, va("%d", cv_pointlimit.value)); @@ -2632,7 +2632,7 @@ static void HU_DrawRankings(void) tab[scorelines].name = player_names[i]; - if (gametyperules & GTR_CIRCUIT) + if (gametypes[gametype]->rules & GTR_CIRCUIT) { if (!players[i].exiting) sprintf(tab[scorelines].string, "Lap %d", players[i].laps); @@ -2645,7 +2645,7 @@ static void HU_DrawRankings(void) sprintf(tab[scorelines].string, "%i'%02i\"%02i", min, sec, cen); } } - else if (gametyperules & GTR_POINTS) + else if (gametypes[gametype]->rules & GTR_POINTS) sprintf(tab[scorelines].string, "%d", players[i].roundscore); scorelines++; diff --git a/src/k_battle.c b/src/k_battle.c index 3e7c163ac..bdc8537dd 100644 --- a/src/k_battle.c +++ b/src/k_battle.c @@ -42,7 +42,7 @@ boolean K_IsPlayerWanted(player_t *player) { UINT8 i; - if (!(gametyperules & GTR_WANTED)) + if (!(gametypes[gametype]->rules & GTR_WANTED)) return false; for (i = 0; i < 4; i++) @@ -60,7 +60,7 @@ boolean K_IsPlayerMostWanted(player_t *player) if (mostwanted == -1) return false; - if (!(gametyperules & GTR_WANTEDSPB)) + if (!(gametypes[gametype]->rules & GTR_WANTEDSPB)) return false; if (player == &players[mostwanted]) @@ -78,7 +78,7 @@ void K_CalculateBattleWanted(void) mostwanted = -1; - if (!(gametyperules & GTR_WANTED)) + if (!(gametypes[gametype]->rules & GTR_WANTED)) { memset(battlewanted, -1, sizeof (battlewanted)); return; @@ -227,7 +227,7 @@ void K_CheckBumpers(void) UINT32 winnerscoreadd = 0, maxroundscore = 0; boolean nobumpers = false; - if (!(gametyperules & GTR_BUMPERS)) + if (!(gametypes[gametype]->rules & GTR_BUMPERS)) return; if (gameaction == ga_completed) @@ -355,7 +355,7 @@ void K_RunPaperItemSpawners(void) } if ((players[i].exiting > 0 || (players[i].pflags & PF_ELIMINATED)) - || ((gametyperules & GTR_BUMPERS) && players[i].bumper <= 0)) + || ((gametypes[gametype]->rules & GTR_BUMPERS) && players[i].bumper <= 0)) { continue; } @@ -489,7 +489,7 @@ void K_SpawnPlayerBattleBumpers(player_t *p) void K_BattleInit(boolean singleplayercontext) { - if ((gametyperules & GTR_ITEMBREAKER) && singleplayercontext && !itembreaker && !bossinfo.boss) + if ((gametypes[gametype]->rules & GTR_ITEMBREAKER) && singleplayercontext && !itembreaker && !bossinfo.boss) { if (!(K_CanChangeRules(true) && !cv_kartitembreaker.value)) itembreaker = true; @@ -501,7 +501,7 @@ void K_BattleInit(boolean singleplayercontext) } } - if (gametyperules & GTR_BUMPERS) + if (gametypes[gametype]->rules & GTR_BUMPERS) { INT32 maxbumpers = K_StartingBumperCount(); UINT8 i; @@ -519,7 +519,7 @@ void K_BattleInit(boolean singleplayercontext) // Handle respawning the battle boxes. void K_RespawnBattleBoxes(void) { - if (!(gametyperules & GTR_BATTLEBOXES)) + if (!(gametypes[gametype]->rules & GTR_BATTLEBOXES)) return; if (itembreaker) diff --git a/src/k_bot.cpp b/src/k_bot.cpp index b5bef1d4b..68f454eb2 100644 --- a/src/k_bot.cpp +++ b/src/k_bot.cpp @@ -263,7 +263,7 @@ void K_UpdateMatchRaceBots(void) { difficulty = 0; } - else if ((gametyperules & GTR_BOTS) == 0 && !cv_forcebots.value) + else if ((gametypes[gametype]->rules & GTR_BOTS) == 0 && !cv_forcebots.value) { difficulty = 0; } @@ -1608,7 +1608,7 @@ void K_BotTicker(const player_t *player) bd->itemthrow = 0; boolean onground = P_IsObjectOnGround(player->mo); - if (!(gametyperules & GTR_BOTS) // No bot behaviors + if (!(gametypes[gametype]->rules & GTR_BOTS) // No bot behaviors || K_GetNumWaypoints() == 0 // No waypoints || leveltime <= introtime // During intro camera || player->playerstate == PST_DEAD // Dead, respawning. diff --git a/src/k_collide.c b/src/k_collide.c index 29a46f2dd..8dfc2ff76 100644 --- a/src/k_collide.c +++ b/src/k_collide.c @@ -253,7 +253,7 @@ boolean K_EggItemCollide(mobj_t *t1, mobj_t *t2) if (!P_CanPickupItem(t2->player, PICKUPITEM_EGGMAN)) return true; - if ((gametyperules & GTR_BUMPERS) && t2->player->bumper <= 0) + if ((gametypes[gametype]->rules & GTR_BUMPERS) && t2->player->bumper <= 0) { if (t2->player->karmamode || t2->player->karmadelay) return true; @@ -288,7 +288,7 @@ boolean K_EggItemCollide(mobj_t *t1, mobj_t *t2) if (t1->target && t1->target->player) { - if ((gametyperules & GTR_CIRCUIT) || t1->target->player->bumper > 0) + if ((gametypes[gametype]->rules & GTR_CIRCUIT) || t1->target->player->bumper > 0) t2->player->eggmanblame = t1->target->player-players; else t2->player->eggmanblame = t2->player-players; @@ -1111,7 +1111,7 @@ boolean K_PvPTouchDamage(mobj_t *t1, mobj_t *t2) // Battle Mode Sneaker damage // (Pogo Spring damage is handled in head-stomping code) - if (gametyperules & GTR_BUMPERS) + if (gametypes[gametype]->rules & GTR_BUMPERS) { t1Condition = ((t1->player->sneakertimer > 0) && !P_PlayerInPain(t1->player) diff --git a/src/k_director.c b/src/k_director.c index 852d553ae..fa8b066dc 100644 --- a/src/k_director.c +++ b/src/k_director.c @@ -52,7 +52,7 @@ static INT32 K_PlayersPlaying(void) static inline boolean race_rules(void) { - return (gametyperules & GTR_CIRCUIT); + return (gametypes[gametype]->rules & GTR_CIRCUIT); } static fixed_t ScaleFromMap(fixed_t n, fixed_t scale) diff --git a/src/k_grandprix.c b/src/k_grandprix.c index 8d7ef9056..a588ef45c 100644 --- a/src/k_grandprix.c +++ b/src/k_grandprix.c @@ -789,7 +789,7 @@ boolean K_BotDefaultSpectator(void) return false; } - if (!(gametyperules & GTR_BOTS)) + if (!(gametypes[gametype]->rules & GTR_BOTS)) { // This gametype does not support bots. return true; diff --git a/src/k_hud.c b/src/k_hud.c index a29eb3778..4e528f8b2 100644 --- a/src/k_hud.c +++ b/src/k_hud.c @@ -2256,7 +2256,7 @@ static boolean K_drawKartPositionFaces(void) if (LUA_HudEnabled(hud_battlebumpers)) { - if ((gametyperules & GTR_BUMPERS) && players[rankplayer[i]].bumper > 0) + if ((gametypes[gametype]->rules & GTR_BUMPERS) && players[rankplayer[i]].bumper > 0) { V_DrawMappedPatch(bumperx-2, Y, V_HUDTRANS|V_SNAPTOLEFT, kp_tinybumper[0], colormap); for (j = 1; j < players[rankplayer[i]].bumper; j++) @@ -2294,7 +2294,7 @@ static boolean K_drawKartPositionFaces(void) V_DrawScaledPatch(FACE_X+left, Y+top, V_HUDTRANS|V_SNAPTOLEFT, highlight); } - if ((gametyperules & GTR_BUMPERS) && players[rankplayer[i]].bumper <= 0) + if ((gametypes[gametype]->rules & GTR_BUMPERS) && players[rankplayer[i]].bumper <= 0) V_DrawScaledPatch(FACE_X-4, Y-3, V_HUDTRANS|V_SNAPTOLEFT, kp_ranknobumpers); else { @@ -2529,7 +2529,7 @@ INT32 K_DrawNeoTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines colormap ); - /*if ((gametyperules & GTR_BUMPERS) && players[tab[i].num].bumper > 0) -- not enough space for this + /*if ((gametypes[gametype]->rules & GTR_BUMPERS) && players[tab[i].num].bumper > 0) -- not enough space for this { INT32 bumperx = x+19; V_DrawMappedPatch(bumperx-2, y-4, 0, kp_tinybumper[0], colormap); @@ -2552,7 +2552,7 @@ INT32 K_DrawNeoTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines NULL ); - if ((gametyperules & GTR_BUMPERS) && players[tab[i].num].bumper <= 0) + if ((gametypes[gametype]->rules & GTR_BUMPERS) && players[tab[i].num].bumper <= 0) V_DrawScaledPatch(x2-4, y-7, 0, kp_ranknobumpers); if (tab[i].string[0] != '\0') @@ -2782,7 +2782,7 @@ void K_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, IN V_DrawMappedPatch(x+facerank->leftoffset, y-4+facerank->topoffset, 0, facerank, colormap); - /*if ((gametyperules & GTR_BUMPERS) && players[tab[i].num].bumper > 0) -- not enough space for this + /*if ((gametypes[gametype]->rules & GTR_BUMPERS) && players[tab[i].num].bumper > 0) -- not enough space for this { INT32 bumperx = x+19; V_DrawMappedPatch(bumperx-2, y-4, 0, kp_tinybumper[0], colormap); @@ -2799,7 +2799,7 @@ void K_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, IN V_DrawScaledPatch(x+highlight->leftoffset, y-4+highlight->topoffset, 0, highlight); } - if ((gametyperules & GTR_BUMPERS) && players[tab[i].num].bumper <= 0) + if ((gametypes[gametype]->rules & GTR_BUMPERS) && players[tab[i].num].bumper <= 0) V_DrawScaledPatch(x-4, y-7, 0, kp_ranknobumpers); else { @@ -3014,7 +3014,7 @@ static void K_drawKartAccessibilityIcons(INT32 fx) if ((cv_newspeedometer.value == 0 || cv_newspeedometer.value == 2) && !K_RingsActive()) fy += 18; - if ((gametyperules & GTR_BUMPERS) && !(gametyperules & GTR_CIRCUIT)) + if ((gametypes[gametype]->rules & GTR_BUMPERS) && !(gametypes[gametype]->rules & GTR_CIRCUIT)) fy -= 4; } } @@ -3105,7 +3105,7 @@ static void K_drawKartSpeedometer(void) if (cv_speed_xoffset.value == 0 && cv_speed_yoffset.value == 0) { - if ((gametyperules & GTR_BUMPERS) && !(gametyperules & GTR_CIRCUIT)) + if ((gametypes[gametype]->rules & GTR_BUMPERS) && !(gametypes[gametype]->rules & GTR_CIRCUIT)) battleoffset = -4; if (K_RingsActive() == true) @@ -3234,7 +3234,7 @@ static void K_drawRingMeter(void) if (cv_speed_xoffset.value == 0 && cv_speed_yoffset.value == 0) { - if ((gametyperules & GTR_BUMPERS) && !(gametyperules & GTR_CIRCUIT)) + if ((gametypes[gametype]->rules & GTR_BUMPERS) && !(gametypes[gametype]->rules & GTR_CIRCUIT)) ringoffsety -= 4; if (itembreaker) @@ -3352,7 +3352,7 @@ static void K_drawKartBumpersOrKarma(void) } else { - if (stplyr->bumper <= 0 && (gametyperules & GTR_KARMA) && comeback) + if (stplyr->bumper <= 0 && (gametypes[gametype]->rules & GTR_KARMA) && comeback) { V_DrawMappedPatch(fx, fy-1, V_HUDTRANS|splitflags, kp_splitkarmabomb, colormap); V_DrawScaledPatch(fx+13, fy, V_HUDTRANS|splitflags, kp_facenum[stplyr->karmapoints % 10]); @@ -3459,7 +3459,7 @@ static void K_drawKartWanted(void) basex -= 48; // Position Number offset.... - if (gametyperules & GTR_CIRCUIT) + if (gametypes[gametype]->rules & GTR_CIRCUIT) basex -= 30; } } @@ -3626,7 +3626,7 @@ static boolean K_ShowPlayerNametag(player_t *p) return false; } - if (gametyperules & GTR_CIRCUIT) + if (gametypes[gametype]->rules & GTR_CIRCUIT) { if ((p->position == 0) || (stplyr->position == 0) @@ -4359,7 +4359,7 @@ static void K_drawKartMinimap(void) } // Now we know it's not a display player, handle non-local player exceptions. - if ((gametyperules & GTR_BUMPERS) && players[i].bumper <= 0) + if ((gametypes[gametype]->rules & GTR_BUMPERS) && players[i].bumper <= 0) continue; if (players[i].hyudorotimer > 0) @@ -4563,7 +4563,7 @@ static void K_drawKartMinimap(void) // Target reticule if ((gametype == GT_RACE && players[i].position == spbplace) - || ((gametyperules & GTR_WANTED) && K_IsPlayerWanted(&players[i]))) + || ((gametypes[gametype]->rules & GTR_WANTED) && K_IsPlayerWanted(&players[i]))) { K_drawKartMinimapIcon(interpx, interpy, x, y, splitflags, kp_wantedreticle, NULL, NULL); } @@ -4916,7 +4916,7 @@ static void K_drawKartMinimap(void) // Target reticule if ((gametype == GT_RACE && players[localplayers[i]].position == spbplace) - || ((gametyperules & GTR_WANTED) && K_IsPlayerWanted(&players[localplayers[i]]))) + || ((gametypes[gametype]->rules & GTR_WANTED) && K_IsPlayerWanted(&players[localplayers[i]]))) { K_drawKartMinimapIcon(interpx, interpy, x, y, splitflags, kp_wantedreticle, NULL, NULL); } @@ -6121,7 +6121,7 @@ void K_drawKartHUD(void) return; } - battlefullscreen = ((gametyperules & (GTR_BUMPERS|GTR_KARMA)) == (GTR_BUMPERS|GTR_KARMA) + battlefullscreen = ((gametypes[gametype]->rules & (GTR_BUMPERS|GTR_KARMA)) == (GTR_BUMPERS|GTR_KARMA) && (stplyr->exiting || (stplyr->bumper <= 0 && stplyr->karmadelay > 0 @@ -6141,7 +6141,7 @@ void K_drawKartHUD(void) K_drawKartNameTags(); // Draw WANTED status - if (gametyperules & GTR_WANTED) + if (gametypes[gametype]->rules & GTR_WANTED) { if (LUA_HudEnabled(hud_wanted)) K_drawKartWanted(); @@ -6228,7 +6228,7 @@ void K_drawKartHUD(void) { K_drawBossHealthBar(); } - else if (gametyperules & GTR_CIRCUIT) // Race-only elements + else if (gametypes[gametype]->rules & GTR_CIRCUIT) // Race-only elements { if (!islonesome) { @@ -6240,12 +6240,12 @@ void K_drawKartHUD(void) if (LUA_HudEnabled(hud_gametypeinfo)) { - if (gametyperules & GTR_CIRCUIT) + if (gametypes[gametype]->rules & GTR_CIRCUIT) { K_drawKartLaps(); K_drawKartStatsnLives(); } - else if (gametyperules & GTR_BUMPERS) + else if (gametypes[gametype]->rules & GTR_BUMPERS) { K_drawKartBumpersOrKarma(); } @@ -6276,7 +6276,7 @@ void K_drawKartHUD(void) } // Draw the countdowns after everything else. - if (!(gametyperules & GTR_NOCOUNTDOWN) && starttime != introtime + if (!(gametypes[gametype]->rules & GTR_NOCOUNTDOWN) && starttime != introtime && leveltime >= introtime && leveltime < starttime+TICRATE) { @@ -6296,7 +6296,7 @@ void K_drawKartHUD(void) } // Race overlays - if ((gametyperules & GTR_CIRCUIT) && !freecam) + if ((gametypes[gametype]->rules & GTR_CIRCUIT) && !freecam) { if (stplyr->exiting) K_drawKartFinish(); @@ -6311,7 +6311,7 @@ void K_drawKartHUD(void) return; // TODO: Make this slide like the other titlecards - if ((gametyperules & GTR_KARMA) && !r_splitscreen && stplyr->karthud[khud_yougotem]) // * YOU GOT EM * + if ((gametypes[gametype]->rules & GTR_KARMA) && !r_splitscreen && stplyr->karthud[khud_yougotem]) // * YOU GOT EM * V_DrawScaledPatch(BASEVIDWIDTH/2 - (kp_yougotem->width/2), 32, V_HUDTRANS, kp_yougotem); // Draw FREE PLAY. diff --git a/src/k_hud_track.cpp b/src/k_hud_track.cpp index 6a7beabfe..f1e406be3 100644 --- a/src/k_hud_track.cpp +++ b/src/k_hud_track.cpp @@ -215,7 +215,7 @@ private: bool is_player_tracking_target(player_t *player = stplyr) { - if ((gametyperules & (GTR_BUMPERS|GTR_CLOSERPLAYERS)) != (GTR_BUMPERS|GTR_CLOSERPLAYERS)) + if ((gametypes[gametype]->rules & (GTR_BUMPERS|GTR_CLOSERPLAYERS)) != (GTR_BUMPERS|GTR_CLOSERPLAYERS)) { return false; } diff --git a/src/k_items.c b/src/k_items.c index 20e350d1d..b67993b7d 100644 --- a/src/k_items.c +++ b/src/k_items.c @@ -293,7 +293,7 @@ static boolean K_RaceForceSPB(SINT8 playerpos, UINT32 pdis) return false; } - return ((gametyperules & GTR_CIRCUIT) && playerpos == 2 && pdis > (UINT32)(7 * spb_res->augcvar[idx]->value / 2)); + return ((gametypes[gametype]->rules & GTR_CIRCUIT) && playerpos == 2 && pdis > (UINT32)(7 * spb_res->augcvar[idx]->value / 2)); } // 1/21/2025: I hate tiptoeing around the integer limit. @@ -541,7 +541,7 @@ void K_UpdateItemCooldown(void) if (!playeringame[i] || player->spectator || player->exiting > 0) continue; - if (gametyperules & GTR_BUMPERS && player->bumper == 0) + if (gametypes[gametype]->rules & GTR_BUMPERS && player->bumper == 0) continue; // special case for legacy shrink @@ -585,7 +585,7 @@ void K_UpdateItemCooldown(void) { kartresult_t *result = &kartresults[i]; if (result->isalt == K_IsKartItemAlternate(result->type) - && (gametyperules & GTR_RACEODDS || result->flags & KRF_INDIRECTITEM) + && (gametypes[gametype]->rules & GTR_RACEODDS || result->flags & KRF_INDIRECTITEM) && setcooldown[result->type]) result->cooldown = result->basecooldown; } @@ -654,16 +654,16 @@ static INT32 GetItemOdds(kartroulette_t *roulette, kartresult_t *result, UINT8 * // Item type used for actual odds retrieval and cooldown assignments. UINT8 oddstable; - if (gametyperules & GTR_BATTLEODDS) + if (gametypes[gametype]->rules & GTR_BATTLEODDS) oddstable = ODDS_BATTLE; - else if (gametyperules & GTR_RACEODDS) + else if (gametypes[gametype]->rules & GTR_RACEODDS) oddstable = ODDS_RACE; else oddstable = ODDS_SPECIAL; I_Assert(roulette->pos < oddstablemax[oddstable]); // DO NOT allow positions past the bounds of the table - if (gametyperules & GTR_BATTLEODDS) + if (gametypes[gametype]->rules & GTR_BATTLEODDS) oddsmul = BATTLEODDSMUL; // TODO: braaap (make a separate table for the current level!) @@ -683,7 +683,7 @@ static INT32 GetItemOdds(kartroulette_t *roulette, kartresult_t *result, UINT8 * if (!playeringame[i] || players[i].spectator) continue; - if (!(gametyperules & GTR_BUMPERS) || players[i].bumper) + if (!(gametypes[gametype]->rules & GTR_BUMPERS) || players[i].bumper) roulette->pingame++; if (players[i].exiting) @@ -937,7 +937,7 @@ UINT8 K_FindUseodds(const player_t *player, fixed_t mashed, UINT32 pdis, UINT8 b { boolean available = false; - if ((gametyperules & GTR_BATTLEODDS) && i > 1) + if ((gametypes[gametype]->rules & GTR_BATTLEODDS) && i > 1) { oddsvalid[i] = false; break; @@ -966,7 +966,7 @@ UINT8 K_FindUseodds(const player_t *player, fixed_t mashed, UINT32 pdis, UINT8 b distlen = min(sizeof(disttable) - 1, distlen); \ } - if (gametyperules & GTR_BATTLEODDS) // Battle Mode + if (gametypes[gametype]->rules & GTR_BATTLEODDS) // Battle Mode { if (player->roulettetype == KROULETTETYPE_KARMA && oddsvalid[1] == true) { @@ -984,7 +984,7 @@ UINT8 K_FindUseodds(const player_t *player, fixed_t mashed, UINT32 pdis, UINT8 b } } } - else if (gametyperules & GTR_RACEODDS) + else if (gametypes[gametype]->rules & GTR_RACEODDS) { INT32 tablediv = FixedMul(2, oddsfac); @@ -1080,7 +1080,7 @@ UINT8* K_GetRollableItems(void) roulette_size = 0; - if (gametyperules & GTR_BATTLEODDS) + if (gametypes[gametype]->rules & GTR_BATTLEODDS) oddstable = ODDS_BATTLE; else oddstable = ODDS_RACE; @@ -1317,7 +1317,7 @@ UINT32 K_CalculatePDIS(const player_t *player, UINT8 numPlayers, boolean *spbrus static boolean K_BattleForceSPB(player_t *player) { - boolean battlecond = ((gametyperules & GTR_WANTED) && (gametyperules & GTR_WANTEDSPB) && (mostwanted != -1) && (!K_IsPlayerMostWanted(player))); + boolean battlecond = ((gametypes[gametype]->rules & GTR_WANTED) && (gametypes[gametype]->rules & GTR_WANTEDSPB) && (mostwanted != -1) && (!K_IsPlayerMostWanted(player))); return battlecond; } @@ -1415,7 +1415,7 @@ void K_KartItemRoulette(player_t *player, ticcmd_t *cmd) // SPECIAL CASE No. 3: // This Gametype never specified an odds type. Roll something random please! - if (!(gametyperules & GTR_RACEODDS) && !(gametyperules & GTR_BATTLEODDS)) + if (!(gametypes[gametype]->rules & GTR_RACEODDS) && !(gametypes[gametype]->rules & GTR_BATTLEODDS)) { UINT8 itemroll = P_RandomRange(0, numkartresults - 1); K_AwardPlayerResult(player, &kartresults[itemroll], KITEMBLINK_NORMAL); @@ -1425,10 +1425,10 @@ void K_KartItemRoulette(player_t *player, ticcmd_t *cmd) // SPECIAL CASE No. 4: // Record Attack / alone mashing behavior if ((modeattacking || pingame == 1) - && ((gametyperules & GTR_RACEODDS) - || ((gametyperules & GTR_BATTLEODDS) && (itembreaker || bossinfo.boss)))) + && ((gametypes[gametype]->rules & GTR_RACEODDS) + || ((gametypes[gametype]->rules & GTR_BATTLEODDS) && (itembreaker || bossinfo.boss)))) { - if ((gametyperules & GTR_RACEODDS)) + if ((gametypes[gametype]->rules & GTR_RACEODDS)) { if (mashed && (K_ItemResultEnabled(K_GetKartResult("superring")) || (modeattacking && K_RingsActive()))) // ANY mashed value? You get rings. { @@ -1442,7 +1442,7 @@ void K_KartItemRoulette(player_t *player, ticcmd_t *cmd) K_AwardPlayerResult(player, NULL, KITEMBLINK_NORMAL); } } - else if (gametyperules & GTR_BATTLEODDS) + else if (gametypes[gametype]->rules & GTR_BATTLEODDS) { if (mashed && (bossinfo.boss || K_ItemResultEnabled(K_GetKartResult("banana"))) && !itembreaker) // ANY mashed value? You get a banana. K_AwardPlayerResult(player, K_GetKartResult("banana"), KITEMBLINK_MASHED); @@ -1650,7 +1650,7 @@ static void K_DoGrowShrink(player_t *player, boolean shrinking) } else { - player->growshrinktimer = (gametyperules & GTR_CLOSERPLAYERS ? 8 : 12) * ((shrinking) ? -TICRATE : TICRATE); + player->growshrinktimer = (gametypes[gametype]->rules & GTR_CLOSERPLAYERS ? 8 : 12) * ((shrinking) ? -TICRATE : TICRATE); } if (shrinking) @@ -1773,7 +1773,7 @@ static void K_DoHyudoroSteal(player_t *player) // Can steal from this player && (gametype == GT_RACE //&& players[i].position < player->position) - || ((gametyperules & GTR_BUMPERS) && players[i].bumper > 0)) + || ((gametypes[gametype]->rules & GTR_BUMPERS) && players[i].bumper > 0)) // Has an item && (players[i].itemtype diff --git a/src/k_kart.c b/src/k_kart.c index dfeba5f46..0e4dbb818 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -139,7 +139,7 @@ void K_TimerInit(void) introtime = (108) + 5; // 108 for rotation, + 5 for white fade starttime = 6*TICRATE + (3*TICRATE/4); - if (gametyperules & GTR_NOCOUNTDOWN) + if (gametypes[gametype]->rules & GTR_NOCOUNTDOWN) { starttime = 0; } @@ -147,7 +147,7 @@ void K_TimerInit(void) K_BattleInit(domodeattack); - if ((gametyperules & GTR_TIMELIMIT) && !bossinfo.boss && !modeattacking) + if ((gametypes[gametype]->rules & GTR_TIMELIMIT) && !bossinfo.boss && !modeattacking) { if (!K_CanChangeRules(true)) { @@ -1126,7 +1126,7 @@ static void K_UpdateDraft(player_t *player) minDist = cv_kartdrafting_closedeadzone.value * player->mo->scale; - if (gametyperules & GTR_CLOSERPLAYERS) + if (gametypes[gametype]->rules & GTR_CLOSERPLAYERS) { minDist /= 4; draftdistance *= 2; @@ -1221,7 +1221,7 @@ static void K_UpdateDraft(player_t *player) fixed_t add = (FRACUNIT/200) + ((9 - player->kartspeed+(player->kartspeed/3)) * ((3*FRACUNIT)/1600)); player->draftpower += add; - if (gametyperules & GTR_CLOSERPLAYERS) + if (gametypes[gametype]->rules & GTR_CLOSERPLAYERS) { // Double gain in Battle player->draftpower += add; @@ -3031,7 +3031,7 @@ fixed_t K_GetKartSpeedFromStat(UINT8 kartspeed, boolean karmabomb) fixed_t K_GetKartSpeed(const player_t *player, boolean doboostpower, boolean dorubberband) { - boolean karmabomb = ((gametyperules & GTR_BUMPERS) && player->bumper <= 0); + boolean karmabomb = ((gametypes[gametype]->rules & GTR_BUMPERS) && player->bumper <= 0); fixed_t finalspeed; if (doboostpower && player->forcedtopspeed > 0) @@ -3077,7 +3077,7 @@ fixed_t K_GetKartAccel(const player_t *player) fixed_t k_accel = 32; // 36; UINT8 kartspeed = player->kartspeed; - if ((gametyperules & GTR_BUMPERS) && player->bumper <= 0) + if ((gametypes[gametype]->rules & GTR_BUMPERS) && player->bumper <= 0) kartspeed = 1; k_accel += 4 * (9 - kartspeed); // 32 - 64 @@ -3462,7 +3462,7 @@ void K_BattleAwardHit(player_t *player, player_t *victim, mobj_t *inflictor, UIN // +3 points for hitting a wanted player points = 3; } - else if (gametyperules & GTR_BUMPERS) + else if (gametypes[gametype]->rules & GTR_BUMPERS) { if ((victim->bumper > 0) && (victim->bumper <= bumpersRemoved)) { @@ -3472,7 +3472,7 @@ void K_BattleAwardHit(player_t *player, player_t *victim, mobj_t *inflictor, UIN } } - if (gametyperules & GTR_POINTS) + if (gametypes[gametype]->rules & GTR_POINTS) { P_AddPlayerScore(player, points); K_SpawnBattlePoints(player, victim, points); @@ -3651,7 +3651,7 @@ boolean K_IsPlayerDamaged(const player_t *player) void K_HandleBumperChanges(player_t *player, UINT8 prevBumpers) { - if (!(gametyperules & GTR_BUMPERS)) + if (!(gametypes[gametype]->rules & GTR_BUMPERS)) { // Bumpers aren't being used return; @@ -3694,7 +3694,7 @@ void K_DestroyBumpers(player_t *player, UINT8 amount) { UINT8 oldBumpers = player->bumper; - if (!(gametyperules & GTR_BUMPERS)) + if (!(gametypes[gametype]->rules & GTR_BUMPERS)) { return; } @@ -3717,7 +3717,7 @@ void K_TakeBumpersFromPlayer(player_t *player, player_t *victim, UINT8 amount) UINT8 tookBumpers = 0; - if (!(gametyperules & GTR_BUMPERS)) + if (!(gametypes[gametype]->rules & GTR_BUMPERS)) { return; } @@ -4319,7 +4319,7 @@ void K_SpawnBoostTrail(player_t *player) if (!P_IsObjectOnGround(player->mo) || player->hyudorotimer != 0 - || ((gametyperules & GTR_BUMPERS) && player->bumper <= 0 && player->karmadelay)) + || ((gametypes[gametype]->rules & GTR_BUMPERS) && player->bumper <= 0 && player->karmadelay)) return; if (player->mo->eflags & MFE_VERTICALFLIP) @@ -6215,7 +6215,7 @@ player_t *K_FindJawzTarget(mobj_t *actor, player_t *source) thisang = InvAngle(thisang); // Jawz only go after the person directly ahead of you in race... sort of literally now! - if (gametyperules & GTR_CIRCUIT) + if (gametypes[gametype]->rules & GTR_CIRCUIT) { // Don't go for people who are behind you if (thisang > ANGLE_67h) @@ -6465,7 +6465,7 @@ void K_KartPlayerHUDUpdate(player_t *player) if (player->karthud[khud_taunthorns]) player->karthud[khud_taunthorns]--; - if (gametyperules & GTR_RINGS) + if (gametypes[gametype]->rules & GTR_RINGS) { if ((K_RingsActive() == true)) { @@ -6484,7 +6484,7 @@ void K_KartPlayerHUDUpdate(player_t *player) else player->karthud[khud_finish] = 0; - if ((gametyperules & GTR_BUMPERS) && (player->exiting || player->karmadelay)) + if ((gametypes[gametype]->rules & GTR_BUMPERS) && (player->exiting || player->karmadelay)) { if (player->exiting) { @@ -6746,7 +6746,7 @@ static void K_RaceStart(player_t *player) UINT8 K_RaceLapCount(INT16 mapNum) { - if (!(gametyperules & GTR_CIRCUIT)) + if (!(gametypes[gametype]->rules & GTR_CIRCUIT)) { // Not in Race mode return 0; @@ -7373,7 +7373,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) player->rings = player->ringmin; } - if (comeback == false || !(gametyperules & GTR_KARMA) || (player->pflags & PF_ELIMINATED)) + if (comeback == false || !(gametypes[gametype]->rules & GTR_KARMA) || (player->pflags & PF_ELIMINATED)) { player->karmadelay = comebacktime; } @@ -7485,7 +7485,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (!playeringame[i] || players[i].spectator) continue; - if (!(gametyperules & GTR_BUMPERS) || players[i].bumper) + if (!(gametypes[gametype]->rules & GTR_BUMPERS) || players[i].bumper) pingame++; if (pingame > 1) // We only want to see if one player is playing. @@ -7709,7 +7709,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->eggmanexplode) { - if (player->spectator || ((gametyperules & GTR_BUMPERS) && !player->bumper)) + if (player->spectator || ((gametypes[gametype]->rules & GTR_BUMPERS) && !player->bumper)) player->eggmanexplode = 0; else { @@ -9260,7 +9260,7 @@ INT16 K_GetKartTurnValue(const player_t *player, INT16 turnvalue) INT32 K_GetKartDriftSparkValue(const player_t *player) { - UINT8 kartspeed = ((gametyperules & GTR_BUMPERS) && player->bumper <= 0) + UINT8 kartspeed = ((gametypes[gametype]->rules & GTR_BUMPERS) && player->bumper <= 0) ? 1 : player->kartspeed; return (26*4 + kartspeed*2 + (9 - player->kartweight))*8; @@ -10081,7 +10081,7 @@ static UINT32 K_UpdateDistanceFromCluster(player_t* player) if (!playeringame[i] || players[i].spectator) continue; - if (!(gametyperules & GTR_BUMPERS) || players[i].bumper) + if (!(gametypes[gametype]->rules & GTR_BUMPERS) || players[i].bumper) pingame++; } @@ -10090,7 +10090,7 @@ static UINT32 K_UpdateDistanceFromCluster(player_t* player) if (!playeringame[i] || players[i].spectator) continue; - if ((players[i].mo) && (gametyperules & GTR_CIRCUIT)) + if ((players[i].mo) && (gametypes[gametype]->rules & GTR_CIRCUIT)) { if (players[i].position == 1 && first == -1) first = i; @@ -10129,7 +10129,7 @@ static UINT32 K_UpdateDistanceFromCluster(player_t* player) if (!playeringame[i] || players[i].spectator) continue; - if ((players[i].mo) && (gametyperules & GTR_CIRCUIT)) + if ((players[i].mo) && (gametypes[gametype]->rules & GTR_CIRCUIT)) { if (players[i].position == (pingame - 1) && second == -1) { @@ -10270,7 +10270,7 @@ void K_KartUpdatePosition(player_t *player) if (!playeringame[i] || players[i].spectator || !players[i].mo) continue; - if (gametyperules & GTR_CIRCUIT) + if (gametypes[gametype]->rules & GTR_CIRCUIT) { if (player->exiting) // End of match standings { @@ -10336,7 +10336,7 @@ void K_KartLegacyUpdatePosition(player_t *player) if (!playeringame[i] || players[i].spectator || !players[i].mo) continue; - if (gametyperules & GTR_CIRCUIT) + if (gametypes[gametype]->rules & GTR_CIRCUIT) { if ((((players[i].starpostnum) + (numstarposts + 1) * players[i].laps) > ((player->starpostnum) + (numstarposts + 1) * player->laps))) @@ -10830,7 +10830,7 @@ static void K_AdjustPlayerFriction(player_t *player) player->mo->friction -= 2048; // Karma ice physics - if ((gametyperules & GTR_BUMPERS) && player->bumper <= 0) + if ((gametypes[gametype]->rules & GTR_BUMPERS) && player->bumper <= 0) { player->mo->friction += 1228; @@ -11066,9 +11066,9 @@ void K_MoveKartPlayer(player_t *player, boolean onground) { if ((buttons & BT_ATTACK) && (player->itemflags & IF_HOLDREADY)) { - SINT8 incr = (gametyperules & GTR_CLOSERPLAYERS) ? 3 : 2; - SINT8 metincr = (gametyperules & GTR_CLOSERPLAYERS) ? 4 : 3; - SINT8 comincr = (gametyperules & GTR_CLOSERPLAYERS) ? 10 : 4; + SINT8 incr = (gametypes[gametype]->rules & GTR_CLOSERPLAYERS) ? 3 : 2; + SINT8 metincr = (gametypes[gametype]->rules & GTR_CLOSERPLAYERS) ? 4 : 3; + SINT8 comincr = (gametypes[gametype]->rules & GTR_CLOSERPLAYERS) ? 10 : 4; // uses fuel faster, but raises temperature faster if (cv_kartflame_fastfuel.value && (!player->flameburnstop)) @@ -11225,14 +11225,14 @@ void K_MoveKartPlayer(player_t *player, boolean onground) player->mo->renderflags &= ~RF_DONTDRAW; } - if ((gametyperules & GTR_BUMPERS) && player->bumper <= 0) // dead in match? you da bomb + if ((gametypes[gametype]->rules & GTR_BUMPERS) && player->bumper <= 0) // dead in match? you da bomb { K_DropItems(player); //K_StripItems(player); K_StripOther(player); player->mo->renderflags |= RF_GHOSTLY; player->flashing = player->karmadelay; } - else if ((player->bumper > 0) || ((gametyperules & GTR_CIRCUIT) && !(gametyperules & GTR_BUMPERS))) + else if ((player->bumper > 0) || ((gametypes[gametype]->rules & GTR_CIRCUIT) && !(gametypes[gametype]->rules & GTR_BUMPERS))) { player->mo->renderflags &= ~(RF_TRANSMASK|RF_BRIGHTMASK); } @@ -11254,7 +11254,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) S_StartSound(player->mo, sfx_s224); } - if (!(gametyperules & GTR_NOCOUNTDOWN)) + if (!(gametypes[gametype]->rules & GTR_NOCOUNTDOWN)) K_RaceStart(player); if (onground == false) @@ -11360,7 +11360,7 @@ void K_CheckSpectateStatus(boolean considermapreset) return; // DON'T allow if the race is at 2 laps - if ((gametyperules & GTR_CIRCUIT) && players[i].laps >= 2) + if ((gametypes[gametype]->rules & GTR_CIRCUIT) && players[i].laps >= 2) return; continue; @@ -11505,7 +11505,7 @@ boolean K_IsSPBInGame(void) boolean K_RingsActive(void) { - if (!(gametyperules & GTR_RINGS)) + if (!(gametypes[gametype]->rules & GTR_RINGS)) { // No Rings in this gametype. return false; diff --git a/src/k_pwrlv.c b/src/k_pwrlv.c index b1639a544..1aa1875bf 100644 --- a/src/k_pwrlv.c +++ b/src/k_pwrlv.c @@ -113,7 +113,7 @@ INT16 K_PowerLevelPlacementScore(player_t *player) return 0; } - if (gametyperules & GTR_CIRCUIT) + if (gametypes[gametype]->rules & GTR_CIRCUIT) { return MAXPLAYERS - player->position; } @@ -136,9 +136,9 @@ INT16 K_CalculatePowerLevelAvg(void) return 0; // No average. } - if ((gametyperules & GTR_CIRCUIT)) + if ((gametypes[gametype]->rules & GTR_CIRCUIT)) t = PWRLV_RACE; - else if ((gametyperules & GTR_BUMPERS)) + else if ((gametypes[gametype]->rules & GTR_BUMPERS)) t = PWRLV_BATTLE; if (t == PWRLV_DISABLED) diff --git a/src/k_terrain.c b/src/k_terrain.c index 7f7e24583..aa60ed4cd 100644 --- a/src/k_terrain.c +++ b/src/k_terrain.c @@ -968,7 +968,7 @@ static void K_SpawnFootstepParticle(mobj_t *mo, t_footstep_t *fs, tic_t timer) if (mo->player != NULL) { - boolean karmabomb = ((gametyperules & GTR_BUMPERS) && mo->player->bumper <= 0); + boolean karmabomb = ((gametypes[gametype]->rules & GTR_BUMPERS) && mo->player->bumper <= 0); tireAngle = (mo->player->drawangle + ANGLE_180); speedValue = K_GetKartSpeedFromStat(mo->player->kartspeed, karmabomb); } diff --git a/src/lua_script.c b/src/lua_script.c index a23487eda..18a193148 100644 --- a/src/lua_script.c +++ b/src/lua_script.c @@ -296,7 +296,7 @@ int LUA_PushGlobals(lua_State *L, const char *word) lua_pushinteger(L, gametype); return 1; } else if (fastcmp(word,"gametyperules")) { - lua_pushinteger(L, gametyperules); + lua_pushinteger(L, gametypes[gametype]->rules); return 1; } else if (fastcmp(word,"leveltime")) { lua_pushinteger(L, leveltime); diff --git a/src/m_menu.c b/src/m_menu.c index 6b45469aa..801caad7b 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -5597,7 +5597,7 @@ static void M_RetryResponse(INT32 ch) INT32 MR_Retry(INT32 choice) { (void)choice; - M_StartMessage(va("Start this %s over?\n\n(Press 'Y' to confirm)\n", (gametyperules & GTR_CIRCUIT) ? "race" : "battle"),M_RetryResponse,MM_YESNO); + M_StartMessage(va("Start this %s over?\n\n(Press 'Y' to confirm)\n", (gametypes[gametype]->rules & GTR_CIRCUIT) ? "race" : "battle"),M_RetryResponse,MM_YESNO); return true; } diff --git a/src/p_enemy.c b/src/p_enemy.c index e3ba64846..ac3307d66 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -3336,7 +3336,7 @@ void A_AttractChase(void *thing) if ( actor->tracer->player && actor->tracer->health - && ((gametyperules & GTR_BUMPERS) + && ((gametypes[gametype]->rules & GTR_BUMPERS) || (actor->tracer->player->itemtype == KITEM_THUNDERSHIELD && RINGTOTAL(actor->tracer->player) < actor->tracer->player->ringmax && !(actor->tracer->player->pflags & PF_RINGLOCK))) @@ -4830,7 +4830,7 @@ void A_OldRingExplode(void *thing) if (changecolor) { - if (!(gametyperules & GTR_TEAMS)) + if (!(gametypes[gametype]->rules & GTR_TEAMS)) mo->color = actor->target->color; //copy color else if (actor->target->player->ctfteam == 2) mo->color = skincolor_bluering; @@ -4846,7 +4846,7 @@ void A_OldRingExplode(void *thing) if (changecolor) { - if (!(gametyperules & GTR_TEAMS)) + if (!(gametypes[gametype]->rules & GTR_TEAMS)) mo->color = actor->target->color; //copy color else if (actor->target->player->ctfteam == 2) mo->color = skincolor_bluering; @@ -4861,7 +4861,7 @@ void A_OldRingExplode(void *thing) if (changecolor) { - if (!(gametyperules & GTR_TEAMS)) + if (!(gametypes[gametype]->rules & GTR_TEAMS)) mo->color = actor->target->color; //copy color else if (actor->target->player->ctfteam == 2) mo->color = skincolor_bluering; @@ -4888,7 +4888,7 @@ void A_MixUp(void *thing) return; // The random factor is okay for other game modes, but in these, it is cripplingly unfair. - if (gametyperules & GTR_CIRCUIT) + if (gametypes[gametype]->rules & GTR_CIRCUIT) { S_StartSound(actor, sfx_lose); return; @@ -10835,7 +10835,7 @@ void A_ItemPop(void *thing) //if (actor->info->deathsound) //S_StartSound(remains, actor->info->deathsound); - if (!((gametyperules & GTR_BUMPERS) && actor->target->player->bumper <= 0) && !itembreaker) + if (!((gametypes[gametype]->rules & GTR_BUMPERS) && actor->target->player->bumper <= 0) && !itembreaker) { K_StartRoulette(actor->target->player, KROULETTETYPE_NORMAL); } @@ -10853,7 +10853,7 @@ void A_ItemPop(void *thing) remains->flags2 &= ~MF2_AMBUSH; // Here at mapload in battle? - if (gametyperules & GTR_BUMPERS && actor->threshold != 69) + if (gametypes[gametype]->rules & GTR_BUMPERS && actor->threshold != 69) numgotboxes++; P_RemoveMobj(actor); @@ -10987,7 +10987,7 @@ void A_SPBChase(void *thing) if (players[i].respawn) continue;*/ // respawning - if ((gametyperules & GTR_WANTED) && (gametyperules & GTR_WANTEDSPB)) + if ((gametypes[gametype]->rules & GTR_WANTED) && (gametypes[gametype]->rules & GTR_WANTEDSPB)) { if (K_IsPlayerMostWanted(&players[i])) { @@ -11048,7 +11048,7 @@ void A_SPBChase(void *thing) else if (actor->extravalue2-- <= 0) actor->extravalue1 = 0; // back to SEEKING - if ((gametyperules & GTR_WANTED) && (gametyperules & GTR_WANTEDSPB)) + if ((gametypes[gametype]->rules & GTR_WANTED) && (gametypes[gametype]->rules & GTR_WANTEDSPB)) { spbplace = (actor->tracer->player - players); } @@ -11177,7 +11177,7 @@ void A_SPBChase(void *thing) && !players[actor->lastlook].spectator && !players[actor->lastlook].exiting) { - if ((gametyperules & GTR_WANTED) && (gametyperules & GTR_WANTEDSPB)) + if ((gametypes[gametype]->rules & GTR_WANTED) && (gametypes[gametype]->rules & GTR_WANTEDSPB)) { spbplace = actor->lastlook; } @@ -11302,7 +11302,7 @@ static inline BlockItReturn_t PIT_SSMineSearch(mobj_t *thing) return BMIT_CONTINUE; if (thing->player && (thing->player->hyudorotimer - || ((gametyperules & GTR_BUMPERS) && thing->player && thing->player->bumper <= 0 && thing->player->karmadelay))) + || ((gametypes[gametype]->rules & GTR_BUMPERS) && thing->player && thing->player->bumper <= 0 && thing->player->karmadelay))) return BMIT_CONTINUE; // see if it went over / under @@ -11368,7 +11368,7 @@ static inline BlockItReturn_t PIT_MineExplode(mobj_t *thing) if (netgame && thing->player && thing->player->spectator) return BMIT_CONTINUE; - if ((gametyperules & GTR_BUMPERS) && grenade->target && grenade->target->player && grenade->target->player->bumper <= 0 && thing == grenade->target) + if ((gametypes[gametype]->rules & GTR_BUMPERS) && grenade->target && grenade->target->player && grenade->target->player->bumper <= 0 && thing == grenade->target) return BMIT_CONTINUE; // see if it went over / under diff --git a/src/p_inter.c b/src/p_inter.c index c0da4b857..b01195ea9 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -68,7 +68,7 @@ boolean P_CanPickupItem(player_t *player, UINT8 weapon) if (player->exiting || mapreset || (player->pflags & PF_ELIMINATED)) return false; - if ((gametyperules & GTR_BUMPERS) // No bumpers in Match + if ((gametypes[gametype]->rules & GTR_BUMPERS) // No bumpers in Match && !weapon && player->bumper <= 0) return false; @@ -296,7 +296,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) if (!P_CanPickupItem(player, PICKUPITEM_FLOATING) || (player->itemamount && player->itemtype != special->threshold)) return; - if ((gametyperules & GTR_BUMPERS) && player->bumper <= 0) + if ((gametypes[gametype]->rules & GTR_BUMPERS) && player->bumper <= 0) return; player->itemtype = special->threshold; @@ -326,7 +326,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) if (!itembreaker && !P_CanPickupItem(player, PICKUPITEM_ITEM)) return; - if ((gametyperules & GTR_BUMPERS) && player->bumper <= 0) + if ((gametypes[gametype]->rules & GTR_BUMPERS) && player->bumper <= 0) { if (player->karmamode || player->karmadelay) return; @@ -338,7 +338,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) P_KillMobj(special, toucher, toucher, DMG_NORMAL); break; case MT_ITEMCAPSULE: - if ((gametyperules & GTR_BUMPERS) && player->bumper <= 0) + if ((gametypes[gametype]->rules & GTR_BUMPERS) && player->bumper <= 0) return; if (special->scale < special->extravalue1) // don't break it while it's respawning @@ -552,7 +552,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) S_StartSound(special, sfx_s1a2); return; case MT_CDUFO: // SRB2kart - if (special->fuse || !P_CanPickupItem(player, PICKUPITEM_ITEM) || ((gametyperules & GTR_BUMPERS) && player->bumper <= 0)) + if (special->fuse || !P_CanPickupItem(player, PICKUPITEM_ITEM) || ((gametypes[gametype]->rules & GTR_BUMPERS) && player->bumper <= 0)) return; K_StartRoulette(player, KROULETTETYPE_KARMA); @@ -1057,7 +1057,7 @@ void P_CheckTimeLimit(void) } #ifdef TESTOVERTIMEINFREEPLAY - if (timelimitintics > 0 && (gametyperules & GTR_TIMELIMIT) && startedInFreePlay) + if (timelimitintics > 0 && (gametypes[gametype]->rules & GTR_TIMELIMIT) && startedInFreePlay) { goto overtimesound; } @@ -1070,7 +1070,7 @@ void P_CheckTimeLimit(void) S_StartSound(NULL, sfx_strpst); // Normal Match - if (!(gametyperules & GTR_TEAMS)) + if (!(gametypes[gametype]->rules & GTR_TEAMS)) { //Store the nodes of participating players in an array. for (i = 0; i < MAXPLAYERS; i++) @@ -1144,7 +1144,7 @@ void P_CheckPointLimit(void) if (!cv_pointlimit.value) return; - if (!(gametyperules & GTR_POINTLIMIT)) + if (!(gametypes[gametype]->rules & GTR_POINTLIMIT)) return; if (itembreaker) @@ -1501,7 +1501,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget } } - if (gametyperules & GTR_BUMPERS) + if (gametypes[gametype]->rules & GTR_BUMPERS) K_CheckBumpers(); K_ResetPogoSpring(target->player); @@ -2017,7 +2017,7 @@ static boolean P_KillPlayer(player_t *player, mobj_t *inflictor, mobj_t *source, if (type == DMG_TIMEOVER) { - if (gametyperules & GTR_CIRCUIT) + if (gametypes[gametype]->rules & GTR_CIRCUIT) { mobj_t *boom = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_FZEROBOOM); boom->scale = player->mo->scale; @@ -2192,7 +2192,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da // If not, then spawn the instashield effect instead. if (!force) { - if (gametyperules & GTR_BUMPERS) + if (gametypes[gametype]->rules & GTR_BUMPERS) { if ((player->bumper <= 0 && player->karmadelay) || (player->karmamode == 1)) { @@ -2251,7 +2251,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da // We successfully damaged them! Give 'em some bumpers! if (source && source != player->mo && source->player) { - if (gametyperules & GTR_BUMPERS) + if (gametypes[gametype]->rules & GTR_BUMPERS) { K_BattleAwardHit(source->player, player, inflictor, 1); @@ -2303,12 +2303,12 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da player->glanceDir = 0; player->pflags &= ~PF_GAINAX; - if (gametyperules & GTR_BUMPERS) + if (gametypes[gametype]->rules & GTR_BUMPERS) { if (player->bumper <= 0) { player->karmadelay = comebacktime; - if ((gametyperules & GTR_KARMA) && player->karmamode == 2 ) + if ((gametypes[gametype]->rules & GTR_KARMA) && player->karmamode == 2 ) { mobj_t *poof = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_EXPLODE); S_StartSound(poof, mobjinfo[MT_KARMAHITBOX].seesound); diff --git a/src/p_map.c b/src/p_map.c index 63c25ba5e..ddc5c3a53 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -1338,7 +1338,7 @@ static BlockItReturn_t PIT_CheckThing(mobj_t *thing) return BMIT_CONTINUE; } - if ((gametyperules & GTR_BUMPERS) + if ((gametypes[gametype]->rules & GTR_BUMPERS) && ((thing->player->bumper && !g_tm.thing->player->bumper) || (g_tm.thing->player->bumper && !thing->player->bumper))) { diff --git a/src/p_mobj.c b/src/p_mobj.c index a7683796d..ddc2360b0 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -4358,7 +4358,7 @@ boolean P_SupermanLook4Players(mobj_t *actor) if (players[c].mo->health <= 0) continue; // dead - if ((gametyperules & GTR_BUMPERS) && players[c].bumper <= 0) + if ((gametypes[gametype]->rules & GTR_BUMPERS) && players[c].bumper <= 0) continue; // other dead playersinthegame[stop] = &players[c]; @@ -7561,7 +7561,7 @@ static void P_MobjSceneryThink(mobj_t *mobj) mobj->color = mobj->target->color; K_MatchGenericExtraFlags(mobj, mobj->target); - if ((!(gametyperules & GTR_ITEMARROWS) || (gametyperules & GTR_BUMPERS && mobj->target->player->bumper <= 0)) + if ((!(gametypes[gametype]->rules & GTR_ITEMARROWS) || (gametypes[gametype]->rules & GTR_BUMPERS && mobj->target->player->bumper <= 0)) #if 1 // Set to 0 to test without needing to host || (P_IsDisplayPlayer(mobj->target->player)) #endif @@ -8580,7 +8580,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj) else if (gamespeed == KARTSPEED_EXPERT) distbarrier = FixedMul(distbarrier, FRACUNIT+FRACUNIT/2); - if ((gametyperules & GTR_CIRCUIT) && mobj->tracer) + if ((gametypes[gametype]->rules & GTR_CIRCUIT) && mobj->tracer) { distaway = P_AproxDistance(mobj->tracer->x - mobj->x, mobj->tracer->y - mobj->y); if (distaway < distbarrier) @@ -9431,7 +9431,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj) statenum_t state = (mobj->state-states); if (!mobj->target || !mobj->target->health || !mobj->target->player || mobj->target->player->spectator - || mobj->target->player->bumper || !(gametyperules & GTR_KARMA)) + || mobj->target->player->bumper || !(gametypes[gametype]->rules & GTR_KARMA)) { P_RemoveMobj(mobj); return false; @@ -10392,7 +10392,7 @@ static boolean P_FuseThink(mobj_t *mobj) { ; } - else if (gametyperules & GTR_BATTLEBOXES) + else if (gametypes[gametype]->rules & GTR_BATTLEBOXES) { if (mobj->threshold != 69) break; @@ -12514,7 +12514,7 @@ void P_SpawnPlayer(INT32 playernum) p->grieftime = 0; p->spinoutrot = 0; - if (gametyperules & GTR_ITEMARROWS) + if (gametypes[gametype]->rules & GTR_ITEMARROWS) { mobj_t *overheadarrow = P_SpawnMobj(mobj->x, mobj->y, mobj->z + mobj->height + 16*FRACUNIT, MT_PLAYERARROW); P_SetTarget(&overheadarrow->target, mobj); @@ -12522,7 +12522,7 @@ void P_SpawnPlayer(INT32 playernum) P_SetScale(overheadarrow, mobj->destscale); } - if (gametyperules & GTR_BUMPERS) + if (gametypes[gametype]->rules & GTR_BUMPERS) { if (p->spectator) { @@ -12538,7 +12538,7 @@ void P_SpawnPlayer(INT32 playernum) K_SpawnPlayerBattleBumpers(p); } - else if (p->bumper <= 0 && (gametyperules & GTR_KARMA)) + else if (p->bumper <= 0 && (gametypes[gametype]->rules & GTR_KARMA)) { mobj_t *karmahitbox = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_KARMAHITBOX); // Player hitbox is too small!! P_SetTarget(&karmahitbox->target, mobj); @@ -12968,7 +12968,7 @@ static mobjtype_t P_GetMobjtypeSubstitute(mapthing_t *mthing, mobjtype_t i) { (void)mthing; - if ((i == MT_RANDOMITEM) && (gametyperules & (GTR_PAPERITEMS|GTR_CIRCUIT)) == (GTR_PAPERITEMS|GTR_CIRCUIT) && !bossinfo.boss) + if ((i == MT_RANDOMITEM) && (gametypes[gametype]->rules & (GTR_PAPERITEMS|GTR_CIRCUIT)) == (GTR_PAPERITEMS|GTR_CIRCUIT) && !bossinfo.boss) return MT_PAPERITEMSPOT; return i; diff --git a/src/p_setup.c b/src/p_setup.c index 8fac02b46..c003e10ee 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -8286,7 +8286,7 @@ static void P_InitLevelSettings(boolean reloadinggamestate) // SRB2Kart: map load variables if (grandprixinfo.gp == true) { - if ((gametyperules & GTR_BATTLESPEED)) + if ((gametypes[gametype]->rules & GTR_BATTLESPEED)) { gamespeed = KARTSPEED_NORMAL; } @@ -8307,7 +8307,7 @@ static void P_InitLevelSettings(boolean reloadinggamestate) else if (modeattacking) { // Just play it safe and set everything - if ((gametyperules & GTR_BATTLESPEED)) + if ((gametypes[gametype]->rules & GTR_BATTLESPEED)) gamespeed = KARTSPEED_NORMAL; else gamespeed = KARTSPEED_HARD; @@ -8316,7 +8316,7 @@ static void P_InitLevelSettings(boolean reloadinggamestate) } else { - if (gametyperules & GTR_BATTLESPEED) + if (gametypes[gametype]->rules & GTR_BATTLESPEED) { if (cv_kartbattlespeed.value == KARTSPEED_AUTO) gamespeed = ((speedscramble == -1) ? KARTSPEED_EASY : (UINT8)speedscramble); @@ -8488,7 +8488,7 @@ static void P_SetupCamera(UINT8 pnum, camera_t *cam) { mapthing_t *thing; - if (gametyperules & GTR_BATTLESTARTS) + if (gametypes[gametype]->rules & GTR_BATTLESTARTS) thing = deathmatchstarts[0]; else thing = playerstarts[0]; @@ -8533,7 +8533,7 @@ static void P_InitPlayers(void) players[i].mo = NULL; - if (!(gametyperules & GTR_CIRCUIT)) + if (!(gametypes[gametype]->rules & GTR_CIRCUIT)) { G_DoReborn(i); } @@ -9048,7 +9048,7 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate) K_ClearWaypoints(); // Load the ccheckpoints and waypoints please! - if (gametyperules & GTR_CIRCUIT && gamestate != GS_TITLESCREEN) + if (gametypes[gametype]->rules & GTR_CIRCUIT && gamestate != GS_TITLESCREEN) { if ((K_SetupWaypointList() == false)) { diff --git a/src/p_spec.c b/src/p_spec.c index 44cd6b7a4..e5fe35e28 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -4451,7 +4451,7 @@ boolean P_ProcessSpecial(activator_t *activator, INT16 special, INT32 *args, cha return false; } - if ((gametyperules & GTR_CIRCUIT) && (mo->player->exiting == 0) && !(mo->player->pflags & PF_HITFINISHLINE)) + if ((gametypes[gametype]->rules & GTR_CIRCUIT) && (mo->player->exiting == 0) && !(mo->player->pflags & PF_HITFINISHLINE)) { // megablock cope 1: single-use finish lines if (args[0] & TMCFF_SINGLEUSE && mo->player->laps > 0) @@ -5257,7 +5257,7 @@ static void P_ProcessExitSector(player_t *player, mtag_t sectag) INT32 lineindex; #if 0 - if (!(gametyperules & GTR_ALLOWEXIT)) + if (!(gametypes[gametype]->rules & GTR_ALLOWEXIT)) return; #endif @@ -5416,7 +5416,7 @@ static void P_EvaluateSpecialFlags(player_t *player, sector_t *sector, sector_t P_ProcessZoomTube(player, sectag, true); if (sector->specialflags & SSF_FINISHLINE) { - if (K_UsingLegacyCheckpoints() && (gametyperules & GTR_CIRCUIT) && (player->exiting == 0) && !(player->pflags & PF_HITFINISHLINE)) + if (K_UsingLegacyCheckpoints() && (gametypes[gametype]->rules & GTR_CIRCUIT) && (player->exiting == 0) && !(player->pflags & PF_HITFINISHLINE)) { K_HandleLapIncrement(player); player->pflags |= PF_HITFINISHLINE; @@ -5570,7 +5570,7 @@ static void P_EvaluateOldSectorSpecial(player_t *player, sector_t *sector, secto { if (!(sector->specialflags & SSF_FINISHLINE)) { - if (K_UsingLegacyCheckpoints() && (gametyperules & GTR_CIRCUIT) && (player->exiting == 0) && !(player->pflags & PF_HITFINISHLINE)) + if (K_UsingLegacyCheckpoints() && (gametypes[gametype]->rules & GTR_CIRCUIT) && (player->exiting == 0) && !(player->pflags & PF_HITFINISHLINE)) { K_HandleLapIncrement(player); player->pflags |= PF_HITFINISHLINE; @@ -7022,15 +7022,15 @@ static boolean P_CheckGametypeRules(INT32 checktype, UINT32 target) { case TMF_HASALL: default: - return (gametyperules & target) == target; + return (gametypes[gametype]->rules & target) == target; case TMF_HASANY: - return !!(gametyperules & target); + return !!(gametypes[gametype]->rules & target); case TMF_HASEXACTLY: - return gametyperules == target; + return gametypes[gametype]->rules == target; case TMF_DOESNTHAVEALL: - return (gametyperules & target) != target; + return (gametypes[gametype]->rules & target) != target; case TMF_DOESNTHAVEANY: - return !(gametyperules & target); + return !(gametypes[gametype]->rules & target); } } @@ -7109,7 +7109,7 @@ void P_SpawnSpecials(boolean fromnetsave) switch(GETSECSPECIAL(sector->special, 4)) { case 10: // Circuit finish line (Unused) - if (gametyperules & GTR_CIRCUIT) + if (gametypes[gametype]->rules & GTR_CIRCUIT) circuitmap = true; break; } @@ -7823,7 +7823,7 @@ void P_SpawnSpecials(boolean fromnetsave) // Linedef executor triggers for CTF teams. case 309: - if (!(gametyperules & GTR_TEAMS)) + if (!(gametypes[gametype]->rules & GTR_TEAMS)) { lines[i].special = 0; break; @@ -8065,7 +8065,7 @@ void P_SpawnSpecials(boolean fromnetsave) // SRB2Kart case 2001: // Finish Line - if ((gametyperules & GTR_CIRCUIT)) + if ((gametypes[gametype]->rules & GTR_CIRCUIT)) circuitmap = true; break; diff --git a/src/p_tick.c b/src/p_tick.c index 943c61da3..0b9ae3dde 100644 --- a/src/p_tick.c +++ b/src/p_tick.c @@ -494,7 +494,7 @@ static void P_RunThinkers(void) ps_thlist_times[i] = I_GetPreciseTime() - ps_thlist_times[i]; } - if (gametyperules & GTR_PAPERITEMS) + if (gametypes[gametype]->rules & GTR_PAPERITEMS) K_RunPaperItemSpawners(); ps_acs_time = I_GetPreciseTime(); @@ -839,7 +839,7 @@ void P_Ticker(boolean run) { if (!(titlemapinaction == TITLEMAP_RUNNING)) { - if (!(gametyperules & GTR_NOCOUNTDOWN)) + if (!(gametypes[gametype]->rules & GTR_NOCOUNTDOWN)) { if (leveltime == starttime-(3*TICRATE)) { @@ -855,9 +855,9 @@ void P_Ticker(boolean run) } } - // Change timing of start music based on gametyperules + // Change timing of start music based on gametypes[gametype]->rules { - tic_t startingtime = (gametyperules & GTR_NOCOUNTDOWN) ? introtime : starttime; + tic_t startingtime = (gametypes[gametype]->rules & GTR_NOCOUNTDOWN) ? introtime : starttime; if (leveltime < startingtime) // SRB2Kart S_ChangeMusicInternal(((grandprixinfo.roundnum > 0) ? "gpstrt" : (encoremode ? "estart" : "kstart")), false); // yes this will be spammed otherwise encore and some stuff WILL overwrite it else if (leveltime == startingtime) // The GO! sound stops the level start ambience @@ -920,7 +920,7 @@ void P_Ticker(boolean run) K_TickSpecialStage(); - if (gametyperules & GTR_WANTED) + if (gametypes[gametype]->rules & GTR_WANTED) { if (wantedcalcdelay && --wantedcalcdelay <= 0) K_CalculateBattleWanted(); diff --git a/src/p_user.c b/src/p_user.c index e74ae7b92..27220a742 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -418,7 +418,7 @@ UINT8 P_FindLowestLap(void) INT32 i; UINT8 lowest = UINT8_MAX; - if (!(gametyperules & GTR_CIRCUIT)) + if (!(gametypes[gametype]->rules & GTR_CIRCUIT)) return 0; for (i = 0; i < MAXPLAYERS; i++) @@ -445,7 +445,7 @@ UINT8 P_FindHighestLap(void) INT32 i; UINT8 highest = 0; - if (!(gametyperules & GTR_CIRCUIT)) + if (!(gametypes[gametype]->rules & GTR_CIRCUIT)) return 0; for (i = 0; i < MAXPLAYERS; i++) @@ -540,7 +540,7 @@ void P_GivePlayerLives(player_t *player, INT32 numlives) // Adds to the player's score void P_AddPlayerScore(player_t *player, UINT32 amount) { - if (!(gametyperules & GTR_POINTS)) + if (!(gametypes[gametype]->rules & GTR_POINTS)) return; if (player->exiting) // srb2kart @@ -762,7 +762,7 @@ boolean P_EndingMusic(player_t *player) #undef getplayerpos - if ((gametyperules & GTR_CIRCUIT) && bestlocalpos == MAXPLAYERS+1) + if ((gametypes[gametype]->rules & GTR_CIRCUIT) && bestlocalpos == MAXPLAYERS+1) sprintf(buffer, "k*fail"); // F-Zero death results theme else { @@ -776,9 +776,9 @@ boolean P_EndingMusic(player_t *player) S_SpeedMusic(1.0f); - if ((gametyperules & GTR_CIRCUIT)) + if ((gametypes[gametype]->rules & GTR_CIRCUIT)) buffer[1] = 'r'; - else if ((gametyperules & GTR_BUMPERS)) + else if ((gametypes[gametype]->rules & GTR_BUMPERS)) { buffer[1] = 'b'; looping = false; @@ -889,7 +889,7 @@ void P_RestoreMusic(player_t *player) #if 0 // Event - Final Lap // Still works for GME, but disabled for consistency - if ((gametyperules & GTR_CIRCUIT) && player->laps >= numlaps) + if ((gametypes[gametype]->rules & GTR_CIRCUIT) && player->laps >= numlaps) S_SpeedMusic(1.2f); #endif if (mapmusresume && cv_resume.value) @@ -1316,7 +1316,7 @@ void P_DoPlayerExit(player_t *player, pflags_t flags) if (!player->spectator) { boolean losing; - if ((gametyperules & GTR_CIRCUIT)) // If in Race Mode, allow + if ((gametypes[gametype]->rules & GTR_CIRCUIT)) // If in Race Mode, allow { player->exiting = raceexittime+2; K_UpdateAllPlayerPositions(); @@ -1345,7 +1345,7 @@ void P_DoPlayerExit(player_t *player, pflags_t flags) G_BeginLevelExit(); } } - else if ((gametyperules & GTR_BUMPERS)) // Battle Mode exiting + else if ((gametypes[gametype]->rules & GTR_BUMPERS)) // Battle Mode exiting { player->exiting = battleexittime+1; G_BeginLevelExit(); @@ -2087,7 +2087,7 @@ boolean P_CanPlayerTurn(player_t *player, ticcmd_t *cmd) return true; } - if (((gametyperules & GTR_NOCOUNTDOWN) || (leveltime > starttime)) + if (((gametypes[gametype]->rules & GTR_NOCOUNTDOWN) || (leveltime > starttime)) && (cmd->buttons & BT_ACCELERATE) && (cmd->buttons & BT_BRAKE)) { @@ -2162,7 +2162,7 @@ static void P_UpdatePlayerAngle(player_t *player) player->lturn_max[leveltime%MAXPREDICTTICS] = player->rturn_max[leveltime%MAXPREDICTTICS] = 0; } - if ((gametyperules & GTR_NOCOUNTDOWN) || leveltime >= starttime) + if ((gametypes[gametype]->rules & GTR_NOCOUNTDOWN) || leveltime >= starttime) { // KART: Don't directly apply angleturn! It may have been either A) forged by a malicious client, or B) not be a smooth turn due to a player dropping frames. // Instead, turn the player only up to the amount they're supposed to turn accounting for latency. Allow exactly 1 extra turn unit to try to keep old replays synced. @@ -4109,7 +4109,7 @@ void P_PlayerThink(player_t *player) if (!mapreset) { - if (gametyperules & GTR_CIRCUIT) + if (gametypes[gametype]->rules & GTR_CIRCUIT) { INT32 i; @@ -4153,7 +4153,7 @@ void P_PlayerThink(player_t *player) // If it is set, start subtracting // Don't allow it to go back to 0 - if (player->exiting > 1 && (player->exiting < raceexittime+2 || !(gametyperules & GTR_CIRCUIT))) // SRB2kart - "&& player->exiting > 1" + if (player->exiting > 1 && (player->exiting < raceexittime+2 || !(gametypes[gametype]->rules & GTR_CIRCUIT))) // SRB2kart - "&& player->exiting > 1" player->exiting--; if (player->exiting && exitcountdown) @@ -4177,7 +4177,7 @@ void P_PlayerThink(player_t *player) } // SRB2kart 010217 - if (!(gametyperules & GTR_NOCOUNTDOWN)) + if (!(gametypes[gametype]->rules & GTR_NOCOUNTDOWN)) { if (leveltime < starttime) { @@ -4211,7 +4211,7 @@ void P_PlayerThink(player_t *player) } } - if (netgame && cv_antigrief.value != 0 && (gametyperules & GTR_CIRCUIT)) + if (netgame && cv_antigrief.value != 0 && (gametypes[gametype]->rules & GTR_CIRCUIT)) { INT32 i; for (i = 0; i < MAXPLAYERS; i++) @@ -4479,7 +4479,7 @@ void P_PlayerThink(player_t *player) || player->growshrinktimer > 0 // Grow doesn't flash either. || (player->respawn) // Respawn timer (for drop dash effect) || (player->pflags & PF_NOCONTEST) // NO CONTEST explosion - || ((gametyperules & GTR_BUMPERS) && player->bumper <= 0 && player->karmadelay))) + || ((gametypes[gametype]->rules & GTR_BUMPERS) && player->bumper <= 0 && player->karmadelay))) { if (player->flashing > 0 && player->flashing < K_GetKartFlashing(player) && (leveltime & 1))