More adjustments

- Comeback timer gets higher the more you get hit
- Your ghost appears over the bomb
- Speed & accel is set to worst while a bomb
- CHECK range scales with kartcc
This commit is contained in:
TehRealSalt 2017-11-05 23:18:58 -05:00
parent 8756293906
commit 7eb4a958f7
7 changed files with 124 additions and 59 deletions

View File

@ -306,7 +306,8 @@ typedef enum
// 0x4 = 3 Red Shells orbiting, 0x8 = Triple Red Shell in inventory
k_lightning, // 0x1 = Lightning in inventory
k_kitchensink, // 0x1 = Sink in inventory
k_balloon, // Number of balloons left
k_balloon, // Battle mode, number of balloons left
k_comebackhits, // Battle mode, number of times hit in comeback mode
NUMKARTSTUFF
} kartstufftype_t;

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 = 15*TICRATE;
INT32 comebacktime = 10*TICRATE;
INT32 gameovertics = 15*TICRATE;
@ -2194,6 +2194,7 @@ void G_PlayerReborn(INT32 player)
INT32 starpostwp;
INT32 offroad;
INT32 balloon;
INT32 comebackhits;
score = players[player].score;
lives = players[player].lives;
@ -2249,6 +2250,7 @@ void G_PlayerReborn(INT32 player)
starpostwp = players[player].kartstuff[k_starpostwp];
offroad = players[player].kartstuff[k_offroad];
balloon = players[player].kartstuff[k_balloon];
comebackhits = players[player].kartstuff[k_comebackhits];
p = &players[player];
memset(p, 0, sizeof (*p));
@ -2305,7 +2307,8 @@ void G_PlayerReborn(INT32 player)
p->kartstuff[k_starpostwp] = starpostwp; // TODO: get these out of kartstuff, it causes desync
p->kartstuff[k_offroad] = offroad;
p->kartstuff[k_balloon] = balloon;
p->kartstuff[k_comebacktimer] = comebacktime;
p->kartstuff[k_comebackhits] = comebackhits;
p->kartstuff[k_comebacktimer] = comebacktime * (comebackhits+1);
// Don't do anything immediately
p->pflags |= PF_USEDOWN;

View File

@ -2881,7 +2881,7 @@ state_t states[NUMSTATES] =
{SPR_ARRO, FF_FULLBRIGHT|16, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_EMPTY
{SPR_ARRO, FF_FULLBRIGHT|FF_ANIMATE|1, -1, {NULL}, 5, 3, S_NULL}, // S_PLAYERARROW_ROULETTE
{SPR_PBOM, 0, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERBOMB
{SPR_PBOM, 0, -1, {NULL}, 1, 0, S_NULL}, // S_PLAYERBOMB
#ifdef SEENAMES
{SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK

View File

@ -1301,13 +1301,8 @@ 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
else if (player->speed == 0)
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);
@ -1434,6 +1429,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
if (player->kartstuff[k_sounds])
player->kartstuff[k_sounds]--;
if (player->kartstuff[k_comebackhits] > 5)
player->kartstuff[k_comebackhits] = 5;
// ???
/*
if (player->kartstuff[k_jmp] > 1 && onground)
@ -1600,7 +1598,10 @@ fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower)
break;
}
k_speed += player->kartspeed*3; // 153 - 177
if (gametype != GT_RACE && player->kartstuff[k_balloon] <= 0)
k_speed += 3; // 153
else
k_speed += player->kartspeed*3; // 153 - 177
finalspeed = FixedMul(FixedMul(k_speed<<14, g_cc), player->mo->scale);
@ -1613,8 +1614,11 @@ static fixed_t K_GetKartAccel(player_t *player)
{
fixed_t k_accel = 32; // 36;
//k_accel += 3 * (9 - player->kartspeed); // 36 - 60
k_accel += 4 * (9 - player->kartspeed); // 32 - 64
if (gametype == GT_RACE || player->kartstuff[k_balloon] > 0)
{
//k_accel += 3 * (9 - player->kartspeed); // 36 - 60
k_accel += 4 * (9 - player->kartspeed); // 32 - 64
}
return FixedMul(k_accel, K_GetKartBoostPower(player, false));
}
@ -1671,7 +1675,6 @@ void K_SpinPlayer(player_t *player, mobj_t *source)
player->kartstuff[k_mushroomtimer] = 0;
player->kartstuff[k_driftboost] = 0;
player->kartstuff[k_comebacktimer] = comebacktime;
if (gametype != GT_RACE)
{
@ -1681,16 +1684,17 @@ void K_SpinPlayer(player_t *player, mobj_t *source)
CONS_Printf(M_GetText("%s lost all of their balloons!\n"), player_names[player-players]);
player->kartstuff[k_balloon]--;
}
else
player->kartstuff[k_comebackhits]++;
if (source && source->player && player != source->player)
{
P_AddPlayerScore(source->player, 1);
source->player->kartstuff[k_comebacktimer] = comebacktime;
}
K_CheckBalloons();
}
player->kartstuff[k_comebacktimer] = comebacktime * (player->kartstuff[k_comebackhits]+1);
if (player->kartstuff[k_spinouttype] <= 0)
{
if (player->kartstuff[k_spinouttype] == 0)
@ -1731,7 +1735,6 @@ void K_SquishPlayer(player_t *player, mobj_t *source)
player->kartstuff[k_mushroomtimer] = 0;
player->kartstuff[k_driftboost] = 0;
player->kartstuff[k_comebacktimer] = comebacktime;
if (gametype != GT_RACE)
{
@ -1741,16 +1744,17 @@ void K_SquishPlayer(player_t *player, mobj_t *source)
CONS_Printf(M_GetText("%s lost all of their balloons!\n"), player_names[player-players]);
player->kartstuff[k_balloon]--;
}
else
player->kartstuff[k_comebackhits]++;
if (source && source->player && player != source->player)
{
P_AddPlayerScore(source->player, 1);
source->player->kartstuff[k_comebacktimer] = comebacktime;
}
K_CheckBalloons();
}
player->kartstuff[k_comebacktimer] = comebacktime * (player->kartstuff[k_comebackhits]+1);
player->kartstuff[k_squishedtimer] = 1*TICRATE;
player->powers[pw_flashing] = flashingtics;
@ -1780,7 +1784,6 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju
player->kartstuff[k_mushroomtimer] = 0;
player->kartstuff[k_driftboost] = 0;
player->kartstuff[k_comebacktimer] = comebacktime;
if (gametype != GT_RACE)
{
@ -1790,16 +1793,17 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju
CONS_Printf(M_GetText("%s lost all of their balloons!\n"), player_names[player-players]);
player->kartstuff[k_balloon]--;
}
else
player->kartstuff[k_comebackhits]++;
if (source && source->player && player != source->player)
{
P_AddPlayerScore(source->player, 1);
source->player->kartstuff[k_comebacktimer] = comebacktime;
}
K_CheckBalloons();
}
player->kartstuff[k_comebacktimer] = comebacktime * (player->kartstuff[k_comebackhits]+1);
player->kartstuff[k_spinouttype] = 1;
player->kartstuff[k_spinouttimer] = 2*TICRATE+(TICRATE/2);
player->kartstuff[k_spinout] = player->kartstuff[k_spinouttimer];
@ -2509,9 +2513,16 @@ INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue)
static void K_KartDrift(player_t *player, boolean onground)
{
fixed_t dsone;
fixed_t dstwo;
// IF YOU CHANGE THESE: MAKE SURE YOU UPDATE THE SAME VALUES IN p_mobjc, "case MT_DRIFT:"
fixed_t dsone = 26*4 + player->kartspeed*2 + (9 - player->kartweight);
fixed_t dstwo = dsone*2;
if (gametype != GT_RACE && player->kartstuff[k_balloon] <= 0)
dsone = 26*4 + 2;
else
dsone = 26*4 + player->kartspeed*2 + (9 - player->kartweight);
dstwo = dsone*2;
// Drifting is actually straffing + automatic turning.
// Holding the Jump button will enable drifting.
@ -3287,23 +3298,38 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
}
else if (player->kartstuff[k_bootimer] == 0)
{
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->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_SHADOW;
player->powers[pw_flashing] = player->kartstuff[k_comebacktimer];
}
if (!(player->mo->tracer))
player->mo->tracer = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_OVERLAY);
P_SetTarget(&player->mo->tracer->target, player->mo);
P_SetMobjState(player->mo->tracer, S_PLAYERBOMB);
player->mo->tracer->color = player->mo->color;
if (player->kartstuff[k_comebacktimer] > 0)
{
if (leveltime & 1)
player->mo->tracer->flags2 |= MF2_DONTDRAW;
else
player->mo->flags2 &= ~MF2_DONTDRAW;
player->mo->tracer->flags2 &= ~MF2_DONTDRAW;
player->powers[pw_flashing] = player->kartstuff[k_comebacktimer];
}
else if (gametype == GT_RACE || player->kartstuff[k_balloon] > 0)
player->mo->flags2 &= ~MF2_DONTDRAW;
else
player->mo->tracer->flags2 &= ~MF2_DONTDRAW;
}
else if (gametype == GT_RACE || player->kartstuff[k_balloon] > 0)
{
player->mo->flags2 &= ~MF2_SHADOW;
if (player->mo->tracer && player->mo->tracer->state == &states[S_PLAYERBOMB])
P_RemoveMobj(player->mo->tracer);
}
}
@ -3381,6 +3407,11 @@ void K_CheckBalloons(void)
UINT8 numingame = 0;
INT8 winnernum = -1;
// Quick thing for testing comeback in splitscreen
#if 0
return;
#endif
if (!(multiplayer || netgame))
return;
@ -4236,10 +4267,13 @@ static void K_drawKartSpeedometer(void)
fixed_t K_FindCheckX(fixed_t px, fixed_t py, angle_t ang, fixed_t mx, fixed_t my)
{
fixed_t dist, x;
fixed_t range = RING_DIST/4;
angle_t diff;
range *= (K_GetKartCC()/50);
dist = abs(R_PointToDist2(px, py, mx, my));
if (dist > RING_DIST/4)
if (dist > range)
return -320;
diff = R_PointToAngle2(px, py, mx, my) - ang;

View File

@ -1621,34 +1621,41 @@ static boolean PIT_CheckThing(mobj_t *thing)
{
thing->player->kartstuff[k_justbumped] = 6;
tmthing->player->kartstuff[k_justbumped] = 6;
if (tmthing->player->kartstuff[k_balloon] > 0)
{
if (tmthing->player->kartstuff[k_balloon] == 1)
K_StealBalloon(thing->player, tmthing->player);
thing->player->kartstuff[k_comebacktimer] = comebacktime;
K_ExplodePlayer(tmthing->player, thing);
thing->player->kartstuff[k_comebackhits]++;
thing->player->kartstuff[k_comebacktimer] = comebacktime * (thing->player->kartstuff[k_comebackhits]+1);
return true;
}
else if (thing->player->kartstuff[k_balloon] > 0)
{
if (thing->player->kartstuff[k_balloon] == 1)
K_StealBalloon(tmthing->player, thing->player);
tmthing->player->kartstuff[k_comebacktimer] = comebacktime;
K_ExplodePlayer(thing->player, thing);
K_ExplodePlayer(thing->player, tmthing);
tmthing->player->kartstuff[k_comebackhits]++;
tmthing->player->kartstuff[k_comebacktimer] = comebacktime * (tmthing->player->kartstuff[k_comebackhits]+1);
return true;
}
}
else
{
if (thing->player->kartstuff[k_mushroomtimer] && !(tmthing->player->kartstuff[k_mushroomtimer]))
else if (thing->player->kartstuff[k_balloon] <= 0 && tmthing->player->kartstuff[k_balloon] <= 0)
{
K_StealBalloon(thing->player, tmthing->player);
K_SpinPlayer(tmthing->player, thing);
}
else if (tmthing->player->kartstuff[k_mushroomtimer] && !(thing->player->kartstuff[k_mushroomtimer]))
{
K_StealBalloon(tmthing->player, thing->player);
K_KartBouncing(tmthing, thing, false);
K_SpinPlayer(thing->player, tmthing);
K_SpinPlayer(tmthing->player, thing);
thing->player->kartstuff[k_comebackhits]++;
thing->player->kartstuff[k_comebacktimer] = comebacktime * (thing->player->kartstuff[k_comebackhits]+1);
tmthing->player->kartstuff[k_comebackhits]++;
tmthing->player->kartstuff[k_comebacktimer] = comebacktime * (tmthing->player->kartstuff[k_comebackhits]+1);
return true;
}
}
}
@ -1660,6 +1667,17 @@ static boolean PIT_CheckThing(mobj_t *thing)
else
K_KartBouncing(tmthing, thing, false);
if (thing->player->kartstuff[k_mushroomtimer] && !(tmthing->player->kartstuff[k_mushroomtimer]))
{
K_StealBalloon(thing->player, tmthing->player);
K_SpinPlayer(tmthing->player, thing);
}
else if (tmthing->player->kartstuff[k_mushroomtimer] && !(thing->player->kartstuff[k_mushroomtimer]))
{
K_StealBalloon(tmthing->player, thing->player);
K_SpinPlayer(thing->player, tmthing);
}
thing->player->kartstuff[k_justbumped] = 6;
tmthing->player->kartstuff[k_justbumped] = 6;
return true;

View File

@ -6456,8 +6456,16 @@ void P_MobjThinker(mobj_t *mobj)
//{ SRB2kart mobs
case MT_DRIFT:
{
fixed_t dsone = 26*4 + mobj->target->player->kartspeed*2 + (9 - mobj->target->player->kartweight);
fixed_t dstwo = dsone*2;
fixed_t dsone;
fixed_t dstwo;
if (gametype != GT_RACE && mobj->target->player->kartstuff[k_balloon] <= 0)
dsone = 26*4 + 2 + (9 - mobj->target->player->kartweight);
else
dsone = 26*4 + mobj->target->player->kartspeed*2 + (9 - mobj->target->player->kartweight);
dstwo = dsone*2;
if ((mobj->target && mobj->target->player && mobj->target->player->mo && mobj->target->player->health > 0 && !mobj->target->player->spectator)
&& (mobj->type == MT_DRIFT && mobj->target->player->kartstuff[k_driftcharge] >= dsone))
{
@ -6696,6 +6704,7 @@ void P_MobjThinker(mobj_t *mobj)
if ((splitscreen || !netgame)
|| gametype == GT_RACE
|| mobj->target->player == &players[displayplayer]
|| mobj->target->player->kartstuff[k_balloon] <= 0
|| (mobj->target->player->mo->flags2 & MF2_DONTDRAW))
mobj->flags2 |= MF2_DONTDRAW;
else

View File

@ -8694,7 +8694,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
}
// Make player translucent if camera is too close (only in single player).
if (!(multiplayer || netgame) && !splitscreen)
/*if (!(multiplayer || netgame) && !splitscreen)
{
fixed_t vx = 0, vy = 0;
if (player->awayviewtics) {
@ -8713,7 +8713,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
player->mo->flags2 &= ~MF2_SHADOW;
}
else
player->mo->flags2 &= ~MF2_SHADOW;
player->mo->flags2 &= ~MF2_SHADOW;*/
/* if (!resetcalled && (player->pflags & PF_NIGHTSMODE && player->exiting))
{