Battle HUD stuff

This commit is contained in:
TehRealSalt 2017-11-13 20:45:57 -05:00
parent b64e9a1501
commit 3d3972fac9
6 changed files with 157 additions and 22 deletions

View File

@ -318,11 +318,12 @@ consvar_t cv_feather = {"feathers", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NU
consvar_t cv_karthud = {"karthud", "Default", CV_SAVE|CV_CALL, karthud_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_kartcheck = {"kartcheck", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
static CV_PossibleValue_t kartstarsfx_cons_t[] = {{0, "Music"}, {1, "SMK"}, {0, NULL}};
consvar_t cv_kartstarsfx = {"kartstarsfx", "Music", CV_SAVE, kartstarsfx_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // change default to "SMK"?
consvar_t cv_kartstarsfx = {"kartstarsfx", "SMK", CV_SAVE, kartstarsfx_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // change default to "SMK"?
consvar_t cv_kartcc = {"kartcc", "100cc", CV_NETVAR, kartcc_cons_t, NULL, 0, NULL, NULL, 0, 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_kartfrantic = {"kartfrantic", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 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};
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

View File

@ -111,6 +111,7 @@ extern consvar_t cv_kartstarsfx;
extern consvar_t cv_kartcc;
extern consvar_t cv_kartballoons;
extern consvar_t cv_kartfrantic;
extern consvar_t cv_kartcomeback;
extern consvar_t cv_speedometer;
extern consvar_t cv_collideminimum;

View File

@ -313,6 +313,7 @@ typedef enum
k_comebackhits, // Number of times hit in comeback mode
k_comebackpoints, // Number of times you've bombed or gave an item to someone; once it's 3 it gets set back to 0 and you're given a balloon
k_comebackmode, // 0 = bomb, 1 = item
k_comebackshowninfo,// Have you already seen the info screen before?
NUMKARTSTUFF
} kartstufftype_t;

View File

@ -1790,7 +1790,7 @@ boolean G_Responder(event_t *ev)
if (players[displayplayer].spectator)
continue;
if (G_GametypeHasTeams())
/*if (G_GametypeHasTeams())
{
if (players[consoleplayer].ctfteam
&& players[displayplayer].ctfteam != players[consoleplayer].ctfteam)
@ -1812,6 +1812,12 @@ boolean G_Responder(event_t *ev)
{
if (!players[consoleplayer].spectator)
continue;
}*/
if (gametype != GT_RACE) // srb2kart
{
if (players[consoleplayer].kartstuff[k_balloon] > 0)
continue;
}
break;
@ -3082,7 +3088,7 @@ static void G_DoWorldDone(void)
// don't reset player between maps
D_MapChange(nextmap+1, gametype, ultimatemode, false, 0, false, false);
else
// resetplayer in match/chaos/tag/CTF/race for more equality
// resetplayer in match/tag/CTF for more equality
D_MapChange(nextmap+1, gametype, ultimatemode, true, 0, false, false);
}

View File

@ -18,6 +18,7 @@
#include "z_zone.h"
#include "m_misc.h"
#include "k_kart.h"
#include "f_finale.h"
//{ SRB2kart Color Code
@ -307,6 +308,7 @@ void K_RegisterKartStuff(void)
CV_RegisterVar(&cv_kartcc);
CV_RegisterVar(&cv_kartballoons);
CV_RegisterVar(&cv_kartfrantic);
CV_RegisterVar(&cv_kartcomeback);
CV_RegisterVar(&cv_speedometer);
CV_RegisterVar(&cv_collideminimum);
CV_RegisterVar(&cv_collidesoundnum);
@ -1383,8 +1385,14 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
if (player->kartstuff[k_spinouttimer])
player->kartstuff[k_spinouttimer]--;
else if (!cv_kartcomeback.value)
player->kartstuff[k_comebacktimer] = comebacktime;
else if (player->kartstuff[k_comebacktimer])
{
player->kartstuff[k_comebacktimer]--;
if (player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer] <= 0)
player->kartstuff[k_comebackshowninfo] = 1;
}
if (player->kartstuff[k_spinout] == 0 && player->kartstuff[k_spinouttimer] == 0 && player->powers[pw_flashing] == flashingtics)
player->powers[pw_flashing]--;
@ -3524,6 +3532,9 @@ void K_CheckBalloons(void)
if (!playeringame[i] || players[i].spectator) // not even in-game
continue;
if (players[i].exiting) // we're already exiting! stop!
return;
numingame++;
if (players[i].kartstuff[k_balloon] <= 0) // if you don't have any balloons, you're probably not a winner
@ -3539,11 +3550,11 @@ void K_CheckBalloons(void)
if (playeringame[winnernum])
{
P_AddPlayerScore(&players[winnernum], numingame);
CONS_Printf(M_GetText("%s recieved %d points for surviving!\n"), player_names[winnernum], numingame); // numingame/2 == 1 ? "" : "s"
CONS_Printf(M_GetText("%s recieved %d points for winning!\n"), player_names[winnernum], numingame); // numingame/2 == 1 ? "" : "s"
}
if (server)
SendNetXCmd(XD_EXITLEVEL, NULL, 0);
for (i = 0; i < MAXPLAYERS; i++)
P_DoPlayerExit(&players[i]);
}
//}
@ -3561,6 +3572,10 @@ static patch_t *kp_timesticker;
static patch_t *kp_timestickerwide;
static patch_t *kp_lapsticker;
static patch_t *kp_lapstickernarrow;
static patch_t *kp_balloonsticker;
static patch_t *kp_balloonstickerwide;
static patch_t *kp_karmasticker;
static patch_t *kp_timeoutsticker;
static patch_t *kp_lakitustart[NUMLAKIFRAMES];
static patch_t *kp_lakitulaps[17];
static patch_t *kp_positionnum[NUMPOSNUMS][NUMPOSFRAMES];
@ -3570,6 +3585,10 @@ static patch_t *kp_facefirst;
static patch_t *kp_facesecond;
static patch_t *kp_facethird;
static patch_t *kp_facefourth;
static patch_t *kp_battlewin;
static patch_t *kp_battlelose;
static patch_t *kp_battlewait;
static patch_t *kp_battleinfo;
static patch_t *kp_magnet;
static patch_t *kp_boo;
static patch_t *kp_boosteal;
@ -3656,6 +3675,10 @@ void K_LoadKartHUDGraphics(void)
kp_timestickerwide = W_CachePatchName("K_STTIMW", PU_HUDGFX);
kp_lapsticker = W_CachePatchName("K_STLAPS", PU_HUDGFX);
kp_lapstickernarrow = W_CachePatchName("K_STLAPN", PU_HUDGFX);
kp_balloonsticker = W_CachePatchName("K_STBALN", PU_HUDGFX);
kp_balloonstickerwide = W_CachePatchName("K_STBALW", PU_HUDGFX);
kp_karmasticker = W_CachePatchName("K_STKARM", PU_HUDGFX);
kp_timeoutsticker = W_CachePatchName("K_STTOUT", PU_HUDGFX);
// Lakitu Start-up Frames
kp_lakitustart[0] = W_CachePatchName("K_LAKISA", PU_HUDGFX);
@ -3714,6 +3737,12 @@ void K_LoadKartHUDGraphics(void)
kp_facethird = W_CachePatchName("K_PFACE3", PU_HUDGFX);
kp_facefourth = W_CachePatchName("K_PFACE4", PU_HUDGFX);
// Battle graphics
kp_battlewin = W_CachePatchName("K_BWIN", PU_HUDGFX);
kp_battlelose = W_CachePatchName("K_BLOSE", PU_HUDGFX);
kp_battlewait = W_CachePatchName("K_BWAIT", PU_HUDGFX);
kp_battleinfo = W_CachePatchName("K_BINFO", PU_HUDGFX);
// Kart Item Windows
kp_magnet = W_CachePatchName("K_ITMAGN", PU_HUDGFX);
kp_boo = W_CachePatchName("K_ITBOO1", PU_HUDGFX);
@ -4453,6 +4482,36 @@ static void K_drawKartSpeedometer(void)
}
}
static void K_drawKartBalloonsOrKarma(void)
{
UINT8 *colormap = R_GetTranslationColormap(-1, stplyr->skincolor, 0);
INT32 flags = V_SNAPTOLEFT|V_SNAPTOBOTTOM;
if (splitscreen)
flags = 0;
if (stplyr->kartstuff[k_balloon] <= 0)
{
V_DrawScaledPatch(LAPS_X, STRINGY(LAPS_Y), flags, kp_karmasticker);
V_DrawKartString(LAPS_X+58, STRINGY(LAPS_Y+3), flags, va("%d", stplyr->kartstuff[k_comebackhits]));
V_DrawKartString(LAPS_X+85, STRINGY(LAPS_Y+3), flags, va("3"));
}
else
{
if (cv_kartballoons.value > 9)
{
V_DrawMappedPatch(LAPS_X, STRINGY(LAPS_Y), flags, kp_balloonstickerwide, colormap);
V_DrawKartString(LAPS_X+46, STRINGY(LAPS_Y+3), flags, va("%2d", stplyr->kartstuff[k_balloon]));
V_DrawKartString(LAPS_X+83, STRINGY(LAPS_Y+3), flags, va("%2d", cv_kartballoons.value));
}
else
{
V_DrawMappedPatch(LAPS_X, STRINGY(LAPS_Y), flags, kp_balloonsticker, colormap);
V_DrawKartString(LAPS_X+46, STRINGY(LAPS_Y+3), flags, va("%d", stplyr->kartstuff[k_balloon]));
V_DrawKartString(LAPS_X+73, STRINGY(LAPS_Y+3), flags, va("%d", cv_kartballoons.value));
}
}
}
fixed_t K_FindCheckX(fixed_t px, fixed_t py, angle_t ang, fixed_t mx, fixed_t my)
{
fixed_t dist, x;
@ -4528,6 +4587,54 @@ static void K_drawKartPlayerCheck(void)
}
}
static void K_drawBattleWait(void)
{
INT32 t = ((stplyr->kartstuff[k_comebacktimer]+TICRATE)/TICRATE);
INT32 X = BASEVIDWIDTH/2;
if (!WipeInAction || !menuactive || !splitscreen)
V_DrawFadeScreen();
while (t)
{
X -= 8;
t /= 10;
}
if (!stplyr->kartstuff[k_comebackshowninfo])
{
V_DrawScaledPatch(BASEVIDWIDTH/2, STRINGY(BASEVIDHEIGHT/2), 0, kp_battleinfo);
V_DrawScaledPatch(BASEVIDWIDTH/2, STRINGY((BASEVIDHEIGHT/2) + 66), 0, kp_timeoutsticker);
V_DrawKartString(X, STRINGY((BASEVIDHEIGHT/2) + 66), 0, va("%d", ((stplyr->kartstuff[k_comebacktimer]+TICRATE)/TICRATE)));
}
else
{
V_DrawScaledPatch(BASEVIDWIDTH/2, STRINGY(BASEVIDHEIGHT/2), 0, kp_battlewait);
V_DrawScaledPatch(BASEVIDWIDTH/2, STRINGY((BASEVIDHEIGHT/2) + 30), 0, kp_timeoutsticker);
V_DrawKartString(X, STRINGY((BASEVIDHEIGHT/2) + 30), 0, va("%d", ((stplyr->kartstuff[k_comebacktimer]+TICRATE)/TICRATE)));
}
}
static void K_drawBattleExit(void)
{
if (!WipeInAction || !menuactive || !(splitscreen && stplyr != &players[consoleplayer]))
V_DrawFadeScreen();
if (splitscreen)
{
if (stplyr->kartstuff[k_balloon])
V_DrawScaledPatch(96, STRINGY(BASEVIDHEIGHT/2), 0, kp_battlewin);
else
V_DrawScaledPatch(BASEVIDWIDTH-96, STRINGY(BASEVIDHEIGHT/2), 0, kp_battlelose);
}
else
{
if (stplyr->kartstuff[k_balloon])
V_DrawScaledPatch(BASEVIDWIDTH/2, STRINGY(BASEVIDHEIGHT/2), 0, kp_battlewin);
else
V_DrawScaledPatch(BASEVIDWIDTH/2, STRINGY(BASEVIDHEIGHT/2), 0, kp_battlelose);
}
}
static void K_drawStartLakitu(void)
{
patch_t *localpatch = kp_nodraw;
@ -4639,6 +4746,21 @@ void K_drawKartHUD(void)
// This is handled by console/menu values
K_initKartHUD();
// Draw full screen stuff that turns off the rest of the HUD
if (gametype != GT_RACE)
{
if (stplyr->exiting)
{
K_drawBattleExit();
return;
}
else if (stplyr->kartstuff[k_balloon] <= 0 && stplyr->kartstuff[k_comebacktimer] && cv_kartcomeback.value)
{
K_drawBattleWait();
return;
}
}
// Draw Lakitu
// This is done first so that regardless of HUD layers,
// he'll appear to be in the 'real world'
@ -4669,6 +4791,9 @@ void K_drawKartHUD(void)
K_drawKartRetroItem();
//K_DrawKartTripleItem();
// Draw the timestamp
K_drawKartTimestamp();
if (gametype == GT_RACE) // Race-only elements
{
@ -4682,21 +4807,19 @@ void K_drawKartHUD(void)
// Draw the numerical position
K_DrawKartPositionNum(stplyr->kartstuff[k_position]);
// Draw the speedometer
// TODO: Make a better speedometer.
K_drawKartSpeedometer();
// Draw the lap counter
K_drawKartLaps();
}
// Draw the timestamp
K_drawKartTimestamp();
// Draw the speedometer
// TODO: Make a better speedometer.
K_drawKartSpeedometer();
if (gametype != GT_RACE && !stplyr->kartstuff[k_spinouttimer]
&& stplyr->kartstuff[k_balloon] <= 0 && stplyr->kartstuff[k_comebacktimer])
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(176), 0, va("%d", (stplyr->kartstuff[k_comebacktimer]+TICRATE)/TICRATE));
else if (gametype == GT_MATCH) // Battle-only
{
// Draw the hits left!
K_drawKartBalloonsOrKarma();
}
}
//}

View File

@ -1010,6 +1010,9 @@ void P_AddPlayerScore(player_t *player, UINT32 amount)
if (player->bot)
player = &players[consoleplayer];
if (player->exiting) // srb2kart
return;
// NiGHTS does it different!
if (gamestate == GS_LEVEL && mapheaderinfo[gamemap-1]->typeoflevel & TOL_NIGHTS)
{
@ -1604,9 +1607,9 @@ void P_DoPlayerExit(player_t *player)
if (player->exiting)
return;
if (cv_allowexitlevel.value == 0 && !G_PlatformGametype())
/*if (cv_allowexitlevel.value == 0 && !G_PlatformGametype()) // srb2kart
return;
else if (gametype == GT_RACE || gametype == GT_COMPETITION) // If in Race Mode, allow
else*/ if (gametype == GT_RACE || gametype == GT_COMPETITION) // If in Race Mode, allow
{
// SRB2kart 120217
if (!countdown && !(netgame || multiplayer))
@ -1665,8 +1668,8 @@ void P_DoPlayerExit(player_t *player)
player->powers[pw_spacetime] = 0;
P_RestoreMusic(player);
if (playeringame[player-players] && netgame && !circuitmap)
CONS_Printf(M_GetText("%s has completed the level.\n"), player_names[player-players]);
/*if (playeringame[player-players] && netgame && !circuitmap)
CONS_Printf(M_GetText("%s has completed the level.\n"), player_names[player-players]);*/
}
#define SPACESPECIAL 12