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