Comp Reversions

This commit is contained in:
ChocoTaco1 2025-09-27 17:49:57 -04:00
parent d5a0cad2a2
commit e96039866f
11 changed files with 135 additions and 150 deletions

View file

@ -2019,7 +2019,7 @@ function CTFGame::awardScoreKill(%game, %killerID)
function checkVehicleCamping( %team ) function checkVehicleCamping( %team )
{ {
%position = $flagPos[%team]; %position = $flagPos[%team];
%radius = 15; %radius = 5;
InitContainerRadiusSearch(%position, %radius, $TypeMasks::VehicleObjectType ); InitContainerRadiusSearch(%position, %radius, $TypeMasks::VehicleObjectType );
while ((%vehicle = containerSearchNext()) != 0) while ((%vehicle = containerSearchNext()) != 0)

View file

@ -323,17 +323,6 @@ function serverCmdScopeCommanderMap(%client, %scope)
%client.player.ccActive = %scope; %client.player.ccActive = %scope;
} }
//Mortar Throw Reload Fix
// function ShapeBase::throwWeapon(%this)
// {
// if((%this.getMountedImage($WeaponSlot).getName() $= "MortarImage" || %this.getMountedImage($WeaponSlot).getName() $= "MissileLauncherImage" || %this.getMountedImage($WeaponSlot).getName() $= "ShockLanceImage") &&
// (%this.getImageState($WeaponSlot) $= "Reload" || %this.getImageState($WeaponSlot) $= "Fire")){
// return;
// }
// parent::throwWeapon(%this);
// }
// Added object check // Added object check
function VehicleData::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %theClient, %proj) function VehicleData::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %theClient, %proj)

View file

@ -459,9 +459,9 @@ function DefaultGame::createPlayer(%game, %client, %spawnLoc, %respawn)
if(%respawn) if(%respawn)
{ {
%player.setInvincible(true); %player.setInvincible(true);
%player.setCloaked(true); // z0dd - ZOD, 8/6/02. Don't spawn players cloaked //was // //%player.setCloaked(true); // z0dd - ZOD, 8/6/02. Don't spawn players cloaked
%player.setInvincibleMode($InvincibleTime,0.02); %player.setInvincibleMode($InvincibleTime,0.02);
%player.respawnCloakThread = %player.schedule($InvincibleTime * 50, "setRespawnCloakOff"); // z0dd - ZOD, 8/6/02. Don't spawn players cloaked //was 1000 //%player.respawnCloakThread = %player.schedule($InvincibleTime * 50, "setRespawnCloakOff"); // z0dd - ZOD, 8/6/02. Don't spawn players cloaked //was 1000
%player.schedule($InvincibleTime * 1000, "setInvincible", false); %player.schedule($InvincibleTime * 1000, "setInvincible", false);
} }

View file

@ -34,7 +34,7 @@ datablock AudioDescription(CloakLooping3d)
is3D = true; is3D = true;
minDistance= 10.0; minDistance= 10.0;
MaxDistance= 55.0; //Was 50 MaxDistance= 50.0;
type = $EffectAudioType; type = $EffectAudioType;
environmentLevel = 1.0; environmentLevel = 1.0;
}; };

View file

@ -64,7 +64,7 @@ datablock ItemData(SensorJammerPack)
}; };
datablock SensorData(JammerSensorObjectPassive) //v2 was commented out... datablock SensorData(JammerSensorObjectPassive)
{ {
// same detection info as 'PlayerObject' sensorData // same detection info as 'PlayerObject' sensorData
detects = true; detects = true;
@ -76,7 +76,7 @@ datablock SensorData(JammerSensorObjectPassive) //v2 was commented out...
detectFOVPercent = 1.3; detectFOVPercent = 1.3;
useObjectFOV = true; useObjectFOV = true;
detectscloaked = 1; //v2 //detectscloaked = 1; //v2
jams = true; jams = true;
jamsOnlyGroup = true; jamsOnlyGroup = true;
@ -96,52 +96,55 @@ datablock SensorData(JammerSensorObjectActive)
detectFOVPercent = 1.3; detectFOVPercent = 1.3;
useObjectFOV = true; useObjectFOV = true;
detectscloaked = 1; //v2 //detectscloaked = 1; //v2
jams = true; jams = true;
jamsOnlyGroup = true; jamsOnlyGroup = true;
jamsUsingLOS = true; jamsUsingLOS = true;
jamRadius = 45; //was 30 jamRadius = 30;
}; };
function SensorJammerPackImage::onMount(%data, %obj, %slot) function SensorJammerPackImage::onMount(%data, %obj, %slot)
{ {
setTargetSensorData(%obj.client.target, JammerSensorObjectPassive); //v2 setTargetSensorData(%obj.client.target, JammerSensorObjectPassive);
%obj.setImageTrigger(%slot, false);
commandToClient( %obj.client, 'setSenJamIconOff' );
%obj.setJammerFX(false);
} }
function deactivateJammer(%data, %obj, %slot) function SensorJammerPackImage::onUnmount(%data, %obj, %slot)
{ {
SensorJammerPackImage::onDeactivate(%data, %obj, %slot);
}
function SensorJammerPackImage::onUnmount(%data, %obj, %slot) //v2
{
%obj.setImageTrigger(%slot, false);
setTargetSensorData(%obj.client.target, PlayerSensor); setTargetSensorData(%obj.client.target, PlayerSensor);
%obj.setImageTrigger(%slot, false);
} }
function SensorJammerPackImage::onActivate(%data, %obj, %slot) function SensorJammerPackImage::onActivate(%data, %obj, %slot)
{ {
messageClient(%obj.client, 'MsgSensorJammerPackOn', '\c2Sensor jammer pack on.'); messageClient(%obj.client, 'MsgSensorJammerPackOn', '\c2Sensor jammer pack on.');
setTargetSensorData(%obj.client.target, JammerSensorObjectActive); setTargetSensorData(%obj.client.target, JammerSensorObjectActive);
// z0dd - ZOD, 9/29/02. Removed T2 demo code from here
commandToClient( %obj.client, 'setSenJamIconOn' ); commandToClient( %obj.client, 'setSenJamIconOn' );
%obj.setJammerFX( true ); %obj.setJammerFX( true );
} }
function SensorJammerPackImage::onDeactivate(%data, %obj, %slot) function SensorJammerPackImage::onDeactivate(%data, %obj, %slot)
{ {
messageClient(%obj.client, 'MsgSensorJammerPackOff', '\c2Sensor jammer pack off.'); messageClient(%obj.client, 'MsgSensorJammerPackOff', '\c2Sensor jammer pack off.');
setTargetSensorData(%obj.client.target, PlayerSensor); //v2 H bug fix
%obj.setImageTrigger(%slot, false); %obj.setImageTrigger(%slot, false);
setTargetSensorData(%obj.client.target, JammerSensorObjectPassive); //v2 was PlayerSensor
// ----------------------------------------------------------------------
// z0dd - ZOD, 4/25/02. This function is actually getting called AFTER
// ::onUnmount. We must check to see what the players current sensor data
// is, then if it is NOT PlayerSensor, set to passive jam, bug fix.
if(getTargetSensorData(%obj.client.target).getName() !$= "PlayerSensor")
setTargetSensorData(%obj.client.target, JammerSensorObjectPassive);
// ----------------------------------------------------------------------
// z0dd - ZOD, 9/29/02. Removed T2 demo code from here
commandToClient( %obj.client, 'setSenJamIconOff' ); commandToClient( %obj.client, 'setSenJamIconOff' );
%obj.setJammerFX( false ); %obj.setJammerFX( false );
} }
// z0dd - ZOD, 5/18/03. Removed functions, created parent. Streamline.
function SensorJammerPack::onPickup(%this, %obj, %shape, %amount) //function SensorJammerPack::onPickup(%this, %obj, %shape, %amount)
{ //{
//Nope // created to prevent console errors
} //}

View file

@ -1085,8 +1085,8 @@ datablock ParticleData(LightPuff)
textureName = "particleTest"; textureName = "particleTest";
colors[0] = "0.46 0.36 0.26 0.4"; colors[0] = "0.46 0.36 0.26 0.4";
colors[1] = "0.46 0.46 0.36 0.0"; colors[1] = "0.46 0.46 0.36 0.0";
sizes[0] = 0.8; //was 0.4 sizes[0] = 0.4;
sizes[1] = 1.4; //was 1.0 sizes[1] = 1.0;
}; };
datablock ParticleEmitterData(LightPuffEmitter) datablock ParticleEmitterData(LightPuffEmitter)
@ -1123,9 +1123,9 @@ datablock ParticleData(LiftoffDust)
colors[0] = "0.46 0.36 0.26 0.0"; colors[0] = "0.46 0.36 0.26 0.0";
colors[1] = "0.46 0.46 0.36 0.4"; colors[1] = "0.46 0.46 0.36 0.4";
colors[2] = "0.46 0.46 0.36 0.0"; colors[2] = "0.46 0.46 0.36 0.0";
sizes[0] = 0.6; //was 0.2 sizes[0] = 0.2;
sizes[1] = 1.0; //was 0.6 sizes[1] = 0.6;
sizes[2] = 1.4; //was 1.0 sizes[2] = 1.0;
times[0] = 0.0; times[0] = 0.0;
times[1] = 0.5; times[1] = 0.5;
times[2] = 1.0; times[2] = 1.0;
@ -1765,7 +1765,7 @@ datablock PlayerData(HeavyMaleHumanArmor) : HeavyPlayerDamageProfile
//Value changed halfway between base and classic. //Value changed halfway between base and classic.
//Classic is 54, Base is 75 //Classic is 54, Base is 75
//Shield breaks right at two mine-disc //Shield breaks right at two mine-disc
energyPerDamagePoint = 60.0; // shield energy required to block one point of damage energyPerDamagePoint = 54.0; // shield energy required to block one point of damage
rechargeRate = 0.256; rechargeRate = 0.256;
jetForce = 29.58 * 180; jetForce = 29.58 * 180;

View file

@ -235,7 +235,7 @@ datablock HoverVehicleData(AssaultVehicle) : TankDamageProfile
isShielded = true; isShielded = true;
rechargeRate = 1.0; rechargeRate = 1.0;
energyPerDamagePoint = 142; //was 135 energyPerDamagePoint = 135;
maxEnergy = 400; maxEnergy = 400;
minJetEnergy = 15; minJetEnergy = 15;
jetEnergyDrain = 2.0; jetEnergyDrain = 2.0;

View file

@ -37,7 +37,7 @@ datablock ItemData(FlashGrenadeThrown)
radiusDamageType = $DamageType::Grenade; radiusDamageType = $DamageType::Grenade;
kickBackStrength = 1000; kickBackStrength = 1000;
computeCRC = true; computeCRC = true;
maxWhiteout = 0.78; // z0dd - ZOD, 9/8/02. Was 1.2 //Reduced. Was 0.9 Choco maxWhiteout = 0.9; // z0dd - ZOD, 9/8/02. Was 1.2
}; };
datablock ItemData(FlashGrenade) datablock ItemData(FlashGrenade)

View file

@ -2,6 +2,37 @@
// Missile launcher // Missile launcher
//-------------------------------------- //--------------------------------------
//--------------------------------------------------------------------------
// Force-Feedback Effects
//--------------------------------------
datablock EffectProfile(MissileSwitchEffect)
{
effectname = "weapons/missile_launcher_activate";
minDistance = 2.5;
maxDistance = 2.5;
};
datablock EffectProfile(MissileFireEffect)
{
effectname = "weapons/missile_fire";
minDistance = 2.5;
maxDistance = 5.0;
};
datablock EffectProfile(MissileDryFireEffect)
{
effectname = "weapons/missile_launcher_dryfire";
minDistance = 2.5;
maxDistance = 2.5;
};
datablock EffectProfile(MissileExplosionEffect)
{
effectname = "explosions/explosion.xpl23";
minDistance = 10;
maxDistance = 30;
};
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Sounds // Sounds
//-------------------------------------- //--------------------------------------
@ -10,6 +41,7 @@ datablock AudioProfile(MissileSwitchSound)
filename = "fx/weapons/missile_launcher_activate.wav"; filename = "fx/weapons/missile_launcher_activate.wav";
description = AudioClosest3d; description = AudioClosest3d;
preload = true; preload = true;
effect = MissileSwitchEffect;
}; };
datablock AudioProfile(MissileFireSound) datablock AudioProfile(MissileFireSound)
@ -17,6 +49,7 @@ datablock AudioProfile(MissileFireSound)
filename = "fx/weapons/missile_fire.WAV"; filename = "fx/weapons/missile_fire.WAV";
description = AudioDefault3d; description = AudioDefault3d;
preload = true; preload = true;
effect = MissileFireEffect;
}; };
datablock AudioProfile(MissileProjectileSound) datablock AudioProfile(MissileProjectileSound)
@ -45,6 +78,7 @@ datablock AudioProfile(MissileExplosionSound)
filename = "fx/explosions/explosion.xpl23.wav"; filename = "fx/explosions/explosion.xpl23.wav";
description = AudioBIGExplosion3d; description = AudioBIGExplosion3d;
preload = true; preload = true;
effect = MissileExplosionEffect;
}; };
datablock AudioProfile(MissileDryFireSound) datablock AudioProfile(MissileDryFireSound)
@ -52,6 +86,7 @@ datablock AudioProfile(MissileDryFireSound)
filename = "fx/weapons/missile_launcher_dryfire.wav"; filename = "fx/weapons/missile_launcher_dryfire.wav";
description = AudioClose3d; description = AudioClose3d;
preload = true; preload = true;
effect = MissileDryFireEffect;
}; };
@ -727,9 +762,9 @@ datablock ShapeBaseImageData(MissileLauncherImage)
stateSequence[0] = "Activate"; stateSequence[0] = "Activate";
stateSound[0] = MissileSwitchSound; stateSound[0] = MissileSwitchSound;
stateName[1] = "ActivateReady"; stateName[1] = "ActivateReady";
stateTransitionOnAmmo[1] = "Ready"; stateTransitionOnLoaded[1] = "Ready";
stateTransitionOnNoAmmo[1] = "FirstLoad"; stateTransitionOnNoAmmo[1] = "NoAmmo";
stateName[2] = "Ready"; stateName[2] = "Ready";
stateTransitionOnNoAmmo[2] = "NoAmmo"; stateTransitionOnNoAmmo[2] = "NoAmmo";
@ -792,9 +827,6 @@ datablock ShapeBaseImageData(MissileLauncherImage)
stateSequence[10] = "Fire"; stateSequence[10] = "Fire";
stateScript[10] = "onDumbFire"; stateScript[10] = "onDumbFire";
stateSound[10] = MissileFireSound; stateSound[10] = MissileFireSound;
stateName[11] = "FirstLoad";
stateTransitionOnAmmo[11] = "Ready";
}; };
function MissileLauncherImage::onDumbFire(%data,%obj,%slot) function MissileLauncherImage::onDumbFire(%data,%obj,%slot)
@ -815,42 +847,3 @@ function MissileLauncherImage::onDumbFire(%data,%obj,%slot)
%obj.decInventory(%data.ammo, 1); %obj.decInventory(%data.ammo, 1);
return %p; return %p;
} }
function MissileLauncherImage::onUnmount(%this,%obj,%slot){
parent::onUnmount(%this,%obj,%slot);
if(isEventPending(%obj.reloadDelaySch))
cancel(%obj.reloadDelaySch);
}
function MissileLauncherImage::onMount(%this,%obj,%slot){
if(%obj.getClassName() !$= "Player")
return;
if (%this.armthread $= "")
%obj.setArmThread(look);
else
%obj.setArmThread(%this.armThread);
if(%obj.getMountedImage($WeaponSlot).ammo !$= ""){
if (%obj.getInventory(%this.ammo)){
%fireAndReloadTime = mFloor((%this.stateTimeoutValue[4] + %this.stateTimeoutValue[3]) * 1000);
if(%obj.lfireTime[%this.getName()] && (getSimTime() - %obj.lfireTime[%this.getName()]) < %fireAndReloadTime){
if(isEventPending(%obj.reloadDelaySch)){
cancel(%obj.reloadDelaySch);
}
%time = mFloor(%fireAndReloadTime - (getSimTime() - %obj.lfireTime[%this.getName()]));
%obj.reloadDelaySch = schedule(%time, 0, "ammoStateDelay", %obj, %slot, true);
}
else{
%obj.setImageAmmo(%slot,true);
}
}
}
%obj.client.setWeaponsHudActive(%this.item);
if(%obj.getMountedImage($WeaponSlot).ammo !$= "")
%obj.client.setAmmoHudCount(%obj.getInventory(%this.ammo));
else
%obj.client.setAmmoHudCount(-1);
}

View file

@ -2,6 +2,44 @@
// Mortar // Mortar
//-------------------------------------- //--------------------------------------
//--------------------------------------------------------------------------
// Force-Feedback Effects
//--------------------------------------
datablock EffectProfile(MortarSwitchEffect)
{
effectname = "weapons/mortar_activate";
minDistance = 2.5;
maxDistance = 2.5;
};
datablock EffectProfile(MortarFireEffect)
{
effectname = "weapons/mortar_fire";
minDistance = 2.5;
maxDistance = 5.0;
};
datablock EffectProfile(MortarReloadEffect)
{
effectname = "weapons/mortar_reload";
minDistance = 2.5;
maxDistance = 2.5;
};
datablock EffectProfile(MortarDryFireEffect)
{
effectname = "weapons/mortar_dryfire";
minDistance = 2.5;
maxDistance = 2.5;
};
datablock EffectProfile(MortarExplosionEffect)
{
effectname = "explosions/explosion.xpl03";
minDistance = 30;
maxDistance = 65;
};
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Sounds // Sounds
//-------------------------------------- //--------------------------------------
@ -10,6 +48,7 @@ datablock AudioProfile(MortarSwitchSound)
filename = "fx/weapons/mortar_activate.wav"; filename = "fx/weapons/mortar_activate.wav";
description = AudioClosest3d; description = AudioClosest3d;
preload = true; preload = true;
effect = MortarSwitchEffect;
}; };
datablock AudioProfile(MortarReloadSound) datablock AudioProfile(MortarReloadSound)
@ -17,6 +56,7 @@ datablock AudioProfile(MortarReloadSound)
filename = "fx/weapons/mortar_reload.wav"; filename = "fx/weapons/mortar_reload.wav";
description = AudioClosest3d; description = AudioClosest3d;
preload = true; preload = true;
effect = MortarReloadEffect;
}; };
datablock AudioProfile(MortarIdleSound) datablock AudioProfile(MortarIdleSound)
@ -25,6 +65,7 @@ datablock AudioProfile(MortarIdleSound)
filename = "fx/weapons/plasma_rifle_idle.wav"; filename = "fx/weapons/plasma_rifle_idle.wav";
description = ClosestLooping3d; description = ClosestLooping3d;
preload = true; preload = true;
effect = PlasmaIdleEffect;
}; };
datablock AudioProfile(MortarFireSound) datablock AudioProfile(MortarFireSound)
@ -32,6 +73,7 @@ datablock AudioProfile(MortarFireSound)
filename = "fx/weapons/mortar_fire.wav"; filename = "fx/weapons/mortar_fire.wav";
description = AudioDefault3d; description = AudioDefault3d;
preload = true; preload = true;
effect = MortarFireEffect;
}; };
datablock AudioProfile(MortarProjectileSound) datablock AudioProfile(MortarProjectileSound)
@ -46,6 +88,7 @@ datablock AudioProfile(MortarExplosionSound)
filename = "fx/weapons/mortar_explode.wav"; filename = "fx/weapons/mortar_explode.wav";
description = AudioBIGExplosion3d; description = AudioBIGExplosion3d;
preload = true; preload = true;
effect = MortarExplosionEffect;
}; };
datablock AudioProfile(UnderwaterMortarExplosionSound) datablock AudioProfile(UnderwaterMortarExplosionSound)
@ -53,6 +96,7 @@ datablock AudioProfile(UnderwaterMortarExplosionSound)
filename = "fx/weapons/mortar_explode_UW.wav"; filename = "fx/weapons/mortar_explode_UW.wav";
description = AudioBIGExplosion3d; description = AudioBIGExplosion3d;
preload = true; preload = true;
effect = MortarExplosionEffect;
}; };
datablock AudioProfile(MortarDryFireSound) datablock AudioProfile(MortarDryFireSound)
@ -60,6 +104,7 @@ datablock AudioProfile(MortarDryFireSound)
filename = "fx/weapons/mortar_dryfire.wav"; filename = "fx/weapons/mortar_dryfire.wav";
description = AudioClose3d; description = AudioClose3d;
preload = true; preload = true;
effect = MortarDryFireEffect;
}; };
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -740,8 +785,8 @@ datablock ShapeBaseImageData(MortarImage)
stateSound[0] = MortarSwitchSound; stateSound[0] = MortarSwitchSound;
stateName[1] = "ActivateReady"; stateName[1] = "ActivateReady";
stateTransitionOnAmmo[1] = "Ready"; stateTransitionOnLoaded[1] = "Ready";
stateTransitionOnNoAmmo[1] = "FirstLoad"; stateTransitionOnNoAmmo[1] = "NoAmmo";
stateName[2] = "Ready"; stateName[2] = "Ready";
stateTransitionOnNoAmmo[2] = "NoAmmo"; stateTransitionOnNoAmmo[2] = "NoAmmo";
@ -775,50 +820,4 @@ datablock ShapeBaseImageData(MortarImage)
stateSound[6] = MortarDryFireSound; stateSound[6] = MortarDryFireSound;
stateTimeoutValue[6] = 1.5; stateTimeoutValue[6] = 1.5;
stateTransitionOnTimeout[6] = "NoAmmo"; stateTransitionOnTimeout[6] = "NoAmmo";
stateName[7] = "FirstLoad";
stateTransitionOnAmmo[7] = "Ready";
}; };
function MortarImage::onUnmount(%this,%obj,%slot){
parent::onUnmount(%this,%obj,%slot);
if(isEventPending(%obj.reloadDelaySch))
cancel(%obj.reloadDelaySch);
}
function MortarImage::onMount(%this,%obj,%slot){
if(%obj.getClassName() !$= "Player")
return;
if (%this.armthread $= "")
%obj.setArmThread(look);
else
%obj.setArmThread(%this.armThread);
if(%obj.getMountedImage($WeaponSlot).ammo !$= ""){
if (%obj.getInventory(%this.ammo)){
%fireAndReloadTime = mFloor((%this.stateTimeoutValue[4] + %this.stateTimeoutValue[3]) * 1000);
if(%obj.lfireTime[%this.getName()] && (getSimTime() - %obj.lfireTime[%this.getName()]) < %fireAndReloadTime){
if(isEventPending(%obj.reloadDelaySch)){
cancel(%obj.reloadDelaySch);
}
%time = mFloor(%fireAndReloadTime - (getSimTime() - %obj.lfireTime[%this.getName()]));
%obj.reloadDelaySch = schedule(%time, 0, "ammoStateDelay", %obj, %slot, true);
}
else{
%obj.setImageAmmo(%slot,true);
}
}
}
%obj.client.setWeaponsHudActive(%this.item);
if(%obj.getMountedImage($WeaponSlot).ammo !$= "")
%obj.client.setAmmoHudCount(%obj.getInventory(%this.ammo));
else
%obj.client.setAmmoHudCount(-1);
}
function ammoStateDelay(%obj, %slot, %state){
if(isObject(%obj) && %obj.getState() !$= "Dead")
%obj.setImageAmmo(%slot, %state);
}

View file

@ -45,19 +45,20 @@ Discord: [Tribes 2 Discord](https://playt2.com/discord)
--- ---
### Important Gameplay Changes over stock classic ### Important Gameplay Changes over stock classic
- OG blaster buffed for Heavy Armors - OG blaster buffed against Heavy Armors (Not Tournament Mode Only)
- No Vehicle Zone around flag is bigger 5 >> 15
- Heavy Shield Nerfed (54 to block 1 DMG, is now 60)
- Max FOV 120 >> 138 (For Wide Screens) - Max FOV 120 >> 138 (For Wide Screens)
- Item respawn time can be changed (default 30) - Item respawn time can be changed (Optional)
- Cloak Sound 50m >> 55m - All water viscosity follows a global preset (3)
- Bigger ground dust puffs (For cloak) 0.4 larger - <del>No Vehicle Zone around flag is bigger 5 >> 15</del>
- Sensor Jammer jam radius is buffed to jam cloaks 30 >> 45 - <del>Heavy Shield Nerfed (54 to block 1 DMG, is now 60)</del>
- Sensor Jammer can passively see cloaker's triangle - <del>Cloak Sound 50m >> 55m</del>
- Mortor reload rework (Player can throw, but must wait until reload time has passed) - <del>Bigger ground dust puffs (For cloak) 0.4 larger</del>
- Tank Shield Nerf (135 to block 1 DMG, is now 142) - <del>Sensor Jammer jam radius is buffed to jam cloaks 30 >> 45</del>
- Whiteout grenades are less seizurely (Due to spamming) 0.9 >> 0.78 - <del>Sensor Jammer can passively see cloaker's triangle</del>
- All water viscosity follows a global preset - <del>Mortor reload rework (Player can throw, but must wait until reload time has passed)</del>
- <del>Tank Shield Nerf (135 to block 1 DMG, is now 142)</del>
- <del>Whiteout grenades are less seizurely (Due to spamming) 0.9 >> 0.78</del>
- <del>Spawn fade-in effect</del>
--- ---