Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
cc31147
one commit because i messed up the history or whatever. sorry
Turk1shcat Aug 17, 2026
e85669c
Merge branch 'starlight-dev' into changeling-update-1
Turk1shcat Aug 17, 2026
ad2a9c7
fix whitespaces ig
Turk1shcat Aug 17, 2026
b0d6cd9
braces to appease the rabbit gods
Turk1shcat Aug 17, 2026
f354b60
im dumb, thanks walks
Turk1shcat Aug 17, 2026
bd337c4
region block to appease the rabbit gods
Turk1shcat Aug 17, 2026
47230f2
starlight edit clarity
Turk1shcat Aug 17, 2026
3c53ec5
no more override flash immunity (sharedflashsystem)
Turk1shcat Aug 17, 2026
58b7c50
Refactor flash handling and clean up comments
Turk1shcat Aug 17, 2026
d426f1e
no more flash immunity
Turk1shcat Aug 17, 2026
0edce19
Merge branch 'starlight-dev' into changeling-update-1
Turk1shcat Aug 17, 2026
b95d699
whitespaces.....
Turk1shcat Aug 17, 2026
ac28669
Merge branch 'starlight-dev' into changeling-update-1
Turk1shcat Aug 20, 2026
108ef76
Merge branch 'starlight-dev' into changeling-update-1
Turk1shcat Aug 22, 2026
bd6c4f5
Merge branch 'starlight-dev' into changeling-update-1
Turk1shcat Aug 25, 2026
0cc3255
Merge branch 'starlight-dev' into changeling-update-1
Turk1shcat Aug 26, 2026
bd694c9
removed _Starlight edit comments
Turk1shcat Sep 2, 2026
f164df9
Remove redundant comments
Turk1shcat Sep 2, 2026
c016100
remove fluff description
Turk1shcat Sep 2, 2026
876316c
Apply suggestion from @walksanatora
Turk1shcat Sep 2, 2026
aeb38a7
Merge branch 'starlight-dev' into changeling-update-1
Turk1shcat Sep 2, 2026
538b81a
partial class stuff
Turk1shcat Sep 2, 2026
2ea47c0
Remove SetRotAfter method from SharedRottingSystem
Turk1shcat Sep 2, 2026
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
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
using Content.Shared._Starlight.Changeling;
using Content.Server._Starlight.Objectives.Components;
using Content.Shared.Flash;
using Content.Shared.Atmos.Rotting;
using Content.Shared.Store;

// Starlight edit end
Expand All @@ -45,6 +46,7 @@ public sealed partial class ChangelingSystem : EntitySystem
[Dependency] private ChangelingIdentitySystem _changelingIdentitySystem = default!;
[Dependency] private LanguageSystem _language = default!;
[Dependency] private SharedFlashSystem _flashSystem = default!;
[Dependency] private SharedRottingSystem _rotting = default!;

private static readonly ProtoId<ReagentPrototype> FerrochromicAcidPrototype = "FerrochromicAcid";
private static readonly ProtoId<ReagentPrototype> PolytrinicAcidPrototype = "PolytrinicAcid";
Expand Down Expand Up @@ -134,6 +136,7 @@ private void OnAbsorb(EntityUid uid, ChangelingComponent comp, ref AbsorbDNAEven
};
_doAfter.TryStartDoAfter(dargs);
}

public ProtoId<DamageGroupPrototype> AbsorbedDamageGroup = "Genetic";
private void OnDevouredPerson(EntityUid uid, ChangelingComponent comp, ref OnLingDevour args)
{
Expand Down Expand Up @@ -161,6 +164,10 @@ private void OnDevouredPerson(EntityUid uid, ChangelingComponent comp, ref OnLin
// Starlight edit end

EnsureComp<AbsorbedComponent>(target);
if (TryComp<PerishableComponent>(target, out var perishable))
{
_rotting.SetRotAfter(target, TimeSpan.FromMinutes(20), perishable);
}

var popup = Loc.GetString("changeling-absorb-end-self-ling");
var bonusChemicals = 0f;
Expand Down Expand Up @@ -306,16 +313,16 @@ private void OnShriekResonant(EntityUid uid, ChangelingComponent comp, ref Shrie
DoScreech(uid, comp);

var power = comp.ShriekPower;
_flash.FlashArea(uid, uid, power, TimeSpan.FromMilliseconds(power * 2f * 1000f));
List<EntityUid> ignoreList = new() { uid };
_flash.FlashArea(uid, uid, power, TimeSpan.FromMilliseconds(power * 2f * 1000f), 0.8f, false, 1f, null, ignoreList);

var lookup = _lookup.GetEntitiesInRange(uid, power);
var lights = GetEntityQuery<PoweredLightComponent>();

foreach (var ent in lookup)
// breaks lights
if (lights.HasComponent(ent))
_light.TryDestroyBulb(ent);
}

private void OnToggleStrainedMuscles(EntityUid uid, ChangelingComponent comp, ref ToggleStrainedMusclesEvent args) => ToggleStrainedMuscles(uid, comp);

private void ToggleStrainedMuscles(EntityUid uid, ChangelingComponent comp)
Expand Down
19 changes: 18 additions & 1 deletion Content.Shared/Flash/SharedFlashSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,17 @@ public void Flash(
/// <param name="displayPopup">Whether or not to show a popup to the target player.</param>
/// <param name="probability">Chance to be flashed. Rolled separately for each target in range.</param>
/// <param name="sound">Additional sound to play at the source.</param>
public void FlashArea(EntityUid source, EntityUid? user, float range, TimeSpan flashDuration, float slowTo = 0.8f, bool displayPopup = false, float probability = 1f, SoundSpecifier? sound = null)
/// <param name="ignoreEntities">Entities to ignore when flashing.</param> (STARLIGHT EDIT)
public void FlashArea(
EntityUid source,
EntityUid? user,
float range,
TimeSpan flashDuration,
float slowTo = 0.8f,
bool displayPopup = false,
float probability = 1f,
SoundSpecifier? sound = null,
List<EntityUid>? ignoreEntities = null)
{
var transform = Transform(source);
var mapPosition = _transform.GetMapCoordinates(transform);
Expand All @@ -231,6 +241,13 @@ public void FlashArea(EntityUid source, EntityUid? user, float range, TimeSpan f
_entityLookup.GetEntitiesInRange(transform.Coordinates, range, _entSet);
foreach (var entity in _entSet)
{
// starlight edit - functionality to ignore certain entities when flashing
if (ignoreEntities != null)
{
if (ignoreEntities.Contains(entity))
continue;
}

// TODO: Use RandomPredicted https://github.com/space-wizards/RobustToolbox/pull/5849
var seed = SharedRandomExtensions.HashCodeCombine((int)_timing.CurTick.Value, GetNetEntity(entity).Id);
var rand = new System.Random(seed);
Expand Down
15 changes: 15 additions & 0 deletions Content.Shared/_Starlight/Atmos/Rotting/RotTimerSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using Content.Shared.Atmos.Rotting;

namespace Content.Shared.Atmos.Rotting;

Check failure on line 3 in Content.Shared/_Starlight/Atmos/Rotting/RotTimerSystem.cs

View workflow job for this annotation

GitHub Actions / check-typo-directory

Namespace is 'Content.Shared.Atmos.Rotting', expected 'Content.Shared._Starlight.Atmos.Rotting'.

public abstract partial class SharedRottingSystem
{
public bool SetRotAfter(EntityUid uid, TimeSpan newTime, PerishableComponent? perishable = null)
{
if (!Resolve(uid, ref perishable))
return false;

perishable.RotAfter = newTime;
return true;
}
}
11 changes: 10 additions & 1 deletion Content.Shared/_Starlight/Changeling/AbsorbedSystem.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
using Content.Shared.Examine;
using Content.Shared.Mobs;
using Content.Shared.Atmos.Rotting; // starlight edit

namespace Content.Shared._Starlight.Changeling;

public sealed partial class AbsorbedSystem : EntitySystem
{
[Dependency] private SharedRottingSystem _rotting = default!;

public override void Initialize()
{
base.Initialize();
Expand All @@ -21,7 +24,13 @@ private void OnExamine(Entity<AbsorbedComponent> ent, ref ExaminedEvent args)
private void OnMobStateChange(Entity<AbsorbedComponent> ent, ref MobStateChangedEvent args)
{
// in case one somehow manages to dehusk someone
if (args.NewMobState != MobState.Dead)
if (args.NewMobState != MobState.Dead) {
RemComp<AbsorbedComponent>(ent);
// The changeling devour changes the rot timer, so we need to reset it when reviving someone
if (TryComp<PerishableComponent>(ent, out var perishable))
{
_rotting.SetRotAfter(ent, TimeSpan.FromMinutes(10), perishable);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public sealed partial class ChangelingComponent : Component
public bool StealthEnabled = false;

[DataField]
public float StealthDrain = 1.5f;
public float StealthDrain = 1.25f; // 1.5 -> 1.25; 3.3 minutes -> 6.6 minutes to fully drain 100 chemicals

[DataField]
public float StasisDrain = 0.2f;
Expand Down
4 changes: 3 additions & 1 deletion Resources/Locale/en-US/store/changeling-catalog.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,10 @@ evolutionmenu-utility-stims-desc =
Costs 20 chemicals.

evolutionmenu-utility-fleshmend-name = Fleshmend
# Starlight edit: Added warning about requiring two absorbtions
evolutionmenu-utility-fleshmend-desc =
Rapidly heal yourself of all bruises and burns.
Rapidly heal yourself of all bruises and burns.
WARNING: Requires you to absorb at least 2 organics to use the ability.
Costs 35 chemicals.

# Starlight - monkey form is permanent (until transform is fixed, at least)
Expand Down
1 change: 1 addition & 0 deletions Resources/Prototypes/_Starlight/Actions/changeling.yml
Original file line number Diff line number Diff line change
Expand Up @@ -609,6 +609,7 @@
event: !type:ActionFleshmendEvent {}
- type: ChangelingAction
chemicalCost: 35
requireAbsorbed: 2 # easily one of the strongest combat abilities. Shouldn't be available round start
useInLesserForm: true

- type: entity
Expand Down
Loading