mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-02-27 16:01:17 +00:00
Merge branch 'magician-spectator' into 'master'
Heavy Magician adjustment See merge request KartKrew/Kart!876
This commit is contained in:
commit
90274359db
7 changed files with 64 additions and 18 deletions
|
|
@ -2292,10 +2292,15 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
|||
}
|
||||
else
|
||||
{
|
||||
UINT32 skinflags = (demo.playback)
|
||||
? demo.skinlist[demo.currentskinid[player]].flags
|
||||
: skins[players[player].skin].flags;
|
||||
|
||||
fakeskin = players[player].fakeskin;
|
||||
kartspeed = players[player].kartspeed;
|
||||
kartweight = players[player].kartweight;
|
||||
charflags = players[player].charflags;
|
||||
|
||||
charflags = (skinflags & SF_IRONMAN) ? skinflags : players[player].charflags;
|
||||
}
|
||||
lastfakeskin = players[player].lastfakeskin;
|
||||
|
||||
|
|
|
|||
|
|
@ -1959,7 +1959,7 @@ void K_SpawnMagicianParticles(mobj_t *mo, int spread)
|
|||
INT32 i;
|
||||
mobj_t *target = mo->target;
|
||||
|
||||
if (P_MobjWasRemoved(target))
|
||||
if (!target || P_MobjWasRemoved(target))
|
||||
target = mo;
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
|
|
@ -2531,8 +2531,8 @@ void K_PlayOvertakeSound(mobj_t *source)
|
|||
void K_PlayPainSound(mobj_t *source, mobj_t *other)
|
||||
{
|
||||
sfxenum_t pick = P_RandomKey(PR_VOICES, 2); // Gotta roll the RNG every time this is called for sync reasons
|
||||
|
||||
sfxenum_t sfx_id = ((skin_t *)source->skin)->soundsid[S_sfx[sfx_khurt1 + pick].skinsound];
|
||||
skin_t *skin = (source->player ? &skins[source->player->skin] : ((skin_t *)source->skin));
|
||||
sfxenum_t sfx_id = skin->soundsid[S_sfx[sfx_khurt1 + pick].skinsound];
|
||||
boolean alwaysHear = false;
|
||||
|
||||
if (other != NULL && P_MobjWasRemoved(other) == false && other->player != NULL)
|
||||
|
|
@ -2550,7 +2550,8 @@ void K_PlayPainSound(mobj_t *source, mobj_t *other)
|
|||
|
||||
void K_PlayHitEmSound(mobj_t *source, mobj_t *other)
|
||||
{
|
||||
sfxenum_t sfx_id = ((skin_t *)source->skin)->soundsid[S_sfx[sfx_khitem].skinsound];
|
||||
skin_t *skin = (source->player ? &skins[source->player->skin] : ((skin_t *)source->skin));
|
||||
sfxenum_t sfx_id = skin->soundsid[S_sfx[sfx_khitem].skinsound];
|
||||
boolean alwaysHear = false;
|
||||
|
||||
if (other != NULL && P_MobjWasRemoved(other) == false && other->player != NULL)
|
||||
|
|
|
|||
|
|
@ -1926,6 +1926,23 @@ static boolean P_KillPlayer(player_t *player, mobj_t *inflictor, mobj_t *source,
|
|||
break;
|
||||
}
|
||||
|
||||
if (player->spectator == false)
|
||||
{
|
||||
UINT32 skinflags = (demo.playback)
|
||||
? demo.skinlist[demo.currentskinid[(player-players)]].flags
|
||||
: skins[player->skin].flags;
|
||||
|
||||
if (skinflags & SF_IRONMAN)
|
||||
{
|
||||
player->mo->skin = &skins[player->skin];
|
||||
player->charflags = skinflags;
|
||||
K_SpawnMagicianParticles(player->mo, 5);
|
||||
S_StartSound(player->mo, sfx_slip);
|
||||
}
|
||||
|
||||
player->mo->renderflags &= ~RF_DONTDRAW;
|
||||
}
|
||||
|
||||
K_DropEmeraldsFromPlayer(player, player->emeralds);
|
||||
K_SetHitLagForObjects(player->mo, inflictor, MAXHITLAGTICS, true);
|
||||
|
||||
|
|
@ -1935,11 +1952,6 @@ static boolean P_KillPlayer(player_t *player, mobj_t *inflictor, mobj_t *source,
|
|||
|
||||
P_ResetPlayer(player);
|
||||
|
||||
if (player->spectator == false)
|
||||
{
|
||||
player->mo->renderflags &= ~RF_DONTDRAW;
|
||||
}
|
||||
|
||||
P_SetPlayerMobjState(player->mo, player->mo->info->deathstate);
|
||||
|
||||
if (type == DMG_TIMEOVER)
|
||||
|
|
@ -2271,6 +2283,20 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
player->glanceDir = 0;
|
||||
player->pflags &= ~PF_GAINAX;
|
||||
|
||||
if (player->spectator == false && !(player->charflags & SF_IRONMAN))
|
||||
{
|
||||
UINT32 skinflags = (demo.playback)
|
||||
? demo.skinlist[demo.currentskinid[(player-players)]].flags
|
||||
: skins[player->skin].flags;
|
||||
|
||||
if (skinflags & SF_IRONMAN)
|
||||
{
|
||||
player->mo->skin = &skins[player->skin];
|
||||
player->charflags = skinflags;
|
||||
K_SpawnMagicianParticles(player->mo, 5);
|
||||
}
|
||||
}
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case DMG_STING:
|
||||
|
|
|
|||
|
|
@ -7989,7 +7989,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
if (mobj->extravalue2 == 0)
|
||||
{
|
||||
P_RemoveMobj(mobj);
|
||||
break;
|
||||
return false;
|
||||
}
|
||||
else if (mobj->extravalue2 < TICRATE/3)
|
||||
{
|
||||
|
|
@ -8022,7 +8022,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
if (mobj->target->player->hyudorotimer)
|
||||
{
|
||||
P_RemoveMobj(mobj);
|
||||
break;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
12
src/p_user.c
12
src/p_user.c
|
|
@ -4238,11 +4238,21 @@ void P_PlayerThink(player_t *player)
|
|||
{
|
||||
if (player->charflags & SF_IRONMAN) // no fakeskin yet
|
||||
{
|
||||
if (leveltime >= starttime && !player->exiting)
|
||||
if (leveltime >= starttime
|
||||
&& !player->exiting
|
||||
&& player->mo->health > 0
|
||||
&& (player->respawn.state == RESPAWNST_NONE
|
||||
|| (player->respawn.state == RESPAWNST_DROP && !player->respawn.timer))
|
||||
&& !P_PlayerInPain(player))
|
||||
{
|
||||
if (player->fakeskin != MAXSKINS)
|
||||
{
|
||||
SetFakePlayerSkin(player, player->fakeskin);
|
||||
if (player->spectator == false)
|
||||
{
|
||||
S_StartSound(player->mo, sfx_kc33);
|
||||
K_SpawnMagicianParticles(player->mo, 5);
|
||||
}
|
||||
}
|
||||
else if (!(gametyperules & GTR_CIRCUIT))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -433,7 +433,7 @@ void SetRandomFakePlayerSkin(player_t* player, boolean fast)
|
|||
|
||||
SetFakePlayerSkin(player, i);
|
||||
|
||||
if (player->mo)
|
||||
if (player->mo && player->spectator == false)
|
||||
{
|
||||
S_StartSound(player->mo, sfx_kc33);
|
||||
S_StartSound(player->mo, sfx_cdfm44);
|
||||
|
|
@ -500,8 +500,11 @@ void ClearFakePlayerSkin(player_t* player)
|
|||
if ((flags & SF_IRONMAN) && !P_MobjWasRemoved(player->mo))
|
||||
{
|
||||
SetFakePlayerSkin(player, skinid);
|
||||
S_StartSound(player->mo, sfx_s3k9f);
|
||||
K_SpawnMagicianParticles(player->mo, 5);
|
||||
if (player->spectator == false)
|
||||
{
|
||||
S_StartSound(player->mo, sfx_s3k9f);
|
||||
K_SpawnMagicianParticles(player->mo, 5);
|
||||
}
|
||||
}
|
||||
|
||||
player->fakeskin = MAXSKINS;
|
||||
|
|
|
|||
|
|
@ -600,10 +600,11 @@ void S_StartSoundAtVolume(const void *origin_p, sfxenum_t sfx_id, INT32 volume)
|
|||
|
||||
sfx = &S_sfx[sfx_id];
|
||||
|
||||
if (sfx->skinsound != -1 && origin && origin->skin)
|
||||
if (sfx->skinsound != -1 && origin && (origin->player || origin->skin))
|
||||
{
|
||||
// redirect player sound to the sound in the skin table
|
||||
sfx_id = ((skin_t *)origin->skin)->soundsid[sfx->skinsound];
|
||||
skin_t *skin = (origin->player ? &skins[origin->player->skin] : ((skin_t *)origin->skin));
|
||||
sfx_id = skin->soundsid[sfx->skinsound];
|
||||
sfx = &S_sfx[sfx_id];
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue