Merge branch 'sonicitems' of https://git.magicalgirl.moe/KartKrew/Kart into sonicitems

This commit is contained in:
TehRealSalt 2018-07-02 18:25:39 -04:00
commit 45ea6cad0a
7 changed files with 115 additions and 62 deletions

View File

@ -449,7 +449,7 @@ consvar_t cv_mute = {"mute", "Off", CV_NETVAR|CV_CALL, CV_OnOff, Mute_OnChange,
consvar_t cv_sleep = {"cpusleep", "-1", CV_SAVE, sleeping_cons_t, NULL, -1, NULL, NULL, 0, 0, NULL};
INT16 gametype = GT_RACE; // SRB2kart
INT16 deferredgametype = GT_RACE; // SRB2kart
boolean forceresetplayers = false;
UINT8 splitscreen = 0;
boolean circuitmap = true; // SRB2kart
INT32 adminplayers[MAXPLAYERS];
@ -1883,6 +1883,8 @@ void D_MapChange(INT32 mapnum, INT32 newgametype, boolean pultmode, boolean rese
static char buf[2+MAX_WADPATH+1+4];
static char *buf_p = buf;
forceresetplayers = false;
// The supplied data are assumed to be good.
I_Assert(delay >= 0 && delay <= 2);
@ -1966,21 +1968,21 @@ void D_SetupVote(void)
char buf[8];
char *p = buf;
INT32 i;
INT16 gt = gametype;
INT16 gt;
for (i = 0; i < 4; i++)
{
if (i == 2) // sometimes a different gametype
{
WRITEUINT16(p, G_RandMap(G_TOLFlag(gt = G_SometimesGetDifferentGametype()), prevmap, false, false));
WRITEUINT16(p, G_RandMap(G_TOLFlag(gt = G_SometimesGetDifferentGametype()), prevmap, false, false, false, true));
WRITEUINT16(p, gt);
}
else
{
if (i == 3) // unknown-random
WRITEUINT16(p, G_RandMap(G_TOLFlag(gametype), prevmap, true, false));
WRITEUINT16(p, G_RandMap(G_TOLFlag(gametype), prevmap, true, false, true, false));
else
WRITEUINT16(p, G_RandMap(G_TOLFlag(gametype), prevmap, false, false));
WRITEUINT16(p, G_RandMap(G_TOLFlag(gametype), prevmap, false, false, false, true));
WRITEUINT16(p, gametype);
}
}
@ -2137,8 +2139,8 @@ static void Command_Map_f(void)
}
}
if (!(i = COM_CheckParm("-force")) && newgametype == gametype) // SRB2Kart
newresetplayers = false; // if not forcing and gametypes is the same
if (!(i = COM_CheckParm("-force")) && newgametype == gametype && !G_BattleGametype()) // SRB2Kart
newresetplayers = false; // if not forcing and gametypes is the same and not battle
// don't use a gametype the map doesn't support
if (cv_debug || i || cv_skipmapcheck.value)
@ -4183,7 +4185,7 @@ static void TimeLimit_OnChange(void)
*/
void D_GameTypeChanged(INT32 lastgametype)
{
if (netgame)
if (multiplayer)
CONS_Printf(M_GetText("Gametype was changed from %s to %s\n"), gametype_cons_t[lastgametype].strvalue, gametype_cons_t[gametype].strvalue);
// Only do the following as the server, not as remote admin.

View File

@ -76,10 +76,11 @@ extern boolean addedtogame; // true after the server has added you
// Only true if >1 player. netgame => multiplayer but not (multiplayer=>netgame)
extern boolean multiplayer;
extern INT16 gametype, deferredgametype;
extern INT16 gametype;
extern UINT8 splitscreen;
extern boolean circuitmap; // Does this level have 'circuit mode'?
extern boolean fromlevelselect;
extern boolean forceresetplayers;
// ========================================
// Internal parameters for sound rendering.

View File

@ -903,37 +903,53 @@ void F_TitleScreenDrawer(void)
if (modeattacking)
return; // We likely came here from retrying. Don't do a damn thing.
if (finalecount < 50)
V_DrawFill(0, 0, 320, 200, 31);
else
// Draw that sky!
F_SkyScroll(titlescrollspeed);
// Don't draw outside of the title screewn, or if the patch isn't there.
// Don't draw outside of the title screen, or if the patch isn't there.
if (!ttbanner || (gamestate != GS_TITLESCREEN && gamestate != GS_WAITINGPLAYERS))
return;
V_DrawSmallScaledPatch(84, 36, 0, ttbanner);
if (finalecount < 20)
{
if (finalecount >= 10)
F_SkyScroll(titlescrollspeed);
return;
}
if (finalecount < 50)
{
V_DrawFill(0, 0, 320, 200, 31);
V_DrawSmallScaledPatch(84, 36, 0, ttbanner);
if (finalecount >= 20)
V_DrawSmallScaledPatch(84, 87, 0, ttkart);
else if (finalecount >= 10)
V_DrawSciencePatch((84<<FRACBITS) - FixedDiv(180<<FRACBITS, 10<<FRACBITS)*(20-finalecount), (87<<FRACBITS), 0, ttkart, FRACUNIT/2);
}
else
{
V_DrawSmallScaledPatch(84, 87, 0, ttkart);
// Checkers, only need to be drawn after the whiteout, but we can do it here because it won't be seen before anyway
V_DrawSciencePatch(0, 0 - FixedMul(40<<FRACBITS, FixedDiv(finalecount%70, 70)), V_SNAPTOTOP|V_SNAPTOLEFT, ttcheckers, FRACUNIT);
V_DrawSciencePatch(280<<FRACBITS, -(40<<FRACBITS) + FixedMul(40<<FRACBITS, FixedDiv(finalecount%70, 70)), V_SNAPTOTOP|V_SNAPTORIGHT, ttcheckers, FRACUNIT);
}
if (finalecount >= 50 && finalecount < 55)
else if (finalecount < 52)
{
V_DrawFill(0, 0, 320, 200, 120);
V_DrawSmallScaledPatch(84, 36, 0, ttkflash);
}
else
{
INT32 transval = 0;
if (finalecount <= (50+(9<<1)))
transval = (finalecount - 50)>>1;
F_SkyScroll(titlescrollspeed);
V_DrawSciencePatch(0, 0 - FixedMul(40<<FRACBITS, FixedDiv(finalecount%70, 70)), V_SNAPTOTOP|V_SNAPTOLEFT, ttcheckers, FRACUNIT);
V_DrawSciencePatch(280<<FRACBITS, -(40<<FRACBITS) + FixedMul(40<<FRACBITS, FixedDiv(finalecount%70, 70)), V_SNAPTOTOP|V_SNAPTORIGHT, ttcheckers, FRACUNIT);
if (transval)
V_DrawFadeScreen(120, 10 - transval);
V_DrawSmallScaledPatch(84, 36, 0, ttbanner);
V_DrawSmallScaledPatch(84, 87, 0, ttkart);
if (!transval)
return;
V_DrawSmallScaledPatch(84, 36, transval<<V_ALPHASHIFT, ttkflash);
}
}
// (no longer) De-Demo'd Title Screen

View File

@ -3144,12 +3144,15 @@ static INT32 TOLMaps(INT16 tolflags)
* has those flags.
* \author Graue <graue@oceanbase.org>
*/
INT16 G_RandMap(INT16 tolflags, INT16 pprevmap, boolean dontadd, boolean ignorebuffer)
static INT16 *okmaps = NULL;
INT16 G_RandMap(INT16 tolflags, INT16 pprevmap, boolean dontadd, boolean ignorebuffer, boolean maphell, boolean callagainsoon)
{
INT16 *okmaps = Z_Malloc(NUMMAPS * sizeof(INT16), PU_STATIC, NULL);
INT32 numokmaps = 0;
INT16 ix, bufx;
if (!okmaps)
okmaps = Z_Malloc(NUMMAPS * sizeof(INT16), PU_STATIC, NULL);
// Find all the maps that are ok and and put them in an array.
for (ix = 0; ix < NUMMAPS; ix++)
{
@ -3160,7 +3163,8 @@ INT16 G_RandMap(INT16 tolflags, INT16 pprevmap, boolean dontadd, boolean ignoreb
if ((mapheaderinfo[ix]->typeoflevel & tolflags) != tolflags
|| ix == pprevmap
|| (M_MapLocked(ix+1) && !dedicated))
|| (!dedicated && M_MapLocked(ix+1))
|| (!maphell && (mapheaderinfo[ix]->menuflags & LF2_HIDEINMENU))) // the highest quality memes
isokmap = false;
if (!ignorebuffer)
@ -3184,7 +3188,7 @@ INT16 G_RandMap(INT16 tolflags, INT16 pprevmap, boolean dontadd, boolean ignoreb
if (numokmaps == 0)
{
if (!ignorebuffer)
return G_RandMap(tolflags, pprevmap, dontadd, true); // If there's no matches, (An incredibly silly function chain, buuut... :V)
return G_RandMap(tolflags, pprevmap, dontadd, true, maphell, callagainsoon); // If there's no matches, (An incredibly silly function chain, buuut... :V)
ix = 0; // Sorry, none match. You get MAP01.
for (bufx = 0; bufx < NUMMAPS+1; bufx++)
@ -3201,7 +3205,11 @@ INT16 G_RandMap(INT16 tolflags, INT16 pprevmap, boolean dontadd, boolean ignoreb
}
}
Z_Free(okmaps);
if (!callagainsoon)
{
Z_Free(okmaps);
okmaps = NULL;
}
return ix;
}
@ -3337,7 +3345,7 @@ static void G_DoCompleted(void)
if (cv_advancemap.value == 0) // Stay on same map.
nextmap = prevmap;
else if (cv_advancemap.value == 2) // Go to random map.
nextmap = G_RandMap(G_TOLFlag(gametype), prevmap, false, false);
nextmap = G_RandMap(G_TOLFlag(gametype), prevmap, false, false, false, false);
}
// We are committed to this map now.
@ -3385,7 +3393,7 @@ void G_NextLevel(void)
else
{
if (gamestate != GS_VOTING)
deferredgametype = gametype;
forceresetplayers = false;
gameaction = ga_worlddone;
}
}
@ -3395,12 +3403,13 @@ static void G_DoWorldDone(void)
if (server)
{
// SRB2Kart
if (G_RaceGametype() && (deferredgametype == gametype))
// don't reset player between maps in Race
D_MapChange(nextmap+1, deferredgametype, ultimatemode, false, 0, false, false);
else
// resetplayer in Battle for more equality
D_MapChange(nextmap+1, deferredgametype, ultimatemode, true, 0, false, false);
D_MapChange(nextmap+1,
gametype,
ultimatemode,
(forceresetplayers || G_BattleGametype()), // resetplayer in Battle for more equality
0,
false,
false);
}
gameaction = ga_nothing;

View File

@ -249,6 +249,6 @@ FUNCMATH INT32 G_TicsToMilliseconds(tic_t tics);
// Don't split up TOL handling
INT16 G_TOLFlag(INT32 pgametype);
INT16 G_RandMap(INT16 tolflags, INT16 pprevmap, boolean dontadd, boolean ignorebuffer);
INT16 G_RandMap(INT16 tolflags, INT16 pprevmap, boolean dontadd, boolean ignorebuffer, boolean maphell, boolean callagainsoon);
#endif

View File

@ -3048,7 +3048,7 @@ void M_Init(void)
quitmsg[QUIT3MSG] = M_GetText("Are you really going to give up?\nWe certainly would never give you up.\n\n(Press 'Y' to quit)");
quitmsg[QUIT3MSG1] = M_GetText("Come on, just ONE more netgame!\n\n(Press 'Y' to quit)");
quitmsg[QUIT3MSG2] = M_GetText("Press 'N' to unlock\nthe Golden Kart!\n\n(Press 'Y' to quit)");
quitmsg[QUIT3MSG3] = M_GetText("Couldn't handle\nthe banana meta?\n\n\n(Press 'Y' to quit)");
quitmsg[QUIT3MSG3] = M_GetText("Couldn't handle\nthe banana meta?\n\n(Press 'Y' to quit)");
quitmsg[QUIT3MSG4] = M_GetText("Every time you press 'Y', an\nSRB2Kart Developer cries...\n\n(Press 'Y' to quit)");
quitmsg[QUIT3MSG5] = M_GetText("You'll be back to play soon, though...\n...right?\n\n(Press 'Y' to quit)");
quitmsg[QUIT3MSG6] = M_GetText("Aww, is Eggman's Nightclub too\ndifficult for you?\n\n(Press 'Y' to quit)");

View File

@ -233,6 +233,7 @@ void Y_IntermissionDrawer(void)
{
// Bonus loops
INT32 i;
INT32 hilicol = V_YELLOWMAP; // fallback
if (intertype == int_none || rendermode == render_none)
return;
@ -310,7 +311,7 @@ void Y_IntermissionDrawer(void)
INT32 x = 4;
INT32 y = 48;
char name[MAXPLAYERNAME+1];
INT32 hilicol = (cons_menuhighlight.value) ? cons_menuhighlight.value : V_SKYMAP;
hilicol = (cons_menuhighlight.value) ? cons_menuhighlight.value : V_SKYMAP;
boolean completed[MAXPLAYERS];
memset(completed, 0, sizeof (completed));
@ -412,7 +413,7 @@ void Y_IntermissionDrawer(void)
INT32 x = 4;
INT32 y = 48;
char name[MAXPLAYERNAME+1];
INT32 hilicol = (cons_menuhighlight.value) ? cons_menuhighlight.value : V_REDMAP;
hilicol = (cons_menuhighlight.value) ? cons_menuhighlight.value : V_REDMAP;
// draw the header
V_DrawScaledPatch((BASEVIDWIDTH/2) - (SHORT(data.match.result->width) / 2), 2, 0, data.match.result);
@ -638,7 +639,7 @@ void Y_IntermissionDrawer(void)
}
if (timer)
V_DrawCenteredString(BASEVIDWIDTH/2, 188, V_YELLOWMAP,
V_DrawCenteredString(BASEVIDWIDTH/2, 188, hilicol,
va("start in %d seconds", timer/TICRATE));
// Make it obvious that scrambling is happening next round.
@ -2284,8 +2285,40 @@ void Y_VoteDrawer(void)
}
if (timer)
V_DrawCenteredString(BASEVIDWIDTH/2, 188, V_YELLOWMAP|V_SNAPTOBOTTOM,
{
INT32 hilicol;
if (cons_menuhighlight.value)
hilicol = cons_menuhighlight.value;
else if (gametype == GT_RACE)
hilicol = V_SKYMAP;
else //if (gametype == GT_MATCH)
hilicol = V_REDMAP;
V_DrawCenteredString(BASEVIDWIDTH/2, 188, hilicol|V_SNAPTOBOTTOM,
va("Vote ends in %d seconds", timer/TICRATE));
}
}
//
// Y_VoteStop
//
// Vote screen's selection stops moving
//
SINT8 deferredlevel = 0;
static void Y_VoteStops(SINT8 pick, SINT8 level)
{
if (P_IsLocalPlayer(&players[pick]))
S_StartSound(NULL, sfx_yeeeah);
else
S_StartSound(NULL, sfx_kc48);
nextmap = votelevels[level][0];
if (gametype != votelevels[level][1])
{
INT16 lastgametype = gametype;
gametype = votelevels[level][1];
D_GameTypeChanged(lastgametype);
forceresetplayers = true;
}
}
//
@ -2385,10 +2418,7 @@ void Y_VoteTicker(void)
else if (voteclient.roffset >= voteclient.rendoff)
{
voteendtic = votetic + (3*TICRATE);
if (P_IsLocalPlayer(&players[pickedvote]))
S_StartSound(NULL, sfx_yeeeah);
else
S_StartSound(NULL, sfx_kc48);
Y_VoteStops(pickedvote, deferredlevel);
}
}
}
@ -2619,7 +2649,6 @@ void Y_SetupVoteFinish(SINT8 pick, SINT8 level)
if (pick == -1) // No other votes? We gotta get out of here, then!
{
timer = 0;
deferredgametype = gametype;
Y_UnloadVoteData();
Y_FollowIntermission();
return;
@ -2661,17 +2690,13 @@ void Y_SetupVoteFinish(SINT8 pick, SINT8 level)
{
voteendtic = votetic + (5*TICRATE);
S_ChangeMusicInternal("voteeb", false);
if (P_IsLocalPlayer(&players[pick]))
S_StartSound(NULL, sfx_yeeeah);
else
S_StartSound(NULL, sfx_kc48);
Y_VoteStops(pick, level);
}
else
S_ChangeMusicInternal("voteea", true);
}
deferredlevel = level;
pickedvote = pick;
nextmap = votelevels[level][0];
deferredgametype = votelevels[level][1];
timer = 0;
}