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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
players[i].bumpers = 0;
|
P_DoPlayerExit(&players[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
K_CheckBumpers();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UINT16 K_GetChaosEmeraldColor(UINT32 emeraldType)
|
UINT16 K_GetChaosEmeraldColor(UINT32 emeraldType)
|
||||||
|
|
@ -791,7 +789,14 @@ void K_BattleInit(boolean singleplayercontext)
|
||||||
{
|
{
|
||||||
if (!playeringame[i] || players[i].spectator)
|
if (!playeringame[i] || players[i].spectator)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
players[i].bumpers = maxbumpers;
|
players[i].bumpers = maxbumpers;
|
||||||
|
|
||||||
|
if (players[i].mo)
|
||||||
|
{
|
||||||
|
players[i].mo->health = maxbumpers;
|
||||||
|
}
|
||||||
|
|
||||||
K_SpawnPlayerBattleBumpers(players+i);
|
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);
|
player->pflags |= (PF_NOCONTEST|PF_ELIMINATED);
|
||||||
}
|
}
|
||||||
|
|
||||||
P_KillMobj(player->mo, NULL, NULL, DMG_NORMAL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
K_CalculateBattleWanted();
|
K_CalculateBattleWanted();
|
||||||
K_CheckBumpers();
|
K_CheckBumpers();
|
||||||
}
|
}
|
||||||
|
|
||||||
void K_DestroyBumpers(player_t *player, UINT8 amount)
|
UINT8 K_DestroyBumpers(player_t *player, UINT8 amount)
|
||||||
{
|
{
|
||||||
UINT8 oldBumpers = player->bumpers;
|
UINT8 oldBumpers = player->bumpers;
|
||||||
|
|
||||||
if (!(gametyperules & GTR_BUMPERS))
|
if (!(gametyperules & GTR_BUMPERS))
|
||||||
{
|
{
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
amount = min(amount, player->bumpers);
|
amount = min(amount, player->bumpers);
|
||||||
|
|
||||||
if (amount == 0)
|
if (amount == 0)
|
||||||
{
|
{
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
player->bumpers -= amount;
|
player->bumpers -= amount;
|
||||||
K_HandleBumperChanges(player, oldBumpers);
|
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 oldPlayerBumpers = player->bumpers;
|
||||||
UINT8 oldVictimBumpers = victim->bumpers;
|
UINT8 oldVictimBumpers = victim->bumpers;
|
||||||
|
|
@ -4225,14 +4225,14 @@ void K_TakeBumpersFromPlayer(player_t *player, player_t *victim, UINT8 amount)
|
||||||
|
|
||||||
if (!(gametyperules & GTR_BUMPERS))
|
if (!(gametyperules & GTR_BUMPERS))
|
||||||
{
|
{
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
amount = min(amount, victim->bumpers);
|
amount = min(amount, victim->bumpers);
|
||||||
|
|
||||||
if (amount == 0)
|
if (amount == 0)
|
||||||
{
|
{
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
while ((tookBumpers < amount) && (victim->bumpers > 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)
|
if (tookBumpers == 0)
|
||||||
{
|
{
|
||||||
// No change occured.
|
// No change occured.
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Play steal sound
|
// Play steal sound
|
||||||
|
|
@ -4295,6 +4295,8 @@ void K_TakeBumpersFromPlayer(player_t *player, player_t *victim, UINT8 amount)
|
||||||
|
|
||||||
K_HandleBumperChanges(player, oldPlayerBumpers);
|
K_HandleBumperChanges(player, oldPlayerBumpers);
|
||||||
K_HandleBumperChanges(victim, oldVictimBumpers);
|
K_HandleBumperChanges(victim, oldVictimBumpers);
|
||||||
|
|
||||||
|
return tookBumpers;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MINEQUAKEDIST 4096
|
#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);
|
INT32 K_ExplodePlayer(player_t *player, mobj_t *inflictor, mobj_t *source);
|
||||||
void K_DebtStingPlayer(player_t *player, mobj_t *source);
|
void K_DebtStingPlayer(player_t *player, mobj_t *source);
|
||||||
void K_HandleBumperChanges(player_t *player, UINT8 prevBumpers);
|
void K_HandleBumperChanges(player_t *player, UINT8 prevBumpers);
|
||||||
void K_DestroyBumpers(player_t *player, UINT8 amount);
|
UINT8 K_DestroyBumpers(player_t *player, UINT8 amount);
|
||||||
void K_TakeBumpersFromPlayer(player_t *player, player_t *victim, UINT8 amount);
|
UINT8 K_TakeBumpersFromPlayer(player_t *player, player_t *victim, UINT8 amount);
|
||||||
void K_MineFlashScreen(mobj_t *source);
|
void K_MineFlashScreen(mobj_t *source);
|
||||||
void K_SpawnMineExplosion(mobj_t *source, UINT8 color, tic_t delay);
|
void K_SpawnMineExplosion(mobj_t *source, UINT8 color, tic_t delay);
|
||||||
void K_RunFinishLineBeam(void);
|
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
|
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;
|
INT16 ringburst = 5;
|
||||||
|
|
||||||
|
// Do not die from damage outside of bumpers health system
|
||||||
|
damage = 0;
|
||||||
|
|
||||||
// Check if the player is allowed to be damaged!
|
// Check if the player is allowed to be damaged!
|
||||||
// If not, then spawn the instashield effect instead.
|
// If not, then spawn the instashield effect instead.
|
||||||
if (!force)
|
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_TryHurtSoundExchange(target, source);
|
||||||
|
|
||||||
K_BattleAwardHit(source->player, player, inflictor, takeBumpers);
|
K_BattleAwardHit(source->player, player, inflictor, takeBumpers);
|
||||||
K_TakeBumpersFromPlayer(source->player, player, takeBumpers);
|
damage = K_TakeBumpersFromPlayer(source->player, player, takeBumpers);
|
||||||
|
|
||||||
if (type == DMG_KARMA)
|
if (type == DMG_KARMA)
|
||||||
{
|
{
|
||||||
// Destroy any remainder bumpers from the player for karma comeback damage
|
// Destroy any remainder bumpers from the player for karma comeback damage
|
||||||
K_DestroyBumpers(player, player->bumpers);
|
damage = K_DestroyBumpers(player, player->bumpers);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -2303,7 +2306,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
K_DestroyBumpers(player, takeBumpers);
|
damage = K_DestroyBumpers(player, takeBumpers);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(damagetype & DMG_STEAL))
|
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)
|
if (type != DMG_STUMBLE)
|
||||||
{
|
{
|
||||||
player->instashield = 15;
|
player->instashield = 15;
|
||||||
K_SetHitLagForObjects(target, inflictor, laglength, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inflictor && !P_MobjWasRemoved(inflictor) && inflictor->type == MT_BANANA)
|
if (inflictor && !P_MobjWasRemoved(inflictor) && inflictor->type == MT_BANANA)
|
||||||
{
|
{
|
||||||
player->flipDI = true;
|
player->flipDI = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -2433,9 +2433,8 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
||||||
|
|
||||||
//K_SetHitLagForObjects(target, inflictor, laglength, true);
|
//K_SetHitLagForObjects(target, inflictor, laglength, true);
|
||||||
|
|
||||||
if (player)
|
if (!player)
|
||||||
P_ResetPlayer(target->player);
|
{
|
||||||
else
|
|
||||||
P_SetMobjState(target, target->info->painstate);
|
P_SetMobjState(target, target->info->painstate);
|
||||||
|
|
||||||
if (!P_MobjWasRemoved(target))
|
if (!P_MobjWasRemoved(target))
|
||||||
|
|
@ -2444,6 +2443,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
||||||
// chase after this one
|
// chase after this one
|
||||||
P_SetTarget(&target->target, source);
|
P_SetTarget(&target->target, source);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11829,6 +11829,11 @@ void P_SpawnPlayer(INT32 playernum)
|
||||||
p->bumpers = K_StartingBumperCount();
|
p->bumpers = K_StartingBumperCount();
|
||||||
K_SpawnPlayerBattleBumpers(p);
|
K_SpawnPlayerBattleBumpers(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (p->bumpers > 0)
|
||||||
|
{
|
||||||
|
mobj->health = p->bumpers;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// I'm not refactoring the loop at the top of this file.
|
// I'm not refactoring the loop at the top of this file.
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue