diff --git a/Content.Client/ShortConstruction/UI/ShortConstructionMenuBUI.cs b/Content.Client/ShortConstruction/UI/ShortConstructionMenuBUI.cs index 4d50d91e16..95da2e0a33 100644 --- a/Content.Client/ShortConstruction/UI/ShortConstructionMenuBUI.cs +++ b/Content.Client/ShortConstruction/UI/ShortConstructionMenuBUI.cs @@ -12,6 +12,7 @@ using Robust.Client.UserInterface.Controls; using Robust.Shared.Enums; using Robust.Shared.Prototypes; +using Robust.Shared.Utility; // ReSharper disable InconsistentNaming @@ -30,7 +31,6 @@ public sealed class ShortConstructionMenuBUI : BoundUserInterface private readonly SpriteSystem _spriteSystem; private RadialMenu? _menu; - public ShortConstructionMenuBUI(EntityUid owner, Enum uiKey) : base(owner, uiKey) { _construction = _entManager.System(); @@ -39,8 +39,17 @@ public ShortConstructionMenuBUI(EntityUid owner, Enum uiKey) : base(owner, uiKey protected override void Open() { - _menu = FormMenu(); - _menu.OnClose += Close; + _menu = new RadialMenu + { + HorizontalExpand = true, + VerticalExpand = true, + BackButtonStyleClass = "RadialMenuBackButton", + CloseButtonStyleClass = "RadialMenuCloseButton" + }; + + if (_entManager.TryGetComponent(Owner, out var crafting)) + CreateMenu(crafting.Entries); + _menu.OpenCenteredAt(_inputManager.MouseScreenPosition.Position / _displayManager.ScreenSize); } @@ -51,56 +60,58 @@ protected override void Dispose(bool disposing) _menu?.Dispose(); } - private RadialMenu FormMenu() + private void CreateMenu(List entries, string? parentCategory = null) { - var menu = new RadialMenu - { - HorizontalExpand = true, - VerticalExpand = true, - BackButtonStyleClass = "RadialMenuBackButton", - CloseButtonStyleClass = "RadialMenuCloseButton" - }; - - if (!_entManager.TryGetComponent(Owner, out var crafting)) - return menu; + if (_menu == null) + return; - var mainContainer = new RadialContainer + var container = new RadialContainer { - Radius = 36f / MathF.Sin(MathF.PI / 2f / crafting.Prototypes.Count) + Name = parentCategory ?? "Main", + Radius = 48f + 24f * MathF.Log(entries.Count), }; - foreach (var protoId in crafting.Prototypes) - { - if (!_protoManager.TryIndex(protoId, out var proto)) - continue; + _menu.AddChild(container); - var button = new RadialMenuTextureButton + foreach (var entry in entries) + { + if (entry.Category != null) { - ToolTip = Loc.GetString(proto.Name), - StyleClasses = { "RadialMenuButton" }, - SetSize = new Vector2(48f, 48f) - }; - - var texture = new TextureRect + var button = CreateButton(entry.Category.Name, entry.Category.Icon); + button.TargetLayer = entry.Category.Name; + CreateMenu(entry.Category.Entries, entry.Category.Name); + container.AddChild(button); + } + else if (entry.Prototype != null + && _protoManager.TryIndex(entry.Prototype, out var proto)) { - VerticalAlignment = Control.VAlignment.Center, - HorizontalAlignment = Control.HAlignment.Center, - Texture = _spriteSystem.Frame0(proto.Icon), - TextureScale = new Vector2(1.5f, 1.5f) - }; + var button = CreateButton(proto.Name, proto.Icon); + button.OnButtonUp += _ => ConstructItem(proto); + container.AddChild(button); + } + } - button.AddChild(texture); + } - button.OnButtonUp += _ => - { - ConstructItem(proto); - }; + private RadialMenuTextureButton CreateButton(string name, SpriteSpecifier icon) + { + var button = new RadialMenuTextureButton + { + ToolTip = Loc.GetString(name), + StyleClasses = { "RadialMenuButton" }, + SetSize = new Vector2(64f, 64f), + }; - mainContainer.AddChild(button); - } + var texture = new TextureRect + { + VerticalAlignment = Control.VAlignment.Center, + HorizontalAlignment = Control.HAlignment.Center, + Texture = _spriteSystem.Frame0(icon), + TextureScale = new Vector2(2f, 2f) + }; - menu.AddChild(mainContainer); - return menu; + button.AddChild(texture); + return button; } /// @@ -121,6 +132,6 @@ private void ConstructItem(ConstructionPrototype prototype) }, new ConstructionPlacementHijack(_construction, prototype)); // Should only close the menu if we're placing a construction hijack. - _menu!.Close(); + // Theres not much point to closing it though. _menu!.Close(); } } diff --git a/Content.Server/Abilities/Psionics/Abilities/HealOtherPowerSystem.cs b/Content.Server/Abilities/Psionics/Abilities/HealOtherPowerSystem.cs index 85bae78dc6..35b5e6a238 100644 --- a/Content.Server/Abilities/Psionics/Abilities/HealOtherPowerSystem.cs +++ b/Content.Server/Abilities/Psionics/Abilities/HealOtherPowerSystem.cs @@ -53,14 +53,14 @@ private void OnPowerUsed(EntityUid uid, PsionicComponent component, PsionicHealO else ActivatePower(uid, component, args); if (args.PopupText is not null - && _glimmer.Glimmer > args.GlimmerObviousPopupThreshold * component.CurrentDampening) + && _glimmer.Glimmer > args.GlimmerPopupThreshold * component.CurrentDampening) _popupSystem.PopupEntity(Loc.GetString(args.PopupText, ("entity", uid)), uid, Filter.Pvs(uid).RemoveWhereAttachedEntity(entity => !_examine.InRangeUnOccluded(uid, entity, ExamineRange, null)), true, args.PopupType); if (args.PlaySound - && _glimmer.Glimmer > args.GlimmerObviousSoundThreshold * component.CurrentDampening) + && _glimmer.Glimmer > args.GlimmerSoundThreshold * component.CurrentDampening) _audioSystem.PlayPvs(args.SoundUse, uid, args.AudioParams); // Sanitize the Glimmer inputs because otherwise the game will crash if someone makes MaxGlimmer lower than MinGlimmer. @@ -76,13 +76,16 @@ private void OnPowerUsed(EntityUid uid, PsionicComponent component, PsionicHealO private void AttemptDoAfter(EntityUid uid, PsionicComponent component, PsionicHealOtherPowerActionEvent args) { var ev = new PsionicHealOtherDoAfterEvent(_gameTiming.CurTime); - ev.HealingAmount = args.HealingAmount; - ev.RotReduction = args.RotReduction; + if (args.HealingAmount is not null) + ev.HealingAmount = args.HealingAmount; + if (args.RotReduction is not null) + ev.RotReduction = args.RotReduction.Value; ev.DoRevive = args.DoRevive; var doAfterArgs = new DoAfterArgs(EntityManager, uid, args.UseDelay, ev, uid, target: args.Target) { BreakOnUserMove = args.BreakOnUserMove, BreakOnTargetMove = args.BreakOnTargetMove, + Hidden = _glimmer.Glimmer > args.GlimmerDoAfterVisibilityThreshold * component.CurrentDampening, }; if (!_doAfterSystem.TryStartDoAfter(doAfterArgs, out var doAfterId)) @@ -104,7 +107,8 @@ private void OnDispelled(EntityUid uid, PsionicComponent component, DispelledEve private void OnDoAfter(EntityUid uid, PsionicComponent component, PsionicHealOtherDoAfterEvent args) { // It's entirely possible for the caster to stop being Psionic(due to mindbreaking) mid cast - if (component is null) + if (component is null + || args.Cancelled) return; component.DoAfter = null; @@ -112,15 +116,19 @@ private void OnDoAfter(EntityUid uid, PsionicComponent component, PsionicHealOth if (args.Target is null) return; - _rotting.ReduceAccumulator(args.Target.Value, TimeSpan.FromSeconds(args.RotReduction * component.CurrentAmplification)); + if (args.RotReduction is not null) + _rotting.ReduceAccumulator(args.Target.Value, TimeSpan.FromSeconds(args.RotReduction.Value * component.CurrentAmplification)); if (!TryComp(args.Target.Value, out var damageableComponent)) return; - _damageable.TryChangeDamage(args.Target.Value, args.HealingAmount * component.CurrentAmplification, true, false, damageableComponent, uid); + if (args.HealingAmount is not null) + _damageable.TryChangeDamage(args.Target.Value, args.HealingAmount * component.CurrentAmplification, true, false, damageableComponent, uid); if (!args.DoRevive - || !TryComp(args.Target, out var mob) + || _rotting.IsRotten(args.Target.Value) + || !TryComp(args.Target.Value, out var mob) + || !_mobState.IsDead(args.Target.Value, mob) || !_mobThreshold.TryGetThresholdForState(args.Target.Value, MobState.Dead, out var threshold) || damageableComponent.TotalDamage > threshold) return; @@ -134,15 +142,19 @@ private void ActivatePower(EntityUid uid, PsionicComponent component, PsionicHea if (component is null) return; - _rotting.ReduceAccumulator(args.Target, TimeSpan.FromSeconds(args.RotReduction * component.CurrentAmplification)); + if (args.RotReduction is not null) + _rotting.ReduceAccumulator(args.Target, TimeSpan.FromSeconds(args.RotReduction.Value * component.CurrentAmplification)); if (!TryComp(args.Target, out var damageableComponent)) return; - _damageable.TryChangeDamage(args.Target, args.HealingAmount * component.CurrentAmplification, true, false, damageableComponent, uid); + if (args.HealingAmount is not null) + _damageable.TryChangeDamage(args.Target, args.HealingAmount * component.CurrentAmplification, true, false, damageableComponent, uid); if (!args.DoRevive + || _rotting.IsRotten(args.Target) || !TryComp(args.Target, out var mob) + || !_mobState.IsDead(args.Target, mob) || !_mobThreshold.TryGetThresholdForState(args.Target, MobState.Dead, out var threshold) || damageableComponent.TotalDamage > threshold) return; diff --git a/Content.Shared/Actions/Events/PsionicHealOtherPowerActionEvent.cs b/Content.Shared/Actions/Events/PsionicHealOtherPowerActionEvent.cs index 8cf11b9e66..0001c7842d 100644 --- a/Content.Shared/Actions/Events/PsionicHealOtherPowerActionEvent.cs +++ b/Content.Shared/Actions/Events/PsionicHealOtherPowerActionEvent.cs @@ -6,7 +6,7 @@ namespace Content.Shared.Actions.Events; public sealed partial class PsionicHealOtherPowerActionEvent : EntityTargetActionEvent { [DataField] - public DamageSpecifier HealingAmount = default!; + public DamageSpecifier? HealingAmount = default!; [DataField] public string PowerName; @@ -19,7 +19,7 @@ public sealed partial class PsionicHealOtherPowerActionEvent : EntityTargetActio public string? PopupText; [DataField] - public float RotReduction; + public float? RotReduction; [DataField] public bool DoRevive; @@ -40,10 +40,13 @@ public sealed partial class PsionicHealOtherPowerActionEvent : EntityTargetActio public int MaxGlimmer = 12; [DataField] - public int GlimmerObviousSoundThreshold; + public int GlimmerSoundThreshold; [DataField] - public int GlimmerObviousPopupThreshold; + public int GlimmerPopupThreshold; + + [DataField] + public int GlimmerDoAfterVisibilityThreshold; [DataField] public PopupType PopupType = PopupType.Medium; diff --git a/Content.Shared/Psionics/Events.cs b/Content.Shared/Psionics/Events.cs index f110c9c405..744dd3b6ea 100644 --- a/Content.Shared/Psionics/Events.cs +++ b/Content.Shared/Psionics/Events.cs @@ -42,10 +42,10 @@ public sealed partial class PsionicHealOtherDoAfterEvent : DoAfterEvent public TimeSpan StartedAt; [DataField] - public DamageSpecifier HealingAmount = default!; + public DamageSpecifier? HealingAmount = default!; [DataField] - public float RotReduction; + public float? RotReduction; [DataField] public bool DoRevive; diff --git a/Content.Shared/ShortConstruction/ShortConstructionComponent.cs b/Content.Shared/ShortConstruction/ShortConstructionComponent.cs index 4ca4063866..dedf8605bd 100644 --- a/Content.Shared/ShortConstruction/ShortConstructionComponent.cs +++ b/Content.Shared/ShortConstruction/ShortConstructionComponent.cs @@ -2,6 +2,7 @@ using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; +using Robust.Shared.Utility; namespace Content.Shared.ShortConstruction; @@ -9,7 +10,30 @@ namespace Content.Shared.ShortConstruction; public sealed partial class ShortConstructionComponent : Component { [DataField(required: true)] - public List> Prototypes = new(); + public List Entries = new(); +} + +[DataDefinition] +public sealed partial class ShortConstructionEntry +{ + [DataField] + public ProtoId? Prototype { get; set; } + + [DataField] + public ShortConstructionCategory? Category { get; set; } +} + +[DataDefinition] +public sealed partial class ShortConstructionCategory +{ + [DataField] + public string Name { get; set; } = string.Empty; + + [DataField] + public SpriteSpecifier Icon { get; set; } = default!; + + [DataField] + public List Entries { get; set; } = new(); } [NetSerializable, Serializable] diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index f85816dfaf..d5a5a174f3 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -6627,3 +6627,32 @@ Entries: id: 6385 time: '2024-09-21T23:22:43.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/943 +- author: VMSolidus + changes: + - type: Fix + message: >- + Fixed a bug where Breath of Life and Healing Word would set living + people to crit, which would knock them down. + - type: Fix + message: >- + Fixed a bug where Breath of Life could revive people who were rotten(It + will still heal them and reduce the rot timer as intended, but will not + revive unless said rot timer reduction brings them below the 10 minute + threshold). + - type: Add + message: >- + The Do-After bar for Breath of Life and Healing Word is now hidden if + glimmer is low enough. The threshold for which scales with your + Dampening stat. More Dampening = stealthier casting. + id: 6386 + time: '2024-09-24T00:56:34.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/949 +- author: Mocho + changes: + - type: Add + message: >- + Added a lot of recipes to the quick construction menus. Give it a shot + by pressing Z with different construction materials in your hand! + id: 6387 + time: '2024-09-24T00:56:45.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/945 diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt index 22e7aef8a9..aeed963662 100644 --- a/Resources/Credits/GitHub.txt +++ b/Resources/Credits/GitHub.txt @@ -1 +1 @@ -0x6273, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 4dplanner, 612git, 778b, Ablankmann, Acruid, actioninja, adamsong, Admiral-Obvious-001, Adrian16199, Aerocrux, Aexxie, africalimedrop, Agoichi, Ahion, AJCM-git, AjexRose, Alekshhh, AlexMorgan3817, AlmondFlour, AlphaQwerty, Altoids1, amylizzle, ancientpower, angelofallars, ArchPigeon, Arendian, arimah, Arteben, AruMoon, as334, AsikKEsel, asperger-sind, aspiringLich, avghdev, AzzyIsNotHere, BananaFlambe, BasedUser, beck-thompson, BGare, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, BlueHNT, Boaz1111, BobdaBiscuit, brainfood1183, BramvanZijp, Brandon-Huu, Bribrooo, Bright0, brndd, BubblegumBlue, BYONDFuckery, c4llv07e, CaasGit, CakeQ, CaptainSqrBeard, Carbonhell, Carolyn3114, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, chromiumboy, Chronophylos, CilliePaint, clorl, Clyybber, CodedCrow, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, coolmankid12345, corentt, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DamianX, DangerRevolution, daniel-cr, Darkenson, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, Deeeeja, deepdarkdepths, Delete69, deltanedas, DeltaV-Bot, DerbyX, DoctorBeard, DogZeroX, dontbetank, dootythefrooty, Doru991, DoubleRiceEddiedd, DrMelon, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, Dutch-VanDerLinde, Easypoller, eclips_e, EdenTheLiznerd, EEASAS, Efruit, ElectroSR, elthundercloud, Emisse, EmoGarbage404, Endecc, enumerate0, eoineoineoin, ERORR404V1, Errant-4, estacaoespacialpirata, Evgencheg, exincore, exp111, Fahasor, FairlySadPanda, Fansana, ficcialfaint, Fildrance, FillerVK, Fishfish458, Flareguy, FluffiestFloof, FluidRock, FoLoKe, fooberticus, Fortune117, FoxxoTrystan, freeman2651, Froffy025, Fromoriss, FungiFellow, GalacticChimp, gbasood, Geekyhobo, geraeumig, Git-Nivrak, github-actions[bot], gituhabu, gluesniffler, GNF54, Golinth, GoodWheatley, graevy, GreyMario, Guess-My-Name, gusxyz, h3half, Hanzdegloker, Hardly3D, harikattar, HerCoyote23, HoofedEar, Hoolny, hord-brayden, hubismal, Hugal31, Huxellberger, iacore, IamVelcroboy, icekot8, igorsaux, ike709, Illiux, Ilya246, IlyaElDunaev, Injazz, Insineer, Interrobang01, IProduceWidgets, ItsMeThom, Jackal298, Jackrost, jamessimo, janekvap, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JoeHammad1844, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, JustArt1m, JustCone14, JustinTrotter, KaiShibaa, kalane15, kalanosh, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, KingFroozy, kira-er, Kit0vras, KittenColony, Ko4ergaPunk, komunre, koteq, Krunklehorn, kxvvv, Lamrr, LankLTE, lapatison, Leander-0, leonardo-dabepis, LetterN, Level10Cybermancer, lever1209, liltenhead, LittleBuilderJane, Lomcastar, LordCarve, LordEclipse, LovelyLophi, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, MACMAN2003, Macoron, MagnusCrowe, ManelNavola, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, Mervill, metalgearsloth, mhamsterr, MilenVolf, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MisterMecky, Mith-randalf, Mnemotechnician, Moneyl, Moomoobeef, moony, Morb0, Mr0maks, musicmanvr, Myakot, Myctai, N3X15, Nairodian, Naive817, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, nok-ko, notafet, notquitehadouken, noudoit, nuke-haus, NULL882, nyeogmi, OCOtheOmega, OctoRocket, OldDanceJacket, onoira, osjarw, Owai-Seek, pali6, Pangogie, patrikturi, PaulRitter, Peptide90, peptron1, Phantom-Lily, PHCodes, PixelTheKermit, PJB3005, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, ProfanedBane, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykzz, PuroSlavKing, quatre, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainbeon, Rainfey, Rane, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, RiceMar1244, RieBi, Rinkashikachi, Rockdtben, rolfero, rosieposieeee, Saakra, Samsterious, SaphireLattice, ScalyChimp, scrato, Scribbles0, Serkket, ShadowCommander, Shadowtheprotogen546, ShatteredSwords, SignalWalker, SimpleStation14, Simyon264, Sirionaut, siyengar04, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, SleepyScarecrow, Snowni, snowsignal, SonicHDC, SoulSloth, SpaceManiac, SpeltIncorrectyl, spoogemonster, ssdaniel24, stalengd, Stealthbomber16, stellar-novas, StrawberryMoses, superjj18, SweptWasTaken, Szunti, TadJohnson00, takemysoult, TaralGit, Tayrtahn, tday93, TekuNut, TemporalOroboros, tentekal, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, TimrodDX, Titian3, tkdrg, Tmanzxd, tmtmtl30, TokenStyle, tom-leys, tomasalves8, Tomeno, Tornado-Technology, tosatur, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, UKNOWH, UnicornOnLSD, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Vermidia, Verslebas, VigersRay, Visne, VMSolidus, volundr-, Voomra, Vordenburg, vulppine, wafehling, WarMechanic, waylon531, weaversam8, whateverusername0, Willhelm53, Winkarst-cpu, wixoaGit, WlarusFromDaSpace, wrexbe, xRiriq, yathxyz, Ygg01, YotaXP, YuriyKiss, zach-hill, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zerorulez, zionnBE, ZNixian, ZoldorfTheWizard, Zumorica, Zymem +0x6273, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 4dplanner, 612git, 778b, Ablankmann, Acruid, actioninja, adamsong, Admiral-Obvious-001, Adrian16199, Aerocrux, Aexxie, africalimedrop, Agoichi, Ahion, AJCM-git, AjexRose, Alekshhh, AlexMorgan3817, AlmondFlour, AlphaQwerty, Altoids1, amylizzle, ancientpower, angelofallars, ArchPigeon, Arendian, arimah, Arteben, AruMoon, as334, AsikKEsel, asperger-sind, aspiringLich, avghdev, AzzyIsNotHere, BananaFlambe, BasedUser, beck-thompson, BGare, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, BlueHNT, Boaz1111, BobdaBiscuit, brainfood1183, BramvanZijp, Brandon-Huu, Bribrooo, Bright0, brndd, BubblegumBlue, BYONDFuckery, c4llv07e, CaasGit, CakeQ, CaptainSqrBeard, Carbonhell, Carolyn3114, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, chromiumboy, Chronophylos, CilliePaint, clorl, Clyybber, CodedCrow, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, coolmankid12345, corentt, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DamianX, DangerRevolution, daniel-cr, Darkenson, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, Deeeeja, deepdarkdepths, Delete69, deltanedas, DeltaV-Bot, DerbyX, DoctorBeard, DogZeroX, dontbetank, dootythefrooty, Doru991, DoubleRiceEddiedd, DrMelon, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, Dutch-VanDerLinde, Easypoller, eclips_e, EEASAS, Efruit, ElectroSR, elthundercloud, Emisse, EmoGarbage404, Endecc, enumerate0, eoineoineoin, ERORR404V1, Errant-4, estacaoespacialpirata, Evgencheg, exincore, exp111, Fahasor, FairlySadPanda, Fansana, ficcialfaint, Fildrance, FillerVK, Fishfish458, Flareguy, FluffiestFloof, FluidRock, FoLoKe, fooberticus, Fortune117, FoxxoTrystan, freeman2651, Froffy025, Fromoriss, FungiFellow, GalacticChimp, gbasood, Geekyhobo, geraeumig, Git-Nivrak, github-actions[bot], gituhabu, gluesniffler, GNF54, Golinth, GoodWheatley, graevy, GreyMario, Guess-My-Name, gusxyz, h3half, Hanzdegloker, Hardly3D, harikattar, HerCoyote23, HoofedEar, Hoolny, hord-brayden, hubismal, Hugal31, Huxellberger, iacore, IamVelcroboy, icekot8, igorsaux, ike709, Illiux, Ilya246, IlyaElDunaev, Injazz, Insineer, Interrobang01, IProduceWidgets, ItsMeThom, Jackal298, Jackrost, jamessimo, janekvap, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JoeHammad1844, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, JustArt1m, JustCone14, JustinTrotter, KaiShibaa, kalane15, kalanosh, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, KingFroozy, kira-er, Kit0vras, KittenColony, Ko4ergaPunk, komunre, koteq, Krunklehorn, kxvvv, Lamrr, LankLTE, lapatison, Leander-0, leonardo-dabepis, LetterN, Level10Cybermancer, lever1209, Lgibb18, liltenhead, LittleBuilderJane, Lomcastar, LordCarve, LordEclipse, LovelyLophi, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, MACMAN2003, Macoron, MagnusCrowe, ManelNavola, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, Mervill, metalgearsloth, mhamsterr, MilenVolf, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MisterMecky, Mith-randalf, Mnemotechnician, Moneyl, Moomoobeef, moony, Morb0, Mr0maks, musicmanvr, Myakot, Myctai, N3X15, Nairodian, Naive817, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, nok-ko, notafet, notquitehadouken, noudoit, nuke-haus, NULL882, nyeogmi, OCOtheOmega, OctoRocket, OldDanceJacket, onoira, osjarw, Owai-Seek, pali6, Pangogie, patrikturi, PaulRitter, Peptide90, peptron1, Phantom-Lily, PHCodes, PixelTheKermit, PJB3005, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, ProfanedBane, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykzz, PuroSlavKing, quatre, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainbeon, Rainfey, Rane, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, RiceMar1244, RieBi, Rinkashikachi, Rockdtben, rolfero, rosieposieeee, Saakra, Samsterious, SaphireLattice, ScalyChimp, scrato, Scribbles0, Serkket, ShadowCommander, Shadowtheprotogen546, ShatteredSwords, SignalWalker, SimpleStation14, Simyon264, Sirionaut, siyengar04, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, SleepyScarecrow, Snowni, snowsignal, SonicHDC, SoulSloth, SpaceManiac, SpeltIncorrectyl, spoogemonster, ssdaniel24, stalengd, Stealthbomber16, stellar-novas, StrawberryMoses, superjj18, SweptWasTaken, Szunti, TadJohnson00, takemysoult, TaralGit, Tayrtahn, tday93, TekuNut, TemporalOroboros, tentekal, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, TimrodDX, Titian3, tkdrg, Tmanzxd, tmtmtl30, TokenStyle, tom-leys, tomasalves8, Tomeno, Tornado-Technology, tosatur, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, UKNOWH, UltimateJester, UnicornOnLSD, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Vermidia, Verslebas, VigersRay, Visne, VMSolidus, volundr-, Voomra, Vordenburg, vulppine, wafehling, WarMechanic, waylon531, weaversam8, whateverusername0, Willhelm53, Winkarst-cpu, wixoaGit, WlarusFromDaSpace, wrexbe, xRiriq, yathxyz, Ygg01, YotaXP, YuriyKiss, zach-hill, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zerorulez, zionnBE, ZNixian, ZoldorfTheWizard, Zumorica, Zymem diff --git a/Resources/Prototypes/Actions/psionics.yml b/Resources/Prototypes/Actions/psionics.yml index d38608a469..82e356a11f 100644 --- a/Resources/Prototypes/Actions/psionics.yml +++ b/Resources/Prototypes/Actions/psionics.yml @@ -179,8 +179,9 @@ playSound: true minGlimmer: 2 maxGlimmer: 4 - glimmerObviousSoundThreshold: 100 - glimmerObviousPopupThreshold: 200 + glimmerSoundThreshold: 100 + glimmerPopupThreshold: 200 + glimmerDoAfterVisibilityThreshold: 70 - type: entity id: ActionRevivify @@ -217,5 +218,6 @@ playSound: true minGlimmer: 10 # These also get multiplied by caster stats. So, maxGlimmer: 15 # keeping in mind the ~3.5x multiplier, this spikes glimmer by as much as 60 points. - glimmerObviousSoundThreshold: 50 - glimmerObviousPopupThreshold: 100 + glimmerSoundThreshold: 50 + glimmerPopupThreshold: 100 + glimmerDoAfterVisibilityThreshold: 35 diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml index 91ba1abff9..59c9a8fc46 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml @@ -98,8 +98,13 @@ - type: ActivatableUI key: enum.ShortConstructionUiKey.Key - type: ShortConstruction - prototypes: - - Window + entries: + - prototype: Window + - prototype: WindowDirectional + - prototype: WindowDiagonal + - prototype: SheetRGlass + - prototype: SheetPGlass + - prototype: SheetUGlass - type: entity parent: SheetGlass @@ -193,8 +198,12 @@ - type: ActivatableUI key: enum.ShortConstructionUiKey.Key - type: ShortConstruction - prototypes: - - ReinforcedWindow + entries: + - prototype: SheetRPGlass1 + - prototype: SheetRUGlass1 + - prototype: ReinforcedWindow + - prototype: ReinforcedWindowDiagonal + - prototype: WindowReinforcedDirectional - type: entity parent: SheetRGlass @@ -272,6 +281,18 @@ max: 1 - !type:DoActsBehavior acts: [ "Destruction" ] + - type: UserInterface + interfaces: + - key: enum.ShortConstructionUiKey.Key + type: ShortConstructionMenuBUI + - type: ActivatableUI + key: enum.ShortConstructionUiKey.Key + - type: ShortConstruction + entries: + - prototype: SheetRPGlass0 + - prototype: PlasmaWindow + - prototype: PlasmaWindowDiagonal + - prototype: PlasmaWindowDirectional - type: entity parent: SheetPGlass @@ -338,6 +359,17 @@ - ReagentId: Carbon Quantity: 0.5 canReact: false + - type: UserInterface + interfaces: + - key: enum.ShortConstructionUiKey.Key + type: ShortConstructionMenuBUI + - type: ActivatableUI + key: enum.ShortConstructionUiKey.Key + - type: ShortConstruction + entries: + - prototype: ReinforcedPlasmaWindow + - prototype: ReinforcedPlasmaWindowDiagonal + - prototype: PlasmaReinforcedWindowDirectional - type: entity parent: SheetRPGlass @@ -413,6 +445,18 @@ - ReagentId: Uranium Quantity: 10 canReact: false + - type: UserInterface + interfaces: + - key: enum.ShortConstructionUiKey.Key + type: ShortConstructionMenuBUI + - type: ActivatableUI + key: enum.ShortConstructionUiKey.Key + - type: ShortConstruction + entries: + - prototype: SheetRUGlass0 + - prototype: UraniumWindow + - prototype: UraniumWindowDiagonal + - prototype: UraniumWindowDirectional - type: entity parent: SheetUGlass @@ -467,6 +511,17 @@ - ReagentId: Carbon Quantity: 0.5 canReact: false + - type: UserInterface + interfaces: + - key: enum.ShortConstructionUiKey.Key + type: ShortConstructionMenuBUI + - type: ActivatableUI + key: enum.ShortConstructionUiKey.Key + - type: ShortConstruction + entries: + - prototype: ReinforcedUraniumWindow + - prototype: ReinforcedUraniumWindowDiagonal + - prototype: UraniumReinforcedWindowDirectional - type: entity parent: SheetRUGlass diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml index 83982474d2..427ae362a7 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml @@ -76,12 +76,75 @@ - type: ActivatableUI key: enum.ShortConstructionUiKey.Key - type: ShortConstruction - prototypes: - - Girder - - MetalRod - - TileSteel - - TileWhite - - TileDark + entries: + - prototype: Girder + - prototype: MetalRod + - category: + name: Tiles + icon: + sprite: Objects/Tiles/tile.rsi + state: steel + entries: + - prototype: TileSteel + - prototype: TileWhite + - prototype: TileDark + - category: + name: Electronics + icon: + sprite: Structures/Machines/computers.rsi + state: computer-datatheory + entries: + - prototype: MachineFrame + - prototype: Computer + - prototype: Windoor + - prototype: LightTubeFixture + - prototype: APC + - prototype: AirAlarmFixture + - prototype: AirSensor + - prototype: FireAlarm + - category: + name: Atmospherics + icon: + sprite: Structures/Piping/Atmospherics/vent.rsi + state: vent_out + entries: + - prototype: GasPort + - prototype: GasOutletInjector + - prototype: GasVentScrubber + - prototype: GasPassiveVent + - prototype: GasVentPump + - prototype: GasMixer + - prototype: GasFilter + - prototype: GasVolumePump + - prototype: GasPressurePump + - prototype: GasValve + - category: + name: Piping + icon: + sprite: Structures/Piping/Atmospherics/pipe.rsi + state: pipeFourway + entries: + - prototype: HeatExchanger + - prototype: GasPipeBend + - prototype: GasPipeFourway + - prototype: GasPipeHalf + - prototype: GasPipeStraight + - prototype: GasPipeTJunction + - category: + name: Disposals + icon: + sprite: Structures/Piping/disposal.rsi + state: disposal + entries: + - prototype: DisposalPipe + - prototype: DisposalBend + - prototype: DisposalJunction + - prototype: DisposalYJunction + - prototype: DisposalRouter + - prototype: DisposalTagger + - prototype: DisposalTrunk + - prototype: DisposalUnit + - prototype: CrateGenericSteel - type: entity parent: SheetSteel @@ -218,6 +281,15 @@ - ReagentId: Carbon Quantity: 1 canReact: false + - type: UserInterface + interfaces: + - key: enum.ShortConstructionUiKey.Key + type: ShortConstructionMenuBUI + - type: ActivatableUI + key: enum.ShortConstructionUiKey.Key + - type: ShortConstruction + entries: + - prototype: SecureWindoor - type: entity parent: SheetPlasteel diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml index dfb5133628..ab8597d02a 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml @@ -110,6 +110,17 @@ - type: Tag tags: - Sheet + - type: UserInterface + interfaces: + - key: enum.ShortConstructionUiKey.Key + type: ShortConstructionMenuBUI + - type: ActivatableUI + key: enum.ShortConstructionUiKey.Key + - type: ShortConstruction + entries: + - prototype: SheetPGlass + - prototype: SheetRPGlass + - prototype: SheetRPGlass1 - type: entity parent: SheetPlasma @@ -162,6 +173,15 @@ - ReagentId: Phosphorus Quantity: 5 canReact: false + - type: UserInterface + interfaces: + - key: enum.ShortConstructionUiKey.Key + type: ShortConstructionMenuBUI + - type: ActivatableUI + key: enum.ShortConstructionUiKey.Key + - type: ShortConstruction + entries: + - prototype: CratePlastic - type: entity parent: SheetPlastic @@ -224,6 +244,17 @@ - ReagentId: Radium Quantity: 2 canReact: false + - type: UserInterface + interfaces: + - key: enum.ShortConstructionUiKey.Key + type: ShortConstructionMenuBUI + - type: ActivatableUI + key: enum.ShortConstructionUiKey.Key + - type: ShortConstruction + entries: + - prototype: SheetUGlass + - prototype: SheetRUGlass + - prototype: SheetRUGlass1 - type: entity parent: SheetUranium diff --git a/Resources/Prototypes/Entities/Objects/Materials/parts.yml b/Resources/Prototypes/Entities/Objects/Materials/parts.yml index 8b916f2e2b..e0547b3dc4 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/parts.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/parts.yml @@ -75,8 +75,30 @@ - type: ActivatableUI key: enum.ShortConstructionUiKey.Key - type: ShortConstruction - prototypes: - - Grille + entries: + - prototype: Grille + - prototype: GrilleDiagonal + - category: + name: Railings + icon: + sprite: Structures/Walls/railing.rsi + state: side + entries: + - prototype: Railing + - prototype: RailingCorner + - prototype: RailingRound + - prototype: RailingCornerSmall + - category: + name: Glass + icon: + sprite: Objects/Materials/Sheets/glass.rsi + state: rglass_3 + entries: + - prototype: SheetRPGlass + - prototype: SheetRPGlass0 + - prototype: SheetRUGlass + - prototype: SheetRUGlass0 + - prototype: SheetRGlass - type: entity parent: PartRodMetal diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/windowdirectional.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/windowdirectional.yml index 96f009fabb..effddd7ca3 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/windowdirectional.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/windowdirectional.yml @@ -28,6 +28,7 @@ - material: ReinforcedPlasmaGlass amount: 1 doAfter: 3 + - to: uraniumWindowDirectional steps: - material: UraniumGlass @@ -136,6 +137,7 @@ doAfter: 2 - tool: Anchoring doAfter: 3 + - node: uraniumWindowDirectional entity: UraniumWindowDirectional edges: diff --git a/Resources/Prototypes/Recipes/Construction/structures.yml b/Resources/Prototypes/Recipes/Construction/structures.yml index b152e827e6..52b4387256 100644 --- a/Resources/Prototypes/Recipes/Construction/structures.yml +++ b/Resources/Prototypes/Recipes/Construction/structures.yml @@ -688,6 +688,42 @@ objectType: Structure placementMode: SnapgridCenter +- type: construction + name: directional uranium window + id: UraniumWindowDirectional + graph: WindowDirectional + startNode: start + targetNode: uraniumWindowDirectional + category: construction-category-structures + canBuildInImpassable: true + description: Clear and tougher than regular glass, with added RadAbsorb to protect you from deadly radiation. + conditions: + - !type:EmptyOrWindowValidInTile + - !type:NoWindowsInTile + icon: + sprite: Structures/Windows/directional.rsi + state: uranium_window + objectType: Structure + placementMode: SnapgridCenter + +- type: construction + name: directional reinforced uranium window + id: UraniumReinforcedWindowDirectional + graph: WindowDirectional + startNode: start + targetNode: uraniumReinforcedWindowDirectional + category: construction-category-structures + canBuildInImpassable: true + description: Clear and much tougher than regular glass, with added RadAbsorb to protect you from deadly radiation. + conditions: + - !type:EmptyOrWindowValidInTile + - !type:NoWindowsInTile + icon: + sprite: Structures/Windows/directional.rsi + state: uranium_reinforced_window + objectType: Structure + placementMode: SnapgridCenter + - type: construction name: firelock id: Firelock