From f3a97fc0c53e0db2875d02839eb60599e53245e8 Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Thu, 18 Apr 2024 14:21:56 +0300 Subject: [PATCH] Killer tomatoes (#26053) * make tomatoes * many friends! many mommies * finish * renaming system * fix * Update miscellaneous.yml * Update Content.Server/NPC/Systems/NPCImpritingBehaviourSystem.cs Co-authored-by: faint <46868845+ficcialfaint@users.noreply.github.com> * N * deleete exception? * merge conflict fix * fix? * fuck you * sloth fixes * fixess? * fix --------- Co-authored-by: faint <46868845+ficcialfaint@users.noreply.github.com> Co-authored-by: metalgearsloth --- .../NPCImprintingOnSpawnBehaviourComponent.cs | 34 +++++++ .../NPCImprintingOnSpawnBehaviourSystem.cs | 49 +++++++++ Content.Server/NPC/Systems/NPCSystem.cs | 1 + .../Components/FactionExceptionComponent.cs | 2 +- ...aredNPCImprintingOnSpawnBehaviourSystem.cs | 5 + Content.Shared/NPC/Systems/SharedNPCSystem.cs | 5 + Resources/Locale/en-US/seeds/seeds.ftl | 2 + .../Entities/Mobs/NPCs/miscellaneous.yml | 95 ++++++++++++++++++ .../Objects/Specific/Hydroponics/seeds.yml | 10 ++ Resources/Prototypes/Hydroponics/seeds.yml | 36 ++++++- Resources/Prototypes/NPCs/mob.yml | 13 +++ .../Mobs/Demons/tomatokiller.rsi/alive.png | Bin 0 -> 3843 bytes .../Mobs/Demons/tomatokiller.rsi/dead.png | Bin 0 -> 1092 bytes .../Mobs/Demons/tomatokiller.rsi/meta.json | 40 ++++++++ .../Hydroponics/tomatokiller.rsi/dead.png | Bin 0 -> 475 bytes .../Hydroponics/tomatokiller.rsi/harvest.png | Bin 0 -> 352 bytes .../Hydroponics/tomatokiller.rsi/meta.json | 26 +++++ .../Hydroponics/tomatokiller.rsi/seed.png | Bin 0 -> 423 bytes .../Hydroponics/tomatokiller.rsi/stage-1.png | Bin 0 -> 206 bytes .../Hydroponics/tomatokiller.rsi/stage-2.png | Bin 0 -> 290 bytes 20 files changed, 316 insertions(+), 2 deletions(-) create mode 100644 Content.Server/NPC/Components/NPCImprintingOnSpawnBehaviourComponent.cs create mode 100644 Content.Server/NPC/Systems/NPCImprintingOnSpawnBehaviourSystem.cs create mode 100644 Content.Shared/NPC/Systems/SharedNPCImprintingOnSpawnBehaviourSystem.cs create mode 100644 Content.Shared/NPC/Systems/SharedNPCSystem.cs create mode 100644 Resources/Textures/Mobs/Demons/tomatokiller.rsi/alive.png create mode 100644 Resources/Textures/Mobs/Demons/tomatokiller.rsi/dead.png create mode 100644 Resources/Textures/Mobs/Demons/tomatokiller.rsi/meta.json create mode 100644 Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/dead.png create mode 100644 Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/harvest.png create mode 100644 Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/meta.json create mode 100644 Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/seed.png create mode 100644 Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/stage-1.png create mode 100644 Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/stage-2.png diff --git a/Content.Server/NPC/Components/NPCImprintingOnSpawnBehaviourComponent.cs b/Content.Server/NPC/Components/NPCImprintingOnSpawnBehaviourComponent.cs new file mode 100644 index 0000000000..26439d2b30 --- /dev/null +++ b/Content.Server/NPC/Components/NPCImprintingOnSpawnBehaviourComponent.cs @@ -0,0 +1,34 @@ +using Content.Shared.Whitelist; +using Robust.Shared.Collections; + +namespace Content.Server.NPC.Components; +/// +/// A component that makes the entity friendly to nearby creatures it sees on init. +/// +[RegisterComponent] +public sealed partial class NPCImprintingOnSpawnBehaviourComponent : Component +{ + /// + /// filter who can be a friend to this creature + /// + [DataField] + public EntityWhitelist? Whitelist; + + /// + /// when a creature appears, it will memorize all creatures in the radius to remember them as friends + /// + [DataField] + public float SpawnFriendsSearchRadius = 3f; + + /// + /// if there is a FollowCompound in HTN, the target of the following will be selected from random nearby targets when it appears + /// + [DataField] + public bool Follow = true; + + /// + /// is used to determine who became a friend from this component + /// + [DataField] + public List Friends = new(); +} diff --git a/Content.Server/NPC/Systems/NPCImprintingOnSpawnBehaviourSystem.cs b/Content.Server/NPC/Systems/NPCImprintingOnSpawnBehaviourSystem.cs new file mode 100644 index 0000000000..cfd3b08c61 --- /dev/null +++ b/Content.Server/NPC/Systems/NPCImprintingOnSpawnBehaviourSystem.cs @@ -0,0 +1,49 @@ +using System.Numerics; +using Content.Shared.NPC.Components; +using Content.Shared.NPC.Systems; +using Robust.Shared.Collections; +using Robust.Shared.Map; +using Robust.Shared.Random; +using NPCImprintingOnSpawnBehaviourComponent = Content.Server.NPC.Components.NPCImprintingOnSpawnBehaviourComponent; + +namespace Content.Server.NPC.Systems; + +public sealed partial class NPCImprintingOnSpawnBehaviourSystem : SharedNPCImprintingOnSpawnBehaviourSystem +{ + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly NPCSystem _npc = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnMapInit); + } + + private void OnMapInit(Entity imprinting, ref MapInitEvent args) + { + HashSet friends = new(); + _lookup.GetEntitiesInRange(imprinting, imprinting.Comp.SpawnFriendsSearchRadius, friends); + + foreach (var friend in friends) + { + if (imprinting.Comp.Whitelist?.IsValid(friend) != false) + { + AddImprintingTarget(imprinting, friend, imprinting.Comp); + } + } + + if (imprinting.Comp.Follow && imprinting.Comp.Friends.Count > 0) + { + var mommy = _random.Pick(imprinting.Comp.Friends); + _npc.SetBlackboard(imprinting, NPCBlackboard.FollowTarget, new EntityCoordinates(mommy, Vector2.Zero)); + } + } + + public void AddImprintingTarget(EntityUid entity, EntityUid friend, NPCImprintingOnSpawnBehaviourComponent component) + { + component.Friends.Add(friend); + var exception = EnsureComp(entity); + exception.Ignored.Add(friend); + } +} diff --git a/Content.Server/NPC/Systems/NPCSystem.cs b/Content.Server/NPC/Systems/NPCSystem.cs index 8abe0f7f54..9108629435 100644 --- a/Content.Server/NPC/Systems/NPCSystem.cs +++ b/Content.Server/NPC/Systems/NPCSystem.cs @@ -5,6 +5,7 @@ using Content.Shared.CCVar; using Content.Shared.Mobs; using Content.Shared.Mobs.Systems; using Content.Shared.NPC; +using Content.Shared.NPC.Systems; using Robust.Server.GameObjects; using Robust.Shared.Configuration; using Robust.Shared.Player; diff --git a/Content.Shared/NPC/Components/FactionExceptionComponent.cs b/Content.Shared/NPC/Components/FactionExceptionComponent.cs index 54de0404c2..ba7940d502 100644 --- a/Content.Shared/NPC/Components/FactionExceptionComponent.cs +++ b/Content.Shared/NPC/Components/FactionExceptionComponent.cs @@ -7,7 +7,7 @@ namespace Content.Shared.NPC.Components; /// Prevents an NPC from attacking ignored entities from enemy factions. /// Can be added to if pettable, see PettableFriendComponent. /// -[RegisterComponent, NetworkedComponent, Access(typeof(NpcFactionSystem))] +[RegisterComponent, NetworkedComponent, Access(typeof(NpcFactionSystem), typeof(SharedNPCImprintingOnSpawnBehaviourSystem))] // TO DO (Metalgearsloth): If we start adding a billion access overrides they should be going through a system as then there's no reason to have access, but I'll fix this when I rework npcs. public sealed partial class FactionExceptionComponent : Component { /// diff --git a/Content.Shared/NPC/Systems/SharedNPCImprintingOnSpawnBehaviourSystem.cs b/Content.Shared/NPC/Systems/SharedNPCImprintingOnSpawnBehaviourSystem.cs new file mode 100644 index 0000000000..f06d496e9e --- /dev/null +++ b/Content.Shared/NPC/Systems/SharedNPCImprintingOnSpawnBehaviourSystem.cs @@ -0,0 +1,5 @@ +namespace Content.Shared.NPC.Systems; + +public abstract partial class SharedNPCImprintingOnSpawnBehaviourSystem : EntitySystem +{ +} diff --git a/Content.Shared/NPC/Systems/SharedNPCSystem.cs b/Content.Shared/NPC/Systems/SharedNPCSystem.cs new file mode 100644 index 0000000000..247ab478a1 --- /dev/null +++ b/Content.Shared/NPC/Systems/SharedNPCSystem.cs @@ -0,0 +1,5 @@ +namespace Content.Shared.NPC.Systems; + +public abstract partial class SharedNPCSystem : EntitySystem +{ +} diff --git a/Resources/Locale/en-US/seeds/seeds.ftl b/Resources/Locale/en-US/seeds/seeds.ftl index b398378288..10eb533770 100644 --- a/Resources/Locale/en-US/seeds/seeds.ftl +++ b/Resources/Locale/en-US/seeds/seeds.ftl @@ -41,6 +41,8 @@ seeds-bluetomato-name = blue tomato seeds-bluetomato-display-name = blue tomato plant seeds-bloodtomato-name = blood tomato seeds-bloodtomato-display-name = blood tomato plant +seeds-killertomato-name = tomato killer +seeds-killertomato-display-name = tomato killer plant seeds-eggplant-name = eggplant seeds-eggplant-display-name = eggplants seeds-apple-name = apple diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml b/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml index 633a4ff3ca..6fca4e6a63 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml @@ -66,3 +66,98 @@ interactFailureString: petting-failure-generic interactSuccessSound: path: /Audio/Animals/lizard_happy.ogg + +- type: entity + id: MobTomatoKiller + parent: + - BaseSimpleMob + - MobDamageable + - MobBloodstream + - MobFlammable + - MobCombat + name: tomato killer + description: it seems today it's not you eating tomatoes, it's the tomatoes eating you. + components: + - type: Item + size: Huge + - type: NpcFactionMember + factions: + - SimpleHostile + - type: HTN + rootTask: + task: KillerTomatoCompound + - type: NPCImprintingOnSpawnBehaviour + whitelist: + components: + - HumanoidAppearance + - type: Sprite + sprite: Mobs/Demons/tomatokiller.rsi + noRot: true + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alive + - type: Bloodstream + bloodReagent: JuiceTomato + bloodMaxVolume: 50 + chemicalMaxVolume: 30 + - type: DamageStateVisuals + states: + Alive: + Base: alive + Dead: + Base: dead + - type: Butcherable + spawned: + - id: FoodMeatTomato + amount: 2 + - type: Destructible + thresholds: + - trigger: + !type:DamageTypeTrigger + damageType: Blunt + damage: 100 + behaviors: + - !type:GibBehavior { } + - type: MobThresholds + thresholds: + 0: Alive + 24: Dead + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.30 + density: 80 + mask: + - MobMask + layer: + - MobLayer + - type: MeleeWeapon + hidden: true + damage: + groups: + Brute: 4 + animation: WeaponArcBite + - type: Climbing + - type: NameIdentifier + group: GenericNumber + - type: SlowOnDamage + speedModifierThresholds: + 60: 0.7 + 80: 0.5 + - type: FootstepModifier + footstepSoundCollection: + path: /Audio/Effects/Footsteps/slime1.ogg + params: + volume: 3 + - type: Tag + tags: + - FootstepSound + - Fruit + - type: Extractable + grindableSolutionName: bloodstream + - type: PotencyVisuals + - type: Appearance + - type: Produce + seedId: killerTomato diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml index 2b232d643d..0a084dc246 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml @@ -213,6 +213,16 @@ - type: Sprite sprite: Objects/Specific/Hydroponics/blood_tomato.rsi +- type: entity + parent: SeedBase + name: packet of killer tomato seeds + id: KillerTomatoSeeds + components: + - type: Seed + seedId: killerTomato + - type: Sprite + sprite: Objects/Specific/Hydroponics/tomatokiller.rsi + - type: entity parent: SeedBase name: packet of eggplant seeds diff --git a/Resources/Prototypes/Hydroponics/seeds.yml b/Resources/Prototypes/Hydroponics/seeds.yml index 71b20440f5..8bbbed6135 100644 --- a/Resources/Prototypes/Hydroponics/seeds.yml +++ b/Resources/Prototypes/Hydroponics/seeds.yml @@ -479,8 +479,10 @@ packetPrototype: BloodTomatoSeeds productPrototypes: - FoodBloodTomato + mutationPrototypes: + - killerTomato harvestRepeat: Repeat - lifespan: 25 + lifespan: 60 maturation: 8 production: 6 yield: 2 @@ -500,6 +502,38 @@ Max: 4 PotencyDivisor: 25 +- type: seed + id: killerTomato + name: seeds-killertomato-name + noun: seeds-noun-seeds + displayName: seeds-killertomato-display-name + plantRsi: Objects/Specific/Hydroponics/tomatokiller.rsi + packetPrototype: KillerTomatoSeeds + productPrototypes: + - MobTomatoKiller + harvestRepeat: Repeat + lifespan: 25 + maturation: 15 + production: 6 + yield: 2 + potency: 10 + waterConsumption: 0.60 + nutrientConsumption: 0.70 + idealLight: 8 + idealHeat: 298 + juicy: true + growthStages: 2 + splatPrototype: PuddleSplatter + chemicals: + Blood: + Min: 1 + Max: 10 + PotencyDivisor: 10 + JuiceTomato: + Min: 1 + Max: 4 + PotencyDivisor: 25 + - type: seed id: eggplant name: seeds-eggplant-name diff --git a/Resources/Prototypes/NPCs/mob.yml b/Resources/Prototypes/NPCs/mob.yml index 740f7ca576..b0e1c8ae9b 100644 --- a/Resources/Prototypes/NPCs/mob.yml +++ b/Resources/Prototypes/NPCs/mob.yml @@ -77,3 +77,16 @@ - tasks: - !type:HTNCompoundTask task: IdleCompound + +- type: htnCompound + id: KillerTomatoCompound + branches: + - tasks: + - !type:HTNCompoundTask + task: MeleeCombatCompound + - tasks: + - !type:HTNCompoundTask + task: FollowCompound + - tasks: + - !type:HTNCompoundTask + task: IdleCompound diff --git a/Resources/Textures/Mobs/Demons/tomatokiller.rsi/alive.png b/Resources/Textures/Mobs/Demons/tomatokiller.rsi/alive.png new file mode 100644 index 0000000000000000000000000000000000000000..5f459d518b552ad026938fa2b292a28657913a96 GIT binary patch literal 3843 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 FV1mdja^U~~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Demons/tomatokiller.rsi/dead.png b/Resources/Textures/Mobs/Demons/tomatokiller.rsi/dead.png new file mode 100644 index 0000000000000000000000000000000000000000..4b3ee970a0c36fd06b9c33eab7db785200cc2a55 GIT binary patch literal 1092 zcmV-K1iSl*P)H-l1~-0W$dzIjjIzW?9*e7wi)SAOoLxw*%-0I&eC0B~0T{-b{7jIa5% z{|#WasN*uvy7#({XMBdEw z0?3_Ov!G}~LwyDBO^f(hH<}G<3JwgIL^T)h?(sqmc|+s}kPY=Qzfx~N*)tyOutH0L z=c0!Btj+0u_@k_h3R&BEC{DzlhZOj?`?WP2Pbp7%37h{sPfB>q&H!3V!wA~G5vs@r4&K|;7l7I{d!J*bR^p)z?v zj}ZO#CzR5$f>YE6t`YL;ByF8kb`2Vtl*Pop7Hal?hpm)ASVZnN0=sLEsw>S+=)nN) zx<>5LtB^>bFRLaMm>^`zLFHo!Kw5mve~vOumzIGgQ*`j%3##q|k!I8crtP?2HvuLLbkfyaQSUYwR>FcFoXFFrPhpB7d&92@aO8O4dDv4PoV5Vso z4sbPXVrJ3|7^SqtOtoxNHc|s8Fb7UL;#rHuGb~HQ z2p0k{9PHE@s}8A$CX?B==fe68EY&rJx4ul3OWUvrH0QLuSmYh7QRpN9((=2 zdl~)u4@jBZ?YU>yeHH&MnAL6h3f~bx&St+@ZdKXy1~4DC0Pr`2#<2Ybw|2$=0000< KMNUMnLSTYUo(x0) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Demons/tomatokiller.rsi/meta.json b/Resources/Textures/Mobs/Demons/tomatokiller.rsi/meta.json new file mode 100644 index 0000000000..57e4c7351f --- /dev/null +++ b/Resources/Textures/Mobs/Demons/tomatokiller.rsi/meta.json @@ -0,0 +1,40 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": " taken from TG on commit https://github.com/tgstation/tgstation/commit/7e5f13f558253e76865e81c9641b7ec68e57754b", + "states": [ + { + "name": "alive", + "directions": 4, + "delays": [ + [ + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "dead" + } + ] +} diff --git a/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/dead.png b/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/dead.png new file mode 100644 index 0000000000000000000000000000000000000000..0051c4dc7376bffc73143d68633bef15506348f5 GIT binary patch literal 475 zcmV<10VMv3P)Px$l}SWFR9J=Wl(9?0KorKmYlYIG4n-)WlP&%Qp-ZPyp>AC)Lg=D{n5p34;^5%m zAK=uG#YKdoi=#t19J)wBaHtS!LFtg?bPFxCanK7nTH*zC@_y4h-b>z>FYg|pP$(3N z{|<>tQc8t$r`z%YV5fR6JlDS3_j#PnrGBBQd?ZTZag0070+EukT&VL7-y z*pPXhKq5}_hUMTreGdT8C&{2Dn@eK~pl&%}t`|7n_ZUY1m}_bsFodr3HlT&-doRxu2RrqcjlHPtCww4|U4{05I2EIw!FOaP&zM z<8lJb^^h4bn1(GlVH!56TMowML?A+z$Xmc%5BemD(r%joKxs+M<;k|+JiQ?rr9|U` zVhD(Iz%*>an}`3gti3XGA+-mhczpXn^E-YxuKED5-kW1BG$T<+--7U94ewq60GR

Ij_-Jp_2M{#l0*bZ5LVP%yf$sy;u*pxWSfNlTJ^`8Nsg!!Q RA0Yq$002ovPDHLkV1hzk*LMH_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/harvest.png b/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/harvest.png new file mode 100644 index 0000000000000000000000000000000000000000..46a3b389827c2d64cd26a7d9696ddf40099f0c0a GIT binary patch literal 352 zcmV-m0iXVfP)Px$8c9S!R9J=Wl)a6^FbsvC4qhNYx@$ay2VjvA(q#>GsndB4cLr{OD>y)g&;VY* zfB~hj75zk~D8XHI`~U%>Xp2u2ML-Y)LHO^el9QPuo2G*W0N#H`|IwA~-DsQ0Peerl zO^r&L4i;wdwh01mj2bxhHM_-pyb^rW0NRY^w!sWw&;ZPG&(yC72$_TVpkv=BvpW4n z1{|YagQV-+v3m8?)dIrw&x!pY#w%el!MTfrbH~aBPp{?~#b<~fHW$$0 zPWh7`c>WBF8Q_kU+dRDE+Vs}cMO7ataslwQPABrh_L+jsQC|aLVO@gtv!Bkvpeseq y>n)ghZO1!U>|oJvBeawG0RLUu$^}6Xa@+up@`L&MewR-G0000Px$VM#Y<6bk{QAx+0C&x6Kr9KV z1QPN&{mbj({U5-h_#GTrI#Y#MJ^tulA{?)ee8pz}sDI9G?=OIru@qRTKOmAl4lo4~HgXQV>oc zS(zUM_^wM?(^zpF%9@7ny264#Ht>;36tUT8P>CV{>XS6kYKLj8a|ipW;6@ZtA3X04 z#wYd_ylZY*tc{ujy1l+|PwBJZJG#9-PvJ9r_cublrGLdDb)w=5g+lQ!cmZ9Gi3*5u R5q$sv002ovPDHLkV1oHOu@L|O literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/stage-1.png b/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/stage-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0b1d58de9de4475839a3f7b766fd49f1d00e0b6f GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}9iA?ZArY-_ zCvFrxWFWxe&m+4-Vre)dui$RQ@B&TS6|C14)Y*>7vA!_nVcb4((*NkcjK?IBdkpQ> zzVdlg?cKR4E2x75`!)IX}la+JzYu2_~QUzmZY=fqGZ#*YC%GZes9s^>bP0l+XkK DuvPx#+(|@1R9J=Wl-mu%APhw>O-JY)nZaVMO8M(r(VZc4WC!|@lA1iI)5lkRq)0Is ze6bCH<2a71tUWq+so7* zb>|MLwrM_PE$FLjSj~VwnXa)ly_UXs`xeaHK3i@Vpc_jEy>7cpUujq?B&X-NK|+Is o?(u1R@lO)jZ~2rvj^k``2j0$bCf_A20ssI207*qoM6N<$f=0}EA^-pY literal 0 HcmV?d00001