diff --git a/Content.Omu.Server/Enraged/EnragedBypassPrediction.cs b/Content.Omu.Server/Enraged/EnragedBypassPrediction.cs new file mode 100644 index 00000000000..31704111de3 --- /dev/null +++ b/Content.Omu.Server/Enraged/EnragedBypassPrediction.cs @@ -0,0 +1,126 @@ +// SPDX-FileCopyrightText: 2026 Eponymic-sys +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +using System.Numerics; +using Content.Omu.Shared.Enraged; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Map; +using Content.Shared.Mind.Components; +using Content.Shared.StatusEffectNew; +using Content.Shared.StatusEffectNew.Components; +using Content.Shared.Weapons.Melee; +using Content.Shared.Weapons.Melee.Components; +using Content.Shared.Weapons.Melee.Events; +using Robust.Shared.Player; + +namespace Content.Omu.Server.Enraged; + +/// +/// Handles melee attack sounds and lunge animation for enraged entities. +/// Resends animations to the attacking player to bypass client-side prediction. +/// Without this the client will not show the lunge animation as the server is making the attacks. +/// +public sealed class EnragedBypassPrediction : EntitySystem +{ + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + + private const float LungeBuffer = 0.2f; + private const float MinLungeLength = 0.1f; + private const float DamagePitchVariation = 0.05f; + + public void OnMeleeHit(Entity weapon, ref MeleeHitEvent args) + { + if (!args.IsHit || !IsEnraged(args.User)) + return; + + if (!TryComp(args.User, out var actor) || + !TryComp(args.User, out TransformComponent? userXform)) + return; + + var lungeOffset = ComputeLungeOffset(weapon.Comp, args.Coords, userXform); + var (animation, spriteRotation) = GetMeleeAnimation(weapon.Comp, args); + + var filter = Filter.SinglePlayer(actor.PlayerSession); + RaiseNetworkEvent( + new MeleeLungeEvent( + GetNetEntity(args.User), + GetNetEntity(weapon.Owner), + weapon.Comp.Angle, + lungeOffset, + animation, + spriteRotation, + weapon.Comp.FlipAnimation), + filter); + + SendWeaponAudio(filter, weapon, args); + } + + private bool IsEnraged(EntityUid user) + { + if (!TryComp(user, out var statusEffects)) + return false; + + var effects = statusEffects.ActiveStatusEffects?.ContainedEntities; + if (effects == null) + return false; + + foreach (var effect in effects) + { + if (HasComp(effect)) + return true; + } + + return false; + } + + private Vector2 ComputeLungeOffset( + MeleeWeaponComponent weapon, + EntityCoordinates hitCoords, + TransformComponent userXform) + { + var mapCoords = _transform.ToMapCoordinates(hitCoords); + var localPos = Vector2.Transform(mapCoords.Position, _transform.GetInvWorldMatrix(userXform)); + + var visualLength = MathF.Max(weapon.Range - LungeBuffer, weapon.Range); + if (localPos.LengthSquared() <= 0f) + localPos = new Vector2(MathF.Max(visualLength, MinLungeLength), 0f); + + localPos = userXform.LocalRotation.RotateVec(localPos); + if (localPos.Length() > visualLength) + localPos = localPos.Normalized() * visualLength; + + return localPos; + } + + private static (string? Animation, Angle Rotation) GetMeleeAnimation( + MeleeWeaponComponent weapon, + MeleeHitEvent args) + { + if (args.Direction != null) + return (weapon.WideAnimation, weapon.WideAnimationRotation); + + var animation = args.HitEntities.Count == 0 + ? weapon.MissAnimation + : weapon.Animation; + + return (animation, weapon.AnimationRotation); + } + + private void SendWeaponAudio( + Filter filter, + Entity weapon, + MeleeHitEvent args) + { + _audio.PlayEntity(weapon.Comp.SwingSound, filter, weapon.Owner, false); + + if (args.HitEntities.Count == 0) + return; + + var hitSound = args.HitSoundOverride ?? weapon.Comp.HitSound ?? (SoundSpecifier)weapon.Comp.NoDamageSound; + _audio.PlayStatic(hitSound, filter, args.Coords, false, + AudioParams.Default.WithVariation(DamagePitchVariation)); + } +} diff --git a/Content.Omu.Server/Enraged/EnragedStatusEffectSystem.cs b/Content.Omu.Server/Enraged/EnragedStatusEffectSystem.cs new file mode 100644 index 00000000000..bbcb6de9ed9 --- /dev/null +++ b/Content.Omu.Server/Enraged/EnragedStatusEffectSystem.cs @@ -0,0 +1,173 @@ +// SPDX-FileCopyrightText: 2026 Eponymic-sys +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +using Content.Omu.Shared.Enraged; +using Content.Server.NPC; +using Content.Server.NPC.HTN; +using Content.Server.NPC.Systems; +using Content.Shared.Administration.Logs; +using Content.Shared.Database; +using Content.Shared.NPC.Components; +using Content.Shared.NPC.Systems; +using Content.Shared.SSDIndicator; +using Content.Shared.StatusEffectNew; +using Content.Shared.Weapons.Melee; +using Content.Shared.Weapons.Melee.Components; +using Content.Shared.Weapons.Melee.Events; + +namespace Content.Omu.Server.Enraged; + +/// +/// Swaps NPC factions and HTN tasks, allows HTN to drive players and restores previous state on expiry. +/// +public sealed partial class EnragedStatusEffectSystem : EntitySystem +{ + [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; + [Dependency] private readonly HTNSystem _htn = default!; + [Dependency] private readonly NPCSystem _npc = default!; + [Dependency] private readonly NpcFactionSystem _npcFaction = default!; + [Dependency] private readonly EnragedBypassPrediction _bypass = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnStatusApplied); + SubscribeLocalEvent(OnStatusRemoved); + SubscribeLocalEvent(OnMeleeHit); + } + + private void OnMeleeHit(Entity weapon, ref MeleeHitEvent args) + { + _bypass.OnMeleeHit(weapon, ref args); + } + + // ────────────────────────────────────────────── + // Status-effect lifecycle + // ────────────────────────────────────────────── + + private void OnStatusApplied(Entity ent, ref StatusEffectAppliedEvent args) + { + var target = args.Target; + + _adminLogger.Add(LogType.Action, LogImpact.High, + $"{ToPrettyString(target):target} became enraged."); + + RemoveSsdIndicator(ent, target); + ApplyHostileFaction(ent, target); + ApplyHostileHtn(ent, target); + } + + private void OnStatusRemoved(Entity ent, ref StatusEffectRemovedEvent args) + { + var target = args.Target; + + RestoreSsdIndicator(ent, target); + RestoreFaction(ent, target); + RestoreHtn(ent, target); + } + + // ────────────────────────────────────────────── + // SSD indicator helpers + // ────────────────────────────────────────────── + + private void RemoveSsdIndicator(Entity ent, EntityUid target) + { + if (!TryComp(target, out _)) + return; + + RemComp(target); + ent.Comp.RemovedSsdIndicator = true; + } + + private void RestoreSsdIndicator(Entity ent, EntityUid target) + { + if (!ent.Comp.RemovedSsdIndicator || HasComp(target)) + return; + + var ssd = EnsureComp(target); + ssd.IsSSD = false; + Dirty(target, ssd); + } + + // ────────────────────────────────────────────── + // NPC faction helpers + // ────────────────────────────────────────────── + + private void ApplyHostileFaction(Entity ent, EntityUid target) + { + if (!TryComp(target, out var npcFaction)) + { + npcFaction = EnsureComp(target); + ent.Comp.AddedFactionComponent = true; + } + + foreach (var f in npcFaction.Factions) + ent.Comp.OldFactions.Add(f.ToString()); + + _npcFaction.ClearFactions((target, npcFaction), false); + _npcFaction.AddFaction((target, npcFaction), ent.Comp.HostileFaction); + } + + private void RestoreFaction(Entity ent, EntityUid target) + { + if (!TryComp(target, out var npcFaction)) + return; + + _npcFaction.ClearFactions((target, npcFaction), false); + + if (ent.Comp.AddedFactionComponent) + { + RemComp(target); + return; + } + + foreach (var faction in ent.Comp.OldFactions) + { + _npcFaction.AddFaction((target, npcFaction), faction); + } + } + + // ────────────────────────────────────────────── + // HTN AI helpers + // ────────────────────────────────────────────── + + private void ApplyHostileHtn(Entity ent, EntityUid target) + { + if (!TryComp(target, out var htn)) + { + htn = EnsureComp(target); + ent.Comp.AddedHtnComponent = true; + } + else + { + ent.Comp.OldRootTask = htn.RootTask.Task; + } + + htn.RootTask = new HTNCompoundTask { Task = ent.Comp.HostileRootTask }; + htn.Blackboard.SetValue(NPCBlackboard.Owner, target); + + _npc.WakeNPC(target, htn); + _htn.Replan(htn); + } + + private void RestoreHtn(Entity ent, EntityUid target) + { + if (!TryComp(target, out var htn)) + return; + + if (ent.Comp.AddedHtnComponent) + { + RemComp(target); + return; + } + + if (!string.IsNullOrEmpty(ent.Comp.OldRootTask)) + { + htn.RootTask = new HTNCompoundTask { Task = ent.Comp.OldRootTask }; + _htn.Replan(htn); + } + } +} + diff --git a/Content.Omu.Server/Organs/OrganReagentInjectorSystem.cs b/Content.Omu.Server/Organs/OrganReagentInjectorSystem.cs new file mode 100644 index 00000000000..f7d17313218 --- /dev/null +++ b/Content.Omu.Server/Organs/OrganReagentInjectorSystem.cs @@ -0,0 +1,37 @@ +// SPDX-FileCopyrightText: 2026 Eponymic-sys +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +using Content.Omu.Shared.Organs; +using Content.Shared.Body.Organ; +using Content.Shared.Chemistry.EntitySystems; +using Robust.Shared.Timing; + +namespace Content.Omu.Server.Organs; + +/// +/// Injects reagents from organs into their host body's solutions at regular intervals. +/// +public sealed class OrganReagentInjectorSystem : EntitySystem +{ + [Dependency] private readonly SharedSolutionContainerSystem _solution = default!; + [Dependency] private readonly IGameTiming _timing = default!; + + public override void Update(float frameTime) + { + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var injector, out var organ)) + { + if (_timing.CurTime < injector.NextInjectTime) + continue; + + injector.NextInjectTime = _timing.CurTime + injector.Duration; + + if (organ.Body is not { } body) + continue; + + if (_solution.TryGetSolution(body, injector.TargetSolution, out var soln, out _)) + _solution.TryAddSolution(soln.Value, injector.Reagents.Clone()); + } + } +} diff --git a/Content.Omu.Shared/Enraged/EnragedStatusEffectComponent.cs b/Content.Omu.Shared/Enraged/EnragedStatusEffectComponent.cs new file mode 100644 index 00000000000..6424c443f32 --- /dev/null +++ b/Content.Omu.Shared/Enraged/EnragedStatusEffectComponent.cs @@ -0,0 +1,24 @@ +// SPDX-FileCopyrightText: 2026 Eponymic-sys +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +namespace Content.Omu.Shared.Enraged; + +/// +/// Tracks the enraged status effect state and configuration. +/// Stores hostility settings and restoration data for when the effect expires. +/// +[RegisterComponent] +public sealed partial class EnragedStatusEffectComponent : Component +{ + [DataField] + public string HostileFaction = "Hostile"; + + [DataField] + public string HostileRootTask = "SimpleHostileCompound"; + public bool RemovedSsdIndicator; + public bool AddedFactionComponent; + public bool AddedHtnComponent; + public HashSet OldFactions = new(); + public string? OldRootTask; +} diff --git a/Content.Omu.Shared/Organs/OrganReagentInjectorComponent.cs b/Content.Omu.Shared/Organs/OrganReagentInjectorComponent.cs new file mode 100644 index 00000000000..610278e640c --- /dev/null +++ b/Content.Omu.Shared/Organs/OrganReagentInjectorComponent.cs @@ -0,0 +1,26 @@ +// SPDX-FileCopyrightText: 2026 Eponymic-sys +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +using Content.Shared.Chemistry.Components; + +namespace Content.Omu.Shared.Organs; + +/// +/// Injects reagents into host body's solution at regular intervals. +/// +[RegisterComponent] +public sealed partial class OrganReagentInjectorComponent : Component +{ + [DataField] + public string TargetSolution = "chemicals"; + + [DataField(required: true)] + public Solution Reagents = default!; + + [DataField] + public TimeSpan Duration = TimeSpan.FromSeconds(1); + + [ViewVariables] + public TimeSpan NextInjectTime; +} diff --git a/Resources/Locale/en-US/_Omu/reagents.ftl b/Resources/Locale/en-US/_Omu/reagents.ftl new file mode 100644 index 00000000000..27bc2d9516a --- /dev/null +++ b/Resources/Locale/en-US/_Omu/reagents.ftl @@ -0,0 +1,23 @@ +## SPDX-FileCopyrightText: 2026 Eponymic-sys +## +## SPDX-License-Identifier: AGPL-3.0-or-later + +# Cocaine Reagent +reagent-name-cocaine = cocaine +reagent-name-raw-cocaine = raw cocaine +reagent-desc-cocaine = A dangerous stimulant that causes aggressive behavior patterns. +reagent-desc-raw-cocaine = An unrefined alkaloid extract from coco leaves. Must be processed to produce cocaine. +cocaine-effect = You feel your mind slipping away... +raw-cocaine-effect = Your mouth goes numb and your heart quickens. +cocaine-overdose-heartpounding = Your heart is pounding out of your chest! +cocaine-overdose-chestpain = You feel a sharp pain in your chest! +cocaine-overdose-cantbreathe = You can barely breathe! +raw-cocaine-nausea = Your stomach churns and you feel nauseous... + +# Coco Plant Localization +seeds-coco-name = coco +seeds-coco-display-name = coco plant + +# Coco Food Sequence +food-sequence-burger-content-coco = coco +food-sequence-content-coco = coco diff --git a/Resources/Locale/en-US/_Omu/stack/stacks.ftl b/Resources/Locale/en-US/_Omu/stack/stacks.ftl index 03c53531ef2..93f0c167e2b 100644 --- a/Resources/Locale/en-US/_Omu/stack/stacks.ftl +++ b/Resources/Locale/en-US/_Omu/stack/stacks.ftl @@ -1 +1,3 @@ -stack-revcoin = RevCoin \ No newline at end of file +stack-revcoin = RevCoin +stack-dried-coco-leaves = dried coco leaves +stack-cocaine-powder = cocaine powder diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/service.yml b/Resources/Prototypes/Catalog/Fills/Lockers/service.yml index 258c4b04f6e..73cf1a58c71 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/service.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/service.yml @@ -73,6 +73,10 @@ - id: DrinkBottleBeer amount: !type:BinomialNumberSelector trials: 3 + - id: CocainePowder #OMU Start + prob: 0.01 + amount: !type:RangeNumberSelector + range: 30, 30 #OMU End - !type:AllSelector rolls: 2 children: diff --git a/Resources/Prototypes/Entities/Clothing/Back/smuggler_tables.yml b/Resources/Prototypes/Entities/Clothing/Back/smuggler_tables.yml index 13088ecd590..73e94a38c30 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/smuggler_tables.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/smuggler_tables.yml @@ -41,6 +41,8 @@ tableId: RandomSatchelClothingTable #1x small - !type:NestedSelector tableId: RandomSatchelCannabisTable #5x tiny + - !type:NestedSelector #OMU + tableId: RandomSatchelCocaineTable #5x tiny #OMU - !type:NestedSelector tableId: RandomSatchelGizmosTable #2x small - !type:NestedSelector @@ -82,7 +84,23 @@ - id: GroundCannabis amount: !type:RangeNumberSelector range: 1, 15 - + #OMU Start +- type: entityTable #5x tiny + id: RandomSatchelCocaineTable + table: !type:GroupSelector + children: + - id: SpaceCash100 + weight: 4 + - id: CocainePowder + amount: !type:RangeNumberSelector + range: 1, 3 + - id: LeavesCoco + amount: !type:RangeNumberSelector + range: 1, 4 + - id: CocoSeeds + amount: !type:RangeNumberSelector + range: 1, 2 + #OMU End - type: entityTable #2x small id: RandomSatchelGizmosTable table: !type:GroupSelector diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml index d147f3b16aa..8a4564c645c 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml @@ -323,6 +323,13 @@ - id: FoodSnackLollypopWrappedMysteryEvil # Goobstation - Lollypops! - id: MysteryLighterBox - id: GoldenPersonalAI + - id: CocainePowder #OMU Start + amount: !type:RangeNumberSelector + range: 1, 2 + - id: LeavesCoco + amount: !type:RangeNumberSelector + range: 1, 2 + - id: CocoSeeds #OMU End - type: entity name: Maint Loot Spawner diff --git a/Resources/Prototypes/_Omu/Body/Organs/misc.yml b/Resources/Prototypes/_Omu/Body/Organs/misc.yml new file mode 100644 index 00000000000..e56a50d4bd2 --- /dev/null +++ b/Resources/Prototypes/_Omu/Body/Organs/misc.yml @@ -0,0 +1,27 @@ +## SPDX-FileCopyrightText: 2026 Eponymic-sys +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +- type: entity + parent: [OrganAnimalHeart, BaseMajorContraband] + id: CocaineSpaceBearHeart + name: Cocaine Space Bear Heart + description: A heart from a cocaine space bear. It is still beating. + components: + - type: Sprite + sprite: _Omu/Mobs/Species/CocaineBear/organs.rsi + scale: 0.5, 0.5 + layers: + - state: heart-on + - state: energy + shader: unshaded + - type: Organ + - type: OrganReagentInjector + targetSolution: chemicals + duration: 5 + reagents: + reagents: + - ReagentId: Cocaine + Quantity: 1 + - ReagentId: Omnizine + Quantity: 2.5 diff --git a/Resources/Prototypes/_Omu/Body/Prototypes/Animal/cocainebear.yml b/Resources/Prototypes/_Omu/Body/Prototypes/Animal/cocainebear.yml new file mode 100644 index 00000000000..2c08681fb23 --- /dev/null +++ b/Resources/Prototypes/_Omu/Body/Prototypes/Animal/cocainebear.yml @@ -0,0 +1,37 @@ +# SPDX-FileCopyrightText: 2022 DrSmugleaf +# SPDX-FileCopyrightText: 2022 Jezithyr +# SPDX-FileCopyrightText: 2023 Kara +# SPDX-FileCopyrightText: 2023 brainfood1183 <113240905+brainfood1183@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 gluesniffler <159397573+gluesniffler@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 ExponentialWizard <38435756+ExponentialWizard@users.noreply.github.com> +## SPDX-FileCopyrightText: 2026 Eponymic-sys +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +- type: body + id: CocaineSpaceBear + name: "cocaine space bear" + root: chest + slots: + chest: + part: ChestAnimal + connections: + - groin + organs: + lungs: OrganAnimalLungs + heart: CocaineSpaceBearHeart + groin: + part: GroinAnimal + connections: + - legs + organs: + stomach: OrganAnimalStomach + liver: OrganAnimalLiver + kidneys: OrganAnimalKidneys + legs: + part: LegsAnimal + connections: + - feet + feet: + part: FeetAnimal diff --git a/Resources/Prototypes/_Omu/Entities/Mobs/NPCs/cocainebear.yml b/Resources/Prototypes/_Omu/Entities/Mobs/NPCs/cocainebear.yml new file mode 100644 index 00000000000..bd2fa9552e4 --- /dev/null +++ b/Resources/Prototypes/_Omu/Entities/Mobs/NPCs/cocainebear.yml @@ -0,0 +1,171 @@ +# SPDX-FileCopyrightText: 2022 CommieFlowers +# SPDX-FileCopyrightText: 2022 CrudeWax <75271456+CrudeWax@users.noreply.github.com> +# SPDX-FileCopyrightText: 2022 Jacob Tong <10494922+ShadowCommander@users.noreply.github.com> +# SPDX-FileCopyrightText: 2022 Rane <60792108+Elijahrane@users.noreply.github.com> +# SPDX-FileCopyrightText: 2022 metalgearsloth +# SPDX-FileCopyrightText: 2022 mirrorcult +# SPDX-FileCopyrightText: 2022 rolfero <45628623+rolfero@users.noreply.github.com> +# SPDX-FileCopyrightText: 2023 Alekshhh <44923899+Alekshhh@users.noreply.github.com> +# SPDX-FileCopyrightText: 2023 DrSmugleaf +# SPDX-FileCopyrightText: 2023 DrSmugleaf +# SPDX-FileCopyrightText: 2023 I.K <45953835+notquitehadouken@users.noreply.github.com> +# SPDX-FileCopyrightText: 2023 Jackrost +# SPDX-FileCopyrightText: 2023 Jezithyr +# SPDX-FileCopyrightText: 2023 JimGamemaster <140008923+JimGamemaster@users.noreply.github.com> +# SPDX-FileCopyrightText: 2023 Nairod <110078045+Nairodian@users.noreply.github.com> +# SPDX-FileCopyrightText: 2023 Nim <128169402+Nimfar11@users.noreply.github.com> +# SPDX-FileCopyrightText: 2023 brainfood1183 <113240905+brainfood1183@users.noreply.github.com> +# SPDX-FileCopyrightText: 2023 crazybrain23 <44417085+crazybrain23@users.noreply.github.com> +# SPDX-FileCopyrightText: 2023 faint <46868845+ficcialfaint@users.noreply.github.com> +# SPDX-FileCopyrightText: 2023 liltenhead <104418166+liltenhead@users.noreply.github.com> +# SPDX-FileCopyrightText: 2023 lzk228 <124214523+lzk228@users.noreply.github.com> +# SPDX-FileCopyrightText: 2023 notquitehadouken <1isthisameme> +# SPDX-FileCopyrightText: 2024 AJCM +# SPDX-FileCopyrightText: 2024 Alex Evgrashin +# SPDX-FileCopyrightText: 2024 Alex Pavlenko +# SPDX-FileCopyrightText: 2024 Alice "Arimah" Heurlin <30327355+arimah@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 ArkiveDev <95712736+ArkiveDev@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Boaz1111 <149967078+Boaz1111@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Brandon Hu <103440971+Brandon-Huu@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Centronias +# SPDX-FileCopyrightText: 2024 Chief-Engineer <119664036+Chief-Engineer@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Cojoke <83733158+Cojoke-dot@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Doomsdrayk +# SPDX-FileCopyrightText: 2024 DrEnzyme +# SPDX-FileCopyrightText: 2024 DrSmugleaf <10968691+DrSmugleaf@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Ed <96445749+TheShuEd@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Elysium206 <151651971+Elysium206@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Emisse <99158783+Emisse@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Eoin Mcloughlin +# SPDX-FileCopyrightText: 2024 Flareguy <78941145+Flareguy@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Floofi <126319569+Shadowtheprotogen546@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Ghagliiarghii <68826635+Ghagliiarghii@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 HS <81934438+HolySSSS@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 K-Dynamic <20566341+K-Dynamic@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Kara +# SPDX-FileCopyrightText: 2024 Kevin Zheng +# SPDX-FileCopyrightText: 2024 Ko4ergaPunk <62609550+Ko4ergaPunk@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 MetalSage <74924875+MetalSage@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 MetalSage +# SPDX-FileCopyrightText: 2024 MilenVolf <63782763+MilenVolf@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Morb <14136326+Morb0@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Mr. 27 <45323883+Dutch-VanDerLinde@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 MureixloI <132683811+MureixloI@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Nemanja <98561806+EmoGarbage404@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 PJBot +# SPDX-FileCopyrightText: 2024 Partmedia +# SPDX-FileCopyrightText: 2024 Pieter-Jan Briers +# SPDX-FileCopyrightText: 2024 Plykiya <58439124+Plykiya@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Redfire1331 <125223432+Redfire1331@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Rouge2t7 <81053047+Sarahon@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Tayrtahn +# SPDX-FileCopyrightText: 2024 Truoizys <153248924+Truoizys@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 TsjipTsjip <19798667+TsjipTsjip@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Ubaser <134914314+UbaserB@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 Vasilis +# SPDX-FileCopyrightText: 2024 WarMechanic <69510347+WarMechanic@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 beck-thompson <107373427+beck-thompson@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 deathride58 +# SPDX-FileCopyrightText: 2024 eoineoineoin +# SPDX-FileCopyrightText: 2024 github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 lzk <124214523+lzk228@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 marbow <152051971+marboww@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 metalgearsloth +# SPDX-FileCopyrightText: 2024 mhamster <81412348+mhamsterr@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 neutrino <67447925+neutrino-laser@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 nikthechampiongr <32041239+nikthechampiongr@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 osjarw <62134478+osjarw@users.noreply.github.com> +# SPDX-FileCopyrightText: 2024 plykiya +# SPDX-FileCopyrightText: 2024 redfire1331 +# SPDX-FileCopyrightText: 2024 Арт <123451459+JustArt1m@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 Aiden +# SPDX-FileCopyrightText: 2025 Aidenkrz +# SPDX-FileCopyrightText: 2025 Aineias1 +# SPDX-FileCopyrightText: 2025 Errant <35878406+Errant-4@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 ExponentialWizard <38435756+ExponentialWizard@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 FaDeOkno <143940725+FaDeOkno@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 Fishbait +# SPDX-FileCopyrightText: 2025 GoobBot +# SPDX-FileCopyrightText: 2025 McBosserson <148172569+McBosserson@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 Milon +# SPDX-FileCopyrightText: 2025 Piras314 +# SPDX-FileCopyrightText: 2025 Rinary <72972221+Rinary1@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 Rouden <149893554+Roudenn@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 TheBorzoiMustConsume <197824988+TheBorzoiMustConsume@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 Unlumination <144041835+Unlumy@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 Zokkie <6126135+Zokkie@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 deltanedas <39013340+deltanedas@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 deltanedas <@deltanedas:kde.org> +# SPDX-FileCopyrightText: 2025 fishbait +# SPDX-FileCopyrightText: 2025 gluesniffler <159397573+gluesniffler@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 gluesniffler +# SPDX-FileCopyrightText: 2025 gus +# SPDX-FileCopyrightText: 2025 slarticodefast <161409025+slarticodefast@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 ss14-Starlight +# SPDX-FileCopyrightText: 2025 username <113782077+whateverusername0@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 whateverusername0 +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +- type: entity + name: cocaine space bear + id: CocaineMobBearSpace + parent: MobSpaceBasic + description: It looks friendly. Why don't you give it a hug? + components: + - type: Body # Shitmed Change + prototype: CocaineSpaceBear + - type: SurgeryTarget # Shitmed + - type: UserInterface # Shitmed + interfaces: + enum.SurgeryUIKey.Key: + type: SurgeryBui + - type: Sprite + drawdepth: Mobs + sprite: _Omu/Mobs/Animals/cocainebear.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: cocaine-bear + - map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ] + state: glow + shader: unshaded + - state: energy + shader: unshaded + - type: DamageStateVisuals + states: + Alive: + Base: cocaine-bear + BaseUnshaded: glow + Critical: + Base: cocaine-bear_dead + Dead: + Base: cocaine-bear_dead + - type: MobThresholds + thresholds: + 0: Alive + 60: Critical + 120: Dead + - type: Butcherable + spawned: + - id: FoodMeatBear + amount: 3 + - id: MaterialHideBear + amount: 1 + prob: 0.3 + - type: ReplacementAccent + accent: genericAggressive + - type: Vocal + sounds: + Unsexed: Bear + - type: InteractionPopup + successChance: 0.25 + interactSuccessString: petting-success-bear + interactFailureString: petting-failure-bear + interactSuccessSound: + path: /Audio/Animals/sloth_squeak.ogg + - type: Fauna # Lavaland Change diff --git a/Resources/Prototypes/_Omu/Entities/Objects/Consumable/Narcotics/cocainepowder.yml b/Resources/Prototypes/_Omu/Entities/Objects/Consumable/Narcotics/cocainepowder.yml new file mode 100644 index 00000000000..923b5dfc66c --- /dev/null +++ b/Resources/Prototypes/_Omu/Entities/Objects/Consumable/Narcotics/cocainepowder.yml @@ -0,0 +1,23 @@ +- type: entity + name: cocaine powder + parent: [FoodInjectableBase, BaseMajorContraband] + id: CocainePowder + description: You know you want to. + components: + - type: Stack + stackType: CocainePowder + count: 1 + - type: FlavorProfile + flavors: + - oily + - bitter + - type: Sprite + sprite: _Omu/Objects/Consumable/Narcotics/cocainepowder.rsi + state: cocainepowder + - type: SolutionContainerManager + solutions: + food: + maxVol: 20 + reagents: + - ReagentId: Cocaine + Quantity: 20 diff --git a/Resources/Prototypes/_Omu/Entities/Objects/Specific/Hydroponics/leaves.yml b/Resources/Prototypes/_Omu/Entities/Objects/Specific/Hydroponics/leaves.yml new file mode 100644 index 00000000000..a1bc6891812 --- /dev/null +++ b/Resources/Prototypes/_Omu/Entities/Objects/Specific/Hydroponics/leaves.yml @@ -0,0 +1,45 @@ +## SPDX-FileCopyrightText: 2026 Eponymic-sys +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +- type: entity + id: LeavesCoco + parent: ProduceBase + name: coco leaves + description: "Fresh coco leaves containing stimulant alkaloids." + components: + - type: Sprite + sprite: _Omu/Objects/Specific/Hydroponics/coco.rsi + - type: Produce + seedId: coco + - type: Food + - type: SolutionContainerManager + solutions: + food: + reagents: + - ReagentId: RawCocaine + Quantity: 20 + - type: FoodSequenceElement + entries: + Burger: CocoBurger + Taco: CocoTaco + +- type: entity + id: LeavesCocoDried + parent: ProduceBase + name: dried coco leaves + description: "Dried coco leaves, ready to be ground." + components: + - type: Stack + stackType: LeavesCocoDried + count: 1 + - type: Food + - type: Sprite + sprite: _Omu/Objects/Specific/Hydroponics/coco.rsi + state: dried + - type: SolutionContainerManager + solutions: + food: + reagents: + - ReagentId: RawCocaine + Quantity: 15 diff --git a/Resources/Prototypes/_Omu/Entities/Objects/Specific/Hydroponics/seeds.yml b/Resources/Prototypes/_Omu/Entities/Objects/Specific/Hydroponics/seeds.yml new file mode 100644 index 00000000000..892a254d593 --- /dev/null +++ b/Resources/Prototypes/_Omu/Entities/Objects/Specific/Hydroponics/seeds.yml @@ -0,0 +1,13 @@ +# SPDX-FileCopyrightText: 2026 Eponymic-sys +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +- type: entity + parent: SeedBase + name: packet of coco seeds + id: CocoSeeds + components: + - type: Seed + seedId: coco + - type: Sprite + sprite: _Omu/Objects/Specific/Hydroponics/coco.rsi diff --git a/Resources/Prototypes/_Omu/Hydroponics/seeds.yml b/Resources/Prototypes/_Omu/Hydroponics/seeds.yml new file mode 100644 index 00000000000..22de42006f1 --- /dev/null +++ b/Resources/Prototypes/_Omu/Hydroponics/seeds.yml @@ -0,0 +1,28 @@ +# SPDX-FileCopyrightText: 2026 Eponymic-sys +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +- type: seed + id: coco + name: seeds-coco-name + noun: seeds-noun-seeds + displayName: seeds-coco-display-name + plantRsi: _Omu/Objects/Specific/Hydroponics/coco.rsi + packetPrototype: CocoSeeds + productPrototypes: + - LeavesCoco + harvestRepeat: Repeat + lifespan: 75 + maturation: 8 + production: 12 + yield: 2 + potency: 20 + growthStages: 3 + waterConsumption: 0.40 + idealLight: 9 + idealHeat: 298 + chemicals: + RawCocaine: + Min: 1 + Max: 10 + PotencyDivisor: 10 diff --git a/Resources/Prototypes/_Omu/Polymorphs/cocaine.yml b/Resources/Prototypes/_Omu/Polymorphs/cocaine.yml new file mode 100644 index 00000000000..ffb78a58b31 --- /dev/null +++ b/Resources/Prototypes/_Omu/Polymorphs/cocaine.yml @@ -0,0 +1,14 @@ +# SPDX-FileCopyrightText: 2026 OmuStation Contributors +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +- type: polymorph + id: CocaineSpaceBear + configuration: + entity: CocaineMobBearSpace + forced: true + inventory: Drop + transferName: true + transferDamage: true + revertOnCrit: false + revertOnDeath: true diff --git a/Resources/Prototypes/_Omu/Reagents/narcotics.yml b/Resources/Prototypes/_Omu/Reagents/narcotics.yml new file mode 100644 index 00000000000..ab277dcc0d7 --- /dev/null +++ b/Resources/Prototypes/_Omu/Reagents/narcotics.yml @@ -0,0 +1,233 @@ +# SPDX-FileCopyrightText: 2026 Eponymic-sys +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +- type: reagent + id: Cocaine + name: reagent-name-cocaine + group: Narcotics + desc: reagent-desc-cocaine + physicalDesc: reagent-physical-desc-powdery + flavor: bitter + color: "#c2c2c2" + boilingPoint: 150.0 + meltingPoint: -10.0 + metabolisms: + Narcotic: + metabolismRate: 0.20 + effects: + - !type:PopupMessage + type: Local + visualType: MediumCaution + messages: + - cocaine-effect + probability: 0.1 + - !type:PopupMessage + conditions: + - !type:ReagentThreshold + min: 30 + type: Local + visualType: LargeCaution + messages: + - cocaine-overdose-heartpounding + - cocaine-overdose-chestpain + - cocaine-overdose-cantbreathe + probability: 0.2 + - !type:ModifyStatusEffect + effectProto: StatusEffectEnraged + time: 2.5 + refresh: true + type: Add + - !type:Polymorph + prototype: CocaineSpaceBear + conditions: + - !type:ReagentThreshold + min: 80 + - !type:HealthChange + conditions: + - !type:OrganType # Goobstation - Yowie + type: Yowie + damage: + groups: + Brute: -1 + types: + Heat: -0.5 + Shock: -0.5 + Cold: -0.5 + Radiation: -0.5 + - !type:MovespeedModifier + walkSpeedModifier: 1.3 + sprintSpeedModifier: 1.3 + - !type:HealthChange + conditions: + - !type:OrganType + type: Yowie + shouldHave: false + - !type:ReagentThreshold + min: 20 #please wait 3 minutes before using another stimpack, also goob edit + damage: + types: + Poison: 1 + - !type:AdjustReagent + conditions: + - !type:ReagentThreshold + reagent: ChloralHydrate + min: 1 + reagent: ChloralHydrate + amount: -10 + - !type:GenericStatusEffect + key: Stun + time: 3 + type: Remove + - !type:GenericStatusEffect + key: KnockedDown + time: 1 + type: Remove + - !type:GenericStatusEffect + key: StaminaModifier + component: StaminaModifier + time: 3 + type: Add + - !type:ModifyStatusEffect + effectProto: StatusEffectForcedSleeping + time: 3 + type: Remove + - !type:ModifyStatusEffect + conditions: + - !type:ReagentThreshold + reagent: Haloperidol + max: 0.01 + effectProto: StatusEffectDrowsiness + time: 10 + type: Remove + - !type:GenericStatusEffect # goob edit + key: Adrenaline + component: IgnoreSlowOnDamage + time: 4 + - !type:RemoveComponentEffect # goob edit + component: DelayedKnockdown + locale: reagent-effect-guidebook-remove-delayed-knockdown + - !type:TakeStaminaDamage # goob edit + amount: -10 + immediate: true + - !type:SuppressPain + amount: 1.2 + time: 30 # it accumulated 1.2*quantity and then exists for 30 seconds. + Medicine: + metabolismRate: 0.25 # Goobstation edit + effects: + - !type:ResetNarcolepsy + - !type:SatiateHunger + factor: 1 + - !type:SatiateThirst + factor: 1 + - !type:HealthChange + conditions: + - !type:TotalDamage + min: 70 # only heals when you're more dead than alive + damage: # heals at the same rate as tricordrazine, doesn't heal poison because if you OD'd I'm not giving you a safety net + groups: + Burn: -1 + Brute: -1 + + +- type: reagent + id: RawCocaine + name: reagent-name-raw-cocaine + group: Narcotics + desc: reagent-desc-raw-cocaine + physicalDesc: reagent-physical-desc-powdery + flavor: bitter + color: "#c2c2c2" + boilingPoint: 150.0 + meltingPoint: -10.0 + metabolisms: + Narcotic: + metabolismRate: 0.25 + effects: + - !type:HealthChange + conditions: + - !type:OrganType # Goobstation - Yowie + type: Yowie + damage: + groups: + Brute: -1 + types: + Heat: -0.5 + Shock: -0.5 + Cold: -0.5 + Radiation: -0.5 + - !type:MovespeedModifier + walkSpeedModifier: 1.15 + sprintSpeedModifier: 1.15 + - !type:HealthChange # impurities cause constant low toxin damage + conditions: + - !type:OrganType + type: Yowie + shouldHave: false + damage: + types: + Poison: 0.25 + - !type:HealthChange + conditions: + - !type:OrganType + type: Yowie + shouldHave: false + - !type:ReagentThreshold + min: 10 + damage: + types: + Poison: 1.5 + - !type:Jitter # unrefined stimulant makes you jittery + ticksOfJitter: 3 + - !type:PopupMessage # nausea from impurities + type: Local + visualType: MediumCaution + messages: + - raw-cocaine-nausea + probability: 0.2 + - !type:AdjustReagent + conditions: + - !type:ReagentThreshold + reagent: ChloralHydrate + min: 1 + reagent: ChloralHydrate + amount: -2 + - !type:GenericStatusEffect + key: Stun + time: 1 + type: Remove + - !type:GenericStatusEffect + key: KnockedDown + time: 1 + type: Remove + - !type:GenericStatusEffect + key: StaminaModifier + component: StaminaModifier + time: 1 + type: Add + - !type:ModifyStatusEffect + effectProto: StatusEffectForcedSleeping + time: 1 + type: Remove + - !type:ModifyStatusEffect + conditions: + - !type:ReagentThreshold + reagent: Haloperidol + max: 0.01 + effectProto: StatusEffectDrowsiness + time: 5 + type: Remove + - !type:GenericStatusEffect # goob edit + key: Adrenaline + component: IgnoreSlowOnDamage + time: 2 + - !type:RemoveComponentEffect # goob edit + component: DelayedKnockdown + locale: reagent-effect-guidebook-remove-delayed-knockdown + - !type:TakeStaminaDamage # goob edit + amount: -5 + immediate: true + - !type:SuppressPain + amount: 0.3 + time: 15 diff --git a/Resources/Prototypes/_Omu/Recipes/Cooking/food_sequence_element.yml b/Resources/Prototypes/_Omu/Recipes/Cooking/food_sequence_element.yml new file mode 100644 index 00000000000..2d5ba7889cf --- /dev/null +++ b/Resources/Prototypes/_Omu/Recipes/Cooking/food_sequence_element.yml @@ -0,0 +1,17 @@ +# SPDX-FileCopyrightText: 2026 Eponymic-sys +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +- type: foodSequenceElement + id: CocoBurger + name: food-sequence-burger-content-coco + sprites: + - sprite: _Omu/Objects/Specific/Hydroponics/coco.rsi + state: produce + +- type: foodSequenceElement + id: CocoTaco + name: food-sequence-content-coco + sprites: + - sprite: _Omu/Objects/Specific/Hydroponics/coco.rsi + state: produce diff --git a/Resources/Prototypes/_Omu/Recipes/Cooking/meal_recipes.yml b/Resources/Prototypes/_Omu/Recipes/Cooking/meal_recipes.yml index 5d46e87fd6a..320e3ae23fe 100644 --- a/Resources/Prototypes/_Omu/Recipes/Cooking/meal_recipes.yml +++ b/Resources/Prototypes/_Omu/Recipes/Cooking/meal_recipes.yml @@ -11,6 +11,13 @@ FoodMeatRat: 1 FoodButter: 1 +- type: microwaveMealRecipe + id: RecipeDriedCocoLeaves + name: dried coco leaves recipe + result: LeavesCocoDried + time: 5 + solids: + LeavesCoco: 1 #Lazy tiramisu and fancy tiramisu added by jellygato 3-1-26 - type: microwaveMealRecipe id: RecipeLazyTiramisu diff --git a/Resources/Prototypes/_Omu/Recipes/Reactions/narcotics.yml b/Resources/Prototypes/_Omu/Recipes/Reactions/narcotics.yml new file mode 100644 index 00000000000..9bcef8661e7 --- /dev/null +++ b/Resources/Prototypes/_Omu/Recipes/Reactions/narcotics.yml @@ -0,0 +1,23 @@ +# SPDX-FileCopyrightText: 2026 Eponymic-sys +# +# SPDX-License-Identifier: AGPL-3.0-or-later + + +# The reagent product is for the guidebook. +- type: reaction + id: Cocaine + reactants: + RawCocaine: + amount: 1 + Ash: + amount: 1 + WeldingFuel: + amount: 1 + catalyst: true + products: + Cocaine: 1 + effects: + - !type:CreateEntityReactionEffect + entity: CocainePowder + minTemp: 300 + maxTemp: 450 diff --git a/Resources/Prototypes/_Omu/Stacks/consumable_stacks.yml b/Resources/Prototypes/_Omu/Stacks/consumable_stacks.yml new file mode 100644 index 00000000000..39c87d7c32d --- /dev/null +++ b/Resources/Prototypes/_Omu/Stacks/consumable_stacks.yml @@ -0,0 +1,17 @@ +# SPDX-FileCopyrightText: 2026 Eponymic-sys +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +- type: stack + id: LeavesCocoDried + name: stack-dried-coco-leaves + icon: { sprite: /Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi, state: dried } + spawn: LeavesCocoDried + maxCount: 15 + +- type: stack + id: CocainePowder + name: stack-cocaine-powder + icon: { sprite: /Textures/_Omu/Objects/Consumable/Narcotics/cocainepowder.rsi, state: cocainepowder } + spawn: CocainePowder + maxCount: 30 diff --git a/Resources/Prototypes/_Omu/StatusEffects/enraged.yml b/Resources/Prototypes/_Omu/StatusEffects/enraged.yml new file mode 100644 index 00000000000..fdaee45321b --- /dev/null +++ b/Resources/Prototypes/_Omu/StatusEffects/enraged.yml @@ -0,0 +1,11 @@ +# SPDX-FileCopyrightText: 2026 Eponymic-sys +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +- type: entity + parent: MobStatusEffectBase + id: StatusEffectEnraged + name: enraged + components: + - type: EnragedStatusEffect + hostileFaction: AllHostile diff --git a/Resources/Textures/_Omu/Mobs/Animals/coacinebear.rsi/cocaine-bear.png b/Resources/Textures/_Omu/Mobs/Animals/coacinebear.rsi/cocaine-bear.png new file mode 100644 index 00000000000..6cf3f1f6fb7 Binary files /dev/null and b/Resources/Textures/_Omu/Mobs/Animals/coacinebear.rsi/cocaine-bear.png differ diff --git a/Resources/Textures/_Omu/Mobs/Animals/coacinebear.rsi/cocaine-bear_dead.png b/Resources/Textures/_Omu/Mobs/Animals/coacinebear.rsi/cocaine-bear_dead.png new file mode 100644 index 00000000000..c17e7e8b9ea Binary files /dev/null and b/Resources/Textures/_Omu/Mobs/Animals/coacinebear.rsi/cocaine-bear_dead.png differ diff --git a/Resources/Textures/_Omu/Mobs/Animals/coacinebear.rsi/energy.png b/Resources/Textures/_Omu/Mobs/Animals/coacinebear.rsi/energy.png new file mode 100644 index 00000000000..13db1a80ab7 Binary files /dev/null and b/Resources/Textures/_Omu/Mobs/Animals/coacinebear.rsi/energy.png differ diff --git a/Resources/Textures/_Omu/Mobs/Animals/coacinebear.rsi/glow.png b/Resources/Textures/_Omu/Mobs/Animals/coacinebear.rsi/glow.png new file mode 100644 index 00000000000..8de394e1797 Binary files /dev/null and b/Resources/Textures/_Omu/Mobs/Animals/coacinebear.rsi/glow.png differ diff --git a/Resources/Textures/_Omu/Mobs/Animals/coacinebear.rsi/meta.json b/Resources/Textures/_Omu/Mobs/Animals/coacinebear.rsi/meta.json new file mode 100644 index 00000000000..a6e6eec47e5 --- /dev/null +++ b/Resources/Textures/_Omu/Mobs/Animals/coacinebear.rsi/meta.json @@ -0,0 +1,67 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/tgstation/tgstation/commit/53d1f1477d22a11a99c6c6924977cd431075761b , remade by Alekshhh, energy is from a modified from tgstation https://github.com/tgstation/tgstation/blob/HEAD/icons/obj/weapons/guns/projectiles.dmi", + "states": [ + { + "name": "cocaine-bear", + "directions": 4 + }, + { + "name": "glow", + "directions": 4, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "energy", + "delays": [ + [ + 0.120000005, + 0.04, + 0.120000005, + 0.08, + 0.04, + 0.120000005, + 0.04, + 0.120000005, + 0.08, + 0.04, + 0.120000005, + 0.04 + ] + ] + }, + { + "name": "cocaine-bear_dead" + } + ] +} diff --git a/Resources/Textures/_Omu/Mobs/Species/CocaineBear/organs.rsi/energy.png b/Resources/Textures/_Omu/Mobs/Species/CocaineBear/organs.rsi/energy.png new file mode 100644 index 00000000000..f41acaab976 Binary files /dev/null and b/Resources/Textures/_Omu/Mobs/Species/CocaineBear/organs.rsi/energy.png differ diff --git a/Resources/Textures/_Omu/Mobs/Species/CocaineBear/organs.rsi/heart-inhand-left.png b/Resources/Textures/_Omu/Mobs/Species/CocaineBear/organs.rsi/heart-inhand-left.png new file mode 100644 index 00000000000..2e4fdc47c02 Binary files /dev/null and b/Resources/Textures/_Omu/Mobs/Species/CocaineBear/organs.rsi/heart-inhand-left.png differ diff --git a/Resources/Textures/_Omu/Mobs/Species/CocaineBear/organs.rsi/heart-inhand-right.png b/Resources/Textures/_Omu/Mobs/Species/CocaineBear/organs.rsi/heart-inhand-right.png new file mode 100644 index 00000000000..5b9eaa8bae0 Binary files /dev/null and b/Resources/Textures/_Omu/Mobs/Species/CocaineBear/organs.rsi/heart-inhand-right.png differ diff --git a/Resources/Textures/_Omu/Mobs/Species/CocaineBear/organs.rsi/heart-off.png b/Resources/Textures/_Omu/Mobs/Species/CocaineBear/organs.rsi/heart-off.png new file mode 100644 index 00000000000..5116f6b54a7 Binary files /dev/null and b/Resources/Textures/_Omu/Mobs/Species/CocaineBear/organs.rsi/heart-off.png differ diff --git a/Resources/Textures/_Omu/Mobs/Species/CocaineBear/organs.rsi/heart-on.png b/Resources/Textures/_Omu/Mobs/Species/CocaineBear/organs.rsi/heart-on.png new file mode 100644 index 00000000000..650ad85bc92 Binary files /dev/null and b/Resources/Textures/_Omu/Mobs/Species/CocaineBear/organs.rsi/heart-on.png differ diff --git a/Resources/Textures/_Omu/Mobs/Species/CocaineBear/organs.rsi/meta.json b/Resources/Textures/_Omu/Mobs/Species/CocaineBear/organs.rsi/meta.json new file mode 100644 index 00000000000..3600f83f6f4 --- /dev/null +++ b/Resources/Textures/_Omu/Mobs/Species/CocaineBear/organs.rsi/meta.json @@ -0,0 +1,51 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by wyvernrer (337793232195026944), modified by Eponymic-sys", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "heart-inhand-left", + "directions": 4 + }, + { + "name": "heart-inhand-right", + "directions": 4 + }, + { + "name": "heart-off" + }, + { + "name": "heart-on", + "delays": [ + [ + 0.6, + 0.1, + 0.1 + ] + ] + }, + { + "name": "energy", + "delays": [ + [ + 0.120000005, + 0.04, + 0.120000005, + 0.08, + 0.04, + 0.120000005, + 0.04, + 0.120000005, + 0.08, + 0.04, + 0.120000005, + 0.04 + ] + ] + } + ] +} diff --git a/Resources/Textures/_Omu/Objects/Consumable/Narcotics/cocainepowder.rsi/cocainepowder.png b/Resources/Textures/_Omu/Objects/Consumable/Narcotics/cocainepowder.rsi/cocainepowder.png new file mode 100644 index 00000000000..efca9b7dc08 Binary files /dev/null and b/Resources/Textures/_Omu/Objects/Consumable/Narcotics/cocainepowder.rsi/cocainepowder.png differ diff --git a/Resources/Textures/_Omu/Objects/Consumable/Narcotics/cocainepowder.rsi/meta.json b/Resources/Textures/_Omu/Objects/Consumable/Narcotics/cocainepowder.rsi/meta.json new file mode 100644 index 00000000000..347ee0a88ad --- /dev/null +++ b/Resources/Textures/_Omu/Objects/Consumable/Narcotics/cocainepowder.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "cocainepowder.png made by r3stful", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "cocainepowder" + } + ] +} diff --git a/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/dead.png b/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/dead.png new file mode 100644 index 00000000000..01da19fc76e Binary files /dev/null and b/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/dead.png differ diff --git a/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/dried.png b/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/dried.png new file mode 100644 index 00000000000..fddcc7192c3 Binary files /dev/null and b/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/dried.png differ diff --git a/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/harvest.png b/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/harvest.png new file mode 100644 index 00000000000..bc6806c83ac Binary files /dev/null and b/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/harvest.png differ diff --git a/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/meta.json b/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/meta.json new file mode 100644 index 00000000000..8d16fde44a1 --- /dev/null +++ b/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/meta.json @@ -0,0 +1,35 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at 1dbcf389b0ec6b2c51b002df5fef8dd1519f8068", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "dead" + }, + { + "name": "harvest" + }, + { + "name": "produce" + }, + { + "name": "dried" + }, + { + "name": "seed" + }, + { + "name": "stage-1" + }, + { + "name": "stage-2" + }, + { + "name": "stage-3" + } + ] +} diff --git a/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/produce.png b/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/produce.png new file mode 100644 index 00000000000..1ce86d3a7d6 Binary files /dev/null and b/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/produce.png differ diff --git a/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/seed.png b/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/seed.png new file mode 100644 index 00000000000..92389d95f1b Binary files /dev/null and b/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/seed.png differ diff --git a/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/stage-1.png b/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/stage-1.png new file mode 100644 index 00000000000..626fc20039a Binary files /dev/null and b/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/stage-1.png differ diff --git a/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/stage-2.png b/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/stage-2.png new file mode 100644 index 00000000000..10e326bd81f Binary files /dev/null and b/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/stage-2.png differ diff --git a/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/stage-3.png b/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/stage-3.png new file mode 100644 index 00000000000..1547747ed16 Binary files /dev/null and b/Resources/Textures/_Omu/Objects/Specific/Hydroponics/coco.rsi/stage-3.png differ