mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-02-20 19:02:37 +00:00
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:
parent
8756293906
commit
7eb4a958f7
7 changed files with 124 additions and 59 deletions
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
110
src/k_kart.c
110
src/k_kart.c
|
@ -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;
|
||||
|
|
44
src/p_map.c
44
src/p_map.c
|
@ -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;
|
||||
|
|
13
src/p_mobj.c
13
src/p_mobj.c
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue