mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Merge branch 'bumpers-use-health' into 'master'
Sync player mobj health to bumper count See merge request KartKrew/Kart!1003
This commit is contained in:
commit
feb70916c1
5 changed files with 40 additions and 28 deletions
|
|
@ -183,10 +183,8 @@ void K_CheckEmeralds(player_t *player)
|
|||
continue;
|
||||
}
|
||||
|
||||
players[i].bumpers = 0;
|
||||
P_DoPlayerExit(&players[i]);
|
||||
}
|
||||
|
||||
K_CheckBumpers();
|
||||
}
|
||||
|
||||
UINT16 K_GetChaosEmeraldColor(UINT32 emeraldType)
|
||||
|
|
@ -791,7 +789,14 @@ void K_BattleInit(boolean singleplayercontext)
|
|||
{
|
||||
if (!playeringame[i] || players[i].spectator)
|
||||
continue;
|
||||
|
||||
players[i].bumpers = maxbumpers;
|
||||
|
||||
if (players[i].mo)
|
||||
{
|
||||
players[i].mo->health = maxbumpers;
|
||||
}
|
||||
|
||||
K_SpawnPlayerBattleBumpers(players+i);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
20
src/k_kart.c
20
src/k_kart.c
|
|
@ -4188,35 +4188,35 @@ void K_HandleBumperChanges(player_t *player, UINT8 prevBumpers)
|
|||
{
|
||||
player->pflags |= (PF_NOCONTEST|PF_ELIMINATED);
|
||||
}
|
||||
|
||||
P_KillMobj(player->mo, NULL, NULL, DMG_NORMAL);
|
||||
}
|
||||
|
||||
K_CalculateBattleWanted();
|
||||
K_CheckBumpers();
|
||||
}
|
||||
|
||||
void K_DestroyBumpers(player_t *player, UINT8 amount)
|
||||
UINT8 K_DestroyBumpers(player_t *player, UINT8 amount)
|
||||
{
|
||||
UINT8 oldBumpers = player->bumpers;
|
||||
|
||||
if (!(gametyperules & GTR_BUMPERS))
|
||||
{
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
amount = min(amount, player->bumpers);
|
||||
|
||||
if (amount == 0)
|
||||
{
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
player->bumpers -= amount;
|
||||
K_HandleBumperChanges(player, oldBumpers);
|
||||
|
||||
return amount;
|
||||
}
|
||||
|
||||
void K_TakeBumpersFromPlayer(player_t *player, player_t *victim, UINT8 amount)
|
||||
UINT8 K_TakeBumpersFromPlayer(player_t *player, player_t *victim, UINT8 amount)
|
||||
{
|
||||
UINT8 oldPlayerBumpers = player->bumpers;
|
||||
UINT8 oldVictimBumpers = victim->bumpers;
|
||||
|
|
@ -4225,14 +4225,14 @@ void K_TakeBumpersFromPlayer(player_t *player, player_t *victim, UINT8 amount)
|
|||
|
||||
if (!(gametyperules & GTR_BUMPERS))
|
||||
{
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
amount = min(amount, victim->bumpers);
|
||||
|
||||
if (amount == 0)
|
||||
{
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
while ((tookBumpers < amount) && (victim->bumpers > 0))
|
||||
|
|
@ -4287,7 +4287,7 @@ void K_TakeBumpersFromPlayer(player_t *player, player_t *victim, UINT8 amount)
|
|||
if (tookBumpers == 0)
|
||||
{
|
||||
// No change occured.
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Play steal sound
|
||||
|
|
@ -4295,6 +4295,8 @@ void K_TakeBumpersFromPlayer(player_t *player, player_t *victim, UINT8 amount)
|
|||
|
||||
K_HandleBumperChanges(player, oldPlayerBumpers);
|
||||
K_HandleBumperChanges(victim, oldVictimBumpers);
|
||||
|
||||
return tookBumpers;
|
||||
}
|
||||
|
||||
#define MINEQUAKEDIST 4096
|
||||
|
|
|
|||
|
|
@ -103,8 +103,8 @@ void K_UpdateStumbleIndicator(player_t *player);
|
|||
INT32 K_ExplodePlayer(player_t *player, mobj_t *inflictor, mobj_t *source);
|
||||
void K_DebtStingPlayer(player_t *player, mobj_t *source);
|
||||
void K_HandleBumperChanges(player_t *player, UINT8 prevBumpers);
|
||||
void K_DestroyBumpers(player_t *player, UINT8 amount);
|
||||
void K_TakeBumpersFromPlayer(player_t *player, player_t *victim, UINT8 amount);
|
||||
UINT8 K_DestroyBumpers(player_t *player, UINT8 amount);
|
||||
UINT8 K_TakeBumpersFromPlayer(player_t *player, player_t *victim, UINT8 amount);
|
||||
void K_MineFlashScreen(mobj_t *source);
|
||||
void K_SpawnMineExplosion(mobj_t *source, UINT8 color, tic_t delay);
|
||||
void K_RunFinishLineBeam(void);
|
||||
|
|
|
|||
|
|
@ -2146,6 +2146,9 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
const boolean hardhit = (type == DMG_EXPLODE || type == DMG_KARMA || type == DMG_TUMBLE); // This damage type can do evil stuff like ALWAYS combo
|
||||
INT16 ringburst = 5;
|
||||
|
||||
// Do not die from damage outside of bumpers health system
|
||||
damage = 0;
|
||||
|
||||
// Check if the player is allowed to be damaged!
|
||||
// If not, then spawn the instashield effect instead.
|
||||
if (!force)
|
||||
|
|
@ -2275,12 +2278,12 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
K_TryHurtSoundExchange(target, source);
|
||||
|
||||
K_BattleAwardHit(source->player, player, inflictor, takeBumpers);
|
||||
K_TakeBumpersFromPlayer(source->player, player, takeBumpers);
|
||||
damage = K_TakeBumpersFromPlayer(source->player, player, takeBumpers);
|
||||
|
||||
if (type == DMG_KARMA)
|
||||
{
|
||||
// Destroy any remainder bumpers from the player for karma comeback damage
|
||||
K_DestroyBumpers(player, player->bumpers);
|
||||
damage = K_DestroyBumpers(player, player->bumpers);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -2303,7 +2306,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
}
|
||||
else
|
||||
{
|
||||
K_DestroyBumpers(player, takeBumpers);
|
||||
damage = K_DestroyBumpers(player, takeBumpers);
|
||||
}
|
||||
|
||||
if (!(damagetype & DMG_STEAL))
|
||||
|
|
@ -2389,15 +2392,12 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
if (type != DMG_STUMBLE)
|
||||
{
|
||||
player->instashield = 15;
|
||||
K_SetHitLagForObjects(target, inflictor, laglength, true);
|
||||
}
|
||||
|
||||
if (inflictor && !P_MobjWasRemoved(inflictor) && inflictor->type == MT_BANANA)
|
||||
{
|
||||
player->flipDI = true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -2433,16 +2433,16 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
|
||||
//K_SetHitLagForObjects(target, inflictor, laglength, true);
|
||||
|
||||
if (player)
|
||||
P_ResetPlayer(target->player);
|
||||
else
|
||||
if (!player)
|
||||
{
|
||||
P_SetMobjState(target, target->info->painstate);
|
||||
|
||||
if (!P_MobjWasRemoved(target))
|
||||
{
|
||||
// if not intent on another player,
|
||||
// chase after this one
|
||||
P_SetTarget(&target->target, source);
|
||||
if (!P_MobjWasRemoved(target))
|
||||
{
|
||||
// if not intent on another player,
|
||||
// chase after this one
|
||||
P_SetTarget(&target->target, source);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -11829,6 +11829,11 @@ void P_SpawnPlayer(INT32 playernum)
|
|||
p->bumpers = K_StartingBumperCount();
|
||||
K_SpawnPlayerBattleBumpers(p);
|
||||
}
|
||||
|
||||
if (p->bumpers > 0)
|
||||
{
|
||||
mobj->health = p->bumpers;
|
||||
}
|
||||
}
|
||||
|
||||
// I'm not refactoring the loop at the top of this file.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue