Merge pull request 'Rework Rings hud to use original assets.' (#20) from ringrework into ACS2
Reviewed-on: https://codeberg.org/NepDisk/blankart/pulls/20
This commit is contained in:
commit
1a668e0ab5
5 changed files with 62 additions and 153 deletions
|
|
@ -91,7 +91,7 @@ typedef enum
|
|||
PF_NOCONTEST = 1<<11, // Did not finish (last place explosion)
|
||||
PF_LOSTLIFE = 1<<12, // Do not lose life more than once
|
||||
|
||||
PF_RINGLOCK = 1<<13, // Prevent picking up rings while SPB is locked on
|
||||
PF_RINGLOCK = 1<<13, // Prevent picking up rings while locked. Mostly for lua use since SPB no longer locks
|
||||
|
||||
PF_DRIFTINPUT = 1<<14, // Drifting!
|
||||
PF_GETSPARKS = 1<<15, // Can get sparks
|
||||
|
|
@ -233,10 +233,7 @@ typedef enum
|
|||
khud_itemblinkmode, // Type of flashing: 0 = white (normal), 1 = red (mashing), 2 = rainbow (enhanced items)
|
||||
|
||||
// Rings
|
||||
khud_ringframe, // Ring spin frame
|
||||
khud_ringtics, // Tics left until next ring frame
|
||||
khud_ringdelay, // Next frame's tics
|
||||
khud_ringspblock, // Which frame of the SPB ring lock animation to use
|
||||
khud_ringlock, // Ring lock
|
||||
|
||||
// Lap finish
|
||||
khud_lapanimation, // Used to show the lap start wing logo animation
|
||||
|
|
|
|||
143
src/k_hud.c
143
src/k_hud.c
|
|
@ -81,13 +81,9 @@ static patch_t *kp_spbminimap;
|
|||
static patch_t *kp_itemboxminimap;
|
||||
|
||||
static patch_t *kp_ringsticker[2];
|
||||
static patch_t *kp_ringstickersplit[4];
|
||||
static patch_t *kp_ring[6];
|
||||
static patch_t *kp_smallring[6];
|
||||
static patch_t *kp_ringsplitscreen;
|
||||
static patch_t *kp_ringdebtminus;
|
||||
static patch_t *kp_ringdebtminussmall;
|
||||
static patch_t *kp_ringspblock[16];
|
||||
static patch_t *kp_ringspblocksmall[16];
|
||||
|
||||
static patch_t *kp_speedometersticker;
|
||||
static patch_t *kp_speedometerlabel[4];
|
||||
|
|
@ -268,45 +264,11 @@ void K_LoadKartHUDGraphics(void)
|
|||
HU_UpdatePatch(&kp_itemboxminimap, "K_ITMMM");
|
||||
|
||||
// Rings & Lives
|
||||
HU_UpdatePatch(&kp_ringsticker[0], "RNGBACKA");
|
||||
HU_UpdatePatch(&kp_ringsticker[1], "RNGBACKB");
|
||||
|
||||
sprintf(buffer, "K_RINGx");
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
buffer[6] = '0'+(i+1);
|
||||
HU_UpdatePatch(&kp_ring[i], "%s", buffer);
|
||||
}
|
||||
|
||||
HU_UpdatePatch(&kp_ringdebtminus, "RDEBTMIN");
|
||||
|
||||
sprintf(buffer, "SPBRNGxx");
|
||||
for (i = 0; i < 16; i++)
|
||||
{
|
||||
buffer[6] = '0'+((i+1) / 10);
|
||||
buffer[7] = '0'+((i+1) % 10);
|
||||
HU_UpdatePatch(&kp_ringspblock[i], "%s", buffer);
|
||||
}
|
||||
|
||||
HU_UpdatePatch(&kp_ringstickersplit[0], "SMRNGBGA");
|
||||
HU_UpdatePatch(&kp_ringstickersplit[1], "SMRNGBGB");
|
||||
|
||||
sprintf(buffer, "K_SRINGx");
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
buffer[7] = '0'+(i+1);
|
||||
HU_UpdatePatch(&kp_smallring[i], "%s", buffer);
|
||||
}
|
||||
|
||||
HU_UpdatePatch(&kp_ringdebtminussmall, "SRDEBTMN");
|
||||
|
||||
sprintf(buffer, "SPBRGSxx");
|
||||
for (i = 0; i < 16; i++)
|
||||
{
|
||||
buffer[6] = '0'+((i+1) / 10);
|
||||
buffer[7] = '0'+((i+1) % 10);
|
||||
HU_UpdatePatch(&kp_ringspblocksmall[i], "%s", buffer);
|
||||
}
|
||||
HU_UpdatePatch(&kp_ringsticker[0], "K_RNGHD");
|
||||
HU_UpdatePatch(&kp_ringsticker[1], "K_RNGHL");
|
||||
HU_UpdatePatch(&kp_ringsplitscreen, "K_RNGSS");
|
||||
HU_UpdatePatch(&kp_ringdebtminus, "K_RNGDM");
|
||||
HU_UpdatePatch(&kp_ringdebtminussmall, "K_RNGSM");
|
||||
|
||||
// Speedometer
|
||||
HU_UpdatePatch(&kp_speedometersticker, "K_SPDMBG");
|
||||
|
|
@ -2123,13 +2085,10 @@ void K_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, IN
|
|||
}
|
||||
}
|
||||
|
||||
#define RINGANIM_FLIPFRAME (RINGANIM_NUMFRAMES/2)
|
||||
|
||||
static void K_drawKartLapsAndRings(void)
|
||||
{
|
||||
const boolean uselives = G_GametypeUsesLives();
|
||||
SINT8 ringanim_realframe = stplyr->karthud[khud_ringframe];
|
||||
INT32 splitflags = V_SNAPTOBOTTOM|V_SNAPTOLEFT|V_SPLITSCREEN;
|
||||
INT32 splitflags = V_SNAPTOBOTTOM|V_SNAPTOLEFT|V_HUDTRANS|V_SPLITSCREEN;
|
||||
UINT8 rn[2];
|
||||
INT32 ringflip = 0;
|
||||
UINT8 *ringmap = NULL;
|
||||
|
|
@ -2141,7 +2100,7 @@ static void K_drawKartLapsAndRings(void)
|
|||
|
||||
if (!ringsdisabled)
|
||||
{
|
||||
|
||||
|
||||
if (stplyr->rings <= 0 && (leveltime/5 & 1)) // In debt
|
||||
{
|
||||
ringmap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_CRIMSON, GTC_CACHE);
|
||||
|
|
@ -2149,13 +2108,6 @@ static void K_drawKartLapsAndRings(void)
|
|||
}
|
||||
else if (stplyr->rings >= 20) // Maxed out
|
||||
ringmap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_YELLOW, GTC_CACHE);
|
||||
|
||||
if (stplyr->karthud[khud_ringframe] > RINGANIM_FLIPFRAME)
|
||||
{
|
||||
ringflip = V_FLIP;
|
||||
ringanim_realframe = RINGANIM_NUMFRAMES-stplyr->karthud[khud_ringframe];
|
||||
ringx += SHORT((r_splitscreen > 1) ? kp_smallring[ringanim_realframe]->width : kp_ring[ringanim_realframe]->width);
|
||||
}
|
||||
}
|
||||
|
||||
if (r_splitscreen > 1)
|
||||
|
|
@ -2189,9 +2141,6 @@ static void K_drawKartLapsAndRings(void)
|
|||
fr = fx;
|
||||
|
||||
// Laps
|
||||
if (!ringsdisabled)
|
||||
V_DrawScaledPatch(fx-2 + (flipflag ? (SHORT(kp_ringstickersplit[1]->width) - 3) : 0), fy, V_HUDTRANS|splitflags|flipflag, kp_ringstickersplit[0]);
|
||||
|
||||
V_DrawScaledPatch(fx, fy, V_HUDTRANS|splitflags, kp_splitlapflag);
|
||||
V_DrawScaledPatch(fx+22, fy, V_HUDTRANS|splitflags, frameslash);
|
||||
|
||||
|
|
@ -2218,28 +2167,14 @@ static void K_drawKartLapsAndRings(void)
|
|||
|
||||
if (!ringsdisabled)
|
||||
{
|
||||
// Rings
|
||||
if (!uselives)
|
||||
{
|
||||
V_DrawScaledPatch(fx-2 + (flipflag ? (SHORT(kp_ringstickersplit[1]->width) - 3) : 0), fy-10, V_HUDTRANS|splitflags|flipflag, kp_ringstickersplit[1]);
|
||||
if (flipflag)
|
||||
fr += 15;
|
||||
}
|
||||
else
|
||||
V_DrawScaledPatch(fx-2 + (flipflag ? (SHORT(kp_ringstickersplit[0]->width) - 3) : 0), fy-10, V_HUDTRANS|splitflags|flipflag, kp_ringstickersplit[0]);
|
||||
|
||||
|
||||
V_DrawMappedPatch(fr+ringx, fy-13, V_HUDTRANS|splitflags|ringflip, kp_smallring[ringanim_realframe], (colorring ? ringmap : NULL));
|
||||
V_DrawMappedPatch(fr, fy-10, V_HUDTRANS|splitflags|ringflip, kp_ringsplitscreen, (colorring ? ringmap : NULL));
|
||||
|
||||
if (stplyr->rings < 0) // Draw the minus for ring debt
|
||||
V_DrawMappedPatch(fr+7, fy-10, V_HUDTRANS|splitflags, kp_ringdebtminussmall, ringmap);
|
||||
V_DrawMappedPatch(fr+7, fy-8, V_HUDTRANS|splitflags, kp_ringdebtminussmall, ringmap);
|
||||
|
||||
V_DrawMappedPatch(fr+11, fy-10, V_HUDTRANS|splitflags, fontv[PINGNUM_FONT].font[rn[0]], ringmap);
|
||||
V_DrawMappedPatch(fr+15, fy-10, V_HUDTRANS|splitflags, fontv[PINGNUM_FONT].font[rn[1]], ringmap);
|
||||
|
||||
// SPB ring lock
|
||||
if (stplyr->pflags & PF_RINGLOCK)
|
||||
V_DrawScaledPatch(fr-12, fy-23, V_HUDTRANS|splitflags, kp_ringspblocksmall[stplyr->karthud[khud_ringspblock]]);
|
||||
}
|
||||
|
||||
// Lives
|
||||
|
|
@ -2263,44 +2198,56 @@ static void K_drawKartLapsAndRings(void)
|
|||
|
||||
if (!ringsdisabled)
|
||||
{
|
||||
// Rings
|
||||
if (!uselives)
|
||||
V_DrawScaledPatch(LAPS_X, LAPS_Y-11, V_HUDTRANS|splitflags, kp_ringsticker[1]);
|
||||
else
|
||||
V_DrawScaledPatch(LAPS_X, LAPS_Y-11, V_HUDTRANS|splitflags, kp_ringsticker[0]);
|
||||
|
||||
V_DrawMappedPatch(LAPS_X+ringx+7, LAPS_Y-16, V_HUDTRANS|splitflags|ringflip, kp_ring[ringanim_realframe], (colorring ? ringmap : NULL));
|
||||
SINT8 i;
|
||||
V_DrawScaledPatch(LAPS_X, LAPS_Y-14, V_HUDTRANS|splitflags, kp_ringsticker[(stplyr->pflags & PF_RINGLOCK) ? 1 : 0]);
|
||||
|
||||
if (stplyr->rings < 0) // Draw the minus for ring debt
|
||||
{
|
||||
V_DrawMappedPatch(LAPS_X+23, LAPS_Y-11, V_HUDTRANS|splitflags, kp_ringdebtminus, ringmap);
|
||||
V_DrawMappedPatch(LAPS_X+29, LAPS_Y-11, V_HUDTRANS|splitflags, kp_facenum[rn[0]], ringmap);
|
||||
V_DrawMappedPatch(LAPS_X+35, LAPS_Y-11, V_HUDTRANS|splitflags, kp_facenum[rn[1]], ringmap);
|
||||
}
|
||||
else
|
||||
{
|
||||
V_DrawMappedPatch(LAPS_X+23, LAPS_Y-11, V_HUDTRANS|splitflags, kp_facenum[rn[0]], ringmap);
|
||||
V_DrawMappedPatch(LAPS_X+29, LAPS_Y-11, V_HUDTRANS|splitflags, kp_facenum[rn[1]], ringmap);
|
||||
V_DrawMappedPatch(LAPS_X-5, LAPS_Y-11, V_HUDTRANS|splitflags, kp_ringdebtminus, ringmap);
|
||||
}
|
||||
|
||||
// SPB ring lock
|
||||
if (stplyr->pflags & PF_RINGLOCK)
|
||||
V_DrawScaledPatch(LAPS_X-5, LAPS_Y-28, V_HUDTRANS|splitflags, kp_ringspblock[stplyr->karthud[khud_ringspblock]]);
|
||||
V_DrawMappedPatch(LAPS_X+2, LAPS_Y-11, V_HUDTRANS|splitflags, kp_facenum[rn[0]], ringmap);
|
||||
V_DrawMappedPatch(LAPS_X+8, LAPS_Y-11, V_HUDTRANS|splitflags, kp_facenum[rn[1]], ringmap);
|
||||
|
||||
// Draw the fillbars
|
||||
if (stplyr->rings)
|
||||
{
|
||||
SINT8 ringcount = stplyr->rings;
|
||||
SINT8 barcolors[4] = {66,83,65};
|
||||
boolean indebt = false;
|
||||
|
||||
if (stplyr->rings < 0)
|
||||
{
|
||||
barcolors[0] = 35;
|
||||
barcolors[1] = 33;
|
||||
barcolors[2] = 37;
|
||||
ringcount = -ringcount;
|
||||
indebt = true;
|
||||
}
|
||||
if (!indebt || (indebt && (leveltime/5 & 1)))
|
||||
{
|
||||
for (i = 0; i != ringcount; i++)
|
||||
{
|
||||
|
||||
V_DrawFill(LAPS_X+17+(2*i), LAPS_Y-10, 1, 3, barcolors[0]|splitflags);
|
||||
V_DrawFill(LAPS_X+17+(2*i), LAPS_Y-9, 1, 2, barcolors[1]|splitflags);
|
||||
V_DrawFill(LAPS_X+17+(2*i), LAPS_Y-6, 1, 1, barcolors[2]|splitflags);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Lives
|
||||
if (uselives)
|
||||
{
|
||||
UINT8 *colormap = R_GetTranslationColormap(stplyr->skin, stplyr->skincolor, GTC_CACHE);
|
||||
V_DrawMappedPatch(LAPS_X+46, LAPS_Y-16, V_HUDTRANS|splitflags, faceprefix[stplyr->skin][FACE_RANK], colormap);
|
||||
V_DrawMappedPatch(LAPS_X+59, LAPS_Y-16, V_HUDTRANS|splitflags, faceprefix[stplyr->skin][FACE_RANK], colormap);
|
||||
if (stplyr->lives >= 0)
|
||||
V_DrawScaledPatch(LAPS_X+63, LAPS_Y-11, V_HUDTRANS|splitflags, kp_facenum[(stplyr->lives % 10)]); // make sure this doesn't overflow OR underflow
|
||||
V_DrawScaledPatch(LAPS_X+77, LAPS_Y-11, V_HUDTRANS|splitflags, kp_facenum[(stplyr->lives % 10)]); // make sure this doesn't overflow OR underflow
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#undef RINGANIM_FLIPFRAME
|
||||
|
||||
static void K_drawKartAccessibilityIcons(INT32 fx)
|
||||
{
|
||||
INT32 fy = LAPS_Y-25;
|
||||
|
|
@ -2557,7 +2504,7 @@ static void K_drawKartBumpersOrKarma(void)
|
|||
}
|
||||
}
|
||||
|
||||
V_DrawScaledPatch(fx-2 + (flipflag ? (SHORT(kp_ringstickersplit[1]->width) - 3) : 0), fy, V_HUDTRANS|splitflags|flipflag, kp_ringstickersplit[0]);
|
||||
//V_DrawScaledPatch(fx-2 + (flipflag ? (SHORT(kp_ringstickersplit[1]->width) - 3) : 0), fy, V_HUDTRANS|splitflags|flipflag, kp_ringstickersplit[0]);
|
||||
V_DrawScaledPatch(fx+22, fy, V_HUDTRANS|splitflags, frameslash);
|
||||
|
||||
if (itembreaker)
|
||||
|
|
|
|||
49
src/k_kart.c
49
src/k_kart.c
|
|
@ -6593,57 +6593,13 @@ void K_KartPlayerHUDUpdate(player_t *player)
|
|||
|
||||
if (gametype == GT_RACE)
|
||||
{
|
||||
// 0 is the fast spin animation, set at 30 tics of ring boost or higher!
|
||||
if (player->ringboost >= 30)
|
||||
player->karthud[khud_ringdelay] = 0;
|
||||
else
|
||||
player->karthud[khud_ringdelay] = ((RINGANIM_DELAYMAX+1) * (30 - player->ringboost)) / 30;
|
||||
|
||||
if (player->karthud[khud_ringframe] == 0 && player->karthud[khud_ringdelay] > RINGANIM_DELAYMAX)
|
||||
{
|
||||
player->karthud[khud_ringframe] = 0;
|
||||
player->karthud[khud_ringtics] = 0;
|
||||
}
|
||||
else if ((player->karthud[khud_ringtics]--) <= 0)
|
||||
{
|
||||
if (player->karthud[khud_ringdelay] == 0) // fast spin animation
|
||||
{
|
||||
player->karthud[khud_ringframe] = ((player->karthud[khud_ringframe]+2) % RINGANIM_NUMFRAMES);
|
||||
player->karthud[khud_ringtics] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
player->karthud[khud_ringframe] = ((player->karthud[khud_ringframe]+1) % RINGANIM_NUMFRAMES);
|
||||
player->karthud[khud_ringtics] = min(RINGANIM_DELAYMAX, player->karthud[khud_ringdelay])-1;
|
||||
}
|
||||
}
|
||||
|
||||
if (!ringsdisabled)
|
||||
{
|
||||
if (player->pflags & PF_RINGLOCK)
|
||||
{
|
||||
UINT8 normalanim = (leveltime % 14);
|
||||
UINT8 debtanim = 14 + (leveltime % 2);
|
||||
|
||||
if (player->karthud[khud_ringspblock] >= 14) // debt animation
|
||||
{
|
||||
if ((player->rings > 0) // Get out of 0 ring animation
|
||||
&& (normalanim == 3 || normalanim == 10)) // on these transition frames.
|
||||
player->karthud[khud_ringspblock] = normalanim;
|
||||
else
|
||||
player->karthud[khud_ringspblock] = debtanim;
|
||||
}
|
||||
else // normal animation
|
||||
{
|
||||
if ((player->rings <= 0) // Go into 0 ring animation
|
||||
&& (player->karthud[khud_ringspblock] == 1 || player->karthud[khud_ringspblock] == 8)) // on these transition frames.
|
||||
player->karthud[khud_ringspblock] = debtanim;
|
||||
else
|
||||
player->karthud[khud_ringspblock] = normalanim;
|
||||
}
|
||||
player->karthud[khud_ringlock] = true;
|
||||
}
|
||||
else
|
||||
player->karthud[khud_ringspblock] = (leveltime % 14); // reset to normal anim next time
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -9808,9 +9764,6 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
player->flamemeter = 0;
|
||||
}
|
||||
|
||||
if (spbplace == -1 || player->position != spbplace)
|
||||
player->pflags &= ~PF_RINGLOCK; // reset ring lock
|
||||
|
||||
if (player->growshrinktimer <= 0)
|
||||
player->growcancel = -1;
|
||||
|
||||
|
|
|
|||
|
|
@ -13199,6 +13199,18 @@ void A_SPBChase(mobj_t *actor)
|
|||
spbplace = actor->tracer->player->position;
|
||||
}
|
||||
|
||||
if (!ringsdisabled) // Spawn rings to make up for the fact first has ring grabbing
|
||||
{
|
||||
if (leveltime % 10 == 0)
|
||||
{
|
||||
mobj_t *specialring = P_SpawnMobj(actor->x, actor->y, actor->z, MT_RING);
|
||||
specialring->colorized = true;
|
||||
specialring->color = SKINCOLOR_RED;
|
||||
specialring->flags |= MF_NOCLIPHEIGHT;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
dist = P_AproxDistance(P_AproxDistance(actor->x-actor->tracer->x, actor->y-actor->tracer->y), actor->z-actor->tracer->z);
|
||||
|
||||
wspeed = FixedMul(defspeed, FRACUNIT + FixedDiv(dist-range, range));
|
||||
|
|
|
|||
|
|
@ -3973,13 +3973,13 @@ boolean P_ProcessSpecial(activator_t *activator, INT16 special, INT32 *args, cha
|
|||
&& (delay <= 0 || !(leveltime % delay)) // Timing
|
||||
)
|
||||
{
|
||||
// Don't award rings while SPB is targetting you
|
||||
// Don't award rings your rings are locked
|
||||
if (mo->player->pflags & PF_RINGLOCK)
|
||||
return false;
|
||||
|
||||
if (delay <= 0 || !(leveltime % delay))
|
||||
{
|
||||
// Don't award rings while SPB is targetting you
|
||||
// Don't award rings while your rings are locked
|
||||
if (mo->player->pflags & PF_RINGLOCK)
|
||||
return false;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue