Skip to content
Merged
Show file tree
Hide file tree
Changes from 51 commits
Commits
Show all changes
129 commits
Select commit Hold shift + click to select a range
775f8c3
Initial:
poklj Nov 28, 2024
200f2f2
I have genuinely no idea what i'm doing
poklj Dec 1, 2024
db32831
Holey moley, Transform, better devour, oh my!
poklj Dec 4, 2024
f9e0d6a
Proper tail stealing and Damage modifier attempt
poklj Dec 5, 2024
f0bbf9a
MAJOR CLEANUP AND FIXES AUGH 3 DAYS!!!
poklj Dec 9, 2024
f042f6b
Examine stuff, more cleanup, Jumpsuit ripping
poklj Dec 10, 2024
bdfad0a
Doing things properly, UI sorta kinda works.
poklj Dec 14, 2024
ff7a364
Got an entity for the Frontend transform
poklj Dec 15, 2024
a9129ff
Stick a camera into a fake mobs forehead
poklj Dec 20, 2024
8482230
Raaaaadiallllllls also fix protection coefficents
poklj Dec 21, 2024
058d1e2
absolutely massive cleanup, no more camera in mobs
poklj Dec 21, 2024
71f96e8
Fix "Ui elements" dying on the screen
poklj Dec 21, 2024
e789000
ftl, cleanup, and fixing missing transform details
poklj Dec 21, 2024
0c4aae9
Some extra cleanup
poklj Dec 21, 2024
0c10c13
Fix some false assumptions about TypingIndicator
poklj Dec 22, 2024
6bd3e33
Oooprs, forgot to add a Husked Corpse Loc
poklj Dec 22, 2024
4bb6123
Missing period in the husked corpse loc
poklj Dec 22, 2024
92b54ae
bad devour windup placeholder
poklj Dec 24, 2024
27f31ee
Husking and WIP Lungs
poklj Jan 15, 2025
0e4759b
Merge branch 'master' into Changeling-Devour-Transform
poklj Jan 27, 2025
c0c37ff
Add finalized Sprites for actions and final meta
poklj Jan 27, 2025
58c246e
Remove ling lungs, Entity<> everything
poklj Jan 27, 2025
5f87a3c
cleanup, admin logging, WIP Roles
poklj Jan 27, 2025
59883bc
Admin verb, Roundstart, gamerule stuff
poklj Jan 28, 2025
ebcf385
Armor Coefficent Check
poklj Jan 31, 2025
09e9071
move to UnrevivableComponent instead of husked
poklj Jan 31, 2025
5236eb7
aaaaaaa CopyComp
poklj Feb 3, 2025
5db5403
Cleanup, Moving more things to CopyComp
poklj Feb 3, 2025
0e54f61
WIP
poklj Feb 4, 2025
7f11247
Merge branch 'master' into Changeling-Devour-Transform
poklj Feb 4, 2025
8417a04
Devour Windup noise, ForensicsSystem cleanup
poklj Feb 9, 2025
3bd2522
Merge branch 'master' into Changeling-Devour-Transform
poklj Feb 9, 2025
66b4cfb
Merge branch 'master' into Changeling-Devour-Transform
poklj Feb 9, 2025
0277f4d
Revert VocalSystem Changes
poklj Feb 10, 2025
0d99839
cleanup unneeded comments
poklj Feb 10, 2025
210594b
Merge branch 'master' into Changeling-Devour-Transform
poklj Feb 10, 2025
be68925
Merge branch 'master' into Changeling-Devour-Transform
poklj Feb 10, 2025
e7a8bd8
revert an accidental line removal
poklj Feb 10, 2025
511a9dc
Remove duplicate SharedHumanoidAppearanceSystem
poklj Feb 17, 2025
df05283
Cleanup Typo's and import Forensics components for Dna
poklj Feb 17, 2025
4c260b7
Some more forensics calls
poklj Feb 17, 2025
72355ae
cleanup use CopyComp for now until CopyComps
poklj Feb 17, 2025
93915fe
CR cleanup
poklj Feb 19, 2025
640c908
Merge branch 'master' into Changeling-Devour-Transform
poklj Feb 19, 2025
142d53f
Undo some SharedHumanoidAppearanceSystem changes
poklj Feb 19, 2025
e597af4
Confound these spaces
poklj Feb 19, 2025
b541bce
Some Copycomp stuff and fixing some PVS override
poklj Feb 19, 2025
2d490ea
Merge branch 'master' into Changeling-Devour-Transform
poklj Feb 20, 2025
4c71a45
use the proper TryCopyComps that are merged
poklj Feb 23, 2025
c233d7d
Change TransformMenu with RadialWithSector
poklj Feb 26, 2025
7a29710
Merge branch 'master' into Changeling-Devour-Transform
poklj Feb 26, 2025
44bbacd
Merge branch 'master' into Changeling-Devour-Transform
poklj Mar 31, 2025
9cbe58a
All sounds done, Fix lack of typing indicator issue
poklj Apr 19, 2025
5bd8ca9
Merge branch 'master' into Changeling-Devour-Transform
poklj Apr 19, 2025
96513df
Updated attributions to include used sound authors
poklj Apr 19, 2025
487ba79
Merge branch 'master' into Changeling-Devour-Transform
poklj Apr 30, 2025
b6d10fd
some ftl typos and mind_role text issue
poklj Apr 30, 2025
0d33c75
Merge branch 'master' into Changeling-Devour-Transform
poklj May 9, 2025
58a8c0b
DNA, Screaming, appearance, grammar, wagging
poklj May 11, 2025
ab30efb
Fix UI stuff, partials, entprotoid, good practices
poklj May 12, 2025
12da769
More CR stuff and documentation
poklj May 12, 2025
6fd5b23
Predicted sounds and fix the comp clone list
poklj May 17, 2025
c9b71f9
Damage cap check, Identity Shutdown cleanup, cleanup
poklj May 17, 2025
1f9b987
Sound stuff (but actually this time)
poklj May 18, 2025
a5ed8f9
Missed documentation
poklj May 18, 2025
e9f0069
Missed Documentation and a EntProtoId
poklj May 18, 2025
a403caa
Remove unused dependency
poklj May 18, 2025
fe77f24
Remove a nullcheck
poklj May 18, 2025
301cfa4
Some dummy minplayers
poklj May 18, 2025
2074b24
CR - Husked now uses a rem/ensure
poklj May 28, 2025
82c5e1a
Merge branch 'master' into Changeling-Devour-Transform
poklj May 28, 2025
864e30b
Update Actions in the Prototype
poklj May 28, 2025
fd2d7c1
Fixup mindswap handover
poklj Jun 7, 2025
9719c81
Merge branch 'master' into Changeling-Devour-Transform
poklj Jun 14, 2025
acd0b9c
Fixup Missing meta from accidental "Take-theirs"
poklj Jun 14, 2025
4b1e248
Add the Armblade to the roundstart-role
poklj Jun 14, 2025
46953d4
Cleanup, CR (everything but the UI and renames)
poklj Jun 15, 2025
ae3c4d7
missed a spot
poklj Jun 15, 2025
1dd0e36
missed some more whitespace
poklj Jun 15, 2025
90025f7
Renames
poklj Jun 15, 2025
8cd9fbe
Primary constructor and a space in these trying times
poklj Jun 15, 2025
4e29a9d
User interface stuff for Slime transformation
poklj Jun 16, 2025
0f720ee
popup prediction
ScarKy0 Jun 16, 2025
689cb4c
Ling devour no longer makes duplicate identities
poklj Jun 22, 2025
3266e70
Merge branch 'Changeling-Devour-Transform' of https://github.com/pokl…
poklj Jun 22, 2025
c2d4558
add guard statements to OnClones
poklj Jun 25, 2025
ded7645
Merge branch 'master' into Changeling-Devour-Transform
poklj Jun 25, 2025
39db153
SentOnlyToOwner additions
poklj Jun 25, 2025
9690098
fix for sound stoppage error
poklj Jun 30, 2025
6169c7d
Move Organ deleter into soon to be atomized husk
poklj Jul 4, 2025
dd199f7
clone event inventory
ScarKy0 Jul 17, 2025
6bc3aa1
mono sounds
ScarKy0 Jul 17, 2025
70f79c6
lower sound volume
ScarKy0 Jul 17, 2025
9f6fe75
Merge branch 'master' of https://github.com/space-wizards/space-stati…
ScarKy0 Jul 17, 2025
54618a0
Fix networked sound warning
poklj Jul 17, 2025
2f0215b
Clone comps thing
poklj Jul 18, 2025
d86f86e
review
ScarKy0 Jul 23, 2025
1505837
attributions
ScarKy0 Jul 23, 2025
6c334e1
Merge remote-tracking branch 'upstream/master' into pr/34002
ScarKy0 Jul 24, 2025
089ec37
Fix clobbered changes
poklj Jul 24, 2025
ca8c477
I'm gonna weh out
poklj Jul 25, 2025
ecb4039
fix some very buggy git
poklj Jul 25, 2025
15f09d0
okay its fixed
poklj Jul 25, 2025
6afa29b
address most review points
slarticodefast Jul 28, 2025
35da351
Merge branch 'master' into pr/34002
slarticodefast Jul 28, 2025
d263e2d
fix inventory
slarticodefast Jul 28, 2025
3207a0e
we hate entityuids
ScarKy0 Jul 28, 2025
8527113
Merge branch 'Changeling-Devour-Transform' of https://github.com/pokl…
ScarKy0 Jul 28, 2025
2045a8a
fix test and more cleanup
slarticodefast Jul 28, 2025
7b882fa
move this
slarticodefast Jul 28, 2025
57bef54
fix more stuff
slarticodefast Jul 29, 2025
d54aac9
fix validation and rootable
slarticodefast Jul 29, 2025
ffaa536
Remove Quickswitch due to some UI quirks
poklj Jul 29, 2025
49f2075
oops left out some better explanation
poklj Jul 29, 2025
aaec9c9
remove dangling LastConsumed component fields
poklj Jul 29, 2025
533856e
fix test fail
slarticodefast Jul 30, 2025
86993c1
try this
slarticodefast Jul 30, 2025
81e932d
cleanup cloning subscriptions, add movement speed modifier
slarticodefast Jul 31, 2025
d50d899
fix slime storage
slarticodefast Aug 1, 2025
b65a1a1
fix cloning setting inheritance
slarticodefast Aug 1, 2025
e3f9fbd
Add session information to transform admin logs
poklj Aug 1, 2025
531f9c8
slay the integration test hydra
slarticodefast Aug 6, 2025
9b9b9ed
Merge branch 'master' into pr/34002
slarticodefast Aug 6, 2025
b7cd20c
dwarf size
slarticodefast Aug 6, 2025
052e762
Merge branch 'master' into pr/34002
slarticodefast Aug 6, 2025
3e3ef4f
more volume tweaks
ScarKy0 Aug 6, 2025
6b89299
comments
ScarKy0 Aug 6, 2025
39330ff
improve comments and unpredict deletion due to errors when shutting d…
slarticodefast Aug 6, 2025
84724da
fix displancement cloning
slarticodefast Aug 6, 2025
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
5 changes: 5 additions & 0 deletions Content.Client/Changeling/ChangelingIdentitySystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
using Content.Shared.Changeling;

namespace Content.Client.Changeling;

public sealed class ChangelingIdentitySystem : SharedChangelingIdentitySystem;
5 changes: 5 additions & 0 deletions Content.Client/Changeling/Devour/ChangelingDevourSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
using Content.Shared.Changeling.Devour;

namespace Content.Client.Changeling.Devour;

public sealed class ChangelingDevourSystem : SharedChangelingDevourSystem;
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using Content.Shared.Changeling.Transform;
using JetBrains.Annotations;
using Robust.Client.UserInterface;

namespace Content.Client.Changeling.Transform;

[UsedImplicitly]
public sealed class ChangelingTransformBoundUserInterface : BoundUserInterface
{
private ChangelingTransformMenu? _window;

public ChangelingTransformBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) { }

protected override void Open()
{
base.Open();
_window = this.CreateWindow<ChangelingTransformMenu>();

_window.OnIdentitySelect += SendIdentitySelect;
}
protected override void UpdateState(BoundUserInterfaceState state)
{
base.UpdateState(state);

if (state is not ChangelingTransformBoundUserInterfaceState current)
return;

_window?.UpdateState(current);
}

public void SendIdentitySelect(NetEntity identityId)
{
SendMessage(new ChangelingTransformIdentitySelectMessage(identityId));
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<ui:RadialMenu
xmlns:ui="clr-namespace:Content.Client.UserInterface.Controls"
CloseButtonStyleClass="RadialMenuCloseButton"
VerticalExpand="True"
HorizontalExpand="True">
<ui:RadialContainer Name="Main">
</ui:RadialContainer>
</ui:RadialMenu>
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
using System.Numerics;
using Content.Client.UserInterface.Controls;
using Content.Shared.Changeling.Transform;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;

namespace Content.Client.Changeling.Transform;

[GenerateTypedNameReferences]
public sealed partial class ChangelingTransformMenu : RadialMenu
{
[Dependency] private readonly IEntityManager _entity = default!;
public event Action<NetEntity>? OnIdentitySelect;

public ChangelingTransformMenu()
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
}

public void UpdateState(ChangelingTransformBoundUserInterfaceState state)
{
Main.DisposeAllChildren();
foreach (var identity in state.Identites)
{
var button = new ChangelingTransformMenuButton()
{
StyleClasses = { "RadialMenuButton" },
SetSize = new Vector2(64, 64),
ToolTip = identity.Name
};

var entView = new SpriteView()
{
SetSize = new Vector2(48, 48),
VerticalAlignment = VAlignment.Center,
HorizontalAlignment = HAlignment.Center,
Stretch = SpriteView.StretchMode.Fill,
};
entView.SetEntity(_entity.GetEntity(identity.Identity));
button.OnButtonUp += _ =>
{
OnIdentitySelect?.Invoke(identity.Identity);
Close();
};
button.AddChild(entView);
Main.AddChild(button);
}
}
}

public sealed class ChangelingTransformMenuButton : RadialMenuTextureButtonWithSector
{
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
using Content.Shared.Changeling.Transform;

namespace Content.Client.Changeling.Transform;

public sealed class ChangelingTransformSystem : SharedChangelingTransformSystem;
17 changes: 17 additions & 0 deletions Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ public sealed partial class AdminVerbSystem
[ValidatePrototypeId<EntityPrototype>]
private const string DefaultThiefRule = "Thief";

[ValidatePrototypeId<EntityPrototype>]
private const string DefaultChangelingRule = "Changeling";

[ValidatePrototypeId<StartingGearPrototype>]
private const string PirateGearId = "PirateGear";

Expand Down Expand Up @@ -151,5 +154,19 @@ private void AddAntagVerbs(GetVerbsEvent<Verb> args)
Message = Loc.GetString("admin-verb-make-thief"),
};
args.Verbs.Add(thief);

Verb changeling = new()
{
Text = Loc.GetString("admin-verb-text-make-changeling"),
Category = VerbCategory.Antag,
Icon = new SpriteSpecifier.Rsi(new ResPath("/Textures/Objects/Weapons/Melee/armblade.rsi"), "icon"),
Act = () =>
{
_antag.ForceMakeAntag<ChangelingRuleComponent>(targetPlayer, DefaultChangelingRule);
},
Impact = LogImpact.High,
Message = Loc.GetString("admin-verb-make-changeling"),
};
args.Verbs.Add(changeling);
}
}
5 changes: 5 additions & 0 deletions Content.Server/Changeling/ChangelingIdentitySystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
using Content.Shared.Changeling;

namespace Content.Server.Changeling;

public sealed class ChangelingIdentitySystem : SharedChangelingIdentitySystem;
43 changes: 43 additions & 0 deletions Content.Server/Changeling/Devour/ChangelingDevourSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using Content.Shared.Changeling.Devour;
using Content.Shared.Nutrition.Components;
using Content.Shared.Storage;
using Robust.Server.GameObjects;
using Robust.Shared.Audio;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Random;

namespace Content.Server.Changeling.Devour;

public sealed class ChangelingDevourSystem : SharedChangelingDevourSystem
{
[Dependency] private readonly SharedAudioSystem _audioSystem = default!;
[Dependency] private readonly TransformSystem _transform = default!;
[Dependency] private readonly IRobustRandom _robustRandom = default!;

protected override void StartSound(Entity<ChangelingDevourComponent> ent, SoundSpecifier? sound)
{
if (sound is not null)
ent.Comp.CurrentDevourSound = _audioSystem.PlayPvs(sound, ent)!.Value.Entity;
}

protected override void StopSound(Entity<ChangelingDevourComponent> ent)
{
if (ent.Comp.CurrentDevourSound is not null)
_audioSystem.Stop(ent.Comp.CurrentDevourSound);

ent.Comp.CurrentDevourSound = null;
}

protected override void RipClothing(EntityUid uid, EntityUid item, ButcherableComponent butcher)
{
var spawnEntities = EntitySpawnCollection.GetSpawns(butcher.SpawnedEntities, _robustRandom);
var coords = _transform.GetMapCoordinates(uid);

foreach (var proto in spawnEntities)
{
Spawn(proto, coords.Offset(_robustRandom.NextVector2(0.25f)));
}

QueueDel(item);
}
}
61 changes: 61 additions & 0 deletions Content.Server/Changeling/Transform/ChangelingTransformSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
using Content.Server.Emoting.Components;
using Content.Server.IdentityManagement;
using Content.Shared.Changeling.Transform;
using Content.Shared.IdentityManagement.Components;
using Robust.Shared.Audio;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Enums;
using Robust.Shared.GameObjects.Components.Localization;

namespace Content.Server.Changeling.Transform;

public sealed class ChangelingTransformSystem : SharedChangelingTransformSystem
{
[Dependency] private readonly GrammarSystem _grammarSystem = default!;
[Dependency] private readonly IdentitySystem _identitySystem = default!;
[Dependency] private readonly SharedAudioSystem _audioSystem = default!;

public override void TransformGrammarSet(EntityUid uid, Gender gender)
{
//How to stop quantum gender, a bug where the Examine pronoun will mispredict 100% of the time. Need to SPECIFICALLY
// also modify the Identities grammar component, before Queuing the identityUpdate
if(!TryComp<GrammarComponent>(uid, out var currentGrammar)
|| !TryComp<IdentityComponent>(uid, out var currentIdentity))
return;

var identityContainedUid = currentIdentity!.IdentityEntitySlot.ContainedEntities[0]; // get the IdentityComponent so we can modify that too

if(!TryComp<GrammarComponent>(identityContainedUid, out var identityGrammar))
return;

var grammar = new Entity<GrammarComponent>(uid, currentGrammar);
var identityGrammarEntity = new Entity<GrammarComponent>(identityContainedUid, identityGrammar!);

_grammarSystem.SetGender(grammar, gender);
_grammarSystem.SetGender(identityGrammarEntity, gender);
_identitySystem.QueueIdentityUpdate(uid);
}

protected override void TransformBodyEmotes(EntityUid uid, EntityUid target)
{
if (!TryComp<BodyEmotesComponent>(target, out var targetBodyEmotes))
return;

TryCopyComponent(target, uid, ref targetBodyEmotes, out _);
}

protected override void StartSound(Entity<ChangelingTransformComponent> ent, SoundSpecifier? sound)
{
if(sound is not null)
ent.Comp.CurrentTransformSound = _audioSystem.PlayPvs(sound, ent)!.Value.Entity;
}

protected override void StopSound(Entity<ChangelingTransformComponent> ent)
{
if (ent.Comp.CurrentTransformSound is not null)
_audioSystem.Stop(ent.Comp.CurrentTransformSound);

ent.Comp.CurrentTransformSound = null;
}
}

1 change: 1 addition & 0 deletions Content.Server/Emoting/Systems/BodyEmotesSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public override void Initialize()

private void OnStartup(EntityUid uid, BodyEmotesComponent component, ComponentStartup args)
{
component.Sounds = null;
if (component.SoundsId == null)
return;
_proto.TryIndex(component.SoundsId, out component.Sounds);
Expand Down
20 changes: 20 additions & 0 deletions Content.Server/GameTicking/Rules/ChangelingRuleSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using Content.Server.GameTicking.Rules.Components;
using Content.Server.Roles;
using Content.Shared.Changeling;

namespace Content.Server.GameTicking.Rules;

public sealed class ChangelingRuleSystem : GameRuleSystem<ChangelingRuleComponent>
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ChangelingRoleComponent, GetBriefingEvent>(OnGetBriefing);
}

private void OnGetBriefing(Entity<ChangelingRoleComponent> ent, ref GetBriefingEvent args)
{
args.Append(Loc.GetString("changeling-briefing"));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
namespace Content.Server.GameTicking.Rules.Components;

[RegisterComponent]
public sealed partial class ChangelingRuleComponent : Component;
1 change: 1 addition & 0 deletions Content.Server/Speech/EntitySystems/VocalSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ public override void Initialize()

private void OnMapInit(EntityUid uid, VocalComponent component, MapInitEvent args)
{
component.ScreamActionEntity = null;
// try to add scream action when vocal comp added
_actions.AddAction(uid, ref component.ScreamActionEntity, component.ScreamAction);
LoadSounds(uid, component);
Expand Down
15 changes: 15 additions & 0 deletions Content.Shared/Changeling/ChangelingIdentityComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using Content.Shared.Roles;
using Robust.Shared.GameStates;

namespace Content.Shared.Changeling;

[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class ChangelingIdentityComponent : Component
{
[DataField, AutoNetworkedField]
public List<EntityUid> ConsumedIdentities = [];

[DataField, AutoNetworkedField]
public EntityUid? LastConsumedEntityUid;

}
6 changes: 6 additions & 0 deletions Content.Shared/Changeling/ChangelingRoleComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
using Content.Shared.Roles;

namespace Content.Shared.Changeling;

[RegisterComponent]
public sealed partial class ChangelingRoleComponent : BaseMindRoleComponent;
Loading
Loading