Files
wwdpublic/Content.Shared/_Goobstation/Blob/Components/BlobObserverComponent.cs
Kyoth25f ed2301f840 Port Blob (#2441)
Ports Blob from https://github.com/Goob-Station/Goob-Station/pull/975
that was ported from https://github.com/Rxup/space-station-14.

Credit to VigersRay for original code, Roudenn and Rxup for maintaining
and jorgun for the Goob port.

---

- [X] Port https://github.com/Goob-Station/Goob-Station/pull/975;
- [X] Port https://github.com/Goob-Station/Goob-Station/pull/1209;
- [X] Port Blob related code from
https://github.com/Goob-Station/Goob-Station/pull/1262;
- [X] Port Blob related code from
https://github.com/Goob-Station/Goob-Station/pull/1340;
- [X] Port https://github.com/Goob-Station/Goob-Station/pull/1408;
- [X] Port https://github.com/Goob-Station/Goob-Station/pull/1419;
- [X] Port https://github.com/Goob-Station/Goob-Station/pull/1440;
- [X] Port https://github.com/Goob-Station/Goob-Station/pull/1817;
- [X] Port https://github.com/Goob-Station/Goob-Station/pull/2077;
- [ ] ~Port https://github.com/Goob-Station/Goob-Station/pull/1916~;
- [ ] ~Port https://github.com/Goob-Station/Goob-Station/pull/1917~;
- [X] Port https://github.com/Goob-Station/Goob-Station/pull/2077;
- [X] Port https://github.com/Goob-Station/Goob-Station/pull/2092;
- [X] Port https://github.com/Goob-Station/Goob-Station/pull/2546;
- [X] Port https://github.com/Rxup/space-station-14/pull/963;
- [X] Port https://github.com/Rxup/space-station-14/pull/998;
- [ ] ~Port https://github.com/Goob-Station/Goob-Station/pull/2563~.

- [X] Enable Blob and Blob gamemode;
- [X] Add `StationGlobConfig` to all stations;
- [X] Use `AnnouncerSystem` in `BlobRuleSystem.cs`;
- [X] Blob language and Hivemind (from
https://github.com/Rxup/space-station-14/pull/176);
- [x] Change CVars location;
- [X] Add media.

---

<details><summary><h1>Media</h1></summary>
<p>
https://youtu.be/-WtMQwRcmrU?si=su3An6RtiCTZg-DV
</p>
</details>

---

🆑 VigersRay, Roudenn, Rxup, vladospupuos, fishbait and Kyoth25f
- add: Added a new antagonist: Blob

---------

Co-authored-by: fishbait <gnesse@gmail.com>
Co-authored-by: Fishbait <Fishbait@git.ml>
Co-authored-by: Aiden <aiden@djkraz.com>
Co-authored-by: beck-thompson <107373427+beck-thompson@users.noreply.github.com>
Co-authored-by: lanse12 <cloudability.ez@gmail.com>
Co-authored-by: BombasterDS <deniskaporoshok@gmail.com>
Co-authored-by: Aviu00 <93730715+Aviu00@users.noreply.github.com>
Co-authored-by: Piras314 <p1r4s@proton.me>
Co-authored-by: shibe <95730644+shibechef@users.noreply.github.com>
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
Co-authored-by: JohnOakman <sremy2012@hotmail.fr>
Co-authored-by: Fat Engineer Gaming <159075414+Fat-Engineer-Gaming@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Rouden <149893554+Roudenn@users.noreply.github.com>
2025-07-12 12:20:25 +10:00

116 lines
3.4 KiB
C#

using Content.Shared.Actions;
using Content.Shared.Antag;
using Content.Shared.Damage;
using Content.Shared.FixedPoint;
using Content.Shared.StatusIcon;
using Robust.Shared.GameStates;
using Robust.Shared.Map;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
namespace Content.Shared._Goobstation.Blob.Components;
[RegisterComponent]
public sealed partial class BlobObserverControllerComponent : Component
{
public Entity<BlobObserverComponent> Blob;
}
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class BlobObserverComponent : Component
{
[ViewVariables]
public bool IsProcessingMoveEvent;
//[AutoNetworkedField]
[ViewVariables]
public Entity<BlobCoreComponent>? Core = default!;
/*[ViewVariables]
public bool CanMove = true;*/
[ViewVariables, AutoNetworkedField]
public BlobChemType SelectedChemId = BlobChemType.ReactiveSpines;
public override bool SendOnlyToOwner => true;
[ViewVariables, AutoNetworkedField]
public EntityUid VirtualItem = EntityUid.Invalid;
}
[Serializable, NetSerializable]
public sealed class BlobChemSwapBoundUserInterfaceState(
BlobChemColors chemList,
BlobChemType selectedId)
: BoundUserInterfaceState
{
public readonly BlobChemColors ChemList = chemList;
public readonly BlobChemType SelectedChem = selectedId;
}
[Serializable, NetSerializable]
public sealed class BlobChemSwapPrototypeSelectedMessage(BlobChemType selectedId) : BoundUserInterfaceMessage
{
public readonly BlobChemType SelectedId = selectedId;
}
[Serializable, NetSerializable]
public enum BlobChemSwapUiKey : byte
{
Key
}
/// <summary>
/// Tries to transform the Target blob tile in other type, making checks for Node and/or similar tiles.
/// </summary>
public sealed partial class BlobTransformTileActionEvent : WorldTargetActionEvent
{
/// <summary>
/// Type of tile that can be transformed.
/// Will be ignored if equals to Invalid.
/// </summary>
[DataField]
public BlobTileType TransformFrom = BlobTileType.Normal;
/// <summary>
/// Type of the resulting tile.
/// </summary>
[DataField]
public BlobTileType TileType = BlobTileType.Invalid;
/// <summary>
/// If specified, tries to find a blob node
/// in given radius and returns back if failed
/// </summary>
[DataField]
public bool RequireNode = true;
/// <summary>
/// If specified, tries to find a tile of the same type
/// in given radius and returns back if failed.
/// </summary>
[DataField]
public float? NodeSearchRadius;
/// <summary>
/// If specified, tries to find a tile of the same type
/// in given radius and returns back if failed.
/// </summary>
[DataField]
public float? TileSearchRadius;
public BlobTransformTileActionEvent(EntityUid performer, EntityCoordinates target, BlobTileType transformFrom, BlobTileType tileType)
{
Performer = performer;
Target = target;
TransformFrom = transformFrom;
TileType = tileType;
}
}
public sealed partial class BlobCreateBlobbernautActionEvent : WorldTargetActionEvent;
public sealed partial class BlobSplitCoreActionEvent : WorldTargetActionEvent;
public sealed partial class BlobSwapCoreActionEvent : WorldTargetActionEvent;
public sealed partial class BlobToCoreActionEvent : InstantActionEvent;
public sealed partial class BlobSwapChemActionEvent : InstantActionEvent;