From ce080276dbd363cd5489b158efd42987900292b1 Mon Sep 17 00:00:00 2001 From: Thinbug <101073555+Thinbug0@users.noreply.github.com> Date: Tue, 29 Apr 2025 10:07:57 -0300 Subject: [PATCH] Push horn (#36009) * Empty commit * epic super duper cool fr push horn draft * whoops turns out theres a system that does that thingi already x.x * bunch of like fixis and generalization * general progress * most stuffies done * last thingi hopefully * small fixies, mostly preventing bypassing the delay by spamming * rename to fit better * rename for real i forgor to add * weird fixie but last commit didn workie * oki shold be fine now * lastish cleanup * fixies * missed a space * removed unnecessary component check * getting the typos out of the way first * moved the component to shared * rest of fixies --- .../RepulseAttractOnTriggerSystem.cs | 29 ++++++++++++++ .../SharedRepulseAttractOnTriggerComponent.cs | 37 ++++++++++++++++++ .../SharedRepulseAttractOnTriggerSystem.cs | 3 ++ Resources/Audio/Items/Toys/attributions.yml | 10 +++++ Resources/Audio/Items/Toys/pushHornFloor.ogg | Bin 0 -> 7312 bytes Resources/Audio/Items/Toys/pushHornHonk.ogg | Bin 0 -> 9109 bytes .../Locale/en-US/research/technologies.ftl | 1 + .../Entities/Effects/gravity_pulse.yml | 19 +++++++++ .../Entities/Objects/Fun/bike_horn.yml | 34 ++++++++++++++++ .../Recipes/Lathes/Packs/service.yml | 1 + Resources/Prototypes/Recipes/Lathes/misc.yml | 9 +++++ .../Prototypes/Research/civilianservices.yml | 12 ++++++ .../Effects/gravityPulse.rsi/gravityPulse.png | Bin 0 -> 890 bytes .../Effects/gravityPulse.rsi/meta.json | 34 ++++++++++++++++ .../Fun/push_horn.rsi/equipped-BELT.png | Bin 0 -> 293 bytes .../Objects/Fun/push_horn.rsi/icon.png | Bin 0 -> 299 bytes .../Objects/Fun/push_horn.rsi/inhand-left.png | Bin 0 -> 409 bytes .../Fun/push_horn.rsi/inhand-right.png | Bin 0 -> 432 bytes .../Objects/Fun/push_horn.rsi/meta.json | 26 ++++++++++++ 19 files changed, 215 insertions(+) create mode 100644 Content.Server/Explosion/EntitySystems/RepulseAttractOnTriggerSystem.cs create mode 100644 Content.Shared/Explosion/Components/OnTrigger/SharedRepulseAttractOnTriggerComponent.cs create mode 100644 Content.Shared/Explosion/EntitySystems/SharedRepulseAttractOnTriggerSystem.cs create mode 100644 Resources/Audio/Items/Toys/pushHornFloor.ogg create mode 100644 Resources/Audio/Items/Toys/pushHornHonk.ogg create mode 100644 Resources/Prototypes/Entities/Effects/gravity_pulse.yml create mode 100644 Resources/Textures/Effects/gravityPulse.rsi/gravityPulse.png create mode 100644 Resources/Textures/Effects/gravityPulse.rsi/meta.json create mode 100644 Resources/Textures/Objects/Fun/push_horn.rsi/equipped-BELT.png create mode 100644 Resources/Textures/Objects/Fun/push_horn.rsi/icon.png create mode 100644 Resources/Textures/Objects/Fun/push_horn.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Fun/push_horn.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Fun/push_horn.rsi/meta.json diff --git a/Content.Server/Explosion/EntitySystems/RepulseAttractOnTriggerSystem.cs b/Content.Server/Explosion/EntitySystems/RepulseAttractOnTriggerSystem.cs new file mode 100644 index 0000000000..9e595c5d9e --- /dev/null +++ b/Content.Server/Explosion/EntitySystems/RepulseAttractOnTriggerSystem.cs @@ -0,0 +1,29 @@ +using Content.Shared.Explosion.Components.OnTrigger; +using Content.Shared.Explosion.EntitySystems; +using Content.Shared.RepulseAttract; +using Content.Shared.Timing; + +namespace Content.Server.Explosion.EntitySystems; + +public sealed class RepulseAttractOnTriggerSystem : SharedRepulseAttractOnTriggerSystem +{ + [Dependency] private readonly RepulseAttractSystem _repulse = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly UseDelaySystem _delay = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnTrigger); + } + + private void OnTrigger(Entity ent, ref TriggerEvent args) + { + if (_delay.IsDelayed(ent.Owner)) + return; + + var position = _transform.GetMapCoordinates(ent); + _repulse.TryRepulseAttract(position, args.User, ent.Comp.Speed, ent.Comp.Range, ent.Comp.Whitelist, ent.Comp.CollisionMask); + } +} diff --git a/Content.Shared/Explosion/Components/OnTrigger/SharedRepulseAttractOnTriggerComponent.cs b/Content.Shared/Explosion/Components/OnTrigger/SharedRepulseAttractOnTriggerComponent.cs new file mode 100644 index 0000000000..43febff03b --- /dev/null +++ b/Content.Shared/Explosion/Components/OnTrigger/SharedRepulseAttractOnTriggerComponent.cs @@ -0,0 +1,37 @@ +using Content.Shared.Physics; +using Content.Shared.Whitelist; + +namespace Content.Shared.Explosion.Components.OnTrigger; + +/// +/// Generates a gravity pulse/repulse using the RepulseAttractComponent when the entity is triggered +/// +[RegisterComponent] +public sealed partial class SharedRepulseAttractOnTriggerComponent : Component +{ + /// + /// How fast should the Repulsion/Attraction be? + /// A positive value will repulse objects, a negative value will attract + /// + [DataField] + public float Speed; + + /// + /// How close do the entities need to be? + /// + [DataField] + public float Range; + + /// + /// What kind of entities should this effect apply to? + /// + [DataField] + public EntityWhitelist? Whitelist; + + /// + /// What collision layers should be excluded? + /// The default excludes ghost mobs, revenants, the AI camera etc. + /// + [DataField] + public CollisionGroup CollisionMask = CollisionGroup.GhostImpassable; +} diff --git a/Content.Shared/Explosion/EntitySystems/SharedRepulseAttractOnTriggerSystem.cs b/Content.Shared/Explosion/EntitySystems/SharedRepulseAttractOnTriggerSystem.cs new file mode 100644 index 0000000000..386024fbeb --- /dev/null +++ b/Content.Shared/Explosion/EntitySystems/SharedRepulseAttractOnTriggerSystem.cs @@ -0,0 +1,3 @@ +namespace Content.Shared.Explosion.EntitySystems; + +public abstract class SharedRepulseAttractOnTriggerSystem : EntitySystem; diff --git a/Resources/Audio/Items/Toys/attributions.yml b/Resources/Audio/Items/Toys/attributions.yml index 2dd0ce9ede..23caefc0d0 100644 --- a/Resources/Audio/Items/Toys/attributions.yml +++ b/Resources/Audio/Items/Toys/attributions.yml @@ -93,6 +93,16 @@ copyright: "Created by xprospero for ss14" source: "https://github.com/space-wizards/space-station-14/blob/master/Resources/Audio/Items/Toys/rubber_chicken_3.ogg" +- files: ["pushHornHonk.ogg"] + license: "CC0-1.0" + copyright: "Created by Matislav, modified by Thinbug" + source: "https://freesound.org/s/564697/" + +- files: ["pushHornFloor.ogg"] + license: "CC0-1.0" + copyright: "Created by Dedshot_Dyzek" + source: "https://freesound.org/people/Dedshot_Dyzek/sounds/769792/" + - files: ["arf.ogg"] license: "CC0-1.0" copyright: "Created by Orsoniks, from the game Casualties Unknown" diff --git a/Resources/Audio/Items/Toys/pushHornFloor.ogg b/Resources/Audio/Items/Toys/pushHornFloor.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d1f368e5167d81d80b60cfe956bbf332d6d18f51 GIT binary patch literal 7312 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/Items/Toys/pushHornHonk.ogg b/Resources/Audio/Items/Toys/pushHornHonk.ogg new file mode 100644 index 0000000000000000000000000000000000000000..bb40a8f5dfd159935ee0996928dd175cc1f8f983 GIT binary patch literal 9109 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 Ni?zH9&JA;c{{!SiG@bwe literal 0 HcmV?d00001 diff --git a/Resources/Locale/en-US/research/technologies.ftl b/Resources/Locale/en-US/research/technologies.ftl index c3c1f1dad7..b2c4b8bc0d 100644 --- a/Resources/Locale/en-US/research/technologies.ftl +++ b/Resources/Locale/en-US/research/technologies.ftl @@ -72,5 +72,6 @@ research-technology-meat-manipulation = Meat Manipulation research-technology-honk-mech = H.O.N.K. Mech research-technology-advanced-spray = Advanced Spray research-technology-bluespace-cargo-transport = Bluespace Cargo Transport +research-technology-clowning-utilities = Clowning Utilities research-technology-quantum-fiber-weaving = Quantum Fiber Weaving research-technology-bluespace-chemistry = Bluespace Chemistry diff --git a/Resources/Prototypes/Entities/Effects/gravity_pulse.yml b/Resources/Prototypes/Entities/Effects/gravity_pulse.yml new file mode 100644 index 0000000000..75849309a6 --- /dev/null +++ b/Resources/Prototypes/Entities/Effects/gravity_pulse.yml @@ -0,0 +1,19 @@ +- type: entity + id: EffectGravityPulse + categories: [ HideSpawnMenu ] + components: + - type: TimedDespawn + lifetime: 0.32 + - type: Sprite + drawdepth: Effects + noRot: true + layers: + - shader: unshaded + map: ["enum.EffectLayers.Unshaded"] + sprite: Effects/gravityPulse.rsi + state: gravityPulse + - type: EffectVisuals + - type: Tag + tags: + - HideContextMenu + - type: AnimationPlayer diff --git a/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml b/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml index 288c41dc6b..f21de4c79e 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml @@ -196,3 +196,37 @@ - type: Construction graph: BananiumHorn node: bananiumHorn + +- type: entity + parent: BaseItem + id: PushHorn + name: push horn + description: This powerful bikehorn is sure to blast frowns away. + components: + - type: Sprite + sprite: Objects/Fun/push_horn.rsi + state: icon + - type: Item + sprite: Objects/Fun/push_horn.rsi + size: Tiny + - type: Clothing + sprite: Objects/Fun/push_horn.rsi + slots: [Belt] + quickEquip: false + - type: EmitSoundOnUse + handle: false + sound: "/Audio/Items/Toys/pushHornHonk.ogg" + - type: EmitSoundOnLand + sound: "/Audio/Items/Toys/pushHornFloor.ogg" + - type: UseDelay + delay: 6 + - type: TriggerOnUse + - type: RepulseAttractOnTrigger + speed: 50 + range: 2 + whitelist: + components: + - MobMover + - Item + - type: SpawnOnTrigger + proto: EffectGravityPulse diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/service.yml b/Resources/Prototypes/Recipes/Lathes/Packs/service.yml index b3b63009be..e23b5e90b7 100644 --- a/Resources/Prototypes/Recipes/Lathes/Packs/service.yml +++ b/Resources/Prototypes/Recipes/Lathes/Packs/service.yml @@ -50,6 +50,7 @@ id: Instruments recipes: - SynthesizerInstrument + - PushHorn - type: latheRecipePack id: ServiceBoards diff --git a/Resources/Prototypes/Recipes/Lathes/misc.yml b/Resources/Prototypes/Recipes/Lathes/misc.yml index 5cf10fb570..9d4ecf7697 100644 --- a/Resources/Prototypes/Recipes/Lathes/misc.yml +++ b/Resources/Prototypes/Recipes/Lathes/misc.yml @@ -105,6 +105,15 @@ Plastic: 300 Glass: 100 +- type: latheRecipe + id: PushHorn + result: PushHorn + completetime: 5 + materials: + Steel: 500 + Plastic: 500 + Plasma: 200 + - type: latheRecipe parent: BaseToolRecipe id: NodeScanner diff --git a/Resources/Prototypes/Research/civilianservices.yml b/Resources/Prototypes/Research/civilianservices.yml index 55298d05a1..b078dd7cd6 100644 --- a/Resources/Prototypes/Research/civilianservices.yml +++ b/Resources/Prototypes/Research/civilianservices.yml @@ -188,6 +188,18 @@ recipeUnlocks: - CargoTelepadMachineCircuitboard +- type: technology + id: PushHorn + name: research-technology-clowning-utilities + icon: + sprite: Objects/Fun/push_horn.rsi + state: icon + discipline: CivilianServices + tier: 2 + cost: 4000 + recipeUnlocks: + - PushHorn + # Tier 3 - type: technology diff --git a/Resources/Textures/Effects/gravityPulse.rsi/gravityPulse.png b/Resources/Textures/Effects/gravityPulse.rsi/gravityPulse.png new file mode 100644 index 0000000000000000000000000000000000000000..2d017bd4839140d53c4f41cd9451a77b932ab0b9 GIT binary patch literal 890 zcmV-=1BLvFP)Px&G)Y83RCt{2+)HxfFbqY}?0-{PntPH|SEVf5l1SVK@}6-l0EDd{$$WiDk|arz zBuSE*c|0E9bPn5^J^1gAzjgDgia&}&$4AjgRmZ36{gsjjV(a2l&`qG@r$EPnZUP;j zvTNN>IT!$X(CPSpQTe2eLkYTQ`cd!*9e)e-Ap0_CV>VZkBuSDaNs=T zX+d`fpZ7AaSwoC<)Xyt^^na|P_MRZ?E z&_&Wy!dGL^H@Ns=TG%nz z@~$M|p5Ss0$@}8z z*fZx1@SD9)1JiG}=(7xE*ShhWzh~(9F;*XlS7#o&_LBI~*QLqv6K*E&9^;lyjZMup zd6#jVvp0J5qt=MejC3o0r(fG_bbYg?gNM~cFB+j6G!tGMy)10hvFZ3N(S?nUPd^>d z@mrybn)QtDLX`$m2Q>Lhs6lLwBx!YC>jHIbO2?d+Vgt@wYRr}@<_Epzf40^&%$gZX z)Ggna==t=7!A!{Ev=K>n|JBlCfXAli`|nC>VD*_0?+tw#Z~e=gbgWzGrD9zg8q=^D z(u;HT52$LtAQ@i=DzAAqI)F{s$f!rDgfC4(4$hEdUV|oV!J@}tDEeQaBuoNzY-mKzcaw-H;-ZADT+`PAR2_qepHMqG zc3m4c;#hR;+e>XgYF_V5%{ygKQu25u@des#Et5X5QZ3PzTrbz111W9jAAz%cY_1Gy Qi~s-t07*qoM6N<$f+E7Q>i_@% literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/gravityPulse.rsi/meta.json b/Resources/Textures/Effects/gravityPulse.rsi/meta.json new file mode 100644 index 0000000000..38d9f7cfbf --- /dev/null +++ b/Resources/Textures/Effects/gravityPulse.rsi/meta.json @@ -0,0 +1,34 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Made by Thinbug for ss14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "gravityPulse", + "delays": [ + [ + 0.02, + 0.02, + 0.02, + 0.02, + 0.02, + 0.02, + 0.02, + 0.02, + 0.02, + 0.02, + 0.02, + 0.02, + 0.02, + 0.02, + 0.02, + 0.02 + ] + ] + } + ] +} diff --git a/Resources/Textures/Objects/Fun/push_horn.rsi/equipped-BELT.png b/Resources/Textures/Objects/Fun/push_horn.rsi/equipped-BELT.png new file mode 100644 index 0000000000000000000000000000000000000000..ada82d1936d7bef8fd2fd9e555b58ba2992181ef GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|?t8j8hE&XX zd()8bkO5EYL-y`a#n7&Z9Zr51R%XAq|H`AI;Vmw9$SE;TNR{i?{*6Id$2VDD5d!LD zV6Zr}<=AZQjiqvy=T@@&W>3-Mdbo66cY&AXmiV|`b@ObV-iiGFVA8$oK}GC;^z=Qa z&Gjhv$u`NoxTW;JtjDvx{r7&a)1Pn1bjhM`>8A{})eMtNc$_Px#qONPKwG3|u0EV&f-n(01mY7bj z6vbDfz7m@{@RR9uM9K@}cw0RiL;%2;%QuOqV)W`okO%+-FAhM;3}ezIjx~JvamfJ`#!iLGEI5OwN{XXr}-G002ovPDHLkV1fYMfD-@! literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Fun/push_horn.rsi/inhand-left.png b/Resources/Textures/Objects/Fun/push_horn.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..498c3f4d7b9edb25b68f112220699ec473d742be GIT binary patch literal 409 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zgFRgwLn`LH zy>&3_kb_9;!}~%UqERIaE=+6EZY?qGfB1NJ@xyJ~TAMV*rZgTXS$Oo-GSi)$Zs)g` z6c#<7~;nfNa0(P7a8E^2+ zQQ_2=H=o*8yX$wCYv6?Ed*7<(haSIEoH~o`fJ}qU`#=%br(6CWKCk^;)+pBD!A@rH zR}v+YcixFR?8jSvVAffoWjt=ld%kbXne^R`&n-D&*V!29vpbS^opnC9(?W)iQ_*0i zPv5R--|d!Vp2{&x-WYMkEPX9^!(UZ~dc8-_`!XMW=q)^VROj@+zZxl#Vsnd^%Fmq~ z{LCPID}x{mObovG@BW>Y*JNgIJM6nTqc8gf+wA0vGTW;dt)I?*d`<7bD$Bg5)(^^y yW4``pTKh}P;`Fm05$V@urWbzX762L|eBa8V{m`^s_gR2p&EVq^e@@TR^w&F|o+}(VO?1{n z-2?v~aa-89mH%bTDbf|F@^I%)=$Uvgfg_=-=40v0hUXjI<`s7V`N=&$(qwFWlY2Cl z8q7XxF#r5wo3F`Ru3dWn{o$O$DMpqv{vYqoz4~g;&$V}z7!G8Z9ICMS_FmmL_+nJ` zdVkrBwW_|CKkSVOV*F>tEC>UECQbi;PJeqSj;B>UP#{p?<(4%iw@*j?FXPMTd&l+u z&@rtY45_;}Y}Be`J_Mvz{Snl@)!KV?JPgg&ebxsLQ0D{TEcK`qY literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Fun/push_horn.rsi/meta.json b/Resources/Textures/Objects/Fun/push_horn.rsi/meta.json new file mode 100644 index 0000000000..77fe8221c0 --- /dev/null +++ b/Resources/Textures/Objects/Fun/push_horn.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Made by Thinbug for ss14 :33", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-BELT", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} -- 2.51.2