mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-03-11 03:42:34 +00:00
WIP karma item stuff
This commit is contained in:
parent
61f929168e
commit
e16bf1cf75
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_PLAYERBOMB", // Player bomb overlay
|
||||
"S_PLAYERITEM", // Player item overlay
|
||||
"S_PLAYERBOMB_WHEEL",
|
||||
|
||||
#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_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
|
||||
|
|
|
@ -3430,7 +3430,8 @@ typedef enum state
|
|||
S_PLAYERARROW_ROULETTE,
|
||||
|
||||
S_PLAYERBOMB,
|
||||
S_PLAYERBOMB_WHEEL,
|
||||
S_PLAYERITEM,
|
||||
S_PLAYERWHEEL,
|
||||
|
||||
#ifdef SEENAMES
|
||||
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->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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
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_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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
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)
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue