WIP karma item stuff

This commit is contained in:
TehRealSalt 2018-03-26 20:36:16 -04:00
parent 61f929168e
commit e16bf1cf75
9 changed files with 70 additions and 50 deletions

View File

@ -6598,6 +6598,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_PLAYERARROW_ROULETTE",
"S_PLAYERBOMB", // Player bomb overlay
"S_PLAYERITEM", // Player item overlay
"S_PLAYERBOMB_WHEEL",
#ifdef SEENAMES

View File

@ -2907,7 +2907,8 @@ state_t states[NUMSTATES] =
{SPR_ARRO, FF_FULLBRIGHT|FF_ANIMATE|1, -1, {NULL}, 5, 3, S_NULL}, // S_PLAYERARROW_ROULETTE
{SPR_PBOM, FF_ANIMATE, -1, {NULL}, 3, 3, S_NULL}, // S_PLAYERBOMB
{SPR_PBOM, 4, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERBOMB_WHEEL
{SPR_RNDM, FF_ANIMATE, -1, {NULL}, 23, 3, S_NULL}, // S_PLAYERITEM
{SPR_PBOM, 4, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERWHEEL
#ifdef SEENAMES
{SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK

View File

@ -3430,7 +3430,8 @@ typedef enum state
S_PLAYERARROW_ROULETTE,
S_PLAYERBOMB,
S_PLAYERBOMB_WHEEL,
S_PLAYERITEM,
S_PLAYERWHEEL,
#ifdef SEENAMES
S_NAMECHECK,

View File

@ -3266,6 +3266,9 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
if (player->kartstuff[k_comebacktimer] > 0)
{
if (player->mo->tracer->state != &states[S_PLAYERBOMB])
P_SetMobjState(player->mo->tracer, S_PLAYERBOMB);
if (player->kartstuff[k_comebacktimer] < TICRATE && (leveltime & 1))
player->mo->tracer->flags2 &= ~MF2_DONTDRAW;
else
@ -3273,15 +3276,23 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
player->powers[pw_flashing] = player->kartstuff[k_comebacktimer];
}
else if (player->kartstuff[k_comebackmode] != 0)
player->mo->tracer->flags2 |= MF2_DONTDRAW;
else
{
if (player->kartstuff[k_comebackmode] == 0
&& player->mo->tracer->state != &states[S_PLAYERBOMB])
P_SetMobjState(player->mo->tracer, S_PLAYERBOMB);
else if (player->kartstuff[k_comebackmode] == 1
&& player->mo->tracer->state != &states[S_PLAYERITEM])
P_SetMobjState(player->mo->tracer, S_PLAYERITEM);
player->mo->tracer->flags2 &= ~MF2_DONTDRAW;
}
}
else if (G_RaceGametype() || player->kartstuff[k_balloon] > 0)
{
player->mo->flags2 &= ~MF2_SHADOW;
if (player->mo->tracer && player->mo->tracer->state == &states[S_PLAYERBOMB])
if (player->mo->tracer
&& (player->mo->tracer->state == &states[S_PLAYERBOMB]
|| player->mo->tracer->state == &states[S_PLAYERITEM]))
P_RemoveMobj(player->mo->tracer);
}
}

View File

@ -3632,8 +3632,6 @@ void A_AttractChase(mobj_t *actor)
|| !P_CheckSight(actor, actor->tracer)) // You have to be able to SEE it...sorta
{
// Lost attracted rings don't through walls anymore.
if (actor->tracer && actor->tracer->player)
actor->tracer->player->kartstuff[k_comebackmode] = 0;
actor->flags &= ~MF_NOCLIP;
P_SetTarget(&actor->tracer, NULL);
return;
@ -8145,7 +8143,8 @@ void A_ItemPop(mobj_t *actor)
if (actor->info->deathsound)
S_StartSound(remains, actor->info->deathsound);
actor->target->player->kartstuff[k_itemroulette] = 1;
if (!(G_BattleGametype() && actor->target->player->kartstuff[k_balloon] <= 0))
actor->target->player->kartstuff[k_itemroulette] = 1;
remains->flags2 &= ~MF2_AMBUSH;

View File

@ -158,8 +158,8 @@ boolean P_CanPickupItem(player_t *player, boolean weapon)
//if (player->powers[pw_flashing] > (flashingtics/4)*3 && player->powers[pw_flashing] <= flashingtics)
// return false;
if (G_BattleGametype() && player->kartstuff[k_balloon] <= 0) // No balloons in Match
return false;
/*if (G_BattleGametype() && player->kartstuff[k_balloon] <= 0) // No balloons in Match
return false;*/
if (player->kartstuff[k_bootaketimer] || player->kartstuff[k_boostolentimer]
|| player->kartstuff[k_growshrinktimer] > 1 || player->kartstuff[k_goldshroomtimer]) // Item-specific timer going off
@ -414,34 +414,15 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
switch (special->type)
{
case MT_RANDOMITEM: // SRB2kart
if (!P_CanPickupItem(player, false))
return;
if (G_BattleGametype() && player->kartstuff[k_balloon] <= 0)
{
if (player->kartstuff[k_comebackmode] == 0 && !player->kartstuff[k_comebacktimer])
{
if (special->tracer)
return;
P_SetTarget(&special->tracer, toucher);
if (player->kartstuff[k_comebackmode] == 1 || player->kartstuff[k_comebacktimer])
return;
if (player->kartstuff[k_comebackmode] == 0)
player->kartstuff[k_comebackmode] = 1;
}
return;
}
if (!P_CanPickupItem(player, false) && special->tracer != toucher)
return;
if (G_BattleGametype() && special->tracer && special->tracer->player)
{
special->tracer->player->kartstuff[k_comebackmode] = 0;
special->tracer->player->kartstuff[k_comebackpoints]++;
if (netgame && cv_hazardlog.value)
CONS_Printf(M_GetText("%s gave an item to %s.\n"), player_names[special->tracer->player-players], player_names[player-players]);
if (special->tracer->player->kartstuff[k_comebackpoints] >= 3)
K_StealBalloon(special->tracer->player, player, true);
special->tracer->player->kartstuff[k_comebacktimer] = comebacktime;
}
special->momx = special->momy = special->momz = 0;
@ -2128,7 +2109,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source)
{
P_SetTarget(&target->target, source);
source->player->numboxes++;
if ((cv_itemrespawn.value && gametype != GT_COOP && (modifiedgame || netgame || multiplayer)))
if (cv_itemrespawn.value && (netgame || multiplayer))
{
target->fuse = cv_itemrespawntime.value*TICRATE + 2; // Random box generation
}

View File

@ -1653,33 +1653,60 @@ static boolean PIT_CheckThing(mobj_t *thing)
|| thing->player->kartstuff[k_bootimer] || thing->player->kartstuff[k_spinouttimer]
|| thing->player->kartstuff[k_startimer] || thing->player->kartstuff[k_justbumped]
|| (G_BattleGametype() && (thing->player->kartstuff[k_balloon] <= 0
&& (thing->player->kartstuff[k_comebacktimer] || thing->player->kartstuff[k_comebackmode] == 1)))
&& (thing->player->kartstuff[k_comebacktimer])))
|| tmthing->player->kartstuff[k_growshrinktimer] || tmthing->player->kartstuff[k_squishedtimer]
|| tmthing->player->kartstuff[k_bootimer] || tmthing->player->kartstuff[k_spinouttimer]
|| tmthing->player->kartstuff[k_startimer] || tmthing->player->kartstuff[k_justbumped]
|| (G_BattleGametype() && (tmthing->player->kartstuff[k_balloon] <= 0
&& (tmthing->player->kartstuff[k_comebacktimer] || tmthing->player->kartstuff[k_comebackmode] == 1))))
&& (tmthing->player->kartstuff[k_comebacktimer]))))
{
return true;
}
if (G_BattleGametype())
{
if ((thing->player->kartstuff[k_balloon] <= 0 && thing->player->kartstuff[k_comebackmode] == 0)
|| (tmthing->player->kartstuff[k_balloon] <= 0 && tmthing->player->kartstuff[k_comebackmode] == 0))
if (thing->player->kartstuff[k_balloon] <= 0 || tmthing->player->kartstuff[k_balloon] <= 0)
{
if (tmthing->player->kartstuff[k_balloon] > 0)
if (thing->player->kartstuff[k_comebackmode] == 0
&& tmthing->player->kartstuff[k_balloon] > 0)
{
K_ExplodePlayer(tmthing->player, thing);
thing->player->kartstuff[k_comebacktimer] = comebacktime;
return true;
}
else if (thing->player->kartstuff[k_balloon] > 0)
else if (tmthing->player->kartstuff[k_comebackmode] == 0
&& thing->player->kartstuff[k_balloon] > 0)
{
K_ExplodePlayer(thing->player, tmthing);
tmthing->player->kartstuff[k_comebacktimer] = comebacktime;
return true;
}
else if (thing->player->kartstuff[k_comebackmode] == 1
&& tmthing->player->kartstuff[k_balloon] > 0)
{
thing->player->kartstuff[k_comebackmode] = 0;
thing->player->kartstuff[k_comebackpoints]++;
if (netgame && cv_hazardlog.value)
CONS_Printf(M_GetText("%s gave an item to %s.\n"), player_names[thing->player-players], player_names[tmthing->player-players]);
tmthing->player->kartstuff[k_itemroulette] = 1;
if (thing->player->kartstuff[k_comebackpoints] >= 3)
K_StealBalloon(thing->player, tmthing->player, true);
thing->player->kartstuff[k_comebacktimer] = comebacktime;
return true;
}
else if (tmthing->player->kartstuff[k_comebackmode] == 1
&& thing->player->kartstuff[k_balloon] > 0)
{
tmthing->player->kartstuff[k_comebackmode] = 0;
tmthing->player->kartstuff[k_comebackpoints]++;
if (netgame && cv_hazardlog.value)
CONS_Printf(M_GetText("%s gave an item to %s.\n"), player_names[tmthing->player-players], player_names[thing->player-players]);
thing->player->kartstuff[k_itemroulette] = 1;
if (tmthing->player->kartstuff[k_comebackpoints] >= 3)
K_StealBalloon(tmthing->player, thing->player, true);
tmthing->player->kartstuff[k_comebacktimer] = comebacktime;
return true;
}
}
}

View File

@ -5969,13 +5969,6 @@ void P_Attract(mobj_t *source, mobj_t *dest, boolean nightsgrab) // Home in on y
if (!dest || dest->health <= 0 || !dest->player || !source->tracer)
return;
if (dest->player && dest->player->kartstuff[k_comebackmode] == 1)
{
P_TeleportMove(source, dest->x+dest->momx, dest->y+dest->momy, dest->z+dest->momz);
source->angle = dest->angle;
return;
}
// change angle
source->angle = R_PointToAngle2(source->x, source->y, tx, ty);
@ -8282,6 +8275,12 @@ for (i = ((mobj->flags2 & MF2_STRONGBOX) ? strongboxamt : weakboxamt); i; --i) s
P_RemoveMobj(mobj); // make sure they disappear
return;
case MT_RANDOMITEM:
if (G_BattleGametype() && numgotboxes < (4*nummapboxes/5))
{
mobj->fuse = 2;
break;
}
numgotboxes = 0;
// Respawn from mapthing if you have one!
if (mobj->spawnpoint)
{

View File

@ -991,7 +991,7 @@ static void P_LoadThings(void)
|| mt->type == 1702) // MT_AXISTRANSFERLINE
continue; // These were already spawned
if (mt->type == MT_RANDOMITEM) // MT_RANDOMITEM
if (mt->type == mobjinfo[MT_RANDOMITEM].doomednum)
nummapboxes++;
mt->mobj = NULL;