mirror of
				https://github.com/KartKrewDev/RingRacers.git
				synced 2025-10-30 08:01:28 +00:00 
			
		
		
		
	Make shrink lasers add timer instead of resetting
This commit is contained in:
		
							parent
							
								
									970add8b91
								
							
						
					
					
						commit
						a4b63f3ffa
					
				
					 4 changed files with 68 additions and 39 deletions
				
			
		| 
						 | 
				
			
			@ -584,6 +584,8 @@ typedef struct player_s
 | 
			
		|||
 | 
			
		||||
	UINT8 stairjank;
 | 
			
		||||
 | 
			
		||||
	UINT8 shrinkLaserDelay;
 | 
			
		||||
 | 
			
		||||
#ifdef HWRENDER
 | 
			
		||||
	fixed_t fovadd; // adjust FOV for hw rendering
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7545,6 +7545,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
 | 
			
		|||
			comebackshowninfo = true; // client has already seen the message
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (player->shrinkLaserDelay)
 | 
			
		||||
		player->shrinkLaserDelay--;
 | 
			
		||||
 | 
			
		||||
	if (player->ringdelay)
 | 
			
		||||
		player->ringdelay--;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -10041,7 +10044,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
 | 
			
		|||
									}
 | 
			
		||||
 | 
			
		||||
									// TODO: gametyperules
 | 
			
		||||
									player->growshrinktimer = (gametype == GT_BATTLE ? 8 : 12) * TICRATE;
 | 
			
		||||
									player->growshrinktimer = max(player->growshrinktimer, (gametype == GT_BATTLE ? 8 : 12) * TICRATE);
 | 
			
		||||
 | 
			
		||||
									if (player->invincibilitytimer > 0)
 | 
			
		||||
									{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -412,6 +412,7 @@ boolean Obj_ShrinkLaserCollide(mobj_t *gun, mobj_t *victim)
 | 
			
		|||
{
 | 
			
		||||
	mobj_t *pohbee = gun_pohbee(gun);
 | 
			
		||||
	mobj_t *owner = NULL;
 | 
			
		||||
	INT32 prevTimer = 0;
 | 
			
		||||
 | 
			
		||||
	if (pohbee == NULL || P_MobjWasRemoved(pohbee) == true)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -423,44 +424,60 @@ boolean Obj_ShrinkLaserCollide(mobj_t *gun, mobj_t *victim)
 | 
			
		|||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (victim->player->shrinkLaserDelay > 0)
 | 
			
		||||
	{
 | 
			
		||||
		victim->player->shrinkLaserDelay = TICRATE;
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	victim->player->shrinkLaserDelay = TICRATE;
 | 
			
		||||
 | 
			
		||||
	owner = pohbee_owner(pohbee);
 | 
			
		||||
	prevTimer = victim->player->growshrinktimer;
 | 
			
		||||
 | 
			
		||||
	if (owner != NULL && victim == owner)
 | 
			
		||||
	{
 | 
			
		||||
		// Belongs to us. Give us Grow!
 | 
			
		||||
		if (victim->player->growshrinktimer <= 0)
 | 
			
		||||
		if (prevTimer < 0)
 | 
			
		||||
		{
 | 
			
		||||
			victim->scalespeed = mapobjectscale/TICRATE;
 | 
			
		||||
			victim->destscale = FixedMul(mapobjectscale, GROW_SCALE);
 | 
			
		||||
 | 
			
		||||
			if (K_PlayerShrinkCheat(victim->player) == true)
 | 
			
		||||
			{
 | 
			
		||||
				victim->destscale = FixedMul(victim->destscale, SHRINK_SCALE);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// TODO: gametyperules
 | 
			
		||||
			victim->player->growshrinktimer = (gametype == GT_BATTLE ? 8 : 12) * TICRATE;
 | 
			
		||||
 | 
			
		||||
			if (victim->player->invincibilitytimer > 0)
 | 
			
		||||
			{
 | 
			
		||||
				; // invincibility has priority in P_RestoreMusic, no point in starting here
 | 
			
		||||
			}
 | 
			
		||||
			else if (P_IsLocalPlayer(victim->player) == true)
 | 
			
		||||
			{
 | 
			
		||||
				S_ChangeMusicSpecial("kgrow");
 | 
			
		||||
			}
 | 
			
		||||
			else //used to be "if (P_IsDisplayPlayer(victim->player) == false)"
 | 
			
		||||
			{
 | 
			
		||||
				S_StartSound(victim, (cv_kartinvinsfx.value ? sfx_alarmg : sfx_kgrow));
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			P_RestoreMusic(victim->player);
 | 
			
		||||
			// Take away Shrink.
 | 
			
		||||
			K_RemoveGrowShrink(victim->player);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			victim->player->growshrinktimer += 5*TICRATE;
 | 
			
		||||
			S_StartSound(victim, sfx_kc5a);
 | 
			
		||||
 | 
			
		||||
			if (prevTimer <= 0)
 | 
			
		||||
			{
 | 
			
		||||
				victim->scalespeed = mapobjectscale/TICRATE;
 | 
			
		||||
				victim->destscale = FixedMul(mapobjectscale, GROW_SCALE);
 | 
			
		||||
 | 
			
		||||
				if (K_PlayerShrinkCheat(victim->player) == true)
 | 
			
		||||
				{
 | 
			
		||||
					victim->destscale = FixedMul(victim->destscale, SHRINK_SCALE);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if (victim->player->invincibilitytimer > 0)
 | 
			
		||||
				{
 | 
			
		||||
					; // invincibility has priority in P_RestoreMusic, no point in starting here
 | 
			
		||||
				}
 | 
			
		||||
				else if (P_IsLocalPlayer(victim->player) == true)
 | 
			
		||||
				{
 | 
			
		||||
					S_ChangeMusicSpecial("kgrow");
 | 
			
		||||
				}
 | 
			
		||||
				else //used to be "if (P_IsDisplayPlayer(victim->player) == false)"
 | 
			
		||||
				{
 | 
			
		||||
					S_StartSound(victim, (cv_kartinvinsfx.value ? sfx_alarmg : sfx_kgrow));
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				P_RestoreMusic(victim->player);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		if (victim->player->growshrinktimer > 0)
 | 
			
		||||
		if (prevTimer > 0)
 | 
			
		||||
		{
 | 
			
		||||
			// Take away Grow.
 | 
			
		||||
			K_RemoveGrowShrink(victim->player);
 | 
			
		||||
| 
						 | 
				
			
			@ -468,18 +485,21 @@ boolean Obj_ShrinkLaserCollide(mobj_t *gun, mobj_t *victim)
 | 
			
		|||
		else
 | 
			
		||||
		{
 | 
			
		||||
			// Start shrinking!
 | 
			
		||||
			K_DropItems(victim->player);
 | 
			
		||||
			victim->player->growshrinktimer = -(15*TICRATE);
 | 
			
		||||
 | 
			
		||||
			victim->scalespeed = mapobjectscale/TICRATE;
 | 
			
		||||
			victim->destscale = FixedMul(mapobjectscale, SHRINK_SCALE);
 | 
			
		||||
 | 
			
		||||
			if (K_PlayerShrinkCheat(victim->player) == true)
 | 
			
		||||
			{
 | 
			
		||||
				victim->destscale = FixedMul(victim->destscale, SHRINK_SCALE);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			victim->player->growshrinktimer -= 5*TICRATE;
 | 
			
		||||
			S_StartSound(victim, sfx_kc59);
 | 
			
		||||
 | 
			
		||||
			if (prevTimer >= 0)
 | 
			
		||||
			{
 | 
			
		||||
				K_DropItems(victim->player);
 | 
			
		||||
 | 
			
		||||
				victim->scalespeed = mapobjectscale/TICRATE;
 | 
			
		||||
				victim->destscale = FixedMul(mapobjectscale, SHRINK_SCALE);
 | 
			
		||||
 | 
			
		||||
				if (K_PlayerShrinkCheat(victim->player) == true)
 | 
			
		||||
				{
 | 
			
		||||
					victim->destscale = FixedMul(victim->destscale, SHRINK_SCALE);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -367,6 +367,8 @@ static void P_NetArchivePlayers(void)
 | 
			
		|||
 | 
			
		||||
		WRITEUINT8(save_p, players[i].stairjank);
 | 
			
		||||
 | 
			
		||||
		WRITEUINT8(save_p, players[i].shrinkLaserDelay);
 | 
			
		||||
 | 
			
		||||
		// respawnvars_t
 | 
			
		||||
		WRITEUINT8(save_p, players[i].respawn.state);
 | 
			
		||||
		WRITEUINT32(save_p, K_GetWaypointHeapIndex(players[i].respawn.wp));
 | 
			
		||||
| 
						 | 
				
			
			@ -654,6 +656,8 @@ static void P_NetUnArchivePlayers(void)
 | 
			
		|||
 | 
			
		||||
		players[i].stairjank = READUINT8(save_p);
 | 
			
		||||
 | 
			
		||||
		players[i].shrinkLaserDelay = READUINT8(save_p);
 | 
			
		||||
 | 
			
		||||
		// respawnvars_t
 | 
			
		||||
		players[i].respawn.state = READUINT8(save_p);
 | 
			
		||||
		players[i].respawn.wp = (waypoint_t *)(size_t)READUINT32(save_p);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue