mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Merge branch 'respawnstuff' into 'master'
Respawning, FAULTing and spectators Closes #108 See merge request KartKrew/Kart!392
This commit is contained in:
commit
db46507b81
7 changed files with 89 additions and 26 deletions
|
|
@ -3374,9 +3374,11 @@ static void Got_Teamchange(UINT8 **cp, INT32 playernum)
|
||||||
{
|
{
|
||||||
if (players[playernum].mo)
|
if (players[playernum].mo)
|
||||||
{
|
{
|
||||||
P_DamageMobj(players[playernum].mo, NULL, NULL, 1, DMG_INSTAKILL);
|
P_DamageMobj(players[playernum].mo, NULL, NULL, 1,
|
||||||
|
(NetPacket.packet.newteam ? DMG_INSTAKILL : DMG_SPECTATOR));
|
||||||
}
|
}
|
||||||
else
|
//else
|
||||||
|
if (!NetPacket.packet.newteam)
|
||||||
{
|
{
|
||||||
players[playernum].playerstate = PST_REBORN;
|
players[playernum].playerstate = PST_REBORN;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
27
src/g_game.c
27
src/g_game.c
|
|
@ -2084,6 +2084,8 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
||||||
INT32 wanted;
|
INT32 wanted;
|
||||||
boolean songcredit = false;
|
boolean songcredit = false;
|
||||||
boolean eliminated;
|
boolean eliminated;
|
||||||
|
UINT16 nocontrol;
|
||||||
|
INT32 khudfault;
|
||||||
|
|
||||||
score = players[player].score;
|
score = players[player].score;
|
||||||
marescore = players[player].marescore;
|
marescore = players[player].marescore;
|
||||||
|
|
@ -2183,6 +2185,14 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
||||||
wanted = players[player].kartstuff[k_wanted];
|
wanted = players[player].kartstuff[k_wanted];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!betweenmaps)
|
||||||
|
{
|
||||||
|
khudfault = players[player].karthud[khud_fault];
|
||||||
|
nocontrol = players[player].powers[pw_nocontrol];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
khudfault = nocontrol = 0;
|
||||||
|
|
||||||
// Obliterate follower from existence
|
// Obliterate follower from existence
|
||||||
P_SetTarget(&players[player].follower, NULL);
|
P_SetTarget(&players[player].follower, NULL);
|
||||||
|
|
||||||
|
|
@ -2244,6 +2254,8 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
||||||
p->kartstuff[k_wanted] = wanted;
|
p->kartstuff[k_wanted] = wanted;
|
||||||
p->kartstuff[k_eggmanblame] = -1;
|
p->kartstuff[k_eggmanblame] = -1;
|
||||||
p->kartstuff[k_lastdraft] = -1;
|
p->kartstuff[k_lastdraft] = -1;
|
||||||
|
p->karthud[khud_fault] = khudfault;
|
||||||
|
p->powers[pw_nocontrol] = nocontrol;
|
||||||
|
|
||||||
memcpy(&p->respawn, &respawn, sizeof (p->respawn));
|
memcpy(&p->respawn, &respawn, sizeof (p->respawn));
|
||||||
|
|
||||||
|
|
@ -2297,6 +2309,9 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
||||||
if (betweenmaps)
|
if (betweenmaps)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (leveltime < starttime)
|
||||||
|
return;
|
||||||
|
|
||||||
if (p-players == consoleplayer)
|
if (p-players == consoleplayer)
|
||||||
{
|
{
|
||||||
if (mapmusflags & MUSIC_RELOADRESET)
|
if (mapmusflags & MUSIC_RELOADRESET)
|
||||||
|
|
@ -2319,11 +2334,6 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
||||||
|
|
||||||
if (songcredit)
|
if (songcredit)
|
||||||
S_ShowMusicCredit();
|
S_ShowMusicCredit();
|
||||||
|
|
||||||
if (leveltime > (starttime + (TICRATE/2)) && !p->spectator)
|
|
||||||
{
|
|
||||||
K_DoIngameRespawn(p);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
@ -2385,10 +2395,17 @@ void G_SpawnPlayer(INT32 playernum)
|
||||||
|
|
||||||
void G_MovePlayerToSpawnOrStarpost(INT32 playernum)
|
void G_MovePlayerToSpawnOrStarpost(INT32 playernum)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
|
if (leveltime <= introtime && !players[playernum].spectator)
|
||||||
|
P_MovePlayerToSpawn(playernum, G_FindMapStart(playernum));
|
||||||
|
else
|
||||||
|
P_MovePlayerToStarpost(playernum);
|
||||||
|
#else
|
||||||
if (leveltime > starttime)
|
if (leveltime > starttime)
|
||||||
P_MovePlayerToStarpost(playernum);
|
P_MovePlayerToStarpost(playernum);
|
||||||
else
|
else
|
||||||
P_MovePlayerToSpawn(playernum, G_FindMapStart(playernum));
|
P_MovePlayerToSpawn(playernum, G_FindMapStart(playernum));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
mapthing_t *G_FindTeamStart(INT32 playernum)
|
mapthing_t *G_FindTeamStart(INT32 playernum)
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,23 @@ static void K_RespawnAtWaypoint(player_t *player, waypoint_t *waypoint)
|
||||||
player->respawn.pointz += K_RespawnOffset(player, player->respawn.flip);
|
player->respawn.pointz += K_RespawnOffset(player, player->respawn.flip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------
|
||||||
|
void K_DoFault(player_t *player)
|
||||||
|
|
||||||
|
See header file for description.
|
||||||
|
--------------------------------------------------*/
|
||||||
|
|
||||||
|
void K_DoFault(player_t *player)
|
||||||
|
{
|
||||||
|
player->powers[pw_nocontrol] = (starttime - leveltime) + 50;
|
||||||
|
if (!(player->pflags & PF_FAULT))
|
||||||
|
{
|
||||||
|
S_StartSound(player->mo, sfx_s3k83);
|
||||||
|
player->karthud[khud_fault] = 1;
|
||||||
|
player->pflags |= PF_FAULT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
void K_DoIngameRespawn(player_t *player)
|
void K_DoIngameRespawn(player_t *player)
|
||||||
|
|
||||||
|
|
@ -103,18 +120,14 @@ void K_DoIngameRespawn(player_t *player)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (leveltime < introtime)
|
if (leveltime <= introtime)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (leveltime < starttime) // FAULT
|
// FAULT
|
||||||
{
|
if (leveltime < starttime)
|
||||||
player->powers[pw_nocontrol] = (starttime - leveltime) + 50;
|
K_DoFault(player);
|
||||||
player->pflags |= PF_FAULT;
|
|
||||||
S_StartSound(player->mo, sfx_s3k83);
|
|
||||||
player->karthud[khud_fault] = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
player->kartstuff[k_ringboost] = 0;
|
player->kartstuff[k_ringboost] = 0;
|
||||||
player->kartstuff[k_driftboost] = 0;
|
player->kartstuff[k_driftboost] = 0;
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,21 @@
|
||||||
fixed_t K_RespawnOffset(player_t *player, boolean flip);
|
fixed_t K_RespawnOffset(player_t *player, boolean flip);
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------------------------------------
|
||||||
|
void K_DoFault(player_t *player);
|
||||||
|
|
||||||
|
Faults the specified player.
|
||||||
|
|
||||||
|
Input Arguments:-
|
||||||
|
player - Player to preform this for.
|
||||||
|
|
||||||
|
Return:-
|
||||||
|
None
|
||||||
|
--------------------------------------------------*/
|
||||||
|
|
||||||
|
void K_DoFault(player_t *player);
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
void K_DoIngameRespawn(player_t *player);
|
void K_DoIngameRespawn(player_t *player);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1370,6 +1370,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MT_PLAYER:
|
case MT_PLAYER:
|
||||||
|
if (damagetype != DMG_SPECTATOR)
|
||||||
{
|
{
|
||||||
angle_t flingAngle;
|
angle_t flingAngle;
|
||||||
mobj_t *kart;
|
mobj_t *kart;
|
||||||
|
|
@ -1750,8 +1751,15 @@ static boolean P_KillPlayer(player_t *player, mobj_t *inflictor, mobj_t *source,
|
||||||
// Respawn kill types
|
// Respawn kill types
|
||||||
K_DoIngameRespawn(player);
|
K_DoIngameRespawn(player);
|
||||||
return false;
|
return false;
|
||||||
|
case DMG_SPECTATOR:
|
||||||
|
// disappearifies, but still gotta put items back in play
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
// Everything else REALLY kills
|
// Everything else REALLY kills
|
||||||
|
if (leveltime < starttime)
|
||||||
|
{
|
||||||
|
K_DoFault(player);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
10
src/p_mobj.c
10
src/p_mobj.c
|
|
@ -10592,7 +10592,7 @@ void P_MovePlayerToSpawn(INT32 playernum, mapthing_t *mthing)
|
||||||
{
|
{
|
||||||
fixed_t offset = mthing->z << FRACBITS;
|
fixed_t offset = mthing->z << FRACBITS;
|
||||||
|
|
||||||
if (p->respawn.state != RESPAWNST_NONE)
|
if (p->respawn.state != RESPAWNST_NONE || p->spectator)
|
||||||
offset += K_RespawnOffset(p, (mthing->options & MTF_OBJECTFLIP));
|
offset += K_RespawnOffset(p, (mthing->options & MTF_OBJECTFLIP));
|
||||||
|
|
||||||
// Flagging a player's ambush will make them start on the ceiling
|
// Flagging a player's ambush will make them start on the ceiling
|
||||||
|
|
@ -10638,6 +10638,12 @@ void P_MovePlayerToSpawn(INT32 playernum, mapthing_t *mthing)
|
||||||
|
|
||||||
mobj->angle = angle;
|
mobj->angle = angle;
|
||||||
|
|
||||||
|
// FAULT
|
||||||
|
if (leveltime > introtime && !p->spectator)
|
||||||
|
{
|
||||||
|
K_DoIngameRespawn(p);
|
||||||
|
}
|
||||||
|
|
||||||
P_AfterPlayerSpawn(playernum);
|
P_AfterPlayerSpawn(playernum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -10691,6 +10697,8 @@ void P_MovePlayerToStarpost(INT32 playernum)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
p->drawangle = mobj->angle; // default to the camera angle
|
||||||
|
|
||||||
P_AfterPlayerSpawn(playernum);
|
P_AfterPlayerSpawn(playernum);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
20
src/p_user.c
20
src/p_user.c
|
|
@ -461,7 +461,7 @@ UINT8 P_FindHighestLap(void)
|
||||||
//
|
//
|
||||||
boolean P_PlayerInPain(player_t *player)
|
boolean P_PlayerInPain(player_t *player)
|
||||||
{
|
{
|
||||||
if (player->kartstuff[k_spinouttimer] || player->tumbleBounces > 0)
|
if (player->kartstuff[k_spinouttimer] || (player->tumbleBounces > 0) || (player->pflags & PF_FAULT))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -2123,11 +2123,7 @@ void P_MovePlayer(player_t *player)
|
||||||
|
|
||||||
// Control relinquishing stuff!
|
// Control relinquishing stuff!
|
||||||
if (player->powers[pw_nocontrol])
|
if (player->powers[pw_nocontrol])
|
||||||
{
|
|
||||||
player->pflags |= PF_STASIS;
|
player->pflags |= PF_STASIS;
|
||||||
if (!(player->powers[pw_nocontrol] & (1<<15)))
|
|
||||||
player->pflags |= PF_JUMPSTASIS;
|
|
||||||
}
|
|
||||||
|
|
||||||
// note: don't unset stasis here
|
// note: don't unset stasis here
|
||||||
|
|
||||||
|
|
@ -2183,9 +2179,13 @@ void P_MovePlayer(player_t *player)
|
||||||
player->drawangle -= ANGLE_22h;
|
player->drawangle -= ANGLE_22h;
|
||||||
player->mo->rollangle = 0;
|
player->mo->rollangle = 0;
|
||||||
}
|
}
|
||||||
else if (player->kartstuff[k_spinouttimer] > 0)
|
else if ((player->pflags & PF_FAULT) || (player->kartstuff[k_spinouttimer] > 0))
|
||||||
{
|
{
|
||||||
UINT8 speed = max(1, min(8, player->kartstuff[k_spinouttimer]/8));
|
UINT16 speed = ((player->pflags & PF_FAULT) ? player->powers[pw_nocontrol] : player->kartstuff[k_spinouttimer])/8;
|
||||||
|
if (speed > 8)
|
||||||
|
speed = 8;
|
||||||
|
else if (speed < 1)
|
||||||
|
speed = 1;
|
||||||
|
|
||||||
P_SetPlayerMobjState(player->mo, S_KART_SPINOUT);
|
P_SetPlayerMobjState(player->mo, S_KART_SPINOUT);
|
||||||
|
|
||||||
|
|
@ -2196,7 +2196,7 @@ void P_MovePlayer(player_t *player)
|
||||||
|
|
||||||
player->mo->rollangle = 0;
|
player->mo->rollangle = 0;
|
||||||
}
|
}
|
||||||
else if (player->pflags & PF_FAULT)
|
/*else if (player->pflags & PF_FAULT) -- v1 fault
|
||||||
{
|
{
|
||||||
P_SetPlayerMobjState(player->mo, S_KART_SPINOUT);
|
P_SetPlayerMobjState(player->mo, S_KART_SPINOUT);
|
||||||
|
|
||||||
|
|
@ -2206,7 +2206,7 @@ void P_MovePlayer(player_t *player)
|
||||||
player->drawangle -= ANGLE_11hh;
|
player->drawangle -= ANGLE_11hh;
|
||||||
|
|
||||||
player->mo->rollangle = 0;
|
player->mo->rollangle = 0;
|
||||||
}
|
}*/
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
K_KartMoveAnimation(player);
|
K_KartMoveAnimation(player);
|
||||||
|
|
@ -4571,7 +4571,7 @@ void P_PlayerThink(player_t *player)
|
||||||
player->powers[pw_flashing]--;
|
player->powers[pw_flashing]--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player->powers[pw_nocontrol] & ((1<<15)-1) && player->powers[pw_nocontrol] < UINT16_MAX)
|
if (player->powers[pw_nocontrol] && player->powers[pw_nocontrol] < UINT16_MAX)
|
||||||
{
|
{
|
||||||
if (!(--player->powers[pw_nocontrol]))
|
if (!(--player->powers[pw_nocontrol]))
|
||||||
player->pflags &= ~PF_FAULT;
|
player->pflags &= ~PF_FAULT;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue