Skip to content
This repository was archived by the owner on Mar 23, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions Content.Client/Light/AmbientOcclusionOverlay.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ public sealed class AmbientOcclusionOverlay : Overlay
// Couldn't figure out a way to avoid this so if you can then please do.
private IRenderTexture? _aoStencilTarget;

private bool _drawing; // Change-Forge

public AmbientOcclusionOverlay()
{
IoCManager.InjectDependencies(this);
Expand All @@ -41,6 +43,14 @@ public AmbientOcclusionOverlay()

protected override void Draw(in OverlayDrawArgs args)
{
//Change-Forge-Start
// Prevent recursive drawing.
if (_drawing)
{
return;
}
//Change-Forge-End

/*
* tl;dr
* - we draw a black square on each "ambient occlusion" entity.
Expand Down Expand Up @@ -88,6 +98,7 @@ protected override void Draw(in OverlayDrawArgs args)
}

// Draw the texture data to the texture.
_drawing = true; // Change-Forge
args.WorldHandle.RenderInRenderTarget(_aoTarget,
() =>
{
Expand Down Expand Up @@ -141,6 +152,7 @@ protected override void Draw(in OverlayDrawArgs args)
// Draw the Blurred AO texture finally.
worldHandle.UseShader(_proto.Index(StencilEqualDrawShader).Instance());
worldHandle.DrawTextureRect(_aoTarget!.Texture, worldBounds, color);
_drawing = false; // Change-Forge

args.WorldHandle.SetTransform(Matrix3x2.Identity);
args.WorldHandle.UseShader(null);
Expand Down
16 changes: 16 additions & 0 deletions Content.Server/Chat/Systems/ChatSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -567,6 +567,14 @@ private void SendEntityWhisper(

var ev = new EntitySpokeEvent(source, message, channel, obfuscatedMessage);
RaiseLocalEvent(source, ev, true);

// Corvax-Forge-start
// To avoid logging any messages sent by entities that are not players.
if (!HasComp<ActorComponent>(source))
return;
// Corvax-Forge-end


if (!hideLog)
if (originalMessage == message)
{
Expand Down Expand Up @@ -620,6 +628,14 @@ private void SendEntityEmote(


SendInVoiceRange(ChatChannel.Emotes, action, wrappedMessage, source, range, author);

// Corvax-Forge-start
// To avoid logging any messages sent by entities that are not players.
if (!HasComp<ActorComponent>(source))
return;
// Corvax-Forge-end


if (!hideLog)
if (name != Name(source))
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Emote from {ToPrettyString(source):user} as {name}: {action}");
Expand Down
20 changes: 11 additions & 9 deletions Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ private void InitializeImpact()

Subs.CVar(_cfg, CCVars.ImpactEnabled, value => _enabled = value, true);
Subs.CVar(_cfg, CCVars.MinimumImpactInertia, value => _minimumImpactInertia = value, true);
Subs.CVar(_cfg, CCVars.MinimumImpactInertia, value => _minimumImpactInertia = value, true);
Subs.CVar(_cfg, CCVars.MinimumImpactVelocity, value => _minimumImpactVelocity = value, true);
Subs.CVar(_cfg, CCVars.TileBreakEnergyMultiplier, value => _tileBreakEnergyMultiplier = value, true);
Subs.CVar(_cfg, CCVars.ImpactDamageMultiplier, value => _damageMultiplier = value, true);
Expand Down Expand Up @@ -142,7 +141,7 @@ private void OnShuttleCollide(EntityUid uid, ShuttleComponent component, ref Sta
var effectiveInertia = jungleDiff * effectiveInertiaMult;

// TODO: squish damage so that a tiny splinter grid can't stop 2 big grids by being in the way
if (jungleDiff < _minimumImpactVelocity && effectiveInertia < _minimumImpactInertia
if (jungleDiff < _minimumImpactVelocity || effectiveInertia < _minimumImpactInertia // Change-Forge
|| ourXform.MapUid == null
|| float.IsNaN(jungleDiff))
{
Expand Down Expand Up @@ -176,12 +175,12 @@ private void OnShuttleCollide(EntityUid uid, ShuttleComponent component, ref Sta
// E = MV^2/2
var energyMult = MathF.Pow(jungleDiff, 2) / 2;
// mass-based damage reduction to grid with more mass so that plastitanium block rammer doesn't die to lattice
var ourMassDR = MathF.Max(otherMass / ourMass, 1f);
var otherMassDR = MathF.Max(ourMass / otherMass, 1f);
var ourMassDR = MathF.Pow(otherMass / ourMass, _massBias); // Change-Forge: var ourMassDR = MathF.Max(otherMass / ourMass, 1f);
var otherMassDR = MathF.Pow(ourMass / otherMass, _massBias); // Change-Forge: var otherMassDR = MathF.Max(ourMass / otherMass, 1f);
// multiplier to make large grids not just bonk against each other
var inertiaMult = MathF.Pow(effectiveInertiaMult / _baseShuttleMass, _inertiaScaling);
var toUsEnergy = otherMass * energyMult * inertiaMult * ourMassDR;
var toOtherEnergy = ourMass * energyMult * inertiaMult * otherMassDR;
var toUsEnergy = otherMass * energyMult * inertiaMult / ourMassDR; // Change-Forge: var toUsEnergy = otherMass * energyMult * inertiaMult * ourMassDR;
var toOtherEnergy = ourMass * energyMult * inertiaMult / otherMassDR; // Change-Forge: var toOtherEnergy = ourMass * energyMult * inertiaMult * otherMassDR;

var impact = LogImpact.High;
// if impact isn't tiny, log it as extreme
Expand Down Expand Up @@ -262,7 +261,9 @@ private void ThrowEntitiesOnGrid(EntityUid gridUid, TransformComponent xform, Ve

if (direction.LengthSquared() > minsq)
{
_stuns.TryKnockdown(uid, stunTime, true);
if (stunTime.TotalSeconds > 1.0f) //Forge-Change
_stuns.TryKnockdown(uid, stunTime, true); //Forge-Change

_throwing.TryThrow(uid, direction, physics, Transform(uid), _projQuery, direction.Length(), playSound: false);
}
else
Expand Down Expand Up @@ -381,9 +382,10 @@ private void ProcessTileBatch(
if (_dmgQuery.TryComp(localEnt, out var damageable))
{
// Apply damage scaled by distance but capped to prevent gibbing
var scaledDamage = tileData.Energy * _damageMultiplier;
var scaledDamage = tileData.Energy * _damageMultiplier * 2; // Forge-Change: *2 < 0
damageSpec.DamageDict["Blunt"] = scaledDamage;
damageSpec.DamageDict["Structural"] = scaledDamage * _structuralDamage;
damageSpec.DamageDict["Structural"] = scaledDamage * _structuralDamage * 4; // Forge-Change: *4 < 0


_damageSys.TryChangeDamage(localEnt, damageSpec, damageable: damageable);
}
Expand Down
2 changes: 1 addition & 1 deletion Content.Shared/CCVar/CCVars.Shuttle.cs
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ public sealed partial class CCVars
/// </summary>
[CVarControl(AdminFlags.VarEdit)]
public static readonly CVarDef<float> TileBreakEnergyMultiplier =
CVarDef.Create("shuttle.impact.tile_break_energy", 30000f, CVar.SERVERONLY); // Frontier 3000f<35000f
CVarDef.Create("shuttle.impact.tile_break_energy", 3000f, CVar.SERVERONLY); // Change-Forge: 3000f<35000f

/// <summary>
/// Multiplier of damage done to entities on colliding areas
Expand Down
66 changes: 45 additions & 21 deletions Content.Shared/Interaction/SharedInteractionSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -506,21 +506,25 @@ public void InteractHand(EntityUid user, EntityUid target)
// allow for special logic before main interaction
var ev = new BeforeInteractHandEvent(target);
RaiseLocalEvent(user, ev);
// Corvax-Forge-start
if (ev.Handled)
{
_adminLogger.Add(LogType.InteractHand, LogImpact.Low, $"{ToPrettyString(user):user} interacted with {ToPrettyString(target):target}, but it was handled by another system");
if (HasComp<ActorComponent>(user))
_adminLogger.Add(LogType.InteractHand, LogImpact.Low, $"{ToPrettyString(user):user} interacted with {ToPrettyString(target):target}, but it was handled by another system");
return;
}

// Corvax-Forge-end
DebugTools.Assert(!IsDeleted(user) && !IsDeleted(target));
// all interactions should only happen when in range / unobstructed, so no range check is needed
var message = new InteractHandEvent(user, target);
RaiseLocalEvent(target, message, true);

// Frontier modification: adds extra things to the log
var extraLogs = LoggingExtensions.GetExtraLogs(EntityManager, target);

_adminLogger.Add(LogType.InteractHand, LogImpact.Low, $"{ToPrettyString(user):user} interacted with {ToPrettyString(target):target}{extraLogs}");
// Corvax-Forge-start
if (HasComp<ActorComponent>(user))
_adminLogger.Add(LogType.InteractHand, LogImpact.Low, $"{ToPrettyString(user):user} interacted with {ToPrettyString(target):target}{extraLogs}");
// Corvax-Forge-end
DoContactInteraction(user, target, message);
if (message.Handled)
return;
Expand All @@ -544,17 +548,27 @@ public void InteractUsingRanged(EntityUid user, EntityUid used, EntityUid? targe

if (target != null)
{
_adminLogger.Add(
LogType.InteractUsing,
LogImpact.Low,
$"{ToPrettyString(user):user} interacted with {ToPrettyString(target):target} using {ToPrettyString(used):used}");
// Corvax-Forge-start
if (HasComp<ActorComponent>(user))
{
_adminLogger.Add(
LogType.InteractUsing,
LogImpact.Low,
$"{ToPrettyString(user):user} interacted with {ToPrettyString(target):target} using {ToPrettyString(used):used}");
}
// Corvax-Forge-end
}
else
{
_adminLogger.Add(
LogType.InteractUsing,
LogImpact.Low,
$"{ToPrettyString(user):user} interacted with *nothing* using {ToPrettyString(used):used}");
// Corvax-Forge-start
if (HasComp<ActorComponent>(user))
{
_adminLogger.Add(
LogType.InteractUsing,
LogImpact.Low,
$"{ToPrettyString(user):user} interacted with *nothing* using {ToPrettyString(used):used}");
}
// Corvax-Forge-end
}

if (RangedInteractDoBefore(user, used, target, clickLocation, inRangeUnobstructed, checkDeletion: false))
Expand Down Expand Up @@ -1043,10 +1057,15 @@ public bool InteractUsing(
if (checkCanUse && !_actionBlockerSystem.CanUseHeldEntity(user, used))
return false;

_adminLogger.Add(
LogType.InteractUsing,
LogImpact.Low,
$"{ToPrettyString(user):user} interacted with {ToPrettyString(target):target} using {ToPrettyString(used):used}");
// Corvax-Forge-start
if (HasComp<ActorComponent>(user))
{
_adminLogger.Add(
LogType.InteractUsing,
LogImpact.Low,
$"{ToPrettyString(user):user} interacted with {ToPrettyString(target):target} using {ToPrettyString(used):used}");
}
// Corvax-Forge-end

if (RangedInteractDoBefore(user, used, target, clickLocation, canReach: true, checkDeletion: false))
return true;
Expand Down Expand Up @@ -1173,8 +1192,10 @@ public bool InteractionActivate(
{
DoContactInteraction(user, used);
if (!activateMsg.WasLogged)
_adminLogger.Add(LogType.InteractActivate, LogImpact.Low, $"{ToPrettyString(user):user} activated {ToPrettyString(used):used}");

//Change-Forge-Start
if (HasComp<ActorComponent>(user))
_adminLogger.Add(LogType.InteractActivate, LogImpact.Low, $"{ToPrettyString(user):user} activated {ToPrettyString(used):used}");
//Change-Forge-End
if (delayComponent != null)
_useDelay.TryResetDelay(used, component: delayComponent);
return true;
Expand All @@ -1190,8 +1211,10 @@ public bool InteractionActivate(
// Still need to call this even without checkUseDelay in case this gets relayed from Activate.
if (delayComponent != null)
_useDelay.TryResetDelay(used, component: delayComponent);

_adminLogger.Add(LogType.InteractActivate, LogImpact.Low, $"{ToPrettyString(user):user} activated {ToPrettyString(used):used}");
//Change-Forge-Start
if (HasComp<ActorComponent>(user))
_adminLogger.Add(LogType.InteractActivate, LogImpact.Low, $"{ToPrettyString(user):user} activated {ToPrettyString(used):used}");
//Change-Forge-End
return true;
}
#endregion
Expand Down Expand Up @@ -1271,7 +1294,8 @@ public void DroppedInteraction(EntityUid user, EntityUid item)
{
var extraLogs = LoggingExtensions.GetExtraLogs(EntityManager, item);

_adminLogger.Add(LogType.Drop, LogImpact.Low, $"{ToPrettyString(user):user} dropped {ToPrettyString(item):entity}{extraLogs}");
if (HasComp<ActorComponent>(user))
_adminLogger.Add(LogType.Drop, LogImpact.Low, $"{ToPrettyString(user):user} dropped {ToPrettyString(item):entity}{extraLogs}");
}
// End Frontier

Expand Down
19 changes: 13 additions & 6 deletions Content.Shared/Prying/Systems/PryingSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using Content.Shared.Prying.Components;
using Content.Shared.Verbs;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Player; // Corvax-Forge
using Robust.Shared.Serialization;
using PryUnpoweredComponent = Content.Shared.Prying.Components.PryUnpoweredComponent;

Expand Down Expand Up @@ -141,16 +142,22 @@ private bool StartPry(EntityUid target, EntityUid user, EntityUid? tool, float t
NeedHand = tool != user,
};

if (tool != user && tool != null)
// Corvax-Forge-start
// don't log NPC prying
if (HasComp<ActorComponent>(user))
{
_adminLog.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(user)} is using {ToPrettyString(tool.Value)} to pry {ToPrettyString(target)}");
}
else
{
_adminLog.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(user)} is prying {ToPrettyString(target)}");
if (tool != user && tool != null)
{
_adminLog.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(user)} is using {ToPrettyString(tool.Value)} to pry {ToPrettyString(target)}");
}
else
{
_adminLog.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(user)} is prying {ToPrettyString(target)}");
}
}
return _doAfterSystem.TryStartDoAfter(doAfterArgs, out id);
}
// Corvax-Forge-end

private void OnDoAfter(EntityUid uid, DoorComponent door, DoorPryDoAfterEvent args)
{
Expand Down
Loading