mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-27 20:41:46 +00:00
WIP karma item stuff
This commit is contained in:
parent
ebc55d62ee
commit
7264c284cf
9 changed files with 70 additions and 50 deletions
|
|
@ -6598,6 +6598,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_PLAYERARROW_ROULETTE",
|
"S_PLAYERARROW_ROULETTE",
|
||||||
|
|
||||||
"S_PLAYERBOMB", // Player bomb overlay
|
"S_PLAYERBOMB", // Player bomb overlay
|
||||||
|
"S_PLAYERITEM", // Player item overlay
|
||||||
"S_PLAYERBOMB_WHEEL",
|
"S_PLAYERBOMB_WHEEL",
|
||||||
|
|
||||||
#ifdef SEENAMES
|
#ifdef SEENAMES
|
||||||
|
|
|
||||||
|
|
@ -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_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, 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
|
#ifdef SEENAMES
|
||||||
{SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK
|
{SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK
|
||||||
|
|
|
||||||
|
|
@ -3430,7 +3430,8 @@ typedef enum state
|
||||||
S_PLAYERARROW_ROULETTE,
|
S_PLAYERARROW_ROULETTE,
|
||||||
|
|
||||||
S_PLAYERBOMB,
|
S_PLAYERBOMB,
|
||||||
S_PLAYERBOMB_WHEEL,
|
S_PLAYERITEM,
|
||||||
|
S_PLAYERWHEEL,
|
||||||
|
|
||||||
#ifdef SEENAMES
|
#ifdef SEENAMES
|
||||||
S_NAMECHECK,
|
S_NAMECHECK,
|
||||||
|
|
|
||||||
17
src/k_kart.c
17
src/k_kart.c
|
|
@ -3266,6 +3266,9 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
|
|
||||||
if (player->kartstuff[k_comebacktimer] > 0)
|
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))
|
if (player->kartstuff[k_comebacktimer] < TICRATE && (leveltime & 1))
|
||||||
player->mo->tracer->flags2 &= ~MF2_DONTDRAW;
|
player->mo->tracer->flags2 &= ~MF2_DONTDRAW;
|
||||||
else
|
else
|
||||||
|
|
@ -3273,15 +3276,23 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
|
|
||||||
player->powers[pw_flashing] = player->kartstuff[k_comebacktimer];
|
player->powers[pw_flashing] = player->kartstuff[k_comebacktimer];
|
||||||
}
|
}
|
||||||
else if (player->kartstuff[k_comebackmode] != 0)
|
|
||||||
player->mo->tracer->flags2 |= MF2_DONTDRAW;
|
|
||||||
else
|
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;
|
player->mo->tracer->flags2 &= ~MF2_DONTDRAW;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if (G_RaceGametype() || player->kartstuff[k_balloon] > 0)
|
else if (G_RaceGametype() || player->kartstuff[k_balloon] > 0)
|
||||||
{
|
{
|
||||||
player->mo->flags2 &= ~MF2_SHADOW;
|
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);
|
P_RemoveMobj(player->mo->tracer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3632,8 +3632,6 @@ void A_AttractChase(mobj_t *actor)
|
||||||
|| !P_CheckSight(actor, actor->tracer)) // You have to be able to SEE it...sorta
|
|| !P_CheckSight(actor, actor->tracer)) // You have to be able to SEE it...sorta
|
||||||
{
|
{
|
||||||
// Lost attracted rings don't through walls anymore.
|
// 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;
|
actor->flags &= ~MF_NOCLIP;
|
||||||
P_SetTarget(&actor->tracer, NULL);
|
P_SetTarget(&actor->tracer, NULL);
|
||||||
return;
|
return;
|
||||||
|
|
@ -8145,6 +8143,7 @@ void A_ItemPop(mobj_t *actor)
|
||||||
if (actor->info->deathsound)
|
if (actor->info->deathsound)
|
||||||
S_StartSound(remains, actor->info->deathsound);
|
S_StartSound(remains, actor->info->deathsound);
|
||||||
|
|
||||||
|
if (!(G_BattleGametype() && actor->target->player->kartstuff[k_balloon] <= 0))
|
||||||
actor->target->player->kartstuff[k_itemroulette] = 1;
|
actor->target->player->kartstuff[k_itemroulette] = 1;
|
||||||
|
|
||||||
remains->flags2 &= ~MF2_AMBUSH;
|
remains->flags2 &= ~MF2_AMBUSH;
|
||||||
|
|
|
||||||
|
|
@ -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)
|
//if (player->powers[pw_flashing] > (flashingtics/4)*3 && player->powers[pw_flashing] <= flashingtics)
|
||||||
// return false;
|
// return false;
|
||||||
|
|
||||||
if (G_BattleGametype() && player->kartstuff[k_balloon] <= 0) // No balloons in Match
|
/*if (G_BattleGametype() && player->kartstuff[k_balloon] <= 0) // No balloons in Match
|
||||||
return false;
|
return false;*/
|
||||||
|
|
||||||
if (player->kartstuff[k_bootaketimer] || player->kartstuff[k_boostolentimer]
|
if (player->kartstuff[k_bootaketimer] || player->kartstuff[k_boostolentimer]
|
||||||
|| player->kartstuff[k_growshrinktimer] > 1 || player->kartstuff[k_goldshroomtimer]) // Item-specific timer going off
|
|| player->kartstuff[k_growshrinktimer] > 1 || player->kartstuff[k_goldshroomtimer]) // Item-specific timer going off
|
||||||
|
|
@ -414,35 +414,16 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
||||||
switch (special->type)
|
switch (special->type)
|
||||||
{
|
{
|
||||||
case MT_RANDOMITEM: // SRB2kart
|
case MT_RANDOMITEM: // SRB2kart
|
||||||
|
if (!P_CanPickupItem(player, false))
|
||||||
|
return;
|
||||||
|
|
||||||
if (G_BattleGametype() && player->kartstuff[k_balloon] <= 0)
|
if (G_BattleGametype() && player->kartstuff[k_balloon] <= 0)
|
||||||
{
|
{
|
||||||
if (player->kartstuff[k_comebackmode] == 0 && !player->kartstuff[k_comebacktimer])
|
if (player->kartstuff[k_comebackmode] == 1 || player->kartstuff[k_comebacktimer])
|
||||||
{
|
|
||||||
if (special->tracer)
|
|
||||||
return;
|
return;
|
||||||
P_SetTarget(&special->tracer, toucher);
|
if (player->kartstuff[k_comebackmode] == 0)
|
||||||
player->kartstuff[k_comebackmode] = 1;
|
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;
|
special->momx = special->momy = special->momz = 0;
|
||||||
P_SetTarget(&special->target, toucher);
|
P_SetTarget(&special->target, toucher);
|
||||||
|
|
@ -2128,7 +2109,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source)
|
||||||
{
|
{
|
||||||
P_SetTarget(&target->target, source);
|
P_SetTarget(&target->target, source);
|
||||||
source->player->numboxes++;
|
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
|
target->fuse = cv_itemrespawntime.value*TICRATE + 2; // Random box generation
|
||||||
}
|
}
|
||||||
|
|
|
||||||
39
src/p_map.c
39
src/p_map.c
|
|
@ -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_bootimer] || thing->player->kartstuff[k_spinouttimer]
|
||||||
|| thing->player->kartstuff[k_startimer] || thing->player->kartstuff[k_justbumped]
|
|| thing->player->kartstuff[k_startimer] || thing->player->kartstuff[k_justbumped]
|
||||||
|| (G_BattleGametype() && (thing->player->kartstuff[k_balloon] <= 0
|
|| (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_growshrinktimer] || tmthing->player->kartstuff[k_squishedtimer]
|
||||||
|| tmthing->player->kartstuff[k_bootimer] || tmthing->player->kartstuff[k_spinouttimer]
|
|| tmthing->player->kartstuff[k_bootimer] || tmthing->player->kartstuff[k_spinouttimer]
|
||||||
|| tmthing->player->kartstuff[k_startimer] || tmthing->player->kartstuff[k_justbumped]
|
|| tmthing->player->kartstuff[k_startimer] || tmthing->player->kartstuff[k_justbumped]
|
||||||
|| (G_BattleGametype() && (tmthing->player->kartstuff[k_balloon] <= 0
|
|| (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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (G_BattleGametype())
|
if (G_BattleGametype())
|
||||||
{
|
{
|
||||||
if ((thing->player->kartstuff[k_balloon] <= 0 && thing->player->kartstuff[k_comebackmode] == 0)
|
if (thing->player->kartstuff[k_balloon] <= 0 || tmthing->player->kartstuff[k_balloon] <= 0)
|
||||||
|| (tmthing->player->kartstuff[k_balloon] <= 0 && tmthing->player->kartstuff[k_comebackmode] == 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);
|
K_ExplodePlayer(tmthing->player, thing);
|
||||||
thing->player->kartstuff[k_comebacktimer] = comebacktime;
|
thing->player->kartstuff[k_comebacktimer] = comebacktime;
|
||||||
return true;
|
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);
|
K_ExplodePlayer(thing->player, tmthing);
|
||||||
tmthing->player->kartstuff[k_comebacktimer] = comebacktime;
|
tmthing->player->kartstuff[k_comebacktimer] = comebacktime;
|
||||||
return true;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
13
src/p_mobj.c
13
src/p_mobj.c
|
|
@ -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)
|
if (!dest || dest->health <= 0 || !dest->player || !source->tracer)
|
||||||
return;
|
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
|
// change angle
|
||||||
source->angle = R_PointToAngle2(source->x, source->y, tx, ty);
|
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
|
P_RemoveMobj(mobj); // make sure they disappear
|
||||||
return;
|
return;
|
||||||
case MT_RANDOMITEM:
|
case MT_RANDOMITEM:
|
||||||
|
if (G_BattleGametype() && numgotboxes < (4*nummapboxes/5))
|
||||||
|
{
|
||||||
|
mobj->fuse = 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
numgotboxes = 0;
|
||||||
// Respawn from mapthing if you have one!
|
// Respawn from mapthing if you have one!
|
||||||
if (mobj->spawnpoint)
|
if (mobj->spawnpoint)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -991,7 +991,7 @@ static void P_LoadThings(void)
|
||||||
|| mt->type == 1702) // MT_AXISTRANSFERLINE
|
|| mt->type == 1702) // MT_AXISTRANSFERLINE
|
||||||
continue; // These were already spawned
|
continue; // These were already spawned
|
||||||
|
|
||||||
if (mt->type == MT_RANDOMITEM) // MT_RANDOMITEM
|
if (mt->type == mobjinfo[MT_RANDOMITEM].doomednum)
|
||||||
nummapboxes++;
|
nummapboxes++;
|
||||||
|
|
||||||
mt->mobj = NULL;
|
mt->mobj = NULL;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue