From 90a67bf3b0801f4af9ee5fe69075276f5ccb049a Mon Sep 17 00:00:00 2001 From: VividPups <68whiskty@gmail.com> Date: Wed, 20 Nov 2024 20:50:50 -0600 Subject: [PATCH 01/44] ONI MELEE Oni melee --- .../Floof/Entities/Objects/Weapons/Melee.yml | 83 ++++++++++++++++++ .../Crafting/Graphs/brassknuckles_graph.yml | 36 ++++++++ .../Floof/Recipes/Crafting/improvised.yml | 26 ++++++ .../Prototypes/Loadouts/Jobs/service.yml | 17 ++++ Resources/Prototypes/tags.yml | 5 ++ .../Melee/brassknuckles.rsi/equipped-HAND.png | Bin 0 -> 218 bytes .../Weapons/Melee/brassknuckles.rsi/icon.png | Bin 0 -> 223 bytes .../Melee/brassknuckles.rsi/inhand-left.png | Bin 0 -> 193 bytes .../Melee/brassknuckles.rsi/inhand-right.png | Bin 0 -> 203 bytes .../Weapons/Melee/brassknuckles.rsi/meta.json | 26 ++++++ .../Melee/crassknuckles.rsi/equipped-HAND.png | Bin 0 -> 192 bytes .../Weapons/Melee/crassknuckles.rsi/icon.png | Bin 0 -> 223 bytes .../Melee/crassknuckles.rsi/inhand-left.png | Bin 0 -> 162 bytes .../Melee/crassknuckles.rsi/inhand-right.png | Bin 0 -> 176 bytes .../Weapons/Melee/crassknuckles.rsi/meta.json | 26 ++++++ 15 files changed, 219 insertions(+) create mode 100644 Resources/Prototypes/Floof/Entities/Objects/Weapons/Melee.yml create mode 100644 Resources/Prototypes/Floof/Recipes/Crafting/Graphs/brassknuckles_graph.yml create mode 100644 Resources/Textures/Floof/Objects/Weapons/Melee/brassknuckles.rsi/equipped-HAND.png create mode 100644 Resources/Textures/Floof/Objects/Weapons/Melee/brassknuckles.rsi/icon.png create mode 100644 Resources/Textures/Floof/Objects/Weapons/Melee/brassknuckles.rsi/inhand-left.png create mode 100644 Resources/Textures/Floof/Objects/Weapons/Melee/brassknuckles.rsi/inhand-right.png create mode 100644 Resources/Textures/Floof/Objects/Weapons/Melee/brassknuckles.rsi/meta.json create mode 100644 Resources/Textures/Floof/Objects/Weapons/Melee/crassknuckles.rsi/equipped-HAND.png create mode 100644 Resources/Textures/Floof/Objects/Weapons/Melee/crassknuckles.rsi/icon.png create mode 100644 Resources/Textures/Floof/Objects/Weapons/Melee/crassknuckles.rsi/inhand-left.png create mode 100644 Resources/Textures/Floof/Objects/Weapons/Melee/crassknuckles.rsi/inhand-right.png create mode 100644 Resources/Textures/Floof/Objects/Weapons/Melee/crassknuckles.rsi/meta.json diff --git a/Resources/Prototypes/Floof/Entities/Objects/Weapons/Melee.yml b/Resources/Prototypes/Floof/Entities/Objects/Weapons/Melee.yml new file mode 100644 index 00000000000..acb3c3c82a1 --- /dev/null +++ b/Resources/Prototypes/Floof/Entities/Objects/Weapons/Melee.yml @@ -0,0 +1,83 @@ +- type: entity + name: brass knuckles + parent: ClothingHandsBase + id: WeaponBrassKnuckles + description: Ever wanted to protect your bar but your hands are too big for guns? S.E.S.W.C has what you need! + components: + - type: Sprite + sprite: Floof/Objects/Weapons/Melee/brassknuckles.rsi + state: icon + - type: Clothing + sprite: Floof/Objects/Weapons/Melee/brassknuckles.rsi + - type: MeleeWeapon + autoAttack: true + attackRate: 2 # ~12 dps + damage: + types: + Blunt: 6 + soundHit: + collection: Punch + animation: WeaponArcFist + mustBeEquippedToUse: true + - type: StaminaDamageOnHit + damage: 11 + - type: Armor + modifiers: + coefficients: + Shock: 1.05 # oh no so conductive + - type: Insulated + coefficient: 1.5 # Extra damage. Don't punch wires, kids. + - type: Tag + tags: + - WhitelistChameleon + - BrassKnuckles + - type: PhysicalComposition + materialComposition: + Brass: 1000 + - type: StaticPrice + price: 30 # Ensures these can be sold and have a reasonable vending value. + +- type: entity + name: improvised brass knuckles + parent: WeaponBrassKnuckles + id: WeaponBrassKnucklesImprovised + description: Ever wanted to punch just a little harder? + components: + - type: MeleeWeapon + attackRate: 1.6 # ~9.6 dps + - type: Construction + graph: GraphWeaponBrassKnucklesImprovised + node: WeaponBrassKnucklesImprovised + +- type: entity + name: crass knuckles + parent: WeaponBrassKnuckles + id: WeaponBrassKnucklesWhoopie + description: Questionably silent, questionably deadly. + components: + - type: Sprite + sprite: Floof/Objects/Weapons/Melee/crassknuckles.rsi + state: icon + - type: Clothing + sprite: Floof/Objects/Weapons/Melee/crassknuckles.rsi + - type: MeleeWeapon + damage: + types: + Blunt: 0 # ~0 dps :^) + Structural: 0 + soundHit: + collection: Parp + - type: Construction + graph: GraphWeaponBrassKnucklesWhoopie + node: WeaponBrassKnucklesWhoopie + - type: StaminaDamageOnHit + damage: 4 # 8 per second, similar to the toy hammer + - type: Armor + modifiers: + coefficients: + Shock: 1.0 # Nothing special. + - type: Insulated + coefficient: 1 # Nothing special. + - type: Tag + tags: + - WhitelistChameleon diff --git a/Resources/Prototypes/Floof/Recipes/Crafting/Graphs/brassknuckles_graph.yml b/Resources/Prototypes/Floof/Recipes/Crafting/Graphs/brassknuckles_graph.yml new file mode 100644 index 00000000000..8ea26290021 --- /dev/null +++ b/Resources/Prototypes/Floof/Recipes/Crafting/Graphs/brassknuckles_graph.yml @@ -0,0 +1,36 @@ +- type: constructionGraph + id: GraphWeaponBrassKnucklesImprovised + start: start + graph: + - node: start + edges: + - to: WeaponBrassKnucklesImprovised + steps: + - material: Brass + amount: 10 + doAfter: 4 + - node: WeaponBrassKnucklesImprovised + entity: WeaponBrassKnucklesImprovised + +- type: constructionGraph + id: GraphWeaponBrassKnucklesWhoopie + start: start + graph: + - node: start + edges: + - to: WeaponBrassKnucklesWhoopie + steps: + - tag: BrassKnuckles + icon: + sprite: Floof/Objects/Weapons/Melee/brassknuckles.rsi + state: icon + name: brass knuckles + doAfter: 2 + - tag: WhoopieCushion + icon: + sprite: Objects/Fun/whoopie.rsi + state: icon + name: whoopie cushion + doAfter: 2 + - node: WeaponBrassKnucklesWhoopie + entity: WeaponBrassKnucklesWhoopie diff --git a/Resources/Prototypes/Floof/Recipes/Crafting/improvised.yml b/Resources/Prototypes/Floof/Recipes/Crafting/improvised.yml index a89e5f5e418..f4fa65485e6 100644 --- a/Resources/Prototypes/Floof/Recipes/Crafting/improvised.yml +++ b/Resources/Prototypes/Floof/Recipes/Crafting/improvised.yml @@ -24,3 +24,29 @@ sprite: Floof/Structures/sleepingbag.rsi state: open objectType: Item + +- type: construction + name: improvised brass knuckles + id: BrassKnucklesImprovised + graph: GraphWeaponBrassKnucklesImprovised + startNode: start + targetNode: WeaponBrassKnucklesImprovised + category: construction-category-weapons + description: Ever wanted to punch just a little harder? + icon: + sprite: Floof/Objects/Weapons/Melee/brassknuckles.rsi + state: icon + objectType: Item + +- type: construction + name: crass knuckles + id: CrassKnuckles + graph: GraphWeaponBrassKnucklesWhoopie + startNode: start + targetNode: WeaponBrassKnucklesWhoopie + category: construction-category-weapons + description: Questionably silent, unquestionably deadly. + icon: + sprite: Floof/Objects/Weapons/Melee/crassknuckles.rsi + state: icon + objectType: Item diff --git a/Resources/Prototypes/Loadouts/Jobs/service.yml b/Resources/Prototypes/Loadouts/Jobs/service.yml index c0f04ef151a..579a402d5c2 100644 --- a/Resources/Prototypes/Loadouts/Jobs/service.yml +++ b/Resources/Prototypes/Loadouts/Jobs/service.yml @@ -319,6 +319,23 @@ items: - WeaponSniperMosinRubber +- type: loadout # Floof + id: LoadoutServiceBartenderBrassKnuckles + category: JobsServiceBartender + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBartenderWeapon + - !type:CharacterJobRequirement + jobs: + - Bartender + - !type:CharacterSpeciesRequirement + species: + - Oni + items: + - WeaponBrassKnuckles + - type: loadout id: LoadoutServiceJumpsuitBartenderNt category: JobsServiceBartender diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index fb8d005c244..70157410ee3 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -1363,3 +1363,8 @@ - type: Tag id: WriteIgnoreStamps + +#Floof tags + +- type: Tag + id: BrassKnuckles diff --git a/Resources/Textures/Floof/Objects/Weapons/Melee/brassknuckles.rsi/equipped-HAND.png b/Resources/Textures/Floof/Objects/Weapons/Melee/brassknuckles.rsi/equipped-HAND.png new file mode 100644 index 0000000000000000000000000000000000000000..15c95b994a46b650930baf5ae7f943dd17543c64 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=3q4&NLn`LHy}6sW*+76HVDg#= zD`#|0nmMCORxfmw2b;B-%f;%gwf0g^yg7l&8SHe5`zAiGzqNbjX5Xvx)^}RI`jfaI z^<1EF!#rn=BQvDlUlqUbiIvT~{$y=Kpj^2)!=K(q@`@mx2d;a)em_zAX3)NCdwiv5 zmEK;ydba-4h-Wgdw|%dc?dy1yQ1$kI^~*Samx^rmC|}K`&+oc26ddB7@XzO#%XIq~ OkQtt?elF{r5}E*G>RCtt literal 0 HcmV?d00001 diff --git a/Resources/Textures/Floof/Objects/Weapons/Melee/brassknuckles.rsi/icon.png b/Resources/Textures/Floof/Objects/Weapons/Melee/brassknuckles.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..537c32f1bb8d9d01b42bab41a0d9f3abc6db8f39 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyJOMr-u0VQTnDT~1)r1pBx?Mb-+;p5iX!The9h%H+v#^m)>$^#b3eHeCPEx1QU&n~}Nd T(6SpqmoRv``njxgN@xNAYM)fy literal 0 HcmV?d00001 diff --git a/Resources/Textures/Floof/Objects/Weapons/Melee/brassknuckles.rsi/inhand-left.png b/Resources/Textures/Floof/Objects/Weapons/Melee/brassknuckles.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..5543d82e7b04c6c6cc90a817bab3713ad9eb8e25 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|sy$sCLn`LH zy|q!WK|z4UVJq9JMQTpjo3yGAoRCzW%zm+Od&B(a9PgKN0u?hH^71SF!gqL1f4=0Q z81}-$iN`*tz@zE+DEg^OcuX-GbuQB``^9a nnfAui|KGlyWq+*&gTocZc@NbUk0ej$0V(%%^>bP0l+XkK*r7*3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Floof/Objects/Weapons/Melee/brassknuckles.rsi/inhand-right.png b/Resources/Textures/Floof/Objects/Weapons/Melee/brassknuckles.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..eb143f60324dbacf57d247f0e65c656c7d4a7173 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|T0LDHLn`LH zy>*cHkO2>C0DD-1R@$QzK6ATd&#VkmU81#!Rr_M~_Y?Q+j`abRGc@q`|JGe?JSB3r zd?v^8)VpT(ml%}%}@zvd*&6|luX%v#iq zFS%8c;g7p#?0M}qtNFk5NDKH}cx2*yQqkv5jSvIF9O-P^$h}3nFIghD+~J}z)S0gY$yboFyt=akR{0DlfTjQ{`u literal 0 HcmV?d00001 diff --git a/Resources/Textures/Floof/Objects/Weapons/Melee/crassknuckles.rsi/icon.png b/Resources/Textures/Floof/Objects/Weapons/Melee/crassknuckles.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..03fe3c298dd341f58a17d0ae6cbb5540b5eb58fc GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyJOMr-u0VRCvcU#*^YdC8R=o57+-jk8d#PEuDaVf42)Ul^ zTivmuRPSal*NbPe4ypG;mM-7R$h4sTaxMRvGVxz5Q*s!6YOPm!{I5JYwSt8wqwwYK zdCwQ0p8nzY7n!Mbf_+?{B5MU^PjQ#=E$K3LW%6V=`aJ2>dV%j!8?JxoThDFX&B$DJ TXxR;*OBg&|{an^LB{Ts5ayCsy&V9AI3zfk8Y$+|&wWiKnZd%Q~loCICDd BF7p5Y literal 0 HcmV?d00001 diff --git a/Resources/Textures/Floof/Objects/Weapons/Melee/crassknuckles.rsi/inhand-right.png b/Resources/Textures/Floof/Objects/Weapons/Melee/crassknuckles.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..45893fcc6681ecd8bcbd76c62ec6589dba22e135 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!gaUj*T!D0zs3MU34+cO6gBVzp ztt7}VnBhMo6C?Bd7s79W;_jXWKiI64!lvHDXVZ?@N&eTaBn}YAXbL| zFDveO2>8F>^O<$(gS8X%co-PUo=w`Y^Tgwc@g@!1s=E3(o;RAauiDBW9`v!a1!R|} LtDnm{r-UW|99cSS literal 0 HcmV?d00001 diff --git a/Resources/Textures/Floof/Objects/Weapons/Melee/crassknuckles.rsi/meta.json b/Resources/Textures/Floof/Objects/Weapons/Melee/crassknuckles.rsi/meta.json new file mode 100644 index 00000000000..7d2effdd440 --- /dev/null +++ b/Resources/Textures/Floof/Objects/Weapons/Melee/crassknuckles.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "icon by Whatstone, inhand-left, inhand-right, equipped-HAND by VividPups, modified by Whatstone", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HAND", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} From a11ec928862607abf0e35021c8bf1e9195730901 Mon Sep 17 00:00:00 2001 From: fenndragon Date: Wed, 27 Nov 2024 13:15:59 -0700 Subject: [PATCH 02/44] Update pickaxe.yml --- Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml index fb1eb3d7fe9..be1884fc746 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml @@ -60,7 +60,7 @@ wideAnimationRotation: -90 soundHit: path: "/Audio/Items/drill_hit.ogg" - attackRate: 1.2 + attackRate: 4 range: 1.5 damage: types: From 5513b7d21241971a47cae86c8cf3ef2dc0bb28ba Mon Sep 17 00:00:00 2001 From: fenndragon Date: Wed, 27 Nov 2024 13:32:52 -0700 Subject: [PATCH 03/44] Update pickaxe.yml attempting workaround --- Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml index be1884fc746..2e76f752004 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml @@ -71,6 +71,7 @@ heavyRateModifier: 1 heavyRangeModifier: 2 heavyDamageBaseModifier: 1 + heavyStaminaCost: -2.5 angle: 20 - type: ReverseEngineering # Nyano From c5fc9b50a005a47352567a881e577c491445f3dc Mon Sep 17 00:00:00 2001 From: fenndragon Date: Thu, 28 Nov 2024 13:38:24 -0700 Subject: [PATCH 04/44] Update roundstart.yml irregular extended fix --- Resources/Prototypes/GameRules/roundstart.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Resources/Prototypes/GameRules/roundstart.yml b/Resources/Prototypes/GameRules/roundstart.yml index 991b677bcb1..6ae94e26b0c 100644 --- a/Resources/Prototypes/GameRules/roundstart.yml +++ b/Resources/Prototypes/GameRules/roundstart.yml @@ -270,12 +270,10 @@ components: - type: OscillatingStationEventScheduler minChaos: 0.8 - maxChaos: 8 - startingSlope: -1 - downwardsLimit: -0.4 - upwardsLimit: 0.3 - downwardsBias: -1.1 - upwardsBias: 0.9 + maxChaos: 14 + startingSlope: 0.2 + downwardsLimit: -0.35 + upwardsLimit: 0.4 # variation passes - type: entity From b6286ae46bca34dd0e0e4be59e8c2b1e0bd0766d Mon Sep 17 00:00:00 2001 From: fenndragon Date: Mon, 2 Dec 2024 15:26:45 -0700 Subject: [PATCH 05/44] Update pickaxe.yml adjusting the Drills damages to match Frontier --- .../Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml index 2e76f752004..093d7347019 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml @@ -64,9 +64,9 @@ range: 1.5 damage: types: - Blunt: 6 - Slash: 3 - Structural: 12 + Blunt: 2 + Slash: 1 + Structural: 15 bluntStaminaDamageFactor: 4.0 heavyRateModifier: 1 heavyRangeModifier: 2 From 1f14fd0ccaa524f624f4feedddbbff39c525bf1a Mon Sep 17 00:00:00 2001 From: FoxxoTrystan Date: Tue, 3 Dec 2024 03:33:31 +0100 Subject: [PATCH 06/44] Disable Resomi --- Resources/Prototypes/Floof/Species/resomi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Floof/Species/resomi.yml b/Resources/Prototypes/Floof/Species/resomi.yml index 1e8487952ae..70a9a6cdbf4 100644 --- a/Resources/Prototypes/Floof/Species/resomi.yml +++ b/Resources/Prototypes/Floof/Species/resomi.yml @@ -1,7 +1,7 @@ - type: species id: Resomi name: species-name-resomi - roundStart: true + roundStart: false prototype: MobResomi sprites: MobResomiSprites defaultSkinTone: "#faf7f7" From 8752232694b6d930567bacc1c36bcfd71847dea8 Mon Sep 17 00:00:00 2001 From: FoxxoTrystan Date: Tue, 3 Dec 2024 17:26:40 +0100 Subject: [PATCH 07/44] enable resomi --- Resources/Prototypes/Floof/Species/resomi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Floof/Species/resomi.yml b/Resources/Prototypes/Floof/Species/resomi.yml index 70a9a6cdbf4..1e8487952ae 100644 --- a/Resources/Prototypes/Floof/Species/resomi.yml +++ b/Resources/Prototypes/Floof/Species/resomi.yml @@ -1,7 +1,7 @@ - type: species id: Resomi name: species-name-resomi - roundStart: false + roundStart: true prototype: MobResomi sprites: MobResomiSprites defaultSkinTone: "#faf7f7" From 1b9d28716cf6fc538747b96efbf71dd86611a155 Mon Sep 17 00:00:00 2001 From: fox Date: Wed, 4 Dec 2024 14:59:23 +0300 Subject: [PATCH 08/44] Various fixes and tweaks --- Content.Client/Jittering/JitteringSystem.cs | 3 ++- Content.Server/Carrying/CarryingSystem.cs | 15 +++++++++++---- .../Floof => Floof/Language}/scugsign.yml | 0 3 files changed, 13 insertions(+), 5 deletions(-) rename Resources/Prototypes/{Language/Floof => Floof/Language}/scugsign.yml (100%) diff --git a/Content.Client/Jittering/JitteringSystem.cs b/Content.Client/Jittering/JitteringSystem.cs index 185bd490d3b..e143f50d484 100644 --- a/Content.Client/Jittering/JitteringSystem.cs +++ b/Content.Client/Jittering/JitteringSystem.cs @@ -45,7 +45,8 @@ private void OnShutdown(EntityUid uid, JitteringComponent jittering, ComponentSh private void OnAnimationCompleted(EntityUid uid, JitteringComponent jittering, AnimationCompletedEvent args) { - if(args.Key != _jitterAnimationKey) + // FLoofstation - avoid restarting the jittering animation on entites that already stopped jittering + if(args.Key != _jitterAnimationKey || jittering.LifeStage >= ComponentLifeStage.Stopping) return; if (TryComp(uid, out AnimationPlayerComponent? animationPlayer) diff --git a/Content.Server/Carrying/CarryingSystem.cs b/Content.Server/Carrying/CarryingSystem.cs index 857c3861a74..ed5bb36ea5b 100644 --- a/Content.Server/Carrying/CarryingSystem.cs +++ b/Content.Server/Carrying/CarryingSystem.cs @@ -162,11 +162,17 @@ private void OnMobStateChanged(EntityUid uid, CarryingComponent component, MobSt /// private void OnInteractionAttempt(EntityUid uid, BeingCarriedComponent component, InteractionAttemptEvent args) { - if (args.Target == null) + // Floofstation - function body reviewed + Predicate isChildOfCarrier = null!; // C# doesn't have local functions eugh + isChildOfCarrier = (childXForm) => childXForm.ParentUid == component.Carrier + || (childXForm.ParentUid is {Valid: true} parent && isChildOfCarrier(Transform(parent))); + + if (args.Target == null // Allow self-interacts + || isChildOfCarrier(Transform(args.Target.Value))) // Allow interacting with everything on the carriee return; + // Also check if the interacted-with entity is on the carrier and cancel the event if not var targetParent = Transform(args.Target.Value).ParentUid; - if (args.Target.Value != component.Carrier && targetParent != component.Carrier && targetParent != uid) args.Cancel(); } @@ -201,8 +207,9 @@ private void OnStandAttempt(EntityUid uid, BeingCarriedComponent component, Stan private void OnInteractedWith(EntityUid uid, BeingCarriedComponent component, GettingInteractedWithAttemptEvent args) { - if (args.Uid != component.Carrier) - args.Cancel(); + // Floofstation - why. + // if (args.Uid != component.Carrier) + // args.Cancel(); } private void OnPullAttempt(EntityUid uid, BeingCarriedComponent component, PullAttemptEvent args) diff --git a/Resources/Prototypes/Language/Floof/scugsign.yml b/Resources/Prototypes/Floof/Language/scugsign.yml similarity index 100% rename from Resources/Prototypes/Language/Floof/scugsign.yml rename to Resources/Prototypes/Floof/Language/scugsign.yml From 95a0a76e2778bd607b620f08aaefc3711d54bb9f Mon Sep 17 00:00:00 2001 From: VividPups <68whiskty@gmail.com> Date: Wed, 4 Dec 2024 12:08:39 -0600 Subject: [PATCH 09/44] Update Melee.yml --- Resources/Prototypes/Floof/Entities/Objects/Weapons/Melee.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Floof/Entities/Objects/Weapons/Melee.yml b/Resources/Prototypes/Floof/Entities/Objects/Weapons/Melee.yml index acb3c3c82a1..99c1d707ea3 100644 --- a/Resources/Prototypes/Floof/Entities/Objects/Weapons/Melee.yml +++ b/Resources/Prototypes/Floof/Entities/Objects/Weapons/Melee.yml @@ -35,7 +35,7 @@ materialComposition: Brass: 1000 - type: StaticPrice - price: 30 # Ensures these can be sold and have a reasonable vending value. + price: 300 # Ensures these can be sold and have a reasonable vending value. - type: entity name: improvised brass knuckles From c2b677134cd25c3ae679e40535e12e95b0683a2e Mon Sep 17 00:00:00 2001 From: fenndragon Date: Wed, 4 Dec 2024 16:51:43 -0700 Subject: [PATCH 10/44] Update pickaxe.yml --- .../Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml index 093d7347019..21a0e3b9d0f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml @@ -67,11 +67,11 @@ Blunt: 2 Slash: 1 Structural: 15 - bluntStaminaDamageFactor: 4.0 + bluntStaminaDamageFactor: 1 heavyRateModifier: 1 heavyRangeModifier: 2 heavyDamageBaseModifier: 1 - heavyStaminaCost: -2.5 + heavyStaminaCost: 0 angle: 20 - type: ReverseEngineering # Nyano From 3363b226703cfb29f8b45c39d574fe77343a039d Mon Sep 17 00:00:00 2001 From: Fansana <116083121+Fansana@users.noreply.github.com> Date: Thu, 5 Dec 2024 10:45:16 +0100 Subject: [PATCH 11/44] Update publish-testing.yml --- .github/workflows/publish-testing.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish-testing.yml b/.github/workflows/publish-testing.yml index dcbc74a3dd6..44ef248fc08 100644 --- a/.github/workflows/publish-testing.yml +++ b/.github/workflows/publish-testing.yml @@ -4,9 +4,9 @@ concurrency: group: publish on: - workflow_dispatch: - schedule: - - cron: '0 6 * * *' + push: + branches: + - master jobs: build: From 8390f729c7480f1cc2d3169892fb28fb18799f08 Mon Sep 17 00:00:00 2001 From: Fansana <116083121+Fansana@users.noreply.github.com> Date: Thu, 5 Dec 2024 10:45:49 +0100 Subject: [PATCH 12/44] Update publish-stable.yml --- .github/workflows/publish-stable.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish-stable.yml b/.github/workflows/publish-stable.yml index 18ce423a461..d1857697a18 100644 --- a/.github/workflows/publish-stable.yml +++ b/.github/workflows/publish-stable.yml @@ -2,9 +2,11 @@ name: Publish stable concurrency: group: publish - on: - workflow_dispatch: + push: + branches: + - stable # or the branch where merge requests are being merged into (e.g., 'master') + jobs: build: From 3fcbf6baee33a81e63363b1e12c9ff500c393075 Mon Sep 17 00:00:00 2001 From: FloofStation Changelogs <175611579+Floof-Station-Bot@users.noreply.github.com> Date: Thu, 5 Dec 2024 16:34:20 +0000 Subject: [PATCH 13/44] Automatic Changelog Update (#393) --- Resources/Changelog/Floof.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Resources/Changelog/Floof.yml b/Resources/Changelog/Floof.yml index e0ef04a8289..1dadfd07d62 100644 --- a/Resources/Changelog/Floof.yml +++ b/Resources/Changelog/Floof.yml @@ -1695,3 +1695,15 @@ Entries: id: 223 time: '2024-12-03T16:25:05.0000000+00:00' url: https://github.com/Fansana/floofstation1/pull/392 +- author: Mnemotechnician + changes: + - type: Tweak + message: >- + You can now interact with carried entities, and carried entities + themselves can freely interact with items inside their + bags/clothing/etc. + - type: Fix + message: Jittering should no longer leave your character visually off-set. + id: 224 + time: '2024-12-05T16:33:52.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/393 From 27cbf1e3bf80323ffa07853943c9da7f75596c8d Mon Sep 17 00:00:00 2001 From: Mnemotechnican <69920617+Mnemotechnician@users.noreply.github.com> Date: Thu, 14 Nov 2024 23:03:33 +0300 Subject: [PATCH 14/44] Some Language Fixes (#1223) # Description 1. Adds languages to... penguins, cockroaches, snakes, mmis, pdas, mail packages. Positronic brains now only speak/understand the borg language. 2. Adds an explicitly defined universal language to revenants and wisps 3. Makes polymorphs copy over a list of components defined in the polymorph proto, thus copying languages and grammar of the original entity to its polymorphed version.

Media

![image](https://github.com/user-attachments/assets/111c3f91-f077-431f-bcd9-f60fa7a1ba26) ![image](https://github.com/user-attachments/assets/80f939d3-b615-4235-a511-82238758788e) ![image](https://github.com/user-attachments/assets/dce99b55-c8b1-4cbe-8769-b82151b3d404) ![image](https://github.com/user-attachments/assets/6b9b962d-c73c-42b9-b240-aa07601de879)

# Changelog :cl: - tweak: Added languages to certain entities that lacked them, including MMIs and positronic brains. - add: Polymorphing into another entity now preserves your languages and grammar. --- Content.Server/Chat/Systems/ChatSystem.cs | 2 +- .../Polymorph/Systems/PolymorphSystem.cs | 15 +++++++++++++++ Content.Shared/Polymorph/PolymorphPrototype.cs | 11 +++++++++++ .../Prototypes/Entities/Mobs/NPCs/animals.yml | 9 +++++++++ .../Entities/Mobs/NPCs/glimmer_creatures.yml | 3 +++ .../Prototypes/Entities/Mobs/NPCs/revenant.yml | 2 ++ .../Prototypes/Entities/Objects/Devices/pda.yml | 4 ++++ .../Entities/Objects/Specific/Robotics/mmi.yml | 8 ++++++++ Resources/Prototypes/Language/animal.yml | 13 +++++++++++++ .../Entities/Objects/Specific/Mail/base_mail.yml | 4 ++++ 10 files changed, 70 insertions(+), 1 deletion(-) diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index 3648cf24e10..899ae778bd9 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -43,7 +43,7 @@ namespace Content.Server.Chat.Systems; // Dear contributor. When I was introducing changes to this system only god and I knew what I was doing. // Now only god knows. Please don't touch this code ever again. If you do have to, increment this counter as a warning for others: -// TOTAL_HOURS_WASTED_HERE_EE = 17 +// TOTAL_HOURS_WASTED_HERE_EE = 18 // TODO refactor whatever active warzone this class and chatmanager have become /// diff --git a/Content.Server/Polymorph/Systems/PolymorphSystem.cs b/Content.Server/Polymorph/Systems/PolymorphSystem.cs index e6ba1d02afd..5c970b1a748 100644 --- a/Content.Server/Polymorph/Systems/PolymorphSystem.cs +++ b/Content.Server/Polymorph/Systems/PolymorphSystem.cs @@ -20,6 +20,7 @@ using Robust.Server.GameObjects; using Robust.Shared.Map; using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.Manager; using Robust.Shared.Timing; using Robust.Shared.Utility; @@ -31,6 +32,7 @@ public sealed partial class PolymorphSystem : EntitySystem [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly ISerializationManager _serialization = default!; [Dependency] private readonly ActionsSystem _actions = default!; [Dependency] private readonly AudioSystem _audio = default!; [Dependency] private readonly SharedBuckleSystem _buckle = default!; @@ -201,6 +203,19 @@ private void OnDestruction(Entity ent, ref Destructi var child = Spawn(configuration.Entity, _transform.GetMapCoordinates(uid, targetTransformComp), rotation: _transform.GetWorldRotation(uid)); + // Copy specified components over + foreach (var compName in configuration.CopiedComponents) + { + if (!_compFact.TryGetRegistration(compName, out var reg) + || !EntityManager.TryGetComponent(uid, reg.Idx, out var comp)) + continue; + + var copy = _serialization.CreateCopy(comp, notNullableOverride: true); + copy.Owner = child; + AddComp(child, copy, true); + } + + // Ensure the resulting entity is sentient (why? this sucks) MakeSentientCommand.MakeSentient(child, EntityManager); var polymorphedComp = _compFact.GetComponent(); diff --git a/Content.Shared/Polymorph/PolymorphPrototype.cs b/Content.Shared/Polymorph/PolymorphPrototype.cs index 6d010711d2e..e1bc3b0ba03 100644 --- a/Content.Shared/Polymorph/PolymorphPrototype.cs +++ b/Content.Shared/Polymorph/PolymorphPrototype.cs @@ -115,6 +115,17 @@ public sealed partial record PolymorphConfiguration [DataField(serverOnly: true)] [ViewVariables(VVAccess.ReadWrite)] public TimeSpan Cooldown = TimeSpan.Zero; + + /// + /// The exact names of components to copy over when this polymorph is applied. + /// + [DataField(serverOnly: true)] + public HashSet CopiedComponents = new() + { + "LanguageKnowledge", + "LanguageSpeaker", + "Grammar" + }; } public enum PolymorphInventoryChange : byte diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 8cc47e83669..1f1f1ece29c 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -400,6 +400,9 @@ behaviors: - !type:GibBehavior { } - type: NonSpreaderZombie + - type: LanguageKnowledge + speaks: [Hissing] + understands: [Hissing] - type: entity name: glockroach @@ -2118,6 +2121,9 @@ - type: RandomBark barkType: penguin barkMultiplier: 0.6 + - type: LanguageKnowledge + speaks: [Penguin] + understands: [Penguin] - type: entity name: grenade penguin @@ -2238,6 +2244,9 @@ minTime: 10 maxTime: 50 # It's a sssnake... barkType: hissing + - type: LanguageKnowledge + speaks: [Hissing] + understands: [Hissing] # Code unique spider prototypes or combine them all into one spider and get a # random sprite state when you spawn it. diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/glimmer_creatures.yml b/Resources/Prototypes/Entities/Mobs/NPCs/glimmer_creatures.yml index 33e4ecee260..c2219d7fae3 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/glimmer_creatures.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/glimmer_creatures.yml @@ -161,3 +161,6 @@ - type: NPCRetaliation attackMemoryLength: 10 - type: NPCRangedCombat + # other + - type: LanguageSpeaker + - type: UniversalLanguageSpeaker # Should it speak unversal or some other language? diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml index c16816b5e44..d466a34383d 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml @@ -107,3 +107,5 @@ powersToAdd: - XenoglossyPower - TelepathyPower + - type: LanguageSpeaker + - type: UniversalLanguageSpeaker diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index 19303f86905..49e46f6da13 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -104,6 +104,10 @@ - DoorBumpOpener - type: Input context: "human" + - type: LanguageSpeaker + - type: LanguageKnowledge + speaks: [TauCetiBasic, RobotTalk] + understands: [TauCetiBasic, RobotTalk] - type: entity parent: BasePDA diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml index 85333e98df5..ac125d36bd1 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml @@ -48,6 +48,10 @@ - type: GuideHelp guides: - Cyborgs + - type: LanguageSpeaker + - type: LanguageKnowledge + speaks: [TauCetiBasic, RobotTalk] + understands: [TauCetiBasic, RobotTalk] - type: entity parent: MMI @@ -124,3 +128,7 @@ guides: - Cyborgs - type: Organ # Estacao Pirata - IPCs + - type: LanguageSpeaker + - type: LanguageKnowledge + speaks: [RobotTalk] + understands: [RobotTalk] diff --git a/Resources/Prototypes/Language/animal.yml b/Resources/Prototypes/Language/animal.yml index 46178200011..82f4d627497 100644 --- a/Resources/Prototypes/Language/animal.yml +++ b/Resources/Prototypes/Language/animal.yml @@ -184,3 +184,16 @@ - iss - ss - is + +- type: language + id: Penguin + obfuscation: + !type:SyllableObfuscation + minSyllables: 2 + maxSyllables: 3 + replacement: # I'm out of ideas + - pen + - peng + - won + - wonk + - wong diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/base_mail.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/base_mail.yml index bee514917a3..75007db11ca 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/base_mail.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/base_mail.yml @@ -103,6 +103,10 @@ reagents: - ReagentId: Nothing Quantity: 1 + - type: LanguageSpeaker + - type: LanguageKnowledge + speaks: [TauCetiBasic] # So that them foreigners can't understand what the broken mail is saying + understands: [] # This empty parcel is allowed to exist and evade the tests for the admin # mailto command. From 7c0c9e0cd5afe0e248607174a09ec1dad0734707 Mon Sep 17 00:00:00 2001 From: fenndragon Date: Thu, 5 Dec 2024 13:01:27 -0700 Subject: [PATCH 15/44] Update roundstart.yml --- Resources/Prototypes/GameRules/roundstart.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Resources/Prototypes/GameRules/roundstart.yml b/Resources/Prototypes/GameRules/roundstart.yml index 6ae94e26b0c..b676f90df50 100644 --- a/Resources/Prototypes/GameRules/roundstart.yml +++ b/Resources/Prototypes/GameRules/roundstart.yml @@ -257,11 +257,11 @@ components: - type: OscillatingStationEventScheduler minChaos: 0.8 - maxChaos: 14 - startingSlope: 0.2 - downwardsLimit: -0.35 - upwardsLimit: 0.4 - + maxChaos: 8 + startingSlope: -1 + downwardsLimit: -0.4 + upwardsLimit: 0.3 + # More likely to go down than up, so calmness prevails - type: entity id: IrregularExtendedStationEventScheduler From 075cc2fe751becb002c60932309854222ea3d0d9 Mon Sep 17 00:00:00 2001 From: fenndragon Date: Thu, 5 Dec 2024 13:05:18 -0700 Subject: [PATCH 16/44] Update roundstart.yml --- Resources/Prototypes/GameRules/roundstart.yml | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/Resources/Prototypes/GameRules/roundstart.yml b/Resources/Prototypes/GameRules/roundstart.yml index b676f90df50..869c80e5414 100644 --- a/Resources/Prototypes/GameRules/roundstart.yml +++ b/Resources/Prototypes/GameRules/roundstart.yml @@ -257,11 +257,10 @@ components: - type: OscillatingStationEventScheduler minChaos: 0.8 - maxChaos: 8 - startingSlope: -1 - downwardsLimit: -0.4 - upwardsLimit: 0.3 - + maxChaos: 14 + startingSlope: 0.2 + downwardsLimit: -0.35 + upwardsLimit: 0.4 # More likely to go down than up, so calmness prevails - type: entity id: IrregularExtendedStationEventScheduler @@ -270,11 +269,11 @@ components: - type: OscillatingStationEventScheduler minChaos: 0.8 - maxChaos: 14 - startingSlope: 0.2 - downwardsLimit: -0.35 - upwardsLimit: 0.4 - + maxChaos: 8 + startingSlope: -1 + downwardsLimit: -0.4 + upwardsLimit: 0.3 + # variation passes - type: entity id: BasicRoundstartVariation From 7698eda4f9712c07348b7fa64e388bc9b0bf852d Mon Sep 17 00:00:00 2001 From: FoxxoTrystan Date: Fri, 6 Dec 2024 03:16:34 +0100 Subject: [PATCH 17/44] no glimmer raise hypno --- .../Abilities/Psionics/Abilities/PsionicHypnoSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/FloofStation/Abilities/Psionics/Abilities/PsionicHypnoSystem.cs b/Content.Server/FloofStation/Abilities/Psionics/Abilities/PsionicHypnoSystem.cs index e4f6ddb097e..57a91e8a868 100644 --- a/Content.Server/FloofStation/Abilities/Psionics/Abilities/PsionicHypnoSystem.cs +++ b/Content.Server/FloofStation/Abilities/Psionics/Abilities/PsionicHypnoSystem.cs @@ -80,7 +80,7 @@ private void OnPowerUsed(EntityUid uid, PsionicHypnoComponent component, HypnoPo _popups.PopupEntity(Loc.GetString("hypno-phase-1", ("target", uid)), args.Target, args.Target, PopupType.Small); args.Handled = true; - _psionics.LogPowerUsed(args.Performer, "hypno"); + _psionics.LogPowerUsed(args.Performer, "hypno", 0, 0); } private void OnDispelled(EntityUid uid, PsionicHypnoComponent component, DispelledEvent args) From 70fe0493d07194e048fa738bbc8f1e60cbe52f50 Mon Sep 17 00:00:00 2001 From: FloofStation Changelogs <175611579+Floof-Station-Bot@users.noreply.github.com> Date: Sat, 7 Dec 2024 02:43:50 +0000 Subject: [PATCH 18/44] Automatic Changelog Update (#395) --- Resources/Changelog/Floof.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Resources/Changelog/Floof.yml b/Resources/Changelog/Floof.yml index 1dadfd07d62..8943d4cc1aa 100644 --- a/Resources/Changelog/Floof.yml +++ b/Resources/Changelog/Floof.yml @@ -1707,3 +1707,18 @@ Entries: id: 224 time: '2024-12-05T16:33:52.0000000+00:00' url: https://github.com/Fansana/floofstation1/pull/393 +- author: Mnemotechnician + changes: + - type: Tweak + message: >- + Added languages to certain entities that lacked them, including MMIs and + positronic brains. + - type: Add + message: >- + Polymorphing into another entity now preserves your languages and + grammar. + - type: Tweak + message: Cherry-picked some changes to languages made upstream. + id: 225 + time: '2024-12-07T02:43:21.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/395 From d6cbbdfb5d288663863eb657f0d33a5eb1d9691a Mon Sep 17 00:00:00 2001 From: Fansana Date: Sat, 7 Dec 2024 05:58:01 +0100 Subject: [PATCH 19/44] add rubyfang oc --- .../Components/PolymorphProviderComponent.cs | 14 ++ .../Systems/PolymorphSystem.Provider.cs | 34 +++++ .../Polymorph/Systems/PolymorphSystem.cs | 6 +- .../Floof/Entities/Clothing/Neck/amulet.yml | 144 ++++++++++++++++++ .../Neck/amulet_dragon.rsi/equipped-NECK.png | Bin 0 -> 860 bytes .../Clothing/Neck/amulet_dragon.rsi/icon.png | Bin 0 -> 1098 bytes .../Clothing/Neck/amulet_dragon.rsi/meta.json | 18 +++ 7 files changed, 215 insertions(+), 1 deletion(-) create mode 100644 Content.Server/Polymorph/Components/PolymorphProviderComponent.cs create mode 100644 Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs create mode 100644 Resources/Prototypes/Floof/Entities/Clothing/Neck/amulet.yml create mode 100644 Resources/Textures/Floof/Clothing/Neck/amulet_dragon.rsi/equipped-NECK.png create mode 100644 Resources/Textures/Floof/Clothing/Neck/amulet_dragon.rsi/icon.png create mode 100644 Resources/Textures/Floof/Clothing/Neck/amulet_dragon.rsi/meta.json diff --git a/Content.Server/Polymorph/Components/PolymorphProviderComponent.cs b/Content.Server/Polymorph/Components/PolymorphProviderComponent.cs new file mode 100644 index 00000000000..2d4692c95d3 --- /dev/null +++ b/Content.Server/Polymorph/Components/PolymorphProviderComponent.cs @@ -0,0 +1,14 @@ +using Content.Server.Polymorph.Systems; +using Content.Shared.Polymorph; +using Robust.Shared.Prototypes; + +namespace Content.Server.Polymorph.Components; + +[RegisterComponent] +[Access(typeof(PolymorphSystem))] +public sealed partial class PolymorphProviderComponent : Component +{ + [DataField(required: true)] + public ProtoId Polymorph; + +} diff --git a/Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs b/Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs new file mode 100644 index 00000000000..82ef008418c --- /dev/null +++ b/Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs @@ -0,0 +1,34 @@ +using Content.Server.Actions; +using Content.Server.Polymorph.Components; +using Content.Shared.Actions; +using Content.Shared.Inventory.Events; +using Content.Shared.Polymorph; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Server.Polymorph.Systems; + +public sealed partial class PolymorphSystem +{ + [Dependency] private readonly IEntityManager _entities = default!; + private void InitializeProvider() + { + SubscribeLocalEvent(OnEquipped); + SubscribeLocalEvent(OnUnEquipped); + + } + + private void OnUnEquipped(EntityUid uid, PolymorphProviderComponent component, ref GotUnequippedEvent args) + { + var polymorphable = _entities.EnsureComponent(args.Equipee); + RemovePolymorphAction(component.Polymorph, (args.Equipee, polymorphable)); + } + + private void OnEquipped(EntityUid uid, PolymorphProviderComponent component, ref GotEquippedEvent args) + { + + var polymorphable = _entities.EnsureComponent(args.Equipee); + CreatePolymorphAction(component.Polymorph, (args.Equipee, polymorphable)); + } + +} diff --git a/Content.Server/Polymorph/Systems/PolymorphSystem.cs b/Content.Server/Polymorph/Systems/PolymorphSystem.cs index e6ba1d02afd..500913baf3f 100644 --- a/Content.Server/Polymorph/Systems/PolymorphSystem.cs +++ b/Content.Server/Polymorph/Systems/PolymorphSystem.cs @@ -62,6 +62,7 @@ public override void Initialize() InitializeCollide(); InitializeMap(); + InitializeProvider(); } public override void Update(float frameTime) @@ -350,8 +351,11 @@ private void OnDestruction(Entity ent, ref Destructi public void CreatePolymorphAction(ProtoId id, Entity target) { target.Comp.PolymorphActions ??= new(); - if (target.Comp.PolymorphActions.ContainsKey(id)) + if (target.Comp.PolymorphActions.TryGetValue(id, out var actionBla)) + { + _actions.AddAction(target, actionBla, target); return; + } if (!_proto.TryIndex(id, out var polyProto)) return; diff --git a/Resources/Prototypes/Floof/Entities/Clothing/Neck/amulet.yml b/Resources/Prototypes/Floof/Entities/Clothing/Neck/amulet.yml new file mode 100644 index 00000000000..a4a3a2edd54 --- /dev/null +++ b/Resources/Prototypes/Floof/Entities/Clothing/Neck/amulet.yml @@ -0,0 +1,144 @@ + +- type: entity + parent: ClothingNeckBase + id: ClothingNeckDragonAmuletPolymorph + name: dragon amulet + description: A beautiful gold amulet, featuring a ruby that shines with an otherworldly glow. + components: + - type: Sprite + sprite: Floof/Clothing/Neck/amulet_dragon.rsi + - type: Clothing + sprite: Floof/Clothing/Neck/amulet_dragon.rsi + - type: PolymorphProvider + polymorph: PolymorphDragonRubyFang + +- type: polymorph + id: PolymorphDragonRubyFang + configuration: + entity: MobDragonRubyFang + forced: false + inventory: None + transferName: true + transferDamage: true + revertOnCrit: true + revertOnDeath: true + +- type: entity + parent: [ SimpleSpaceMobBase, FlyingMobBase ] + id: MobDragonRubyFang + suffix: "" + name: Rubyfang + description: A giant dragon, probably a couple thousand years old. + components: + - type: Bloodstream + bloodMaxVolume: 650 + - type: Speech + speechVerb: LargeMob + - type: CombatMode + - type: MobMover + - type: InputMover + - type: MovementSpeedModifier + baseWalkSpeed: 3 + baseSprintSpeed: 5 + weightlessModifier: 1.5 + - type: Sprite + color: "#cc0000ff" + sprite: Mobs/Aliens/Carps/dragon.rsi + noRot: true + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alive + - map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ] + state: alive-unshaded + shader: unshaded + - type: Appearance + - type: DamageStateVisuals + states: + Alive: + Base: alive + BaseUnshaded: alive-unshaded + Critical: + Base: crit + Dead: + Base: dead + BaseUnshaded: dead-unshaded + - type: Physics + bodyType: KinematicController + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.40 + density: 100 + mask: + - FlyingMobMask + layer: + - FlyingMobLayer + - type: MobState + - type: MobStateActions + actions: + Critical: + - ActionCritSuccumb + - ActionCritLastWords + - type: MobThresholds + thresholds: + 0: Alive + 450: Critical + 500: Dead + - type: SlowOnDamage + speedModifierThresholds: + 250: 0.7 + 400: 0.5 + # disable taking damage from fire, since its a fire breathing dragon + - type: Flammable + damage: + types: {} + - type: Temperature + heatDamageThreshold: 800 + - type: Metabolizer + solutionOnBody: false + updateInterval: 0.25 + metabolizerTypes: [ Dragon ] + groups: + - id: Medicine + - id: Poison + - type: Butcherable + spawned: + - id: FoodMeatDragon + amount: 2 + - type: InteractionPopup + successChance: 0.25 # It's no goose, but you better smell like carp. + interactSuccessString: petting-success-dragon + interactFailureString: petting-failure-dragon + interactFailureSound: + path: /Audio/Animals/space_dragon_roar.ogg + soundPerceivedByOthers: false # A 75% chance for a loud roar would get old fast. + - type: MeleeWeapon + altDisarm: false + soundHit: + path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg + damage: + types: + Piercing: 15 + Slash: 15 + - type: Devourer + foodPreference: Humanoid + shouldStoreDevoured: true + chemical: Ichor + healRate: 15.0 + whitelist: + components: + - MobState + - Door + tags: + - Wall + - type: Tag + tags: + - CannotSuicide + - DoorBumpOpener + - type: UserInterface + - type: Puller + needsHands: false + - type: Hands + diff --git a/Resources/Textures/Floof/Clothing/Neck/amulet_dragon.rsi/equipped-NECK.png b/Resources/Textures/Floof/Clothing/Neck/amulet_dragon.rsi/equipped-NECK.png new file mode 100644 index 0000000000000000000000000000000000000000..c84c03cc2b76a19316b68fd44fb14dbc7d881b80 GIT binary patch literal 860 zcmV-i1Ec(jP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4(%Y~kfA!+!4Jf-RIvyaN?V~-2a`*`ph-iL z;^HW{799LotU9+0Yt2!bCV&JIqBE>hzEl0u6Z503ls?%w0>9U!!7Of~!BfT~$W zCYccPg;g=|iV*w=BZx_fnR+U_n1ko|x`&UicQKyjeeTaOs1!{G_(bA3(+!JwgLrn+ z(mC%FM_5Hth|h^947wokBiCh@-#C{Y7IGNJE5-2CAsRLX1|86cZWRPk8u89DkZzGP$Z? zy9{yw(t_6gvB2ClTOzup4oK1pwO zwdfHrv<+NbcQttrxZDATpLEHP9LY~pD3yTsGy0|i5WWS1Yi@6yeVjf3IqGWp1~@nb z#>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00A0FL_t(|+U?r0O2a@L$MIi65)s_GxGM$89`O}i>N7aG zJ2*HL2a8KyBH-lW)E98d0~Crha|?-`43f6=oGNabm{e`QpY0BgyZdw8^8ZNy006*N zvdS*#ciZOl=Gpr0eBJupw((qBJB}sKwKbbBRV<8V^QEfn@04BOxpt}fx~-$gUwXPb zGLn=b%7 m4rN$LW=%~1DgXcg2mk;800000(o>TF0000EX>4Tx04R}tkv&MmKpe$iQ>9WW4(%Y~kfA!+!4Jf-RIvyaN?V~-2a`*`ph-iL z;^HW{799LotU9+0Yt2!bCV&JIqBE>hzEl0u6Z503ls?%w0>9U!!7Of~!BfT~$W zCYccPg;g=|iV*w=BZx_fnR+U_n1ko|x`&UicQKyjeeTaOs1!{G_(bA3(+!JwgLrn+ z(mC%FM_5Hth|h^947wokBiCh@-#C{Y7IGNJE5-2CAsRLX1|86cZWRPk8u89DkZzGP$Z? zy9{yw(t_6gvB2ClTOzup4oK1pwO zwdfHrv<+NbcQttrxZDATpLEHP9LY~pD3yTsGy0|i5WWS1Yi@6yeVjf3IqGWp1~@nb z#>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00Ia}L_t(o!|jzlXp=!0$A3v0u#Hfw)CO7=3(?T7ieJUz zn@$GW6V5+;F`nghFjO^?_EGds=S1mSVW5RS@yJCBN>mA z0}cb>W8Fy45AqUV@bR~rTu59*u1uD-E4E6y`6-1?xN@x zSyz@?#g*QkS1e%Du{Z{nQz>#=;%&hGa0l(}Ar_6Gv}NoJa(n7mH;0ZOfdKgZ5Db=w z(lGpDJGNp0#uc;+&X(TZJA~)CDV9uG{I5U7PX;?gfM%sJRxqwKOuXus@WG|M zQc@PBEgO#IMzYwjKg7f1pYs!lHSBAKyQ~EO000hUSV?A0O#mtY000O800000007cc QlK=n!07*qoM6N<$f_=#GW&i*H literal 0 HcmV?d00001 diff --git a/Resources/Textures/Floof/Clothing/Neck/amulet_dragon.rsi/meta.json b/Resources/Textures/Floof/Clothing/Neck/amulet_dragon.rsi/meta.json new file mode 100644 index 00000000000..e0e89fc46f0 --- /dev/null +++ b/Resources/Textures/Floof/Clothing/Neck/amulet_dragon.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Pire Discord #plazmaspirit", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-NECK", + "directions": 4 + } + ] +} From 4355f233851334cf25d8861ddb7bbccbb3648d55 Mon Sep 17 00:00:00 2001 From: FloofStation Changelogs <175611579+Floof-Station-Bot@users.noreply.github.com> Date: Sat, 7 Dec 2024 06:17:29 +0000 Subject: [PATCH 20/44] Automatic Changelog Update (#383) --- Resources/Changelog/Floof.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Floof.yml b/Resources/Changelog/Floof.yml index 8943d4cc1aa..ff644a86908 100644 --- a/Resources/Changelog/Floof.yml +++ b/Resources/Changelog/Floof.yml @@ -1722,3 +1722,10 @@ Entries: id: 225 time: '2024-12-07T02:43:21.0000000+00:00' url: https://github.com/Fansana/floofstation1/pull/395 +- author: fenndragon + changes: + - type: Fix + message: 'Fixed mining drill ' + id: 226 + time: '2024-12-07T06:16:59.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/383 From b929a341ea33f64e95e3253eb730a111ecb0f551 Mon Sep 17 00:00:00 2001 From: Fansana <116083121+Fansana@users.noreply.github.com> Date: Sat, 7 Dec 2024 11:05:35 +0100 Subject: [PATCH 21/44] Update Content.Server/Polymorph/Components/PolymorphProviderComponent.cs Co-authored-by: FoxxoTrystan <45297731+FoxxoTrystan@users.noreply.github.com> --- .../Polymorph/Components/PolymorphProviderComponent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/Polymorph/Components/PolymorphProviderComponent.cs b/Content.Server/Polymorph/Components/PolymorphProviderComponent.cs index 2d4692c95d3..6003eadac14 100644 --- a/Content.Server/Polymorph/Components/PolymorphProviderComponent.cs +++ b/Content.Server/Polymorph/Components/PolymorphProviderComponent.cs @@ -8,7 +8,7 @@ namespace Content.Server.Polymorph.Components; [Access(typeof(PolymorphSystem))] public sealed partial class PolymorphProviderComponent : Component { - [DataField(required: true)] + [DataField] public ProtoId Polymorph; } From 9921d67cf80a55f7ef7623b5dfb2156b3aa505d2 Mon Sep 17 00:00:00 2001 From: Fansana <116083121+Fansana@users.noreply.github.com> Date: Sat, 7 Dec 2024 11:07:48 +0100 Subject: [PATCH 22/44] Update Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs Co-authored-by: FoxxoTrystan <45297731+FoxxoTrystan@users.noreply.github.com> --- Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs b/Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs index 82ef008418c..03bdd3da6c6 100644 --- a/Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs +++ b/Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs @@ -10,7 +10,6 @@ namespace Content.Server.Polymorph.Systems; public sealed partial class PolymorphSystem { - [Dependency] private readonly IEntityManager _entities = default!; private void InitializeProvider() { SubscribeLocalEvent(OnEquipped); From 5e20d50373291251974afe6dac7607e65d9e5f5e Mon Sep 17 00:00:00 2001 From: Fansana <116083121+Fansana@users.noreply.github.com> Date: Sat, 7 Dec 2024 11:08:09 +0100 Subject: [PATCH 23/44] Update Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs Co-authored-by: FoxxoTrystan <45297731+FoxxoTrystan@users.noreply.github.com> --- Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs b/Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs index 03bdd3da6c6..bdfc1375851 100644 --- a/Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs +++ b/Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs @@ -19,8 +19,8 @@ private void InitializeProvider() private void OnUnEquipped(EntityUid uid, PolymorphProviderComponent component, ref GotUnequippedEvent args) { - var polymorphable = _entities.EnsureComponent(args.Equipee); - RemovePolymorphAction(component.Polymorph, (args.Equipee, polymorphable)); + if (TryComp(args.Equipee, out var polymorphable)) + RemovePolymorphAction(component.Polymorph, (args.Equipee, polymorphable)); } private void OnEquipped(EntityUid uid, PolymorphProviderComponent component, ref GotEquippedEvent args) From 89c892b410b80b6c14b532a64ae17cbaebfeae1c Mon Sep 17 00:00:00 2001 From: Fansana <116083121+Fansana@users.noreply.github.com> Date: Sat, 7 Dec 2024 11:08:47 +0100 Subject: [PATCH 24/44] Update Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs Co-authored-by: FoxxoTrystan <45297731+FoxxoTrystan@users.noreply.github.com> --- Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs b/Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs index bdfc1375851..67df6728d85 100644 --- a/Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs +++ b/Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs @@ -25,8 +25,7 @@ private void OnUnEquipped(EntityUid uid, PolymorphProviderComponent component, r private void OnEquipped(EntityUid uid, PolymorphProviderComponent component, ref GotEquippedEvent args) { - - var polymorphable = _entities.EnsureComponent(args.Equipee); + var polymorphable = EnsureComp(args.Equipee); CreatePolymorphAction(component.Polymorph, (args.Equipee, polymorphable)); } From a5c3ee558e99f0533bd97bf23b5d7031a2079f2a Mon Sep 17 00:00:00 2001 From: Fansana <116083121+Fansana@users.noreply.github.com> Date: Sat, 7 Dec 2024 11:09:07 +0100 Subject: [PATCH 25/44] Update Content.Server/Polymorph/Components/PolymorphProviderComponent.cs Co-authored-by: FoxxoTrystan <45297731+FoxxoTrystan@users.noreply.github.com> --- .../Polymorph/Components/PolymorphProviderComponent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/Polymorph/Components/PolymorphProviderComponent.cs b/Content.Server/Polymorph/Components/PolymorphProviderComponent.cs index 6003eadac14..50b6345494e 100644 --- a/Content.Server/Polymorph/Components/PolymorphProviderComponent.cs +++ b/Content.Server/Polymorph/Components/PolymorphProviderComponent.cs @@ -6,7 +6,7 @@ namespace Content.Server.Polymorph.Components; [RegisterComponent] [Access(typeof(PolymorphSystem))] -public sealed partial class PolymorphProviderComponent : Component +public sealed partial class PolymorphProviderComponent : Component { [DataField] public ProtoId Polymorph; From 565419a74ae1c662867cbe53b2d72bbbfaeda1da Mon Sep 17 00:00:00 2001 From: Fansana <116083121+Fansana@users.noreply.github.com> Date: Sat, 7 Dec 2024 11:09:16 +0100 Subject: [PATCH 26/44] Update Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs Co-authored-by: FoxxoTrystan <45297731+FoxxoTrystan@users.noreply.github.com> --- Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs b/Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs index 67df6728d85..03921350f27 100644 --- a/Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs +++ b/Content.Server/Polymorph/Systems/PolymorphSystem.Provider.cs @@ -14,7 +14,6 @@ private void InitializeProvider() { SubscribeLocalEvent(OnEquipped); SubscribeLocalEvent(OnUnEquipped); - } private void OnUnEquipped(EntityUid uid, PolymorphProviderComponent component, ref GotUnequippedEvent args) From 708e73964c3261652708f678302b7e37038463ed Mon Sep 17 00:00:00 2001 From: FoxxoTrystan <45297731+FoxxoTrystan@users.noreply.github.com> Date: Sat, 7 Dec 2024 12:14:16 +0100 Subject: [PATCH 27/44] Update Content.Server/Polymorph/Components/PolymorphProviderComponent.cs --- .../Polymorph/Components/PolymorphProviderComponent.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Content.Server/Polymorph/Components/PolymorphProviderComponent.cs b/Content.Server/Polymorph/Components/PolymorphProviderComponent.cs index 50b6345494e..351f5d24e43 100644 --- a/Content.Server/Polymorph/Components/PolymorphProviderComponent.cs +++ b/Content.Server/Polymorph/Components/PolymorphProviderComponent.cs @@ -10,5 +10,4 @@ public sealed partial class PolymorphProviderComponent : Component { [DataField] public ProtoId Polymorph; - } From 3ff62fc7c96e61ae0c73aeee844e0f54551fcdb4 Mon Sep 17 00:00:00 2001 From: FloofStation Changelogs <175611579+Floof-Station-Bot@users.noreply.github.com> Date: Sat, 7 Dec 2024 15:05:04 +0000 Subject: [PATCH 28/44] Automatic Changelog Update (#371) --- Resources/Changelog/Floof.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Resources/Changelog/Floof.yml b/Resources/Changelog/Floof.yml index ff644a86908..c7665bb2941 100644 --- a/Resources/Changelog/Floof.yml +++ b/Resources/Changelog/Floof.yml @@ -1729,3 +1729,14 @@ Entries: id: 226 time: '2024-12-07T06:16:59.0000000+00:00' url: https://github.com/Fansana/floofstation1/pull/383 +- author: VividPups + changes: + - type: Add + message: 'brass-knuckles to the oni loadout ' + - type: Add + message: can now craft brass knuckles as a stun weapon + - type: Add + message: 'the crass-knuckles ' + id: 227 + time: '2024-12-07T15:04:35.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/371 From 344badadee6d852fb4edba2081b6b609fabe00a4 Mon Sep 17 00:00:00 2001 From: FloofStation Changelogs <175611579+Floof-Station-Bot@users.noreply.github.com> Date: Sat, 7 Dec 2024 15:06:51 +0000 Subject: [PATCH 29/44] Automatic Changelog Update (#385) --- Resources/Changelog/Floof.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Floof.yml b/Resources/Changelog/Floof.yml index c7665bb2941..6431ac16e9a 100644 --- a/Resources/Changelog/Floof.yml +++ b/Resources/Changelog/Floof.yml @@ -1740,3 +1740,10 @@ Entries: id: 227 time: '2024-12-07T15:04:35.0000000+00:00' url: https://github.com/Fansana/floofstation1/pull/371 +- author: fenndragon + changes: + - type: Fix + message: 'Fixed Irregular Extended ' + id: 228 + time: '2024-12-07T15:06:13.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/385 From 33a1d1bf81b5364be688effc320384bf6db4607c Mon Sep 17 00:00:00 2001 From: FoxxoTrystan Date: Sat, 7 Dec 2024 21:23:11 +0100 Subject: [PATCH 30/44] fix hair --- Resources/Prototypes/DeltaV/Species/vulpkanin.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/Resources/Prototypes/DeltaV/Species/vulpkanin.yml b/Resources/Prototypes/DeltaV/Species/vulpkanin.yml index a286dd49363..909cd920ecd 100644 --- a/Resources/Prototypes/DeltaV/Species/vulpkanin.yml +++ b/Resources/Prototypes/DeltaV/Species/vulpkanin.yml @@ -36,7 +36,6 @@ - type: markingPoints id: MobVulpkaninMarkingLimits - onlyWhitelisted: true points: Hair: points: 1 From 56c1ea2005c9cafaf686bbeaa2d46d8f56681649 Mon Sep 17 00:00:00 2001 From: Memeji Date: Sun, 8 Dec 2024 07:20:56 -0600 Subject: [PATCH 31/44] Added .20 rifle rubber box to bartender loadout --- .../CharacterItemGroups/serviceGroups.yml | 2 ++ .../Prototypes/Floof/Loadouts/Jobs/service.yml | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/Resources/Prototypes/CharacterItemGroups/serviceGroups.yml b/Resources/Prototypes/CharacterItemGroups/serviceGroups.yml index 0856be21f18..769901cd797 100644 --- a/Resources/Prototypes/CharacterItemGroups/serviceGroups.yml +++ b/Resources/Prototypes/CharacterItemGroups/serviceGroups.yml @@ -104,6 +104,8 @@ id: LoadoutServiceBartenderBoxLightRifleRubber - type: loadout id: LoadoutServiceBartenderBoxMagnumRubber # Floofstation + - type: loadout + id: LoadoutServiceBartenderRifleBigRubber # Floofstation - type: characterItemGroup id: LoadoutBartenderWeapon diff --git a/Resources/Prototypes/Floof/Loadouts/Jobs/service.yml b/Resources/Prototypes/Floof/Loadouts/Jobs/service.yml index 1525401c478..59fb36b748a 100644 --- a/Resources/Prototypes/Floof/Loadouts/Jobs/service.yml +++ b/Resources/Prototypes/Floof/Loadouts/Jobs/service.yml @@ -138,6 +138,20 @@ items: - ClothingCostumeBunnySuit +- type: loadout + id: LoadoutServiceBartenderRifleBigRubber + category: JobsServiceBartender + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBartenderAmmo + - !type:CharacterJobRequirement + jobs: + - Bartender + items: + - MagazineBoxRifleBigRubber + #Chef - type: loadout id: LoadoutClothingHandsChefWarmers From 258d55da2ac11dd6a7cd90c6d1bdb681db1895fd Mon Sep 17 00:00:00 2001 From: FoxxoTrystan Date: Sun, 8 Dec 2024 17:33:33 +0100 Subject: [PATCH 32/44] Mantis/RD can hypno --- Resources/Prototypes/Floof/Traits/mental.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Resources/Prototypes/Floof/Traits/mental.yml b/Resources/Prototypes/Floof/Traits/mental.yml index 237bb819ea2..ac16c8e4559 100644 --- a/Resources/Prototypes/Floof/Traits/mental.yml +++ b/Resources/Prototypes/Floof/Traits/mental.yml @@ -14,6 +14,8 @@ jobs: - Chaplain - Librarian + - ForensicMantis + - ResearchDirector - !type:CharacterLogicOrRequirement requirements: - !type:CharacterSpeciesRequirement From c54eb6feaa0737a055e73594af6e43f4ff8fd8f0 Mon Sep 17 00:00:00 2001 From: FoxxoTrystan Date: Sun, 8 Dec 2024 20:15:50 +0100 Subject: [PATCH 33/44] vore patch --- Content.Client/Floofstation/VoredSystem.cs | 22 ++++++++- Content.Client/Options/UI/Tabs/AudioTab.xaml | 1 + .../Options/UI/Tabs/AudioTab.xaml.cs | 9 +++- .../Psionics/Abilities/PsionicHypnoSystem.cs | 2 +- Content.Server/FloofStation/VoreSystem.cs | 48 ++++++++++++++++--- .../Resist/EscapeInventorySystem.cs | 23 +++++---- Content.Shared/Floofstation/FloofCCvars.cs | 14 ++++++ Resources/Locale/en-US/Blep/consent.ftl | 5 +- Resources/Locale/en-US/Floof/hypno.ftl | 30 ++++++------ Resources/Locale/en-US/Floof/vore.ftl | 2 + Resources/Prototypes/consent.yml | 3 ++ 11 files changed, 123 insertions(+), 36 deletions(-) create mode 100644 Content.Shared/Floofstation/FloofCCvars.cs diff --git a/Content.Client/Floofstation/VoredSystem.cs b/Content.Client/Floofstation/VoredSystem.cs index c39a4c9fe25..ad1f6add230 100644 --- a/Content.Client/Floofstation/VoredSystem.cs +++ b/Content.Client/Floofstation/VoredSystem.cs @@ -1,5 +1,7 @@ +using Content.Shared.CCVar; using Content.Shared.FloofStation; using Robust.Shared.Audio.Systems; +using Robust.Shared.Configuration; using Robust.Shared.Player; namespace Content.Client.Floofstation; @@ -8,6 +10,7 @@ public sealed partial class VoredSystem : EntitySystem { [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly ISharedPlayerManager _playerMan = default!; + [Dependency] private readonly IConfigurationManager _configManager = default!; public override void Initialize() { @@ -17,11 +20,14 @@ public override void Initialize() SubscribeLocalEvent(Onhutdown); SubscribeLocalEvent(OnPlayerAttached); SubscribeLocalEvent(OnPlayerDetached); + + Subs.CVar(_configManager, FloofCCVars.VoreSoundEnabled, VoreSoundCVarChanged); } private void OnInit(EntityUid uid, VoredComponent component, ComponentInit args) { - if (uid != _playerMan.LocalEntity) + if (uid != _playerMan.LocalEntity + || !_configManager.GetCVar(FloofCCVars.VoreSoundEnabled)) return; component.Stream = _audio.PlayGlobal(component.SoundBelly, Filter.Local(), false)?.Entity; @@ -35,8 +41,22 @@ private void Onhutdown(EntityUid uid, VoredComponent component, ComponentShutdow QueueDel(component.Stream); } + private void VoreSoundCVarChanged(bool voreEnabled) + { + if (!TryComp(_playerMan.LocalEntity, out var component)) + return; + + if (voreEnabled) + component.Stream = _audio.PlayGlobal(component.SoundBelly, Filter.Local(), false)?.Entity; + else + QueueDel(component.Stream); + } + private void OnPlayerAttached(EntityUid uid, VoredComponent component, LocalPlayerAttachedEvent args) { + if (!_configManager.GetCVar(FloofCCVars.VoreSoundEnabled)) + return; + component.Stream = _audio.PlayGlobal(component.SoundBelly, Filter.Local(), false)?.Entity; } diff --git a/Content.Client/Options/UI/Tabs/AudioTab.xaml b/Content.Client/Options/UI/Tabs/AudioTab.xaml index 78b0e82629e..b012e874c17 100644 --- a/Content.Client/Options/UI/Tabs/AudioTab.xaml +++ b/Content.Client/Options/UI/Tabs/AudioTab.xaml @@ -121,6 +121,7 @@ Text="{Loc 'ui-options-announcer-disable-multiple-sounds'}" ToolTip="{Loc 'ui-options-announcer-disable-multiple-sounds-tooltip'}" /> + diff --git a/Content.Client/Options/UI/Tabs/AudioTab.xaml.cs b/Content.Client/Options/UI/Tabs/AudioTab.xaml.cs index 7da80d774bd..368ee1363a7 100644 --- a/Content.Client/Options/UI/Tabs/AudioTab.xaml.cs +++ b/Content.Client/Options/UI/Tabs/AudioTab.xaml.cs @@ -1,5 +1,6 @@ using Content.Client.Audio; using Content.Shared.CCVar; +using Content.Shared.FloofStation; using Robust.Client.Audio; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface; @@ -24,6 +25,7 @@ public AudioTab() _audio = IoCManager.Resolve(); LobbyMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.LobbyMusicEnabled); + VoreSoundCheckBox.Pressed = _cfg.GetCVar(FloofCCVars.VoreSoundEnabled); RestartSoundsCheckBox.Pressed = _cfg.GetCVar(CCVars.RestartSoundsEnabled); EventMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.EventMusicEnabled); AdminSoundsCheckBox.Pressed = _cfg.GetCVar(CCVars.AdminSoundsEnabled); @@ -42,6 +44,7 @@ public AudioTab() AnnouncerVolumeSlider, LobbyMusicCheckBox, + VoreSoundCheckBox, RestartSoundsCheckBox, EventMusicCheckBox, AnnouncerDisableMultipleSoundsCheckBox, @@ -87,6 +90,7 @@ protected override void Dispose(bool disposing) AnnouncerVolumeSlider, LobbyMusicCheckBox, + VoreSoundCheckBox, RestartSoundsCheckBox, EventMusicCheckBox, AnnouncerDisableMultipleSoundsCheckBox, @@ -129,6 +133,7 @@ private void OnApplyButtonPressed(BaseButton.ButtonEventArgs args) _cfg.SetCVar(CCVars.MaxAmbientSources, (int)AmbienceSoundsSlider.Value); _cfg.SetCVar(CCVars.LobbyMusicEnabled, LobbyMusicCheckBox.Pressed); + _cfg.SetCVar(FloofCCVars.VoreSoundEnabled, VoreSoundCheckBox.Pressed); _cfg.SetCVar(CCVars.RestartSoundsEnabled, RestartSoundsCheckBox.Pressed); _cfg.SetCVar(CCVars.EventMusicEnabled, EventMusicCheckBox.Pressed); _cfg.SetCVar(CCVars.AnnouncerDisableMultipleSounds, AnnouncerDisableMultipleSoundsCheckBox.Pressed); @@ -155,6 +160,7 @@ private void Reset() AmbienceSoundsSlider.Value = _cfg.GetCVar(CCVars.MaxAmbientSources); LobbyMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.LobbyMusicEnabled); + VoreSoundCheckBox.Pressed = _cfg.GetCVar(FloofCCVars.VoreSoundEnabled); RestartSoundsCheckBox.Pressed = _cfg.GetCVar(CCVars.RestartSoundsEnabled); EventMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.EventMusicEnabled); AnnouncerDisableMultipleSoundsCheckBox.Pressed = _cfg.GetCVar(CCVars.AnnouncerDisableMultipleSounds); @@ -182,12 +188,13 @@ private void UpdateChanges() var isAmbientSoundsSame = (int)AmbienceSoundsSlider.Value == _cfg.GetCVar(CCVars.MaxAmbientSources); var isLobbySame = LobbyMusicCheckBox.Pressed == _cfg.GetCVar(CCVars.LobbyMusicEnabled); + var isVoreSoundSame = VoreSoundCheckBox.Pressed == _cfg.GetCVar(FloofCCVars.VoreSoundEnabled); var isRestartSoundsSame = RestartSoundsCheckBox.Pressed == _cfg.GetCVar(CCVars.RestartSoundsEnabled); var isEventSame = EventMusicCheckBox.Pressed == _cfg.GetCVar(CCVars.EventMusicEnabled); var isAnnouncerDisableMultipleSoundsSame = AnnouncerDisableMultipleSoundsCheckBox.Pressed == _cfg.GetCVar(CCVars.AnnouncerDisableMultipleSounds); var isAdminSoundsSame = AdminSoundsCheckBox.Pressed == _cfg.GetCVar(CCVars.AdminSoundsEnabled); var isEverythingSame = isMasterVolumeSame && isMidiVolumeSame && isAmbientVolumeSame - && isAmbientMusicVolumeSame && isAmbientSoundsSame && isLobbySame && isRestartSoundsSame && isEventSame + && isAmbientMusicVolumeSame && isAmbientSoundsSame && isLobbySame && isVoreSoundSame && isRestartSoundsSame && isEventSame && isAnnouncerDisableMultipleSoundsSame && isAdminSoundsSame && isLobbyVolumeSame && isInterfaceVolumeSame && isAnnouncerVolumeSame; ApplyButton.Disabled = isEverythingSame; diff --git a/Content.Server/FloofStation/Abilities/Psionics/Abilities/PsionicHypnoSystem.cs b/Content.Server/FloofStation/Abilities/Psionics/Abilities/PsionicHypnoSystem.cs index 57a91e8a868..cb2a01fa792 100644 --- a/Content.Server/FloofStation/Abilities/Psionics/Abilities/PsionicHypnoSystem.cs +++ b/Content.Server/FloofStation/Abilities/Psionics/Abilities/PsionicHypnoSystem.cs @@ -62,7 +62,7 @@ private void OnPowerUsed(EntityUid uid, PsionicHypnoComponent component, HypnoPo if (HasComp(args.Target)) { - _popups.PopupEntity(Loc.GetString("hypno-already-under", ("target", uid)), uid, uid, PopupType.Large); + _popups.PopupEntity(Loc.GetString("hypno-already-under", ("target", args.Target)), uid, uid, PopupType.Large); return; } diff --git a/Content.Server/FloofStation/VoreSystem.cs b/Content.Server/FloofStation/VoreSystem.cs index 88f41787cf3..6e2fb2195b6 100644 --- a/Content.Server/FloofStation/VoreSystem.cs +++ b/Content.Server/FloofStation/VoreSystem.cs @@ -26,7 +26,6 @@ using Content.Shared.Nutrition.Components; using Content.Shared.Nutrition.EntitySystems; using Content.Server.Power.EntitySystems; -using Content.Server.Silicon.Charge; using Content.Shared.PowerCell.Components; using System.Linq; using Content.Shared.Forensics; @@ -34,8 +33,10 @@ using Content.Shared.Contests; using Content.Shared.Standing; using Content.Server.Power.Components; -using Content.Shared.PowerCell; using Content.Server.Nutrition.EntitySystems; +using Content.Shared.Interaction.Events; +using Content.Shared.Hands.Components; +using Content.Shared.Hands.EntitySystems; namespace Content.Server.FloofStation; @@ -60,6 +61,7 @@ public sealed class VoreSystem : EntitySystem [Dependency] private readonly StandingStateSystem _standingState = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly FoodSystem _food = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; public override void Initialize() { @@ -73,6 +75,7 @@ public override void Initialize() SubscribeLocalEvent(OnRelease); SubscribeLocalEvent(OnSeeAttempt); + SubscribeLocalEvent(CheckInteraction); } private void OnInit(EntityUid uid, VoreComponent component, MapInitEvent args) @@ -83,6 +86,7 @@ private void OnInit(EntityUid uid, VoreComponent component, MapInitEvent args) private void AddVerbs(EntityUid uid, VoreComponent component, GetVerbsEvent args) { DevourVerb(uid, component, args); + InsertSelfVerb(uid, args); VoreVerb(uid, component, args); } @@ -92,21 +96,42 @@ private void DevourVerb(EntityUid uid, VoreComponent component, GetVerbsEvent(args.Target) - || !_consent.HasConsent(args.Target, "Vore") - || HasComp(args.User)) + || !_consent.HasConsent(args.User, "VorePred") + || !_consent.HasConsent(args.Target, "Vore")) return; InnateVerb verbDevour = new() { - Act = () => TryDevour(uid, args.Target, component), + Act = () => TryDevour(args.User, args.Target, component), Text = Loc.GetString("vore-devour"), - Category = VerbCategory.Vore, + Category = VerbCategory.Interaction, Icon = new SpriteSpecifier.Rsi(new ResPath("Interface/Actions/devour.rsi"), "icon-on"), Priority = -1 }; args.Verbs.Add(verbDevour); } + private void InsertSelfVerb(EntityUid uid, GetVerbsEvent args) + { + if (!args.CanInteract + || !args.CanAccess + || args.User == args.Target + || !TryComp(args.Target, out var component) + || !_consent.HasConsent(args.Target, "VorePred") + || !_consent.HasConsent(args.User, "Vore")) + return; + + InnateVerb verbInsert = new() + { + Act = () => TryDevour(args.Target, args.User, component), + Text = Loc.GetString("action-name-insert-self"), + Category = VerbCategory.Interaction, + Icon = new SpriteSpecifier.Rsi(new ResPath("Interface/Actions/devour.rsi"), "icon"), + Priority = -1 + }; + args.Verbs.Add(verbInsert); + } + private void VoreVerb(EntityUid uid, VoreComponent component, GetVerbsEvent args) { if (args.User != args.Target) @@ -210,6 +235,7 @@ public void Devour(EntityUid uid, EntityUid target, VoreComponent? component = n temp.AtmosTemperatureTransferEfficiency = 0; _containerSystem.Insert(target, component.Stomach); + _audioSystem.PlayPvs(component.SoundDevour, uid); _popups.PopupEntity(Loc.GetString("vore-devoured", ("entity", uid), ("prey", target)), uid, PopupType.LargeCaution); @@ -388,6 +414,14 @@ private void OnGibContents(EntityUid uid, VoreComponent component, ref BeingGibb _containerSystem.EmptyContainer(component.Stomach); } + private void CheckInteraction(EntityUid uid, VoredComponent component, InteractionAttemptEvent args) + { + if (component.Pred != args.Target) + return; + + args.Cancel(); + } + public override void Update(float frameTime) { base.Update(frameTime); @@ -400,7 +434,7 @@ public override void Update(float frameTime) vored.Accumulator += frameTime; - if (vored.Accumulator <= 1) + if (vored.Accumulator <= 5) continue; vored.Accumulator -= 1; diff --git a/Content.Server/Resist/EscapeInventorySystem.cs b/Content.Server/Resist/EscapeInventorySystem.cs index 610a7a7774c..7cab3d463be 100644 --- a/Content.Server/Resist/EscapeInventorySystem.cs +++ b/Content.Server/Resist/EscapeInventorySystem.cs @@ -59,8 +59,17 @@ private void OnRelayMovement(EntityUid uid, CanEscapeInventoryComponent componen if (!args.HasDirectionalMovement) return; - if (!_containerSystem.TryGetContainingContainer(uid, out var container) - || !_actionBlockerSystem.CanInteract(uid, container.Owner)) + if (!_containerSystem.TryGetContainingContainer(uid, out var container)) + return; + + // Vore - Floofstation + if (HasComp(uid)) + { + AttemptEscape(uid, container.Owner, component, 5f); + return; + } + + if (!_actionBlockerSystem.CanInteract(uid, container.Owner)) return; // Make sure there's nothing stopped the removal (like being glued) @@ -78,13 +87,6 @@ private void OnRelayMovement(EntityUid uid, CanEscapeInventoryComponent componen return; } - // Vore - Floofstation - if (HasComp(uid)) - { - AttemptEscape(uid, container.Owner, component, 5f); - return; - } - // Uncontested if (HasComp(container.Owner) || HasComp(container.Owner) || HasComp(container.Owner)) AttemptEscape(uid, container.Owner, component); @@ -100,7 +102,8 @@ private void OnRelayMovement(EntityUid uid, CanEscapeInventoryComponent componen BreakOnTargetMove = false, BreakOnUserMove = true, BreakOnDamage = true, - NeedHand = false + NeedHand = false, + RequireCanInteract = false }; if (!_doAfterSystem.TryStartDoAfter(doAfterEventArgs, out component.DoAfter)) diff --git a/Content.Shared/Floofstation/FloofCCvars.cs b/Content.Shared/Floofstation/FloofCCvars.cs new file mode 100644 index 00000000000..7c842395982 --- /dev/null +++ b/Content.Shared/Floofstation/FloofCCvars.cs @@ -0,0 +1,14 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.FloofStation; + +/// +/// Floofstation specific cvars. +/// +[CVarDefs] +// ReSharper disable once InconsistentNaming - Shush you +public sealed class FloofCCVars +{ + public static readonly CVarDef VoreSoundEnabled = + CVarDef.Create("ambience.vore_sound_enabled", true, CVar.ARCHIVE | CVar.CLIENTONLY); +} diff --git a/Resources/Locale/en-US/Blep/consent.ftl b/Resources/Locale/en-US/Blep/consent.ftl index 80bc6b08cd6..a3f032c475a 100644 --- a/Resources/Locale/en-US/Blep/consent.ftl +++ b/Resources/Locale/en-US/Blep/consent.ftl @@ -18,9 +18,12 @@ consent-examine-verb = Consent Info consent-examine-not-set = This player has no consent preferences set. Ask for consent first before engaging in any erotic roleplay. # Consent toggles -consent-Vore-name = Vore +consent-Vore-name = Vore Prey consent-Vore-desc = Allow yourself to be devoured by anyone... or anything. +consent-VorePred-name = Vore Pred +consent-VorePred-desc = Allow to devoured critters... or anyone that has the consent option 'vore' enabled. + consent-Digestion-name = Digestion consent-Digestion-desc = Allow yourself to be digested. WARNING: BEING DIGESTED WILL ROUND-REMOVE YOU. diff --git a/Resources/Locale/en-US/Floof/hypno.ftl b/Resources/Locale/en-US/Floof/hypno.ftl index fff095e5644..905b8d7e78e 100644 --- a/Resources/Locale/en-US/Floof/hypno.ftl +++ b/Resources/Locale/en-US/Floof/hypno.ftl @@ -1,24 +1,24 @@ action-name-hypno = Psionic Hypnosis -action-description-hypno = You are capable to hypnotize people and make them do your bidding. +action-description-hypno = You are capable to mentally interfere with people's thoughts, and make them do your bidding. -hypnosis-power-initialization-feedback = I am able to hypnotize and make people do my bidding, reaching them in the deepest parts of their mind. -hypnosis-power-feedback = {CAPITALIZE($entity)} wields the power to control minds. +hypnosis-power-initialization-feedback = I am able to place other in a trance and have them do my bidding, cementing my will in the deepest parts of their mind. +hypnosis-power-feedback = The air around {CAPITALIZE($entity)} shimmers hypnotically from the force of their personality" -hypno-already-under = {CAPITALIZE($target)} is already hypnotized. -examined-hypno = Looks mindless, happy... -lost-subject = I lost control of one of my subjects. -hypno-free = I feel able to make my own toughts again. +hypno-already-under = {CAPITALIZE($target)} is already under hypnosis. +examined-hypno = Seems completely content with everything +lost-subject = I feel my powers dissipate. My subject is once again free... +hypno-free = I have awoken from my trance... hypno-release = Release Subject hypno-break = Break Hypnosis hypno-start = You stare into {POSS-ADJ($target)} eyes... -hypno-phase-1 = {CAPITALIZE($target)} eyes glows in such pretty colors... it's hard to look away... -hypno-phase-2 = The more you stare at {POSS-ADJ($target)} eyes... the more its i's hard to think... to have a thought... -hypno-phase-3 = What was I doing... again? It's so hard to think... maybe I don't need to anymore, just stare... its just... so pretty... +hypno-phase-1 = {CAPITALIZE($target)} eyes are shining with a powerful but calming aura... +hypno-phase-2 = The deeper you look into {POSS-ADJ($target)} eyes... the more difficult it is to think... easier to listen... +hypno-phase-3 = It's so hard to think. Maybe... I don't need to anymore? Just sink... only {POSS-ADJ($target)}. hypno-success = {CAPITALIZE($target)} stares into your eyes, lost in them, lost in you. -mood-effect-BeingHypnotized = It's nice to not think, to be mindless... I love to obey. -mood-effect-LostHypnosis = It was nice to not think, I miss that. +mood-effect-BeingHypnotized = It's so wonderful to not have to think... to be mindless... Obedience is pleasure... +mood-effect-LostHypnosis = I miss being under trance like that... it was so much easier... hypnotized = [bold][color=red]You have been HYPNOTISED by {CAPITALIZE($entity)}! Warning: You are not an antag, and still cannot help antags. THIS IS NOT AN ANTAGONIST ROLE. @@ -30,11 +30,11 @@ hypnotist = [bold][color=red]You have enthralled {CAPITALIZE($entity)}! "in accordinace to server rules, of course."[/color][/bold] stophypno = [bold][color=red]You are no longer hypnotized! - You are no longer hypnotized by {CAPITALIZE($entity)}, you are now thinking properly again.[/color][/bold] + You are no longer under the mental control of {CAPITALIZE($entity)}.[/color][/bold] has-no-consent = I cannot enter his mind. trait-name-HypnoticGaze = Hypnotic Gaze trait-description-HypnoticGaze = - Your eyes pretty colors to enters peoples minds, you are capable of hypnotizing peoples, regardless of - whether or not you possess any notable psychic powers. + Within your eyes lies the ability to place others under your control. You are capable of placing others in a trance, regardless of + whether or not you possess any other notable psychic powers. diff --git a/Resources/Locale/en-US/Floof/vore.ftl b/Resources/Locale/en-US/Floof/vore.ftl index 3a46118c0ee..be3d0722a04 100644 --- a/Resources/Locale/en-US/Floof/vore.ftl +++ b/Resources/Locale/en-US/Floof/vore.ftl @@ -31,3 +31,5 @@ vore-digested-prey-7 = [color=red]{CAPITALIZE($entity)} belly kneads on every fi vore-digested-prey-8 = [color=red]{CAPITALIZE($entity)} belly churns you down into a hot slush. Your nutrient-rich remains course through their digestive track with a series of long, wet glorps.[/color] vore-examine = Their belly is larger, you can see {$count} shapes. + +ui-options-vore-sounds = Vore Sounds diff --git a/Resources/Prototypes/consent.yml b/Resources/Prototypes/consent.yml index f1c355e61dc..4096f7ab3b8 100644 --- a/Resources/Prototypes/consent.yml +++ b/Resources/Prototypes/consent.yml @@ -1,6 +1,9 @@ - type: consentToggle id: Vore +- type: consentToggle + id: VorePred + - type: consentToggle id: Digestion From adfe704e071431140e55a0eefa38d35909b69375 Mon Sep 17 00:00:00 2001 From: FoxxoTrystan Date: Sun, 8 Dec 2024 20:58:41 +0100 Subject: [PATCH 34/44] resomi patch --- .../Floof/Entities/Mobs/Species/resomi.yml | 65 ++++++++++++++++-- Resources/Prototypes/Floof/Species/resomi.yml | 8 ++- .../Customization/resomi_parts.rsi/tail.png | Bin 647 -> 725 bytes .../resomi_parts.rsi/tail_feathers.png | Bin 1111 -> 467 bytes .../Species/Resomi/displacement.rsi/belt.png | Bin 285 -> 357 bytes .../Species/Resomi/displacement.rsi/head.png | Bin 197 -> 340 bytes .../Species/Resomi/displacement.rsi/neck.png | Bin 564 -> 591 bytes 7 files changed, 68 insertions(+), 5 deletions(-) diff --git a/Resources/Prototypes/Floof/Entities/Mobs/Species/resomi.yml b/Resources/Prototypes/Floof/Entities/Mobs/Species/resomi.yml index ddbe45fd288..d4b00193300 100644 --- a/Resources/Prototypes/Floof/Entities/Mobs/Species/resomi.yml +++ b/Resources/Prototypes/Floof/Entities/Mobs/Species/resomi.yml @@ -13,14 +13,15 @@ - type: Fixtures fixtures: fix1: - shape: !type:PhysShapeCircle + shape: + !type:PhysShapeCircle radius: 0.35 density: 185 restitution: 0.0 mask: - - MobMask + - MobMask layer: - - MobLayer + - MobLayer - type: DamageVisuals thresholds: [ 10, 30, 50, 70 ] damageOverlayGroups: @@ -122,11 +123,67 @@ components: - type: HumanoidAppearance species: Resomi + - type: Hands + handDisplacement: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: inHand - type: Inventory - speciesId: Resomi + speciesId: resomi displacements: jumpsuit: sizeMaps: 32: sprite: Floof/Mobs/Species/Resomi/displacement.rsi state: jumpsuit + eyes: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: eyes + gloves: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: hands + head: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: head + back: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: back + ears: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: ears + shoes: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: feet + neck: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: neck + mask: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: mask + suitstorage: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: suitStorage + belt: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: belt diff --git a/Resources/Prototypes/Floof/Species/resomi.yml b/Resources/Prototypes/Floof/Species/resomi.yml index 1e8487952ae..85f94595b7e 100644 --- a/Resources/Prototypes/Floof/Species/resomi.yml +++ b/Resources/Prototypes/Floof/Species/resomi.yml @@ -12,6 +12,8 @@ femaleFirstNames: names_resomi_female naming: First customName: true + sexes: + - Unsexed - type: speciesBaseSprites id: MobResomiSprites @@ -42,7 +44,7 @@ points: 1 required: false Tail: - points: 1 + points: 2 required: true defaultMarkings: [ ResomiTail, ResomiTailFeathers ] Head: @@ -54,15 +56,19 @@ RightFoot: points: 1 required: false + defaultMarkings: [ ResomiRLegFeathers ] LeftFoot: points: 1 required: false + defaultMarkings: [ ResomiLLegFeathers ] RightHand: points: 1 required: false + defaultMarkings: [ ResomiRArmFeathers ] LeftHand: points: 1 required: false + defaultMarkings: [ ResomiLArmFeathers ] - type: humanoidBaseSprite id: MobResomiEyes diff --git a/Resources/Textures/Floof/Mobs/Customization/resomi_parts.rsi/tail.png b/Resources/Textures/Floof/Mobs/Customization/resomi_parts.rsi/tail.png index 59939326f957ec1dcbcc1a7501242e719b978c0d..5535c2d525ecf3af5998863fc03eb82050839a67 100644 GIT binary patch delta 701 zcmV;u0z&LrWb|kz!u4ctx_n1~3@j`je1=1T*t924)7pVzF2(7K_DV zu~;k?i{-CDM4MZ#*DJlV@1135`T~q42m)$b9||KHeXLQ^G=HTeNdN#+N}Nt7HfEg7 z32;82NlMxJTaqO3eSeS;jEL}fJaE6?0RV9vKmDOB%iaMz&l_?+EfhsT0Khp{+o-n( zIe$1D@S)qdC8!;x#x?+qngWvrh@uFepPy5Q8ADTqQO*Mz1OR}`<)UMl!6@O!p5OQV zZBBt2Qui%8wzV}$8Rbd^GFm(*$ z^#IdPht2i{bYTTBZGdU40HzHvjTJzx#Bsc>CgB8{zV4>9mbXq21hf-EAPhtLtqJ-+ zQI;jbFeD)aK3vyjx7+PcMS;peT-Rm0s;Wp;Nunrv5~3$6$oKs@Z5%{xOY22^^+EZ_ zIY(7hw0{G@9LE9Yyfbt9Eu&f^eZFwcRa=dzWQeJc4&LDV3k?(fz%HbeNRs5OCTUR= za2$sL&+h?D2my42QjKz+rD;0BT)ot`u-dj>`)eP+MS4w#nGk~VJa7B(fTWZ^s;Xj6v%L5+a`e1%wJ?yR21MO2OhEjH7mt02Mv!1KJu6EoO5bM jYEcwxx7%W|Sj_MbG9RfAKf9?K00000NkvXXu0mjf7uhbh delta 622 zcmV-!0+IdI1&0NYB!3BTNLh0L01FcU01FcV0GgZ_0006xNkl=B%6hv1{ zO2!S1S~YY!hEG7_OL77ZzyUNgZrrNY(5X<0*a;BZ7%Y3uSg%Vai2V;mk-lOPLcp5Y zumiA30@wlABmwLIY?1(W05(YgI{=#`fE|EM62K0?CJA5%V1JVYumiA30@wlAtX{wu z0C?}=oC5%y&*!@zxL&Wl1LS!=QM5rc9bNIxi+8(SngL&92RNNhI2;Z!vQQW;00551 zV~k;5rV;<{`xiwKM*xY?tXue53*K4>q6yGi#~NxdS(c4{?`VslF(%efLlI?JqAW|` z%}*bQyboYVz<-G1feAK31PP;USeTsxhcY>cFVe+l;5+z6}vET0j%yb%D zk_0K`-Pf}nhL#|qs;YnAoAorvl+ac@Kxl|CBy<%IkUBzhO6V&dhuiK7jt&eHnu(_;-yjn28?y$>4zqP}A4e0u8HiE4>F$sFpMMROPu*4lt!myDq~ z#xm{$yU<$07&9opwH8^H3E+MW5K1YaXC~mUcyYO0#^jAkoki5ydh^#c{z`g04hyAJ zsH&>%UuRE(*7{#pb&0ghga81K#RKjA0HKr$Hv<9qnPO7P-z({*bMqlKg##_W9$gI) z0RVZPKTfAnH?cDy06 diff --git a/Resources/Textures/Floof/Mobs/Customization/resomi_parts.rsi/tail_feathers.png b/Resources/Textures/Floof/Mobs/Customization/resomi_parts.rsi/tail_feathers.png index 9d26d682491c4ab1297ce22b1caa3b50b3d9e200..ac22a353b4f7121db64593fab07e4120e1ee3e71 100644 GIT binary patch delta 441 zcmV;q0Y?7U2-5?QB!2;OQb$4nuFf3k0004vNkl{l5Cz}^F*f}S_&&ewawhZY@%GF{OPdqd?lhebL6KOfQX2Qh=_=Y=+~&Kb%e=8j2hRfOPc1y~2L#saJZSYrX!0XAdFhBYhQbUX~?9MEkzC&hs^W z-$O*SEX&)0rfD>8Tz|p+ym<&gZI(zZM7ak(4BKGiz}wKZ9kcF z6ZZQ(ilV^baDa2}aiu=yfw*W9`C((Sy`AyZ30odMdNP%9^czn^ba-+K!$-rc&*mBZ jLn#eDlzM(5BKovHz%l5}yJuW$00000NkvXXu0mjfjHJ@c literal 1111 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GG!XV7ZFl&wk0|VnG zPZ!6KiaBp*8m>EJAmDObu&6aCaEY%!-x1E*23xNenVKsCR+;?fPGR}U;lt#!=8d-E z0`um#9czL^b!Il{9yrF8z`bE3(+#GaH4NJrq_rE+g=QZWZ;+Ai=s02j(tZ72r_j%_ zjN2QJxAa?twidrL4zo|$e?R;7Him{}nH%or-RE1l>ZhoH(}iW3a{I1t(=FQ_TQoz5 zn?Y~C9YaVcD}#kxKf{M_S|_$KFj&m>EB{@$`DV{8rpSA&O11a1?|)y+oKh?PL*%BI zfK$Nxz1H*3b13%2AKRJVs5$@qKb{#~a~V(k;Q1jE#t_}mD|$dIA(?dp>x~G;97Z$j zLJ4L*GdDatmU}J9^I&^NhgfN>v&)v(R@=^>f3b^CX;EoxvZ(qRZ>7HLt5-P%PJ3E< zW{y=7m*R^#Y+9>+O|vfGjGv|&cCT98-KYKV!`bsTC+v-jKV1F(z56Ro_D4$`pG@~G zte*MtCTlUDeC4wlHOGYoW#i^J|2T2sYv8;m`lmF1Oc1FzUw(Pc!AJkO;jTO@uM~7^ z&Yey5?Z7By@O1TaS?83{^x_-Geq?@o9KZXAQp=?erl0wx_~rZ28Wk-E%~kW5Wr8@B zepKnrwD+AV`rzBQvg|o?R2!AH{%)bE3r=w@c;MP8QmoZ@uCw>deE+S^4jvP_ z7Wl~Da+(m8_B(mW^s0>lB2#wptSREyv48*jZ+1U^{<`(Hcku)FXV)ca6eEw`y&L;m zV+)_a>UveDLb3a7-&$V;XCFA;v0q)R<jlM*<(yjAoiLtyw#wHy$dwsd-?|Y?H&4n^ha~((OvUizCF&FrJYVY4Cc$EP7y$ zF5{xfsy{x&v%c7#-I!`@$?_uT!;ROBRl3h4N)0p^e5cpk5K_q9HieH_heLPzMa2fK z2M5nhGt9~pxx4mgy0r8$8z)g$(Pb%{RemHC3C##=O7>w%wpe)R%E2|u0s}eu-sVqF z+oy3;M{?WDH4KeLW=s_xstHPw>eX9&Uxzm(yixr%Q(xlu>!dPPjzvO8%v|k%^!zQ| zIGtgm--NpK1q|Ak+qXG97y4smxuQ7Z)^D@7pY7dlsYcIDMB diff --git a/Resources/Textures/Floof/Mobs/Species/Resomi/displacement.rsi/belt.png b/Resources/Textures/Floof/Mobs/Species/Resomi/displacement.rsi/belt.png index 3bfc191dbaebe38095aa14c04680f1b86c1047b5..46abece46b7839ddd6e8e00bd8828d3c9155f422 100644 GIT binary patch delta 318 zcmV-E0m1&A0_6gbFn<9bNkl9rHB2e+#xDhz>xb;kdj>8=r3 z7iuC200000036MbdqcQrX}Q33%a8HP@lVBf^atj|q-uk98G!T}LQBieHn+2{aM3c~ zG`xh6St@JX1(2%0^lU+C5bl=1w@tC81?~cn(jn9?fqVc%C z11z}>V7^A50N47ixedUI+Wlep8vpRKn`$Q{7w6Gm1Lvtw~82!+HUUntV^B>!f#ndx1-C?|=a6t9|FN|^a1JkPMD|f2C6!d;B z^kdb>_V*1FnEKA;Wgl-9QFzP!Zf2e$>yp<8H)VMpt*@`{^|*7Mr;K&}xw6$A1+o*g zH!S5o#5tjlJ9jRVBCE&mrs(eJOxz40(4e=fET~G(Y{@>^*-Mk(>`c1zP`*vz0pEjV z8Vkz*S+6|l$G(Gkhhu|vgER|}VfpszjhpwGRlH8$oVRq73%ddX<2!~ti24WN+qY}4 uIB8d-#@_PV?Zw<#wfkibmjmtSIm3N*gJs;+l9OvdR(iVnxvXML?-Y}Sk_R|V8XhDdC63L1`t><#eMhhi+%q( zKOdHF{QUUM-Tw`SAZbknSp{FlmkgO)9_$|4@gSuRVwUC$i}bR87Y(WHF#!o&nOJXC zrwEB}0U-!548yoEw0!vdKy2!ulKa=bnTCHSuzxE|0PO&@F#)s#(8dJN4nP|dpv747 zC8Q@k{5J`}{@T`=9{w*s1^n_M7IKP{a+36{^-mrYzc&fsL4SCB#_>ID29RHj)618G zAq7ZppFHR}_-#g1vYG7T{G7^pE1ixCkZ6 zUkh&vBsaNsrGNjIsPRv$$KT@v<=d3tWk8M2+Gk{@_$&cJp>=eCJ8)ki?O$LF!!V3D zW3{o|m<0-y`MX4}K;kYakdW-UH!G0%!vxR{KpPW4I{> z;6G9{2><{gb`(KWRM6(~@>8IX01X8S+CJA)Kp=-p_kZ=m`}q|$Lt54ccu(cyIFv+_Xds-VXx1|w-0pK1+qva;Mx#QvI~Sw7~AI)`)Dhb-LpPo@Gtrfjgw8h z3lM++U`jUWhW6+?{*9jrzzkp#`em;H4*K_>d(4ZVIASy{f|Ix!svq;_N`7M6iv&nM sQ*E#2StGzV`erYJq0Qgvxcp)02UxyoyR)g*nE(I)07*qoM6N<$f?pB(ZvX%Q delta 527 zcmV+q0`UFM1hfQ@Fnpg$G+z>x|l4V2;7XkdvL80@&fCK;=Bvd#LbV>n6|0aniFoma@30$ji z$Or&{m-7G+E>;CvVz?^MTB$q&3=aTDR7-gf6Y$OmI*}aag(+OWEwU7t)oiWV`(2Bo zyfE-M%Fy;Rdw-Bcz!9FU&&WdZMFdPcPjdi5$GSq+|G+pL4u|8*K);FsiDkvJs!&n6 z{_>|mC&1bOYd8Vc23W%hur|ONPJp!m)<~Mg6M$$vE33qV0EH77%68QFU!KdSKpO(O zT(6v?GifP^^L>5g{k&XZF&U!N*FFWd1{gk6wwi#vwtoXXNLZ8EAlmw6?-_4}20GfL zz*Ou+`T2u&s0avaJJ7@VH?p%*WOWJz6rJFFL)(2e=D(f@Aai|3DsF`%%)8fB=E`D%PDHLkV1l(V=@|e3 From 75d9838bfd0d677209407bd769179537a4c7ad64 Mon Sep 17 00:00:00 2001 From: FoxxoTrystan Date: Sun, 8 Dec 2024 21:24:36 +0100 Subject: [PATCH 35/44] subtle --- Content.Server/FloofStation/VoreSystem.cs | 6 +++--- Content.Shared/Floofstation/VoreComponent.cs | 2 +- Content.Shared/Floofstation/VoredComponent.cs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Content.Server/FloofStation/VoreSystem.cs b/Content.Server/FloofStation/VoreSystem.cs index 6e2fb2195b6..211ecf43d5e 100644 --- a/Content.Server/FloofStation/VoreSystem.cs +++ b/Content.Server/FloofStation/VoreSystem.cs @@ -189,7 +189,7 @@ public void TryDevour(EntityUid uid, EntityUid target, VoreComponent? component if (_food.IsMouthBlocked(uid, uid)) return; - _popups.PopupEntity(Loc.GetString("vore-attempt-devour", ("entity", uid), ("prey", target)), uid, PopupType.LargeCaution); + _popups.PopupEntity(Loc.GetString("vore-attempt-devour", ("entity", uid), ("prey", target)), uid, PopupType.MediumCaution); if (!TryComp(uid, out var predPhysics) || !TryComp(target, out var preyPhysics)) @@ -238,7 +238,7 @@ public void Devour(EntityUid uid, EntityUid target, VoreComponent? component = n _audioSystem.PlayPvs(component.SoundDevour, uid); - _popups.PopupEntity(Loc.GetString("vore-devoured", ("entity", uid), ("prey", target)), uid, PopupType.LargeCaution); + _popups.PopupEntity(Loc.GetString("vore-devoured", ("entity", uid), ("prey", target)), uid, PopupType.SmallCaution); _adminLog.Add(LogType.Action, LogImpact.High, $"{ToPrettyString(uid)} vored {ToPrettyString(target)}"); } @@ -260,7 +260,7 @@ private void OnRelease(EntityUid uid, VoredComponent component, EntGotRemovedFro _audioSystem.PlayPvs(component.SoundRelease, args.Container.Owner); - _popups.PopupEntity(Loc.GetString("vore-released", ("entity", uid), ("pred", args.Container.Owner)), uid, PopupType.Large); + _popups.PopupEntity(Loc.GetString("vore-released", ("entity", uid), ("pred", args.Container.Owner)), uid, PopupType.Medium); _adminLog.Add(LogType.Action, LogImpact.Medium, $"{ToPrettyString(uid)} got released from {ToPrettyString(args.Container.Owner)} belly"); } diff --git a/Content.Shared/Floofstation/VoreComponent.cs b/Content.Shared/Floofstation/VoreComponent.cs index e551f482851..160f489ebd6 100644 --- a/Content.Shared/Floofstation/VoreComponent.cs +++ b/Content.Shared/Floofstation/VoreComponent.cs @@ -14,7 +14,7 @@ public sealed partial class VoreComponent : Component [DataField] public SoundSpecifier? SoundDevour = new SoundPathSpecifier("/Audio/Floof/Vore/gulp.ogg") { - Params = AudioParams.Default.WithVolume(-3f), + Params = AudioParams.Default.WithVolume(-4f).WithMaxDistance(1f), }; public Container Stomach = default!; } diff --git a/Content.Shared/Floofstation/VoredComponent.cs b/Content.Shared/Floofstation/VoredComponent.cs index 92a7b251d13..b37b06946c1 100644 --- a/Content.Shared/Floofstation/VoredComponent.cs +++ b/Content.Shared/Floofstation/VoredComponent.cs @@ -18,12 +18,12 @@ public sealed partial class VoredComponent : Component [DataField, AutoNetworkedField] public SoundSpecifier? SoundBelly = new SoundPathSpecifier("/Audio/Floof/Vore/stomach_loop.ogg") { - Params = AudioParams.Default.WithLoop(true).WithVolume(-3f), + Params = AudioParams.Default.WithLoop(true).WithVolume(-4f), }; [DataField] public SoundSpecifier? SoundRelease = new SoundPathSpecifier("/Audio/Effects/Fluids/splat.ogg") { - Params = AudioParams.Default.WithVolume(-3f), + Params = AudioParams.Default.WithVolume(-4f), }; } From 9e2887364026684b1af1cdd1d9ba020dd4d72579 Mon Sep 17 00:00:00 2001 From: FoxxoTrystan Date: Sun, 8 Dec 2024 23:15:15 +0100 Subject: [PATCH 36/44] private --- Content.Server/FloofStation/VoreSystem.cs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Content.Server/FloofStation/VoreSystem.cs b/Content.Server/FloofStation/VoreSystem.cs index 211ecf43d5e..89ff8b53b36 100644 --- a/Content.Server/FloofStation/VoreSystem.cs +++ b/Content.Server/FloofStation/VoreSystem.cs @@ -35,8 +35,8 @@ using Content.Server.Power.Components; using Content.Server.Nutrition.EntitySystems; using Content.Shared.Interaction.Events; -using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; +using Robust.Shared.Player; namespace Content.Server.FloofStation; @@ -189,7 +189,8 @@ public void TryDevour(EntityUid uid, EntityUid target, VoreComponent? component if (_food.IsMouthBlocked(uid, uid)) return; - _popups.PopupEntity(Loc.GetString("vore-attempt-devour", ("entity", uid), ("prey", target)), uid, PopupType.MediumCaution); + _popups.PopupEntity(Loc.GetString("vore-attempt-devour", ("entity", uid), ("prey", target)), uid, target, PopupType.MediumCaution); + _popups.PopupEntity(Loc.GetString("vore-attempt-devour", ("entity", uid), ("prey", target)), target, uid, PopupType.MediumCaution); if (!TryComp(uid, out var predPhysics) || !TryComp(target, out var preyPhysics)) @@ -236,9 +237,10 @@ public void Devour(EntityUid uid, EntityUid target, VoreComponent? component = n _containerSystem.Insert(target, component.Stomach); - _audioSystem.PlayPvs(component.SoundDevour, uid); + _audioSystem.PlayEntity(component.SoundDevour, Filter.Pvs(uid), uid, false); - _popups.PopupEntity(Loc.GetString("vore-devoured", ("entity", uid), ("prey", target)), uid, PopupType.SmallCaution); + _popups.PopupEntity(Loc.GetString("vore-devoured", ("entity", uid), ("prey", target)), uid, target, PopupType.SmallCaution); + _popups.PopupEntity(Loc.GetString("vore-devoured", ("entity", uid), ("prey", target)), target, uid, PopupType.SmallCaution); _adminLog.Add(LogType.Action, LogImpact.High, $"{ToPrettyString(uid)} vored {ToPrettyString(target)}"); } @@ -258,9 +260,11 @@ private void OnRelease(EntityUid uid, VoredComponent component, EntGotRemovedFro if (TryComp(uid, out var temp)) temp.AtmosTemperatureTransferEfficiency = 0.1f; - _audioSystem.PlayPvs(component.SoundRelease, args.Container.Owner); + _audioSystem.PlayEntity(component.SoundRelease, Filter.Pvs(uid), uid, false); + _audioSystem.PlayEntity(component.SoundRelease, Filter.Pvs(args.Container.Owner), args.Container.Owner, false); - _popups.PopupEntity(Loc.GetString("vore-released", ("entity", uid), ("pred", args.Container.Owner)), uid, PopupType.Medium); + _popups.PopupEntity(Loc.GetString("vore-released", ("entity", uid), ("pred", args.Container.Owner)), uid, args.Container.Owner, PopupType.Medium); + _popups.PopupEntity(Loc.GetString("vore-released", ("entity", uid), ("pred", args.Container.Owner)), args.Container.Owner, uid, PopupType.Medium); _adminLog.Add(LogType.Action, LogImpact.Medium, $"{ToPrettyString(uid)} got released from {ToPrettyString(args.Container.Owner)} belly"); } From 493efb1277015c69ab827996239993c865b527f1 Mon Sep 17 00:00:00 2001 From: FoxxoTrystan Date: Mon, 9 Dec 2024 00:52:55 +0100 Subject: [PATCH 37/44] voresound local --- Content.Server/FloofStation/VoreSystem.cs | 33 ++++++++++++++++++----- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/Content.Server/FloofStation/VoreSystem.cs b/Content.Server/FloofStation/VoreSystem.cs index 89ff8b53b36..86fc7cf2417 100644 --- a/Content.Server/FloofStation/VoreSystem.cs +++ b/Content.Server/FloofStation/VoreSystem.cs @@ -95,7 +95,7 @@ private void DevourVerb(EntityUid uid, VoreComponent component, GetVerbsEvent(args.Target) + || !HasComp(args.Target) || !_consent.HasConsent(args.User, "VorePred") || !_consent.HasConsent(args.Target, "Vore")) return; @@ -237,9 +237,25 @@ public void Devour(EntityUid uid, EntityUid target, VoreComponent? component = n _containerSystem.Insert(target, component.Stomach); - _audioSystem.PlayEntity(component.SoundDevour, Filter.Pvs(uid), uid, false); + if (_playerManager.TryGetSessionByEntity(target, out var sessionprey) + || sessionprey is not null) + _audioSystem.PlayEntity(component.SoundDevour, sessionprey, uid); + + if (_playerManager.TryGetSessionByEntity(uid, out var sessionpred) + || sessionpred is not null) + { + _audioSystem.PlayEntity(component.SoundDevour, sessionpred, uid); + // var message = Loc.GetString("", ("entity", uid)); + // _chatManager.ChatMessageToOne( + // ChatChannel.Emotes, + // message, + // message, + // EntityUid.Invalid, + // false, + // sessionprey.Channel); + } - _popups.PopupEntity(Loc.GetString("vore-devoured", ("entity", uid), ("prey", target)), uid, target, PopupType.SmallCaution); + _popups.PopupEntity(Loc.GetString("vore-devoured", ("entity", uid), ("prey", target)), target, target, PopupType.SmallCaution); _popups.PopupEntity(Loc.GetString("vore-devoured", ("entity", uid), ("prey", target)), target, uid, PopupType.SmallCaution); _adminLog.Add(LogType.Action, LogImpact.High, $"{ToPrettyString(uid)} vored {ToPrettyString(target)}"); @@ -260,11 +276,16 @@ private void OnRelease(EntityUid uid, VoredComponent component, EntGotRemovedFro if (TryComp(uid, out var temp)) temp.AtmosTemperatureTransferEfficiency = 0.1f; - _audioSystem.PlayEntity(component.SoundRelease, Filter.Pvs(uid), uid, false); - _audioSystem.PlayEntity(component.SoundRelease, Filter.Pvs(args.Container.Owner), args.Container.Owner, false); + if (_playerManager.TryGetSessionByEntity(args.Container.Owner, out var sessionpred) + || sessionpred is not null) + _audioSystem.PlayEntity(component.SoundRelease, sessionpred, uid); + + if (_playerManager.TryGetSessionByEntity(uid, out var sessionprey) + || sessionprey is not null) + _audioSystem.PlayEntity(component.SoundRelease, sessionprey, uid); _popups.PopupEntity(Loc.GetString("vore-released", ("entity", uid), ("pred", args.Container.Owner)), uid, args.Container.Owner, PopupType.Medium); - _popups.PopupEntity(Loc.GetString("vore-released", ("entity", uid), ("pred", args.Container.Owner)), args.Container.Owner, uid, PopupType.Medium); + _popups.PopupEntity(Loc.GetString("vore-released", ("entity", uid), ("pred", args.Container.Owner)), uid, uid, PopupType.Medium); _adminLog.Add(LogType.Action, LogImpact.Medium, $"{ToPrettyString(uid)} got released from {ToPrettyString(args.Container.Owner)} belly"); } From 2bc778dadcf945988d157a1c69fb195b17bed31c Mon Sep 17 00:00:00 2001 From: FloofStation Changelogs <175611579+Floof-Station-Bot@users.noreply.github.com> Date: Sun, 8 Dec 2024 23:57:08 +0000 Subject: [PATCH 38/44] Automatic Changelog Update (#398) --- Resources/Changelog/Floof.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Resources/Changelog/Floof.yml b/Resources/Changelog/Floof.yml index 6431ac16e9a..e2d2386db26 100644 --- a/Resources/Changelog/Floof.yml +++ b/Resources/Changelog/Floof.yml @@ -1747,3 +1747,18 @@ Entries: id: 228 time: '2024-12-07T15:06:13.0000000+00:00' url: https://github.com/Fansana/floofstation1/pull/385 +- author: FoxxoTrystan + changes: + - type: Add + message: Add Vore Sound toggle in options. + - type: Add + message: Added Vore Pred and allow to insert yourself. + - type: Tweak + message: Vore Consent was changed to Vore Prey. + - type: Tweak + message: You can only vore others with the ability to vore. + - type: Fix + message: Fix Resomi Displacement Maps + id: 229 + time: '2024-12-08T23:56:42.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/398 From 044a74bc61e13a63124c5602ad814456e572a7a2 Mon Sep 17 00:00:00 2001 From: FloofStation Changelogs <175611579+Floof-Station-Bot@users.noreply.github.com> Date: Sun, 8 Dec 2024 23:58:19 +0000 Subject: [PATCH 39/44] Automatic Changelog Update (#397) --- Resources/Changelog/Floof.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Floof.yml b/Resources/Changelog/Floof.yml index e2d2386db26..b25d336e028 100644 --- a/Resources/Changelog/Floof.yml +++ b/Resources/Changelog/Floof.yml @@ -1762,3 +1762,10 @@ Entries: id: 229 time: '2024-12-08T23:56:42.0000000+00:00' url: https://github.com/Fansana/floofstation1/pull/398 +- author: Memeji + changes: + - type: Add + message: .20 Rifle Rubber Ammo Box to Bartender loadout. + id: 230 + time: '2024-12-08T23:57:51.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/397 From 03a5bf432bfc1c86006bf0cc975d179e6ce2f9d8 Mon Sep 17 00:00:00 2001 From: FoxxoTrystan Date: Mon, 9 Dec 2024 05:23:57 +0100 Subject: [PATCH 40/44] fix .ftl --- .../Abilities/Psionics/Abilities/PsionicHypnoSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/FloofStation/Abilities/Psionics/Abilities/PsionicHypnoSystem.cs b/Content.Server/FloofStation/Abilities/Psionics/Abilities/PsionicHypnoSystem.cs index cb2a01fa792..eb6cc8dbdc9 100644 --- a/Content.Server/FloofStation/Abilities/Psionics/Abilities/PsionicHypnoSystem.cs +++ b/Content.Server/FloofStation/Abilities/Psionics/Abilities/PsionicHypnoSystem.cs @@ -161,7 +161,7 @@ private void OnDoAfter(EntityUid uid, PsionicHypnoComponent component, PsionicHy } else if (args.Phase == 2) { - _popups.PopupEntity(Loc.GetString("hypno-phase-3"), args.Target.Value, args.Target.Value, PopupType.Medium); + _popups.PopupEntity(Loc.GetString("hypno-phase-3", ("target", uid)), args.Target.Value, args.Target.Value, PopupType.Medium); _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, uid, component.UseDelay, new PsionicHypnosisDoAfterEvent(3), uid, target: args.Target) { From 80cbbc01ffb76b93424f87bf5b6d7202d617c44d Mon Sep 17 00:00:00 2001 From: Fansana Date: Mon, 9 Dec 2024 15:48:58 +0100 Subject: [PATCH 41/44] fix mice eating uranium --- .../Entities/Objects/Materials/Sheets/other.yml | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml index 5fec307625d..a48199820bf 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml @@ -210,7 +210,7 @@ count: 1 - type: entity - parent: [SheetOtherBase, FoodBase] + parent: [SheetOtherBase] # Floof Uranium not more munchable id: SheetUranium name: uranium suffix: Full @@ -234,17 +234,6 @@ - type: Appearance - type: Item heldPrefix: uranium - - type: Extractable - grindableSolutionName: food - - type: SolutionContainerManager - solutions: - food: - reagents: - - ReagentId: Uranium - Quantity: 8 - - ReagentId: Radium - Quantity: 2 - canReact: false - type: UserInterface interfaces: enum.RadialSelectorUiKey.Key: From 2c41d62b1ec0cc0d5590b9577c7063931cb0b645 Mon Sep 17 00:00:00 2001 From: Fansana Date: Mon, 9 Dec 2024 15:49:48 +0100 Subject: [PATCH 42/44] add firebreath --- Resources/Prototypes/Floof/Entities/Clothing/Neck/amulet.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Resources/Prototypes/Floof/Entities/Clothing/Neck/amulet.yml b/Resources/Prototypes/Floof/Entities/Clothing/Neck/amulet.yml index a4a3a2edd54..5d2aec6e0eb 100644 --- a/Resources/Prototypes/Floof/Entities/Clothing/Neck/amulet.yml +++ b/Resources/Prototypes/Floof/Entities/Clothing/Neck/amulet.yml @@ -141,4 +141,6 @@ - type: Puller needsHands: false - type: Hands - + - type: ActionGun + action: ActionDragonsBreath + gunProto: DragonsBreathGun From 5184fc32ee6d3e9d29211d733836a69d93ec70cf Mon Sep 17 00:00:00 2001 From: FloofStation Changelogs <175611579+Floof-Station-Bot@users.noreply.github.com> Date: Mon, 9 Dec 2024 15:57:47 +0000 Subject: [PATCH 43/44] Automatic Changelog Update (#400) --- Resources/Changelog/Floof.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Floof.yml b/Resources/Changelog/Floof.yml index b25d336e028..5aa3b62f306 100644 --- a/Resources/Changelog/Floof.yml +++ b/Resources/Changelog/Floof.yml @@ -1769,3 +1769,10 @@ Entries: id: 230 time: '2024-12-08T23:57:51.0000000+00:00' url: https://github.com/Fansana/floofstation1/pull/397 +- author: Fansana + changes: + - type: Fix + message: Fixed mice eating uranium! + id: 231 + time: '2024-12-09T15:57:10.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/400 From 99f61182ba66592026ba32bad1403a174c8c8a1d Mon Sep 17 00:00:00 2001 From: Fansana Date: Mon, 9 Dec 2024 20:08:17 +0100 Subject: [PATCH 44/44] Automatic Changelog Update (#921) --- Content.Server/Chat/Systems/ChatSystem.cs | 52 ++++++++++++++++++++--- 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index 899ae778bd9..605c99c20ce 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -3,6 +3,7 @@ using System.Text; using Content.Server.Administration.Logs; using Content.Server.Administration.Managers; +using Content.Server.Atmos.Components; using Content.Server.Chat.Managers; using Content.Server.GameTicking; using Content.Server.Language; @@ -36,6 +37,8 @@ using Robust.Shared.Replays; using Robust.Shared.Utility; using Content.Server.Shuttles.Components; +using Content.Shared.Actions; +using Robust.Shared.Map; using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Dynamics.Joints; @@ -69,10 +72,12 @@ public sealed partial class ChatSystem : SharedChatSystem [Dependency] private readonly ReplacementAccentSystem _wordreplacement = default!; [Dependency] private readonly LanguageSystem _language = default!; [Dependency] private readonly TelepathicChatSystem _telepath = default!; + [Dependency] private readonly IMapManager _mapManager = default!; public const int VoiceRange = 10; // how far voice goes in world units public const int WhisperClearRange = 2; // how far whisper goes while still being understandable, in world units public const int WhisperMuffledRange = 5; // how far whisper goes at all, in world units + public const float InSpaceRange = .3f; // how far speech travels in space public const string DefaultAnnouncementSound = "/Audio/Announcements/announce.ogg"; public const float DefaultObfuscationFactor = 0.2f; // Percentage of symbols in a whispered message that can be seen even by "far" listeners public readonly Color DefaultSpeakColor = Color.White; @@ -747,18 +752,53 @@ private MessageRangeCheckResult MessageRangeCheck(ICommonSession session, ICChat return initialResult; } + public bool isSoundTransmittable(MapId mapId) + { + try + { + var map = _mapManager.GetMapEntityIdOrThrow(mapId); + if (!map.Valid) + return false; + if (!EntityManager.TryGetComponent(map, out var _)) + return false; + } + catch (Exception ex) + { + return false; + } + + return true; + } /// /// Sends a chat message to the given players in range of the source entity. /// private void SendInVoiceRange(ChatChannel channel, string name, string message, string wrappedMessage, string obfuscated, string obfuscatedWrappedMessage, EntityUid source, ChatTransmitRange range, NetUserId? author = null, LanguagePrototype? languageOverride = null) { var language = languageOverride ?? _language.GetLanguage(source); - foreach (var (session, data) in GetRecipients(source, Transform(source).GridUid == null ? 0.3f : VoiceRange)) + foreach (var (session, data) in GetRecipients(source, VoiceRange)) { - if (session.AttachedEntity != null - && Transform(session.AttachedEntity.Value).GridUid != Transform(source).GridUid - && !CheckAttachedGrids(source, session.AttachedEntity.Value)) - continue; + if (language.SpeechOverride.RequireSpeech && channel != ChatChannel.LOOC && channel != ChatChannel.Emotes ) + { + var sourceGrid = Transform(source).GridUid; + float transmitRange = VoiceRange; + if (sourceGrid == null && !isSoundTransmittable(Transform(source).MapID)) + transmitRange = InSpaceRange; + + if (session.AttachedEntity != null + && Transform(session.AttachedEntity.Value).GridUid == null + && !isSoundTransmittable(Transform(session.AttachedEntity.Value).MapID)) + transmitRange = InSpaceRange; + + if (session.AttachedEntity != null + && Transform(session.AttachedEntity.Value).GridUid != sourceGrid + && !isSoundTransmittable(Transform(session.AttachedEntity.Value).MapID) + && !CheckAttachedGrids(source, session.AttachedEntity.Value)) + transmitRange = InSpaceRange; + + if (session.AttachedEntity != null && Transform(source).Coordinates.TryDistance(EntityManager, Transform(session.AttachedEntity.Value).Coordinates, out var distance) && distance > transmitRange) + continue; + + } var entRange = MessageRangeCheck(session, data, range); if (entRange == MessageRangeCheckResult.Disallowed) @@ -1084,4 +1124,4 @@ public EntitySpokeEvent(EntityUid source, string message, RadioChannelPrototype? IsWhisper = isWhisper; Language = language; } -} \ No newline at end of file +}