Fixed spectating for real, messages for changing some kart cvars, Mirror Mode disallowed in Battle

This commit is contained in:
TehRealSalt 2018-01-29 19:15:25 -05:00
parent 5b9a9faae7
commit 1e01e65a8b
5 changed files with 91 additions and 56 deletions

View File

@ -105,6 +105,11 @@ static void Color4_OnChange(void);
static void DummyConsvar_OnChange(void); static void DummyConsvar_OnChange(void);
static void SoundTest_OnChange(void); static void SoundTest_OnChange(void);
static void KartFrantic_OnChange(void);
static void KartSpeed_OnChange(void);
static void KartMirror_OnChange(void);
static void KartComeback_OnChange(void);
#ifdef NETGAME_DEVMODE #ifdef NETGAME_DEVMODE
static void Fishcake_OnChange(void); static void Fishcake_OnChange(void);
#endif #endif
@ -347,12 +352,12 @@ consvar_t cv_kartminimap = {"kartminimap", "Yes", CV_SAVE, CV_YesNo, NULL, 0, NU
consvar_t cv_kartcheck = {"kartcheck", "Yes", CV_SAVE, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartcheck = {"kartcheck", "Yes", CV_SAVE, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL};
static CV_PossibleValue_t kartstarsfx_cons_t[] = {{0, "Music"}, {1, "SMK"}, {0, NULL}}; static CV_PossibleValue_t kartstarsfx_cons_t[] = {{0, "Music"}, {1, "SMK"}, {0, NULL}};
consvar_t cv_kartstarsfx = {"kartstarsfx", "SMK", CV_SAVE, kartstarsfx_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartstarsfx = {"kartstarsfx", "SMK", CV_SAVE, kartstarsfx_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_kartspeed = {"kartspeed", "Standard", CV_NETVAR, kartspeed_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartspeed = {"kartspeed", "Standard", CV_NETVAR|CV_CALL|CV_NOINIT, kartspeed_cons_t, KartSpeed_OnChange, 0, NULL, NULL, 0, 0, NULL};
static CV_PossibleValue_t kartballoons_cons_t[] = {{1, "MIN"}, {12, "MAX"}, {0, NULL}}; static CV_PossibleValue_t kartballoons_cons_t[] = {{1, "MIN"}, {12, "MAX"}, {0, NULL}};
consvar_t cv_kartballoons = {"kartballoons", "3", CV_NETVAR, kartballoons_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartballoons = {"kartballoons", "3", CV_NETVAR|CV_CHEAT, kartballoons_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_kartfrantic = {"kartfrantic", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartfrantic = {"kartfrantic", "Off", CV_NETVAR|CV_CHEAT|CV_CALL|CV_NOINIT, CV_OnOff, KartFrantic_OnChange, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_kartcomeback = {"kartcomeback", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartcomeback = {"kartcomeback", "On", CV_NETVAR|CV_CHEAT|CV_CALL|CV_NOINIT, CV_OnOff, KartComeback_OnChange, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_kartmirror = {"kartmirror", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartmirror = {"kartmirror", "Off", CV_NETVAR|CV_CHEAT|CV_CALL|CV_NOINIT, CV_OnOff, KartMirror_OnChange, 0, NULL, NULL, 0, 0, NULL};
static CV_PossibleValue_t speedometer_cons_t[] = {{0, "Off"}, {1, "Kilometers"}, {2, "Miles"}, {3, "Fracunits"}, {0, NULL}}; static CV_PossibleValue_t speedometer_cons_t[] = {{0, "Off"}, {1, "Kilometers"}, {2, "Miles"}, {3, "Fracunits"}, {0, NULL}};
consvar_t cv_speedometer = {"speedometer", "Kilometers", CV_SAVE, speedometer_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // use tics in display consvar_t cv_speedometer = {"speedometer", "Kilometers", CV_SAVE, speedometer_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // use tics in display
@ -5049,3 +5054,28 @@ static void Command_ShowTime_f(void)
CONS_Printf(M_GetText("The current time is %f.\nThe timelimit is %f\n"), (double)leveltime/TICRATE, (double)timelimitintics/TICRATE); CONS_Printf(M_GetText("The current time is %f.\nThe timelimit is %f\n"), (double)leveltime/TICRATE, (double)timelimitintics/TICRATE);
} }
// SRB2Kart: On change messages
static void KartFrantic_OnChange(void)
{
if (cv_kartfrantic.value != franticitems && gamestate == GS_LEVEL)
CONS_Printf(M_GetText("Frantic Items will be turned %s next round.\n"), cv_kartfrantic.value ? M_GetText("on") : M_GetText("off"));
}
static void KartSpeed_OnChange(void)
{
if (cv_kartspeed.value != gamespeed && gametype == GT_RACE && gamestate == GS_LEVEL)
CONS_Printf(M_GetText("Game speed will be changed to \"%s\" next round.\n"), cv_kartspeed.string);
}
static void KartMirror_OnChange(void)
{
if (cv_kartmirror.value != mirrormode && gametype == GT_RACE && gamestate == GS_LEVEL)
CONS_Printf(M_GetText("Mirror Mode will be turned %s next round.\n"), cv_kartmirror.value ? M_GetText("on") : M_GetText("off"));
}
static void KartComeback_OnChange(void)
{
if (cv_kartcomeback.value != comeback && gametype == GT_MATCH && gamestate == GS_LEVEL)
CONS_Printf(M_GetText("Karma Comeback will be turned %s next round.\n"), cv_kartcomeback.value ? M_GetText("on") : M_GetText("off"));
}

View File

@ -1293,7 +1293,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
axis = JoyAxis(AXISTURN, ssplayer); axis = JoyAxis(AXISTURN, ssplayer);
if (cv_kartmirror.value) if (mirrormode)
{ {
turnright ^= turnleft; // swap these using three XORs turnright ^= turnleft; // swap these using three XORs
turnleft ^= turnright; turnleft ^= turnright;
@ -1514,7 +1514,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
cmd->sidemove = (SINT8)(cmd->sidemove + side); cmd->sidemove = (SINT8)(cmd->sidemove + side);
} }
if (cv_kartmirror.value) if (mirrormode)
cmd->sidemove = -cmd->sidemove; cmd->sidemove = -cmd->sidemove;
if (ssplayer == 2 && player->bot == 1) { if (ssplayer == 2 && player->bot == 1) {
@ -1532,7 +1532,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
//{ SRB2kart - Drift support //{ SRB2kart - Drift support
axis = JoyAxis(AXISTURN, ssplayer); axis = JoyAxis(AXISTURN, ssplayer);
if (cv_kartmirror.value) if (mirrormode)
axis = -axis; axis = -axis;
// TODO: Remove this hack please :( // TODO: Remove this hack please :(
@ -2017,50 +2017,38 @@ boolean G_Responder(event_t *ev)
if (ev->data1 == gamecontrol[gc_spectate][0] if (ev->data1 == gamecontrol[gc_spectate][0]
|| ev->data1 == gamecontrol[gc_spectate][1]) || ev->data1 == gamecontrol[gc_spectate][1])
{ {
if ((netgame || splitscreen) && !players[consoleplayer].powers[pw_flashing] && !spectatedelay) if (!spectatedelay)
{ {
if (players[consoleplayer].spectator && cv_allowteamchange.value) spectatedelay = NEWTICRATE / 7;
P_SpectatorJoinGame(&players[consoleplayer]);
else
COM_ImmedExecute("changeteam spectator"); COM_ImmedExecute("changeteam spectator");
} }
spectatedelay = NEWTICRATE / 7;
} }
if (ev->data1 == gamecontrolbis[gc_spectate][0] if (ev->data1 == gamecontrolbis[gc_spectate][0]
|| ev->data1 == gamecontrolbis[gc_spectate][1]) || ev->data1 == gamecontrolbis[gc_spectate][1])
{ {
if (splitscreen && !players[secondarydisplayplayer].powers[pw_flashing] && !spectatedelay2) if (!spectatedelay2)
{ {
if (players[secondarydisplayplayer].spectator && cv_allowteamchange.value) spectatedelay2 = NEWTICRATE / 7;
P_SpectatorJoinGame(&players[secondarydisplayplayer]);
else
COM_ImmedExecute("changeteam2 spectator"); COM_ImmedExecute("changeteam2 spectator");
} }
spectatedelay2 = NEWTICRATE / 7;
} }
if (ev->data1 == gamecontrol3[gc_spectate][0] if (ev->data1 == gamecontrol3[gc_spectate][0]
|| ev->data1 == gamecontrol3[gc_spectate][1]) || ev->data1 == gamecontrol3[gc_spectate][1])
{ {
if (splitscreen > 1 && !players[thirddisplayplayer].powers[pw_flashing] && !spectatedelay3) if (!spectatedelay3)
{ {
if (players[thirddisplayplayer].spectator && cv_allowteamchange.value) spectatedelay3 = NEWTICRATE / 7;
P_SpectatorJoinGame(&players[thirddisplayplayer]);
else
COM_ImmedExecute("changeteam3 spectator"); COM_ImmedExecute("changeteam3 spectator");
} }
spectatedelay3 = NEWTICRATE / 7;
} }
if (ev->data1 == gamecontrol4[gc_spectate][0] if (ev->data1 == gamecontrol4[gc_spectate][0]
|| ev->data1 == gamecontrol4[gc_spectate][1]) || ev->data1 == gamecontrol4[gc_spectate][1])
{ {
if (splitscreen > 2 && !players[fourthdisplayplayer].powers[pw_flashing] && !spectatedelay4) if (!spectatedelay4)
{ {
if (players[fourthdisplayplayer].spectator && cv_allowteamchange.value) spectatedelay4 = NEWTICRATE / 7;
P_SpectatorJoinGame(&players[fourthdisplayplayer]);
else
COM_ImmedExecute("changeteam4 spectator"); COM_ImmedExecute("changeteam4 spectator");
} }
spectatedelay4 = NEWTICRATE / 7;
} }
return true; return true;
@ -2227,9 +2215,21 @@ void G_Ticker(boolean run)
if (camtoggledelay) if (camtoggledelay)
camtoggledelay--; camtoggledelay--;
if (camtoggledelay2) if (camtoggledelay2)
camtoggledelay2--; camtoggledelay2--;
if (camtoggledelay3)
camtoggledelay3--;
if (camtoggledelay4)
camtoggledelay4--;
if (spectatedelay)
spectatedelay--;
if (spectatedelay2)
spectatedelay2--;
if (spectatedelay3)
spectatedelay3--;
if (spectatedelay4)
spectatedelay4--;
} }
} }

View File

@ -1037,7 +1037,8 @@ static void K_KartItemRouletteByDistance(player_t *player, ticcmd_t *cmd)
for (i = 0; i < MAXPLAYERS; i++) for (i = 0; i < MAXPLAYERS; i++)
{ {
if (playeringame[i] && !players[i].spectator && players[i].kartstuff[k_position] < player->kartstuff[k_position]) if (playeringame[i] && !players[i].spectator && players[i].mo
&& players[i].kartstuff[k_position] < player->kartstuff[k_position])
pdis += P_AproxDistance(P_AproxDistance(players[i].mo->x - player->mo->x, pdis += P_AproxDistance(P_AproxDistance(players[i].mo->x - player->mo->x,
players[i].mo->y - player->mo->y), players[i].mo->y - player->mo->y),
players[i].mo->z - player->mo->z) / FRACUNIT players[i].mo->z - player->mo->z) / FRACUNIT
@ -1057,12 +1058,8 @@ static void K_KartItemRouletteByDistance(player_t *player, ticcmd_t *cmd)
} }
else else
{ {
if (franticitems) // Frantic items if (franticitems) // Frantic items make the distances between everyone artifically higher :P
{ pdis = (15*pdis/14);
pdis = (13*pdis/12); // make the distances between everyone artifically higher...
//pdis += distvar; // and set everyone back another place!
}
if (pingame == 1) useodds = 0; // Record Attack, or just alone if (pingame == 1) useodds = 0; // Record Attack, or just alone
else if (pdis <= distvar * 0) useodds = 1; // (64*14) * 0 = 0 else if (pdis <= distvar * 0) useodds = 1; // (64*14) * 0 = 0
else if (pdis <= distvar * 1) useodds = 2; // (64*14) * 1 = 896 else if (pdis <= distvar * 1) useodds = 2; // (64*14) * 1 = 896
@ -1083,8 +1080,8 @@ static void K_KartItemRouletteByDistance(player_t *player, ticcmd_t *cmd)
//{ //{
if (cv_magnet.value) SETITEMRESULT(useodds, 1); // Magnet if (cv_magnet.value) SETITEMRESULT(useodds, 1); // Magnet
if (cv_boo.value) SETITEMRESULT(useodds, 2); // Boo if (cv_boo.value) SETITEMRESULT(useodds, 2); // Boo
if (cv_mushroom.value) SETITEMRESULT(useodds, 3); // Mushroom if (cv_mushroom.value && !modeattacking) SETITEMRESULT(useodds, 3); // Mushroom
if (cv_mushroom.value) SETITEMRESULT(useodds, 4); // Triple Mushroom if (cv_triplemushroom.value) SETITEMRESULT(useodds, 4); // Triple Mushroom
if (cv_megashroom.value && !player->kartstuff[k_poweritemtimer]) SETITEMRESULT(useodds, 5); // Mega Mushroom if (cv_megashroom.value && !player->kartstuff[k_poweritemtimer]) SETITEMRESULT(useodds, 5); // Mega Mushroom
if (cv_goldshroom.value) SETITEMRESULT(useodds, 6); // Gold Mushroom if (cv_goldshroom.value) SETITEMRESULT(useodds, 6); // Gold Mushroom
if (cv_star.value && !player->kartstuff[k_poweritemtimer]) SETITEMRESULT(useodds, 7); // Star if (cv_star.value && !player->kartstuff[k_poweritemtimer]) SETITEMRESULT(useodds, 7); // Star
@ -2927,17 +2924,21 @@ static void K_KartUpdatePosition(player_t *player)
thinker_t *th; thinker_t *th;
mobj_t *mo; mobj_t *mo;
if (player->spectator || !player->mo)
return;
for (i = 0; i < MAXPLAYERS; i++) for (i = 0; i < MAXPLAYERS; i++)
{ {
if (!playeringame[i] || players[i].spectator || !players[i].mo)
continue;
if (gametype == GT_RACE) if (gametype == GT_RACE)
{ {
if (playeringame[i] && !players[i].spectator && if ((((players[i].starpostnum) + (numstarposts + 1) * players[i].laps) >
(((players[i].starpostnum) + (numstarposts + 1) * players[i].laps) >
((player->starpostnum) + (numstarposts + 1) * player->laps))) ((player->starpostnum) + (numstarposts + 1) * player->laps)))
position++; position++;
else if (playeringame[i] && !players[i].spectator else if (((players[i].starpostnum) + (numstarposts+1)*players[i].laps) ==
&& (((players[i].starpostnum) + (numstarposts+1)*players[i].laps) == ((player->starpostnum) + (numstarposts+1)*player->laps))
((player->starpostnum) + (numstarposts+1)*player->laps)))
{ {
ppcd = pncd = ipcd = incd = 0; ppcd = pncd = ipcd = incd = 0;
@ -3147,7 +3148,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
else if (cmd->buttons & BT_ATTACK) else if (cmd->buttons & BT_ATTACK)
player->pflags |= PF_ATTACKDOWN; player->pflags |= PF_ATTACKDOWN;
if (player && player->health > 0 && !player->spectator && !player->exiting && player->kartstuff[k_spinouttimer] == 0) if (player && player->mo && player->mo->health > 0 && !player->spectator && !player->exiting && player->kartstuff[k_spinouttimer] == 0)
{ {
// Magnet // Magnet
@ -4680,10 +4681,7 @@ static void K_drawKartPositionFaces(void)
for (j = 0; j < MAXPLAYERS; j++) for (j = 0; j < MAXPLAYERS; j++)
{ {
if (!playeringame[j]) if (!playeringame[j] || players[j].spectator || !players[j].mo)
continue;
if (players[j].spectator)
continue; continue;
for (i = 0; i < MAXPLAYERS; i++) for (i = 0; i < MAXPLAYERS; i++)
@ -4706,6 +4704,7 @@ static void K_drawKartPositionFaces(void)
for (i = 0; i < ranklines; i++) for (i = 0; i < ranklines; i++)
{ {
if (players[rankplayer[i]].spectator) continue; // Spectators are ignored if (players[rankplayer[i]].spectator) continue; // Spectators are ignored
if (!players[rankplayer[i]].mo) continue;
balloonx = FACE_X+18; balloonx = FACE_X+18;

View File

@ -6782,8 +6782,9 @@ void P_MobjThinker(mobj_t *mobj)
break; break;
case MT_PLAYERARROW: case MT_PLAYERARROW:
if (mobj->target && mobj->target->health if (mobj->target && mobj->target->health
&& mobj->target->player && mobj->target->player->mo && mobj->target->player && !mobj->target->player->spectator
&& mobj->target->player->health && mobj->target->player->playerstate != PST_DEAD) && mobj->target->player->health && mobj->target->player->playerstate != PST_DEAD
&& players[displayplayer].mo && !players[displayplayer].spectator)
{ {
fixed_t scale = mobj->target->scale; fixed_t scale = mobj->target->scale;
mobj->color = mobj->target->color; mobj->color = mobj->target->color;

View File

@ -2982,8 +2982,13 @@ boolean P_SetupLevel(boolean skipprecip)
gamespeed = 0; gamespeed = 0;
else else
gamespeed = cv_kartspeed.value; gamespeed = cv_kartspeed.value;
franticitems = cv_kartfrantic.value;
if (gametype == GT_MATCH)
mirrormode = false;
else
mirrormode = cv_kartmirror.value; mirrormode = cv_kartmirror.value;
franticitems = cv_kartfrantic.value;
comeback = cv_kartcomeback.value; comeback = cv_kartcomeback.value;
// clear special respawning que // clear special respawning que