# SPDX-FileCopyrightText: 2020 AJCM-git <60196617+AJCM-git@users.noreply.github.com>
# SPDX-FileCopyrightText: 2020 Víctor Aguilera Puerto <6766154+Zumorica@users.noreply.github.com>
# SPDX-FileCopyrightText: 2020 Víctor Aguilera Puerto <zddm@outlook.es>
# SPDX-FileCopyrightText: 2021 20kdc <asdd2808@gmail.com>
# SPDX-FileCopyrightText: 2021 BlueberryShortcake <rubetskoy234@mail.ru>
# SPDX-FileCopyrightText: 2021 DmitriyRubetskoy <75271456+DmitriyRubetskoy@users.noreply.github.com>
# SPDX-FileCopyrightText: 2021 FoLoKe <36813380+FoLoKe@users.noreply.github.com>
# SPDX-FileCopyrightText: 2021 Metal Gear Sloth <metalgearsloth@gmail.com>
# SPDX-FileCopyrightText: 2021 Paul <ritter.paul1@googlemail.com>
# SPDX-FileCopyrightText: 2021 Paul Ritter <ritter.paul1@gmail.com>
# SPDX-FileCopyrightText: 2021 Swept <sweptwastaken@protonmail.com>
# SPDX-FileCopyrightText: 2021 Vera Aguilera Puerto <6766154+Zumorica@users.noreply.github.com>
# SPDX-FileCopyrightText: 2021 Vera Aguilera Puerto <gradientvera@outlook.com>
# SPDX-FileCopyrightText: 2021 Vera Aguilera Puerto <zddm@outlook.es>
# SPDX-FileCopyrightText: 2021 Ygg01 <y.laughing.man.y@gmail.com>
# SPDX-FileCopyrightText: 2022 Chris V <HoofedEar@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 CommieFlowers <rasmus.cedergren@hotmail.com>
# SPDX-FileCopyrightText: 2022 CrudeWax <75271456+CrudeWax@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 CrzyPotato <75244093+CrzyPotato@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 EmoGarbage404 <98561806+EmoGarbage404@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Fishfish458 <47410468+Fishfish458@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Flipp Syder <76629141+vulppine@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Jacob Tong <10494922+ShadowCommander@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Jezithyr <Jezithyr@gmail.com>
# SPDX-FileCopyrightText: 2022 Justin Trotter <trotter.justin@gmail.com>
# SPDX-FileCopyrightText: 2022 Júlio César Ueti <52474532+Mirino97@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Mith-randalf <84274729+Mith-randalf@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Moony <moonheart08@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Pancake <Pangogie@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Paul Ritter <ritter.paul1@googlemail.com>
# SPDX-FileCopyrightText: 2022 Peptide90 <78795277+Peptide90@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Rane <60792108+Elijahrane@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Rinkashikachi <15rinkashikachi15@gmail.com>
# SPDX-FileCopyrightText: 2022 Ripmorld <60119809+UKNOWH@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Saakra <31361371+Saakra@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Saakra <xfallenfighterswolfx@gmail.com>
# SPDX-FileCopyrightText: 2022 Stealthbomber16 <100171035+Stealthbomber16@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 T-Stalker <43253663+DogZeroX@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 TekuNut <13456422+TekuNut@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Tomeno <Tomeno@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Tomeno <tomeno@lulzsec.co.uk>
# SPDX-FileCopyrightText: 2022 Vordenburg <114301317+Vordenburg@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Willhelm53 <97707302+Willhelm53@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 ZeroDayDaemon <60460608+ZeroDayDaemon@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Zymem <97173622+Zymem@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 biometricPsychography <cyclinglinguist@gmail.com>
# SPDX-FileCopyrightText: 2022 fishfish458 <fishfish458>
# SPDX-FileCopyrightText: 2022 hubismal <47284081+hubismal@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 lapatison <100279397+lapatison@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 metalgearsloth <metalgearsloth@gmail.com>
# SPDX-FileCopyrightText: 2022 mirrorcult <lunarautomaton6@gmail.com>
# SPDX-FileCopyrightText: 2022 rolfero <45628623+rolfero@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Alekshhh <44923899+Alekshhh@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Dakamakat <52600490+dakamakat@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Doru991 <75124791+Doru991@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 DrSmugleaf <drsmugleaf@gmail.com>
# SPDX-FileCopyrightText: 2023 EEASAS <109891564+EEASAS@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Fromoriss <106442259+Fromoriss@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 GoodWheatley <109803540+GoodWheatley@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 HerCoyote23 <131214189+HerCoyote23@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 I.K <45953835+notquitehadouken@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Jackrost <jackrost@mail.ru>
# SPDX-FileCopyrightText: 2023 Jezithyr <jezithyr@gmail.com>
# SPDX-FileCopyrightText: 2023 Kit0vras <123590995+Kit0vras@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Lazzi0706 <49803294+Lazzi0706@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Lazzi0706 <lazzikrytskiy0706@gmail.com>
# SPDX-FileCopyrightText: 2023 Mr. 27 <45323883+27alaing@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 PixelTK <85175107+PixelTheKermit@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Sir Winters <7543955+Owai-Seek@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Slava0135 <40753025+Slava0135@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Slava0135 <super.novalskiy_0135@inbox.ru>
# SPDX-FileCopyrightText: 2023 Tox Cruize <141375638+TexCruize@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Tyzemol <85772526+Tyzemol@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Vasilis The Pikachu <vasilis@pikachu.systems>
# SPDX-FileCopyrightText: 2023 Visne <39844191+Visne@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Whisper <121047731+QuietlyWhisper@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 coolmankid12345 <55817627+coolmankid12345@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 coolmankid12345 <coolmankid12345@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 gus <august.eymann@gmail.ccom>
# SPDX-FileCopyrightText: 2023 gus <august.eymann@gmail.com>
# SPDX-FileCopyrightText: 2023 liltenhead <104418166+liltenhead@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 lzk228 <124214523+lzk228@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 moonheart08 <moonheart08@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 notquitehadouken <1isthisameme>
# SPDX-FileCopyrightText: 2023 pofitlo <107665898+pofitlo@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 ravage <142820619+ravage123321@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 reverie collection <revsys413@gmail.com>
# SPDX-FileCopyrightText: 2024 778b <33431126+778b@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 AJCM <AJCM@tutanota.com>
# SPDX-FileCopyrightText: 2024 Alex Evgrashin <aevgrashin@yandex.ru>
# SPDX-FileCopyrightText: 2024 Alex Pavlenko <diraven@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Alice "Arimah" Heurlin <30327355+arimah@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Alzore <140123969+Blackern5000@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Anzarot121 <116586144+Anzarot121@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Arendian <137322659+Arendian@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 ArkiveDev <95712736+ArkiveDev@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 BITTERLYNX <166083655+PaigeMaeForrest@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 CaasGit <87243814+CaasGit@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Centronias <me@centronias.com>
# 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 Dae <60460608+ZeroDayDaemon@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Doomsdrayk <robotdoughnut@comcast.net>
# SPDX-FileCopyrightText: 2024 DrEnzyme <DrEnzyme@gmail.com>
# SPDX-FileCopyrightText: 2024 DrSmugleaf <10968691+DrSmugleaf@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 DrSmugleaf <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 EmoGarbage404 <retron404@gmail.com>
# SPDX-FileCopyrightText: 2024 Eoin Mcloughlin <helloworld@eoinrul.es>
# SPDX-FileCopyrightText: 2024 Flareguy <78941145+Flareguy@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Floofi <126319569+Shadowtheprotogen546@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 FungiFellow <151778459+FungiFellow@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 Hrosts <35345601+Hrosts@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Ian <ignaz.k@live.de>
# SPDX-FileCopyrightText: 2024 IlyaElDunaev <154531074+IlyaElDunaev@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 JIPDawg <51352440+JIPDawg@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 JIPDawg <JIPDawg93@gmail.com>
# SPDX-FileCopyrightText: 2024 Joel Zimmerman <JoelZimmerman@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Jona-K <63449674+Katzenminer@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 JustCone <141039037+JustCone14@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 K-Dynamic <20566341+K-Dynamic@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Kara <lunarautomaton6@gmail.com>
# SPDX-FileCopyrightText: 2024 Kevin Zheng <kevinz5000@gmail.com>
# SPDX-FileCopyrightText: 2024 Killerqu00 <47712032+Killerqu00@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Kira Bridgeton <161087999+Verbalase@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Ko4ergaPunk <62609550+Ko4ergaPunk@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Kukutis96513 <146854220+Kukutis96513@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 LankLTE <135308300+LankLTE@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Leon Friedrich <60421075+ElectroJr@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Lye <128915833+Lyroth001@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 MerrytheManokit <167581110+MerrytheManokit@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Mervill <mervills.email@gmail.com>
# SPDX-FileCopyrightText: 2024 MetalSage <74924875+MetalSage@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 MetalSage <metalsage.official@gmail.com>
# SPDX-FileCopyrightText: 2024 Minemoder5000 <minemoder50000@gmail.com>
# SPDX-FileCopyrightText: 2024 Moomoobeef <62638182+Moomoobeef@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 NakataRin <45946146+NakataRin@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 OrangeMoronage9622 <whyteterry0092@gmail.com>
# SPDX-FileCopyrightText: 2024 PJBot <pieterjan.briers+bot@gmail.com>
# SPDX-FileCopyrightText: 2024 Partmedia <kevinz5000@gmail.com>
# SPDX-FileCopyrightText: 2024 Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
# SPDX-FileCopyrightText: 2024 Plykiya <58439124+Plykiya@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Preston Smith <92108534+thetolbean@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Psychpsyo <60073468+Psychpsyo@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Redfire1331 <125223432+Redfire1331@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Repo <47093363+Titian3@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 RiceMar1244 <138547931+RiceMar1244@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Rouge2t7 <81053047+Sarahon@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 ShadowCommander <10494922+ShadowCommander@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Simon <63975668+Simyon264@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Soydium <pazylojvalercik@gmail.com>
# SPDX-FileCopyrightText: 2024 Stalen <33173619+stalengd@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Tabitha <64847293+KyuPolaris@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 TakoDragon <69509841+BackeTako@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Thomas <87614336+Aeshus@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Truoizys <153248924+Truoizys@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 TsjipTsjip <19798667+TsjipTsjip@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 TurboTracker <130304754+TurboTrackerss14@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Ubaser <134914314+UbaserB@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Unkn0wn_Gh0st <shadowstalkermll@gmail.com>
# SPDX-FileCopyrightText: 2024 Vasilis <vasilis@pikachu.systems>
# SPDX-FileCopyrightText: 2024 Verm <32827189+Vermidia@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Vigers Ray <60344369+VigersRay@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Vyacheslav Kovalevsky <40753025+Slava0135@users.noreply.github.com>
# 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 brainfood1183 <113240905+brainfood1183@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 de0rix <151521628+de0rix@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 deathride58 <deathride58@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 dffdff2423 <dffdff2423@gmail.com>
# SPDX-FileCopyrightText: 2024 eoineoineoin <github@eoinrul.es>
# SPDX-FileCopyrightText: 2024 foboscheshir <156405958+foboscheshir@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 icekot8 <93311212+icekot8@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 keronshb <54602815+keronshb@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 lanse12 <cloudability.ez@gmail.com>
# SPDX-FileCopyrightText: 2024 lunarcomets <140772713+lunarcomets@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 <comedian_vs_clown@hotmail.com>
# SPDX-FileCopyrightText: 2024 mhamster <81412348+mhamsterr@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 nao fujiwara <awkwarddryad@gmail.com>
# SPDX-FileCopyrightText: 2024 neutrino <67447925+neutrino-laser@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 nicho <nicholasnewsom577@gmail.com>
# SPDX-FileCopyrightText: 2024 nikthechampiongr <32041239+nikthechampiongr@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 no <165581243+pissdemon@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 pigeonpeas <147350443+pigeonpeas@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 plykiya <plykiya@protonmail.com>
# SPDX-FileCopyrightText: 2024 pocl v <24708225+Pinkbat5@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 potato1234_x <79580518+potato1234x@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 redfire1331 <Redfire1331@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 saintmuntzer <47153094+saintmuntzer@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 shamp <140359015+shampunj@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 strO0pwafel <153459934+strO0pwafel@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 stroopwafel <j.o.luijkx@student.tudelft.nl>
# SPDX-FileCopyrightText: 2024 themias <89101928+themias@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 timur2011 <16829159+timurjavid@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 to4no_fix <156101927+chavonadelal@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 voidnull000 <18663194+voidnull000@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 youtissoum <51883137+youtissoum@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Арт <123451459+JustArt1m@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Aiden <aiden@djkraz.com>
# SPDX-FileCopyrightText: 2025 Aidenkrz <aiden@djkraz.com>
# SPDX-FileCopyrightText: 2025 Aineias1 <142914808+Aineias1@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Aineias1 <dmitri.s.kiselev@gmail.com>
# SPDX-FileCopyrightText: 2025 Armok <155400926+ARMOKS@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Arraydeess <arraygitbash@gmail.com>
# SPDX-FileCopyrightText: 2025 Arraydeess14 <87253287+Arraydeess14@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Aviu00 <93730715+Aviu00@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Aviu00 <aviu00@protonmail.com>
# SPDX-FileCopyrightText: 2025 BombasterDS <deniskaporoshok@gmail.com>
# SPDX-FileCopyrightText: 2025 BombasterDS2 <shvalovdenis.workmail@gmail.com>
# SPDX-FileCopyrightText: 2025 Booblesnoot42 <108703193+Booblesnoot42@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Errant <35878406+Errant-4@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 FaDeOkno <143940725+FaDeOkno@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Fishbait <Fishbait@git.ml>
# SPDX-FileCopyrightText: 2025 GoobBot <uristmchands@proton.me>
# SPDX-FileCopyrightText: 2025 Ilya246 <57039557+Ilya246@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Ilya246 <ilyukarno@gmail.com>
# SPDX-FileCopyrightText: 2025 John Willis <143434770+CerberusWolfie@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 McBosserson <148172569+McBosserson@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 MilenVolf <63782763+MilenVolf@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Milon <plmilonpl@gmail.com>
# SPDX-FileCopyrightText: 2025 Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Piras314 <p1r4s@proton.me>
# SPDX-FileCopyrightText: 2025 Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Rinary <72972221+Rinary1@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Rouden <149893554+Roudenn@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Roudenn <romabond091@gmail.com>
# SPDX-FileCopyrightText: 2025 SX-7 <92227810+SX-7@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 SX-7 <sn1.test.preria.2002@gmail.com>
# SPDX-FileCopyrightText: 2025 Solstice <solsticeofthewinter@gmail.com>
# SPDX-FileCopyrightText: 2025 SolsticeOfTheWinter <solsticeofthewinter@gmail.com>
# SPDX-FileCopyrightText: 2025 Sparlight <twiksparlight@gmail.com>
# SPDX-FileCopyrightText: 2025 Spatison <137375981+Spatison@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Tayrtahn <tayrtahn@gmail.com>
# SPDX-FileCopyrightText: 2025 TheBorzoiMustConsume <197824988+TheBorzoiMustConsume@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Tim <timfalken@hotmail.com>
# SPDX-FileCopyrightText: 2025 Timfa <timfalken@hotmail.com>
# SPDX-FileCopyrightText: 2025 Unlumination <144041835+Unlumy@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Winkarst <74284083+Winkarst-cpu@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Zokkie <6126135+Zokkie@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 archee1 <archee3@hotmail.co.uk>
# SPDX-FileCopyrightText: 2025 cheetah1984 <152602630+cheetah1984@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 cheetah1984 <davidc71114@gmail.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 dootythefrooty <137359445+dootythefrooty@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 fishbait <gnesse@gmail.com>
# SPDX-FileCopyrightText: 2025 gluesniffler <159397573+gluesniffler@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 gluesniffler <linebarrelerenthusiast@gmail.com>
# SPDX-FileCopyrightText: 2025 grub <unalterableness@gmail.com>
# SPDX-FileCopyrightText: 2025 hyperDelegate <zachary1064@gmail.com>
# SPDX-FileCopyrightText: 2025 kosticia <kosticia46@gmail.com>
# SPDX-FileCopyrightText: 2025 mubururu_ <139181059+muburu@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 osjarw <62134478+osjarw@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 shityaml <unalterableness@gmail.com>
# SPDX-FileCopyrightText: 2025 slarticodefast <161409025+slarticodefast@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 ss14-Starlight <ss14-Starlight@outlook.com>
# SPDX-FileCopyrightText: 2025 thebiggestbruh <marcus2008stoke@gmail.com>
# SPDX-FileCopyrightText: 2025 username <113782077+whateverusername0@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 whateverusername0 <whateveremail>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

- type: entity
  name: bat
  parent: [ SimpleMobBase, FlyingMobBase, MobCombat ]
  id: MobBat
  description: Some cultures find them terrifying, others crunchy on the teeth.
  components:
  - type: MovementSpeedModifier
    baseWalkSpeed : 3
    baseSprintSpeed : 6
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: bat
      sprite: Mobs/Animals/bat.rsi
  - type: Speech
    speechSounds: Squeak
    speechVerb: SmallMob
    allowedEmotes: ['Squeak']
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.25
        density: 10
        mask:
        - FlyingMobMask
        layer:
        - FlyingMobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: bat
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 1
  - type: InteractionPopup
    successChance: 0.2
    interactSuccessString: petting-success-soft-floofy
    interactFailureString: petting-failure-bat
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/fox_squeak.ogg
  - type: SentienceTarget
    flavorKind: station-event-random-sentience-flavor-organic
  - type: Bloodstream
    bloodMaxVolume: 50
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Mouse
    understands:
    - Mouse
  - type: MeleeWeapon
    soundHit:
        path: /Audio/Effects/bite.ogg
    angle: 0
    animation: WeaponArcBite
    damage:
      types:
        Piercing: 5
  - type: MobThresholds
    thresholds:
      0: Alive
      30: Critical
      60: Dead
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTypeTrigger
        damageType: Blunt
        damage: 120
      behaviors:
      - !type:GibBehavior
        recursive: false
  - type: Tag
    tags:
    - VimPilot
  - type: NightVision # Goobstation - Nigthvision
    color: "#808080"
    activateSound: null
    deactivateSound: null

- type: entity
  name: bee
  parent: [ SimpleMobBase, FlyingMobBase ]
  id: MobBee
  description: Nice to have, but you can't build a civilization on a foundation of honey alone.
  components:
  - type: CombatMode
  - type: MovementSpeedModifier
    baseWalkSpeed : 3
    baseSprintSpeed : 7
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: 0
      sprite: Mobs/Animals/bee.rsi
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.1
        density: 30
        mask:
        - FlyingMobMask
        layer:
        - FlyingMobLayer
  - type: MobState
  - type: MobThresholds
    thresholds:
      0: Alive
      5: Dead # Goob edit
  - type: Stamina
    critThreshold: 10
    animationThreshold: 5 # Goob edit
  - type: DamageStateVisuals
    states:
      Alive:
        Base: 0
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Extractable
    grindableSolutionName: food
  - type: SolutionContainerManager
    solutions:
      food:
        reagents:
        - ReagentId: GroundBee
          Quantity: 1
  - type: Butcherable
    spawned:
    - id: null # Should give nothing when you butcher it so we set the item id it needs to spawn to null
  - type: Item
    size: Tiny
  - type: Tag
    tags:
    - Bee
    - Trash
  - type: Bloodstream
    bloodReagent: InsectBlood
    bloodMaxVolume: 0.1
  - type: MobPrice
    price: 50
  - type: NPCRetaliation
  - type: FactionException
  - type: NpcFactionMember
    factions:
    - Passive
  - type: HTN
    rootTask:
      task: SimpleHostileCompound
  - type: ZombieImmune
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTypeTrigger
        damageType: Blunt
        damage: 20
      behaviors:
      - !type:GibBehavior
        recursive: false

- type: entity
  name: bee
  suffix: Angry
  parent: [ MobBee, MobCombat ]
  id: MobAngryBee
  description: How nice a bee. Oh no, it looks angry and wants my pizza.
  components:
  - type: CombatMode
  - type: MeleeWeapon
    angle: 0
    animation: WeaponArcBite
    damage:
      types:
        Poison: 2
        Piercing: 1
  - type: InputMover
  - type: MobMover
  - type: HTN
    rootTask:
      task: SimpleHostileCompound
  - type: NpcFactionMember
    factions:
    - SimpleHostile
  - type: Bloodstream
    bloodMaxVolume: 0.1
  - type: ZombieImmune


- type: entity
  name: chicken
  parent: SimpleMobBase
  id: MobChicken
  description: Comes before an egg, and IS a dinosaur!
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: chicken-0
      sprite: Mobs/Animals/chicken.rsi
  - type: SpriteMovement
    movementLayers:
      movement:
        state: chicken-moving-0
    noMovementLayers:
      movement:
        state: chicken-0
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 8
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Speech
    speechVerb: SmallMob
    speechSounds: Cluck
  - type: Tag
    tags:
    - DoorBumpOpener
    - Chicken
    - VimPilot
  - type: Reproductive
    breedChance: 0.05
    birthPopup: reproductive-laid-egg-popup
    makeOffspringInfant: false
    partnerWhitelist:
      tags:
      - Chicken
    offspring:
    - id: FoodEggChickenFertilized
      maxAmount: 3
  - type: ReproductivePartner
  - type: Appearance
  - type: DamageStateVisuals
    states:
      Alive:
        Base: chicken-0
      Critical:
        Base: dead-0
      Dead:
        Base: dead-0
  - type: Butcherable
    spawned:
    - id: FoodMeatChicken
      amount: 1
  - type: InteractionPopup
    successChance: 0.8
    interactSuccessString: petting-success-bird
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/chicken_cluck_happy.ogg
  - type: Bloodstream
    bloodMaxVolume: 100
  - type: EggLayer
    eggSpawn:
    - id: FoodEgg
  - type: ExaminableHunger
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Chicken
    understands:
    - Chicken
  - type: SentienceTarget
    flavorKind: station-event-random-sentience-flavor-organic
  - type: NpcFactionMember
    factions:
    - Passive

- type: entity
  parent: MobChicken
  id: MobChicken1
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: chicken-1
      sprite: Mobs/Animals/chicken.rsi
  - type: SpriteMovement
    movementLayers:
      movement:
        state: chicken-moving-1
    noMovementLayers:
      movement:
        state: chicken-1
  - type: DamageStateVisuals
    states:
      Alive:
        Base: chicken-1
      Critical:
        Base: dead-1
      Dead:
        Base: dead-1

- type: entity
  parent: MobChicken
  id: MobChicken2
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: chicken-2
      sprite: Mobs/Animals/chicken.rsi
  - type: SpriteMovement
    movementLayers:
      movement:
        state: chicken-moving-2
    noMovementLayers:
      movement:
        state: chicken-2
  - type: DamageStateVisuals
    states:
      Alive:
        Base: chicken-2
      Critical:
        Base: dead-2
      Dead:
        Base: dead-2

- type: entity
  id: FoodEggChickenFertilized
  parent: FoodEgg
  suffix: Fertilized, Chicken
  components:
  - type: Timer
  - type: TimedSpawner
    prototypes:
    - MobChicken
    - MobChicken1
    - MobChicken2
    intervalSeconds: 20
    minimumEntitiesSpawned: 1
    maximumEntitiesSpawned: 1
  - type: TimedDespawn #delete the egg after the chicken spawns
    lifetime: 21

- type: entity # TODO: figure out how to make these guys gib when stepped on
  name: cockroach
  parent: SimpleMobBase
  id: MobCockroach
  description: This station is just crawling with bugs.
  components:
  - type: Sprite
    drawdepth: SmallMobs
    sprite: Mobs/Animals/cockroach.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: cockroach
  - type: Item
    size: Tiny
  - type: HTN
    constantlyReplan: false
    rootTask:
      task: MouseCompound
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
        density: 2 # Goob edit
        mask:
        - SmallMobMask
        layer:
        - SmallMobLayer
  - type: MobState
  - type: MobThresholds
    thresholds:
      0: Alive
      1: Dead
  - type: MovementSpeedModifier
    baseWalkSpeed : 2.5
    baseSprintSpeed : 5
  - type: DamageStateVisuals
    states:
      Alive:
        Base: cockroach
      Critical:
        Base: cockroach_dead
      Dead:
        Base: cockroach_dead
  - type: Bloodstream
    bloodReagent: InsectBlood
    bloodMaxVolume: 20
  - type: Food
  - type: FlavorProfile
    flavors:
    - horrible
    - terrible
    - chewy
  - type: Hunger
    baseDecayRate: 0.25
  - type: Extractable
    grindableSolutionName: food
  - type: SolutionContainerManager
    solutions:
      food:
        reagents:
        - ReagentId: Slime
          Quantity: 5
  - type: Butcherable
    spawned:
    - id: FoodMeatSlime
  - type: Damageable
    damageContainer: Biological
    damageModifierSet: Cockroach
  - type: Tag
    tags:
    - Trash
    - VimPilot
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTypeTrigger
        damageType: Blunt
        damage: 10
      behaviors:
      - !type:GibBehavior
        gibContents: Skip # Shitmed Change
        recursive: false
  - type: NonSpreaderZombie
  - type: LanguageKnowledge # Einstein Engines - Languages
    speaks: [Hissing]
    understands: [Hissing]
  - type: SentienceTarget
    flavorKind: station-event-random-sentience-flavor-organic
  - type: MeleeWeapon
    soundHit:
      path: /Audio/Effects/bite.ogg
    angle: 0
    animation: WeaponArcBite
    damage:
      types:
        Piercing: 0

- type: entity
  name: glockroach
  parent: MobCockroach
  suffix: Admeme
  id: MobGlockroach
  description: This station is just crawling with bu- OH GOD THAT COCKROACH HAS A GUN!!!
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: glockroach
  - type: Gun
    fireRate: 2
    useKey: false
    selectedMode: SemiAuto
    availableModes:
      - SemiAuto
    soundGunshot: /Audio/Weapons/Guns/Gunshots/pistol.ogg
  - type: BallisticAmmoProvider
    proto: CartridgeCaselessRifle
    capacity: 500
  - type: CombatMode
  - type: HTN
    rootTask:
      task: GlockroachCompound
  - type: NpcFactionMember
    factions:
    - SimpleHostile
  - type: Butcherable
    spawned:
    - id: FoodMeatSlime
  - type: VentCrawler # goobstation - Ventcrawl

- type: entity
  name: mothroach
  parent: MobCockroach
  id: MobMothroach
  description: This is the adorable by-product of multiple attempts at genetically mixing mothpeople with cockroaches.
  components:
  - type: GhostRole
    makeSentient: true
    allowSpeech: true
    allowMovement: true
    name: ghost-role-information-mothroach-name
    description: ghost-role-information-mothroach-description
    rules: ghost-role-information-freeagent-rules
    mindRoles:
    - MindRoleGhostRoleFreeAgentHarmless
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
        density: 12 # Goob edit
        mask:
        - SmallMobMask
        layer:
        - SmallMobLayer
  - type: GhostTakeoverAvailable
  - type: Speech
    speechVerb: Moth
    speechSounds: Squeak
    allowedEmotes: ['Chitter', 'Squeak', 'Flap'] #flap is from goob
  - type: FaxableObject
    insertingState: inserting_mothroach
  - type: FaxSlip # Goobstation
    slipChance: 0.3
  - type: DashAction # Goobstation - dark souls moths
    actionProto: ActionDashMoth
  - type: MothAccent
  - type: Sprite
    sprite: Mobs/Animals/mothroach/mothroach.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: mothroach
  - type: SpriteMovement
    movementLayers:
      movement:
        state: mothroach-moving
    noMovementLayers:
      movement:
        state: mothroach
  - type: Item
    size: Normal
  - type: Clothing
    quickEquip: false
    sprite: Mobs/Animals/mothroach/mothroach.rsi
    equippedPrefix: 0
    slots:
    - HEAD
  - type: Appearance
  - type: DamageStateVisuals
    states:
      Alive:
        Base: mothroach
      Critical:
        Base: mothroach_dead
      Dead:
        Base: mothroach_dead
  - type: MobThresholds
    thresholds:
      0: Alive
      40: Critical
      60: Dead
  - type: MovementSpeedModifier
    baseWalkSpeed : 2.5
    baseSprintSpeed : 4
    weightlessAcceleration: 1.5
    weightlessFriction: 1
    baseWeightlessModifier: 1
  - type: Damageable
    damageContainer: Biological
    damageModifierSet: Moth
  - type: Bloodstream
    bloodReagent: InsectBlood
  - type: Respirator
    damage:
      types:
        Asphyxiation: 0.5
    damageRecovery:
      types:
        Asphyxiation: -0.5
  - type: CombatMode
  - type: Butcherable
    spawned:
    - id: FoodMeatSlime
      amount: 2
  - type: Extractable
    grindableSolutionName: food
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Moffic
    understands:
    - Moffic
  - type: ZombieAccentOverride
    accent: zombieMoth
  - type: Vocal
    sounds:
      Male: UnisexMoth
      Female: UnisexMoth
      Unsexed: UnisexMoth
    wilhelmProbability: 0.001
  - type: MobPrice
    price: 150
  - type: Tag
    tags:
    - Trash
    - CannotSuicide
    - VimPilot
  - type: CanEscapeInventory
  - type: NpcFactionMember
    factions:
    - Mouse
  - type: Body
    prototype: Mothroach
  - type: TypingIndicator
    proto: moth
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTypeTrigger
        damageType: Blunt
        damage: 60
      behaviors:
      - !type:GibBehavior
        gibContents: Skip
        recursive: false
  - type: FireVisuals
    sprite: Mobs/Effects/onfire.rsi
    normalState: Mouse_burning
  - type: Strippable
  - type: UserInterface
    interfaces:
      enum.StrippingUiKey.Key:
        type: StrippableBoundUserInterface
  - type: InventorySlots
  - type: Inventory
    speciesId: hamster
    templateId: hamster
    displacements:
      head:
        sizeMaps:
          32:
            sprite: Mobs/Animals/mothroach/displacement.rsi
            state: head
      mask:
        sizeMaps:
          32:
            sprite: Mobs/Animals/mothroach/displacement.rsi
            state: mask
      suitstorage:
        sizeMaps:
          32:
            sprite: Mobs/Animals/mothroach/displacement.rsi
            state: suitstorage
      eyes:
        sizeMaps:
          32:
            sprite: Mobs/Animals/mothroach/displacement.rsi
            state: eyes
      neck:
        sizeMaps:
          32:
            sprite: Mobs/Animals/mothroach/displacement.rsi
            state: neck
  - type: EatToGrow # Goobstation Eat To Grow System
    growth: 0.05
    maxGrowth: 2

# Note that the mallard duck is actually a male drake mallard, with the brown duck being the female variant of the same species, however ss14 lacks sex specific textures
# The white duck is more akin to a pekin or call duck.

- type: entity
  name: mallard duck #Quack
  parent: SimpleMobBase
  id: MobDuckMallard
  description: An adorable mallard duck, it's fluffy and soft!
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: duck-0
    sprite: Mobs/Animals/duck.rsi
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 5 #They actually are pretty light, I looked it up
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Tag
    tags:
    - DoorBumpOpener
    - Duck
    - VimPilot
  - type: Reproductive
    breedChance: 0.05
    birthPopup: reproductive-laid-egg-popup
    makeOffspringInfant: false
    partnerWhitelist:
      tags:
      - Duck
    offspring:
    - id: FoodEggDuckFertilized
      maxAmount: 3
  - type: ReproductivePartner
  - type: Appearance
  - type: DamageStateVisuals
    states:
      Alive:
        Base: duck-0
      Critical:
        Base: dead-0
      Dead:
        Base: dead-0
  - type: Butcherable
    spawned:
    - id: FoodMeatDuck
      amount: 1
  - type: InteractionPopup
    successChance: 0.9
    interactSuccessString: petting-success-bird
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/duck_quack_happy.ogg
  - type: Bloodstream
    bloodMaxVolume: 100
  - type: EggLayer
    eggSpawn:
    - id: FoodEgg
  - type: ExaminableHunger
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Duck
    understands:
    - Duck
  - type: SentienceTarget
    flavorKind: station-event-random-sentience-flavor-organic
  - type: NpcFactionMember
    factions:
    - Passive

- type: entity
  name: white duck #Quack
  parent: MobDuckMallard
  id: MobDuckWhite
  description: An adorable white duck, it's fluffy and soft!
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: duck-1
  - type: DamageStateVisuals
    states:
      Alive:
        Base: duck-1
      Critical:
        Base: dead-1
      Dead:
        Base: dead-1

- type: entity
  name: brown duck #Quack
  parent: MobDuckMallard
  id: MobDuckBrown
  description: An adorable brown duck, it's fluffy and soft!
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: duck-2
  - type: DamageStateVisuals
    states:
      Alive:
        Base: duck-2
      Critical:
        Base: dead-2
      Dead:
        Base: dead-2

- type: entity
  id: FoodEggDuckFertilized
  parent: FoodEgg
  suffix: Fertilized, Duck
  components:
    - type: Timer
    - type: TimedSpawner
      prototypes:
      - MobDuckMallard
      - MobDuckWhite
      - MobDuckBrown
      intervalSeconds: 20
      minimumEntitiesSpawned: 1
      maximumEntitiesSpawned: 1
    - type: TimedDespawn #delete the egg after the chicken spawns
      lifetime: 21

- type: entity
  name: butterfly
  parent: [ SimpleMobBase, FlyingMobBase ]
  id: MobButterfly
  description: Despite popular misconceptions, it's not actually made of butter.
  components:
  - type: MovementSpeedModifier
    baseWalkSpeed : 3
    baseSprintSpeed : 6
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: butterfly
      sprite: Mobs/Animals/butterfly.rsi
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
        density: 7.5
        mask:
        - FlyingMobMask
        layer:
        - FlyingMobLayer
  - type: MobState
  - type: MobThresholds
    thresholds:
      0: Alive
      10: Dead
  - type: RandomSprite
    available:
      - enum.DamageStateVisualLayers.Base:
          butterfly: Rainbow
  - type: DamageStateVisuals
    states:
      Alive:
        Base: butterfly
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Extractable
    grindableSolutionName: food
  - type: SolutionContainerManager
    solutions:
      food:
        reagents:
        - ReagentId: UncookedAnimalProteins
          Quantity: 1
  - type: Butcherable
    spawned:
    - id: null # Should give nothing when you butcher it so we set the item id it needs to spawn to null
  - type: Item
    size: Tiny
  - type: Tag
    tags:
    - Trash
  - type: Bloodstream
    bloodReagent: InsectBlood
    bloodMaxVolume: 0.1
  - type: MobPrice
    price: 50
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTypeTrigger
        damageType: Blunt
        damage: 20
      behaviors:
      - !type:GibBehavior
        recursive: false

- type: entity
  name: cow
  parent: SimpleMobBase
  id: MobCow
  description: Moo.
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: cow
      sprite: Mobs/Animals/cow.rsi
  - type: Tag
    tags:
    - DoorBumpOpener
    - Cow
  - type: Reproductive
    partnerWhitelist:
      tags:
      - Cow
    offspring:
    - id: MobCow
  - type: ReproductivePartner
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.40
        density: 400
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: cow
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: SolutionContainerManager
    solutions:
      udder:
        maxVol: 250
        reagents:
        - ReagentId: Milk
          Quantity: 30
  - type: Udder
    reagentId: Milk
    quantityPerUpdate: 25
    growthDelay: 30
  - type: ExaminableHunger
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 5
  - type: Grammar
    attributes:
      gender: female # Here because of UdderComponent
  - type: InteractionPopup
    successChance: 0.7
    interactDelay: 2 # Avoids overlapping SFX due to spam - these SFX are a little longer than the typical 1 second.
    interactSuccessString: petting-success-soft-floofy
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/cow_moo.ogg
  - type: Perishable
    molsPerSecondPerUnitMass: 0.0015
  - type: NpcFactionMember
    factions:
    - Passive
  - type: Body
    prototype: AnimalRuminant
  - type: HTN
    rootTask:
      task: RuminantCompound
  - type: GuideHelp
    guides:
    - Chef
    - FoodRecipes

- type: entity
  name: crab
  parent: SimpleMobBase
  id: MobCrab
  description: A folk legend goes around that his claw snaps spacemen out of existence over distasteful remarks. Be polite and tolerant for your own safety.
  components:
  - type: VentCrawler # goobstation - Ventcrawl
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: crab
      sprite: Mobs/Animals/crab.rsi
  - type: SpriteMovement
    movementLayers:
      movement:
        state: crab-moving
    noMovementLayers:
      movement:
        state: crab
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 5
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Speech
    speechVerb: Arachnid
    speechSounds: Arachnid
    allowedEmotes: ['Click', 'Chitter']
  - type: DamageStateVisuals
    states:
      Alive:
        Base: crab
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeatCrab
      amount: 2
  - type: InteractionPopup
    successChance: 0.5
    interactSuccessString: petting-success-crab
    interactFailureString: petting-failure-crab
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Voice/Arachnid/arachnid_chitter.ogg
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Crab
    understands:
    - Crab
  - type: Bloodstream
    bloodMaxVolume: 50
    bloodReagent: CopperBlood
  - type: Tag
    tags:
    - VimPilot
  - type: HTN
    rootTask:
      task: RuminantCompound
  - type: Body
    prototype: AnimalHemocyanin

- type: entity
  name: goat
  parent: SimpleMobBase
  id: MobGoat
  description: Her spine consists of long sharp segments, no wonder she is so grumpy.
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: goat
      sprite: Mobs/Animals/goat.rsi
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 150
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Tag
    tags:
    # let moths eat wool directly
    - ClothMade
    - DoorBumpOpener
    - Goat
  - type: Reproductive
    partnerWhitelist:
      tags:
      - Goat
    offspring:
    - id: MobGoat
  - type: ReproductivePartner
  - type: Appearance
  - type: DamageStateVisuals
    states:
      Alive:
        Base: goat
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: SolutionContainerManager
    solutions:
      udder:
        maxVol: 250
        reagents:
        - ReagentId: MilkGoat
          Quantity: 30
      wool:
        maxVol: 250
  - type: Udder
    reagentId: MilkGoat
    quantityPerUpdate: 25
    growthDelay: 20
  - type: ExaminableHunger
  - type: Wooly
  - type: Food
    solution: wool
    requiresSpecialDigestion: true
    # Wooly prevents eating wool deleting the goat so its fine
    requireDead: false
  - type: FlavorProfile
    flavors:
    - fiber
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 4
  - type: Grammar
    attributes:
      gender: female # Here because of UdderComponent
  - type: Speech
    speechSounds: Goat
    speechVerb: Goat
  - type: Vocal
    sounds:
      Female: Goat
      Male: Goat
      Unsexed: Goat
  - type: BleatingAccent
  - type: InteractionPopup
    successChance: 0.2
    interactSuccessString: petting-success-goat
    interactFailureString: petting-failure-goat
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/goat_bah.ogg
  - type: NpcFactionMember
    factions:
    - Passive
  - type: Body
    prototype: AnimalRuminant
  - type: NPCRetaliation
    attackMemoryLength: 5
  - type: FactionException
  - type: HTN
    rootTask:
      task: RuminantHostileCompound

# Note that we gotta make this bitch vomit someday when you feed it anthrax or sumthin. Needs to be a small item thief too and aggressive if attacked.
- type: entity
  name: goose
  parent: SimpleMobBase
  id: MobGoose
  description: Its stomach and mind are an enigma beyond human comprehension.
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: goose
      sprite: Mobs/Animals/goose.rsi
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 25
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: goose
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeatChicken
      amount: 2
  - type: InteractionPopup # TODO: Make it so there's a separate chance to make certain animals outright hostile towards you.
    successChance: 0.1 # Yeah, good luck with that.
    interactSuccessString: petting-success-goose
    interactFailureString: petting-failure-goose
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/goose_honk.ogg
  - type: Bloodstream
    bloodMaxVolume: 100
  - type: NpcFactionMember
    factions:
    - Passive

- type: entity
  name: gorilla
  parent: [ SimpleMobBase, MobCombat ]
  id: MobGorilla
  description: Smashes, roars, looks cool. Don't stand near one.
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: crawling
      sprite: Mobs/Animals/gorilla.rsi
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.48
        density: 200
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: crawling
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 4
  - type: Bloodstream
    bloodMaxVolume: 300
    # if you fuck with the gorilla he will harambe you
  - type: MeleeWeapon
    soundHit:
      collection: Punch
    damage:
      types:
        Blunt: 30 # Goob edit
    animation: WeaponArcFist
  - type: NPCRetaliation
  - type: FactionException
  - type: NpcFactionMember
    factions:
    - Passive
  - type: HTN
    rootTask:
      task: SimpleHostileCompound
  - type: MobThresholds # Goobstation
    thresholds:
      0: Alive
      120: Critical
      220: Dead
  - type: SlowOnDamage # Goobstation
    speedModifierThresholds:
      80: 0.7
      100: 0.5

- type: entity
  name: kangaroo
  parent:
  - SimpleMobBase
  - MobCombat
  - StripableInventoryBase
  id: MobKangaroo
  description: A large marsupial herbivore. It has powerful hind legs, with nails that resemble long claws.
  components:
  - type: MovementSpeedModifier
    baseWalkSpeed: 3.5
    baseSprintSpeed: 4.5
  - type: Sprite
    drawdepth: Mobs
    layers:
      - map: ["enum.DamageStateVisualLayers.Base"]
        state: kangaroo
        sprite: Mobs/Animals/kangaroo.rsi
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 130
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Physics
  - type: Inventory
    speciesId: kangaroo
    templateId: kangaroo
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Kangaroo
    understands:
    - Kangaroo
  - type: Butcherable
    spawned:
    - id: FoodMeat
  - type: DamageStateVisuals
    states:
      Alive:
        Base: kangaroo
      # SKIPPY NO!
      Critical:
        Base: kangaroo-crit
      Dead:
        Base: kangaroo-dead
  - type: Tag
    tags:
    - DoorBumpOpener
    - FootstepSound
  - type: GhostRole
    prob: 0.25
    name: ghost-role-information-kangaroo-name
    description: ghost-role-information-kangaroo-description
    rules: ghost-role-information-nonantagonist-rules
  - type: GhostTakeoverAvailable
  - type: Vocal
    sounds:
      Unsexed: Kangaroo
  - type: Puller
    needsHands: false
  - type: StaminaDamageOnHit
    damage: 8 #Stam damage values seem a bit higher than regular damage because of the decay, etc
    # This needs to be moved to boxinggloves
    #knockdownSound: /Audio/Weapons/boxingbell.ogg
  - type: MeleeWeapon
    attackRate: 1.5
    damage:
      types:
        Blunt: 0.4
    soundHit:
      collection: BoxingHit
    animation: WeaponArcFist
  - type: NPCRetaliation
    attackMemoryLength: 10
  - type: FactionException
  - type: NpcFactionMember
    factions:
    - Passive
  - type: HTN
    rootTask:
      task: SimpleHostileCompound

- type: entity
  name: boxing kangaroo
  parent: MobKangaroo
  id: MobBoxingKangaroo
  components:
  - type: Loadout
    prototypes: [ BoxingKangarooGear ]
  - type: NpcFactionMember
    factions:
    - SimpleHostile

- type: entity
  name: genetic ancestor
  id: MobBaseAncestor
  parent: [SimpleMobBase, StripableInventoryBase, BaseMobDisgust] # Goob edit
  description: The genetic bipedal ancestor of... Uh... Something. Yeah, there's definitely something on the station that descended from whatever this is.
  abstract: true
  components:
  - type: VentCrawler # goobstation - Ventcrawl
    allowInventory: false
  - type: CombatMode
  # Shitmed Change Start
  - type: Targeting
  - type: HumanoidAppearance
    species: Monkey
  # Shitmed Change End
  - type: Inventory
    templateId: monkey
    speciesId: monkey
  - type: Deathgasp
    prototype: MonkeyDeathgasp
  - type: Cuffable
  - type: RotationVisuals
    defaultRotation: 90
    horizontalRotation: 90
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 80
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Stripping
  - type: Sprite
    drawdepth: Mobs
    layers:
  # Shitmed Change Start
    - map: [ "enum.HumanoidVisualLayers.Chest" ]
    - map: [ "enum.HumanoidVisualLayers.Groin" ]
    - map: [ "enum.HumanoidVisualLayers.Head" ]
    - map: [ "enum.HumanoidVisualLayers.Snout" ]
    - map: [ "enum.HumanoidVisualLayers.Eyes" ]
    - map: [ "enum.HumanoidVisualLayers.RArm" ]
    - map: [ "enum.HumanoidVisualLayers.LArm" ]
    - map: [ "enum.HumanoidVisualLayers.RLeg" ]
    - map: [ "enum.HumanoidVisualLayers.LLeg" ]
    - state: monkey_skinned # Goobstation - Fuck pun-pun
      sprite: /Textures/Mobs/Animals/monkey.rsi
      visible: false
      map: [ "enum.ToggleableVisuals.Layer" ]
    - map: ["jumpsuit"]
    - map: ["enum.HumanoidVisualLayers.LFoot"]
    - map: ["enum.HumanoidVisualLayers.RFoot"]
    - map: ["enum.HumanoidVisualLayers.LHand"]
    - map: ["enum.HumanoidVisualLayers.RHand"]
    - map: ["enum.HumanoidVisualLayers.Handcuffs"]
      color: "#ffffff"
      sprite: Objects/Misc/handcuffs.rsi
      state: body-overlay-2
      visible: false
    - map: [ "gloves" ]
    - map: [ "shoes" ]
    - map: [ "ears" ]
    - map: [ "id" ]
    - map: [ "outerClothing" ]
    - map: [ "eyes" ]
    - map: [ "belt" ]
    - map: [ "neck" ]
    - map: [ "back" ]
    - map: [ "enum.HumanoidVisualLayers.FacialHair" ]
    - map: [ "enum.HumanoidVisualLayers.HeadSide" ]
    - map: [ "maskalt" ]
    - map: [ "enum.HumanoidVisualLayers.Hair" ]
    - map: [ "mask" ]
    - map: [ "enum.HumanoidVisualLayers.HeadTop" ]
    - map: [ "enum.HumanoidVisualLayers.Tail" ]
    - map: [ "head" ]
    - map: [ "pocket1" ]
    - map: [ "pocket2" ]
  # Shitmed Change End
  - type: Hands
  - type: ComplexInteraction
  - type: GenericVisualizer
    visuals:
      enum.CreamPiedVisuals.Creamed:
        clownedon:
          True: {visible: true}
          False: {visible: false}
      enum.ToggleableVisuals.Enabled: # Goobstation - Skinnable monkey
        enum.ToggleableVisuals.Layer:
          True: { visible: true }
          False: { visible: false }
  - type: Body # Shitmed Change
    bodyType: Complex
    prototype: Monkey
    requiredLegs: 2
  - type: CreamPied
  - type: FireVisuals
    sprite: Mobs/Effects/onfire.rsi
    normalState: Monkey_burning
  - type: InteractionPopup
    successChance: 0.9
    interactSuccessString: petting-success-monkey
    interactFailureString: petting-failure-monkey
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/ferret_happy.ogg
    interactFailureSound:
      path: /Audio/Items/wirecutter.ogg
  - type: MeleeWeapon
    soundHit:
      path: /Audio/Effects/bite.ogg
    angle: 30
    animation: WeaponArcBite
    damage:
      types:
        Blunt: 3
        Piercing: 3
  - type: Butcherable
    butcheringType: Spike
    spawned:
    - id: FoodMeat
      amount: 3
  - type: Puller
    needsHands: false
  - type: CanHostGuardian
  - type: NPCRetaliation
    attackMemoryLength: 10
  # Goobstation
  - type: GroupRetaliation
    range: 8
  - type: FactionException
  - type: NpcFactionMember
    factions:
      - Passive
      - Monkey  # Goob Balloons Edit
  - type: HTN
    rootTask:
      task: SimpleHostileCompound
  - type: IdExaminable
  - type: Tag
    tags:
    - VimPilot
    - DoorBumpOpener
    - AnomalyHost
  - type: Reactive
    groups:
      Flammable: [ Touch ]
      Extinguish: [ Touch ]
    reactions:
    - reagents: [ Water, SpaceCleaner ]
      methods: [ Touch ]
      effects:
      - !type:WashCreamPieReaction
  - type: LayingDown # Goobstation
  - type: Vocal # Goobstation
    sounds:
      Male: MonkeyMode
      Female: MonkeyMode
      Unsexed: MonkeyMode
    wilhelmProbability: 0.001
  - type: Consciousness
    hasPainScreams: false
    threshold: 70
    cap: 140
  - type: DiseaseCarrier # Goobstation

- type: entity
  name: monkey
  id: MobMonkey
  parent: MobBaseAncestor
  description: New church of neo-darwinists actually believe that EVERY animal evolved from a monkey. Tastes like pork, and killing them is both fun and relaxing.
  components:
  - type: NameIdentifier
    group: Monkey
  - type: Speech
    speechSounds: Monkey
    speechVerb: Monkey
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Monkey
    understands:
    - Monkey
    - Kobold
  - type: SentienceTarget
    flavorKind: station-event-random-sentience-flavor-primate
  - type: AlwaysRevolutionaryConvertible
  - type: GhostRole
    prob: 0.05
    makeSentient: true
    name: ghost-role-information-monkey-name
    description: ghost-role-information-monkey-description
    rules: ghost-role-information-freeagent-rules # Goobstation - - remove: 1984
    mindRoles:
    - MindRoleGhostRoleFreeAgent
  - type: GhostTakeoverAvailable
  - type: Skinnable # Goobstation - Fuck pun-pun
  - type: Clumsy
    gunShootFailDamage:
      types:
        Blunt: 5
        Piercing: 4
      groups:
        Burn: 3
    catchingFailDamage:
      types:
        Blunt: 1
    clumsySound:
      path: /Audio/Animals/monkey_scream.ogg

- type: entity
  name: monkey
  id: MobBaseSyndicateMonkey
  parent: MobBaseAncestor
  description: New church of neo-darwinists actually believe that EVERY animal evolved from a monkey. Tastes like pork, and killing them is both fun and relaxing.
  suffix: syndicate base
  components:
  - type: NameIdentifier
    group: Monkey
  - type: SentienceTarget
    flavorKind: station-event-random-sentience-flavor-primate
  - type: Speech
    speechSounds: Monkey
    speechVerb: Monkey
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Monkey
    understands:
    - Monkey
    - Kobold
    - TauCetiBasic # Understanding your nukeops partners.
  - type: NpcFactionMember
    factions:
    - Syndicate
  - type: GhostRole
    prob: 0.05
    makeSentient: true
    name: ghost-role-information-monkey-name
    description: ghost-role-information-monkey-description
    rules: ghost-role-information-syndicate-reinforcement-rules
    mindRoles:
    # This is for syndicate monkeys that randomly gain sentience, thus have no summoner to team with
    - MindRoleGhostRoleSoloAntagonist
    raffle:
      settings: default
  - type: GhostTakeoverAvailable
  - type: Loadout
    prototypes: [SyndicateOperativeGearMonkey]

- type: entity
  id: MobMonkeySyndicateAgent
  parent: MobBaseSyndicateMonkey
  suffix: syndicate agent
  components:
    # make the player a traitor once its taken
  - type: VentCrawler # goobstation - Ventcrawl
  - type: AutoTraitor
    profile: TraitorReinforcement

- type: entity
  id: MobMonkeySyndicateAgentNukeops # Reinforcement exclusive to nukeops uplink
  parent: MobBaseSyndicateMonkey
  suffix: NukeOps
  components:
  - type: VentCrawler # goobstation - Ventcrawl
  - type: NukeOperative

- type: entity
  name: kobold
  id: MobBaseKobold
  parent: MobBaseAncestor
  description: Cousins to the sentient race of lizard people, kobolds blend in with their natural habitat and are as nasty as monkeys; ready to pull out your hair and stab you to death.
  abstract: true
  components:
  - type: NameIdentifier
    group: Kobold
  - type: LizardAccent
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Kobold
    understands:
    - Kobold
    - Monkey
  # Shitmed Change Start
  - type: HumanoidAppearance
    species: Kobold
  - type: Body
    prototype: Kobold
    requiredLegs: 2
  # Shitmed Change End
  - type: Speech
    speechSounds: Lizard
    speechVerb: Reptilian
    allowedEmotes: ['Thump']
  - type: Vocal
    sounds:
      Male: MaleReptilian
      Female: FemaleReptilian
      Unsexed: MaleReptilian
  - type: BodyEmotes
    soundsId: ReptilianBodyEmotes
  - type: TypingIndicator
    proto: lizard
  - type: InteractionPopup
    successChance: 0.9
    interactSuccessString: petting-success-monkey
    interactFailureString: petting-failure-monkey
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/lizard_happy.ogg
    interactFailureSound:
      path: /Audio/Items/wirecutter.ogg
  - type: MobThresholds
    thresholds:
      0: Alive
      100: Critical # Goob edit
      200: Dead # Goob edit
  - type: MovementSpeedModifier
    baseWalkSpeed: 3.5
    baseSprintSpeed: 5
  - type: MeleeWeapon
    soundHit:
      collection: AlienClaw
    angle: 30
    animation: WeaponArcClaw
    damage:
      types:
        Slash: 5
        Piercing: 4
  - type: Temperature
    heatDamageThreshold: 360
    coldDamageThreshold: 285
    currentTemperature: 310.15
    specificHeat: 42
  - type: Butcherable
    butcheringType: Spike
    spawned:
    - id: FoodMeat
      amount: 2
  - type: AlwaysRevolutionaryConvertible
  - type: GhostTakeoverAvailable
  - type: SentienceTarget
    flavorKind: station-event-random-sentience-flavor-kobold
  - type: GhostRole
    prob: 0.05
    makeSentient: true
    name: ghost-role-information-kobold-name
    description: ghost-role-information-kobold-description
    rules: ghost-role-information-nonantagonist-rules

- type: entity
  name: kobold
  id: MobKobold
  parent: MobBaseKobold
  description: Cousins to the sentient race of lizard people, kobolds blend in with their natural habitat and are as nasty as monkeys; ready to pull out your hair and stab you to death.
  components:
  - type: Clumsy
    gunShootFailDamage:
      types:
        Blunt: 2
        Piercing: 7
      groups:
        Burn: 3
    catchingFailDamage:
      types:
        Blunt: 1
    clumsySound:
      path: /Audio/Voice/Reptilian/reptilian_scream.ogg

- type: entity
  id: MobBaseSyndicateKobold
  parent: MobBaseKobold
  suffix: syndicate base
  components:
  - type: MobThresholds
    thresholds:
      0: Alive
      100: Critical
      200: Dead
  - type: NpcFactionMember
    factions:
    - Syndicate
  - type: Loadout
    prototypes: [SyndicateOperativeGearMonkey]

- type: entity
  id: MobKoboldSyndicateAgent
  parent: MobBaseSyndicateKobold
  suffix: syndicate agent
  components:
    # make the player a traitor once its taken
  - type: AutoTraitor
    profile: TraitorReinforcement

- type: entity
  id: MobKoboldSyndicateAgentNukeops # Reinforcement exclusive to nukeops uplink
  parent: MobBaseSyndicateKobold
  suffix: NukeOps
  components:
  - type: NukeOperative

- type: entity
  name: guidebook monkey
  parent: MobMonkey
  categories: [ HideSpawnMenu ]
  id: MobGuidebookMonkey
  description: A hopefully helpful monkey whose only purpose in life is for you to click on. Does this count as having a monkey give you a tutorial?
  components:
    - type: GuidebookControlsTest

- type: entity
  name: mouse
  parent: SimpleMobBase
  id: MobMouse
  description: Squeak!
  components:
  - type: VentCrawler # goobstation - Ventcrawl
    enterDelay: 0.5
  - type: Body
    prototype: Mouse
  - type: GhostRole
    makeSentient: true
    allowSpeech: true
    allowMovement: true
    name: ghost-role-information-mouse-name
    description: ghost-role-information-mouse-description
    rules: ghost-role-information-freeagent-rules
    mindRoles:
    - MindRoleGhostRoleFreeAgentHarmless
  - type: GhostTakeoverAvailable
  - type: Speech
    speechSounds: Squeak
    speechVerb: SmallMob
    allowedEmotes: ['Squeak']
  - type: Sprite
    drawdepth: SmallMobs
    sprite: Mobs/Animals/mouse.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: mouse-0
  - type: SpriteMovement
    movementLayers:
      movement:
        state: mouse-moving-0
    noMovementLayers:
      movement:
        state: mouse-0
  - type: Item
    size: Tiny
    heldPrefix: 0
  - type: Clothing
    quickEquip: false
    sprite: Mobs/Animals/mouse.rsi
    equippedPrefix: 0
    slots:
    - HEAD
  - type: NpcFactionMember
    factions:
      - Mouse
  - type: HTN
    constantlyReplan: false
    rootTask:
      task: MouseCompound
  - type: Physics
  - type: FaxableObject
    insertingState: inserting_mouse
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
        density: 10 # Goob eedit
        mask:
        - SmallMobMask
        layer:
        - SmallMobLayer
  - type: MobState
  - type: Deathgasp
  - type: MobStateActions
    actions:
      Critical:
      - ActionCritSuccumb
      - ActionCritFakeDeath
      - ActionCritLastWords
  - type: MobThresholds
    thresholds:
      0: Alive
      10: Critical
      20: Dead
  - type: MovementSpeedModifier
    baseWalkSpeed : 2.5
    baseSprintSpeed : 5
  - type: DamageStateVisuals
    states:
      Alive:
        Base: mouse-0
      Critical:
        Base: dead-0
      Dead:
        Base: splat-0
  - type: Food
  - type: FlavorProfile
    flavors:
    - meaty
  - type: Thirst
    startingThirst: 25  # spawn with Okay thirst state
    thresholds:
      OverHydrated: 35
      Okay: 25
      Thirsty: 15
      Parched: 10
      Dead: 0
    baseDecayRate: 0.04
  - type: Hunger
    startingHunger: 15 # Goobstation change
    thresholds:
      Overfed: 35
      Okay: 25
      Peckish: 15
      Starving: 10
      Dead: 0
    baseDecayRate: 0.04 #Goob change
  - type: Extractable
    grindableSolutionName: food
  - type: SolutionContainerManager
    solutions:
      food:
        reagents:
        - ReagentId: UncookedAnimalProteins
          Quantity: 3
        - ReagentId: MouseBites
          Quantity: 3
      melee:
        maxVol: 5
  - type: Butcherable
    spawned:
    - id: FoodMeatRat
      amount: 1
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Mouse
    understands:
    - Mouse
  - type: Tag
    tags:
    - Trash
    - VimPilot
    - ChefPilot
    - Mouse
    - Meat
  - type: Respirator
    damage:
      types:
        Asphyxiation: 0.25
    damageRecovery:
      types:
        Asphyxiation: -0.25
  - type: Barotrauma
    damage:
      types:
        Blunt: 0.1
  - type: Vocal
    sounds:
      Male: Mouse
      Female: Mouse
      Unsexed: Mouse
    wilhelmProbability: 0.001
  # TODO: Remove CombatMode when Prototype Composition is added
  - type: CombatMode
  - type: MeleeWeapon
    altDisarm: false # Sorry mouse shove lovers.
    soundHit:
      path: /Audio/Effects/bite.ogg
    angle: 0
    animation: WeaponArcBite
    damage:
      types:
        Slash: 1 # Goobstation - LET THE HORDES ROAM!!
  - type: Bloodstream
    bloodMaxVolume: 50
    smokeImmune: true # Goobstation - prevent server lagging mouse farms
  - type: CanEscapeInventory
  - type: MobPrice
    price: 50
  - type: BadFood
  - type: NonSpreaderZombie
  - type: FireVisuals
    sprite: Mobs/Effects/onfire.rsi
    normalState: Mouse_burning
  - type: FoodSequenceElement
    sprite:
      sprite: Mobs/Animals/mouse.rsi
      state: dead-0
    entries:
      burger:
        name: food-sequence-burger-content-rat
      taco:
        name: food-sequence-content-rat
      skewer:
        name: food-sequence-content-rat
        sprite:
          sprite: Objects/Consumable/Food/skewer.rsi
          state: skewer-rat
  # <Goobstation>
  - type: NightVision
    color: "#808080"
    activateSound: null
    deactivateSound: null
  - type: SolutionRegeneration
    solution: melee
    generated:
      reagents:
      - ReagentId: MouseBites
        Quantity: 1
  - type: MeleeChemicalInjector
    transferAmount: 1
    solution: melee
  - type: GibThisGuy
    ocNames:
    - Gallagin
  - type: DodgeWideswing
    staminaRatio: 1 # mice are small so can probably evade without much stamina drain
  - type: Stamina
    critThreshold: 20
    animationThreshold: 10 # Goob edit
  - type: LayingDown
  - type: NPCRetaliation
    attackMemoryLength: 5 # stop caring fast if you don't keep hitting
  - type: GroupRetaliation
    range: 5 # slightly lower for mice
  - type: CollectiveMind
    defaultChannel: Mousemind
    channels:
    - Mousemind
  - type: FaxSlip
    slipChance: 0.3
  # does not infect you unless the mouse has any diseases, which it doesn't by default
  - type: DiseaseOnHit
    spreadParams:
      chance: 0.05 # 1984 lower chance for normal mice so creating the turboplague horde is not as strong
      power: 1
      spreadType: Blood
  - type: DiseaseCarrier
    effectImmune: true
  - type: ShowDiseaseIcons # they sense it
  - type: Destructible # Shitmed Change
    thresholds:
    - trigger:
        !type:DamageTypeTrigger
        damageType: Blunt
        damage: 100
      behaviors:
      - !type:GibBehavior
        gibContents: Skip
        recursive: false
  # </Goobstation>

- type: entity
  parent: MobMouse
  suffix: Dead
  save: false
  id: MobMouseDead
  name: mouse
  description: Squeak!
  components:
  - type: Damageable
    damage:
      types:
        Bloodloss: 6
        Asphyxiation: 4
        Slash: 7
        Blunt: 3

- type: entity
  parent: MobMouse
  id: MobMouseAdmeme
  suffix: Admeme
  components:
  # allow admeme mouse to eat pills
  - type: IgnoreBadFood
  # intended for swarms that eat pills so only temporary
  - type: TimedDespawn
    lifetime: 60
  - type: Hunger
    baseDecayRate: 10 # always hungry
    starvingSlowdownModifier: 1
  - type: Thirst
    baseDecayRate: 10 # always thirsty

- type: entity
  parent: MobMouse
  id: MobMouse1
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: mouse-1
  - type: SpriteMovement
    movementLayers:
      movement:
        state: mouse-moving-1
    noMovementLayers:
      movement:
        state: mouse-1
  - type: Clothing
    equippedPrefix: 1
  - type: DamageStateVisuals
    states:
      Alive:
        Base: mouse-1
      Critical:
        Base: dead-1
      Dead:
        Base: splat-1
  - type: Item
    size: Tiny
    heldPrefix: 1
  - type: FoodSequenceElement
    sprite:
      sprite: Mobs/Animals/mouse.rsi
      state: dead-1

- type: entity
  parent: MobMouse
  id: MobMouse2
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: mouse-2
  - type: SpriteMovement
    movementLayers:
      movement:
        state: mouse-moving-2
    noMovementLayers:
      movement:
        state: mouse-2
  - type: Clothing
    equippedPrefix: 2
  - type: DamageStateVisuals
    states:
      Alive:
        Base: mouse-2
      Critical:
        Base: dead-2
      Dead:
        Base: splat-2
  - type: Item
    size: Tiny
    heldPrefix: 2
  - type: FoodSequenceElement
    sprite:
      sprite: Mobs/Animals/mouse.rsi
      state: dead-2

- type: entity
  name: cancer mouse
  description: Toxic. Squeak!
  parent: MobMouse
  id: MobMouseCancer
  components:
  - type: Sprite
    color: LightGreen
  - type: PointLight
    color: LightGreen
    radius: 5
    energy: 5
    netsync: false
  - type: RadiationSource
    intensity: 0.3
  - type: Bloodstream
    bloodReagent: UnstableMutagen
  - type: SolutionContainerManager
    solutions:
      food:
        reagents:
        - ReagentId: UncookedAnimalProteins
          Quantity: 3
        - ReagentId: Uranium
          Quantity: 10
  - type: Butcherable
    spawned:
    - id: FoodMeatRat
      amount: 1
    - id: SheetUranium1
      amount: 1
  - type: Damageable
    damageContainer: Biological
    damageModifierSet: Zombie

- type: entity
  name: lizard #Weh
  parent: SimpleMobBase
  id: MobLizard
  description: A harmless dragon.
  components:
  - type: MovementSpeedModifier
    baseWalkSpeed: 2
    baseSprintSpeed: 3
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: lizard
      sprite: Mobs/Animals/lizard.rsi
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
        density: 50
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: lizard
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeatLizard
      amount: 1
  - type: InteractionPopup
    successChance: 0.3
    interactSuccessString: petting-success-reptile
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/lizard_happy.ogg
  - type: Bloodstream
    bloodMaxVolume: 150
  - type: Damageable
    damageContainer: Biological
    damageModifierSet: Scale
  - type: Tag
    tags:
    - VimPilot


- type: entity
  name: slug
  parent: SimpleMobBase
  id: MobSlug
  description: And they called this a lizard?
  components:
  - type: VentCrawler # goobstation - Ventcrawl
  - type: MovementSpeedModifier
    baseWalkSpeed : 2
    baseSprintSpeed : 3
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: slug
      sprite: Mobs/Animals/slug.rsi
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
        density: 5
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: slug
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 1
  - type: InteractionPopup
    successChance: 0.3
    interactSuccessString: petting-success-generic
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
  - type: Bloodstream
    bloodMaxVolume: 50

- type: entity
  name: frog
  parent: SimpleMobBase
  id: MobFrog
  description: Hop hop hop. Lookin' moist.
  components:
  - type: VentCrawler # goobstation - Ventcrawl
  - type: MovementSpeedModifier
    baseWalkSpeed: 3
    baseSprintSpeed: 6
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: frog
      sprite: Mobs/Animals/frog.rsi
  - type: SpriteMovement
    movementLayers:
      movement:
        state: frog-moving
    noMovementLayers:
      movement:
        state: frog
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
        density: 5
        mask:
        - SmallMobMask
        layer:
        - SmallMobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: frog
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 1
  - type: InteractionPopup
    successChance: 0.6
    interactSuccessString: petting-success-frog
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/frog_ribbit.ogg
  - type: Bloodstream
    bloodMaxVolume: 50
  - type: Tag
    tags:
    - VimPilot
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTypeTrigger
        damageType: Blunt
        damage: 60
      behaviors:
      - !type:GibBehavior
        recursive: false

# Would be cool to have some functionality for the parrot to be able to sit on stuff
- type: entity
  parent: [ SimpleMobBase, FlyingMobBase ]
  id: MobParrotBase
  abstract: true
  description: Infiltrates your domain, spies on you, and somehow still a cool pet.
  components:
  - type: MovementSpeedModifier
    baseWalkSpeed : 2.5
    baseSprintSpeed : 6
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: parrot
      sprite: Mobs/Animals/parrot/parrot.rsi
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.25
        density: 10
        mask:
        - FlyingMobMask
        layer:
        - FlyingMobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: parrot
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 1
  - type: Speech
    speechSounds: Parrot
    speechVerb: Parrot
  - type: Vocal
    sounds:
      Unsexed: Parrot
  - type: ParrotAccent
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - TauCetiBasic
    understands:
    - TauCetiBasic
  - type: ActiveListener
  - type: Vocalizer
  - type: RadioVocalizer
  - type: ParrotListener
  - type: ParrotMemory
  - type: Inventory
    templateId: parrot
    speciesId: parrot
    # transparent displacement map to hide the headset. this should be an animated displacement map to follow the parrot
    # as it bobs up and down, but this in turn needs some way to change the displacement map on inventory entities when
    # the parrot dies, otherwise the visuals will be broken
    displacements:
      ears:
        sizeMaps:
          32:
            sprite: Mobs/Animals/parrot/displacement.rsi
            state: ears
  - type: InventorySlots
  - type: Strippable
  - type: UserInterface
    interfaces:
      enum.StrippingUiKey.Key:
        type: StrippableBoundUserInterface
  - type: InteractionPopup
    successChance: 0.6
    interactSuccessString: petting-success-bird
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/parrot_raught.ogg
  - type: Bloodstream
    bloodMaxVolume: 50

- type: entity
  name: parrot
  parent: MobParrotBase
  id: MobParrot
  components:
  - type: ParrotAccent # regular parrots have a parrotaccent. Polly is special and does not

- type: entity
  name: penguin
  parent: SimpleMobBase
  id: MobPenguin
  description: Their lives are constant pain due to their inner-body knees.
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: penguin
      sprite: Mobs/Animals/penguin.rsi
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.25
        density: 100
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: penguin
      Critical:
        Base: penguin_dead
      Dead:
        Base: penguin_dead
  - type: Butcherable
    spawned:
    - id: FoodMeatPenguin
      amount: 3
  - type: InteractionPopup
    successChance: 0.5
    interactSuccessString: petting-success-bird
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/penguin_squawk.ogg
  - type: Tag
    tags:
    - VimPilot
  - type: NpcFactionMember
    factions:
    - Passive
  - type: Temperature
    heatDamageThreshold: 335
    coldDamageThreshold: 230
    currentTemperature: 310.15
    specificHeat: 46
    coldDamage:
      types:
        Cold : 0.05 #per second, scales with temperature & other constants
    heatDamage:
      types:
        Heat : 0.2 #per second, scales with temperature & other constants
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks: [Penguin]
    understands: [Penguin]

- type: entity
  name: grenade penguin
  parent: [ MobPenguin, MobCombat, BaseSyndicateContraband ]
  id: MobGrenadePenguin
  description: A small penguin with a grenade strapped around its neck. Harvested by the Syndicate from icy shit-hole planets.
  components:
  - type: MovementSpeedModifier
    baseWalkSpeed: 3
    baseSprintSpeed: 5
  - type: InputMover
  - type: MobMover
  - type: HTN
    rootTask:
      task: SimpleHostileCompound
  - type: NpcFactionMember
    factions:
    - Syndicate
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: penguin
      sprite: Mobs/Animals/grenadepenguin.rsi
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.25
        density: 25
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: penguin
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: MeleeWeapon
    angle: 0
    animation: WeaponArcBite
    damage:
      groups:
        Brute: 5
  - type: Item
    size: Normal
    sprite: Mobs/Animals/grenadepenguin.rsi
  - type: OnUseTimerTrigger
    delay: 10
    beepSound:
      path: /Audio/Weapons/Guns/MagOut/pistol_magout.ogg #funny sfx use
      params:
        volume: -2
    beepInterval: 1
  - type: Explosive
    explosionType: Default
    maxIntensity: 20
    intensitySlope: 20
    totalIntensity: 225
  - type: ExplodeOnTrigger
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTrigger
        damage: 50
      behaviors:
      - !type:ExplodeBehavior

  # I have included a snake_hiss.ogg sound file so if you want to use that be my guest
- type: entity
  name: snake
  parent: SimpleMobBase
  id: MobSnake
  description: Hissss! Bites aren't poisonous.
  components:
  - type: VentCrawler # goobstation - Ventcrawl
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: snake
      sprite: Mobs/Animals/snake.rsi
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.25
        density: 10
        mask:
        - SmallMobMask
        layer:
        - SmallMobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: snake
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeatSnake
      amount: 1
  - type: InteractionPopup
    successChance: 0.6
    interactSuccessString: petting-success-reptile
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
  - type: Bloodstream
    bloodMaxVolume: 50
  - type: Damageable
    damageContainer: Biological
    damageModifierSet: Scale
  - type: LanguageKnowledge # Einstein Engines - Language
    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.
- type: entity
  parent: [ SimpleMobBase, MobCombat ]
  id: MobSpiderBase
  abstract: true
  components:
  - type: VentCrawler # goobstation - Ventcrawl
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 130
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Butcherable
    spawned:
    - id: FoodMeatSpider
      amount: 2
  - type: CombatMode
  - type: Body
    prototype: AnimalHemocyanin
  - type: MobThresholds
    thresholds:
      0: Alive
      90: Dead
  - type: SolutionContainerManager
    solutions:
      melee:
        maxVol: 30
  - type: SolutionRegeneration
    solution: melee
    generated:
      reagents:
      - ReagentId: Mechanotoxin
        Quantity: 1
  - type: MeleeChemicalInjector
    transferAmount: 0.75
    solution: melee
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Xeno
    understands:
    - Xeno
  - type: InteractionPopup
    successChance: 0.5
    interactSuccessString: petting-success-tarantula
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/snake_hiss.ogg
  - type: NoSlip
  - type: Spider
  - type: IgnoreSpiderWeb
  - type: Bloodstream
    bloodMaxVolume: 150
    bloodReagent: CopperBlood
  - type: Speech
    speechVerb: Arachnid
    speechSounds: Arachnid
    allowedEmotes: ['Click', 'Chitter']
  - type: Vocal
    sounds:
      Male: UnisexArachnid
      Female: UnisexArachnid
      Unsexed: UnisexArachnid
  - type: TypingIndicator
    proto: spider
  - type: Tag
    tags:
    - DoorBumpOpener
    - FootstepSound
  - type: Prying # Open door from xeno.yml.
    pryPowered: true
    force: true
    speedModifier: 1.5
    useSound:
      path: /Audio/Items/crowbar.ogg
  - type: UseDelay # Goobstation - For insta prying
    delay: 1
  - type: PassiveDamage # Slight passive regen. Assuming one damage type, comes out to about 4 damage a minute from base.yml.
    allowedStates:
    - Alive
    damageCap: 89
    damage:
      types:
        Poison: -0.07
      groups:
        Brute: -0.07
        Burn: -0.07
  - type: NightVision # Goobstation - Nigthvision
    color: "#808080"
    activateSound: null
    deactivateSound: null

- type: entity
  parent: MobSpiderBase
  id: MobSpiderAngryBase
  abstract: true
  components:
  - type: NpcFactionMember
    factions:
      - Xeno
  - type: InputMover
  - type: MobMover
  - type: HTN
    rootTask:
      task: SimpleHostileCompound
  - type: GhostRole
    makeSentient: true
    name: ghost-role-information-giant-spider-name
    description: ghost-role-information-giant-spider-description
    rules: ghost-role-information-giant-spider-rules
    mindRoles:
    - MindRoleGhostRoleTeamAntagonist
    raffle:
      settings: short
  - type: GhostTakeoverAvailable

- type: entity
  name: tarantula
  parent: MobSpiderBase
  id: MobGiantSpider
  description: Widely recognized to be the literal worst thing in existence.
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: tarantula
      sprite: Mobs/Animals/spider.rsi
  - type: SpriteMovement
    movementLayers:
      movement:
        state: tarantula-moving
    noMovementLayers:
      movement:
        state: tarantula
  - type: DamageStateVisuals
    states:
      Alive:
        Base: tarantula
      Critical:
        Base: tarantula_dead
      Dead:
        Base: tarantula_dead
  - type: MeleeWeapon
    altDisarm: false
    angle: 0
    animation: WeaponArcBite
    soundHit:
      path: /Audio/Effects/bite.ogg
    damage:
      types:
        Piercing: 6

- type: entity
  parent:
  - MobSpiderAngryBase
  - MobGiantSpider
  id: MobGiantSpiderAngry

- type: entity
  name: clown spider
  parent: MobSpiderAngryBase
  id: MobClownSpider
  description: Combines the two most terrifying things in existence, spiders and clowns.
  components:
    - type: Sprite
      drawdepth: Mobs
      layers:
      - map: ["enum.DamageStateVisualLayers.Base"]
        state: clown
        sprite: Mobs/Animals/clownspider.rsi
    - type: Butcherable
      spawned:
        - id: MaterialBananium1
          amount: 1
    - type: DamageStateVisuals
      states:
        Alive:
          Base: clown
        Critical:
          Base: dead
        Dead:
          Base: dead
    - type: MobThresholds
      thresholds:
        0: Alive
        180: Dead
    - type: Spider
      webPrototype: SpiderWebClown
    - type: MeleeWeapon
      altDisarm: false
      angle: 0
      animation: WeaponArcBite
      soundHit:
        path: /Audio/Effects/bite.ogg
      damage:
        types:
          Piercing: 8
    - type: FootstepModifier
      footstepSoundCollection:
        collection: FootstepClownFast
    - type: Speech
      speechVerb: Cluwne
    - type: Bloodstream
      bloodMaxVolume: 150
      bloodReagent: Laughter

- type: entity
  name: wizard spider
  parent: MobGiantSpider
  id: MobGiantSpiderWizard
  description: This spider looks a little magical
  suffix: Wizard
  components:
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Universal # Should allow them to understand everything and speak it too. Might need to change this.
    understands:
    - Universal

- type: entity
  name: possum
  parent: [SimpleMobBase, StripableInventoryBase]
  id: MobPossum
  description: '"O Possum! My Possum!" -- Walt Whitman, 1865'
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Animals/possum.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: possum
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 50
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Inventory
    speciesId: possum
    templateId: pet
  - type: DamageStateVisuals
    states:
      Alive:
        Base: possum
      Critical:
        Base: possum_dead
      Dead:
        Base: possum_dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 3
  - type: InteractionPopup
    successChance: 0.2 # Low when undomesticated.
    interactSuccessString: petting-success-possum # Possums don't really make much noise when they're happy. They make clicking noises as a mating call, but that is NOT the same thing!
    interactFailureString: petting-failure-possum
    interactFailureSound:
      path: /Audio/Animals/cat_hiss.ogg # This sound effect is intended for generic hissing. For easy reference it's named after the animal it came from IRL.
  - type: Grammar
    attributes:
      gender: epicene
  - type: Tag
    tags:
    - VimPilot
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Hissing
    understands:
    - Hissing

- type: entity
  name: possum
  parent: MobPossum
  suffix: Old sprite
  id: MobPossumOld
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Animals/possum_old.rsi
    layers:
    - map: [ "enum.DamageStateVisualLayers.Base" ]
      state: possum_old
  - type: DamageStateVisuals
    states:
      Alive:
        Base: possum_old
      Critical:
        Base: possum_dead_old
      Dead:
        Base: possum_dead_old

- type: entity
  name: raccoon
  parent: [SimpleMobBase, StripableInventoryBase]
  id: MobRaccoon
  description: Trash panda!
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Animals/raccoon.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: raccoon
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 50
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Inventory
    speciesId: possum #close enough
    templateId: pet
  - type: DamageStateVisuals
    states:
      Alive:
        Base: raccoon
      Critical:
        Base: raccoon_dead
      Dead:
        Base: raccoon_dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 3
  - type: InteractionPopup
    successChance: 0.2 # Low when undomesticated.
    interactSuccessString: petting-success-soft-floofy
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/raccoon_chatter.ogg
  - type: Grammar
    attributes:
      gender: epicene
  - type: Tag
    tags:
    - VimPilot
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Hissing
    understands:
    - Hissing

- type: entity
  name: fox
  parent: [SimpleMobBase, StripableInventoryBase]
  id: MobFox
  description: They're a fox.
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Animals/fox.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: fox
  - type: SpriteMovement
    movementLayers:
      movement:
        state: fox-moving
    noMovementLayers:
      movement:
        state: fox
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 50 #They actually are pretty light, I looked it up
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Inventory
    speciesId: fox
    templateId: pet
  - type: DamageStateVisuals
    states:
      Alive:
        Base: fox
      Critical:
        Base: fox_dead
      Dead:
        Base: fox_dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 3
  - type: InteractionPopup
    successChance: 0.5
    interactSuccessString: petting-success-soft-floofy
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      collection: Fox
  - type: Grammar
    attributes:
      gender: epicene
  - type: Bloodstream
    bloodMaxVolume: 100
  - type: MeleeWeapon
    angle: 0
    animation: WeaponArcBite
    soundHit:
      path: /Audio/Effects/bite.ogg
    damage:
      types:
        Piercing: 8
  - type: NpcFactionMember
    factions:
    - Passive
  - type: NPCRetaliation
    attackMemoryLength: 10
  - type: HTN
    rootTask:
      task: RuminantHostileCompound
  - type: Tag
    tags:
    - VimPilot
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Fox
    understands:
    - Fox

- type: entity
  abstract: true
  parent: [SimpleMobBase, StripableInventoryBase]
  id: MobCorgiBase
  name: corgi
  description: Finally, a space corgi!
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Pets/corgi.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: corgi
  - type: Physics
  - type: Speech
    speechVerb: Canine
    speechSounds: Dog
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 50
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Inventory
    speciesId: dog
    templateId: pet
  - type: InteractionPopup
    interactSuccessString: petting-success-dog
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/small_dog_bark_happy.ogg
  - type: Grammar
    attributes:
      gender: epicene
  - type: MobPrice
    price: 200

- type: entity
  parent: MobCorgiBase
  id: MobCorgi
  components:
  - type: DamageStateVisuals
    states:
      Alive:
        Base: corgi
      Critical:
        Base: corgi_dead
      Dead:
        Base: corgi_dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 2
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Dog
    understands:
    - Dog
  - type: InteractionPopup
    interactSuccessString: petting-success-dog
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/small_dog_bark_happy.ogg
  - type: Grammar
    attributes:
      gender: epicene
  - type: SentienceTarget
    flavorKind: station-event-random-sentience-flavor-corgi
  - type: Tag
    tags:
    - VimPilot

- type: entity
  name: corrupted corgi
  parent: [ MobCorgi, MobCombat ]
  id: MobCorgiNarsi
  description: Ian! No!
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Pets/corgi.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: narsian
  - type: DamageStateVisuals
    states:
      Alive:
        Base: narsian
      Critical:
        Base: narsian_dead
      Dead:
        Base: narsian_dead
  - type: MeleeWeapon
    soundHit:
        path: /Audio/Effects/bite.ogg
    angle: 0
    animation: WeaponArcBite
    damage:
      types:
        Piercing: 5
        Slash: 5
  - type: InputMover
  - type: MobMover
  - type: HTN
    rootTask:
      task: SimpleHostileCompound
  - type: NpcFactionMember
    factions:
    - SimpleHostile
  - type: InteractionPopup
    successChance: 0 # Override the automatic success that would normally be inherited from MobCorgi.
    interactSuccessString: petting-success-corrupted-corgi # Normally impossible but added an easter egg just in case.
    interactFailureString: petting-failure-corrupted-corgi
  - type: Grammar
    attributes:
      gender: epicene
  - type: Bloodstream
    bloodReagent: DemonsBlood
  - type: Damageable
    damageContainer: BiologicalMetaphysical
    damageModifierSet: Infernal
  - type: Temperature
    heatDamageThreshold: 4000 #They come from hell, so..
    coldDamageThreshold: 260
    currentTemperature: 310.15
    coldDamage:
      types:
        Cold : 1 #per second, scales with temperature & other constants
    specificHeat: 42
    heatDamage:
      types:
        Heat : 1 #per second, scales with temperature & other constants

- type: entity
  name: corgi puppy
  parent: MobCorgi
  id: MobCorgiPuppy
  description: A little corgi! Aww...
  components:
  - type: VentCrawler # goobstation - Ventcrawl
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Pets/corgi.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: puppy
  - type: Inventory
    speciesId: puppy
    templateId: pet
  - type: DamageStateVisuals
    states:
      Alive:
        Base: puppy
      Critical:
        Base: puppy_dead
      Dead:
        Base: puppy_dead
  - type: Grammar
    attributes:
      gender: epicene

- type: entity
  name: cat
  parent: [SimpleMobBase, StripableInventoryBase]
  id: MobCat
  description: Feline pet, very funny.
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Pets/cat.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: cat
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 15
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Inventory
    speciesId: cat
    templateId: pet
  - type: DamageStateVisuals
    states:
      Alive:
        Base: cat
      Critical:
        Base: cat_dead
      Dead:
        Base: cat_dead
  - type: Speech
    speechSounds: Cat
    speechVerb: SmallMob
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 3
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Cat
    understands:
    - Cat
  - type: InteractionPopup
    successChance: 0.7
    interactSuccessString: petting-success-cat
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/cat_meow.ogg
  - type: MeleeWeapon
    altDisarm: false
    angle: 0
    animation: WeaponArcBite
    soundHit:
      path: /Audio/Effects/bite.ogg
    damage:
      types:
        Piercing: 5
  - type: Grammar
    attributes:
      gender: epicene
  - type: MobPrice
    price: 200
  - type: Tag
    tags:
    - VimPilot
  - type: VentCrawler # goobstation - Ventcrawl
  - type: MovementSpeedModifier
    baseWalkSpeed: 2
    baseSprintSpeed: 4

- type: entity
  name: calico cat
  id: MobCatCalico
  parent: MobCat
  description: Feline pet, very funny.
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: cat2
  - type: DamageStateVisuals
    states:
      Alive:
        Base: cat2
      Critical:
        Base: cat2_dead
      Dead:
        Base: cat2_dead

- type: entity
  name: syndicat
  id: MobCatSyndy
  parent: MobCatSpace
  description: Explosive kitten.
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: syndicat
  - type: DamageStateVisuals
    states:
      Alive:
        Base: syndicat
      Critical:
        Base: syndicat_dead
      Dead:
        Base: syndicat_dead
  - type: GhostRole
    prob: 1
    name: ghost-role-information-SyndiCat-name
    allowMovement: true
    description: ghost-role-information-SyndiCat-description
    rules: ghost-role-information-SyndiCat-rules
    mindRoles:
    - MindRoleGhostRoleTeamAntagonist
    raffle:
      settings: default
  - type: GhostTakeoverAvailable
  - type: AutoImplant
    implants:
    - MicroBombImplant
  - type: ExplosionResistance
    damageCoefficient: 0.2
  - type: NpcFactionMember
    factions:
    - Syndicate
  - type: Access
    tags:
    - NuclearOperative
    - SyndicateAgent
  - type: MeleeWeapon
    altDisarm: false
    angle: 0
    animation: WeaponArcBite
    soundHit:
      path: /Audio/Effects/bite.ogg
    damage:
      types:
        Slash: 6
        Piercing: 6
        Structural: 15
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Cat
    understands:
    - Cat
    - TauCetiBasic # Needs to understand your nukie ops.

- type: entity
  name: space cat
  id: MobCatSpace
  parent: MobCat
  description: Feline pet, prepared for the worst.
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: spacecat
  - type: DamageStateVisuals
    states:
      Alive:
        Base: spacecat
      Critical:
        Base: spacecat_dead
      Dead:
        Base: spacecat_dead
  - type: Temperature
    heatDamageThreshold: 423
    coldDamageThreshold: 0
  - type: Tag
    tags:
      - DoorBumpOpener
  - type: MovementAlwaysTouching
  - type: PressureImmunity
  - type: ProtectedFromStepTriggers
  - type: Insulated
  - type: InteractionPopup
    successChance: 0.7
    interactSuccessString: petting-success-space-cat
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/cat_meow.ogg
  - type: Respirator #It just works?
    minSaturation: 5.0

- type: entity
  name: caracal cat
  id: MobCatCaracal
  parent: MobCat
  description: Hilarious.
  components:
  - type: Sprite
    sprite: Mobs/Pets/caracal.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: caracal_flop
  - type: DamageStateVisuals
    states:
      Alive:
        Base: caracal_flop
      Critical:
        Base: caracal_dead
      Dead:
        Base: caracal_dead

- type: entity
  name: kitten
  parent: MobCat
  id: MobCatKitten
  description: Small and fluffy.
  components:
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: kitten
  - type: DamageStateVisuals
    states:
      Alive:
        Base: kitten
      Critical:
        Base: kitten_dead
      Dead:
        Base: kitten_dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 1
  - type: MobPrice
    price: 100
  - type: MeleeWeapon
    damage:
      types:
        Piercing: 3
  - type: MobThresholds
    thresholds:
      0: Alive
      25: Dead

- type: entity
  name: sloth
  parent: [SimpleMobBase, StripableInventoryBase]
  id: MobSloth
  description: Very slow animal. For people with low energy.
  components:
  - type: MovementSpeedModifier
    baseWalkSpeed : 0.5
    baseSprintSpeed : 1
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Pets/sloth.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: sloth
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 15
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Inventory
    speciesId: sloth
    templateId: pet
  - type: DamageStateVisuals
    states:
      Alive:
        Base: sloth
      Critical:
        Base: sloth_dead
      Dead:
        Base: sloth_dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 3
  - type: InteractionPopup
    successChance: 0.9
    interactSuccessString: petting-success-sloth
    interactFailureString: petting-failure-sloth
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/sloth_squeak.ogg
  - type: Grammar
    attributes:
      gender: epicene
  - type: SlowAccent
  - type: Tag
    tags:
    - VimPilot
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Hissing
    understands:
    - Hissing

- type: entity
  name: ferret
  parent: [SimpleMobBase, StripableInventoryBase]
  id: MobFerret
  description: Just a silly little guy!
  components:
  - type: Sprite
    drawdepth: Mobs
    sprite: Mobs/Pets/ferret.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: ferret
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 5
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Inventory
    speciesId: fox #close enough
    templateId: pet
  - type: DamageStateVisuals
    states:
      Alive:
        Base: ferret
      Critical:
        Base: ferret_dead
      Dead:
        Base: ferret_dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 3
  - type: InteractionPopup
    successChance: 0.8
    interactDelay: 1.5 # Avoids overlapping SFX due to spam - these SFX are a little longer than the typical 1 second.
    interactSuccessString: petting-success-soft-floofy
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/ferret_happy.ogg
  - type: Grammar
    attributes:
      gender: epicene
  - type: Tag
    tags:
    - VimPilot
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Hissing
    understands:
    - Hissing

- type: entity
  name: hamster
  parent: [ SimpleMobBase, MobCombat, StripableInventoryBase]
  id: MobHamster
  description: A cute, fluffy, robust hamster.
  components:
  - type: VentCrawler # goobstation - Ventcrawl
  - type: GhostRole
    makeSentient: true
    allowSpeech: true
    allowMovement: true
    name: ghost-role-information-hamster-name
    description: ghost-role-information-hamster-description
    rules: ghost-role-information-nonantagonist-rules
  - type: GhostTakeoverAvailable
  - type: Speech
    speechVerb: SmallMob
    speechSounds: Squeak
    allowedEmotes: ['Squeak']
  - type: Sprite
    drawdepth: SmallMobs
    sprite: Mobs/Animals/hamster.rsi
    layers:
    - map: ["enum.DamageStateVisualLayers.Base", "movement"]
      state: hamster-0
  - type: SpriteMovement
    movementLayers:
      movement:
        state: hamster-moving-0
    noMovementLayers:
      movement:
        state: hamster-0
  - type: Item
    size: Tiny
  - type: Physics
  - type: FaxableObject
    insertingState: inserting_hamster
  # Goobstation
  - type: FaxSlip
    slipChance: 0.3
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.2
        density: 12 # Goob edit
        mask:
        - SmallMobMask
        layer:
        - SmallMobLayer
  - type: MobState
  - type: Deathgasp
  - type: MobStateActions
    actions:
      Critical:
      - ActionCritSuccumb
      - ActionCritFakeDeath
      - ActionCritLastWords
  - type: MobThresholds
    thresholds:
      0: Alive
      40: Critical
      60: Dead
  - type: MovementSpeedModifier
    baseWalkSpeed : 2.5
    baseSprintSpeed : 4
  - type: Inventory
    speciesId: hamster
    templateId: hamster
  - type: DamageStateVisuals
    states:
      Alive:
        Base: hamster-0
      Critical:
        Base: dead-0
      Dead:
        Base: splat-0
  - type: Food
  - type: FlavorProfile
    flavors:
    - meaty
  - type: Hunger
    baseDecayRate: 0.3
  - type: Extractable
    grindableSolutionName: food
  - type: SolutionContainerManager
    solutions:
      food:
        reagents:
        - ReagentId: Nutriment
          Quantity: 10
        - ReagentId: Blood
          Quantity: 55
        - ReagentId: Fat
          Quantity: 5
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 1
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Mouse
    understands:
    - Mouse
  - type: Tag
    tags:
    - VimPilot
    - ChefPilot
    - Trash
    - Hamster
    - Meat
  - type: Respirator
    damage:
      types:
        Asphyxiation: 0.25
    damageRecovery:
      types:
        Asphyxiation: -0.25
  - type: Barotrauma
    damage:
      types:
        Blunt: 0.1
  - type: CombatMode
  - type: MeleeWeapon
    soundHit:
        path: /Audio/Effects/bite.ogg
    angle: 0
    animation: WeaponArcBite
    damage:
      types:
        Piercing: 2
  - type: InteractionPopup
    successChance: 0.4
    interactSuccessString: petting-success-hamster
    interactFailureString: petting-failure-hamster
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/fox_squeak.ogg
  - type: Bloodstream
    bloodMaxVolume: 60
  - type: CanEscapeInventory
    baseResistTime: 3
  - type: MobPrice
    price: 60
  - type: NonSpreaderZombie
  - type: FireVisuals
    sprite: Mobs/Effects/onfire.rsi
    normalState: Mouse_burning
  - type: FoodSequenceElement
    sprite:
      sprite: Mobs/Animals/hamster.rsi
      state: dead-0
    entries:
      burger:
        name: food-sequence-burger-content-hamster
      taco:
        name: food-sequence-content-hamster
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTypeTrigger
        damageType: Blunt
        damage: 120
      behaviors:
      - !type:GibBehavior
        recursive: false

- type: entity
  name: pig
  parent: [SimpleMobBase, StripableInventoryBase]
  id: MobPig
  description: Oink.
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: pig
      sprite: Mobs/Animals/pig.rsi
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 250
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Inventory
    speciesId: pig
    templateId: pet
  - type: Tag
    tags:
    - DoorBumpOpener
    - Pig
    - VimPilot
  - type: Reproductive
    partnerWhitelist:
      tags:
      - Pig
    offspring:
    - id: MobPig
  - type: ReproductivePartner
  - type: DamageStateVisuals
    states:
      Alive:
        Base: pig
      Critical:
        Base: dead
      Dead:
        Base: dead
  - type: Butcherable
    spawned:
    - id: FoodMeatBacon
      amount: 6
  - type: Grammar
    attributes:
      gender: epicene
  - type: InteractionPopup
    successChance: 0.7
    interactSuccessString: petting-success-pig
    interactFailureString: petting-failure-generic
    interactSuccessSpawn: EffectHearts
    interactSuccessSound:
      path: /Audio/Animals/pig_oink.ogg
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Pig
    understands:
    - Pig
  - type: SentienceTarget
    flavorKind: station-event-random-sentience-flavor-organic
  - type: NpcFactionMember
    factions:
    - Passive
  - type: HTN
    rootTask:
      task: RuminantCompound

- type: entity
  name: diona nymph
  parent: [SimpleMobBase, StripableInventoryBase]
  id: MobDionaNymph
  description: It's like a cat, only.... branch-ier.
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: nymph
      sprite: Mobs/Animals/nymph.rsi
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.35
        density: 100 # High, because wood is heavy.
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: Inventory
    speciesId: cat
    templateId: pet
  - type: Bloodstream
    bloodReagent: Sap
    bloodMaxVolume: 60
  - type: DamageStateVisuals
    states:
      Alive:
        Base: nymph
      Critical:
        Base: nymph_sleep
      Dead:
        Base: nymph_dead
  - type: Butcherable
    spawned:
    - id: MaterialWoodPlank1
      amount: 2
  - type: InteractionPopup
    successChance: 0.7
    interactSuccessString: petting-success-nymph
    interactFailureString: petting-failure-nymph
    interactSuccessSound:
      path: /Audio/Animals/nymph_chirp.ogg
  - type: MobThresholds
    thresholds:
      0: Alive
      30: Critical
      60: Dead
  - type: MovementSpeedModifier
    baseWalkSpeed : 2.5
    baseSprintSpeed : 4.5
  - type: Grammar
    attributes:
      gender: epicene
  - type: Speech
    speechVerb: Plant
    speechSounds: Alto
    allowedEmotes: ['Chirp']
  - type: Vocal
    sounds:
      Male: UnisexDiona
      Female: UnisexDiona
      Unsexed: UnisexDiona
  - type: Tag
    tags:
    - DoorBumpOpener
    - VimPilot
  - type: Emoting
  - type: BodyEmotes
    soundsId: Nymph
  - type: Reform
    actionPrototype: DionaReformAction
    reformTime: 10
    popupText: diona-reform-attempt
    reformPrototype: MobDionaReformed
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - RootSpeak
    understands:
    - RootSpeak
    - TauCetiBasic

- type: entity
  parent: MobDionaNymph
  id: MobDionaNymphAccent # No talky. For non-brain & wild nymphs
  suffix: Accent
  components:
  - type: ReplacementAccent
    accent: nymph

- type: entity
  name: reindeer buck
  parent: [ SimpleMobBase, MobCombat ]
  id: MobReindeerBuck
  description: You think it can pull a sleigh?
  components:
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: reindeer_buck
      sprite: Mobs/Animals/reindeer_buck.rsi
#  - type: SpriteMovement  # One day when this shit isnt broken as hell. For now they hoppity hop.
#    movementLayers:
#      movement:
#        state: reindeer_buck
#    noMovementLayers:
#      movement:
#        state: reindeer_buck_still
  - type: Physics
  - type: Fixtures
    fixtures:
      fix1:
        shape:
          !type:PhysShapeCircle
          radius: 0.48
        density: 200
        mask:
        - MobMask
        layer:
        - MobLayer
  - type: DamageStateVisuals
    states:
      Alive:
        Base: reindeer_buck
      Critical:
        Base: reindeer_buck_dead
      Dead:
        Base: reindeer_buck_dead
  - type: Butcherable
    spawned:
    - id: FoodMeat
      amount: 4
  - type: Bloodstream
    bloodMaxVolume: 300
    # Horns though
  - type: MeleeWeapon
    damage:
      types:
        Piercing: 22
    animation: WeaponArcFist
  - type: NPCRetaliation
  - type: FactionException
  - type: NpcFactionMember
    factions:
    - Passive
  - type: HTN
    rootTask:
      task: SimpleHostileCompound
  - type: Puller
    needsHands: false
  - type: LanguageKnowledge # Einstein Engines - Language
    speaks:
    - Deer
    understands:
    - Deer

- type: entity
  name: reindeer doe
  parent: MobReindeerBuck
  id: MobReindeerDoe
  components:
  - type: MeleeWeapon
    damage:
      types:
        Blunt: 15
    animation: WeaponArcFist
  - type: Sprite
    drawdepth: Mobs
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: reindeer_doe
      sprite: Mobs/Animals/reindeer_doe.rsi
#  - type: SpriteMovement  # One day when this shit isnt broken as hell. For now they hoppity hop.
#    movementLayers:
#      movement:
#        state: reindeer_doe
#    noMovementLayers:
#      movement:
#        state: reindeer_doe_still
  - type: DamageStateVisuals
    states:
      Alive:
        Base: reindeer_doe
      Critical:
        Base: reindeer_doe_dead
      Dead:
        Base: reindeer_doe_dead

- type: entity
  parent: MobCorgiBase
  id: MobCorgiSmart
  name: smart corgi
  description: An unusually smart dog.
  components:
  # Use corgi sprite, need to add handcuff layer
  - type: Sprite
    layers:
    - map: ["enum.DamageStateVisualLayers.Base"]
      state: corgi
    - map: [ "enum.HumanoidVisualLayers.Handcuffs" ]
      color: "#ffffff"
      sprite: Objects/Misc/handcuffs.rsi # Would do a custom dog handcuff sprite but unfortunately handcuffs have their overlay baked-in to the cuff itself so this is mostly filler
      state: body-overlay-2
      visible: false
  - type: UserInterface
    interfaces:
      enum.StrippingUiKey.Key:
        type: StrippableBoundUserInterface
      enum.StorageUiKey.Key:
        type: StorageBoundUserInterface
  # Custom inventory template
  - type: Inventory
    speciesId: dog
    templateId: SmartCorgi
    displacements:
      belt:
        sizeMaps:
          32:
            sprite: Mobs/Pets/displacements.rsi
            state: corgi_belt_displacement
      ears:
        sizeMaps:
          32:
            sprite: Mobs/Pets/displacements.rsi
            state: corgi_belt_displacement
      head:
        sizeMaps:
          32:
            sprite: Mobs/Pets/displacements.rsi
            state: corgi_head_displacement
  - type: Hands # HANDS!
  - type: Puller
  - type: Cuffable # bad dog!
  - type: BlockWriting # dogs can't write, paws unwieldy; mouth-writing is a myth
  - type: Stripping
  - type: ComplexInteraction
  # Implement custom borgi body type
  - type: Body
    prototype: SmartCorgi
  - type: RotationVisuals
    defaultRotation: 90
    horizontalRotation: 180
  - type: Grammar
    attributes:
      gender: epicene # Gender neutral
      proper: true
  - type: Tag
    tags:
    - VimPilot
    - CanPilot
    - DoorBumpOpener
  - type: StatusIcon # marks them as crew
    bounds: -0.5,-0.5,0.5,0.5
  - type: NpcFactionMember
    factions:
    - NanoTrasen
