From 7340f3648920b593727e59aa4af3457a66636ce5 Mon Sep 17 00:00:00 2001 From: BIGZi0348 Date: Sun, 24 Nov 2024 22:12:50 +0300 Subject: [PATCH] from dust we came to dust we shall return --- .../_Engi/Suhariki/SuharikiComponent.cs | 53 ++++++ .../_White/_Engi/Suhariki/SuharikiSystem.cs | 152 ++++++++++++++++++ Resources/Changelog/ChangelogHonk.yml | 6 + Resources/Locale/ru-RU/_Engi/suhariki.ftl | 7 + .../Prototypes/Catalog/Fills/Lockers/misc.yml | 4 + .../Random/Food_Drinks/food_snacks.yml | 1 + .../Objects/Consumable/Food/suhariki.yml | 78 +++++++++ .../Food/Suhariki/suhariki.rsi/meta.json | 25 +++ .../suhariki.rsi/suhariki-inhand-left.png | Bin 0 -> 1671 bytes .../suhariki.rsi/suhariki-inhand-right.png | Bin 0 -> 1666 bytes .../Suhariki/suhariki.rsi/suhariki-trash.png | Bin 0 -> 2376 bytes .../Food/Suhariki/suhariki.rsi/suhariki.png | Bin 0 -> 2382 bytes .../Food/Suhariki/tooth.rsi/icon.png | Bin 0 -> 1413 bytes .../Food/Suhariki/tooth.rsi/meta.json | 14 ++ 14 files changed, 340 insertions(+) create mode 100644 Content.Server/_White/_Engi/Suhariki/SuharikiComponent.cs create mode 100644 Content.Server/_White/_Engi/Suhariki/SuharikiSystem.cs create mode 100644 Resources/Locale/ru-RU/_Engi/suhariki.ftl create mode 100644 Resources/Prototypes/_White/_Engi/Entities/Objects/Consumable/Food/suhariki.yml create mode 100644 Resources/Textures/White/_Engi/Consumable/Food/Suhariki/suhariki.rsi/meta.json create mode 100644 Resources/Textures/White/_Engi/Consumable/Food/Suhariki/suhariki.rsi/suhariki-inhand-left.png create mode 100644 Resources/Textures/White/_Engi/Consumable/Food/Suhariki/suhariki.rsi/suhariki-inhand-right.png create mode 100644 Resources/Textures/White/_Engi/Consumable/Food/Suhariki/suhariki.rsi/suhariki-trash.png create mode 100644 Resources/Textures/White/_Engi/Consumable/Food/Suhariki/suhariki.rsi/suhariki.png create mode 100644 Resources/Textures/White/_Engi/Consumable/Food/Suhariki/tooth.rsi/icon.png create mode 100644 Resources/Textures/White/_Engi/Consumable/Food/Suhariki/tooth.rsi/meta.json diff --git a/Content.Server/_White/_Engi/Suhariki/SuharikiComponent.cs b/Content.Server/_White/_Engi/Suhariki/SuharikiComponent.cs new file mode 100644 index 0000000000..a437ed567e --- /dev/null +++ b/Content.Server/_White/_Engi/Suhariki/SuharikiComponent.cs @@ -0,0 +1,53 @@ +using Robust.Shared.Prototypes; +using Content.Shared.Damage; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; +using Content.Shared.Chat.Prototypes; +using Robust.Shared.Audio; + +namespace Content.Server._White._Engi.Suhariki; + +/// +/// Makes you loose your tooth and have funny accent. +/// WD Engi Exclusive. +/// +[RegisterComponent, Access(typeof(SuharikiSystem))] +public sealed partial class SuharikiComponent : Component + +{ + /// + /// Amount and type of damage that will be dealt on event. + /// + [DataField(required: true)] + [ViewVariables(VVAccess.ReadWrite)] + public DamageSpecifier Damage = new(); + + /// + /// Chance of event activation. + /// + [DataField] + public float Chance = 0; + + /// + /// Amount of rolls for event. + /// + [DataField] + public int StonesInFood = 1; + + /// + /// The prototype that will be spawned on event. + /// + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer)), ViewVariables(VVAccess.ReadWrite)] + public string HoldingPrototype = "SuharikiTooth"; + + /// + /// Emote triggered on event. + /// + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] + public string EmoteId = "Scream"; + + /// + /// Sound triggered on event. + /// + [DataField] + public SoundSpecifier UseSound { get; set; } = new SoundPathSpecifier("/Audio/White/_Engi/Object/Misc/Suhariki/tooth_break.ogg"); +} diff --git a/Content.Server/_White/_Engi/Suhariki/SuharikiSystem.cs b/Content.Server/_White/_Engi/Suhariki/SuharikiSystem.cs new file mode 100644 index 0000000000..035e55e97e --- /dev/null +++ b/Content.Server/_White/_Engi/Suhariki/SuharikiSystem.cs @@ -0,0 +1,152 @@ +using Content.Server.Inventory; +using Content.Server.Nutrition.Components; +using Content.Server.Popups; +using Content.Shared.Interaction.Events; +using Content.Shared.Nutrition.EntitySystems; +using Robust.Shared.Random; +using Content.Shared.Damage; +using Content.Server.Effects; +using Robust.Shared.Player; +using Content.Server.Administration.Logs; +using Content.Shared.Database; +using Content.Server.Chat.Systems; +using Content.Server.Nutrition.EntitySystems; +using Robust.Shared.Timing; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; +using Content.Shared.Verbs; +using Robust.Shared.Utility; +using Content.Shared.Body.Components; +using Content.Server.Body.Systems; +using Content.Server.Body.Components; +using Content.Server.Speech.Components; + +namespace Content.Server._White._Engi.Suhariki; + +/// +/// WD Engi Exclusive. +/// +public sealed class SuharikiSystem : EntitySystem +{ + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly DamageableSystem _damageableSystem = default!; + [Dependency] private readonly ColorFlashEffectSystem _color = default!; + [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly FoodSystem _food = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly BodySystem _body = default!; + private EntityQuery _metaQuery; + + public override void Initialize() + { + base.Initialize(); + _metaQuery = GetEntityQuery(); + SubscribeLocalEvent(OnUseInHand, after: new[] { typeof(OpenableSystem), typeof(ServerInventorySystem) }); + SubscribeLocalEvent>(AddEatVerb); + } + + private void OnUseInHand(Entity entity, ref UseInHandEvent ev) + { + if (ev.Handled) + return; + + var result = TryUse(ev.User, ev.User, entity, entity.Comp); + ev.Handled = result.Handled; + } + + private (bool Success, bool Handled) TryUse(EntityUid user, EntityUid target, EntityUid food, SuharikiComponent scomponent) + { + var foodComponents = _metaQuery.GetComponent(food).EntityPrototype; + + if (foodComponents == null) + return (false, false); + + foodComponents.Components.TryGetComponent("Food", out var component); + + if (component == null) + return (false, false); + + // idk what I'm doing but otherwise the owner is "0" and it throws fatal error + component.Owner = food; + + var result = _food.TryFeed(user, target, food, (FoodComponent) component); + + if (result.Success) + Timer.Spawn(300, () => RollEvent(scomponent, user)); + + return (true, true); + } + + private void RollEvent(SuharikiComponent scomponent, EntityUid user) + { + if (scomponent.StonesInFood < 1) + return; + + scomponent.StonesInFood -= 1; + + // Pseudorandom shit + if (!_random.Prob(scomponent.Chance)) + return; + + // Normally slimes don't care about hard food + var whomst = _metaQuery.GetComponent(user).EntityPrototype; + var isUserSlime = whomst!.ID.Contains("slime", StringComparison.OrdinalIgnoreCase); + if (isUserSlime) + return; + + var modifiedDamage = _damageableSystem.TryChangeDamage(user, scomponent.Damage, true); + var deleted = Deleted(user); + if (modifiedDamage is null || !EntityManager.EntityExists(user)) + return; + if (!modifiedDamage.Any() || deleted) + return; + // Damaging the user with appropriate effects + var stringTopopup = Loc.GetString("suhariki-lost", ("user", user)); + _popup.PopupEntity(Name(user) + " " + stringTopopup, user, Shared.Popups.PopupType.LargeCaution); + _color.RaiseEffect(Color.Red, new List { user }, Filter.Pvs(user, entityManager: EntityManager)); + _audio.PlayPvs(scomponent.UseSound, user, AudioParams.Default.WithVolume(-1f)); + _adminLogger.Add(LogType.Damaged, + LogImpact.Medium, + $"This idiot {ToPrettyString(user):user} tried to eat Suhariki and lost tooth, received {modifiedDamage.GetTotal():damage} damage and recieved FrontalLisp accent"); + + // Spawns prototype + var coords = Transform(user).Coordinates; + Spawn(scomponent.HoldingPrototype, coords.Offset(_random.NextVector2(0.2f))); + + // Scream + Timer.Spawn(300, () => _chat.TryEmoteWithChat(user, scomponent.EmoteId)); + + // Adding FrontalLisp accent + EnsureComp(user); + + return; + + } + + private void AddEatVerb(Entity entity, ref GetVerbsEvent ev) + { + if (entity.Owner == ev.User || + !ev.CanInteract || + !ev.CanAccess || + !TryComp(ev.User, out var body) || + !_body.TryGetBodyOrganComponents(ev.User, out var stomachs)) + return; + + var user = ev.User; + AlternativeVerb verb = new() + { + Act = () => + { + TryUse(user, user, entity, entity.Comp); + }, + Icon = new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/VerbIcons/cutlery.svg.192dpi.png")), + Text = Loc.GetString("food-system-verb-eat"), + Priority = -1 + }; + + ev.Verbs.Add(verb); + } + +} diff --git a/Resources/Changelog/ChangelogHonk.yml b/Resources/Changelog/ChangelogHonk.yml index 934e4c725e..fcd66c2ee2 100644 --- a/Resources/Changelog/ChangelogHonk.yml +++ b/Resources/Changelog/ChangelogHonk.yml @@ -105,3 +105,9 @@ type: Add id: 16 time: '2024-11-21T18:00:13.0000000+00:00' +- author: BIG_Zi_348 + changes: + - message: "Сухарики всегда были на станции, надо просто поискать их в технических туннелях и может быть, вам повезёт." + type: Add + id: 17 + time: '2024-11-24T18:00:13.0000000+00:00' diff --git a/Resources/Locale/ru-RU/_Engi/suhariki.ftl b/Resources/Locale/ru-RU/_Engi/suhariki.ftl new file mode 100644 index 0000000000..c6f4aaaa7a --- /dev/null +++ b/Resources/Locale/ru-RU/_Engi/suhariki.ftl @@ -0,0 +1,7 @@ +ent-FoodSnackSuhariki = сухарики + .desc = Старая реликвия из прошлого, на этикетке едва можно прочитать слово «Кириешки». +ent-FoodPacketSuharikiTrash = упаковка от сухариков +ent-SuharikiTooth = зуб + .desc = Может быть он твой, а может и не твой. + +suhariki-lost = сломал свой зуб! diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml index 9dd4c37ca2..377c29f1ba 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml @@ -186,6 +186,8 @@ prob: 0.10 - id: BarberScissors prob: 0.05 + - id: FoodSnackSuhariki # WD from Engi to Amour + prob: 0.10 # Syndicate loot - id: null prob: 0.95 @@ -594,6 +596,8 @@ prob: 0.10 - id: BarberScissors prob: 0.05 + - id: FoodSnackSuhariki # WD from Engi to Amour + prob: 0.10 # Syndicate loot - id: null prob: 0.95 diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/food_snacks.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/food_snacks.yml index 9f4b3e5983..9aa49c21b0 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/food_snacks.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/food_snacks.yml @@ -45,5 +45,6 @@ - FoodFrozenSnowconeRainbow - FoodSnackPistachios - FoodSnackSemki + - FoodSnackSuhariki # WD from Engi to Amour chance: 0.8 offset: 0.0 diff --git a/Resources/Prototypes/_White/_Engi/Entities/Objects/Consumable/Food/suhariki.yml b/Resources/Prototypes/_White/_Engi/Entities/Objects/Consumable/Food/suhariki.yml new file mode 100644 index 0000000000..1ad6277d38 --- /dev/null +++ b/Resources/Prototypes/_White/_Engi/Entities/Objects/Consumable/Food/suhariki.yml @@ -0,0 +1,78 @@ +# WD Engi Exclusive +- type: entity + parent: BaseItem + id: FoodSnackSuhariki + name: suhariki + description: Old relic of the past, you can barely read the label "Kirieshki". + components: + - type: Food + trash: FoodPacketSuharikiTrash + - type: FlavorProfile + flavors: + - cheap + - bread + - type: Sprite + sprite: White/_Engi/Objects/Consumable/Food/Suhariki/suhariki.rsi + state: suhariki + - type: Tag + tags: + - FoodSnack + - type: BadFood + - type: Suhariki + chance: 0.25 + damage: + types: + Blunt: 10 + - type: Item + size: Tiny + sprite: White/_Engi/Objects/Consumable/Food/Suhariki/suhariki.rsi + heldPrefix: suhariki + - type: SolutionContainerManager + solutions: + food: + maxVol: 5 # No extra room for condiments + reagents: + - ReagentId: Nutriment + Quantity: 1 + - ReagentId: Omnizine + Quantity: 4 + - type: SpaceGarbage + - type: StaticPrice + price: 500 + +- type: entity + noSpawn: true + parent: FoodPacketTrash + id: FoodPacketSuharikiTrash + name: suhariki bag + components: + - type: Sprite + sprite: White/_Engi/Objects/Consumable/Food/Suhariki/suhariki.rsi + state: suhariki-trash + - type: Item + size: Tiny + sprite: White/_Engi/Objects/Consumable/Food/Suhariki/suhariki.rsi + heldPrefix: suhariki + +- type: entity + noSpawn: true + name: Зуб + parent: BaseItem + id: SuharikiTooth + description: Может быть он твой, а может и не твой. + components: + - type: Sprite + sprite: White/_Engi/Objects/Consumable/Food/Suhariki/tooth.rsi + state: icon + - type: Item + size: Tiny + - type: EmitSoundOnLand + sound: + path: /Audio/White/_Engi/Object/Misc/Suhariki/tooth_drop_1.ogg + - type: EmitSoundOnCollide + sound: + path: /Audio/White/_Engi/Object/Misc/Suhariki/tooth_drop_2.ogg + - type: SpaceGarbage + - type: StaticPrice + price: 100 + diff --git a/Resources/Textures/White/_Engi/Consumable/Food/Suhariki/suhariki.rsi/meta.json b/Resources/Textures/White/_Engi/Consumable/Food/Suhariki/suhariki.rsi/meta.json new file mode 100644 index 0000000000..49ba5139da --- /dev/null +++ b/Resources/Textures/White/_Engi/Consumable/Food/Suhariki/suhariki.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "deadisko and BIG_Zi_348", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "suhariki" + }, + { + "name": "suhariki-trash" + }, + { + "name": "suhariki-inhand-right", + "directions": 4 + }, + { + "name": "suhariki-inhand-left", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/White/_Engi/Consumable/Food/Suhariki/suhariki.rsi/suhariki-inhand-left.png b/Resources/Textures/White/_Engi/Consumable/Food/Suhariki/suhariki.rsi/suhariki-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..5a37a5debe5b6b0067d6abefcca90ab21cbef092 GIT binary patch literal 1671 zcmbVNTWB0r7@l=aViKwbjntCBFiRjc&UJUQJEvW9*^Su+H(54I8?SM8=Iri}ojH@4 z+3qGn8hubiip=@s9!%mMUko!qW1dZT-*r5 zoEn`m;n>VbN}idNMTP2njNDxUSbzp?i7aV(-2$Z$RhA3z+Sz6)vJ9~&L)3tykQ|RE z$S^V?DKb1Qa~w|w@XFUK1V!;tQs4wH%k{E?pB6a4@xbpVs}F_MnMwvEBac^=;ja*t zvuy*gY_V8mie3hpS(Xvzd5NM2`t!dqsO0;fyY7!#Ql1X1#*R%+USY!X_iV9Ic4A2!qDurWZ`gp!TS6hir0 zq!KlgNx{$XWcOZGS5VQ~dD8_Lk!%>EaMXM>7o-JWiWdRr2V9_s^8${mK;uYJGt-+v zc^>$vh1S>MgAXAetVO5i|kTvuyMb_O2!YGeStQcG8En5+fgP3mFk}kto zBt&7(jH)Vt58_k~2qG#eG)D4qC$HEyx*$`=}g)WYxg5aE;x~`-BSdLS0PD+5NYT;l_S1V!+PE}WVl`LlgkYp#jLzL`<6)IG9TfJisRKyl@5DWc} za93a!%GgE8gacXZtu51u#m2Kv9aea-w^J;i-BhzRIBo>avfhI5N4<$b9d|Ahx2UG( zflmp-)fbBlq)G>`F7P9#6Zbb9YNHzlAAEDZ_t?*gE8j3?%V*8O#^En^CQq(+ez4Rv z|62FiwznSXK5-3re)~Rp>e&Os$6Gg+slhHQ+`1Yh=>8vx6T|`c>RrBj`)}L$yy@im zj&FVObL+ceU*9-=_`-+FFMs*WrO|g6N4sK&CY~<5GP`zeEa}GQ7ncL`N7mJO>O$vV zSFRquFLrcd&%>S#?rhK6;_qwn`Cae*iRLKkk58CI&kH}jZS`!lGaXG!4Y`iFhnA*@ zr{>PMa;_a)ZY*4OA9?PLiG|lMzPP`0X>oM_jkb@xE2}G)+qWO@GumB^{F!(D?)qv9 i{qSA(+U#cJuDjjo_gAjZdiOZLirCOdx@0p>ubym-F4#TY9CUN9AlS4f|qGR>bI&%w=8I zf&k?6d0*b|BX$Oekw^px5|AXGB6z20x~RaL&ekeJ3_Gf=Tdqz_)?-8|GUUn}HMQ)6 zVby3&rxGU`F;GAj5PgE@QwgZ4HJmkM=St$53UCe^*mNC=6>C^4OI+e)$-hw7UM~}% zu~n3s#;Ud$Moq$TyN0P7m4K{@c9KO4gFft#AzQ^=!_>^Jo;Mckv@vptog^ez%~Yal zGAjjrBKznL-PB0ldF+M*IEGv-b2MuKUI_D2ASp(m5QIW&i{OWXP=+c*)6>P(prQx^ z{$)^FGa7QyEy0=!)5JCqbyzo01_R5?aBMA%u#@D7O@*m-{*o1n0^_FRB2&fjn9Nb1 zeY&neEtCq0=~j^s<4}-SgMl=Uf~v%;sW8$6Bxn+ns^?=w9r7|;J+J-G^H1A4Z7r0$ zZ62@Typn)DxD5&TfglHlxg!>OiBME-DQ|V z(rzBvxFbWOb<1)B)Og_aVc8F`(#6ud8+x`1r-Q&-)%y5peC*o%UcR{f_@!qbm;winExvGQBr(x^{qQG0 zOkCeI`7_<(bl|(T;`m=pKdqF$ z$(Cgshwm0n3-2G7>*d$#PU=(919Q#qejwM+KC^e@!lB89{#_|>ww--yvH2$6-`90) WmYw2}@6UN(iFj9U?42iezw!^O@GYJI literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/_Engi/Consumable/Food/Suhariki/suhariki.rsi/suhariki-trash.png b/Resources/Textures/White/_Engi/Consumable/Food/Suhariki/suhariki.rsi/suhariki-trash.png new file mode 100644 index 0000000000000000000000000000000000000000..f528d725b2298d1428415e9ebe40441d07fd15f3 GIT binary patch literal 2376 zcmb_d4Q$j@9PdD2Y%mT%nND2kj2n?&Kd$%D!nuvR$ws)bjT1IL!g}qy+p)X0wB2?i zkX@YeErbyQQxFj(8J{5&5hocaOyVZNAp(lQ7#$jr2}oifGT+^97sc@rVw1M-wZH%G z|Mh$Cttcv-GCb+oBm_Z*7vwuj;2VwHi38!&xnpG;f+Se|4o6Y0D0=`}GG#KFMX{`H zJc4Ac+pxBE>Sslxm$jzlo!B-r@y8#O%;KWJ*<-5<=Bz|ZcRL#P7C1I|o|N|0-8QU| z#?HOCWI*PWW4YIdE*^NIsowGWutBRX{juc|``oF7?VfX6mKHC)S-QLW%({J-+b@jq zZW<6S-1L6+?kdEPx$t=ErS8P=IakXyrtMB0oxXGGz>M;iG%#*?(&^UDroq$`9q(>k zU>Ff@D*V=Ln4Z(L@lIM%lG=kz{o>YQ!~F0C&7QuRJvvOCpD=Cgyvp$GhLo?%y4~%& zKw0Ot7js`&JEU>VDbwNfWhNlEH|{xSodn`#PwG^pDWL#bn}bcVvAKdl#qNV@59+|+<1CYN*!{vZTep~XJns* zl`Jlr=FWrfo}Qj;L#in$)v7laZ*SK+yLR2U&NQZ1HCt|Um0$R%^2@CyU7Ly4Fx#$- zY8J;`&~x@r#2V8^crA=8J-w@|tD~c%xw*Nqu@O@3*x_o2q-lCd;S4yv&xK?%$z})} zs^phx2$DQ1awi~fZB9jy!OQ*bQoYnQjT7Xck&pD)7z!#7jUbbKE(Mcf=5(I(HqoH6x(zuWvi}G@C z9QjOOXcVGX+Ob|ymAZ;hhpYmWHBz`hk`!u%BgR78Sat$RleCE-Ed*`GX_6x;&TK|w z7Y5y_qL(Xiz7lf=XLhVY*Am2SsisJ%G^l{l@W#p(nrMud2Upp0ZBrzlVq;y9&B4Md%b0s#Ub z2qayDSSpT%WpcUV@P287!8lse^QvJ)vE2GaYwlVF5G6p9t5gBxRYQ*%eSs+zvMy^C z@_q7%|Bh#)a1Islx~#foIndXsqCOUsHXA84YnERUvZ&qo{v@Wzp}geJE5EIIpY*c~~WXkoN&X zk$h2aE*DoIX*w?npulOzV5mmFU*t?QZ>FrIfQuAm#s$EzxQ7H*++qVX&5#UhweWrR zPFbjmbg<7}g!VQY9kDmzHZx#w*24gtWxOPA;Q_D!%4Vay-ah;3svj;PKJfTF@eXkg zIUuVpS&URUqTi^FxO~3`n^hZI5i`KT*eKvfqtfAcA);bpDBu0_FV*LhSM8j4dUE~oS%_ml zGdFd8KyBOeQ@O8x+<~`^$vML^PJcgW;)=`RK`8m%?W+eS7u)XKt-G}`JfxzM7<|sK R#TPjw3-St``zDva_BXgbJx2fl literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/_Engi/Consumable/Food/Suhariki/suhariki.rsi/suhariki.png b/Resources/Textures/White/_Engi/Consumable/Food/Suhariki/suhariki.rsi/suhariki.png new file mode 100644 index 0000000000000000000000000000000000000000..5e4623626114f0b52a90b8502bcc2baebc0c372d GIT binary patch literal 2382 zcmbVN4Nwzj8s3OiL_lnvY6WBsOwsCQHzB`!rWlh5K?4C&MWN^>`vvw$cH`~>fzu&9 zTdmgGqGR!=*4mC%iuH=Ut4FyOlp-$r0;b1 zbl1*t{>+^R%IZpynB+Ad&*%+=`#Y_T{mPR=Rf>dz8DWX58)L!j=OfyiI%+4#$Det9 z-|u6l_-iwJR54i#YiovLZ4vxEB;%9s*T$^!cMJN2ExP7NewAct{L>}=mD{2}TM@9I zejBXl=zrXh^wPv#ThFF6By8N2@yPje+0#!2!dA-@+?x1?Wq&#R;rCT{^;0`<0d`+n z_`>=6=_?Gr{j#d3X8dmZcaApiW6=Ss(oQ#OyvHPykD1?J`P|J%7erSf%_p;dxRslF z3RZHGH+_YGAd?>no)TpDt1}Sfp+?4@C+1m~l1|Peqk{F7`8-~TMvw)mJ}>1g0V3)E zMGUK#1{#~BC`0R|%T-pw>NSF5CcTmexs{oAXJv^~M@v(mL>Kr-NZ+P z=`b$|*TL7g6di_$C3@+Ipm|msYUFr;>SS`vNf2^W16NA5LaWowM-_x31t-+FLWL;^ zl8}=s6*_uIp*x;-kvXQtqt4)yURo@QUJ}R4%gbfuDKd^P!eO`Qa6*AA6c|KcLIo>Q zK8zI-#~4gNaPo{-WH=TLGExq%RMbmhs3SReydhdv7_Aem81AFIxLigAa~cNH&JfO9 z%Dac1(@q??fd{an0I~8A7M96s4Z-hA>+yupf@m&-5sl_{U$kJa@B%ys2wW-e1m-g6 zF>x#~Z!srwLNWIqqGV& z=Ag71heD~=DOL2Cy@_*{1{EB$r-Sxdg-Wg=QZTIwC^4Nw2{4_~MPO+b|A=1dXIo`_Au*xaH{vGZkGMy2iSQVpRL@rn}x^gq;a+wDpBtn z`cIqhw}d`gR%bEA76CXbacM9aJUCQFM8SWo*YMu|44^SMoNB>kXr97{&_o6-q~_tg z?XrB+34f0R7L&oA_uTbYveKtz$F-&AFR6LFIC0Iffy+!wuIcDw^BS^iqKx0VChm{U zIAo>&g+0!n4;r*Uj^rmjj)`z?LFE)oCTz~D_wq5US zZ>afC;TJ>y7`idE?wb#H^#&RuTVCHy+Rk5#_J>_Y5O!W>)W&tLdRz1}ck0*8KVta% zgn#F?7u<`q&AMZ6ZmJ9P{rQ6^I=SKSvJ>yN6;0b-GDv3i$D14YlLa;BD#!#ka=GrE z+4YC|2M1Pv72AHhw6GQ5wrT*qn%0rE@)GDbzc$pFWb2X4JGyqf`Rk87<6hoeb$o9+ zfrF!?tE8T74mP^FGR8PX^3CO|J>Rk1trYY4cdj>B$TIx5qbUo2(J+{a9#htw` z&W&#kv_8#sWw5cRI?lQH%9(+H^jEDPdR@*7gc=_p_+eeP1WqFGOLQH}4&IdsTWI gGO<~5h-}6$bo}k=)aUaL1%KBTbEfIYqSb%=FQu|&9RL6T literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/_Engi/Consumable/Food/Suhariki/tooth.rsi/icon.png b/Resources/Textures/White/_Engi/Consumable/Food/Suhariki/tooth.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..43d576fdae95c3246bf996511623716337e6b994 GIT binary patch literal 1413 zcmbVMO>5LZ7*0`JEw-RH^)jRvrOoGVwws}8t(&d8U}|X>S}90pliA(SO(rI@-H(eR zcu?@*L9ihHgdV(j5b@$~@ZxW%1u1y(;3T^nTB#Nrn9SER&-?v8Us=98F@AlV`WmCZ32KQpIA&3mBT? z<`y~uvbQk>Ra|#{gFpEAnFp?8@avi-TR{Og+)^*ZYrW-)-P^WxhhLZna~;SCJWLVj zcuhZo9fMDJAzR1C5)Tpx-8T5eSRmN2RzQJ-80exR*s`pES+>gN)V!|G0995qlAM!N zO;BYhD^SzG;NzLN(5b;yb7>%q?F_y_X#gdu-ENERj7Y+|r0BXX$*QEP0z(K<*Qcl> z_|epm!Nidrx&d{G4`N1CB`s?3Ox3;(UXarI(ZEm4V^RkNk|N5nO$pGkQ(Vvrn~8A8 zmT(h$*ryT0Dk(N-5K5v3`3rS=eM|uJt!1S$PSnNoQV|g??l3b34mlAWRk{I|R&hjH zp^b|>OwFm-ngA9;j3@~!gfxedS{bSgR83UC&2`szNISZ9(`_