@@ -84,9 +84,8 @@ void CCharacter::HandleJetpack()
8484 {
8585 if (m_Core.m_Jetpack )
8686 {
87- float Strength = GetTuning (m_TuneZone)->m_JetpackStrength ;
88- if (!m_TuneZone)
89- Strength = m_LastJetpackStrength;
87+ int TuneZone = GetOverriddenTuneZone ();
88+ float Strength = TuneZone ? GetTuning (TuneZone)->m_JetpackStrength : m_LastJetpackStrength;
9089 TakeDamage (Direction * -1 .0f * (Strength / 100 .0f / 6 .11f ), 0 , GetCid (), m_Core.m_ActiveWeapon );
9190 }
9291 }
@@ -130,7 +129,7 @@ void CCharacter::HandleNinja()
130129 // Set velocity
131130 m_Core.m_Vel = m_Core.m_Ninja .m_ActivationDir * g_pData->m_Weapons .m_Ninja .m_Velocity ;
132131 vec2 OldPos = m_Pos;
133- Collision ()->MoveBox (&m_Core.m_Pos , &m_Core.m_Vel , vec2 (m_ProximityRadius, m_ProximityRadius), vec2 (GetTuning (m_TuneZone) ->m_GroundElasticityX , GetTuning (m_TuneZone )->m_GroundElasticityY ));
132+ Collision ()->MoveBox (&m_Core.m_Pos , &m_Core.m_Vel , vec2 (m_ProximityRadius, m_ProximityRadius), vec2 (GetTuning (GetOverriddenTuneZone ()) ->m_GroundElasticityX , GetTuning (GetOverriddenTuneZone () )->m_GroundElasticityY ));
134133
135134 // reset velocity so the client doesn't predict stuff
136135 m_Core.m_Vel = vec2 (0 .f , 0 .f );
@@ -323,7 +322,7 @@ void CCharacter::FireWeapon()
323322 else
324323 Dir = vec2 (0 .f , -1 .f );
325324
326- float Strength = GetTuning (m_TuneZone )->m_HammerStrength ;
325+ float Strength = GetTuning (GetOverriddenTuneZone () )->m_HammerStrength ;
327326
328327 vec2 Temp = pTarget->m_Core .m_Vel + normalize (Dir + vec2 (0 .f , -1 .1f )) * 10 .0f ;
329328 Temp = ClampVel (pTarget->m_MoveRestrictions , Temp);
@@ -357,7 +356,7 @@ void CCharacter::FireWeapon()
357356 // if we Hit anything, we have to wait for the reload
358357 if (Hits)
359358 {
360- float FireDelay = GetTuning (m_TuneZone )->m_HammerHitFireDelay ;
359+ float FireDelay = GetTuning (GetOverriddenTuneZone () )->m_HammerHitFireDelay ;
361360 m_ReloadTimer = FireDelay * GameWorld ()->GameTickSpeed () / 1000 ;
362361 }
363362 }
@@ -367,7 +366,7 @@ void CCharacter::FireWeapon()
367366 {
368367 if (!m_Core.m_Jetpack )
369368 {
370- int Lifetime = (int )(GameWorld ()->GameTickSpeed () * GetTuning (m_TuneZone )->m_GunLifetime );
369+ int Lifetime = (int )(GameWorld ()->GameTickSpeed () * GetTuning (GetOverriddenTuneZone () )->m_GunLifetime );
371370
372371 new CProjectile (
373372 GameWorld (),
@@ -412,7 +411,7 @@ void CCharacter::FireWeapon()
412411 }
413412 else if (GameWorld ()->m_WorldConfig .m_IsDDRace )
414413 {
415- float LaserReach = GetTuning (m_TuneZone )->m_LaserReach ;
414+ float LaserReach = GetTuning (GetOverriddenTuneZone () )->m_LaserReach ;
416415
417416 new CLaser (GameWorld (), m_Pos, Direction, LaserReach, GetCid (), WEAPON_SHOTGUN);
418417 }
@@ -421,7 +420,7 @@ void CCharacter::FireWeapon()
421420
422421 case WEAPON_GRENADE:
423422 {
424- int Lifetime = (int )(GameWorld ()->GameTickSpeed () * GetTuning (m_TuneZone )->m_GrenadeLifetime );
423+ int Lifetime = (int )(GameWorld ()->GameTickSpeed () * GetTuning (GetOverriddenTuneZone () )->m_GrenadeLifetime );
425424
426425 new CProjectile (
427426 GameWorld (),
@@ -439,7 +438,7 @@ void CCharacter::FireWeapon()
439438
440439 case WEAPON_LASER:
441440 {
442- float LaserReach = GetTuning (m_TuneZone )->m_LaserReach ;
441+ float LaserReach = GetTuning (GetOverriddenTuneZone () )->m_LaserReach ;
443442
444443 new CLaser (GameWorld (), m_Pos, Direction, LaserReach, GetCid (), WEAPON_LASER);
445444 }
@@ -462,7 +461,7 @@ void CCharacter::FireWeapon()
462461 if (!m_ReloadTimer)
463462 {
464463 float FireDelay;
465- GetTuning (m_TuneZone )->Get (38 + m_Core.m_ActiveWeapon , &FireDelay);
464+ GetTuning (GetOverriddenTuneZone () )->Get (38 + m_Core.m_ActiveWeapon , &FireDelay);
466465
467466 m_ReloadTimer = FireDelay * GameWorld ()->GameTickSpeed () / 1000 ;
468467 }
@@ -952,8 +951,8 @@ void CCharacter::HandleTuneLayer()
952951 SetTuneZone (GameWorld ()->m_WorldConfig .m_UseTuneZones ? Collision ()->IsTune (CurrentIndex) : 0 );
953952
954953 if (m_IsLocal)
955- GameWorld ()->m_Core .m_aTuning [g_Config.m_ClDummy ] = *GetTuning (m_TuneZone ); // throw tunings (from specific zone if in a tunezone) into gamecore if the character is local
956- m_Core.m_Tuning = *GetTuning (m_TuneZone );
954+ GameWorld ()->m_Core .m_aTuning [g_Config.m_ClDummy ] = *GetTuning (GetOverriddenTuneZone () ); // throw tunings (from specific zone if in a tunezone) into gamecore if the character is local
955+ m_Core.m_Tuning = *GetTuning (GetOverriddenTuneZone () );
957956}
958957
959958void CCharacter::DDRaceTick ()
@@ -1240,6 +1239,7 @@ void CCharacter::Read(CNetObj_Character *pChar, CNetObj_DDNetCharacter *pExtende
12401239
12411240 m_TeleCheckpoint = pExtended->m_TeleCheckpoint ;
12421241 m_StrongWeakId = pExtended->m_StrongWeakId ;
1242+ m_TuneZoneOverride = pExtended->m_TuneZoneOverride ;
12431243
12441244 const bool Ninja = (pExtended->m_Flags & CHARACTERFLAG_WEAPON_NINJA) != 0 ;
12451245 if (Ninja && m_Core.m_ActiveWeapon != WEAPON_NINJA)
@@ -1341,6 +1341,8 @@ void CCharacter::Read(CNetObj_Character *pChar, CNetObj_DDNetCharacter *pExtende
13411341 m_Core.m_DeepFrozen = false ;
13421342 UnFreeze ();
13431343 }
1344+
1345+ m_TuneZoneOverride = -1 ;
13441346 }
13451347
13461348 vec2 PosBefore = m_Pos;
@@ -1394,7 +1396,7 @@ void CCharacter::Read(CNetObj_Character *pChar, CNetObj_DDNetCharacter *pExtende
13941396 if (maximum (m_LastTuneZoneTick, m_LastWeaponSwitchTick) + GameWorld ()->GameTickSpeed () < GameWorld ()->GameTick ())
13951397 {
13961398 float FireDelay;
1397- GetTuning (m_TuneZone )->Get (38 + m_Core.m_ActiveWeapon , &FireDelay);
1399+ GetTuning (GetOverriddenTuneZone () )->Get (38 + m_Core.m_ActiveWeapon , &FireDelay);
13981400 const int FireDelayTicks = FireDelay * GameWorld ()->GameTickSpeed () / 1000 ;
13991401 m_ReloadTimer = maximum (0 , m_AttackTick + FireDelayTicks - GameWorld ()->GameTick ());
14001402 }
@@ -1425,6 +1427,16 @@ void CCharacter::SetTuneZone(int Zone)
14251427 m_LastTuneZoneTick = GameWorld ()->GameTick ();
14261428}
14271429
1430+ int CCharacter::GetOverriddenTuneZone () const
1431+ {
1432+ return m_TuneZoneOverride < 0 ? m_TuneZone : m_TuneZoneOverride;
1433+ }
1434+
1435+ int CCharacter::GetPureTuneZone () const
1436+ {
1437+ return m_TuneZone;
1438+ }
1439+
14281440CCharacter::~CCharacter ()
14291441{
14301442 if (GameWorld ())
0 commit comments