Fix this garbage

This commit is contained in:
TehRealSalt 2017-11-05 16:34:12 -05:00
commit 9bea44e5c1
10 changed files with 56 additions and 57 deletions

View File

@ -163,7 +163,7 @@ typedef struct
UINT16 powers[NUMPOWERS];
INT32 kartstuff[NUMKARTSTUFF]; // SRB2kart
UINT8 collide[MAXPLAYERS]; // SRB2kart
angle_t frameangle; // SRB2kart
// Score is resynched in the confirm resync packet
INT32 health;

View File

@ -317,7 +317,7 @@ consvar_t cv_lightning = {"lightning", "On", CV_NETVAR|CV_CHEAT, CV_OnOff,
consvar_t cv_karthud = {"karthud", "Default", CV_SAVE|CV_CALL, karthud_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_kartcheck = {"kartcheck", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_kartcc = {"kartcc", "100cc", CV_NETVAR, kartcc_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
static CV_PossibleValue_t kartballoons_cons_t[] = {{1, "MIN"}, {99, "MAX"}, {0, NULL}};
static CV_PossibleValue_t kartballoons_cons_t[] = {{1, "MIN"}, {12, "MAX"}, {0, NULL}};
consvar_t cv_kartballoons = {"kartballoons", "3", CV_NETVAR, kartballoons_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_kartfrantic = {"kartfrantic", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
static CV_PossibleValue_t speedometer_cons_t[] = {{0, "Off"}, {1, "Kilometers"}, {2, "Miles"}, {3, "Fracunits"}, {0, NULL}};

View File

@ -370,7 +370,6 @@ typedef struct player_s
// SRB2kart stuff
INT32 kartstuff[NUMKARTSTUFF];
angle_t frameangle; // for the player add the ability to have the sprite only face other angles
// Bit flags.

View File

@ -205,7 +205,7 @@ INT32 bootime = 7*TICRATE;
INT32 boostealtime = TICRATE/2;
INT32 mushroomtime = TICRATE + (TICRATE/3);
INT32 itemtime = 8*TICRATE;
INT32 comebacktime = 5*TICRATE;
INT32 comebacktime = 15*TICRATE;
INT32 gameovertics = 15*TICRATE;

View File

@ -1092,6 +1092,17 @@ void K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce)
momdifx = mobj1->momx - mobj2->momx;
momdify = mobj1->momy - mobj2->momy;
// if the speed difference is less than this let's assume they're going proportionately faster from each other
if (P_AproxDistance(momdifx, momdify) < 25*FRACUNIT/2)
{
fixed_t momdiflength = P_AproxDistance(momdifx, momdify);
fixed_t normalisedx = FixedDiv(momdifx, momdiflength);
fixed_t normalisedy = FixedDiv(momdify, momdiflength);
momdifx = FixedMul(25*FRACUNIT/2, normalisedx);
momdify = FixedMul(25*FRACUNIT/2, normalisedy);
}
distx = mobj1->x - mobj2->x;
disty = mobj1->y - mobj2->y;
dot = FixedMul(momdifx, distx) + FixedMul(momdify, disty);
@ -1276,8 +1287,13 @@ void K_LakituChecker(player_t *player)
void K_KartMoveAnimation(player_t *player)
{
ticcmd_t *cmd = &player->cmd;
// Battle Mode bomb overrides everything else
if (gametype != GT_RACE && player->kartstuff[k_balloon] <= 0)
{
P_SetPlayerMobjState(player->mo, S_PLAYERBOMB);
}
// Standing frames - S_KART_STND1 S_KART_STND1_L S_KART_STND1_R
if (player->speed == 0)
else if (player->speed == 0)
{
if (cmd->buttons & BT_DRIFTRIGHT && !(player->mo->state >= &states[S_KART_STND1_R] && player->mo->state <= &states[S_KART_STND2_R]))
P_SetPlayerMobjState(player->mo, S_KART_STND1_R);
@ -1633,7 +1649,7 @@ void K_SpinPlayer(player_t *player, mobj_t *source)
|| (gametype != GT_RACE && (player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer])))
return;
if (source && source->player && !source->player->kartstuff[k_sounds])
if (source && source != player->mo && source->player && !source->player->kartstuff[k_sounds])
{
S_StartSound(source, sfx_hitem);
source->player->kartstuff[k_sounds] = 50;
@ -1840,7 +1856,8 @@ void K_StealBalloon(player_t *player, player_t *victim)
return;
}
void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit)
// source is the mobj that originally threw the bomb that exploded etc.
void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit, mobj_t *source)
{
mobj_t *mobj;
mobj_t *ghost = NULL;
@ -1920,6 +1937,7 @@ void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32
mobj->flags |= MF_NOCLIPTHING;
mobj->flags &= ~MF_SPECIAL;
P_SetTarget(&mobj->target, source);
}
}
@ -1999,7 +2017,7 @@ void K_SpawnDriftTrail(player_t *player)
for (i = 0; i < 2; i++)
{
if (player->kartstuff[k_bootimer] != 0 || (gametype != GT_RACE && player->kartstuff[k_balloon] <= 0))
if (player->kartstuff[k_bootimer] != 0 || (gametype != GT_RACE && player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]))
continue;
newx = player->mo->x + P_ReturnThrustX(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(24*FRACUNIT, player->mo->scale));
@ -3249,31 +3267,26 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
}
else if (player->kartstuff[k_bootimer] == 0)
{
player->mo->flags2 &= ~MF2_DONTDRAW;
if (gametype != GT_RACE && player->kartstuff[k_balloon] <= 0) // dead in match? you da bomb
{
K_StripItems(player);
if (player->kartstuff[k_comebacktimer] > 0)
{
if (leveltime & 1)
player->mo->flags2 |= MF2_DONTDRAW;
else
player->mo->flags2 &= ~MF2_DONTDRAW;
player->powers[pw_flashing] = player->kartstuff[k_comebacktimer];
}
else
player->mo->flags2 &= ~MF2_DONTDRAW;
}
else if (player->kartstuff[k_balloon] > 0)
player->mo->flags2 &= ~MF2_DONTDRAW;
}
}
if (gametype != GT_RACE && player->kartstuff[k_balloon] <= 0) // dead in match? you da bomb
{
K_StripItems(player);
player->mo->flags2 |= MF2_DONTDRAW;
if (player->kartstuff[k_comebacktimer])
player->powers[pw_flashing] = 2;
if (!(player->mo->tracer))
player->mo->tracer = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_OVERLAY);
P_SetMobjState(player->mo->tracer, S_PLAYERBOMB);
P_SetTarget(&player->mo->tracer, player->mo);
player->mo->tracer->color = player->mo->color;
}
else if (player->mo->tracer && player->mo->tracer->state == &states[S_PLAYERBOMB])
{
player->mo->flags2 &= ~MF2_DONTDRAW;
P_RemoveMobj(player->mo->tracer);
}
if (player->kartstuff[k_growshrinktimer] > 1)
player->powers[pw_flashing] = 2;

View File

@ -16,14 +16,14 @@ UINT8 K_GetKartColorByName(const char *name);
void K_RegisterKartStuff(void);
UINT8 K_GetKartCC(void);
void K_KartMoveAnimation(player_t *player);
void K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce);
void K_KartMoveAnimation(player_t *player);
void K_KartPlayerThink(player_t *player, ticcmd_t *cmd);
void K_SpinPlayer(player_t *player, mobj_t *source);
void K_SquishPlayer(player_t *player, mobj_t *source);
void K_ExplodePlayer(player_t *player, mobj_t *source);
void K_StealBalloon(player_t *player, player_t *victim);
void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit);
void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit, mobj_t *source);
void K_SpawnDriftTrail(player_t *player);
void K_DoMushroom(player_t *player, boolean doPFlag, boolean startboost);
INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue);

View File

@ -8252,7 +8252,7 @@ void A_BobombExplode(mobj_t *actor)
type = (mobjtype_t)locvar1;
for (d = 0; d < 16; d++)
K_SpawnKartExplosion(actor->x, actor->y, actor->z, actor->info->painchance + 32*FRACUNIT, 32, type, d*(ANGLE_45/4), false, false); // 32 <-> 64
K_SpawnKartExplosion(actor->x, actor->y, actor->z, actor->info->painchance + 32*FRACUNIT, 32, type, d*(ANGLE_45/4), false, false, actor->target); // 32 <-> 64
P_SpawnMobj(actor->x, actor->y, actor->z, MT_BOMBEXPLOSIONSOUND);

View File

@ -3130,7 +3130,8 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
{
// Just need to do this now! Being thrown upwards is done by the explosion.
P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BLUELIGHTNING);
P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BLUEEXPLOSION);
mobj_t *blueexplode = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BLUEEXPLOSION);
P_SetTarget(&blueexplode->target, source);
return true;
}
else if (damage == 65 && player->kartstuff[k_position] > 1)

View File

@ -6544,7 +6544,6 @@ void P_MobjThinker(mobj_t *mobj)
if (mobj->health > 0 && mobj->target && mobj->target->player && mobj->target->player->mo
&& mobj->target->player->health > 0 && !mobj->target->player->spectator)
{
fixed_t HEIGHT;
fixed_t radius; // mobj's distance from its Target, or Radius.
if (mobj->type == MT_BANANASHIELD || mobj->type == MT_TRIPLEBANANASHIELD1 || mobj->type == MT_TRIPLEBANANASHIELD2 || mobj->type == MT_TRIPLEBANANASHIELD3)
@ -6563,18 +6562,6 @@ void P_MobjThinker(mobj_t *mobj)
else
mobj->angle = (mobj->target->angle + ANGLE_180);
// If the player is on the ceiling, then flip your items as well.
if (mobj->target->eflags & MFE_VERTICALFLIP)
{
mobj->eflags |= MFE_VERTICALFLIP;
HEIGHT = mobj->target->height / 2;
}
else
{
mobj->eflags &= ~MFE_VERTICALFLIP;
HEIGHT = mobj->target->height / 5;
}
// Shrink your items if the player shrunk too.
mobj->scale = mobj->target->scale;
@ -6701,23 +6688,19 @@ void P_MobjThinker(mobj_t *mobj)
case MT_PLAYERARROW:
if (mobj->target && mobj->target->health
&& mobj->target->player && mobj->target->player->mo
&& mobj->target->player->health && mobj->target->player->playerstate != PST_DEAD
&& !(gametype != GT_RACE && mobj->target->player->kartstuff[k_balloon] <= 0))
&& mobj->target->player->health && mobj->target->player->playerstate != PST_DEAD)
{
fixed_t scale = mobj->target->scale;
mobj->color = mobj->target->color;
if (mobj->target->player == &players[displayplayer])
if ((splitscreen || !netgame)
|| gametype == GT_RACE
|| mobj->target->player == &players[displayplayer]
|| (mobj->target->player->mo->flags2 & MF2_DONTDRAW))
mobj->flags2 |= MF2_DONTDRAW;
else
mobj->flags2 &= ~MF2_DONTDRAW;
if ((splitscreen || !netgame)
|| gametype == GT_RACE
|| mobj->target->player->kartstuff[k_bootimer]
|| (mobj->target->player->kartstuff[k_balloon] <= 0 && mobj->target->player->kartstuff[k_comebacktimer]))
mobj->flags2 |= MF2_DONTDRAW;
P_UnsetThingPosition(mobj);
mobj->x = mobj->target->x;
mobj->y = mobj->target->y;

View File

@ -1010,6 +1010,9 @@ void P_AddPlayerScore(player_t *player, UINT32 amount)
if (player->bot)
player = &players[consoleplayer];
if (gametype != GT_RACE && player->kartstuff[k_balloon] <= 0)
return;
// NiGHTS does it different!
if (gamestate == GS_LEVEL && mapheaderinfo[gamemap-1]->typeoflevel & TOL_NIGHTS)
{
@ -9459,7 +9462,7 @@ void P_PlayerThink(player_t *player)
{
// SRB2kart - fixes boo not flashing when it should. Mega doesn't flash either. Flashing is local.
if ((player == &players[displayplayer] || (splitscreen && player == &players[secondarydisplayplayer]))
&& player->kartstuff[k_bootimer] == 0 && player->kartstuff[k_growshrinktimer] <= 0)
&& player->kartstuff[k_bootimer] == 0 && player->kartstuff[k_comebacktimer] == 0 && player->kartstuff[k_growshrinktimer] <= 0)
{
if (player->powers[pw_flashing] > 0 && player->powers[pw_flashing] < flashingtics && (leveltime & 1))
player->mo->flags2 |= MF2_DONTDRAW;