mirror of
				https://github.com/KartKrewDev/RingRacers.git
				synced 2025-10-30 08:01:28 +00:00 
			
		
		
		
	Merge branch 'fix-twerk-penalty' into 'master'
Fastfall/E-Brake consistency and visual polish Closes #651 See merge request KartKrew/Kart!1508
This commit is contained in:
		
						commit
						a6ec0fb0b4
					
				
					 2 changed files with 41 additions and 24 deletions
				
			
		
							
								
								
									
										41
									
								
								src/k_kart.c
									
										
									
									
									
								
							
							
						
						
									
										41
									
								
								src/k_kart.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -10147,15 +10147,9 @@ void K_KartEbrakeVisuals(player_t *p)
 | 
			
		|||
	{
 | 
			
		||||
		if (p->ebrakefor % 20 == 0)
 | 
			
		||||
		{
 | 
			
		||||
			wave = P_SpawnMobj(p->mo->x, p->mo->y, p->mo->z, MT_SOFTLANDING);
 | 
			
		||||
			P_SetScale(wave, p->mo->scale);
 | 
			
		||||
			if (p->respawn.state == RESPAWNST_NONE)
 | 
			
		||||
			{
 | 
			
		||||
				wave->momx = p->mo->momx;
 | 
			
		||||
				wave->momy = p->mo->momy;
 | 
			
		||||
				wave->momz = p->mo->momz;
 | 
			
		||||
				wave->standingslope = p->mo->standingslope;
 | 
			
		||||
			}
 | 
			
		||||
			wave = P_SpawnMobj(p->mo->x, p->mo->y, p->mo->floorz, MT_SOFTLANDING);
 | 
			
		||||
			P_InstaScale(wave, p->mo->scale);
 | 
			
		||||
			P_SetTarget(&wave->target, p->mo);
 | 
			
		||||
			K_ReduceVFX(wave, p);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -10546,34 +10540,35 @@ boolean K_FastFallBounce(player_t *player)
 | 
			
		|||
	// Handle fastfall bounce.
 | 
			
		||||
	if (player->fastfall != 0)
 | 
			
		||||
	{
 | 
			
		||||
		const fixed_t maxBounce = player->mo->scale * 10;
 | 
			
		||||
		const fixed_t minBounce = player->mo->scale;
 | 
			
		||||
		const fixed_t maxBounce = mapobjectscale * 10;
 | 
			
		||||
		const fixed_t minBounce = mapobjectscale;
 | 
			
		||||
		fixed_t bounce = 2 * abs(player->fastfall) / 3;
 | 
			
		||||
 | 
			
		||||
		if (player->curshield != KSHIELD_BUBBLE && bounce <= 2 * maxBounce)
 | 
			
		||||
		{
 | 
			
		||||
			// Lose speed on bad bounce.
 | 
			
		||||
			// Slow down more as horizontal momentum shrinks
 | 
			
		||||
			// compared to vertical momentum.
 | 
			
		||||
			angle_t a = R_PointToAngle2(0, 0, 4 * maxBounce, player->speed);
 | 
			
		||||
			fixed_t f = FSIN(a);
 | 
			
		||||
			player->mo->momx = FixedMul(player->mo->momx, f);
 | 
			
		||||
			player->mo->momy = FixedMul(player->mo->momy, f);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (bounce > maxBounce)
 | 
			
		||||
		{
 | 
			
		||||
			bounce = maxBounce;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			// Lose speed on bad bounce.
 | 
			
		||||
			if (player->curshield != KSHIELD_BUBBLE)
 | 
			
		||||
			{
 | 
			
		||||
				player->mo->momx /= 2;
 | 
			
		||||
				player->mo->momy /= 2;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (bounce < minBounce)
 | 
			
		||||
		else if (bounce < minBounce)
 | 
			
		||||
		{
 | 
			
		||||
			bounce = minBounce;
 | 
			
		||||
		}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (player->curshield == KSHIELD_BUBBLE)
 | 
			
		||||
		{
 | 
			
		||||
			S_StartSound(player->mo, sfx_s3k44);
 | 
			
		||||
			P_InstaThrust(player->mo, player->mo->angle, 11*max(player->speed, abs(player->fastfall))/10);
 | 
			
		||||
			bounce += 3 * player->mo->scale;
 | 
			
		||||
			bounce += 3 * mapobjectscale;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										22
									
								
								src/p_mobj.c
									
										
									
									
									
								
							
							
						
						
									
										22
									
								
								src/p_mobj.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -10404,6 +10404,28 @@ void P_SceneryThinker(mobj_t *mobj)
 | 
			
		|||
			mobj->renderflags |= RF_DONTDRAW;
 | 
			
		||||
		else
 | 
			
		||||
			mobj->renderflags &= ~RF_DONTDRAW;
 | 
			
		||||
 | 
			
		||||
		if (!P_MobjWasRemoved(mobj->target))
 | 
			
		||||
		{
 | 
			
		||||
			// Cast like a shadow on the ground
 | 
			
		||||
			P_MoveOrigin(mobj, mobj->target->x, mobj->target->y, mobj->target->floorz);
 | 
			
		||||
			mobj->standingslope = mobj->target->standingslope;
 | 
			
		||||
 | 
			
		||||
			if (!P_IsObjectOnGround(mobj->target) && mobj->target->momz < -24 * mapobjectscale)
 | 
			
		||||
			{
 | 
			
		||||
				// Going down, falling through hoops
 | 
			
		||||
				mobj_t *ghost = P_SpawnGhostMobj(mobj);
 | 
			
		||||
 | 
			
		||||
				ghost->z = mobj->target->z;
 | 
			
		||||
				ghost->momz = -(mobj->target->momz);
 | 
			
		||||
				ghost->standingslope = NULL;
 | 
			
		||||
 | 
			
		||||
				ghost->renderflags = mobj->renderflags;
 | 
			
		||||
				ghost->fuse = 16;
 | 
			
		||||
				ghost->extravalue1 = 1;
 | 
			
		||||
				ghost->extravalue2 = 0;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (mobj->type == MT_RANDOMAUDIENCE)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue