Add delay to Jawz target switching, set Jawz target when fired

This commit is contained in:
Sally Cochenour 2019-01-30 15:39:29 -05:00
parent a3cd131017
commit 3cb468aec8
4 changed files with 31 additions and 7 deletions

View File

@ -348,10 +348,11 @@ typedef enum
k_wanted, // Timer for determining WANTED status, lowers when hitting people, prevents the game turning into Camp Lazlo k_wanted, // Timer for determining WANTED status, lowers when hitting people, prevents the game turning into Camp Lazlo
k_yougotem, // "You Got Em" gfx when hitting someone as a karma player via a method that gets you back in the game instantly k_yougotem, // "You Got Em" gfx when hitting someone as a karma player via a method that gets you back in the game instantly
// v1.0.2 vars // v1.0.2+ vars
k_itemblink, // Item flashing after roulette, prevents Hyudoro stealing AND serves as a mashing indicator k_itemblink, // Item flashing after roulette, prevents Hyudoro stealing AND serves as a mashing indicator
k_itemblinkmode, // Type of flashing: 0 = white (normal), 1 = red (mashing), 2 = rainbow (enhanced items) k_itemblinkmode, // Type of flashing: 0 = white (normal), 1 = red (mashing), 2 = rainbow (enhanced items)
k_getsparks, // Disable drift sparks at low speed, JUST enough to give acceleration the actual headstart above speed k_getsparks, // Disable drift sparks at low speed, JUST enough to give acceleration the actual headstart above speed
k_jawztargetdelay, // Delay for Jawz target switching, to make it less twitchy
NUMKARTSTUFF NUMKARTSTUFF
} kartstufftype_t; } kartstufftype_t;

View File

@ -8333,7 +8333,8 @@ static const char *const KARTSTUFF_LIST[] = {
"ITEMBLINK", "ITEMBLINK",
"ITEMBLINKMODE", "ITEMBLINKMODE",
"GETSPARKS" "GETSPARKS",
"JAWZTARGETDELAY"
}; };
static const char *const HUDITEMS_LIST[] = { static const char *const HUDITEMS_LIST[] = {

View File

@ -2517,7 +2517,17 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t an, I
break; break;
case MT_JAWZ: case MT_JAWZ:
if (source && source->player) if (source && source->player)
{
INT32 lasttarg = source->player->kartstuff[k_lastjawztarget];
th->cvmem = source->player->skincolor; th->cvmem = source->player->skincolor;
if ((lasttarg >= 0 && lasttarg < MAXPLAYERS)
&& playeringame[lasttarg]
&& !players[lasttarg].spectator
&& players[lasttarg].mo)
{
P_SetTarget(&th->tracer, players[lasttarg].mo);
}
}
else else
th->cvmem = SKINCOLOR_KETCHUP; th->cvmem = SKINCOLOR_KETCHUP;
/* FALLTHRU */ /* FALLTHRU */
@ -4454,12 +4464,22 @@ void K_KartPlayerAfterThink(player_t *player)
// Jawz reticule (seeking) // Jawz reticule (seeking)
if (player->kartstuff[k_itemtype] == KITEM_JAWZ && player->kartstuff[k_itemheld]) if (player->kartstuff[k_itemtype] == KITEM_JAWZ && player->kartstuff[k_itemheld])
{ {
player_t *targ = K_FindJawzTarget(player->mo, player); INT32 lasttarg = player->kartstuff[k_lastjawztarget];
player_t *targ;
mobj_t *ret; mobj_t *ret;
if (!targ) if (player->kartstuff[k_jawztargetdelay] && playeringame[lasttarg] && !players[lasttarg].spectator)
{
targ = &players[lasttarg];
player->kartstuff[k_jawztargetdelay]--;
}
else
targ = K_FindJawzTarget(player->mo, player);
if (!targ || !targ->mo || P_MobjWasRemoved(targ->mo))
{ {
player->kartstuff[k_lastjawztarget] = -1; player->kartstuff[k_lastjawztarget] = -1;
player->kartstuff[k_jawztargetdelay] = 0;
return; return;
} }
@ -4469,7 +4489,7 @@ void K_KartPlayerAfterThink(player_t *player)
ret->tics = 1; ret->tics = 1;
ret->color = player->skincolor; ret->color = player->skincolor;
if (targ-players != player->kartstuff[k_lastjawztarget]) if (targ-players != lasttarg)
{ {
if (P_IsLocalPlayer(player) || P_IsLocalPlayer(targ)) if (P_IsLocalPlayer(player) || P_IsLocalPlayer(targ))
S_StartSound(NULL, sfx_s3k89); S_StartSound(NULL, sfx_s3k89);
@ -4477,11 +4497,13 @@ void K_KartPlayerAfterThink(player_t *player)
S_StartSound(targ->mo, sfx_s3k89); S_StartSound(targ->mo, sfx_s3k89);
player->kartstuff[k_lastjawztarget] = targ-players; player->kartstuff[k_lastjawztarget] = targ-players;
player->kartstuff[k_jawztargetdelay] = 5;
} }
} }
else else
{ {
player->kartstuff[k_lastjawztarget] = -1; player->kartstuff[k_lastjawztarget] = -1;
player->kartstuff[k_jawztargetdelay] = 0;
} }
} }

View File

@ -8264,8 +8264,8 @@ void A_JawzChase(mobj_t *actor)
if (actor->tracer) if (actor->tracer)
{ {
if (G_RaceGametype()) // Stop looking after first target in race /*if (G_RaceGametype()) // Stop looking after first target in race
actor->extravalue1 = 1; actor->extravalue1 = 1;*/
if (actor->tracer->health) if (actor->tracer->health)
{ {