From 895464dfba480c9ad19f04147282f019c7543d90 Mon Sep 17 00:00:00 2001 From: Enoken-crypto <68296202+Enoken-crypto@users.noreply.github.com> Date: Tue, 14 May 2024 15:07:44 +0300 Subject: [PATCH 01/18] Added xenos! Added aliens --- Content.Client/Aliens/Systems/AlienSystem.cs | 43 ++ .../Aliens/Systems/PlasmaVesselSystem.cs | 13 + Content.Client/Chat/Managers/ChatManager.cs | 6 +- .../Overlays/ShowInfectedIconsSystem.cs | 31 + .../Systems/Chat/ChatUIController.cs | 14 +- .../Chat/Controls/ChannelFilterPopup.xaml.cs | 1 + .../Chat/Controls/ChannelSelectorButton.cs | 3 +- .../Aliens/Components/AlienAcidComponent.cs | 14 + .../Components/AlienEggHatchComponent.cs | 17 + .../Components/QueenEvolutionComponent.cs | 25 + .../Aliens/Systems/AlienAcidSystem.cs | 36 + .../Aliens/Systems/AlienEggHatchSystem.cs | 51 ++ .../Aliens/Systems/AlienEvolutionSystem.cs | 60 ++ .../Aliens/Systems/AlienInfectedSystem.cs | 79 ++ .../Aliens/Systems/AlienQueenSystem.cs | 113 +++ Content.Server/Aliens/Systems/AlienSystem.cs | 133 ++++ .../Aliens/Systems/FacehuggerSystem.cs | 71 ++ .../Aliens/Systems/PlasmaVesselSystem.cs | 13 + .../Systems/PraetorianEvolutionSystem.cs | 58 ++ .../Aliens/Systems/QueenEvolutionSystem.cs | 51 ++ .../Aliens/Systems/ResinSpinnerSystem.cs | 89 +++ .../Chat/Commands/AliensayCommand.cs | 46 ++ Content.Server/Chat/Systems/ChatSystem.cs | 74 +- Content.Server/Devour/DevourSystem.cs | 1 - Content.Server/Medical/VomitActionSystem.cs | 26 + .../Components/TimedPolymorphComponent.cs | 28 + .../Polymorph/Systems/TimedPolymorphSystem.cs | 38 + .../Components/AreaSpawnerComponent.cs | 37 + .../EntitySystems/AreaSpawnerSystem.cs | 167 +++++ .../Aliens/Components/AcidMakerComponent.cs | 49 ++ .../Aliens/Components/AlienComponent.cs | 55 ++ .../Components/AlienEvolutionComponent.cs | 44 ++ .../Components/AlienInfectedComponent.cs | 47 ++ .../Aliens/Components/AlienQueenComponent.cs | 52 ++ .../Aliens/Components/AlienStalkComponent.cs | 26 + .../Aliens/Components/FacehuggerComponent.cs | 31 + .../Components/PlasmaGainModifierComponent.cs | 10 + .../Components/PlasmaTransferComponent.cs | 24 + .../Components/PlasmaVesselComponent.cs | 42 ++ .../PraetorianEvolutionComponent.cs | 25 + .../Components/ResinSpinnerComponent.cs | 70 ++ .../Components/ShowInfectedIconsComponent.cs | 14 + .../Aliens/Components/TailLashComponent.cs | 32 + .../Aliens/Systems/AcidMakerSystem.cs | 74 ++ .../Systems/SharedAlienEvolutionSystem.cs | 25 + .../Aliens/Systems/SharedAlienQueenSystem.cs | 41 ++ .../Aliens/Systems/SharedAlienStalkSystem.cs | 65 ++ .../Aliens/Systems/SharedFacehuggerSystem.cs | 85 +++ .../Systems/SharedPlasmaGainModifierSystem.cs | 17 + .../Systems/SharedPlasmaTransferSystem.cs | 63 ++ .../Systems/SharedPlasmaVesselSystem.cs | 89 +++ .../SharedPraetorianEvolutionSystem.cs | 17 + .../Systems/SharedResinSpinnerSystem.cs | 81 +++ .../Aliens/Systems/TailLashSystem.cs | 45 ++ Content.Shared/Chat/ChatChannel.cs | 4 +- Content.Shared/Chat/ChatChannelExtensions.cs | 1 + Content.Shared/Chat/ChatSelectChannel.cs | 4 +- Content.Shared/Chat/SharedChatSystem.cs | 3 +- .../Devour/Components/DevourerComponent.cs | 8 + Content.Shared/Devour/SharedDevourSystem.cs | 24 +- Content.Shared/Input/ContentKeyFunctions.cs | 1 + .../Medical/SharedVomitActionSystem.cs | 33 + .../Medical/VomitActionComponent.cs | 26 + Resources/Audio/Voice/Talk/alien.ogg | Bin 0 -> 23934 bytes Resources/Audio/Voice/Talk/alien_ask.ogg | Bin 0 -> 25811 bytes Resources/Audio/Voice/Talk/alien_exclaim.ogg | Bin 0 -> 24877 bytes Resources/Locale/en-US/abilities/alien.ftl | 59 ++ Resources/Locale/en-US/aliens/alien.ftl | 29 + Resources/Prototypes/Actions/aliens.yml | 202 ++++++ .../Prototypes/Body/Organs/Animal/xeno.yml | 80 +++ .../Body/Prototypes/Animal/xeno.yml | 51 ++ .../Mobs/Player/alien_inventory_template.yml | 21 + .../Entities/Mobs/Player/aliens.yml | 674 ++++++++++++++++++ .../Prototypes/Entities/Mobs/facehugger.yml | 84 +++ .../Entities/Objects/Misc/alien_egg.yml | 175 +++++ .../Entities/Objects/Misc/alien_weed.yml | 88 +++ .../Entities/Structures/Walls/walls.yml | 32 + .../Entities/Structures/Windows/resin.yml | 74 ++ Resources/Prototypes/Polymorphs/polymorph.yml | 104 +++ Resources/Prototypes/Voice/speech_sounds.yml | 9 + Resources/Prototypes/tags.yml | 3 + .../Mask/facehugger.rsi/equipped-MASK.png | Bin 0 -> 713 bytes .../Clothing/Mask/facehugger.rsi/meta.json | 15 + .../Alien/screen_alien.rsi/act_drop.png | Bin 0 -> 379 bytes .../Alien/screen_alien.rsi/act_resist.png | Bin 0 -> 607 bytes .../Alien/screen_alien.rsi/act_rest.png | Bin 0 -> 402 bytes .../Alien/screen_alien.rsi/act_rest0.png | Bin 0 -> 394 bytes .../Alien/screen_alien.rsi/act_throw_off.png | Bin 0 -> 413 bytes .../Alien/screen_alien.rsi/act_throw_on.png | Bin 0 -> 404 bytes .../Alien/screen_alien.rsi/chest.png | Bin 0 -> 183 bytes .../Alien/screen_alien.rsi/combat.png | Bin 0 -> 968 bytes .../Alien/screen_alien.rsi/combat_off.png | Bin 0 -> 957 bytes .../Alien/screen_alien.rsi/disarm.png | Bin 0 -> 906 bytes .../Interface/Alien/screen_alien.rsi/eyes.png | Bin 0 -> 160 bytes .../Alien/screen_alien.rsi/finder_center.png | Bin 0 -> 265 bytes .../Alien/screen_alien.rsi/finder_far.png | Bin 0 -> 637 bytes .../Alien/screen_alien.rsi/finder_med.png | Bin 0 -> 588 bytes .../Alien/screen_alien.rsi/finder_near.png | Bin 0 -> 552 bytes .../Interface/Alien/screen_alien.rsi/grab.png | Bin 0 -> 827 bytes .../Alien/screen_alien.rsi/groin.png | Bin 0 -> 176 bytes .../Alien/screen_alien.rsi/hand_l.png | Bin 0 -> 609 bytes .../Alien/screen_alien.rsi/hand_r.png | Bin 0 -> 597 bytes .../Interface/Alien/screen_alien.rsi/harm.png | Bin 0 -> 919 bytes .../Interface/Alien/screen_alien.rsi/head.png | Bin 0 -> 200 bytes .../Alien/screen_alien.rsi/health0.png | Bin 0 -> 1363 bytes .../Alien/screen_alien.rsi/health1.png | Bin 0 -> 1440 bytes .../Alien/screen_alien.rsi/health2.png | Bin 0 -> 1428 bytes .../Alien/screen_alien.rsi/health3.png | Bin 0 -> 1418 bytes .../Alien/screen_alien.rsi/health4.png | Bin 0 -> 1347 bytes .../Alien/screen_alien.rsi/health5.png | Bin 0 -> 1292 bytes .../Alien/screen_alien.rsi/health6.png | Bin 0 -> 1305 bytes .../Alien/screen_alien.rsi/health7.png | Bin 0 -> 1187 bytes .../Alien/screen_alien.rsi/health8.png | Bin 0 -> 1087 bytes .../Interface/Alien/screen_alien.rsi/help.png | Bin 0 -> 788 bytes .../Alien/screen_alien.rsi/l_arm.png | Bin 0 -> 198 bytes .../Alien/screen_alien.rsi/l_leg.png | Bin 0 -> 176 bytes .../Alien/screen_alien.rsi/leap_off.png | Bin 0 -> 653 bytes .../Alien/screen_alien.rsi/leap_on.png | Bin 0 -> 667 bytes .../Alien/screen_alien.rsi/lhandactive.png | Bin 0 -> 175 bytes .../Alien/screen_alien.rsi/meta.json | 197 +++++ .../Alien/screen_alien.rsi/mouth.png | Bin 0 -> 160 bytes .../Alien/screen_alien.rsi/nightvision0.png | Bin 0 -> 946 bytes .../Alien/screen_alien.rsi/nightvision1.png | Bin 0 -> 931 bytes .../Alien/screen_alien.rsi/pocket.png | Bin 0 -> 414 bytes .../Alien/screen_alien.rsi/power_display.png | Bin 0 -> 859 bytes .../Interface/Alien/screen_alien.rsi/pull.png | Bin 0 -> 605 bytes .../Alien/screen_alien.rsi/queen_finder.png | Bin 0 -> 840 bytes .../Alien/screen_alien.rsi/r_arm.png | Bin 0 -> 205 bytes .../Alien/screen_alien.rsi/r_leg.png | Bin 0 -> 168 bytes .../Alien/screen_alien.rsi/reserved.png | Bin 0 -> 340 bytes .../Alien/screen_alien.rsi/rhandactive.png | Bin 0 -> 175 bytes .../Alien/screen_alien.rsi/running.png | Bin 0 -> 717 bytes .../Alien/screen_alien.rsi/scroll_down.png | Bin 0 -> 362 bytes .../Alien/screen_alien.rsi/scroll_up.png | Bin 0 -> 376 bytes .../Interface/Alien/screen_alien.rsi/suit.png | Bin 0 -> 609 bytes .../Alien/screen_alien.rsi/swap_1.png | Bin 0 -> 236 bytes .../Alien/screen_alien.rsi/swap_2.png | Bin 0 -> 269 bytes .../Alien/screen_alien.rsi/template.png | Bin 0 -> 238 bytes .../Alien/screen_alien.rsi/template_frame.png | Bin 0 -> 201 bytes .../Alien/screen_alien.rsi/walking.png | Bin 0 -> 736 bytes .../Alien/screen_alien.rsi/zone_sel.png | Bin 0 -> 802 bytes .../Mobs/Aliens/Xenos/alien.rsi/Crawl.png | Bin 0 -> 705 bytes .../Xenos/alien.rsi/Drone Back Half.png | Bin 0 -> 556 bytes .../Xenos/alien.rsi/Drone Front Half.png | Bin 0 -> 1460 bytes .../Xenos/alien.rsi/Hunter Back Half.png | Bin 0 -> 556 bytes .../Xenos/alien.rsi/Hunter Front Half.png | Bin 0 -> 1428 bytes .../Xenos/alien.rsi/Hunter Stalking.png | Bin 0 -> 1857 bytes .../Xenos/alien.rsi/Praetorian Back Half.png | Bin 0 -> 610 bytes .../Xenos/alien.rsi/Praetorian Front Half.png | Bin 0 -> 1551 bytes .../Xenos/alien.rsi/Sentinel Back Half.png | Bin 0 -> 556 bytes .../Xenos/alien.rsi/Sentinel Front Half.png | Bin 0 -> 1431 bytes .../Mobs/Aliens/Xenos/alien.rsi/Stand.png | Bin 0 -> 747 bytes .../Mobs/Aliens/Xenos/alien.rsi/acid.png | Bin 0 -> 353 bytes .../Aliens/Xenos/alien.rsi/alien_medal.png | Bin 0 -> 484 bytes .../Xenos/alien.rsi/alien_medal_active.png | Bin 0 -> 357 bytes .../Mobs/Aliens/Xenos/alien.rsi/aliencuff.png | Bin 0 -> 484 bytes .../Mobs/Aliens/Xenos/alien.rsi/aliend.png | Bin 0 -> 2029 bytes .../Aliens/Xenos/alien.rsi/aliend_dead.png | Bin 0 -> 964 bytes .../Aliens/Xenos/alien.rsi/aliend_husked.png | Bin 0 -> 673 bytes .../Aliens/Xenos/alien.rsi/aliend_pounce.png | Bin 0 -> 1930 bytes .../Aliens/Xenos/alien.rsi/aliend_sleep.png | Bin 0 -> 1500 bytes .../Xenos/alien.rsi/aliend_unconscious.png | Bin 0 -> 791 bytes .../Mobs/Aliens/Xenos/alien.rsi/alienh.png | Bin 0 -> 2103 bytes .../Aliens/Xenos/alien.rsi/alienh_dead.png | Bin 0 -> 1022 bytes .../Aliens/Xenos/alien.rsi/alienh_husked.png | Bin 0 -> 711 bytes .../Aliens/Xenos/alien.rsi/alienh_pounce.png | Bin 0 -> 2030 bytes .../Aliens/Xenos/alien.rsi/alienh_sleep.png | Bin 0 -> 1611 bytes .../Xenos/alien.rsi/alienh_unconscious.png | Bin 0 -> 849 bytes .../Aliens/Xenos/alien.rsi/alienother.png | Bin 0 -> 1030 bytes .../Mobs/Aliens/Xenos/alien.rsi/alienq.png | Bin 0 -> 2286 bytes .../Aliens/Xenos/alien.rsi/alienq_dead.png | Bin 0 -> 1017 bytes .../Aliens/Xenos/alien.rsi/alienq_husked.png | Bin 0 -> 717 bytes .../Aliens/Xenos/alien.rsi/alienq_sleep.png | Bin 0 -> 840 bytes .../Xenos/alien.rsi/alienq_unconscious.png | Bin 0 -> 870 bytes .../Mobs/Aliens/Xenos/alien.rsi/aliens.png | Bin 0 -> 2360 bytes .../Aliens/Xenos/alien.rsi/aliens_dead.png | Bin 0 -> 1057 bytes .../Aliens/Xenos/alien.rsi/aliens_husked.png | Bin 0 -> 709 bytes .../Aliens/Xenos/alien.rsi/aliens_pounce.png | Bin 0 -> 2296 bytes .../Aliens/Xenos/alien.rsi/aliens_sleep.png | Bin 0 -> 1703 bytes .../Xenos/alien.rsi/aliens_unconscious.png | Bin 0 -> 893 bytes .../Mobs/Aliens/Xenos/alien.rsi/alienspit.png | Bin 0 -> 1286 bytes .../Aliens/Xenos/alien.rsi/alienspit_leap.png | Bin 0 -> 1288 bytes .../Mobs/Aliens/Xenos/alien.rsi/burst_lie.png | Bin 0 -> 683 bytes .../Aliens/Xenos/alien.rsi/burst_stand.png | Bin 0 -> 1503 bytes .../Aliens/Xenos/alien.rsi/bursted_lie.png | Bin 0 -> 269 bytes .../Aliens/Xenos/alien.rsi/bursted_stand.png | Bin 0 -> 482 bytes .../Mobs/Aliens/Xenos/alien.rsi/chitin.png | Bin 0 -> 371 bytes .../Mobs/Aliens/Xenos/alien.rsi/claw.png | Bin 0 -> 316 bytes .../Mobs/Aliens/Xenos/alien.rsi/egg.png | Bin 0 -> 853 bytes .../Aliens/Xenos/alien.rsi/egg_growing.png | Bin 0 -> 580 bytes .../Aliens/Xenos/alien.rsi/egg_hatched.png | Bin 0 -> 795 bytes .../Aliens/Xenos/alien.rsi/egg_opening.png | Bin 0 -> 3086 bytes .../Aliens/Xenos/alien.rsi/facehugger.png | Bin 0 -> 1847 bytes .../Xenos/alien.rsi/facehugger_dead.png | Bin 0 -> 711 bytes .../alien.rsi/facehugger_impregnated.png | Bin 0 -> 532 bytes .../Xenos/alien.rsi/facehugger_inactive.png | Bin 0 -> 902 bytes .../Xenos/alien.rsi/facehugger_thrown.png | Bin 0 -> 1428 bytes .../Mobs/Aliens/Xenos/alien.rsi/infected0.png | Bin 0 -> 202 bytes .../Mobs/Aliens/Xenos/alien.rsi/infected1.png | Bin 0 -> 202 bytes .../Mobs/Aliens/Xenos/alien.rsi/infected2.png | Bin 0 -> 236 bytes .../Mobs/Aliens/Xenos/alien.rsi/infected3.png | Bin 0 -> 236 bytes .../Mobs/Aliens/Xenos/alien.rsi/infected4.png | Bin 0 -> 339 bytes .../Mobs/Aliens/Xenos/alien.rsi/infected5.png | Bin 0 -> 339 bytes .../Aliens/Xenos/alien.rsi/infected_old.png | Bin 0 -> 272 bytes .../Mobs/Aliens/Xenos/alien.rsi/larva0.png | Bin 0 -> 3463 bytes .../Aliens/Xenos/alien.rsi/larva0_cuff.png | Bin 0 -> 1292 bytes .../Aliens/Xenos/alien.rsi/larva0_dead.png | Bin 0 -> 790 bytes .../Aliens/Xenos/alien.rsi/larva0_sleep.png | Bin 0 -> 657 bytes .../Aliens/Xenos/alien.rsi/larva0_stun.png | Bin 0 -> 1665 bytes .../Mobs/Aliens/Xenos/alien.rsi/larva1.png | Bin 0 -> 2171 bytes .../Aliens/Xenos/alien.rsi/larva1_cuff.png | Bin 0 -> 832 bytes .../Aliens/Xenos/alien.rsi/larva1_dead.png | Bin 0 -> 578 bytes .../Aliens/Xenos/alien.rsi/larva1_sleep.png | Bin 0 -> 389 bytes .../Aliens/Xenos/alien.rsi/larva1_stun.png | Bin 0 -> 1016 bytes .../Mobs/Aliens/Xenos/alien.rsi/larva2.png | Bin 0 -> 2151 bytes .../Aliens/Xenos/alien.rsi/larva2_cuff.png | Bin 0 -> 824 bytes .../Aliens/Xenos/alien.rsi/larva2_dead.png | Bin 0 -> 572 bytes .../Aliens/Xenos/alien.rsi/larva2_sleep.png | Bin 0 -> 379 bytes .../Aliens/Xenos/alien.rsi/larva2_stun.png | Bin 0 -> 986 bytes .../Mobs/Aliens/Xenos/alien.rsi/maid.png | Bin 0 -> 3119 bytes .../Mobs/Aliens/Xenos/alien.rsi/maid_dead.png | Bin 0 -> 1263 bytes .../Mobs/Aliens/Xenos/alien.rsi/meta.json | 625 ++++++++++++++++ .../Aliens/Xenos/alien.rsi/nestoverlay.png | Bin 0 -> 848 bytes .../Mobs/Aliens/Xenos/alien.rsi/tail_lash.png | Bin 0 -> 269 bytes .../Xenos/alienqueen.rsi/aliencuff_p.png | Bin 0 -> 646 bytes .../Xenos/alienqueen.rsi/aliencuff_q.png | Bin 0 -> 644 bytes .../Aliens/Xenos/alienqueen.rsi/alienp.png | Bin 0 -> 3660 bytes .../Xenos/alienqueen.rsi/alienp_dead.png | Bin 0 -> 1684 bytes .../Xenos/alienqueen.rsi/alienp_husked.png | Bin 0 -> 1180 bytes .../Xenos/alienqueen.rsi/alienp_running.png | Bin 0 -> 3660 bytes .../Xenos/alienqueen.rsi/alienp_sleep.png | Bin 0 -> 1320 bytes .../alienqueen.rsi/alienp_unconscious.png | Bin 0 -> 1287 bytes .../Aliens/Xenos/alienqueen.rsi/alienq.png | Bin 0 -> 6198 bytes .../Xenos/alienqueen.rsi/alienq_dead.png | Bin 0 -> 2419 bytes .../Xenos/alienqueen.rsi/alienq_husked.png | Bin 0 -> 1702 bytes .../Xenos/alienqueen.rsi/alienq_running.png | Bin 0 -> 6198 bytes .../Xenos/alienqueen.rsi/alienq_sleep.png | Bin 0 -> 1953 bytes .../alienqueen.rsi/alienq_unconscious.png | Bin 0 -> 1922 bytes .../alienqueen.rsi/alienqmaid_husked.png | Bin 0 -> 4935 bytes .../Xenos/alienqueen.rsi/alienspit_p.png | Bin 0 -> 2015 bytes .../Xenos/alienqueen.rsi/alienspit_q.png | Bin 0 -> 1973 bytes .../alienqueen.rsi/facehugger_inactivep_l.png | Bin 0 -> 1075 bytes .../alienqueen.rsi/facehugger_inactivep_r.png | Bin 0 -> 1029 bytes .../alienqueen.rsi/facehugger_inactiveq_l.png | Bin 0 -> 893 bytes .../alienqueen.rsi/facehugger_inactiveq_r.png | Bin 0 -> 902 bytes .../Xenos/alienqueen.rsi/facehuggerp_l.png | Bin 0 -> 1075 bytes .../Xenos/alienqueen.rsi/facehuggerp_r.png | Bin 0 -> 1029 bytes .../Xenos/alienqueen.rsi/facehuggerq_l.png | Bin 0 -> 893 bytes .../Xenos/alienqueen.rsi/facehuggerq_r.png | Bin 0 -> 902 bytes .../Aliens/Xenos/alienqueen.rsi/meta.json | 170 +++++ .../Species/Xeno/organs.rsi/acid_gland.png | Bin 0 -> 177 bytes .../Mobs/Species/Xeno/organs.rsi/brain-x.png | Bin 0 -> 287 bytes .../Mobs/Species/Xeno/organs.rsi/eggsac.png | Bin 0 -> 299 bytes .../Mobs/Species/Xeno/organs.rsi/hivenode.png | Bin 0 -> 157 bytes .../Mobs/Species/Xeno/organs.rsi/meta.json | 26 + .../Species/Xeno/organs.rsi/plasma_vessel.png | Bin 0 -> 193 bytes .../Structures/Walls/resin.rsi/full.png | Bin 0 -> 1897 bytes .../Structures/Walls/resin.rsi/meta.json | 47 ++ .../Structures/Walls/resin.rsi/resinwall0.png | Bin 0 -> 2304 bytes .../Structures/Walls/resin.rsi/resinwall1.png | Bin 0 -> 2152 bytes .../Structures/Walls/resin.rsi/resinwall2.png | Bin 0 -> 2304 bytes .../Structures/Walls/resin.rsi/resinwall3.png | Bin 0 -> 2152 bytes .../Structures/Walls/resin.rsi/resinwall4.png | Bin 0 -> 2159 bytes .../Structures/Walls/resin.rsi/resinwall5.png | Bin 0 -> 2096 bytes .../Structures/Walls/resin.rsi/resinwall6.png | Bin 0 -> 2159 bytes .../Structures/Walls/resin.rsi/resinwall7.png | Bin 0 -> 2096 bytes .../Windows/resin_membrane.rsi/full.png | Bin 0 -> 1985 bytes .../Windows/resin_membrane.rsi/meta.json | 47 ++ .../resin_membrane.rsi/resin_membrane0.png | Bin 0 -> 2391 bytes .../resin_membrane.rsi/resin_membrane1.png | Bin 0 -> 2224 bytes .../resin_membrane.rsi/resin_membrane2.png | Bin 0 -> 2391 bytes .../resin_membrane.rsi/resin_membrane3.png | Bin 0 -> 2224 bytes .../resin_membrane.rsi/resin_membrane4.png | Bin 0 -> 2227 bytes .../resin_membrane.rsi/resin_membrane5.png | Bin 0 -> 2031 bytes .../resin_membrane.rsi/resin_membrane6.png | Bin 0 -> 2227 bytes .../resin_membrane.rsi/resin_membrane7.png | Bin 0 -> 2031 bytes .../Structures/resin_weeds.rsi/full.png | Bin 0 -> 492 bytes .../Structures/resin_weeds.rsi/meta.json | 1 + .../resin_weeds.rsi/resin-weeds0.png | Bin 0 -> 1648 bytes .../resin_weeds.rsi/resin-weeds1.png | Bin 0 -> 1603 bytes .../resin_weeds.rsi/resin-weeds2.png | Bin 0 -> 1648 bytes .../resin_weeds.rsi/resin-weeds3.png | Bin 0 -> 1603 bytes .../resin_weeds.rsi/resin-weeds4.png | Bin 0 -> 1624 bytes .../resin_weeds.rsi/resin-weeds5.png | Bin 0 -> 1408 bytes .../resin_weeds.rsi/resin-weeds6.png | Bin 0 -> 1624 bytes .../resin_weeds.rsi/resin-weeds7.png | Bin 0 -> 1408 bytes .../Textures/Structures/weednode.rsi/full.png | Bin 0 -> 951 bytes .../Structures/weednode.rsi/meta.json | 15 + .../Structures/weednode.rsi/weednode0.png | Bin 0 -> 2062 bytes .../Structures/weednode.rsi/weednode1.png | Bin 0 -> 2035 bytes .../Structures/weednode.rsi/weednode2.png | Bin 0 -> 2062 bytes .../Structures/weednode.rsi/weednode3.png | Bin 0 -> 2035 bytes .../Structures/weednode.rsi/weednode4.png | Bin 0 -> 2023 bytes .../Structures/weednode.rsi/weednode5.png | Bin 0 -> 1828 bytes .../Structures/weednode.rsi/weednode6.png | Bin 0 -> 2023 bytes .../Structures/weednode.rsi/weednode7.png | Bin 0 -> 1828 bytes 296 files changed, 5370 insertions(+), 23 deletions(-) create mode 100644 Content.Client/Aliens/Systems/AlienSystem.cs create mode 100644 Content.Client/Aliens/Systems/PlasmaVesselSystem.cs create mode 100644 Content.Client/Overlays/ShowInfectedIconsSystem.cs create mode 100644 Content.Server/Aliens/Components/AlienAcidComponent.cs create mode 100644 Content.Server/Aliens/Components/AlienEggHatchComponent.cs create mode 100644 Content.Server/Aliens/Components/QueenEvolutionComponent.cs create mode 100644 Content.Server/Aliens/Systems/AlienAcidSystem.cs create mode 100644 Content.Server/Aliens/Systems/AlienEggHatchSystem.cs create mode 100644 Content.Server/Aliens/Systems/AlienEvolutionSystem.cs create mode 100644 Content.Server/Aliens/Systems/AlienInfectedSystem.cs create mode 100644 Content.Server/Aliens/Systems/AlienQueenSystem.cs create mode 100644 Content.Server/Aliens/Systems/AlienSystem.cs create mode 100644 Content.Server/Aliens/Systems/FacehuggerSystem.cs create mode 100644 Content.Server/Aliens/Systems/PlasmaVesselSystem.cs create mode 100644 Content.Server/Aliens/Systems/PraetorianEvolutionSystem.cs create mode 100644 Content.Server/Aliens/Systems/QueenEvolutionSystem.cs create mode 100644 Content.Server/Aliens/Systems/ResinSpinnerSystem.cs create mode 100644 Content.Server/Chat/Commands/AliensayCommand.cs create mode 100644 Content.Server/Medical/VomitActionSystem.cs create mode 100644 Content.Server/Polymorph/Components/TimedPolymorphComponent.cs create mode 100644 Content.Server/Polymorph/Systems/TimedPolymorphSystem.cs create mode 100644 Content.Server/Spawners/Components/AreaSpawnerComponent.cs create mode 100644 Content.Server/Spawners/EntitySystems/AreaSpawnerSystem.cs create mode 100644 Content.Shared/Aliens/Components/AcidMakerComponent.cs create mode 100644 Content.Shared/Aliens/Components/AlienComponent.cs create mode 100644 Content.Shared/Aliens/Components/AlienEvolutionComponent.cs create mode 100644 Content.Shared/Aliens/Components/AlienInfectedComponent.cs create mode 100644 Content.Shared/Aliens/Components/AlienQueenComponent.cs create mode 100644 Content.Shared/Aliens/Components/AlienStalkComponent.cs create mode 100644 Content.Shared/Aliens/Components/FacehuggerComponent.cs create mode 100644 Content.Shared/Aliens/Components/PlasmaGainModifierComponent.cs create mode 100644 Content.Shared/Aliens/Components/PlasmaTransferComponent.cs create mode 100644 Content.Shared/Aliens/Components/PlasmaVesselComponent.cs create mode 100644 Content.Shared/Aliens/Components/PraetorianEvolutionComponent.cs create mode 100644 Content.Shared/Aliens/Components/ResinSpinnerComponent.cs create mode 100644 Content.Shared/Aliens/Components/ShowInfectedIconsComponent.cs create mode 100644 Content.Shared/Aliens/Components/TailLashComponent.cs create mode 100644 Content.Shared/Aliens/Systems/AcidMakerSystem.cs create mode 100644 Content.Shared/Aliens/Systems/SharedAlienEvolutionSystem.cs create mode 100644 Content.Shared/Aliens/Systems/SharedAlienQueenSystem.cs create mode 100644 Content.Shared/Aliens/Systems/SharedAlienStalkSystem.cs create mode 100644 Content.Shared/Aliens/Systems/SharedFacehuggerSystem.cs create mode 100644 Content.Shared/Aliens/Systems/SharedPlasmaGainModifierSystem.cs create mode 100644 Content.Shared/Aliens/Systems/SharedPlasmaTransferSystem.cs create mode 100644 Content.Shared/Aliens/Systems/SharedPlasmaVesselSystem.cs create mode 100644 Content.Shared/Aliens/Systems/SharedPraetorianEvolutionSystem.cs create mode 100644 Content.Shared/Aliens/Systems/SharedResinSpinnerSystem.cs create mode 100644 Content.Shared/Aliens/Systems/TailLashSystem.cs create mode 100644 Content.Shared/Medical/SharedVomitActionSystem.cs create mode 100644 Content.Shared/Medical/VomitActionComponent.cs create mode 100644 Resources/Audio/Voice/Talk/alien.ogg create mode 100644 Resources/Audio/Voice/Talk/alien_ask.ogg create mode 100644 Resources/Audio/Voice/Talk/alien_exclaim.ogg create mode 100644 Resources/Locale/en-US/abilities/alien.ftl create mode 100644 Resources/Locale/en-US/aliens/alien.ftl create mode 100644 Resources/Prototypes/Actions/aliens.yml create mode 100644 Resources/Prototypes/Body/Organs/Animal/xeno.yml create mode 100644 Resources/Prototypes/Body/Prototypes/Animal/xeno.yml create mode 100644 Resources/Prototypes/Entities/Mobs/Player/alien_inventory_template.yml create mode 100644 Resources/Prototypes/Entities/Mobs/Player/aliens.yml create mode 100644 Resources/Prototypes/Entities/Mobs/facehugger.yml create mode 100644 Resources/Prototypes/Entities/Objects/Misc/alien_egg.yml create mode 100644 Resources/Prototypes/Entities/Objects/Misc/alien_weed.yml create mode 100644 Resources/Prototypes/Entities/Structures/Windows/resin.yml create mode 100644 Resources/Textures/Clothing/Mask/facehugger.rsi/equipped-MASK.png create mode 100644 Resources/Textures/Clothing/Mask/facehugger.rsi/meta.json create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/act_drop.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/act_resist.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/act_rest.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/act_rest0.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/act_throw_off.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/act_throw_on.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/chest.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/combat.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/combat_off.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/disarm.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/eyes.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/finder_center.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/finder_far.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/finder_med.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/finder_near.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/grab.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/groin.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/hand_l.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/hand_r.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/harm.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/head.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/health0.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/health1.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/health2.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/health3.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/health4.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/health5.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/health6.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/health7.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/health8.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/help.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/l_arm.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/l_leg.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/leap_off.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/leap_on.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/lhandactive.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/meta.json create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/mouth.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/nightvision0.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/nightvision1.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/pocket.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/power_display.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/pull.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/queen_finder.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/r_arm.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/r_leg.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/reserved.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/rhandactive.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/running.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/scroll_down.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/scroll_up.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/suit.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/swap_1.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/swap_2.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/template.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/template_frame.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/walking.png create mode 100644 Resources/Textures/Interface/Alien/screen_alien.rsi/zone_sel.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Crawl.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Drone Back Half.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Drone Front Half.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Hunter Back Half.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Hunter Front Half.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Hunter Stalking.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Praetorian Back Half.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Praetorian Front Half.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Sentinel Back Half.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Sentinel Front Half.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Stand.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/acid.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alien_medal.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alien_medal_active.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliencuff.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliend.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliend_dead.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliend_husked.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliend_pounce.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliend_sleep.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliend_unconscious.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienh.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienh_dead.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienh_husked.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienh_pounce.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienh_sleep.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienh_unconscious.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienother.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienq.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienq_dead.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienq_husked.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienq_sleep.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienq_unconscious.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliens.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliens_dead.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliens_husked.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliens_pounce.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliens_sleep.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliens_unconscious.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienspit.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienspit_leap.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/burst_lie.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/burst_stand.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/bursted_lie.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/bursted_stand.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/chitin.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/claw.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/egg.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/egg_growing.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/egg_hatched.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/egg_opening.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/facehugger.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/facehugger_dead.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/facehugger_impregnated.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/facehugger_inactive.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/facehugger_thrown.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/infected0.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/infected1.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/infected2.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/infected3.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/infected4.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/infected5.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/infected_old.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva0.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva0_cuff.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva0_dead.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva0_sleep.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva0_stun.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva1.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva1_cuff.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva1_dead.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva1_sleep.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva1_stun.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva2.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva2_cuff.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva2_dead.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva2_sleep.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva2_stun.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/maid.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/maid_dead.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/meta.json create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/nestoverlay.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/tail_lash.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/aliencuff_p.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/aliencuff_q.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienp.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienp_dead.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienp_husked.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienp_running.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienp_sleep.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienp_unconscious.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienq.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienq_dead.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienq_husked.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienq_running.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienq_sleep.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienq_unconscious.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienqmaid_husked.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienspit_p.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienspit_q.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/facehugger_inactivep_l.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/facehugger_inactivep_r.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/facehugger_inactiveq_l.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/facehugger_inactiveq_r.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/facehuggerp_l.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/facehuggerp_r.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/facehuggerq_l.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/facehuggerq_r.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/meta.json create mode 100644 Resources/Textures/Mobs/Species/Xeno/organs.rsi/acid_gland.png create mode 100644 Resources/Textures/Mobs/Species/Xeno/organs.rsi/brain-x.png create mode 100644 Resources/Textures/Mobs/Species/Xeno/organs.rsi/eggsac.png create mode 100644 Resources/Textures/Mobs/Species/Xeno/organs.rsi/hivenode.png create mode 100644 Resources/Textures/Mobs/Species/Xeno/organs.rsi/meta.json create mode 100644 Resources/Textures/Mobs/Species/Xeno/organs.rsi/plasma_vessel.png create mode 100644 Resources/Textures/Structures/Walls/resin.rsi/full.png create mode 100644 Resources/Textures/Structures/Walls/resin.rsi/meta.json create mode 100644 Resources/Textures/Structures/Walls/resin.rsi/resinwall0.png create mode 100644 Resources/Textures/Structures/Walls/resin.rsi/resinwall1.png create mode 100644 Resources/Textures/Structures/Walls/resin.rsi/resinwall2.png create mode 100644 Resources/Textures/Structures/Walls/resin.rsi/resinwall3.png create mode 100644 Resources/Textures/Structures/Walls/resin.rsi/resinwall4.png create mode 100644 Resources/Textures/Structures/Walls/resin.rsi/resinwall5.png create mode 100644 Resources/Textures/Structures/Walls/resin.rsi/resinwall6.png create mode 100644 Resources/Textures/Structures/Walls/resin.rsi/resinwall7.png create mode 100644 Resources/Textures/Structures/Windows/resin_membrane.rsi/full.png create mode 100644 Resources/Textures/Structures/Windows/resin_membrane.rsi/meta.json create mode 100644 Resources/Textures/Structures/Windows/resin_membrane.rsi/resin_membrane0.png create mode 100644 Resources/Textures/Structures/Windows/resin_membrane.rsi/resin_membrane1.png create mode 100644 Resources/Textures/Structures/Windows/resin_membrane.rsi/resin_membrane2.png create mode 100644 Resources/Textures/Structures/Windows/resin_membrane.rsi/resin_membrane3.png create mode 100644 Resources/Textures/Structures/Windows/resin_membrane.rsi/resin_membrane4.png create mode 100644 Resources/Textures/Structures/Windows/resin_membrane.rsi/resin_membrane5.png create mode 100644 Resources/Textures/Structures/Windows/resin_membrane.rsi/resin_membrane6.png create mode 100644 Resources/Textures/Structures/Windows/resin_membrane.rsi/resin_membrane7.png create mode 100644 Resources/Textures/Structures/resin_weeds.rsi/full.png create mode 100644 Resources/Textures/Structures/resin_weeds.rsi/meta.json create mode 100644 Resources/Textures/Structures/resin_weeds.rsi/resin-weeds0.png create mode 100644 Resources/Textures/Structures/resin_weeds.rsi/resin-weeds1.png create mode 100644 Resources/Textures/Structures/resin_weeds.rsi/resin-weeds2.png create mode 100644 Resources/Textures/Structures/resin_weeds.rsi/resin-weeds3.png create mode 100644 Resources/Textures/Structures/resin_weeds.rsi/resin-weeds4.png create mode 100644 Resources/Textures/Structures/resin_weeds.rsi/resin-weeds5.png create mode 100644 Resources/Textures/Structures/resin_weeds.rsi/resin-weeds6.png create mode 100644 Resources/Textures/Structures/resin_weeds.rsi/resin-weeds7.png create mode 100644 Resources/Textures/Structures/weednode.rsi/full.png create mode 100644 Resources/Textures/Structures/weednode.rsi/meta.json create mode 100644 Resources/Textures/Structures/weednode.rsi/weednode0.png create mode 100644 Resources/Textures/Structures/weednode.rsi/weednode1.png create mode 100644 Resources/Textures/Structures/weednode.rsi/weednode2.png create mode 100644 Resources/Textures/Structures/weednode.rsi/weednode3.png create mode 100644 Resources/Textures/Structures/weednode.rsi/weednode4.png create mode 100644 Resources/Textures/Structures/weednode.rsi/weednode5.png create mode 100644 Resources/Textures/Structures/weednode.rsi/weednode6.png create mode 100644 Resources/Textures/Structures/weednode.rsi/weednode7.png diff --git a/Content.Client/Aliens/Systems/AlienSystem.cs b/Content.Client/Aliens/Systems/AlienSystem.cs new file mode 100644 index 00000000000..850ce1a1ebb --- /dev/null +++ b/Content.Client/Aliens/Systems/AlienSystem.cs @@ -0,0 +1,43 @@ +using Content.Client.Movement.Systems; +using Content.Shared.Actions; +using Content.Shared.Aliens.Components; +using ToggleLightingAlienActionEvent = Content.Shared.Aliens.Components.ToggleLightingAlienActionEvent; + +namespace Content.Client.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class AlienSystem : EntitySystem +{ + [Dependency] private readonly ContentEyeSystem _contentEye = default!; + /// + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnStartup); + + SubscribeLocalEvent(OnToggleLighting); + } + + private void OnStartup(EntityUid uid, AlienComponent component, ComponentStartup args) + { + // _action.AddAction(uid, ref component.ToggleLightingActionEntity, component.ToggleLightingAction); + } + + private void OnToggleLighting(EntityUid uid, EyeComponent component, ToggleLightingAlienActionEvent args) + { + if (args.Handled) + return; + + RequestToggleLight(uid, component); + args.Handled = true; + } + + private void RequestToggleLight(EntityUid uid, EyeComponent? eye = null) + { + if (Resolve(uid, ref eye, false)) + _contentEye.RequestEye(eye.DrawFov, !eye.DrawLight); + } +} diff --git a/Content.Client/Aliens/Systems/PlasmaVesselSystem.cs b/Content.Client/Aliens/Systems/PlasmaVesselSystem.cs new file mode 100644 index 00000000000..79efdd1132a --- /dev/null +++ b/Content.Client/Aliens/Systems/PlasmaVesselSystem.cs @@ -0,0 +1,13 @@ +namespace Content.Client.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class PlasmaVesselSystem : EntitySystem +{ + /// + public override void Initialize() + { + + } +} diff --git a/Content.Client/Chat/Managers/ChatManager.cs b/Content.Client/Chat/Managers/ChatManager.cs index 18f03cd7db0..316f3c6842b 100644 --- a/Content.Client/Chat/Managers/ChatManager.cs +++ b/Content.Client/Chat/Managers/ChatManager.cs @@ -72,11 +72,15 @@ public void SendMessage(string text, ChatSelectChannel channel) _consoleHost.ExecuteCommand($"tsay \"{CommandParsing.Escape(str)}\""); break; + case ChatSelectChannel.XenoHivemind: + _consoleHost.ExecuteCommand($"aliensay \"{CommandParsing.Escape(str)}\""); + break; + default: throw new ArgumentOutOfRangeException(nameof(channel), channel, null); } } - //Nyano - Summary: fires off the update permissions script. + //Nyano - Summary: fires off the update permissions script. public void UpdatePermissions() { PermissionsUpdated?.Invoke(); diff --git a/Content.Client/Overlays/ShowInfectedIconsSystem.cs b/Content.Client/Overlays/ShowInfectedIconsSystem.cs new file mode 100644 index 00000000000..343b0a58c26 --- /dev/null +++ b/Content.Client/Overlays/ShowInfectedIconsSystem.cs @@ -0,0 +1,31 @@ +using System.Linq; +using Content.Shared.Aliens.Components; +using Content.Shared.StatusIcon; +using Content.Shared.StatusIcon.Components; +using Robust.Shared.Prototypes; + +namespace Content.Client.Overlays; + +/// +/// This handles... +/// +public sealed class ShowInfectedIconsSystem : EquipmentHudSystem +{ + [Dependency] private readonly IPrototypeManager _prototype = default!; + /// + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnGetStatusIconsEvent); + } + + private void OnGetStatusIconsEvent(EntityUid uid, AlienInfectedComponent component, ref GetStatusIconsEvent ev) + { + if (!IsActive) + return; + + if (_prototype.TryIndex(component.InfectedIcons.ElementAt(component.GrowthStage), out var iconPrototype)) + ev.StatusIcons.Add(iconPrototype); + } +} diff --git a/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs b/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs index ff4972d9d08..68b669304d2 100644 --- a/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs +++ b/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs @@ -82,7 +82,8 @@ public sealed class ChatUIController : UIController {SharedChatSystem.AdminPrefix, ChatSelectChannel.Admin}, {SharedChatSystem.RadioCommonPrefix, ChatSelectChannel.Radio}, {SharedChatSystem.DeadPrefix, ChatSelectChannel.Dead}, - {SharedChatSystem.TelepathicPrefix, ChatSelectChannel.Telepathic} //Nyano - Summary: adds the telepathic prefix =. + {SharedChatSystem.TelepathicPrefix, ChatSelectChannel.Telepathic}, //Nyano - Summary: adds the telepathic prefix =. + {SharedChatSystem.XenoHivemindPrefix, ChatSelectChannel.XenoHivemind} }; public static readonly Dictionary ChannelPrefixes = new() @@ -96,7 +97,8 @@ public sealed class ChatUIController : UIController {ChatSelectChannel.Admin, SharedChatSystem.AdminPrefix}, {ChatSelectChannel.Radio, SharedChatSystem.RadioCommonPrefix}, {ChatSelectChannel.Dead, SharedChatSystem.DeadPrefix}, - {ChatSelectChannel.Telepathic, SharedChatSystem.TelepathicPrefix } //Nyano - Summary: associates telepathic with =. + {ChatSelectChannel.Telepathic, SharedChatSystem.TelepathicPrefix }, //Nyano - Summary: associates telepathic with =. + {ChatSelectChannel.XenoHivemind, SharedChatSystem.XenoHivemindPrefix } }; /// @@ -221,6 +223,9 @@ public override void Initialize() _input.SetInputCommand(ContentKeyFunctions.FocusConsoleChat, InputCmdHandler.FromDelegate(_ => FocusChannel(ChatSelectChannel.Console))); + _input.SetInputCommand(ContentKeyFunctions.FocusXenoHivemindChat, + InputCmdHandler.FromDelegate(_ => FocusChannel(ChatSelectChannel.XenoHivemind))); + _input.SetInputCommand(ContentKeyFunctions.CycleChatChannelForward, InputCmdHandler.FromDelegate(_ => CycleChatChannel(true))); @@ -499,6 +504,7 @@ private void UpdateChannelPermissions() FilterableChannels |= ChatChannel.Emotes; FilterableChannels |= ChatChannel.Notifications; + // Can only send local / radio / emote when attached to a non-ghost entity. // TODO: this logic is iffy (checking if controlling something that's NOT a ghost), is there a better way to check this? if (_ghost is not {IsGhost: true}) @@ -507,6 +513,9 @@ private void UpdateChannelPermissions() CanSendChannels |= ChatSelectChannel.Whisper; CanSendChannels |= ChatSelectChannel.Radio; CanSendChannels |= ChatSelectChannel.Emotes; + + CanSendChannels |= ChatSelectChannel.XenoHivemind; + FilterableChannels |= ChatChannel.XenoHivemind; } } @@ -535,6 +544,7 @@ private void UpdateChannelPermissions() } // /Nyano - End modified code block + SelectableChannels = CanSendChannels; // Necessary so that we always have a channel to fall back to. diff --git a/Content.Client/UserInterface/Systems/Chat/Controls/ChannelFilterPopup.xaml.cs b/Content.Client/UserInterface/Systems/Chat/Controls/ChannelFilterPopup.xaml.cs index 1d2a4314462..1db0855e8da 100644 --- a/Content.Client/UserInterface/Systems/Chat/Controls/ChannelFilterPopup.xaml.cs +++ b/Content.Client/UserInterface/Systems/Chat/Controls/ChannelFilterPopup.xaml.cs @@ -24,6 +24,7 @@ public sealed partial class ChannelFilterPopup : Popup ChatChannel.Admin, ChatChannel.AdminAlert, ChatChannel.AdminChat, + ChatChannel.XenoHivemind, ChatChannel.Server }; diff --git a/Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorButton.cs b/Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorButton.cs index 041d8075e35..886475d1b66 100644 --- a/Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorButton.cs +++ b/Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorButton.cs @@ -64,7 +64,8 @@ public Color ChannelSelectColor(ChatSelectChannel channel) ChatSelectChannel.OOC => Color.LightSkyBlue, ChatSelectChannel.Dead => Color.MediumPurple, ChatSelectChannel.Admin => Color.HotPink, - ChatSelectChannel.Telepathic => Color.PaleVioletRed, //Nyano - Summary: determines the color for the chat. + ChatSelectChannel.Telepathic => Color.PaleVioletRed, //Nyano - Summary: determines the color for the chat. + ChatSelectChannel.XenoHivemind => Color.FromHex("#5b0c82"), _ => Color.DarkGray }; } diff --git a/Content.Server/Aliens/Components/AlienAcidComponent.cs b/Content.Server/Aliens/Components/AlienAcidComponent.cs new file mode 100644 index 00000000000..ec008c37e14 --- /dev/null +++ b/Content.Server/Aliens/Components/AlienAcidComponent.cs @@ -0,0 +1,14 @@ +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Server.Aliens.Components; + +/// +/// This is used for... +/// +[RegisterComponent] +public sealed partial class AlienAcidComponent : Component +{ + [DataField("corrosiveAcidPrototype", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string AcidPrototype = "CorrosiveAcid"; +} diff --git a/Content.Server/Aliens/Components/AlienEggHatchComponent.cs b/Content.Server/Aliens/Components/AlienEggHatchComponent.cs new file mode 100644 index 00000000000..04fd6184d86 --- /dev/null +++ b/Content.Server/Aliens/Components/AlienEggHatchComponent.cs @@ -0,0 +1,17 @@ +using Content.Shared.Polymorph; +using Robust.Shared.Prototypes; + +namespace Content.Server.Aliens.Components; + +/// +/// This is used for... +/// +[RegisterComponent] +public sealed partial class AlienEggHatchComponent : Component +{ + [DataField(required: true)] + public ProtoId PolymorphPrototype; + + [DataField] + public float ActivationRange = 1f; +} diff --git a/Content.Server/Aliens/Components/QueenEvolutionComponent.cs b/Content.Server/Aliens/Components/QueenEvolutionComponent.cs new file mode 100644 index 00000000000..33dd287fdd4 --- /dev/null +++ b/Content.Server/Aliens/Components/QueenEvolutionComponent.cs @@ -0,0 +1,25 @@ +using Content.Shared.Polymorph; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Server.Aliens.Components; + +/// +/// This is used for... +/// +[RegisterComponent] +public sealed partial class QueenEvolutionComponent : Component +{ + [DataField] + public ProtoId QueenPolymorphPrototype = "AlienEvolutionQueen"; + + [DataField("queenEvolutionAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? QueenEvolutionAction = "ActionEvolveQueen"; + + [DataField("queenEvolutionActionEntity")] + public EntityUid? QueenEvolutionActionEntity; + + [DataField("plasmaCost")] + [ViewVariables(VVAccess.ReadWrite)] + public float PlasmaCost = 500f; +} diff --git a/Content.Server/Aliens/Systems/AlienAcidSystem.cs b/Content.Server/Aliens/Systems/AlienAcidSystem.cs new file mode 100644 index 00000000000..5cc1f3c760f --- /dev/null +++ b/Content.Server/Aliens/Systems/AlienAcidSystem.cs @@ -0,0 +1,36 @@ +using Content.Server.Aliens.Components; +using Content.Server.Weapons.Melee; +using Content.Shared.Aliens.Components; +using Content.Shared.Coordinates; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; +using Content.Shared.Tag; +using Content.Shared.Weapons.Melee; +using Content.Shared.Weapons.Melee.Events; + +namespace Content.Server.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class AlienAcidSystem : EntitySystem +{ + /// + [Dependency] private readonly MeleeWeaponSystem _meleeWeapon = default!; + [Dependency] private readonly TagSystem _tag = default!; + public override void Initialize() + { + SubscribeLocalEvent(OnHit); + } + + private void OnHit(EntityUid uid, AlienAcidComponent component, MeleeHitEvent args) + { + foreach (var hitEntity in args.HitEntities) + { + if (_tag.HasTag(hitEntity, "Wall")) + { + Spawn(component.AcidPrototype, hitEntity.ToCoordinates()); + } + } + } +} diff --git a/Content.Server/Aliens/Systems/AlienEggHatchSystem.cs b/Content.Server/Aliens/Systems/AlienEggHatchSystem.cs new file mode 100644 index 00000000000..bb45d881c72 --- /dev/null +++ b/Content.Server/Aliens/Systems/AlienEggHatchSystem.cs @@ -0,0 +1,51 @@ +using System.Linq; +using Content.Server.Aliens.Components; +using Content.Server.Polymorph.Systems; +using Content.Server.Speech.Components; +using Content.Shared.Aliens.Components; +using Content.Shared.Hands.Components; +using Content.Shared.Humanoid; +using Content.Shared.Interaction; +using Content.Shared.Inventory; +using Content.Shared.Mobs.Components; +using Robust.Server.GameObjects; +using Robust.Shared.Utility; + +namespace Content.Server.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class AlienEggHatchSystem : EntitySystem +{ + /// + [Dependency] private readonly PolymorphSystem _polymorph = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly InventorySystem _inventory = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInteract); + } + + private void OnInteract(EntityUid uid, AlienEggHatchComponent component, InteractHandEvent args) + { + _polymorph.PolymorphEntity(uid, component.PolymorphPrototype); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var alienEgg)) + { + foreach (var entity in _lookup.GetEntitiesInRange(uid, alienEgg.ActivationRange) + .Where(entity => _inventory.HasSlot(entity, "mask"))) + { + _polymorph.PolymorphEntity(uid, alienEgg.PolymorphPrototype); + } + } + } +} diff --git a/Content.Server/Aliens/Systems/AlienEvolutionSystem.cs b/Content.Server/Aliens/Systems/AlienEvolutionSystem.cs new file mode 100644 index 00000000000..6a429e62bc9 --- /dev/null +++ b/Content.Server/Aliens/Systems/AlienEvolutionSystem.cs @@ -0,0 +1,60 @@ +using Content.Server.Polymorph.Systems; +using Content.Shared.Actions; +using Content.Shared.Aliens.Components; +using Content.Shared.Aliens.Systems; +using Content.Shared.Polymorph; +using Robust.Shared.Prototypes; + +namespace Content.Server.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class AlienEvolutionSystem : EntitySystem +{ + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + [Dependency] private readonly PolymorphSystem _polymorphSystem = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnComponentInit); + + SubscribeLocalEvent(OnEvolveDrone); + SubscribeLocalEvent(OnEvolveSentinel); + SubscribeLocalEvent(OnEvolveHunter); + } + + private void OnComponentInit(EntityUid uid, AlienEvolutionComponent component, ComponentInit args) + { + _actionsSystem.AddAction(uid, ref component.DroneEvolutionActionEntity, component.DroneEvolutionAction, uid); + _actionsSystem.AddAction(uid, ref component.SentinelEvolutionActionEntity, component.SentinelEvolutionAction, uid); + _actionsSystem.AddAction(uid, ref component.HunterEvolutionActionEntity, component.HunterEvolutionAction, uid); + + _actionsSystem.SetCooldown(component.DroneEvolutionActionEntity, component.EvolutionCooldown); + _actionsSystem.SetCooldown(component.SentinelEvolutionActionEntity, component.EvolutionCooldown); + _actionsSystem.SetCooldown(component.HunterEvolutionActionEntity, component.EvolutionCooldown); + } + + private void OnEvolveDrone(EntityUid uid, AlienEvolutionComponent component, AlienDroneEvolveActionEvent args) + { + Evolve(uid, component.DronePolymorphPrototype); + } + + private void OnEvolveSentinel(EntityUid uid, AlienEvolutionComponent component, AlienSentinelEvolveActionEvent args) + { + Evolve(uid, component.SentinelPolymorphPrototype); + } + + private void OnEvolveHunter(EntityUid uid, AlienEvolutionComponent component, AlienHunterEvolveActionEvent args) + { + Evolve(uid, component.HunterPolymorphPrototype); + } + + public void Evolve(EntityUid uid, ProtoId polymorphProtoId) + { + _polymorphSystem.PolymorphEntity(uid, polymorphProtoId); + } +} + + diff --git a/Content.Server/Aliens/Systems/AlienInfectedSystem.cs b/Content.Server/Aliens/Systems/AlienInfectedSystem.cs new file mode 100644 index 00000000000..c2aecf879da --- /dev/null +++ b/Content.Server/Aliens/Systems/AlienInfectedSystem.cs @@ -0,0 +1,79 @@ +using System.Linq; +using System.Threading; +using Content.Server.Aliens.Components; +using Content.Server.Body.Systems; +using Content.Server.Ghost.Roles; +using Content.Server.Ghost.Roles.Components; +using Content.Server.Mind; +using Content.Shared.Body.Components; +using Content.Shared.Body.Events; +using Content.Shared.Body.Part; +using Content.Shared.Damage; +using Content.Shared.Ghost.Roles; +using Content.Shared.Gibbing.Components; +using Content.Shared.Gibbing.Events; +using Content.Shared.Gibbing.Systems; +using Content.Shared.Mobs; +using Content.Shared.Random; +using FastAccessors; +using Robust.Shared.Random; +using Robust.Shared.Timing; +using AlienInfectedComponent = Content.Shared.Aliens.Components.AlienInfectedComponent; + +namespace Content.Server.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class AlienInfectedSystem : EntitySystem +{ + /// + [Dependency] private readonly BodySystem _body = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly GhostRoleSystem _ghostRole = default!; + [Dependency] private readonly MindSystem _mind = default!; + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnComponentInit); + SubscribeLocalEvent(OnComponentShutdown); + } + + private void OnComponentInit(EntityUid uid, AlienInfectedComponent component, ComponentInit args) + { + // var torsoPart = Comp(uid).RootContainer.ContainedEntities[0]; + // _body.TryCreateOrganSlot(torsoPart, "alienLarvaOrgan", out _); + // _body.InsertOrgan(torsoPart, Spawn(component.OrganProtoId, Transform(uid).Coordinates), "alienLarvaOrgan"); + component.NextGrowRoll = _timing.CurTime + TimeSpan.FromSeconds(component.GrowTime); + } + + private void OnComponentShutdown(EntityUid uid, AlienInfectedComponent component, ComponentShutdown args) + { + + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var infected)) + { + if (_timing.CurTime < infected.NextGrowRoll) + continue; + + if (infected.GrowthStage == 5) + { + Spawn(infected.Prototype, Transform(uid).Coordinates); + _body.GibBody(uid, true); + } + + if (_random.Prob(infected.GrowProb)) + { + infected.GrowthStage++; + } + infected.NextGrowRoll = _timing.CurTime + TimeSpan.FromSeconds(infected.GrowTime); + } + } +} diff --git a/Content.Server/Aliens/Systems/AlienQueenSystem.cs b/Content.Server/Aliens/Systems/AlienQueenSystem.cs new file mode 100644 index 00000000000..82f8edcb163 --- /dev/null +++ b/Content.Server/Aliens/Systems/AlienQueenSystem.cs @@ -0,0 +1,113 @@ +using Content.Server.Actions; +using Content.Server.Aliens.Components; +using Content.Server.Animals.Components; +using Content.Server.Popups; +using Content.Shared.Aliens.Components; +using Content.Shared.Aliens.Systems; +using Content.Shared.Coordinates.Helpers; +using Content.Shared.Hands.Components; +using Content.Shared.Maps; +using Content.Shared.Physics; +using Content.Shared.Tag; +using Robust.Shared.Containers; +using Robust.Shared.Map; +using AlienEggActionEvent = Content.Shared.Aliens.Components.AlienEggActionEvent; +using AlienQueenComponent = Content.Shared.Aliens.Components.AlienQueenComponent; + +namespace Content.Server.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class AlienQueenSystem : EntitySystem +{ + [Dependency] private readonly AlienEvolutionSystem _evolution = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly ActionsSystem _actions = default!; + [Dependency] private readonly EntityLookupSystem _lookupSystem = default!; + [Dependency] private readonly TurfSystem _turf = default!; + [Dependency] private readonly IMapManager _mapMan = default!; + [Dependency] private readonly SharedContainerSystem _container = default!; + [Dependency] private readonly SharedPlasmaVesselSystem _plasmaVessel = default!; + /// + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnEgg); + SubscribeLocalEvent(OnRoyalLarva); + } + + private void OnMapInit(EntityUid uid, AlienQueenComponent component, MapInitEvent args) + { + _actions.AddAction(uid, ref component.EggActionEntity, component.EggAction); + } + + private void OnEgg(EntityUid uid, AlienQueenComponent component, AlienEggActionEvent args) + { + if (TryComp(uid, out var plasmaComp) + && plasmaComp.Plasma < component.PlasmaCostEgg) + { + _popup.PopupClient(Loc.GetString(Loc.GetString("alien-action-fail-plasma")), uid, uid); + return; + } + CreateStructure(uid, component); + args.Handled = true; + } + + public void CreateStructure(EntityUid uid, AlienQueenComponent component) + { + + if (_container.IsEntityOrParentInContainer(uid)) + return; + + var xform = Transform(uid); + // Get the tile in front of the drone + var coords = xform.Coordinates.SnapToGrid(EntityManager, _mapMan); + var tile = coords.GetTileRef(EntityManager, _mapMan); + if (tile == null) + return; + + // Check there are no walls there + if (_turf.IsTileBlocked(tile.Value, CollisionGroup.Impassable)) + { + _popup.PopupEntity(Loc.GetString("alien-create-structure-failed"), uid, uid); + return; + } + + foreach (var entity in _lookupSystem.GetEntitiesInRange(coords, 0.1f)) + { + if (Prototype(entity) == null) + continue; + if (Prototype(entity)!.ID == component.EggPrototype) + return; + } + + _plasmaVessel.ChangePlasmaAmount(uid, -component.PlasmaCostEgg); + Spawn(component.EggPrototype, _turf.GetTileCenter(tile.Value)); + } + + public void OnRoyalLarva(EntityUid uid, AlienQueenComponent component, RoyalLarvaActionEvent args) + { + if (TryComp(uid, out var plasmaComp) + && plasmaComp.Plasma < component.PlasmaCostRoyalLarva) + { + _popup.PopupEntity(Loc.GetString("alien-action-fail-plasma"), uid, uid); + return; + } + + if (!HasComp(args.Target) || + !HasComp(args.Target) || + HasComp(args.Target) || + HasComp(args.Target)) + { + _popup.PopupEntity(Loc.GetString("alien-evolution-fail"), uid, uid); + return; + } + + _plasmaVessel.ChangePlasmaAmount(uid, -component.PlasmaCostRoyalLarva); + _evolution.Evolve(args.Target, component.PraetorianPolymorphPrototype); + _actions.RemoveAction(component.ActionEntity); + } +} diff --git a/Content.Server/Aliens/Systems/AlienSystem.cs b/Content.Server/Aliens/Systems/AlienSystem.cs new file mode 100644 index 00000000000..9c788345ddc --- /dev/null +++ b/Content.Server/Aliens/Systems/AlienSystem.cs @@ -0,0 +1,133 @@ +using Content.Server.Actions; +using Content.Server.Aliens.Systems; +using Content.Server.Animals.Components; +using Content.Server.Popups; +using Content.Shared.Aliens; +using Content.Shared.Aliens.Components; +using Content.Shared.Aliens.Systems; +using Content.Shared.Coordinates.Helpers; +using Content.Shared.Damage; +using Content.Shared.Damage.Components; +using Content.Shared.Devour; +using Content.Shared.Devour.Components; +using Content.Shared.DoAfter; +using Content.Shared.Item; +using Content.Shared.Maps; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; +using Content.Shared.Physics; +using Content.Shared.Tag; +using Robust.Shared.Containers; +using Robust.Shared.Map; +using AlienComponent = Content.Shared.Aliens.Components.AlienComponent; + +namespace Content.Server.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class AlienSystem : EntitySystem +{ + [Dependency] private readonly TagSystem _tag = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly ActionsSystem _actions = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly TurfSystem _turf = default!; + [Dependency] private readonly IMapManager _mapMan = default!; + [Dependency] private readonly SharedContainerSystem _container = default!; + [Dependency] private readonly SharedPlasmaVesselSystem _plasmaVessel = default!; + + /// + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnPickup); + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnNode); + } + + private void OnMapInit(EntityUid uid, AlienComponent component, MapInitEvent args) + { + _actions.AddAction(uid, ref component.ToggleLightingActionEntity, component.ToggleLightingAction); + _actions.AddAction(uid, ref component.WeednodeActionEntity, component.WeednodeAction); + } + + private void OnPickup(EntityUid uid, AlienComponent component, PickupAttemptEvent args) + { + if (!_tag.HasTag(args.Item, "AlienItem")) + { + args.Cancel(); + _popup.PopupEntity(Loc.GetString("alien-pickup-item-fail"), uid); + } + } + + private void OnNode(EntityUid uid, AlienComponent component, WeednodeActionEvent args) + { + if (TryComp(uid, out var plasmaComp) + && plasmaComp.Plasma < component.PlasmaCostNode) + { + _popup.PopupClient(Loc.GetString(Loc.GetString("alien-action-fail-plasma")), uid, uid); + return; + } + CreateStructure(uid, component); + args.Handled = true; + } + + public void CreateStructure(EntityUid uid, AlienComponent component) + { + + if (_container.IsEntityOrParentInContainer(uid)) + return; + + var xform = Transform(uid); + // Get the tile in front of the drone + var coords = xform.Coordinates.SnapToGrid(EntityManager, _mapMan); + var tile = coords.GetTileRef(EntityManager, _mapMan); + if (tile == null) + return; + + // Check there are no walls there + if (_turf.IsTileBlocked(tile.Value, CollisionGroup.Impassable)) + { + _popup.PopupEntity(Loc.GetString("alien-create-structure-failed"), uid, uid); + return; + } + + foreach (var entity in _lookup.GetEntitiesInRange(coords, 0.1f)) + { + if (Prototype(entity) == null) + continue; + if (Prototype(entity)!.ID == component.WeednodePrototype) + return; + } + + _plasmaVessel.ChangePlasmaAmount(uid, -component.PlasmaCostNode); + Spawn(component.WeednodePrototype, _turf.GetTileCenter(tile.Value)); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + + while (query.MoveNext(out var uid, out var alien)) + { + var weed = false; + var passiveDamageComponent = EnsureComp(uid); + foreach (var entity in _lookup.GetEntitiesInRange(Transform(uid).Coordinates, 0.1f)) + { + if (HasComp(entity) && passiveDamageComponent.Damage.Empty) + { + passiveDamageComponent.Damage = alien.WeedHeal; + weed = true; + } + } + + if (!weed) + passiveDamageComponent.Damage = new DamageSpecifier(); + } + } + +} diff --git a/Content.Server/Aliens/Systems/FacehuggerSystem.cs b/Content.Server/Aliens/Systems/FacehuggerSystem.cs new file mode 100644 index 00000000000..2c8b96fe85e --- /dev/null +++ b/Content.Server/Aliens/Systems/FacehuggerSystem.cs @@ -0,0 +1,71 @@ +using Content.Server.Aliens.Components; +using Content.Server.Polymorph.Components; +using Content.Server.Polymorph.Systems; +using Content.Server.Stunnable; +using Content.Shared.Aliens.Components; +using Content.Shared.IdentityManagement.Components; +using Content.Shared.Inventory; +using Content.Shared.Inventory.Events; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Systems; +using Robust.Shared.Timing; +using AlienInfectedComponent = Content.Shared.Aliens.Components.AlienInfectedComponent; + +namespace Content.Server.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class FacehuggerSystem : EntitySystem +{ + /// + [Dependency] private readonly StunSystem _stun = default!; + [Dependency] private readonly PolymorphSystem _polymorph = default!; + [Dependency] private readonly IGameTiming _timing = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnEquipped); + SubscribeLocalEvent(OnUnequipped); + } + + public void OnEquipped(EntityUid uid, FacehuggerComponent component, GotEquippedEvent args) + { + if(!component.Active) + return; + _stun.TryParalyze(args.Equipee, TimeSpan.FromSeconds(25), false); + component.Equipped = true; + component.Equipee = args.Equipee; + component.Active = false; + var curTime = _timing.CurTime; + component.GrowTime = curTime + TimeSpan.FromSeconds(component.EmbryoTime); + } + + private static void OnUnequipped(EntityUid uid, FacehuggerComponent component, GotUnequippedEvent args) + { + component.Equipped = false; + component.Active = true; + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + var growedLarva = new Dictionary(); + while (query.MoveNext(out var uid, out var facehugger)) + { + if(_timing.CurTime < facehugger.GrowTime || !facehugger.Equipped) + continue; + growedLarva.TryAdd(uid, facehugger); + } + + foreach (var facehugger in growedLarva) + { + if(!HasComp(facehugger.Value.Equipee)) + AddComp(facehugger.Value.Equipee); + _polymorph.PolymorphEntity(facehugger.Key, facehugger.Value.FacehuggerPolymorphPrototype); + } + } +} diff --git a/Content.Server/Aliens/Systems/PlasmaVesselSystem.cs b/Content.Server/Aliens/Systems/PlasmaVesselSystem.cs new file mode 100644 index 00000000000..1365f4b83d6 --- /dev/null +++ b/Content.Server/Aliens/Systems/PlasmaVesselSystem.cs @@ -0,0 +1,13 @@ +namespace Content.Server.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class PlasmaVesselSystem : EntitySystem +{ + /// + public override void Initialize() + { + + } +} diff --git a/Content.Server/Aliens/Systems/PraetorianEvolutionSystem.cs b/Content.Server/Aliens/Systems/PraetorianEvolutionSystem.cs new file mode 100644 index 00000000000..4d21dc0b834 --- /dev/null +++ b/Content.Server/Aliens/Systems/PraetorianEvolutionSystem.cs @@ -0,0 +1,58 @@ +using Content.Server.Aliens.Components; +using Content.Server.Polymorph.Systems; +using Content.Server.Popups; +using Content.Shared.Actions; +using Content.Shared.Aliens.Components; +using Content.Shared.Aliens.Systems; +using Content.Shared.Maps; +using Content.Shared.Polymorph; +using Robust.Shared.Map; +using Robust.Shared.Prototypes; + +namespace Content.Server.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class PraetorianEvolutionSystem : EntitySystem +{ + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + [Dependency] private readonly AlienEvolutionSystem _alienEvolution = default!; + [Dependency] private readonly PopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnComponentInit); + + SubscribeLocalEvent(OnEvolvePraetorian); + } + + private void OnComponentInit(EntityUid uid, PraetorianEvolutionComponent component, ComponentInit args) + { + + _actionsSystem.AddAction(uid, ref component.PraetorianEvolutionActionEntity, component.PraetorianEvolutionAction, uid); + } + + private void OnEvolvePraetorian(EntityUid uid, PraetorianEvolutionComponent component, AlienPraetorianEvolveActionEvent args) + { + if (TryComp(uid, out var plasmaComp) + && plasmaComp.Plasma <= component.PlasmaCost) + { + _popup.PopupEntity(Loc.GetString("alien-action-fail-plasma"), uid, uid); + return; + } + + if (EntityQueryEnumerator().MoveNext(out _, out _)) + { + _popup.PopupEntity(Loc.GetString("alien-evolution-fail"), uid, uid); + return; + } + + _alienEvolution.Evolve(uid, component.PraetorianPolymorphPrototype); + } + +} + + diff --git a/Content.Server/Aliens/Systems/QueenEvolutionSystem.cs b/Content.Server/Aliens/Systems/QueenEvolutionSystem.cs new file mode 100644 index 00000000000..94a3e0e7ba8 --- /dev/null +++ b/Content.Server/Aliens/Systems/QueenEvolutionSystem.cs @@ -0,0 +1,51 @@ +using Content.Server.Aliens.Components; +using Content.Server.Popups; +using Content.Shared.Actions; +using Content.Shared.Aliens.Components; +using Content.Shared.Aliens.Systems; + +namespace Content.Server.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class QueenEvolutionSystem : EntitySystem +{ + /// + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + [Dependency] private readonly AlienEvolutionSystem _alienEvolution = default!; + [Dependency] private readonly PopupSystem _popup = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnComponentInit); + + SubscribeLocalEvent(OnEvolveQueen); + } + + private void OnComponentInit(EntityUid uid, QueenEvolutionComponent component, ComponentInit args) + { + + _actionsSystem.AddAction(uid, ref component.QueenEvolutionActionEntity, component.QueenEvolutionAction, uid); + } + + private void OnEvolveQueen(EntityUid uid, QueenEvolutionComponent component, AlienQueenEvolveActionEvent args) + { + if (TryComp(uid, out var plasmaComp) + && plasmaComp.Plasma <= component.PlasmaCost) + { + _popup.PopupEntity(Loc.GetString("alien-action-fail-plasma"), uid, uid); + return; + } + + if (EntityQueryEnumerator().MoveNext(out _, out _)) + { + _popup.PopupEntity(Loc.GetString("alien-evolution-fail"), uid, uid); + return; + } + + _alienEvolution.Evolve(uid, component.QueenPolymorphPrototype); + } + +} diff --git a/Content.Server/Aliens/Systems/ResinSpinnerSystem.cs b/Content.Server/Aliens/Systems/ResinSpinnerSystem.cs new file mode 100644 index 00000000000..33c90921e48 --- /dev/null +++ b/Content.Server/Aliens/Systems/ResinSpinnerSystem.cs @@ -0,0 +1,89 @@ +using Content.Server.Popups; +using Content.Shared.Actions; +using Content.Shared.Alert; +using Content.Shared.Aliens.Components; +using Content.Shared.Aliens.Systems; +using Content.Shared.Coordinates.Helpers; +using Content.Shared.Maps; +using Content.Shared.Mobs.Components; +using Content.Shared.Physics; +using Robust.Shared.Containers; +using Robust.Shared.Map; +using Robust.Shared.Timing; + +namespace Content.Server.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class ResinSpinnerSystem : EntitySystem +{ + /// + [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly EntityLookupSystem _lookupSystem = default!; + [Dependency] private readonly TurfSystem _turf = default!; + [Dependency] private readonly IMapManager _mapMan = default!; + [Dependency] private readonly SharedContainerSystem _container = default!; + [Dependency] private readonly SharedPlasmaVesselSystem _plasmaVessel = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnWallDoAfter); + SubscribeLocalEvent(OnWindowDoAfter); + } + + private void OnWallDoAfter(EntityUid uid, ResinSpinnerComponent component, ResinWallDoAfterEvent args) + { + if (args.Cancelled || args.Handled || component.Deleted) + return; + + CreateStructure(uid, component, component.WallPrototype); + args.Handled = true; + } + + private void OnWindowDoAfter(EntityUid uid, ResinSpinnerComponent component, ResinWindowDoAfterEvent args) + { + if (args.Cancelled || args.Handled || component.Deleted) + return; + + CreateStructure(uid, component, component.WindowPrototype); + args.Handled = true; + } + + public void CreateStructure(EntityUid uid, ResinSpinnerComponent component, string structurePrototype) + { + + if (_container.IsEntityOrParentInContainer(uid)) + return; + + var xform = Transform(uid); + // Get the tile in front of the drone + var offsetValue = xform.LocalRotation.ToWorldVec(); + var coords = xform.Coordinates.Offset(offsetValue).SnapToGrid(EntityManager, _mapMan); + var tile = coords.GetTileRef(EntityManager, _mapMan); + if (tile == null) + return; + + // Check there are no walls there + if (_turf.IsTileBlocked(tile.Value, CollisionGroup.Impassable)) + { + _popupSystem.PopupEntity(Loc.GetString("alien-create-structure-failed"), uid, uid); + return; + } + + // Check there are no mobs there + foreach (var entity in _lookupSystem.GetLocalEntitiesIntersecting(tile.Value, 0f)) + { + if (HasComp(entity) && entity != uid) + { + _popupSystem.PopupEntity(Loc.GetString("alien-create-structure-failed"), uid, uid); + return; + } + } + // Make sure we set the invisible wall to despawn properly + Spawn(structurePrototype, _turf.GetTileCenter(tile.Value)); + _plasmaVessel.ChangePlasmaAmount(uid, -component.PlasmaCostWall); + } +} diff --git a/Content.Server/Chat/Commands/AliensayCommand.cs b/Content.Server/Chat/Commands/AliensayCommand.cs new file mode 100644 index 00000000000..4adaee3f4e0 --- /dev/null +++ b/Content.Server/Chat/Commands/AliensayCommand.cs @@ -0,0 +1,46 @@ +using Content.Server.Chat.Managers; +using Content.Server.Chat.Systems; +using Content.Shared.Administration; +using Robust.Shared.Console; +using Robust.Shared.Enums; + +namespace Content.Server.Chat.Commands +{ + [AnyCommand] + internal sealed class AliensayCommand : IConsoleCommand + { + public string Command => "aliensay"; + public string Description => "Send message to your hivemind"; + public string Help => "aliensay "; + + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (shell.Player is not { } player) + { + shell.WriteError("This command cannot be run from the server."); + return; + } + + if (player.Status != SessionStatus.InGame) + return; + + if (player.AttachedEntity is not {} playerEntity) + { + shell.WriteError("You don't have an entity!"); + return; + } + + if (args.Length < 1) + return; + + var message = string.Join(" ", args).Trim(); + if (string.IsNullOrEmpty(message)) + return; + + IoCManager.Resolve().GetEntitySystem() + .TrySendXenoHivemindMessage(playerEntity, message, InGameOOCChatType.HiveXeno, false, shell, player); + + + } + } +} diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index be6e8b78fef..dbd89d42d0b 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -13,6 +13,7 @@ using Content.Server.Station.Components; using Content.Server.Station.Systems; using Content.Shared.ActionBlocker; +using Content.Shared.Aliens.Components; using Content.Shared.CCVar; using Content.Shared.Chat; using Content.Shared.Database; @@ -307,6 +308,38 @@ public void TrySendInGameOOCMessage( } } + public void TrySendXenoHivemindMessage( + EntityUid source, + string message, + InGameOOCChatType type, + bool hideChat, + IConsoleShell? shell = null, + ICommonSession? player = null + ) + { + if (!CanSendInGame(message, shell, player)) + return; + + if (player != null && !_chatManager.HandleRateLimit(player)) + return; + + // It doesn't make any sense for a non-player to send in-game OOC messages, whereas non-players may be sending + // in-game IC messages. + if (player?.AttachedEntity is not { Valid: true } entity || source != entity) + return; + + message = SanitizeInGameOOCMessage(message); + + var sendType = type; + + switch (sendType) + { + case InGameOOCChatType.HiveXeno: + SendXenoHivemindChat(source, player, message, hideChat); + break; + } + } + #region Announcements /// @@ -619,6 +652,36 @@ private void SendDeadChat(EntityUid source, ICommonSession player, string messag _chatManager.ChatMessageToMany(ChatChannel.Dead, message, wrappedMessage, source, hideChat, true, clients.ToList(), author: player.UserId); } + + private void SendXenoHivemindChat(EntityUid source, ICommonSession player, string message, bool hideChat) + { + var clients = GetXenoChatClients(); + var playerName = Name(source); + var speech = GetSpeechVerb(source, message); + string wrappedMessage; + if (!HasComp(source)) + { + wrappedMessage = Loc.GetString(speech.Bold ? "chat-manager-entity-say-bold-wrap-message" : "chat-manager-entity-say-wrap-message", + ("entityName", playerName), + ("verb", Loc.GetString(_random.Pick(speech.SpeechVerbStrings))), + ("fontType", speech.FontId), + ("fontSize", speech.FontSize), + ("message", FormattedMessage.EscapeText(message))); + _adminLogger.Add(LogType.Chat, LogImpact.Low, $"Xeno Hivemind chat from {player:Player}: {message}"); + } + else + { + wrappedMessage = Loc.GetString(speech.Bold ? "chat-manager-entity-say-bold-wrap-message" : "chat-manager-entity-say-wrap-message", + ("entityName", playerName), + ("verb", Loc.GetString(_random.Pick(speech.SpeechVerbStrings))), + ("fontType", speech.FontId), + ("fontSize", 25), + ("message", FormattedMessage.EscapeText(message))); + _adminLogger.Add(LogType.Chat, LogImpact.Low, $"Xeno Hivemind chat from queen {player:Player}: {message}"); + } + if (HasComp(source)) + _chatManager.ChatMessageToMany(ChatChannel.XenoHivemind, message, wrappedMessage, source, hideChat, true, clients.ToList(), author: player.UserId); + } #endregion #region Utility @@ -766,6 +829,14 @@ private IEnumerable GetDeadChatClients() .Select(p => p.Channel); } + private IEnumerable GetXenoChatClients() + { + return Filter.Empty() + .AddWhereAttachedEntity(HasComp) + .Recipients + .Select(p => p.Channel); + } + private string SanitizeMessagePeriod(string message) { if (string.IsNullOrEmpty(message)) @@ -960,7 +1031,8 @@ public enum InGameICChatType : byte public enum InGameOOCChatType : byte { Looc, - Dead + Dead, + HiveXeno } /// diff --git a/Content.Server/Devour/DevourSystem.cs b/Content.Server/Devour/DevourSystem.cs index febbd093a6c..86116bd6877 100644 --- a/Content.Server/Devour/DevourSystem.cs +++ b/Content.Server/Devour/DevourSystem.cs @@ -46,4 +46,3 @@ private void OnDoAfter(EntityUid uid, DevourerComponent component, DevourDoAfter _audioSystem.PlayPvs(component.SoundDevour, uid); } } - diff --git a/Content.Server/Medical/VomitActionSystem.cs b/Content.Server/Medical/VomitActionSystem.cs new file mode 100644 index 00000000000..4f21543782a --- /dev/null +++ b/Content.Server/Medical/VomitActionSystem.cs @@ -0,0 +1,26 @@ +using Content.Server.Body.Systems; +using Content.Server.Medical.Components; +using Content.Shared.Medical; + +namespace Content.Server.Medical; + +/// +/// This handles... +/// +public sealed class VomitActionSystem : SharedVomitActionSystem +{ + /// + [Dependency] private readonly VomitSystem _vomit = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnVomitAction); + } + + protected void OnVomitAction(EntityUid uid, VomitActionComponent component, VomitActionEvent args) + { + _vomit.Vomit(uid, component.ThirstAdded, component.HungerAdded); + ContainerSystem.EmptyContainer(component.Stomach, true); + } +} diff --git a/Content.Server/Polymorph/Components/TimedPolymorphComponent.cs b/Content.Server/Polymorph/Components/TimedPolymorphComponent.cs new file mode 100644 index 00000000000..8a918e8b356 --- /dev/null +++ b/Content.Server/Polymorph/Components/TimedPolymorphComponent.cs @@ -0,0 +1,28 @@ +using System.Threading; +using Content.Shared.Polymorph; +using Content.Shared.Whitelist; +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; + +namespace Content.Server.Polymorph.Components; + +/// +/// This is used for polymorphing entity after time +/// +[RegisterComponent] +public sealed partial class TimedPolymorphComponent : Component +{ + [DataField(required: true)] + public ProtoId PolymorphPrototype; + + [DataField] + public SoundSpecifier Sound = new SoundPathSpecifier("/Audio/Magic/forcewall.ogg"); + + [DataField] + public float PolymorphTime = 5f; + + [DataField] + public bool Enabled = true; + + public CancellationTokenSource? TokenSource; +} diff --git a/Content.Server/Polymorph/Systems/TimedPolymorphSystem.cs b/Content.Server/Polymorph/Systems/TimedPolymorphSystem.cs new file mode 100644 index 00000000000..3474692ff52 --- /dev/null +++ b/Content.Server/Polymorph/Systems/TimedPolymorphSystem.cs @@ -0,0 +1,38 @@ +using System.Threading; + +using Content.Server.Polymorph.Components; + +namespace Content.Server.Polymorph.Systems; + +/// +/// This handles polymorphing entity after time +/// +public sealed class TimedPolymorphSystem : EntitySystem +{ + [Dependency] private readonly PolymorphSystem _polymorph = default!; + /// + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnPolymorphInit); + SubscribeLocalEvent(OnTimedPolymorphShutdown); + } + + private void OnPolymorphInit(EntityUid uid, TimedPolymorphComponent component, ComponentInit args) + { + component.TokenSource?.Cancel(); + component.TokenSource = new CancellationTokenSource(); + uid.SpawnRepeatingTimer(TimeSpan.FromSeconds(component.PolymorphTime), () => OnTimerFired(uid, component), component.TokenSource.Token); + } + + private void OnTimerFired(EntityUid uid, TimedPolymorphComponent component) + { + if (component.Enabled) + _polymorph.PolymorphEntity(uid, component.PolymorphPrototype); + } + + private void OnTimedPolymorphShutdown(EntityUid uid, TimedPolymorphComponent component, ComponentShutdown args) + { + component.TokenSource?.Cancel(); + } +} diff --git a/Content.Server/Spawners/Components/AreaSpawnerComponent.cs b/Content.Server/Spawners/Components/AreaSpawnerComponent.cs new file mode 100644 index 00000000000..1bef3537e26 --- /dev/null +++ b/Content.Server/Spawners/Components/AreaSpawnerComponent.cs @@ -0,0 +1,37 @@ +using System.Threading; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Server.Spawners.Components; + +/// +/// Spawns Entities in area around spawner +/// +[RegisterComponent] +public sealed partial class AreaSpawnerComponent : Component +{ + // Maximum offset of entities spawned. + [ViewVariables(VVAccess.ReadWrite)] + [DataField] + public float Radius; + + // Prototype of entity spawned + [ViewVariables(VVAccess.ReadWrite)] + [DataField("spawnPrototype", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string SpawnPrototype; + + /// + /// Length of the interval between spawn attempts. + /// + [DataField] + public int IntervalSeconds = 20; + + // This will spawn entities to every tile in spawn radius + [DataField] + public bool SpawnToAllValidTiles = true; + + [ViewVariables] + public int SpawnRadius; + + public CancellationTokenSource? TokenSource; +} diff --git a/Content.Server/Spawners/EntitySystems/AreaSpawnerSystem.cs b/Content.Server/Spawners/EntitySystems/AreaSpawnerSystem.cs new file mode 100644 index 00000000000..e7556c2e447 --- /dev/null +++ b/Content.Server/Spawners/EntitySystems/AreaSpawnerSystem.cs @@ -0,0 +1,167 @@ +using System.Linq; +using System.Numerics; +using System.Threading; +using Content.Server.Spawners.Components; +using Content.Shared.Coordinates.Helpers; +using Content.Shared.Directions; +using Content.Shared.Maps; +using Content.Shared.Physics; +using Content.Shared.Random; +using Robust.Shared.Map; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Generic; +using Robust.Shared.Utility; + +namespace Content.Server.Spawners.EntitySystems; + +/// +/// Spawns entities in area around core, progressing from center to edges. +/// +public sealed class AreaSpawnerSystem : EntitySystem +{ + /// + [Dependency] private readonly TurfSystem _turf = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IMapManager _mapMan = default!; + [Dependency] private readonly IPrototypeManager _protoMan = default!; + + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnSpawnerInit); + SubscribeLocalEvent(OnTimedSpawnerShutdown); + } + + private void OnSpawnerInit(EntityUid uid, AreaSpawnerComponent component, ComponentInit args) + { + component.TokenSource?.Cancel(); + component.TokenSource = new CancellationTokenSource(); + uid.SpawnRepeatingTimer(TimeSpan.FromSeconds(component.IntervalSeconds), () => OnTimerFired(uid, component), component.TokenSource.Token); + } + + /// + /// If there is any space near the core, spawning entity, else increasing spawn radius, until it will be equal to radius in the component. + /// + /// Entity uid + /// AreaSpawner component + private void OnTimerFired(EntityUid uid, AreaSpawnerComponent component) + { + var validTiles = GetValidTilesInRadius(uid, component, component.SpawnRadius); + while (validTiles.Count == 0 && component.SpawnRadius <= component.Radius) + { + component.SpawnRadius++; + validTiles = GetValidTilesInRadius(uid, component, component.SpawnRadius); + } + + validTiles = GetValidTilesInRadius(uid, component, component.SpawnRadius); + RandomlySpawnEntity(uid, component, validTiles); + } + + /// + /// Spawning entity in random chosen location from the list + /// + /// Entity uid + /// AreaSpawner component + /// List of possible location offsets from the core + public void RandomlySpawnEntity(EntityUid uid, AreaSpawnerComponent component, List locations) + { + if (component.SpawnToAllValidTiles) + { + foreach (var location in locations) + { + Spawn(component.SpawnPrototype, Transform(uid).Coordinates.Offset(location)); + } + } + else + { + var location = locations.ElementAt(_random.Next(0, locations.Count)); + Spawn(component.SpawnPrototype, Transform(uid).Coordinates.Offset(location)); + } + + } + + /// + /// Getting valid for spawn tiles in radius + /// + /// Entity uid + /// AreaSpawner component + /// Radius in which we should search + /// List of location offsets from the core + public List GetValidTilesInRadius(EntityUid uid, AreaSpawnerComponent component, int radius) + { + var validTiles = new List(); + for (var y = -radius; y <= radius; y++) + { + for (var x = -radius; x <= radius; x++) + { + var tile = new Vector2(x, y); + if (IsTileValidForSpawn(tile, + component.SpawnPrototype, uid)) + validTiles.Add(tile); + } + } + + return validTiles; + } + + /// + /// Checking if there is neither walls, nor same entity in the tile + /// + /// + /// + /// + /// True if tile is valid for spawn, else if not + public bool IsTileValidForSpawn(Vector2 offset, string entityPrototype, EntityUid uid) + { + // Get the tile of spawn checker + var xform = Transform(uid); + var coords = xform.Coordinates.Offset(offset); + var tile = coords.GetTileRef(EntityManager, _mapMan); + if (tile == null) + return false; + + // Check there are no walls there + if (_turf.IsTileBlocked(tile.Value, CollisionGroup.Impassable)) + { + return false; + } + + // Check there are no same entities in tile + foreach (var entity in _lookup.GetEntitiesInRange(coords, 0.1f)) + { + if (Prototype(entity) == null) + continue; + if (Prototype(entity)!.ID == entityPrototype || Prototype(entity) == Prototype(uid)) + return false; + } + + var offsets = new List(); + + offsets.Add(new Vector2(0, 1)); + offsets.Add(new Vector2(0, -1)); + offsets.Add(new Vector2(1, 0)); + offsets.Add(new Vector2(-1, 0)); + + foreach (var check in offsets) + { + foreach (var entity in _lookup.GetEntitiesInRange(coords.Offset(check), 0.1f)) + { + if (Prototype(entity) == null) + continue; + if (Prototype(entity)!.ID == entityPrototype || Prototype(entity) == Prototype(uid)) + return true; + } + } + + + return false; + } + + private void OnTimedSpawnerShutdown(EntityUid uid, AreaSpawnerComponent component, ComponentShutdown args) + { + component.TokenSource?.Cancel(); + } +} diff --git a/Content.Shared/Aliens/Components/AcidMakerComponent.cs b/Content.Shared/Aliens/Components/AcidMakerComponent.cs new file mode 100644 index 00000000000..fc2b7e648ee --- /dev/null +++ b/Content.Shared/Aliens/Components/AcidMakerComponent.cs @@ -0,0 +1,49 @@ +using Content.Shared.Aliens.Systems; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Aliens.Components; + +/// +/// This is used for... +/// +[RegisterComponent, NetworkedComponent, Access(typeof(AcidMakerSystem)), AutoGenerateComponentState] +public sealed partial class AcidMakerComponent : Component +{ + /// + /// The text that pops up whenever making acid fails for not having enough plasma. + /// + [DataField("popupText")] + [ViewVariables(VVAccess.ReadWrite)] + [AutoNetworkedField] + public string PopupText = "alien-action-fail-plasma"; + + /// + /// What will be produced at the end of the action. + /// + [DataField(required: true)] + [ViewVariables(VVAccess.ReadWrite)] + [AutoNetworkedField] + public EntProtoId EntityProduced; + + /// + /// The entity needed to actually make acid. This will be granted (and removed) upon the entity's creation. + /// + [DataField(required: true)] + [ViewVariables(VVAccess.ReadWrite)] + [AutoNetworkedField] + public EntProtoId Action; + + [AutoNetworkedField] + [DataField("actionEntity")] + public EntityUid? ActionEntity; + + /// + /// This will subtract (not add, don't get this mixed up) from the current plasma of the mob making acid. + /// + [DataField("plasmaCost")] + [ViewVariables(VVAccess.ReadWrite)] + [AutoNetworkedField] + public float PlasmaCost = 150f; + +} diff --git a/Content.Shared/Aliens/Components/AlienComponent.cs b/Content.Shared/Aliens/Components/AlienComponent.cs new file mode 100644 index 00000000000..83357a0502a --- /dev/null +++ b/Content.Shared/Aliens/Components/AlienComponent.cs @@ -0,0 +1,55 @@ +using Content.Shared.Actions; +using Content.Shared.Damage; +using Content.Shared.FixedPoint; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Aliens.Components; + +/// +/// This is used for... +/// +[RegisterComponent, NetworkedComponent] +[AutoGenerateComponentState(true)] +public sealed partial class AlienComponent : Component +{ + // Actions + [DataField] + public EntProtoId ToggleLightingAction = "ActionToggleLightingAlien"; + + [DataField, AutoNetworkedField] + public EntityUid? ToggleLightingActionEntity; + + [DataField("devourAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? DevourAction = "ActionDevour"; + + /// + /// This will subtract (not add, don't get this mixed up) from the current plasma of the mob making node. + /// + [DataField("plasmaCostNode")] + [ViewVariables(VVAccess.ReadWrite)] + [AutoNetworkedField] + public float PlasmaCostNode = 50f; + + /// + /// The node prototype to use. + /// + [DataField("nodePrototype", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string WeednodePrototype = "AlienWeednode"; + + [DataField("nodeAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? WeednodeAction = "ActionAlienNode"; + + + + [DataField("nodeActionEntity")] public EntityUid? WeednodeActionEntity; + + [DataField(required: true)] + public DamageSpecifier WeedHeal; + +} + +public sealed partial class ToggleLightingAlienActionEvent : InstantActionEvent { } + +public sealed partial class WeednodeActionEvent : InstantActionEvent { } diff --git a/Content.Shared/Aliens/Components/AlienEvolutionComponent.cs b/Content.Shared/Aliens/Components/AlienEvolutionComponent.cs new file mode 100644 index 00000000000..98a21338343 --- /dev/null +++ b/Content.Shared/Aliens/Components/AlienEvolutionComponent.cs @@ -0,0 +1,44 @@ +using Content.Shared.Polymorph; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Aliens.Components; + +/// +/// This is used for... +/// +[RegisterComponent] +public sealed partial class AlienEvolutionComponent : Component +{ + [DataField] + public ProtoId DronePolymorphPrototype = "AlienEvolutionDrone"; + + [DataField("droneEvolutionAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? DroneEvolutionAction = "ActionEvolveDrone"; + + [DataField("droneEvolutionActionEntity")] + public EntityUid? DroneEvolutionActionEntity; + + [DataField] + public ProtoId SentinelPolymorphPrototype = "AlienEvolutionSentinel"; + + [DataField("sentinelEvolutionAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? SentinelEvolutionAction = "ActionEvolveSentinel"; + + [DataField("sentinelEvolutionActionEntity")] + public EntityUid? SentinelEvolutionActionEntity; + + [DataField] + public ProtoId HunterPolymorphPrototype = "AlienEvolutionHunter"; + + [DataField("hunterEvolutionAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? HunterEvolutionAction = "ActionEvolveHunter"; + + [DataField("hunterEvolutionActionEntity")] + public EntityUid? HunterEvolutionActionEntity; + + [DataField("evolutionCooldown")] + public TimeSpan EvolutionCooldown; + + +} diff --git a/Content.Shared/Aliens/Components/AlienInfectedComponent.cs b/Content.Shared/Aliens/Components/AlienInfectedComponent.cs new file mode 100644 index 00000000000..8468ea7320d --- /dev/null +++ b/Content.Shared/Aliens/Components/AlienInfectedComponent.cs @@ -0,0 +1,47 @@ +using System.Threading; +using Content.Shared.StatusIcon; +using Robust.Shared.GameStates; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Aliens.Components; + +/// +/// This is used for... +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class AlienInfectedComponent : Component +{ + + [DataField] + public float GrowTime = 2f; + + [DataField] + public EntProtoId Prototype = "MobAlienLarva"; + + [DataField] + public EntProtoId OrganProtoId = "AlienLarvaOrgan"; + + [DataField] + public EntProtoId PartProtoId = "AlienLarvaPart"; + + public readonly HashSet> InfectedIcons = + [ + "AlienInfectedIconStageZero", + "AlienInfectedIconStageOne", + "AlienInfectedIconStageTwo", + "AlienInfectedIconStageThree", + "AlienInfectedIconStageFour", + "AlienInfectedIconStageFive" + ]; + + [ViewVariables] + public int GrowthStage = 0; + + [DataField] + public float GrowProb = 0.03f; + + [DataField] + public TimeSpan NextGrowRoll = TimeSpan.Zero; +} diff --git a/Content.Shared/Aliens/Components/AlienQueenComponent.cs b/Content.Shared/Aliens/Components/AlienQueenComponent.cs new file mode 100644 index 00000000000..fb3a5329f78 --- /dev/null +++ b/Content.Shared/Aliens/Components/AlienQueenComponent.cs @@ -0,0 +1,52 @@ +using Content.Shared.Actions; +using Content.Shared.Polymorph; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Aliens.Components; + +/// +/// This is used for... +/// +[RegisterComponent] +public sealed partial class AlienQueenComponent : Component +{ + [DataField("plasmaCostNode")] + [ViewVariables(VVAccess.ReadWrite)] + public float PlasmaCostEgg = 75f; + + /// + /// The egg prototype to use. + /// + [DataField("eggPrototype", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string EggPrototype = "AlienEggGrowing"; + + [DataField("eggAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? EggAction = "ActionAlienEgg"; + + [DataField("eggActionEntity")] public EntityUid? EggActionEntity; + + /// + /// The entity needed to actually make acid. This will be granted (and removed) upon the entity's creation. + /// + [DataField(required: true)] + [ViewVariables(VVAccess.ReadWrite)] + public EntProtoId Action; + + [DataField("actionEntity")] + public EntityUid? ActionEntity; + + /// + /// This will subtract (not add, don't get this mixed up) from the current plasma of the mob making acid. + /// + [DataField("plasmaCost")] + [ViewVariables(VVAccess.ReadWrite)] + public float PlasmaCostRoyalLarva = 300f; + + [DataField("praetorianEvolutionPrototype", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string PraetorianPolymorphPrototype = "AlienEvolutionPraetorian"; +} + +public sealed partial class AlienEggActionEvent : InstantActionEvent { } + +public sealed partial class RoyalLarvaActionEvent : EntityTargetActionEvent { } diff --git a/Content.Shared/Aliens/Components/AlienStalkComponent.cs b/Content.Shared/Aliens/Components/AlienStalkComponent.cs new file mode 100644 index 00000000000..dde7cc87805 --- /dev/null +++ b/Content.Shared/Aliens/Components/AlienStalkComponent.cs @@ -0,0 +1,26 @@ +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Aliens.Components; + +/// +/// This is used for... +/// +[RegisterComponent] +public sealed partial class AlienStalkComponent : Component +{ + + [DataField("stalkAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? StalkAction = "ActionStalkAlien"; + + [DataField("stalkActionEntity")] + public EntityUid? StalkActionEntity; + + [DataField] + public int PlasmaCost = 5; + + [ViewVariables] + public bool IsActive; + + public float Sprint; +} diff --git a/Content.Shared/Aliens/Components/FacehuggerComponent.cs b/Content.Shared/Aliens/Components/FacehuggerComponent.cs new file mode 100644 index 00000000000..4baa76f3a43 --- /dev/null +++ b/Content.Shared/Aliens/Components/FacehuggerComponent.cs @@ -0,0 +1,31 @@ +using System.Threading; +using Content.Shared.Polymorph; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Aliens.Components; + +/// +/// This is used for... +/// +[RegisterComponent] +public sealed partial class FacehuggerComponent : Component +{ + [DataField] + public float Range = 3f; + + [DataField] + public bool Active = true; + + [ViewVariables] + public TimeSpan GrowTime = TimeSpan.Zero; + + [DataField] + public float EmbryoTime = 10f; + + [DataField] + public ProtoId FacehuggerPolymorphPrototype = "FacehuggerToInactive"; + + public bool Equipped; + + public EntityUid Equipee; +} diff --git a/Content.Shared/Aliens/Components/PlasmaGainModifierComponent.cs b/Content.Shared/Aliens/Components/PlasmaGainModifierComponent.cs new file mode 100644 index 00000000000..25b282aede4 --- /dev/null +++ b/Content.Shared/Aliens/Components/PlasmaGainModifierComponent.cs @@ -0,0 +1,10 @@ +namespace Content.Shared.Aliens.Components; + +/// +/// This is used for marking entity as plasma gaining modificator, when alien stands on it +/// +[RegisterComponent] +public sealed partial class PlasmaGainModifierComponent : Component +{ + +} diff --git a/Content.Shared/Aliens/Components/PlasmaTransferComponent.cs b/Content.Shared/Aliens/Components/PlasmaTransferComponent.cs new file mode 100644 index 00000000000..bea3d2ab7dd --- /dev/null +++ b/Content.Shared/Aliens/Components/PlasmaTransferComponent.cs @@ -0,0 +1,24 @@ +using Content.Shared.Actions; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Aliens.Components; + +/// +/// This is used for... +/// +[RegisterComponent] +public sealed partial class PlasmaTransferComponent : Component +{ + [ViewVariables(VVAccess.ReadWrite)] + public EntProtoId Action = "ActionAlienTransferPlasma"; + + [DataField("actionEntity")] + public EntityUid? ActionEntity; + + [DataField] + public float Amount = 50f; +} + +public sealed partial class TransferPlasmaActionEvent : EntityTargetActionEvent { } + + diff --git a/Content.Shared/Aliens/Components/PlasmaVesselComponent.cs b/Content.Shared/Aliens/Components/PlasmaVesselComponent.cs new file mode 100644 index 00000000000..24e763fa433 --- /dev/null +++ b/Content.Shared/Aliens/Components/PlasmaVesselComponent.cs @@ -0,0 +1,42 @@ +using Content.Shared.FixedPoint; +using Robust.Shared.GameStates; + +namespace Content.Shared.Aliens.Components; + +/// +/// This is used for... +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class PlasmaVesselComponent : Component +{ + /// + /// The total amount of plasma the alien has. + /// + [ViewVariables(VVAccess.ReadWrite)] + public FixedPoint2 Plasma = 0; + + /// + /// The entity's current max amount of essence. Can be increased + /// through harvesting player souls. + /// + [ViewVariables(VVAccess.ReadWrite), DataField("maxPlasma")] + public FixedPoint2 PlasmaRegenCap = 500; + + [ViewVariables] + public FixedPoint2 PlasmaPerSecond = 1f; + + /// + /// The amount of plasma passively generated per second. + /// + [ViewVariables(VVAccess.ReadWrite), DataField("plasmaPerSecond")] + public FixedPoint2 PlasmaUnmodified = 1f; + + [ViewVariables] + public float Accumulator = 0; + + /// + /// The amount of plasma to which plasma per second will be equal, when alien stands on weeds + /// + [ViewVariables(VVAccess.ReadWrite), DataField("plasmaModified")] + public float WeedModifier = 1.5f; +} diff --git a/Content.Shared/Aliens/Components/PraetorianEvolutionComponent.cs b/Content.Shared/Aliens/Components/PraetorianEvolutionComponent.cs new file mode 100644 index 00000000000..1494b24d1e1 --- /dev/null +++ b/Content.Shared/Aliens/Components/PraetorianEvolutionComponent.cs @@ -0,0 +1,25 @@ +using Content.Shared.Polymorph; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Aliens.Components; + +/// +/// This is used for... +/// +[RegisterComponent] +public sealed partial class PraetorianEvolutionComponent : Component +{ + [DataField] + public ProtoId PraetorianPolymorphPrototype = "AlienEvolutionPraetorian"; + + [DataField("praetorianEvolutionAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? PraetorianEvolutionAction = "ActionEvolvePraetorian"; + + [DataField("praetorianEvolutionActionEntity")] + public EntityUid? PraetorianEvolutionActionEntity; + + [DataField("plasmaCost")] + [ViewVariables(VVAccess.ReadWrite)] + public float PlasmaCost = 150f; +} diff --git a/Content.Shared/Aliens/Components/ResinSpinnerComponent.cs b/Content.Shared/Aliens/Components/ResinSpinnerComponent.cs new file mode 100644 index 00000000000..1d394d8f891 --- /dev/null +++ b/Content.Shared/Aliens/Components/ResinSpinnerComponent.cs @@ -0,0 +1,70 @@ +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Aliens.Components; + +/// +/// This is used for... +/// +[RegisterComponent, AutoGenerateComponentState] +public sealed partial class ResinSpinnerComponent : Component +{ + [DataField("popupText")] + [ViewVariables(VVAccess.ReadWrite)] + [AutoNetworkedField] + public string PopupText = "alien-action-fail-plasma"; + + /// + /// How long will it take to make. + /// + [DataField("productionLengthWall")] + [ViewVariables(VVAccess.ReadWrite)] + [AutoNetworkedField] + public float ProductionLengthWall = 2f; + + /// + /// This will subtract (not add, don't get this mixed up) from the current plasma of the mob making structure. + /// + [DataField("plasmaCostWall")] + [ViewVariables(VVAccess.ReadWrite)] + [AutoNetworkedField] + public float PlasmaCostWall = 60f; + + /// + /// The wall prototype to use. + /// + [DataField("wallPrototype", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string WallPrototype = "WallResin"; + + [DataField("resinWallAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? ResinWallAction = "ActionAlienDroneWall"; + + [DataField("resinWallActionEntity")] public EntityUid? ResinWallActionEntity; + + /// + /// How long will it take to make. + /// + [DataField("productionLengthWindow")] + [ViewVariables(VVAccess.ReadWrite)] + [AutoNetworkedField] + public float ProductionLengthWindow = 2f; + + /// + /// This will subtract (not add, don't get this mixed up) from the current plasma of the mob making structure. + /// + [DataField("plasmaCostWindow")] + [ViewVariables(VVAccess.ReadWrite)] + [AutoNetworkedField] + public float PlasmaCostWindow = 60f; + + /// + /// The wall prototype to use. + /// + [DataField("windowPrototype", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string WindowPrototype = "WindowResin"; + + [DataField("resinWindowAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? ResinWindowAction = "ActionWindowResin"; + + [DataField("resinWindowActionEntity")] public EntityUid? ResinWindowActionEntity; +} diff --git a/Content.Shared/Aliens/Components/ShowInfectedIconsComponent.cs b/Content.Shared/Aliens/Components/ShowInfectedIconsComponent.cs new file mode 100644 index 00000000000..bd889c26656 --- /dev/null +++ b/Content.Shared/Aliens/Components/ShowInfectedIconsComponent.cs @@ -0,0 +1,14 @@ +using Content.Shared.StatusIcon; +using Robust.Shared.GameStates; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Aliens.Components; + +/// +/// This is used for... +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class ShowInfectedIconsComponent : Component +{ + +} diff --git a/Content.Shared/Aliens/Components/TailLashComponent.cs b/Content.Shared/Aliens/Components/TailLashComponent.cs new file mode 100644 index 00000000000..fffa12dfc48 --- /dev/null +++ b/Content.Shared/Aliens/Components/TailLashComponent.cs @@ -0,0 +1,32 @@ +using Content.Shared.Actions; +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Aliens.Components; + +/// +/// This is used for... +/// +[RegisterComponent] +public sealed partial class TailLashComponent : Component +{ + [DataField("tailLashAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? TailLashAction = "ActionTailLash"; + + [DataField("tailLashActionEntity")] public EntityUid? TailLashActionEntity; + + [DataField] + public float LashRange = 2f; + + [DataField] + public int StunTime = 5; + + [DataField] + public int Cooldown = 11; + + [DataField("disarmSuccessSound")] + public SoundSpecifier LashSound = new SoundPathSpecifier("/Audio/Effects/thudswoosh.ogg"); +} + +public sealed partial class TailLashActionEvent : InstantActionEvent { } diff --git a/Content.Shared/Aliens/Systems/AcidMakerSystem.cs b/Content.Shared/Aliens/Systems/AcidMakerSystem.cs new file mode 100644 index 00000000000..7041864a11d --- /dev/null +++ b/Content.Shared/Aliens/Systems/AcidMakerSystem.cs @@ -0,0 +1,74 @@ +using Content.Shared.Actions; +using Content.Shared.Aliens.Components; +using Content.Shared.DoAfter; +using Content.Shared.Popups; +using Content.Shared.Stacks; +using Robust.Shared.Network; +using Robust.Shared.Serialization; + +namespace Content.Shared.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class AcidMakerSystem : EntitySystem +{ + // Managers + [Dependency] private readonly INetManager _netManager = default!; + + // Systems + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; + [Dependency] private readonly SharedStackSystem _stackSystem = default!; + [Dependency] private readonly SharedPlasmaVesselSystem _plasmaVesselSystem = default!; + + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnCompRemove); + SubscribeLocalEvent(OnAcidMakingStart); + } + + /// + /// Giveths the action to preform making acid on the entity + /// + private void OnMapInit(EntityUid uid, AcidMakerComponent comp, MapInitEvent args) + { + _actionsSystem.AddAction(uid, ref comp.ActionEntity, comp.Action); + } + + /// + /// Takeths away the action to preform making acid from the entity. + /// + private void OnCompRemove(EntityUid uid, AcidMakerComponent comp, ComponentShutdown args) + { + _actionsSystem.RemoveAction(uid, comp.ActionEntity); + } + + private void OnAcidMakingStart(EntityUid uid, AcidMakerComponent comp, AcidMakeActionEvent args) + { + + if (TryComp(uid, out var plasmaComp) + && plasmaComp.Plasma < comp.PlasmaCost) + { + _popupSystem.PopupClient(Loc.GetString(comp.PopupText), uid, uid); + return; + } + + _plasmaVesselSystem.ChangePlasmaAmount(uid, -comp.PlasmaCost); + if (_netManager.IsClient) // Have to do this because spawning stuff in shared is CBT. + return; + var newEntity = Spawn(comp.EntityProduced, Transform(uid).Coordinates); + + _stackSystem.TryMergeToHands(newEntity, uid); + } +} + +/// +/// Should be relayed upon using the action. +/// +public sealed partial class AcidMakeActionEvent : InstantActionEvent { } + diff --git a/Content.Shared/Aliens/Systems/SharedAlienEvolutionSystem.cs b/Content.Shared/Aliens/Systems/SharedAlienEvolutionSystem.cs new file mode 100644 index 00000000000..e8a355225ce --- /dev/null +++ b/Content.Shared/Aliens/Systems/SharedAlienEvolutionSystem.cs @@ -0,0 +1,25 @@ +using Content.Shared.Actions; + +namespace Content.Shared.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class SharedAlienEvolutionSystem : EntitySystem +{ + /// + public override void Initialize() + { + + } +} + +public sealed partial class AlienDroneEvolveActionEvent : InstantActionEvent { } + +public sealed partial class AlienSentinelEvolveActionEvent : InstantActionEvent { } + +public sealed partial class AlienPraetorianEvolveActionEvent : InstantActionEvent { } + +public sealed partial class AlienHunterEvolveActionEvent : InstantActionEvent { } + +public sealed partial class AlienQueenEvolveActionEvent : InstantActionEvent { } diff --git a/Content.Shared/Aliens/Systems/SharedAlienQueenSystem.cs b/Content.Shared/Aliens/Systems/SharedAlienQueenSystem.cs new file mode 100644 index 00000000000..8c0f50c9aa0 --- /dev/null +++ b/Content.Shared/Aliens/Systems/SharedAlienQueenSystem.cs @@ -0,0 +1,41 @@ +using Content.Shared.Actions; +using Content.Shared.Aliens.Components; +using Content.Shared.Popups; +using Content.Shared.Stacks; +using Robust.Shared.Network; + +namespace Content.Shared.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class SharedAlienQueenSystem : EntitySystem +{ + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnCompInit); + SubscribeLocalEvent(OnCompRemove); + + } + + /// + /// Giveths the action to preform making acid on the entity + /// + private void OnCompInit(EntityUid uid, AlienQueenComponent comp, ComponentStartup args) + { + _actionsSystem.AddAction(uid, ref comp.ActionEntity, comp.Action); + } + + /// + /// Takeths away the action to preform making acid from the entity. + /// + private void OnCompRemove(EntityUid uid, AlienQueenComponent comp, ComponentShutdown args) + { + _actionsSystem.RemoveAction(uid, comp.ActionEntity); + } +} + diff --git a/Content.Shared/Aliens/Systems/SharedAlienStalkSystem.cs b/Content.Shared/Aliens/Systems/SharedAlienStalkSystem.cs new file mode 100644 index 00000000000..3f8c47b9146 --- /dev/null +++ b/Content.Shared/Aliens/Systems/SharedAlienStalkSystem.cs @@ -0,0 +1,65 @@ +using Content.Shared.Actions; +using Content.Shared.Aliens.Components; +using Content.Shared.Movement.Components; +using Content.Shared.Movement.Systems; +using Content.Shared.Stealth; +using Content.Shared.Stealth.Components; + +namespace Content.Shared.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class SharedAlienStalkSystem : EntitySystem +{ + /// + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + [Dependency] private readonly SharedStealthSystem _stealth = default!; + [Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifier = default!; + [Dependency] private readonly SharedPlasmaVesselSystem _plasmaVessel = default!; + public override void Initialize() + { + base. Initialize(); + + SubscribeLocalEvent(OnComponentInit); + SubscribeLocalEvent(OnStalk); + } + + private void OnComponentInit(EntityUid uid, AlienStalkComponent component, ComponentInit args) + { + _actionsSystem.AddAction(uid, ref component.StalkActionEntity, component.StalkAction, uid); + + component.Sprint = EnsureComp(uid).BaseWalkSpeed; + } + + private void OnStalk(EntityUid uid, AlienStalkComponent component, AlienStalkActionEvent args) + { + var stealth = EnsureComp(uid); + var movementSpeedMofifier = EnsureComp(uid); + var sprint = component.Sprint; + component.Sprint = movementSpeedMofifier.BaseSprintSpeed; + _movementSpeedModifier.ChangeBaseSpeed(uid, movementSpeedMofifier.BaseWalkSpeed, sprint, + movementSpeedMofifier.Acceleration); + _stealth.SetVisibility(uid, 0.2f, stealth); + _stealth.SetEnabled(uid, !component.IsActive, stealth); + component.IsActive = !component.IsActive; + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var alien)) + { + if(TryComp(uid, out var stalk) + && alien.Plasma >= stalk.PlasmaCost + && stalk.IsActive) + { + _plasmaVessel.ChangePlasmaAmount(uid, -stalk.PlasmaCost, alien); + } + } + } +} + +public sealed partial class AlienStalkActionEvent : InstantActionEvent { } diff --git a/Content.Shared/Aliens/Systems/SharedFacehuggerSystem.cs b/Content.Shared/Aliens/Systems/SharedFacehuggerSystem.cs new file mode 100644 index 00000000000..221e85db196 --- /dev/null +++ b/Content.Shared/Aliens/Systems/SharedFacehuggerSystem.cs @@ -0,0 +1,85 @@ +using System.Linq; +using Content.Shared.Aliens.Components; +using Content.Shared.Ghost; +using Content.Shared.Hands.Components; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.IdentityManagement.Components; +using Content.Shared.Inventory; +using Content.Shared.Inventory.Events; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; + +namespace Content.Shared.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class SharedFacehuggerSystem : EntitySystem +{ + /// + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; + [Dependency] private readonly InventorySystem _inventory = default!; + public override void Initialize() + { + + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + + var validEntities = new Dictionary(); + + while (query.MoveNext(out var uid, out var alien)) + { + foreach (var entity in _lookup.GetEntitiesInRange(uid, alien.Range) + .Where(entity => _inventory.HasSlot(entity, "mask"))) + { + if (!_inventory.CanAccess(uid, entity, uid) || + EnsureComp(uid).CurrentState != MobState.Alive) + continue; + if(Prototype(entity) != null && Prototype(entity)!.ID == "AdminObserver") + continue; + if(!HasComp(entity) || Comp(entity).CurrentState == MobState.Dead) + continue; + if(HasComp(entity)) + continue; + if(!alien.Active) + continue; + validEntities.TryAdd(uid, entity); + } + } + + var invalidEntities = new Dictionary(); + + foreach (var entity in validEntities) + { + + var queryHelmets = EntityQueryEnumerator(); + while (queryHelmets.MoveNext(out var helmet, out _)) + { + var hands = CompOrNull(entity.Value); + if (!_inventory.GetHandOrInventoryEntities(entity.Value, SlotFlags.HEAD).Contains(helmet)) + continue; + if (_inventory.GetHandOrInventoryEntities(entity.Value, SlotFlags.HEAD).Contains(helmet) && + hands != null && + _hands.IsHolding(entity.Value, helmet, out _, hands)) + continue; + + validEntities.Remove(entity.Key); + invalidEntities.TryAdd(entity.Key, entity.Value); + break; + } + + if (invalidEntities.ContainsKey(entity.Key)) + continue; + _inventory.TryUnequip(entity.Value, "mask"); + _inventory.TryEquip(entity.Value, entity.Key, "mask"); + + + } + } +} diff --git a/Content.Shared/Aliens/Systems/SharedPlasmaGainModifierSystem.cs b/Content.Shared/Aliens/Systems/SharedPlasmaGainModifierSystem.cs new file mode 100644 index 00000000000..4b59cb90a2b --- /dev/null +++ b/Content.Shared/Aliens/Systems/SharedPlasmaGainModifierSystem.cs @@ -0,0 +1,17 @@ +using Content.Shared.Aliens.Components; +using Content.Shared.StepTrigger.Systems; +using Robust.Shared.Physics.Events; + +namespace Content.Shared.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class SharedPlasmaGainModifierSystem : EntitySystem +{ + public override void Initialize() + { + + } + +} diff --git a/Content.Shared/Aliens/Systems/SharedPlasmaTransferSystem.cs b/Content.Shared/Aliens/Systems/SharedPlasmaTransferSystem.cs new file mode 100644 index 00000000000..29e951d083a --- /dev/null +++ b/Content.Shared/Aliens/Systems/SharedPlasmaTransferSystem.cs @@ -0,0 +1,63 @@ +using Content.Shared.Actions; +using Content.Shared.Aliens.Components; +using Content.Shared.Popups; + +namespace Content.Shared.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class SharedPlasmaTransferSystem : EntitySystem +{ + [Dependency] private readonly SharedActionsSystem _actions = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedPlasmaVesselSystem _plasmaVessel = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnCompInit); + SubscribeLocalEvent(OnCompRemove); + SubscribeLocalEvent(OnPlasmaTransfer); + + } + + /// + /// Giveths the action to preform making acid on the entity + /// + private void OnCompInit(EntityUid uid, PlasmaTransferComponent comp, ComponentStartup args) + { + _actions.AddAction(uid, ref comp.ActionEntity, comp.Action); + } + + public void OnPlasmaTransfer(EntityUid uid, PlasmaTransferComponent component, TransferPlasmaActionEvent args) + { + if (!HasComp(args.Target)) + { + _popup.PopupEntity(Loc.GetString("alien-transfer-fail"), uid); + return; + } + + var plasmaVesselSelf = Comp(uid); + var plasmaVesselTarget = Comp(args.Target); + if (plasmaVesselSelf.Plasma >= component.Amount && component.Amount + plasmaVesselTarget.Plasma < plasmaVesselTarget.PlasmaRegenCap) + { + _plasmaVessel.ChangePlasmaAmount(uid, -component.Amount); + _plasmaVessel.ChangePlasmaAmount(args.Target, component.Amount); + } + else + { + _popup.PopupEntity(Loc.GetString("alien-transfer-fail"), uid); + } + + } + + /// + /// Takeths away the action to preform making acid from the entity. + /// + private void OnCompRemove(EntityUid uid, PlasmaTransferComponent comp, ComponentShutdown args) + { + _actions.RemoveAction(uid, comp.ActionEntity); + } +} diff --git a/Content.Shared/Aliens/Systems/SharedPlasmaVesselSystem.cs b/Content.Shared/Aliens/Systems/SharedPlasmaVesselSystem.cs new file mode 100644 index 00000000000..0559f6850ca --- /dev/null +++ b/Content.Shared/Aliens/Systems/SharedPlasmaVesselSystem.cs @@ -0,0 +1,89 @@ +using Content.Shared.Alert; +using Content.Shared.Aliens.Components; +using Content.Shared.Chat; +using Content.Shared.FixedPoint; +using Content.Shared.Popups; +using PlasmaVesselComponent = Content.Shared.Aliens.Components.PlasmaVesselComponent; + +namespace Content.Shared.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class SharedPlasmaVesselSystem : EntitySystem +{ + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + public override void Initialize() + { + + } + + public bool ChangePlasmaGain(EntityUid uid, float modifier, PlasmaVesselComponent? component = null) + { + if (component == null) + { + return false; + } + component.PlasmaPerSecond *= modifier; + + return true; + } + + public bool ChangePlasmaAmount(EntityUid uid, FixedPoint2 amount, PlasmaVesselComponent? component = null, bool regenCap = false) + { + if (!Resolve(uid, ref component)) + return false; + + component.Plasma += amount; + + if (regenCap) + FixedPoint2.Min(component.Plasma, component.PlasmaRegenCap); + + var stalk = CompOrNull(uid); + if (stalk != null && stalk.IsActive) + { + return true; + } + if(amount != component.PlasmaUnmodified && amount != component.WeedModifier) + { + _popup.PopupEntity(Loc.GetString("alien-left-plasma-part1") + component.Plasma + Loc.GetString("alien-left-plama-part2"), + uid); + } + + return true; + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var alien)) + { + alien.Accumulator += frameTime; + + if (alien.Accumulator <= 1) + continue; + alien.Accumulator -= 1; + + var weed = false; + foreach (var entity in _lookup.GetEntitiesInRange(Transform(uid).Coordinates, 0.1f)) + { + if (HasComp(entity)) + { + alien.PlasmaPerSecond = alien.WeedModifier; + weed = true; + } + } + + if (!weed) + alien.PlasmaPerSecond = alien.PlasmaUnmodified; + + if (alien.Plasma < alien.PlasmaRegenCap) + { + ChangePlasmaAmount(uid, alien.PlasmaPerSecond, alien, regenCap: true); + } + } + } +} diff --git a/Content.Shared/Aliens/Systems/SharedPraetorianEvolutionSystem.cs b/Content.Shared/Aliens/Systems/SharedPraetorianEvolutionSystem.cs new file mode 100644 index 00000000000..f98094ca49b --- /dev/null +++ b/Content.Shared/Aliens/Systems/SharedPraetorianEvolutionSystem.cs @@ -0,0 +1,17 @@ +using Content.Shared.Actions; + +namespace Content.Shared.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class SharedPraetorianEvolutionSystem : EntitySystem +{ + /// + public override void Initialize() + { + + } +} + + diff --git a/Content.Shared/Aliens/Systems/SharedResinSpinnerSystem.cs b/Content.Shared/Aliens/Systems/SharedResinSpinnerSystem.cs new file mode 100644 index 00000000000..de092f4ecf2 --- /dev/null +++ b/Content.Shared/Aliens/Systems/SharedResinSpinnerSystem.cs @@ -0,0 +1,81 @@ +using Content.Shared.Actions; +using Content.Shared.Aliens.Components; +using Content.Shared.Coordinates.Helpers; +using Content.Shared.DoAfter; +using Content.Shared.Maps; +using Content.Shared.Mobs.Components; +using Content.Shared.Physics; +using Content.Shared.Popups; +using Robust.Shared.Serialization; + +namespace Content.Shared.Aliens.Systems; + +/// +/// This handles... +/// . +public sealed class SharedResinSpinnerSystem : EntitySystem +{ + /// + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnComponentInit); + + SubscribeLocalEvent(OnWall); + SubscribeLocalEvent(OnWindow); + } + + private void OnComponentInit(EntityUid uid, ResinSpinnerComponent component, ComponentInit args) + { + _actionsSystem.AddAction(uid, ref component.ResinWallActionEntity, component.ResinWallAction, uid); + _actionsSystem.AddAction(uid, ref component.ResinWindowActionEntity, component.ResinWindowAction, uid); + } + + private void OnWall(EntityUid uid, ResinSpinnerComponent component, ResinWallActionEvent args) + { + OnStructureMaking(uid, component.PlasmaCostWall, component.ProductionLengthWall, component, new ResinWallDoAfterEvent()); + } + + private void OnWindow(EntityUid uid, ResinSpinnerComponent component, ResinWindowActionEvent args) + { + OnStructureMaking(uid, component.PlasmaCostWindow, component.ProductionLengthWindow, component, new ResinWindowDoAfterEvent()); + } + + private void OnStructureMaking(EntityUid uid, float cost, float productionLength, ResinSpinnerComponent component, DoAfterEvent doAfterEvent) + { + if (TryComp(uid, out var plasmaComp) + && plasmaComp.Plasma < cost) + { + _popupSystem.PopupClient(Loc.GetString(component.PopupText), uid, uid); + return; + } + + var doAfter = new DoAfterArgs(EntityManager, uid, productionLength, doAfterEvent, uid) + { + BlockDuplicate = true, + BreakOnDamage = true, + CancelDuplicate = true, + BreakOnUserMove = true + }; + + _doAfterSystem.TryStartDoAfter(doAfter); + } +} + +public sealed partial class ResinWallActionEvent : InstantActionEvent { } + +public sealed partial class ResinWindowActionEvent : InstantActionEvent { } + +/// +/// Is relayed at the end of the making structure. +/// +[Serializable, NetSerializable] +public sealed partial class ResinWallDoAfterEvent : SimpleDoAfterEvent { } + +[Serializable, NetSerializable] + +public sealed partial class ResinWindowDoAfterEvent : SimpleDoAfterEvent { } diff --git a/Content.Shared/Aliens/Systems/TailLashSystem.cs b/Content.Shared/Aliens/Systems/TailLashSystem.cs new file mode 100644 index 00000000000..823206a38b7 --- /dev/null +++ b/Content.Shared/Aliens/Systems/TailLashSystem.cs @@ -0,0 +1,45 @@ +using Content.Shared.Actions; +using Content.Shared.Aliens.Components; +using Content.Shared.Mobs.Components; +using Content.Shared.Stunnable; +using Robust.Shared.Audio.Systems; + +namespace Content.Shared.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class TailLashSystem : EntitySystem +{ + /// + [Dependency] private readonly SharedActionsSystem _actions = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly SharedStunSystem _stun = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnComponentInit); + + SubscribeLocalEvent(OnLash); + } + + private void OnComponentInit(EntityUid uid, TailLashComponent component, ComponentInit args) + { + _actions.AddAction(uid, ref component.TailLashActionEntity, component.TailLashAction, uid); + } + + private void OnLash(EntityUid uid, TailLashComponent component, TailLashActionEvent args) + { + _audio.PlayPredicted(component.LashSound, uid, uid); + foreach (var entity in _lookup.GetEntitiesInRange(uid, component.LashRange)) + { + if (HasComp(entity)) + { + _stun.TryParalyze(entity, TimeSpan.FromSeconds(component.StunTime), true); + } + } + _actions.SetCooldown(component.TailLashActionEntity, TimeSpan.FromSeconds(component.Cooldown)); + } +} diff --git a/Content.Shared/Chat/ChatChannel.cs b/Content.Shared/Chat/ChatChannel.cs index d87fcbc075e..71d542aff0c 100644 --- a/Content.Shared/Chat/ChatChannel.cs +++ b/Content.Shared/Chat/ChatChannel.cs @@ -90,10 +90,12 @@ public enum ChatChannel : ushort /// Telepathic = 1 << 15, + XenoHivemind = 2 << 2, + /// /// Channels considered to be IC. /// - IC = Local | Whisper | Radio | Dead | Emotes | Damage | Visual | Telepathic | Notifications, //Nyano - Summary: Adds telepathic as an 'IC' labelled chat.. + IC = Local | Whisper | Radio | Dead | Emotes | Damage | Visual | Telepathic | Notifications | XenoHivemind, //Nyano - Summary: Adds telepathic as an 'IC' labelled chat.. AdminRelated = Admin | AdminAlert | AdminChat, } diff --git a/Content.Shared/Chat/ChatChannelExtensions.cs b/Content.Shared/Chat/ChatChannelExtensions.cs index 9b707a53a0e..7dc57096513 100644 --- a/Content.Shared/Chat/ChatChannelExtensions.cs +++ b/Content.Shared/Chat/ChatChannelExtensions.cs @@ -15,6 +15,7 @@ public static Color TextColor(this ChatChannel channel) ChatChannel.AdminAlert => Color.Red, ChatChannel.AdminChat => Color.HotPink, ChatChannel.Whisper => Color.DarkGray, + ChatChannel.XenoHivemind => Color.FromHex("#600a91"), _ => Color.LightGray }; } diff --git a/Content.Shared/Chat/ChatSelectChannel.cs b/Content.Shared/Chat/ChatSelectChannel.cs index 5104bbc3068..865620fe51a 100644 --- a/Content.Shared/Chat/ChatSelectChannel.cs +++ b/Content.Shared/Chat/ChatSelectChannel.cs @@ -52,10 +52,12 @@ public enum ChatSelectChannel : ushort Admin = ChatChannel.AdminChat, /// - /// Nyano - Summary:. Telepathic channel for all psionic entities. + /// Nyano - Summary:. Telepathic channel for all psionic entities. /// Telepathic = ChatChannel.Telepathic, + XenoHivemind = ChatChannel.XenoHivemind, + Console = ChatChannel.Unspecified } } diff --git a/Content.Shared/Chat/SharedChatSystem.cs b/Content.Shared/Chat/SharedChatSystem.cs index 8d14adcc24b..8128f137731 100644 --- a/Content.Shared/Chat/SharedChatSystem.cs +++ b/Content.Shared/Chat/SharedChatSystem.cs @@ -21,8 +21,9 @@ public abstract class SharedChatSystem : EntitySystem public const char EmotesAltPrefix = '*'; public const char AdminPrefix = ']'; public const char WhisperPrefix = ','; - public const char TelepathicPrefix = '='; //Nyano - Summary: Adds the telepathic channel's prefix. + public const char TelepathicPrefix = '='; //Nyano - Summary: Adds the telepathic channel's prefix. public const char DefaultChannelKey = 'h'; + public const char XenoHivemindPrefix = 'a'; [ValidatePrototypeId] public const string CommonChannel = "Common"; diff --git a/Content.Shared/Devour/Components/DevourerComponent.cs b/Content.Shared/Devour/Components/DevourerComponent.cs index fbeec28ca57..425be6aacd9 100644 --- a/Content.Shared/Devour/Components/DevourerComponent.cs +++ b/Content.Shared/Devour/Components/DevourerComponent.cs @@ -1,4 +1,5 @@ using Content.Shared.Chemistry.Reagent; +using Content.Shared.Mobs; using Content.Shared.Whitelist; using Robust.Shared.Audio; using Robust.Shared.Containers; @@ -59,6 +60,13 @@ public sealed partial class DevourerComponent : Component } }; + [ViewVariables(VVAccess.ReadWrite), DataField("consumes")] + public HashSet Consumes = new() + { + MobState.Critical, + MobState.Dead + }; + /// /// The chemical ID injected upon devouring /// diff --git a/Content.Shared/Devour/SharedDevourSystem.cs b/Content.Shared/Devour/SharedDevourSystem.cs index a2b788f3f38..f74ced741ae 100644 --- a/Content.Shared/Devour/SharedDevourSystem.cs +++ b/Content.Shared/Devour/SharedDevourSystem.cs @@ -1,3 +1,4 @@ +using System.Linq; using Content.Shared.Actions; using Content.Shared.Devour.Components; using Content.Shared.DoAfter; @@ -50,20 +51,16 @@ protected void OnDevourAction(EntityUid uid, DevourerComponent component, Devour // Structure and mob devours handled differently. if (TryComp(target, out MobStateComponent? targetState)) { - switch (targetState.CurrentState) + if (component.Consumes.Contains(targetState.CurrentState)) { - case MobState.Critical: - case MobState.Dead: - - _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, uid, component.DevourTime, new DevourDoAfterEvent(), uid, target: target, used: uid) - { - BreakOnTargetMove = true, - BreakOnUserMove = true, - }); - break; - default: - _popupSystem.PopupClient(Loc.GetString("devour-action-popup-message-fail-target-alive"), uid,uid); - break; + _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, uid, component.DevourTime, new DevourDoAfterEvent(), uid, target: target, used: uid) + { + BreakOnUserMove = true, + }); + } + else + { + _popupSystem.PopupClient(Loc.GetString("devour-action-popup-message-fail-target-alive"), uid,uid); } return; @@ -76,7 +73,6 @@ protected void OnDevourAction(EntityUid uid, DevourerComponent component, Devour _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, uid, component.StructureDevourTime, new DevourDoAfterEvent(), uid, target: target, used: uid) { - BreakOnTargetMove = true, BreakOnUserMove = true, }); } diff --git a/Content.Shared/Input/ContentKeyFunctions.cs b/Content.Shared/Input/ContentKeyFunctions.cs index ee4a4e9023b..d80f9907504 100644 --- a/Content.Shared/Input/ContentKeyFunctions.cs +++ b/Content.Shared/Input/ContentKeyFunctions.cs @@ -18,6 +18,7 @@ public static class ContentKeyFunctions public static readonly BoundKeyFunction FocusRadio = "FocusRadioWindow"; public static readonly BoundKeyFunction FocusLOOC = "FocusLOOCWindow"; public static readonly BoundKeyFunction FocusOOC = "FocusOOCWindow"; + public static readonly BoundKeyFunction FocusXenoHivemindChat = "FocusXenoHivemindChatWindow"; public static readonly BoundKeyFunction FocusAdminChat = "FocusAdminChatWindow"; public static readonly BoundKeyFunction FocusDeadChat = "FocusDeadChatWindow"; public static readonly BoundKeyFunction FocusConsoleChat = "FocusConsoleChatWindow"; diff --git a/Content.Shared/Medical/SharedVomitActionSystem.cs b/Content.Shared/Medical/SharedVomitActionSystem.cs new file mode 100644 index 00000000000..98c0044ac7a --- /dev/null +++ b/Content.Shared/Medical/SharedVomitActionSystem.cs @@ -0,0 +1,33 @@ +using Content.Server.Medical.Components; +using Content.Shared.Actions; +using Robust.Shared.Containers; + +namespace Content.Shared.Medical; + +/// +/// This handles... +/// +public abstract class SharedVomitActionSystem : EntitySystem +{ + /// + + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + [Dependency] protected readonly SharedContainerSystem ContainerSystem = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInit); + } + + protected void OnInit(EntityUid uid, VomitActionComponent component, MapInitEvent args) + { + component.Stomach = ContainerSystem.EnsureContainer(uid, "stomach"); + + _actionsSystem.AddAction(uid, ref component.VomitActionEntity, component.VomitAction); + } + + +} + +public sealed partial class VomitActionEvent : InstantActionEvent { } diff --git a/Content.Shared/Medical/VomitActionComponent.cs b/Content.Shared/Medical/VomitActionComponent.cs new file mode 100644 index 00000000000..d2370ae55b3 --- /dev/null +++ b/Content.Shared/Medical/VomitActionComponent.cs @@ -0,0 +1,26 @@ +using Robust.Shared.Containers; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Medical; + +/// +/// This is used for... +/// +[RegisterComponent] +public sealed partial class VomitActionComponent : Component +{ + [DataField("vomitAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? VomitAction = "ActionVomit"; + + [DataField("vomitActionEntity")] + public EntityUid? VomitActionEntity; + + [DataField("thirstAdded")] + public float ThirstAdded = 40f; + + [DataField("hungerAdded")] + public float HungerAdded = 40f; + + public Container Stomach = default!; +} diff --git a/Resources/Audio/Voice/Talk/alien.ogg b/Resources/Audio/Voice/Talk/alien.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c88ad43cebb2458d2739e44863087ce10ec12580 GIT binary patch literal 23934 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 I?ElpS0FgDUZ~y=R literal 0 HcmV?d00001 diff --git a/Resources/Audio/Voice/Talk/alien_ask.ogg b/Resources/Audio/Voice/Talk/alien_ask.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ecc431fb9ab570a40b1fe69c3c7d6bcc54b2da8b GIT binary patch literal 25811 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 Y!a|{(nw%My%|G~U?=AqvlRmKj1F|y3g8%>k literal 0 HcmV?d00001 diff --git a/Resources/Audio/Voice/Talk/alien_exclaim.ogg b/Resources/Audio/Voice/Talk/alien_exclaim.ogg new file mode 100644 index 0000000000000000000000000000000000000000..cf1061c1d2008cb1bec1b75d0dce338486fc658b GIT binary patch literal 24877 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 A%K!iX literal 0 HcmV?d00001 diff --git a/Resources/Locale/en-US/abilities/alien.ftl b/Resources/Locale/en-US/abilities/alien.ftl new file mode 100644 index 00000000000..ee50c9dc2f5 --- /dev/null +++ b/Resources/Locale/en-US/abilities/alien.ftl @@ -0,0 +1,59 @@ +action-vomit-name = Vomit +action-vomit-desc = Empty your stomach. + +action-make-acid-name = Make acid +action-make-acid-desc = Make acid, instakilling non-protected hummanoids and corroding walls. + +action-create-weednode-name = Plant weednode +action-create-weednode-desc = Plant weednode, that will slowly grow more weed around. Weed heals you and your plasma. + +action-create-resin-wall-name = Create wall +action-create-resin-wall-desc = Create resin wall in front of yourself. + +action-create-resin-window-name = Create membrane +action-create-resin-window-desc = Create resin membrane in front of yourself + +action-evolve-alien-drone = Evolve into drone +action-evolve-alien-drone-desc = CHOOSE THIS IF YOU ARE FIRST IN YOUR HIVE. Evolve into drone, builder of the hive. + +action-evolve-alien-sentinel = Evolve into sentinel +action-evolve-alien-sentinel-desc = Evolve into sentinel, guard and warrior of the hive. + +action-evolve-alien-praetorian = Evolve into praetorian +action-evolve-alien-praetorian-desc = Evolve into praetorian, royal guard of queen. + +action-evolve-alien-hunter = Evolve into hunter +action-evolve-alien-hunter-desc = Evolve into hunter. Hunt down targets and spread infestation. + +action-evolve-alien-queen = Evolve into queen +action-evolve-alien-queen-desc = Evolve into queen, heart of the hive, wielding the ability to lay eggs. + +action-stalk-alien-hunter = Toggle stalking +action-stalk-alien-hunter-desc = Toggle blending with the area. + +action-egg-alien = Lay egg +action-egg-alien-desc = Lay egg in which facehugger will be born. + +action-promotion-alien = Royal larva +action-promotion-alien-desc = Promote one of your children to be a praetorian. + +action-tail-lash = Tail lash +action-tail-lash-desc = Stun nearby enemies with your tail. + +action-transfer-plasma-alien = Transfer plasma +action-transfer-plasma-alien-desc = Transfer 50 plasma to nearby sister. + +alien-left-plasma-part1 = You have +alien-left-plama-part2 = plasma left for use. +alien-create-structure-failed = You can't create structure here. +alien-action-fail-plasma = You don't have enough plasma to make this. + +alien-acid-name = Corrosive acid +alien-acid-desc = Acid, that corrodes walls and living beings. + +alien-node-name = Weednode +alien-node-desc = It's strangely glowing + +alien-weed-name = Weed +alien-weed-desc = "" + diff --git a/Resources/Locale/en-US/aliens/alien.ftl b/Resources/Locale/en-US/aliens/alien.ftl new file mode 100644 index 00000000000..d3cb81ce409 --- /dev/null +++ b/Resources/Locale/en-US/aliens/alien.ftl @@ -0,0 +1,29 @@ +alien-egg-name = Egg +alien-egg-desc = A large mottled egg + +facehugger-name = Alien +facehugger-desc = It has some sort of a tube at the end of its tail. + +mob-alien-larva-name = Alien larva +mob-alien-larva-desc = Little and harmless alien + +mob-alien-drone-name = Alien drone +mob-alien-drone-desc = They mostly come at night. Mostly. + +mob-alien-sentinel-name = Alien sentinel + +mob-alien-praetorian-name = Alien praetorian + +mob-alien-hunter-name = Alien hunter + +mob-alien-queen-name = Alien queen + +ghost-role-information-alien-larva-name = Alien larva +ghost-role-information-alien-larva-description = Become an alien larva and spread the infestation. + +mob-alien-name = Alien +ghost-role-mob-alien-description = Become a grown alien and spread the infestation. + +station-event-alien-infestation-anouncement = Unidentified lifesigns detected coming aboard the station. Secure any exterior access, including ducting and ventilation. + +hud-chatbox-select-channel-XenoHivemind = Hivemind diff --git a/Resources/Prototypes/Actions/aliens.yml b/Resources/Prototypes/Actions/aliens.yml new file mode 100644 index 00000000000..f9494fa1a87 --- /dev/null +++ b/Resources/Prototypes/Actions/aliens.yml @@ -0,0 +1,202 @@ +# Base actions +- type: entity + id: ActionToggleLightingAlien + name: Toggle All Lighting + description: Toggle all light rendering to better observe dark areas. + noSpawn: true + components: + - type: InstantAction + icon: Interface/VerbIcons/light.svg.192dpi.png + priority: -1 + clientExclusive: true + checkCanInteract: false + event: !type:ToggleLightingAlienActionEvent + +- type: entity + id: ActionVomit + name: action-vomit-name + description: action-vomit-desc + noSpawn: true + components: + - type: InstantAction + icon: { sprite : Fluids/vomit.rsi, state: vomit-0 } + checkCanInteract: false + priority: 0 + event: !type:VomitActionEvent + +- type: entity + id: ActionMakeAcid + name: action-make-acid-name + description: action-make-acid-desc + noSpawn: true + components: + - type: InstantAction + icon: { sprite : Mobs/Aliens/Xenos/alien.rsi, state: acid } + event: !type:AcidMakeActionEvent + priority: 1 + useDelay: 1 + +- type: entity + id: ActionAlienNode + name: action-create-weednode-name + description: action-create-weednode-desc + noSpawn: true + components: + - type: InstantAction + priority: 2 + useDelay: 10 + icon: { sprite: Structures/weednode.rsi, state: full } + event: !type:WeednodeActionEvent + +# Drone + +- type: entity + id: ActionAlienDroneWall + name: action-create-resin-wall-name + description: action-create-resin-wall-desc + noSpawn: true + components: + - type: InstantAction + priority: 3 + useDelay: 1 + icon: { sprite: Structures/Walls/resin.rsi, state: full } + event: !type:ResinWallActionEvent + +- type: entity + id: ActionWindowResin + name: action-create-resin-window-name + description: action-create-resin-window-desc + noSpawn: true + components: + - type: InstantAction + priority: 4 + useDelay: 1 + icon: { sprite : Structures/Windows/resin_membrane.rsi, state: full } + event: !type:ResinWindowActionEvent + +# Evolutions + +- type: entity + id: ActionEvolveDrone + name: action-evolve-alien-drone + description: action-evolve-alien-drone-desc + noSpawn: true + components: + - type: InstantAction + priority: 9 + useDelay: 5 + icon: { sprite : Mobs/Aliens/Xenos/alien.rsi, state: aliend } + event: !type:AlienDroneEvolveActionEvent + +- type: entity + id: ActionEvolveSentinel + name: action-evolve-alien-sentinel + description: action-evolve-alien-sentinel-desc + noSpawn: true + components: + - type: InstantAction + priority: 11 + useDelay: 5 + icon: { sprite : Mobs/Aliens/Xenos/alien.rsi, state: aliens } + event: !type:AlienSentinelEvolveActionEvent + +- type: entity + id: ActionEvolvePraetorian + name: action-evolve-alien-praetorian + description: action-evolve-alien-praetorian-desc + noSpawn: true + components: + - type: InstantAction + priority: 10 + useDelay: 0 + icon: { sprite : Mobs/Aliens/Xenos/alienqueen.rsi, state: alienp } + event: !type:AlienPraetorianEvolveActionEvent + +- type: entity + id: ActionEvolveHunter + name: action-evolve-alien-hunter + description: action-evolve-alien-hunter-desc + noSpawn: true + components: + - type: InstantAction + priority: 10 + useDelay: 0 + icon: { sprite : Mobs/Aliens/Xenos/alien.rsi, state: alienh } + event: !type:AlienHunterEvolveActionEvent + +- type: entity + id: ActionEvolveQueen + name: action-evolve-alien-queen + description: action-evolve-alien-queen-desc + noSpawn: true + components: + - type: InstantAction + priority: 10 + useDelay: 0 + icon: { sprite : Mobs/Aliens/Xenos/alienqueen.rsi, state: alienq } + event: !type:AlienQueenEvolveActionEvent +# Hunter + +- type: entity + id: ActionStalkAlien + name: action-stalk-alien-hunter + description: action-stalk-alien-hunter-desc + noSpawn: true + components: + - type: InstantAction + priority: 0 + useDelay: 0 + icon: { sprite : Interface/Alien/screen_alien.rsi, state: walking } + event: !type:AlienStalkActionEvent + +# Queen + +- type: entity + id: ActionAlienEgg + name: action-egg-alien + description: action-egg-alien-desc + noSpawn: true + components: + - type: InstantAction + priority: 0 + useDelay: 1 + icon: { sprite : Mobs/Aliens/Xenos/alien.rsi, state: egg } + event: !type:AlienEggActionEvent + +- type: entity + id: ActionAlienRoyalLarva + name: action-promotion-alien + description: action-promotion-alien-desc + noSpawn: true + components: + - type: EntityTargetAction + priority: 0 + useDelay: 1 + icon: { sprite : Mobs/Aliens/Xenos/alien.rsi, state: alien_medal } + iconOn: { sprite : Mobs/Aliens/Xenos/alien.rsi, state: alien_medal_active } + event: !type:RoyalLarvaActionEvent + +- type: entity + id: ActionTailLash + name: action-tail-lash + description: action-tail-lash-desc + noSpawn: true + components: + - type: InstantAction + priority: 0 + cooldown: 11 + icon: { sprite : Mobs/Aliens/Xenos/alien.rsi, state: tail_lash } + event: !type:TailLashActionEvent + +- type: entity + id: ActionAlienTransferPlasma + name: action-transfer-plasma-alien + description: action-transfer-plasma-alien-desc + noSpawn: true + components: + - type: EntityTargetAction + priority: 0 + useDelay: 1 + icon: { sprite : Objects/Materials/Sheets/other.rsi, state: plasma } + iconOn: { sprite : Objects/Materials/Sheets/other.rsi, state: plasma_2 } + event: !type:TransferPlasmaActionEvent diff --git a/Resources/Prototypes/Body/Organs/Animal/xeno.yml b/Resources/Prototypes/Body/Organs/Animal/xeno.yml new file mode 100644 index 00000000000..8f32e04eef4 --- /dev/null +++ b/Resources/Prototypes/Body/Organs/Animal/xeno.yml @@ -0,0 +1,80 @@ +- type: entity + id: OrganXenoAcidGland + parent: BaseAnimalOrgan + name: acid-gland + noSpawn: true + components: + - type: Sprite + sprite: Mobs/Species/Xeno/organs.rsi + state: acid_gland + - type: Organ + +- type: entity + id: OrganXenoEggsac + parent: BaseAnimalOrgan + name: eggsac + noSpawn: true + components: + - type: Sprite + sprite: Mobs/Species/Xeno/organs.rsi + state: eggsac + - type: Organ + +- type: entity + id: OrganXenoHivenode + parent: BaseAnimalOrgan + name: hivenode + noSpawn: true + components: + - type: Sprite + sprite: Mobs/Species/Xeno/organs.rsi + state: hivenode + - type: Organ + +- type: entity + id: OrganXenoPlasmaVessel + parent: BaseAnimalOrgan + name: plasma-vessel + noSpawn: true + components: + - type: Sprite + sprite: Mobs/Species/Xeno/organs.rsi + state: plasma_vessel + - type: Organ + +- type: entity + id: OrganXenoBrain + parent: BaseHumanOrganUnGibbable + name: brain + description: "The source of incredible, unending intelligence. Honk." + components: + - type: Sprite + sprite: Mobs/Species/Xeno/organs.rsi + state: brain-x + - type: Organ + - type: Input + context: "ghost" + - type: Brain + - type: InputMover + - type: Examiner + - type: BlockMovement + - type: BadFood + - type: Tag + tags: + - Meat + +- type: entity + id: TorsoXeno + name: "alien torso" + parent: [PartHuman, BaseTorso] + components: + - type: Sprite + sprite: Mobs/Species/Human/parts.rsi + state: "torso_m" + - type: Extractable + juiceSolution: + reagents: + - ReagentId: Fat + Quantity: 10 + - ReagentId: Blood + Quantity: 20 diff --git a/Resources/Prototypes/Body/Prototypes/Animal/xeno.yml b/Resources/Prototypes/Body/Prototypes/Animal/xeno.yml new file mode 100644 index 00000000000..13a1d58c8a4 --- /dev/null +++ b/Resources/Prototypes/Body/Prototypes/Animal/xeno.yml @@ -0,0 +1,51 @@ +- type: body + id: Xeno + name: "xeno" + root: torso + slots: + head: + part: HeadHuman + connections: + - torso + organs: + brain: OrganXenoBrain + eyes: OrganHumanEyes + torso: + part: TorsoXeno + connections: + - right_arm + - left_arm + - right_leg + - left_leg + organs: + heart: OrganHumanHeart + stomach: OrganAnimalStomach + liver: OrganHumanLiver + kidneys: OrganHumanKidneys + plasmaVessel: OrganXenoPlasmaVessel + acidGland: OrganXenoAcidGland + hivenode: OrganXenoHivenode + right_arm: + part: RightArmHuman + connections: + - right_hand + left_arm: + part: LeftArmHuman + connections: + - left_hand + right_hand: + part: RightHandHuman + left_hand: + part: LeftHandHuman + right_leg: + part: RightLegHuman + connections: + - right_foot + left_leg: + part: LeftLegHuman + connections: + - left_foot + right_foot: + part: RightFootHuman + left_foot: + part: LeftFootHuman diff --git a/Resources/Prototypes/Entities/Mobs/Player/alien_inventory_template.yml b/Resources/Prototypes/Entities/Mobs/Player/alien_inventory_template.yml new file mode 100644 index 00000000000..2f85ad5d695 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Player/alien_inventory_template.yml @@ -0,0 +1,21 @@ +- type: inventoryTemplate + id: alien + slots: + - name: pocket1 + slotTexture: pocket + slotFlags: POCKET + slotGroup: MainHotbar + stripTime: 3 + uiWindowPos: 0,3 + strippingWindowPos: 0,4 + displayName: Pocket 1 + stripHidden: true + - name: pocket2 + slotTexture: pocket + slotFlags: POCKET + slotGroup: MainHotbar + stripTime: 3 + uiWindowPos: 2,3 + strippingWindowPos: 1,4 + displayName: Pocket 2 + stripHidden: true diff --git a/Resources/Prototypes/Entities/Mobs/Player/aliens.yml b/Resources/Prototypes/Entities/Mobs/Player/aliens.yml new file mode 100644 index 00000000000..9ffd76a136d --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Player/aliens.yml @@ -0,0 +1,674 @@ +- type: entity + name: alien-larva-name + parent: SimpleSpaceMobBase + id: MobAlienLarva + description: alien-larva-desc + components: + - type: ShowInfectedIcons + - type: Body + prototype: Xeno + - type: GhostRole + makeSentient: true + allowSpeech: true + allowMovement: true + name: ghost-role-information-alien-larva-name + description: ghost-role-information-alien-larva-description + - type: GhostTakeoverAvailable + - type: Speech + speechSounds: Alien + speechVerb: SmallMob + - type: Vocal + sounds: + Male: UnisexReptilian + Female: UnisexReptilian + Unsexed: UnisexReptilian + - type: LizardAccent + - type: Sprite + drawdepth: SmallMobs + sprite: Mobs/Aliens/Xenos/alien.rsi + layers: + - map: ["enum.DamageStateVisualLayers.Base", "movement"] + state: larva0 + - type: SpriteMovement + movementLayers: + movement: + state: larva0 + noMovementLayers: + movement: + state: larva0 + - type: NpcFactionMember + factions: + - Xeno + - type: HTN + rootTask: + task: MouseCompound + - type: Physics + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.2 + density: 100 + mask: + - SmallMobMask + layer: + - SmallMobLayer + - type: MobState + - type: Deathgasp + - type: MobStateActions + actions: + Critical: + - ActionCritSuccumb + - ActionCritFakeDeath + - ActionCritLastWords + - type: MobThresholds + thresholds: + 0: Alive + 25: Dead + - type: MovementSpeedModifier + baseWalkSpeed : 5 + baseSprintSpeed : 5 + - type: DamageStateVisuals + states: + Alive: + Base: larva0 + Critical: + Base: larva0_stun + Dead: + Base: larva0_dead + - type: Tag + tags: + - Trash + - VimPilot + - Meat + wilhelmProbability: 0.001 + - type: CombatMode + - type: MeleeWeapon + soundHit: + path: /Audio/Weapons/Xeno/alien_claw_flesh1.ogg + angle: 0 + animation: WeaponArcBite + damage: + types: + Blunt: 2 + - type: Bloodstream + bloodMaxVolume: 50 + bloodReagent: FluorosulfuricAcid + - type: MobPrice + price: 50 + - type: BadFood + - type: NonSpreaderZombie + - type: PreventSpiller + - type: PassiveDamage + allowedStates: + - Alive + - Critical + - Dead + - type: Alien + weedHeal: + groups: + Burn: -5 + Toxin: -5 + Airloss: -10 + Brute: -5 + - type: PlasmaVessel + maxPlasma: 30 + - type: TimedPolymorph + polymorphPrototype: AlienEvolutionGrowStageTwo + polymorphTime: 50 + + +- type: entity + parent: MobAlienLarva + id: MobAlienLarvaGrowStageTwo + components: + - type: Sprite + drawdepth: SmallMobs + sprite: Mobs/Aliens/Xenos/alien.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base", "movement" ] + state: larva1 + - type: SpriteMovement + movementLayers: + movement: + state: larva1 + noMovementLayers: + movement: + state: larva1 + - type: DamageStateVisuals + states: + Alive: + Base: larva1 + Critical: + Base: larva1_stun + Dead: + Base: larva1_dead + - type: TimedPolymorph + polymorphPrototype: AlienEvolutionGrowStageThree + polymorphTime: 50 + +- type: entity + parent: MobAlienLarva + id: MobAlienLarvaGrowStageThree + components: + - type: Sprite + drawdepth: SmallMobs + sprite: Mobs/Aliens/Xenos/alien.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base", "movement" ] + state: larva2 + - type: SpriteMovement + movementLayers: + movement: + state: larva2 + noMovementLayers: + movement: + state: larva2 + - type: DamageStateVisuals + states: + Alive: + Base: larva2 + Critical: + Base: larva2_stun + Dead: + Base: larva2_dead + - type: TimedPolymorph + enabled: false + - type: AlienEvolution + evolutionCooldown: 50 + +- type: entity + name: mob-alien-drone-name + abstract: true + id: MobAlienBase + parent: SimpleSpaceMobBase + description: They mostly come at night. Mostly. + components: + - type: ShowInfectedIcons + - type: PlasmaTransfer + - type: Insulated + - type: CombatMode + - type: InputMover + - type: MobMover + - type: MovementSpeedModifier + baseWalkSpeed: 2 + baseSprintSpeed: 5 + - type: HTN + rootTask: + task: XenoCompound + blackboard: + NavClimb: !type:Bool + true + NavInteract: !type:Bool + true + NavPry: !type:Bool + true + NavSmash: !type:Bool + true + - type: Tool + speed: 1.5 + qualities: + - Prying + - type: Prying + pryPowered: !type:Bool + true + force: !type:Bool + true + useSound: + path: /Audio/Items/crowbar.ogg + - type: Reactive + groups: + Flammable: [Touch] + Extinguish: [Touch] + - type: NpcFactionMember + factions: + - Xeno + - type: Hands + - type: Sprite + drawdepth: Mobs + offset: 0, 0.2 + sprite: Mobs/Aliens/Xenos/alien.rsi + layers: + - map: ["enum.DamageStateVisualLayers.Base"] + state: aliend + - map: [ "pocket1" ] + - map: [ "pocket2" ] + - map: [ "enum.HumanoidVisualLayers.Handcuffs" ] + color: "#ffffff" + sprite: Mobs/Aliens/Xenos/alien.rsi + state: aliencuff + visible: false + - map: [ "clownedon" ] # Dynamically generated + sprite: "Effects/creampie.rsi" + state: "creampie_human" + visible: false + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.25 + density: 1000 + mask: + - MobMask + layer: + - MobLayer + - type: MobState + allowedStates: + - Alive + - Dead + - Critical + - type: MobThresholds + thresholds: + 0: Alive + 180: Critical + 280: Dead + - type: SlowOnDamage + speedModifierThresholds: + 25: 0.5 + - type: Stamina + critThreshold: 200 + - type: Bloodstream + bloodReagent: FluorosulfuricAcid + bloodMaxVolume: 650 + - type: MeleeWeapon + altDisarm: true + angle: 0 + soundHit: + collection: AlienClaw + animation: WeaponArcBite + damage: + groups: + Brute: 20 + types: + Structural: 60 + - type: DamageStateVisuals + rotate: true + states: + Alive: + Base: aliend + Critical: + Base: aliend_unconscious + Dead: + Base: aliend_dead + - type: Puller + - type: Butcherable + butcheringType: knife + spawned: + - id: FoodMeatXeno + amount: 5 + - type: GhostRole + allowMovement: true + allowSpeech: true + makeSentient: true + name: mob-alien-name + description: ghost-role-mob-alien-description + rules: ghost-role-information-xeno-rules + - type: GhostTakeoverAvailable + - type: TypingIndicator + proto: alien + - type: Temperature + heatDamageThreshold: 360 + coldDamageThreshold: -150 + currentTemperature: 310.15 + - type: Tag + tags: + - CannotSuicide + - DoorBumpOpener + - FootstepSound + - type: NoSlip + - type: Perishable #Ummmm the acid kills a lot of the bacteria or something + molsPerSecondPerUnitMass: 0.0005 + - type: PassiveDamage + allowedStates: + - Alive + - Critical + - Dead + - type: Alien + weedHeal: + groups: + Burn: -5 + Toxin: -5 + Airloss: -10 + Brute: -5 + - type: Body + prototype: Xeno + - type: Inventory + templateId: alien + - type: Cuffable + - type: Ensnareable + sprite: Objects/Misc/ensnare.rsi + state: icon + - type: InventorySlots + - type: StatusEffects + allowed: + - Stun + - KnockedDown + - SlowedDown + - Stutter + - Electrocution + - ForcedSleep + - TemporaryBlindness + - Pacified + - StaminaModifier + - type: Devourer + shouldStoreDevoured: true + foodPreference: Humanoid + chemical: UncookedAnimalProteins + healRate: 5.0 + whitelist: + components: + - MobState + consumes: + - Alive + - Critical + - Dead + - type: VomitAction + thirstAdded: 5.0 + hungerAdded: 5.0 + - type: PlasmaVessel + - type: Alerts + - type: Speech + speechSounds: Alien + speechVerb: SmallMob + - type: Vocal + sounds: + Male: UnisexReptilian + Female: UnisexReptilian + Unsexed: UnisexReptilian + - type: LizardAccent + +- type: entity + name: mob-alien-drone-name + id: MobAlienDrone + parent: MobAlienBase + components: + - type: AcidMaker + action: ActionMakeAcid + productionLength: 0 + entityProduced: AlienAcid + - type: ResinSpinner + - type: PlasmaVessel + plasmaPerSecond: 5 + plasmaModified: 40 + - type: PraetorianEvolution + +- type: entity + name: mob-alien-sentinel-name + id: MobAlienSentinel + parent: MobAlienBase + components: + - type: AlienStalk + - type: AcidMaker + action: ActionMakeAcid + entityProduced: AlienAcid + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/Xenos/alien.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: aliens + - map: [ "pocket1" ] + - map: [ "pocket2" ] + - map: [ "enum.HumanoidVisualLayers.Handcuffs" ] + color: "#ffffff" + sprite: Mobs/Aliens/Xenos/alien.rsi + state: aliencuff + visible: false + - map: [ "clownedon" ] # Dynamically generated + sprite: "Effects/creampie.rsi" + state: "creampie_human" + visible: false + - type: MobThresholds + thresholds: + 0: Alive + 250: Critical + 350: Dead + - type: MeleeWeapon + altDisarm: true + angle: 0 + soundHit: + collection: AlienClaw + animation: WeaponArcBite + damage: + groups: + Brute: 25 + types: + Structural: 60 + - type: DamageStateVisuals + rotate: true + states: + Alive: + Base: aliens + Critical: + Base: aliens_unconscious + Dead: + Base: aliens_dead + - type: PlasmaVessel + plasmaPerSecond: 5 + plasmaModified: 40 + - type: RechargeBasicEntityAmmo + rechargeCooldown: 0.75 + - type: BasicEntityAmmoProvider + proto: BulletAcidSentinel + capacity: 1 + count: 1 + - type: Gun + fireRate: 0.25 + useKey: false + selectedMode: FullAuto + availableModes: + - FullAuto + soundGunshot: /Audio/Weapons/Xeno/alien_spitacid.ogg + - type: MovementSpeedModifier + baseWalkSpeed: 4 + baseSprintSpeed: 5 + +- type: entity + name: mob-alien-praetorian-name + id: MobAlienPraetorian + parent: MobAlienBase + components: + - type: AcidMaker + action: ActionMakeAcid + entityProduced: AlienAcid + plasmaCost: 100 + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/Xenos/alienqueen.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alienp + - map: [ "pocket1" ] + - map: [ "pocket2" ] + - map: [ "enum.HumanoidVisualLayers.Handcuffs" ] + color: "#ffffff" + sprite: Mobs/Aliens/Xenos/alienqueen.rsi + state: aliencuff_p + visible: false + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.4 + density: 1000 + mask: + - MobMask + layer: + - MobLayer + - type: MobThresholds + thresholds: + 0: Alive + 250: Critical + 350: Dead + - type: MeleeWeapon + altDisarm: true + angle: 0 + soundHit: + collection: AlienClaw + animation: WeaponArcBite + damage: + groups: + Brute: 30 + types: + Structural: 80 + - type: DamageStateVisuals + rotate: true + states: + Alive: + Base: alienp + Critical: + Base: alienp_unconscious + Dead: + Base: alienp_dead + - type: PlasmaVessel + plasmaPerSecond: 5 + plasmaModified: 40 + - type: RechargeBasicEntityAmmo + rechargeCooldown: 0.75 + - type: BasicEntityAmmoProvider + proto: BulletAcidSentinel + capacity: 1 + count: 1 + - type: Gun + fireRate: 0.3 + useKey: false + selectedMode: FullAuto + availableModes: + - FullAuto + soundGunshot: /Audio/Weapons/Xeno/alien_spitacid.ogg + - type: QueenEvolution + - type: ResinSpinner + - type: TailLash + +- type: entity + name: mob-alien-hunter-name + id: MobAlienHunter + parent: MobAlienBase + components: + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/Xenos/alien.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alienh + - map: [ "pocket1" ] + - map: [ "pocket2" ] + - map: [ "enum.HumanoidVisualLayers.Handcuffs" ] + color: "#ffffff" + sprite: Mobs/Aliens/Xenos/alien.rsi + state: aliencuff + visible: false + - map: [ "clownedon" ] # Dynamically generated + sprite: "Effects/creampie.rsi" + state: "creampie_human" + visible: false + - type: MobThresholds + thresholds: + 0: Alive + 205: Critical + 305: Dead + - type: MeleeWeapon + altDisarm: true + angle: 0 + soundHit: + collection: AlienClaw + animation: WeaponArcBite + damage: + groups: + Brute: 20 + types: + Structural: 60 + - type: DamageStateVisuals + rotate: true + states: + Alive: + Base: alienh + Critical: + Base: alienh_unconscious + Dead: + Base: alienh_dead + - type: PlasmaVessel + maxPlasma: 150 + plasmaPerSecond: 5 + plasmaModified: 40 + - type: Devourer + devourTime: 2 + - type: MovementSpeedModifier + baseWalkSpeed: 4 + baseSprintSpeed: 8 + +- type: entity + name: mob-alien-queen-name + id: MobAlienQueen + parent: MobAlienBase + components: + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/Xenos/alienqueen.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alienq + - map: [ "pocket1" ] + - map: [ "pocket2" ] + - map: [ "enum.HumanoidVisualLayers.Handcuffs" ] + color: "#ffffff" + sprite: Mobs/Aliens/Xenos/alienqueen.rsi + state: aliencuff_q + visible: false + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.6 + density: 1000 + mask: + - MobMask + layer: + - MobLayer + - type: MobThresholds + thresholds: + 0: Alive + 640: Critical + 740: Dead + - type: MeleeWeapon + altDisarm: true + angle: 0 + soundHit: + collection: AlienClaw + animation: WeaponArcBite + damage: + groups: + Brute: 30 + types: + Structural: 300 + - type: DamageStateVisuals + rotate: true + states: + Alive: + Base: alienq + Critical: + Base: alienq_unconscious + Dead: + Base: alienq_dead + - type: PlasmaVessel + maxPlasma: 500 + plasmaPerSecond: 5 + plasmaModified: 40 + - type: ResinSpinner + - type: MovementSpeedModifier + baseWalkSpeed: 1 + baseSprintSpeed: 2 + - type: AcidMaker + plasmaCost: 50 + entityProduced: AlienAcid + action: ActionMakeAcid + - type: AlienQueen + action: ActionAlienRoyalLarva + - type: Speech + speechSounds: Alien + speechVerb: LargeMob + - type: TailLash diff --git a/Resources/Prototypes/Entities/Mobs/facehugger.yml b/Resources/Prototypes/Entities/Mobs/facehugger.yml new file mode 100644 index 00000000000..b9c8019fd74 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/facehugger.yml @@ -0,0 +1,84 @@ +- type: entity + name: facehugger-name + parent: BaseItem + id: Facehugger + description: facehugger-desc + components: + - type: Physics + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.2 + density: 100 + mask: + - SmallMobMask + layer: + - SmallMobLayer + - type: MobState + - type: Deathgasp + - type: MobStateActions + actions: + Critical: + - ActionCritSuccumb + - ActionCritFakeDeath + - ActionCritLastWords + - type: MobThresholds + thresholds: + 0: Alive + 25: Dead + - type: MovementSpeedModifier + baseWalkSpeed: 5 + baseSprintSpeed: 5 + - type: DamageStateVisuals + states: + Alive: + Base: facehugger + Dead: + Base: facehugger_dead + - type: Tag + tags: + - AlienItem + - MonkeyWearable + - type: Sprite + sprite: Mobs/Aliens/Xenos/alien.rsi + state: facehugger + - type: Item + sprite: Mobs/Aliens/Xenos/alien.rsi + state: facehugger + size: Small + - type: StaticPrice + price: 1000 + - type: Clothing + sprite: Clothing/Mask/facehugger.rsi + slots: + - Mask + - type: BreathMask + - type: Facehugger + range: 1 + - type: Blindfold + +- type: entity + name: Facehugger + parent: BaseItem + id: FacehuggerInactive + description: facehugger-desc + suffix: Inactive + components: + - type: Sprite + sprite: Mobs/Aliens/Xenos/alien.rsi + state: facehugger_impregnated + - type: Item + sprite: Mobs/Aliens/Xenos/alien.rsi + state: facehugger_impregnated + size: Small + - type: StaticPrice + price: 100 + - type: Clothing + sprite: Clothing/Mask/facehugger.rsi + slots: + - Mask + - type: BreathMask + - type: Blindfold + diff --git a/Resources/Prototypes/Entities/Objects/Misc/alien_egg.yml b/Resources/Prototypes/Entities/Objects/Misc/alien_egg.yml new file mode 100644 index 00000000000..2b6785c3ca9 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Misc/alien_egg.yml @@ -0,0 +1,175 @@ +- type: entity + parent: BaseStructureDynamic + id: AlienEggGrowing + name: alien-egg-name + description: alien-egg-desc + components: + - type: Transform + noRot: true + - type: Icon + sprite: Mobs/Aliens/Xenos/alien.rsi + state: egg_growing + - type: Sprite + noRot: true + sprite: Mobs/Aliens/Xenos/alien.rsi + state: egg_growing + - type: InteractionOutline + - type: Physics + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.4,-0.4,0.4,0.4" + density: 1000 + mask: + - ItemMask + layer: + - SlipLayer + hard: false + - type: PlaceableSurface + isPlaceable: false # defaults to closed. + - type: Damageable + damageContainer: StructuralInorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:PlaySoundBehavior + sound: + collection: blood + - type: Appearance + - type: ItemSlots + - type: StaticPrice + price: 1000 + - type: TimedPolymorph + polymorphTime: 240 + polymorphPrototype: AlienEggGrowth + +- type: entity + parent: BaseStructureDynamic + id: AlienEgg + name: alien-egg-name + description: alien-egg-desc + components: + - type: Transform + noRot: true + - type: Icon + sprite: Mobs/Aliens/Xenos/alien.rsi + state: egg + - type: Sprite + noRot: true + sprite: Mobs/Aliens/Xenos/alien.rsi + state: egg + - type: InteractionOutline + - type: Physics + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.4,-0.4,0.4,0.4" + density: 1000 + mask: + - ItemMask + layer: + - SlipLayer + hard: false + - type: PlaceableSurface + isPlaceable: false + - type: Damageable + damageContainer: StructuralInorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:PlaySoundBehavior + sound: + collection: blood + - type: Appearance + - type: ItemSlots + - type: StaticPrice + price: 1000 + - type: AlienEggHatch + polymorphPrototype: AlienEggHatch + +- type: entity + parent: BaseStructureDynamic + id: AlienEggHatching + name: alien-egg-name + description: alien-egg-desc + components: + - type: Transform + noRot: true + - type: Icon + sprite: Mobs/Aliens/Xenos/alien.rsi + state: egg_opening + - type: Sprite + noRot: true + sprite: Mobs/Aliens/Xenos/alien.rsi + state: egg_opening + - type: TimedDespawn + lifetime: 1.5 + - type: SpawnOnDespawn + prototype: AlienEggOpened + +- type: entity + parent: BaseStructureDynamic + id: AlienEggOpened + name: alien-egg-name + description: alien-egg-desc + components: + - type: Transform + noRot: true + - type: Icon + sprite: Mobs/Aliens/Xenos/alien.rsi + state: egg_hatched + - type: Sprite + noRot: true + sprite: Mobs/Aliens/Xenos/alien.rsi + state: egg_hatched + - type: InteractionOutline + - type: Physics + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.4,-0.4,0.4,0.4" + density: 1000 + mask: + - ItemMask + layer: + - SlipLayer + hard: false + - type: PlaceableSurface + isPlaceable: false + - type: Damageable + damageContainer: StructuralInorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:PlaySoundBehavior + sound: + collection: blood + - type: Appearance + - type: ItemSlots + - type: StaticPrice + price: 1000 + - type: ConditionalSpawner + prototypes: + - Facehugger + diff --git a/Resources/Prototypes/Entities/Objects/Misc/alien_weed.yml b/Resources/Prototypes/Entities/Objects/Misc/alien_weed.yml new file mode 100644 index 00000000000..d7de6fd7180 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Misc/alien_weed.yml @@ -0,0 +1,88 @@ +- type: entity + name: alien-weed-name + description: alien-weed-desc + parent: BaseStructure + id: AlienWeed + components: + - type: Sprite + sprite: Structures/resin_weeds.rsi + state: full + drawdepth: FloorTiles + - type: Icon + sprite: Structures/resin_weeds.rsi + state: full + - type: IconSmooth + key: full + base: resin-weeds + - type: Tag + tags: [ Carpet ] + - type: Physics + canCollide: false + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.5,-0.5,0.5,0.5" + layer: + - SlipLayer + mask: + - ItemMask + density: 1000 + hard: false + - type: Damageable + damageContainer: StructuralInorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 15 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: PlasmaGainModifier + +- type: entity + name: alien-node-name + description: alien-node-desc + parent: BaseStructure + id: AlienWeednode + components: + - type: Sprite + sprite: Structures/weednode.rsi + state: full + drawdepth: FloorTiles + - type: Icon + sprite: Structures/weednode.rsi + state: full + - type: AreaSpawner + radius: 9 + spawnPrototype: AlienWeed + intervalSeconds: 20 + - type: Tag + tags: [ Carpet ] + - type: Physics + canCollide: false + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.5,-0.5,0.5,0.5" + layer: + - SlipLayer + mask: + - ItemMask + density: 1000 + hard: false + - type: Damageable + damageContainer: StructuralInorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 15 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: PlasmaGainModifier diff --git a/Resources/Prototypes/Entities/Structures/Walls/walls.yml b/Resources/Prototypes/Entities/Structures/Walls/walls.yml index 53d9a5224ef..3395a847f17 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/walls.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/walls.yml @@ -1324,3 +1324,35 @@ - type: IconSmooth key: cobblebricks base: cobblebrick + +- type: entity + parent: BaseWall + id: WallResin + name: wall-resin-name + description: wall-resin-desc + components: + - type: MeleeSound + soundGroups: + Brute: + collection: blood + - type: Tag + tags: + - Wall + - type: Sprite + sprite: Structures/Walls/resin.rsi + - type: Icon + sprite: Structures/Walls/resin.rsi + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + collection: gib + - type: IconSmooth + key: resinwall + base: resinwall diff --git a/Resources/Prototypes/Entities/Structures/Windows/resin.yml b/Resources/Prototypes/Entities/Structures/Windows/resin.yml new file mode 100644 index 00000000000..f90e92a3d44 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Windows/resin.yml @@ -0,0 +1,74 @@ +- type: entity + id: WindowResin + parent: BaseStructure + name: resin-membrane-name + description: resin-membrane-desc + placement: + mode: SnapgridCenter + snap: + - Window + components: + - type: MeleeSound + soundGroups: + Brute: + collection: blood + - type: WallMount + arc: 360 # interact despite grilles + - type: Tag + tags: + - ForceFixRotations + - Window + - type: Sprite + drawdepth: WallTops + sprite: Structures/Windows/resin_membrane.rsi + - type: Icon + sprite: Structures/Windows/resin_membrane.rsi + state: full + - type: Physics + bodyType: Static + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb {} + mask: + - FullTileMask + layer: + - GlassLayer + - type: Damageable + damageContainer: StructuralInorganic + damageModifierSet: Glass + - type: ExaminableDamage + messages: WindowMessages + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 150 #excess damage (nuke?). avoid computational cost of spawning entities. + behaviors: + - !type:PlaySoundBehavior + sound: + collection: gib + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: gib + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: Airtight + - type: IconSmooth + key: resin_membrane + base: resin_membrane + - type: InteractionPopup + interactSuccessString: comp-window-knock + messagePerceivedByOthers: comp-window-knock + interactSuccessSound: + path: /Audio/Effects/glass_knock.ogg + - type: Appearance + - type: StaticPrice + price: 100 diff --git a/Resources/Prototypes/Polymorphs/polymorph.yml b/Resources/Prototypes/Polymorphs/polymorph.yml index b4249f8a3ea..e6cc46573de 100644 --- a/Resources/Prototypes/Polymorphs/polymorph.yml +++ b/Resources/Prototypes/Polymorphs/polymorph.yml @@ -164,3 +164,107 @@ revertOnDeath: true revertOnCrit: true duration: 20 + +# Alien evolutions + +- type: polymorph + id: AlienEvolutionGrowStageTwo + configuration: + entity: MobAlienLarvaGrowStageTwo + forced: true + transferName: true + revertOnDeath: false + revertOnCrit: false + allowRepeatedMorphs: true + +- type: polymorph + id: AlienEvolutionGrowStageThree + configuration: + entity: MobAlienLarvaGrowStageThree + forced: true + transferName: true + revertOnDeath: false + revertOnCrit: false + allowRepeatedMorphs: true + +- type: polymorph + id: AlienEvolutionDrone + configuration: + entity: MobAlienDrone + forced: true + transferName: false + revertOnDeath: false + revertOnCrit: false + allowRepeatedMorphs: true + +- type: polymorph + id: AlienEvolutionSentinel + configuration: + entity: MobAlienSentinel + forced: true + transferName: false + revertOnDeath: false + revertOnCrit: false + allowRepeatedMorphs: true + +- type: polymorph + id: AlienEvolutionPraetorian + configuration: + entity: MobAlienPraetorian + forced: true + transferName: false + revertOnDeath: false + revertOnCrit: false + allowRepeatedMorphs: true + +- type: polymorph + id: AlienEvolutionHunter + configuration: + entity: MobAlienHunter + forced: true + transferName: false + revertOnDeath: false + revertOnCrit: false + allowRepeatedMorphs: true + +- type: polymorph + id: AlienEggGrowth + configuration: + entity: AlienEgg + forced: true + transferName: false + revertOnDeath: false + revertOnCrit: false + allowRepeatedMorphs: true + +- type: polymorph + id: AlienEggHatch + configuration: + entity: AlienEggHatching + forced: true + transferName: false + revertOnDeath: false + revertOnCrit: false + allowRepeatedMorphs: true + +- type: polymorph + id: AlienEvolutionQueen + configuration: + entity: MobAlienQueen + forced: true + transferName: false + revertOnDeath: false + revertOnCrit: false + allowRepeatedMorphs: true + +# Deactivating facehugger + +- type: polymorph + id: FacehuggerToInactive + configuration: + entity: FacehuggerInactive + forced: true + transferName: false + revertOnDeath: false + revertOnCrit: false + allowRepeatedMorphs: true diff --git a/Resources/Prototypes/Voice/speech_sounds.yml b/Resources/Prototypes/Voice/speech_sounds.yml index 2e7e7bf989a..0e95a7c118b 100644 --- a/Resources/Prototypes/Voice/speech_sounds.yml +++ b/Resources/Prototypes/Voice/speech_sounds.yml @@ -132,3 +132,12 @@ path: /Audio/Animals/dog_bark3.ogg exclaimSound: path: /Audio/Animals/dog_bark2.ogg + +- type: speechSounds + id: Alien + saySound: + path: /Audio/Voice/Talk/alien.ogg + askSound: + path: /Audio/Voice/Talk/alien_ask.ogg + exclaimSound: + path: /Audio/Voice/Talk/alien_exclaim.ogg diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 2694cbeaf39..abddddea81f 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -10,6 +10,9 @@ - type: Tag id: AirSensor +- type: Tag + id: AlienItem + - type: Tag id: Ambrosia diff --git a/Resources/Textures/Clothing/Mask/facehugger.rsi/equipped-MASK.png b/Resources/Textures/Clothing/Mask/facehugger.rsi/equipped-MASK.png new file mode 100644 index 0000000000000000000000000000000000000000..b9cb635ca757ee075283f4cc84f145e4b95f888b GIT binary patch literal 713 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|QgF zr;B4q#hkaZ46~&j1zP7T_8!O-y|T*iU}}Mf`c|fe@)P7Ah`eOdj9tpJ#5?hS!=Hx3 z3)BRba`Wl=20RXPDRp=nneXo(x%2kdwQ~$UJG{9ocjruv`R?+JXPiB!84v8(#JFen zo>irPR{kn%_#bkT;heqCtDomp+aBBX&6j`p?E0L`UoU!!=bu~kNP*+uKHZ;FJ}XRO z{4!5AsV|k|-@iY0M-dvGmP4zcb#b;pS6aH+}0Jf9;&>4P4T9ay-BMwI);Z zg++na%>}PDzxyyP2$>zX_QSWo8fOF#J@3CP%O2>lMb`O2jEv3te1J^Y(9SbWuDwRcZy-z-&MD{i<=g_UaEMZ?c405@9nLNSteHP zf5Nk1_+{bdW`>*HT zcrk{s)(D=|g;N%HEj`|x7|6k8cSULU-nIN$H%} zmxuf~$q+Fy_0-u#Z5*aPE0SV@PBmPZQn>Y2Q-a!xs5y()Jj$q9m!>)Oq~)|pP5s`V ztk)V!UVX{Fm-SKKL_w)`Gv8p>Bh}^Cl$)3P{`@fERY}`N9iqSeCE)i|xdXD+{c-xeN&lY!(0oE%5 zV&=qbv7Dv6H8A?=t0Mlc%$hsZo|mtf{Nu@WkiNjSg%L_+F1WVl{$`PH+kVe6X?S$~ zv99pPq^$}j2V34SbZwW~7WDDzInk&DCV`oZS0AllR1?^!xaE|nq`$bZ~)6_`KiiXMiJ+CwF zIsPM*{oY5OqGdDn|K4ldV%c>?R-*OrmDa37r*>pbbT2;7e7rIC=!-jwm%GnjP&_Z3 ze9BqxY2ne0Y!Cjnd^hR*oWIeoVh`gDpA8FNObTGV({zd9P0Ee4U-++f)bwO1W!o@_ XFfZnPv#vxJ7@7>8u6{1-oD!M4VQC|&1+kM9DGjj-7*iZVuuv?5sPopHxY^vr1ZMGp-t1=X=FQvL*}G->XQ&Y< zl!{-A_z!yhB{c#P{4E~M<)6u~n0r7%O#umBT`!yK$LDLJ-^0_u_<{tWS_2Y1yO!hs zxvAfWFVDv3{;@lr3sQs#G%wT%{A8aFpPVXz^X@Ix$~#l`ET|Ib@ZT{9Zf+k=*!y>v z<_ZK+;HuZBz12Kb>^R~ezFlDwNs6ct=y+GuL7E*zfpNB+A=X~9g$)HF$M&J7K;u28 zh{|+k*IY99Ya;TNK~({%e2ilz5!?AK$M&IG1HcB8xUlwSia*q%9?=mgDu7*Z%@0PV zyLSF2!51pIP~Qc4du`h}SA{lBs-;GtUMljUkH*!G%nS6ZgaGPDy&T{k?jP!B0d_%w ziw>E)*@_}T6mWq?bDA(OwITgMm4LKjK=!}%egJ);#p4zROwd(9O#x{{L)-h^uIGqe~;3Xt*Cfnz1FSrr8JP<^23t^Z#L(g$Y2s1xe79Pj(`Z7|Eng&F~T>0l@L t0n&U`3E&$K-+JzY=eb9XfcwBj@eQ`*{8-Kt16}|C002ovPDHLkV1ndG5ZeF% literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/act_rest.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/act_rest.png new file mode 100644 index 0000000000000000000000000000000000000000..1de6aa144017f828c3928bcb4d89a7ea873b83c0 GIT binary patch literal 402 zcmV;D0d4+?P)%l8gxuDgzk2+qO~-zS{XR7C?X^cOdQH7y}?su}fI1 z)|EY5OqD(Ak7GXczv}}9*Gt471E2$zqS@9^+OAj-Z0eH|<8{7)=)3-0cI7)3_$2_% zKu*nw^xwNGiiJkD=sqL_He&x#%KlXJX5dio;;X6$t{#NV5Q4au> w2`UsV5@`vmpaOuJ47HiQNL!Jg5p`s(C%q4xIXjp#GXMYp07*qoM6N<$f=W@KzyJUM literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/act_rest0.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/act_rest0.png new file mode 100644 index 0000000000000000000000000000000000000000..7c64b742010d8065b4d7d7731dec9cdceb60d666 GIT binary patch literal 394 zcmV;50d@X~P)#Yy zq2S^w)Wtz`P(j>WHFxB~1>{83 zw(yZZQY}${v`ao;u6e%h@&P`{00?)i$ME@b&3dhw4I_hD&DRCmEnV+3-7K z7i`MT+BHY6DdjB1L>%dJ=XNB{`IWE2{M2`WSOD;S!grcS{H?Z!qZ4%P)$r36Kui5f}COrO-7SkN1pNiZ>A;kj>;+ zO-P_-bcN2zh6=O7PmM9}A^YjPzfHiiRBfxw)&X0mAgQDHolK;k@4&6f9>dH2C!TAV9%j=zX**X2(nSo@+GEGkNp@4ftz@WLrFZ6041+gnuR1k zp7$arNF*Jga_+7qyz$^D|Aja zR9KgOYK(ag*)P}AV*;_IYFlNt4%j*cNgc&!uUvh<1CJ_u#iq)SI*?VFX&cHxB%7Eg zId~-5GXlU!ey>@2mQCxV?OYj1D*?Qpcu!-C9NL(z`DRbzzxAG@e)BZm)K=lkexIc7x zueObRRL*ljNX>M;?VEMl3=9jF?)zd8Vb8syzQ&Aui?IXmi%nP8awaVI4sIv~>0)qT X6j;L>8@;FKEQsgn>gTe~DWM4f#`ibx literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/combat.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/combat.png new file mode 100644 index 0000000000000000000000000000000000000000..97e0b1bfe5812a783908ac324179fb082115be67 GIT binary patch literal 968 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/eyes.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/eyes.png new file mode 100644 index 0000000000000000000000000000000000000000..0ded91f9cfc2a3c9eb6d168c5abed2d17c7e8f5c GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C>Z4F z;uumf=k0}!yg=0qj$GO128E&KriIMv0o+1aNee1x>04?{vSDD@!5I4MmeFi8kq^`E t@kHw%V%;!(d5weMwucSz%s_)+pn+MqOrpr}xLyrN#M9N!Wt~$(69BH$DH#9& literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/finder_center.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/finder_center.png new file mode 100644 index 0000000000000000000000000000000000000000..c232babfb25b4e52cbbd37b4ef96ac4aa041f929 GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDb50q$YKTtz9S&aI8~cZ8YsBi z)5S5QV$Rzej$DTf1X>@83-B+}7T@bQv1(4-C9$t;th+BY?^r3TDlXC1cHn>5$t=6J zl+R^aGC-|BuprK%dY8`6KQr35XdY<0KR%Dx`Sc+_aD-EnReaFuCH+0 zw}aui^LP2I!@11I{bselW!RP%UA=o=wP*#i8VakV3mBDlGm0y0 mLS`5_Ij;OH%>+`_aH59sim|URhw7FcAik%opUXO@geCwkXIfeS literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/finder_far.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/finder_far.png new file mode 100644 index 0000000000000000000000000000000000000000..ba037995177cb4ea56b46a55d9b1423cbd68e146 GIT binary patch literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9F5M?jcysy3fA0|S%3 zr;B4q#hkZyb%PE&FgQFs%fs#{)X#EIHfy2`^HIYI5$7COJT{1&^mW>ntKj@&_LAA= zyZ4;mq9E}5*W|yMmK;u!3~3BA7!%kUQY9DE^5pJW+h_j$@ab%huUa9B&XH^uw)WiD z!_WSH5FazIbbqc>-zJ_98}e4=UAX=5ykc-9TSt-HmxVdZQw}j0FdyJyFlIQzz-_T| z`}8yMu{$LdHd_4ne!g7MCUo}9-|1`~Z~iU&S@uDhS;Z{I?4u;Zi|M}mX77|vV6@kr zEdg_eB!iiygZZrOxhe`63GMzVEuYZ%!bC`K{@uTmgrU|1UP;60i>t`1xsbPap$( zU1VI_Asz;8vjca2o(XF2@8S-`#a?({_c=RdLua zcfWJDS25cZLQb%-t^grGLLT*VH$@ t74H_<{+ayQGmiBjB-n9y9VK`+nDaU8EiG|eYy?bC44$rjF6*2UngD*y@}U3# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/finder_med.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/finder_med.png new file mode 100644 index 0000000000000000000000000000000000000000..8bd46f404699762038a1bca5851d0b77aa731e6c GIT binary patch literal 588 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9F5M?jcysy3fA0|Vnf zPZ!6KiaBp@9rR^#lyG<`pKQ$LJ>l@R1*Qi)b&pNnmXLGMHi47n)CQImUmu>vme{oC zscqkdgdZ2$rTo7+^RtNf^R-|wBd$-6q0w1pD3<(^{Lm3JtUF9ly-WwBjW?=Ry01?s;m*1Aq>P`v4E4 zkE!Clx<5PPp6`>_H#6M(ee${^!~4HaUMnbP0l+XkK8@=pi literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/finder_near.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/finder_near.png new file mode 100644 index 0000000000000000000000000000000000000000..8272426087ee0c32ccb5e35118bdda00816b7cbd GIT binary patch literal 552 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9F5M?jcysy3fA0|VnN zPZ!6KiaBp@+4?aXiZCRuZ?WJA5!vb3a;UJ#Q^+w-pfjXEV3t7hi|~IpKSrMoSDh-_ zpR~K8+*5=301tyP!x;txB*r1O8+LnR{@c&jYu98IHFCK3=X?Kk6W?H~`~I2rzvWDw zPB7%hAHRS0yxINhCI4)e`F3fhG(2y=dw<#Uv*-Ue9FO&y?%bu3(ol2fNpgDi?>+v> zcNmwJ2c2NJnYqAt|1&=>=>!$i@=1(RD|SxqVqWu9_MX$(xgjD6zVAPTdDYhkHkj@` zoaxGV?F-*>QC5kMvT~sxRo^Vz{?J$?jbR330$YP5196NSZy3%seKXW<*u3EH8LkI9 z8TOl*dhED&UHNz;d2S@5+dS6TR~2uzo_pi{!{o)x{XpUDxgXA7SlV|y?sW_Q1_+;V z6Ob?WdX17p3h_2aOlFvIN(z)~1V=+dQ@aM~?!C0KjIlOkt0j=eVK8aZywnSF@WsWbOvr_G%w5MGF6BHVAZ1m*vf1? z&BoV-5)CpiDx@;-zfg#Qy?)QMZ{5Cc+6TRjT+ZgAj(T@zu6W0T3~avJOgJU1uP=*s zvygZ`Fh>*ZW}sp$8Q{%0X3{0t`;K<2LVkG(h6 zqIUCMKD|Uj><+rhIkKl}$YkKfvqy=&F4V7yYHcYvZh|WvS$#T!U3nZn9V8fNcrqhB zkYfZxAa=;{rQ=iT{eI%7YJ>jMwb?ijt%F=uz|~KV;23XyBoxeB-Tx+8I`jOYwHC)f zOt?C*0^m*?mm4N?H*1U$p!6qyCRH2S`TI4_5_TWJa*%=fTHOQz=jfZ@Gy{0}*ifEp zTh= zVQny>N>LQJ2LL#lIdRgAk)498)?4bly@+D!fmr?B{PzIqKsnN?=K@sYI*7@`!&C;; znak2s8pwMO01eFqWy_C*L`pVZ5z0AJzuJ%KA(sYtrre=b5v*L@QjIR&Q0=Q9w$*;a z3>LC~4@hU&xXkoG3~`-s#^_cw`#CHW{zXK3aL=6E!4UoL2YAgx6QN450)y`N_8z^I@Cz*p+H@DHue-1_zG-Fg53002ovPDHLk FV1iqUhCl!S literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/groin.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/groin.png new file mode 100644 index 0000000000000000000000000000000000000000..a395e9f05c661165811c853c60d67b9bbdfba6e4 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D468w z;uumf=k29~oCg$m+#bqQl{Gt=i<;|}Fsln3oE)U6IO+87eohs6#px{UK=lyNAT{C1 z&wo{+_kL?6=;-g>C$^C3%R^}wyShfsjaQBeTo#U+zLU|0nSr69z=4@@p~!Jy_7QmNzfK+S zNMyYKi>f{XW^r-q1h!(vO4`svw3*k+~Q{>~tM&7A+<6$_fxT zG6NVudk>E+SD2G+<;uthl)0*!$_fC?o!hY|7<1V0{XX%R@{PN+oy+ilu!1Mi!_ vM*uGsETP~BX_U~XS+F6iVr2CojVLqUnnM literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/hand_r.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/hand_r.png new file mode 100644 index 0000000000000000000000000000000000000000..8975ad51f44b300fcda449f8f78dd31b691daa1b GIT binary patch literal 597 zcmV-b0;>IqP)@^r+fy+)}nxh0X{ac%a9*ZPPJ0VD~F0@UI*YUC)Zvi=lb@b~kh> z(n1F=sN#a%$6xbNZ`K{q9etmj$K#=kRHa-AB_VVmC{QgA$^*|kpU{C>0jfo6y^+b} z>8}|&pN~KgV^E%5DUtMK!ffsIOs%xO6*zgU4t&wqC*~BKKyXltZoKzQmKtow>Hyvc zCjcCQ2d{4=on2<&Q28yRVW-KA*8zBkx2>)N-Z2`4rG$d>Ij`i3{l}-a7B-)dfDB^< z2epHrZ;fx`^Uohm_EnA50Z@-%SPKKI>w6Zybn|>wr5*Syu)H&FmU>y`LIOb!WQQY{ z`c|{<5R%EY6oDY-kk`%CvNHw>(5pT&fiNXNVsE>~u3=dPgrcbT5eQNOxrOx{KL!Y` z<#X{72vfsXH?Hjxb3hdHR(vRdsA?h;uoSNSqzFKfsoop#djb~$*r~u@%R4|t2)Ab5 j8%YHaSfa|OWI^!@MdULw*Kz#f00000NkvXXu0mjfpt1vl literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/harm.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/harm.png new file mode 100644 index 0000000000000000000000000000000000000000..e7f035a09c5d7ceefeec96b39b9544d9d347fcac GIT binary patch literal 919 zcmV;I18Dq-P)*Q&>&+&JGbfVh$?9Esv$U8C%K# zcdTW;XEmUUMno7$^`*o9STJV$>itW(K5@g&Ee3texiYR>bXtx2_w8l|+=(Ugdte@3 z3gjGf&XrBV(?C{_X?;j!fF6+vdJ-qotYGf3>8BKv|HXjMlU8L~-ZlgDz-^@snZ%4+ zV&HdImz>_+mBZlC&S!bped)k;u?*Dy>@>x#T|76>!}B{EMVa{aMQ)$$weqdusbmJ0 z*DG={cR4X`1l9squiXu0+m-pS4;G*t7|#sZwzNDi^?}iN1FY9()78oc$&ci{iWfdE zG${t==4NENP_}(|K09{HWZ?^0>&;r(kM#|aj_6(y1Gw>UHW#wNvG$sZtLux7X)_^n z_tPV?`udrOS$pQqlg6}BzM{NuG62w?=Yu?;VcKgd2V2B+;ihHr#Mx1KYm{RzC#lk{FQ02wycK)%2TvX;(G*)<&ZON08}?0MVvC*=UZ?9Zzz&%`D5dAjexg5UNqxyl zz<36v5o^TRRjMmM_cNyS;CbG?KWdGJ%5e`^!vG!~Ty6Rt;1|2}P5?5D5!6X!cK@I<8A z@7?$0#xkZgJMErpDDifj)$LLWYPhf`;;nMai^>)$Hw{gPyLV4(Zu#|Dn}fsuV<{t3 ptmFCZ(o7PPOdJXg3{YYRW4ya^`&W*LML<_Dc)I$ztaD0e0svPyLskF) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/health0.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/health0.png new file mode 100644 index 0000000000000000000000000000000000000000..a58d33d1e73d72160b0f786cb3e816717a564f81 GIT binary patch literal 1363 zcmV-Z1+4msP)5Z`_EuQ5KD)Mr9`Fa(LBh8jZJ5*kB@uoWV^tdv^VKnweWg=NP%XZFtCncW37 z+K+7Rotb;j_nmX^x%Xhe!t3FXsqJdGe&rVKO?)o!3Sp=ZKg^Ef)0>}})PGe%Tmt<5 zdKN*DLbi4`G4^2ezZAoEt*B#tH6cm@M2SNc;uRy|6;)}BGFB4u^Wg9eB<7;rX91*y z_JKHbJ4!;b`x%!Q`QA(D9iw7!_&SO_+y>I6Z$_mF0*VmRM8F?JCYy5FN}?!&fx3ER z_S5j!1(40Akx0fdHuW9iu{Hd>G|Qep7@b6@w+By_ln7LVDkRj}Yj=XJRmUe&TP)b+ z0Hc6+&tJyq`dHbVV+FJjS&?wFbqyz>4c#SyR!b3RYqp=`v6wS15sM!$KoYB@1Gg@4 z+t}7nHhy<=kK6h2MfZnjsoNWgpqKy*xgT5tQZ>8i2}T@ZA|=A`)et{7cQtVv(CeWI z-JX-*<#zjz7Z|vG0jm!aEQrLM8w%s%iFO{@HLR{>(q+K1D+=-SYG*zPR@#67e-mEtWFEklw4xuMNLr8!M9cYUf;JnzG9a zmNz6yj)@hP?Rg5x=s9fU6KpS+Ip7FLbccJLepwdOH`T$f2XIQ9MlF2ot>&Vs z4trdI=h6HfJ&Amiy=S}|lEPmmz~A75&@}i_?;Oiu)| zdpVee0Gqxocq?d|29_g$Cz_(w}HH8E)mXtg2`wNn=9 z7yB^k47?OO2#Qmdd7aI9_W^}o6(mV1D`**BnmfoIW!N5pHX&V1WobwszmJaLqyF2N z9+`kIP|In!eUwD4@bT$+TpH4|%nTBI8sL?5+Ww3cY-_vs-~fgf+|8rL%sdl+dGgnpChBEaFnxymNPQ&3)kkt|YO0!*_2^=6Vns1_W$=r(?w za9KMNDpf>PYeFIH1T*>14O$v$n5*S%8r49Kl=`+MyCNz_)tXQWA*3x*dX`=hxl^PT zLG_wnKg z6%4+0S>5?Alt+MwJsx_=D&eFta@SihfBJUP5#+v%6ym=_`Y$0=K`sGA{y!2|#9tJ| Vnnf6pQCa{1002ovPDHLkV1g)BgOvaP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/health1.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/health1.png new file mode 100644 index 0000000000000000000000000000000000000000..2e8301d882f40fca228923dde549adc90c5b5214 GIT binary patch literal 1440 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/health3.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/health3.png new file mode 100644 index 0000000000000000000000000000000000000000..3b580b59d7bf8e204500795b44f4fdbe408132e6 GIT binary patch literal 1418 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 FV1jvlbyNTV literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/health5.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/health5.png new file mode 100644 index 0000000000000000000000000000000000000000..833fc3a43f6e213da8571801206ae82b54647b05 GIT binary patch literal 1292 zcmV+n1@roeP)B-?FbAX^ZU-E5_h z>ztW;=FZ%`H;QP#u*}RoGjqQ4&6#^o8X)j;XWC1wC2;ihlekd$%E41agE{!|_9#Be zf9z5JX%VpqB$G{&1c8Z^|5(Myjp6^2jNDhKj-`c?6A*9$A10A78Ag~?)Er|jJCx(@ zzGEm&&&$3fKujnPoF{gmM5Ok3!y?1a!w$o9Omz1hh3`kUjn%-`5VgR8LB#XWm`q`# zR?%$~DN?X;TN5@OSCQP-h+3_R(xW0q#;>Bd_yE`L-IkHx7#>5qqaDB8GZct}NhICU zp*pFS*!hntWl7iyKw=Yb?mvX#rIETdTN2nw&U}ZZ@}gxULiCJVO_B+UmK11xUX6>3 z!TQo-acctXxLgSms^#+{D(5nKT>E4KNipV@K=V_dxz;>JM^_j83n0PyU=gT1yN32u z7p~7w$Z>WEm_6$oMcY5);(SgG`?JC(oGH5-n(yj8j~vY5=G+XBaIiG}n|#LSuL;l% zptk+FE*ZtEyEEv$;$retM)XaJuC#HVB4sm^NkRlcyAk*;!c8 zGO}4$M_fNP)ly_QA>S6iZ z`Use9g0#{3bN+BHP~S{QlHVd=Mrg9v@`mPc^u5cj zXrWtP4?ihQRS0KJpVn9KofF3tffshPN|~}*NanPFB;~W01dQ`FZwTcHsW2&2pfTG5 zWrHAyuw#7mHa$ZD%4XqDZiZ#!zWX=9Jn!7D0nr}})G(qC+teP=`|Zx{l|MRy@xquQ z&>|Gz9H8^e-5Jp5$!BYxantgkmEopMMIG33ca%D$Dt(yht|3kOVSWV154=ZJkdms+ z6-o@?o3=r#&yko>vMsKkLtZNvc@4Q12s1aMBvoj`s+?1(i!!QDYlyJQjf|DRk=HP+ zf_dhqD)h{ZDy|=XFA!p{A*(2 zx_Ao*Pi8PDq9H9#s+T-M=sTbIiDYcS4q4M1)|H z*$O?|^LoA{fCb-DUlDPUY7y|fO`~K8h)^xqbHLtwE8<)`5~3=i*qYFB60(}}X z8s1n|%e5-vK!F5(wUerd>JeKLG7&;mIHfU1Mb34R>VxV(M(xj6`8gYwvHkIFmJt1cV@%gq&-#7NXEVCLxOeIsYFWN8&GIJjBmt78x1<0000EW`y9`v=DCRn5qaU5#T z=4jon`K5^zJlMW%JFP#cQ+8WB*>;_(e^qF5_D8BL-=m-JTw}|xPE1k0t3Zo)G!G;} zCz9{z;?h2QJMhFOhke=p@G_U{9~Hs|FgED*{rxntIvLZ^kigDd2a$TPxUK4IYVi)Q z@6aKlOKZ!)VDx=l;fIN-dGNrl9qx?Eaxk{KTxm=Iieafu?!el)1C%>k=EWfc_3I<* zER;g?KnnP!7C(qxJw4=I0EV205P{m0_o~e$ zuEdMN!kX7NKTz_==`gi{gr|oOB0S-F!0|l*Y~S%Zty-=Wa=m3@aDO2FWY{rbrdA?^Vvj#wB~W3@@UUAKd3qXsZXKm% zjd7bkPWq({{rWf=12oJJ3=N%DrOO&J0$MQd?W9;=R5s0ZJsb2j%@2U-=U)b_#RE|* zOmfoPXkWwp!29nCYhu|{0w%fH+%!Ls<_CZ@Kal1JOi1$sX@1~;&ky_yCcU8d=<-E@ P00000NkvXXu0mjf7<_lm literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/health7.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/health7.png new file mode 100644 index 0000000000000000000000000000000000000000..707c3494becc27e9f086144b324dd1fddcdf561a GIT binary patch literal 1187 zcmV;U1YG-xP)K&NVa`4_xNVnK^U5^Uch?=e9w}z5{U{S`Xpm`=8Accs{|w06|AHBsKS~6STlwW!~~qH!p4AcF)s9A^j>?lVCT4Dtgmv)Le`oLJf~GT5OJ`y1L+A04eG`_yE-2Tt_n6g}G&iPLU`c{Ilqfaz@yTc01s= zJxBvrkj9^X35O6vweV2d)&6?`=mt=me5*@l(Y^nW185vVZ%Gute`&V|$p`PH;l_~% zk(h89;2r}MTxGsfa_Q=2RLZNES!~{jHkCbz%6un;woDz!LGfI#-jcdxz?MDNbQWOK z`!-w9`#W(U<>}rQnAsNu;t|(2@9Mg(+n94r=-tMgc}*vwv!D(n(eDFbp6ZNdQ#!RP zqGj5g70pl0G5vHII(^!^f**Z)$^r21JA14QC|kkEuG_+r&VcEs17zAqZ0e#+9 zb8HOkPxr`&wqRy*+5r#?U|`=o8(8w`=@g3a9+E(Yj|?II%T2I1Lf*-5sR`A;ArCufi~WtZb}ZhJ6!V5eTaf+L!2%L986-qCJ#Z|epZqNt5P_+tr!t(XUTS~Xn-jsn z)pk&DHT_B&?5qFI^10<4OCZDbvAMm?8bh6WA^g{$raeGD0L{RVK@y$L!iog~LcvCh zISI!3!O404G>)x>>41CyD7c=1E^2WF!n9$V@&XEtSTC)~CX4_8002ovPDHLkV1j+0 BG;;s| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/health8.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/health8.png new file mode 100644 index 0000000000000000000000000000000000000000..f8b4fc6a1a1a84d252dd299fb5e387d5a8e36ede GIT binary patch literal 1087 zcmV-F1i<@=P)L`6h4X+w}rjuL59^svAPdQwDz5taWv zh!QD?-ca-tl=Kl%5oOd@OcXhkgi=}&MI}9~d=%+4j6b7h1_kw@-F2pY=N#`HOB@$m z?z!jQd-mGv?0wEYBLMVe=LV27Di8U&GjX}*2gU-6N>-;FTn5w$_Xi!=v|$5ctx@&N@uDxAR9g{HFLEsf;8&f>umyi$ zGM42Rs&-B==opxDDrm$<#2&P`l3Y}>3bq{!V}2z1JG;A_3eY$W6ErS{k8eNb82H$w z<2bNmk4+?maKg}EBGJwW!nOCT_h0a^@wxJxiUoo>Xl~RL5OhrWX1B$7+2)-{1$lS& z#szgRSyil}oKBc(^kV6Z1qj8$#{b{Cx|0L~3kuX-WT$a@ot5FozaZ*R5t68DwgPU2 zr9dbG|AdL^ojzUBwus$U1SH5rdhwhR4hEvg-jn-L2QzpRDcEN}Gag99RzRP3@%(?h zcY}%>ssJ+uV=q6cKAHdCJ~)GrKfn6?0z(0nkW8WqBtdZXOQ_PP6sWDLHVKIL^YRvA zsGy?pXuHvO?(#)MBVSPaA(;^l1%~RqV06^yARz&{+`6vEZmYIUKz(Q_kPhz&Z^LgZ zwGyeRFTcdp+~lHWD8L*}mja6mmf5SQz->=3vVbb2O98>@1E-8Q6KvW5;%KhW6|cim4MX}EjqE}W@2pV-Ba9u-Cx`j8D?(`|T_!$2yuPwP^5Kaw@%V|cVLoD~sOU}&Kgf;F|#9J8Xw50UO!5m zC~!NJjL-DBp9_S9G6Z+%WqNt(DMUNkjQ1QPkd=dyl^YSdf76J3M@`82U{K7TRAda` z=82$q`5NQdZRHbEdgSZK@@1wz83iT=ZSS5m)!|=o`$p1_)iJAXUR2@!-D;bVgMb+R zAET+DSJ{>2S6ow($jBIH66mtdb%QnB|JWP) zLwXgD1yB7y%t5>c1Sz#Wv}i;^gBpaa=FozOD5ZiD-#6K}%uaSDyH=AAHktQk_Wk(g z&D&k?!hESu6NHDK&mV({IOpUC0SInYR>tD^W&1@mjsmbb-{8e-;hc;&Gy@{9Y4@A+ zCg4kgh%r#epC4L$UDL}L|Mza*AKYWCk#(4Vw(}&>=9jOB(b%(12=@4T$cAK$HM$NN z?iu&Wys1w@Dh4E5$tW!YGH)U?1EO~^;9|sukqoSJCIw@>9%iTRvB*i83o>K@ph@*#Ir0~Mr_)RfblR^dSFXf#RhC<<$6PJ6@U8oaXo~30-3LlOY&R$k+%>?N zN;Y6a0G%JMtwSH|E9XGa-JMTAik1K=v6r8COFl5DfMmbnC!Y)R`62mJ4S_EDTVu8FMN?9RxF5Du|QU05hP=dJPm7S82D^ zhyvJUCSG4!Cc2zgg}L-$n|@bUtxhvDpr3oNFbF0WZGoxSnZwA`9lAUlHW~z zPqb%)vkxG1$rznapgUK3-gDD=lD(wBMs`BQ1aF5pHKFvCWmD@5r0@q)-i*i+ S$oDn?0000hU>(!ES?TK)muz~JfX=d#Wzp$P!Ve?)r# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/l_leg.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/l_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..def83c635fcfdd97cc89ce07c410e085beb87c5c GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D468w z;uumf=k1k^oD7OQZVyGSsVUb)rAkTeDos$nU0@Xvo0iFj> zPj0Q7bg0ZBTkik&tp9qPx# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/leap_off.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/leap_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3ab1371b3edc1f26092d7a94a0ca066bad5d73b9 GIT binary patch literal 653 zcmV;80&@L{P)*K zKe!hEMR9Y~MJW{*kvbHzh|r=S1#yv52hn`jd&lK^Y0@-Jzrnn`cQ5b0@4btSvALD| zODquv{=B{Rmr~pzKi&Z0z%0j7_};z~w%9;i#i={n1?xC=!0)(RE*V%ME zcUYzsf1Ar(;jx(%Am%#OsseJJstkh^53B$fwRxY@ice-$RPt11bO@vXP~yFx@JX!H zHFU4b)xmcL7JB)C_KUh_xU#V; z?nA!^h&hT=KQU+|yN)HDg5Qsh$X5|q0b-6~U^PBkEfMqUFV-L@lmd{Dn9@WuhEsa0 zgQb}(Uj;Jektj}QoLEHtA9F$hNKR9n6`yjz#|}@_ZHJO9fvn naWL0@nyG=fz&3!d)Meoxmsx#qnw}4500000NkvXXu0mjfE4nE@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/leap_on.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/leap_on.png new file mode 100644 index 0000000000000000000000000000000000000000..a8a67fef2ae568f064eed94e0a4bf1ac4c615f4d GIT binary patch literal 667 zcmV;M0%ZM(P)w6rs|BbO|^p(nTntE;>5Z&EH`A zA6$$7qPRKgqLhM*NF54UL}*cvg1AVjgVcQ2d&lK+Y0}uVZ)jfLySw*&-@8kb)Yf)> zY%I}I_<4KnFQvFkegc4OQBtf(z5qbQ%T^`P;%(=i)gllc1x^l54U_xV4_AhoLkw5S zQ%ugQKHaP9ka+-nehq|AN;F)=b@*=XQ5r)&uE;msMKK5CAdUiHUbOZZV-$rS1V*RI%nHbiVPH4nbK!TLC(rnNq3i)OaBhPEL{Wek=hoJ> zF`KWU?g;>CHfu(;(g_9-MFGLmEl5gGEYF$B{eR(#Os+LwjaYjCEQvLk!HRBc`n|R& zh#Y*m@72nguf|LYbbF52(X`p*qGaefRKVD+`sk08p4!itN*2?nE^76-ynsau6{1- HoD!MZ4F z;uumf=k0}!oD2#)E*C|v literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/nightvision0.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/nightvision0.png new file mode 100644 index 0000000000000000000000000000000000000000..926ee2b02d7bd36caf7fa54ddc9d87c239cb6d17 GIT binary patch literal 946 zcmV;j15NyiP)4JgH%@O`wM3P=47EK}vg20Nd zx(UiFyO*f@?gHsz5Z!bUQV?E<*u@MIE3_Yi+@kW#b>viPYRxuUxz6)$-`UyNs+}Eu zVEfL`cX*%oIq%=G(bgi_(BvXzE<#ubuU(-{C7>Beiengk@@j^@d|jmL{u?wkJkHlG zB_IqQ@ivpHD10rRNKl2{PD-BrYir-EAppbf?Ot*<*x0Zv%e1iiOTQmkde1AokA&y5 zo-LU`cdL)R7REm;#%M=nwRR<%HXf#~bI1AkRL=?RxR>Qe3@oiImqq}_Ba1S1x9?-) zYP3A-K8%k9#we^Q@@RHiH-2HDpB|2m@gCCzgy&vIWsc|hakQNF*(fZ>hg+t z0*_|{M9(EUeBMV;p%C`$cJK-n^1&2=qy`vgB6lY8l4$mIQRH4&KlgaOcv3${T0#kP z3Z#wy4T`FgtKLnA4s>w-Q<+4{^gF&6nho;0ku;%z(R+bh6{JQ7CE{_82|)rtP0Kf@~7(m@Fl$cUS_{9FeDZ=UHHQ9OYH@(UH-hNcQ;g9ykT z?RQssz{gwNj2Mkg9{sp@0tb`Sf95jz2Z#Rq5o0WffHd8VBuTu20sb$B2ynKqj{^`m zcCxp40+&wbHyjH8``OlRA4SzU{oGU<7VEJQ!O01Z{=FS7{0b~j!$SBGi|UQ3^fWAh zi&uSQr%&7&Uxd`Wd#p)AEempMfq4Jui1CC>&T2bRb)|OYH?NqAB1@V5C8eR31yXXx z&{ZhqJ<2fBZDBR4traXg&V~GdC27bos35#Y_xt$tb=EdvJXQaRje-Pv0$?f)0jLnX zpHe}1U!|s+5QU=pzRW~4uT4amz-wu1)oX$2AcSEyl9qlwB-1vxlN%Dy?A&jd2R5=M zA^&JML4;RIMYtd&K1fA87_q6nKoCkJnR~ycX6KepM3Pp7vOdp&KV7%C UcuI{c?EnA(07*qoM6N<$f&<~KYybcN literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/nightvision1.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/nightvision1.png new file mode 100644 index 0000000000000000000000000000000000000000..f3fca7a4278eb7fe826b0fcc5e6ddd5755d6d09e GIT binary patch literal 931 zcmV;U16=%xP)GsLD(6$rxe0eeVu!sQ^WilsQP>fBr}_KWFJd@F5L%5AbtW z1qk7-!rf#T2GO@^Ywb~%_Y;ZV?g#*Jj2d(wkT$D%bJ{Fxy`!;U@ zO|^dBwUC3jXwP1vA-SJ*im=Wdi*ZhKW0q@4b zR57j*wfYHGSPvDY9v)$ZY;YtXslen46R!uUI*SM#%Z<6zz3%hjOY0tC2}?KY3>ua16A`lTzo(DM(ghxME5s|Zij<)O6LY)-4-<9?pR)9l>log6H!cia&*{rUY z@et2*77*-tOq!-qdlnI!#gQuAn&&J4>udN39ED-~WGR043EktHR0<+5~9g%BcXt#pw9@Q_?^g?dte_~RIKurJ~has#`(qmddc5kRU0GiBR z(Cmn&R7aF@yqdaND;GG<10ZG+o9R)EaN+Dxlv4e`N?Jz*zzSZy(z$@4$e<=|+0ts^ zK~E@WA27_4oUJ1QvGfFarDD4XSYpXm0r@D@5vcZo@6C=V9sA2l@~;ID!T$xG6oE7* z$e4}C8)*2`2x&VC`267qFS>%3Bf3(IltXE8idla~b}?R$&LRNGgaE{pmz23%4IzX_ zGCf=b$q%XcgB@F1jz!Qal9}tp#rw9kAJ9}1O8Y$r{s9~WwUvKsh>HLK002ovPDHLk FV1g#>s3rga literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/pocket.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/pocket.png new file mode 100644 index 0000000000000000000000000000000000000000..6f5e6ff683b65e2ecd7a608188f4014b93b12322 GIT binary patch literal 414 zcmV;P0b%}$P)Wii=<1=;w%^wM=)yrGp z!sDC(HJaXxdh_M+umId7=e^Zv&*tc&Tey%A0ZB+j{4?wcO^ zkN*RO8Nkrsdp6K#0>c0%6-+GY0w1uBX6c2Z00RN0R8TR}xA zl>7r;{cFTSp?3)$Bxup7q=KbV>OqQaDuPM3IT=AHNw!kRxNml6c4jl122Iwlgq=-h z_Wj2n7eWxmRBAV2vA}9=FP?nczE{_#dc623P2<>$RJQ0r1t9v zi)e2K4rkmC4S56Ng=+4fnUOZU6xZgi?q`V$d|};;Mtf3PuM8p?TPV$UqcKvjN7> z3gnBgpi7-f0LJ7NC*0nVKn4x|E@B#{oi7X1$u7?~btADn{XO2Gz*2T%b_ z5D%udZHPawu(IqikaK* ze_%lo0?!0TL^%y(N2i(7L3{3)(SHWeIim5&3H@=*wYIg&tQS@Tg)qDOUycoSeQH+p zXTe1R?T(0>R0V+2mSh=R5cGoHhj#+!-Vvp9M82MokPvfol>Mo~so@W1ZrN;rpD+=( zZ9mC&MD6nRgd7CbU`7)}Rv27(KS${QxXj-syC#N`kiESKxwp@NoCt}P-{uMV|AsUo zVtLHVQ0VZee-7Kjf?&nrhtXz@aH%k zOAkedm;fe!uDp%Z$s2U5J`y5K2bg?45>@y2cC&AX+ozIx7a}Ckl>i8H9pLC!q8p|V9vU6!67V`TMWIQr8R1Ui zK;6$yj?~?BM3)2i`7DtUxk@xV8wf|Xx`ar(VVea^jA$_g5QX7jA?$`00hnGO11XQc z-|tcXAt0IDqt!)?0^mTv$bnENdL>|fjq3F*6$=;S^Bs~jY)Ob&zzYq#!9%bcOXyvQ zm<-^=<91wV`>0&&n+4V+1YkReIrF6x&?dlYEy&o7@4dm88J$%UPGoY&@&bCnwqKnm zDLlKR+NOgZayT<21^X

;(YGH@ElIaA1{uEZ&hMYz|n-dF)w4HGfLd7?=aR?n4lA zK{;T!^Vrnv0D#DQYXVQJMK$A^aLZIeLj}MI>(0mP19G5TE$b6t-Ral?v#sNR(5Gwow&}@Q?3+biw*72eb)5_Wx9JNp8hm0&vp7iDwi7 rsZ)_D0B1a$^~U+I=;2iIgX7{0llA$qOw9IU00000NkvXXu0mjfAFvKM literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/queen_finder.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/queen_finder.png new file mode 100644 index 0000000000000000000000000000000000000000..fe688a3a6b307667043d2e1a6737ad7deee0aa95 GIT binary patch literal 840 zcmV-O1GoH%P)cP?$Y4D&$ETSM3 zq<0ZK^#_R1yEmbDC={=flLQH+Jwy)@2^H$aRuoLSwdGD*_q95lgRFV z5N5NxGvD{#y!Ym9AB79!QaVAkpE_ZDw)C8s0P~NLJUznR$fU2aaka3l`Az=m%V*mA zRi_s#FR7GUXE%ih^m>J&(KDo%-?9Hs?k^e`>&-pNmvT(Z!|a0LwR*#R5BRwAzH8wJ z2Zy!*((HK2Cxy<>(yQ5853aciH2>^{;J|3yzLO|{$=GJ&v z&q%QbM3~z_`QjQ?E4%bzyDZ2bFFvJ>!kX;?Ck(Q;x*K8+5XwUI{c7vUG2I%Urd%zr zy#Kq=bQi!a2YENdUP6GO3xjN|Rx0A2Ua5*}&pPnG=Pq^-jE6U14>g z_|?vczM!p_!2@#E{Jp8YW!Fj!1ZlmD%juN34)rvY1G4Qf3JZ_s=UD&(cOJ~Sr(uxL zq(e`nVVD@6%CH}{KuNw_u(B2Wj3yDeu!}Eh(OGH z0#^^n-7rJ|y$Hb^7=zZ#Fsv@f>WEaFkHb!~Xtrb{(jZ-f==Ni@QKGi;(hp4*UZi39~Qp Ss600S0000}+H3DrP*&lJQx2z6g`UbKwhj?AR`-DB30PGl+3-xDsWa_(etMz}nL5 yRyD#^^B(*+)p_jJdymz@tc>}BVgmycM+IYth&Y3Aq6yGV3=E#GelF{r5}E*7>_T(^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/r_leg.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/r_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..f56a05a4f9c03c703680a391dfec130bd028d9c1 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C>Z7G z;uumf=k1k^oD2#)E*C|v=6+UJmq6$cG zafFt!ly|5z07u8&$ujFN_w&H2MgjP2taof9Yuy^()&US(uQpBrfk3P0^_)pC8sPPQ zx^_+pjA31M08s#e!fdC;ssrfE(_df{$ znIZG=Gi2|HYyeR}XE~K^juP}$%zo!eiFyF4undMUU5ttWw4;==%vR4BfYkAkEyG`Y mWCKJUl-ghX6Lx?O(9}N0kGs;tUe5&p0000+`sk08p4!itN*2?nE^76-ynsau6{1- HoD!MGF(DR)YmUH4(g=r*2v$08owt1R-Rxfodyog`jNi=e_ul(v zW|`Wfr;QskLe%i*_ph^&B)8)42oNuuOO+%(>V8W434yATGZ#sC4vasTsD!}a;ymfs z(gvzRt^>PYcFda>?}pmYn2r$~BT6}N?BcrBV{10ys;w9N+|EojOF#Q>9IynQHJ_W)?spT-M!C}qJ5W~HtJf>$WVmu(wBfz>-6_TJ&5;F05 z|EEV9fc0>oUatooD6|VAu@m@W?GO@yz})mgLJSU}?jZPf>HXjD0_lc?toygmAI$vX za;%oFfk@m3X|Xd(?SizEP@W4^MiN}@m_w3s9hKSzq17*yLm|%!B!C0*Il4h7xQ^gP zpS9nh>Ec{FvV|*{^TV!}Lc1XAYseZCJyq)v=vd?7lhk()odep1DBy}0 zQ{RU?4AM$~n+k3$Roo4NS2I0O6=DLorH%@>*MrbQJyR3F00000NkvXXu0mjfJw!4G=hpp>EEG~#3 z6R@6bMBBQ%^OhT8WCHGwTc>tp0@!F=R=_8L)Ahj3^L(;&PERrdQa)?Dzi^!B9S#7XsSa_z<5AKfvXOIydJ$PV#-FqRh}&(a+N0`0Bgr;z%&3q-is0_vJ+Yq zL{V=TvW=vxAT)YX0rnOgO7=ODOhAXjDQ;wk(@LLqquL;Q0lrC`GwsC&rvLx|07*qo IM6N<$f+GZu%m4rY literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/scroll_up.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/scroll_up.png new file mode 100644 index 0000000000000000000000000000000000000000..336483f617faf9dc77a7f3f7f2944bab7df24c6e GIT binary patch literal 376 zcmV-;0f+vHP)x+kiq054)dhNqIzmTS z2%;mH6V4{-(zuST(7Y`8XZ`ujI69Shn-*~<1%n}go=+B06HnKp=76Z&#m!H}udQ(b zEN(z*>O?bMu>ydNhGTEQ{=8MI*@g_31aN=cf`i)H*#SNkfZaoUfZVxMASv*zj}5?8 z0C#V!HeZ!X1+oH^{$zmADTwJ$2EZMH+$cXRYT93Jux?>>LzDv4F`WTiAKSF-WjpRT z2r7Wl?&JYcY92_w5y>%-;{Z=YOYpraRRLarB4Yp-{$B+seQW^5DIn!Q z94n}b literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/suit.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/suit.png new file mode 100644 index 0000000000000000000000000000000000000000..958b78f6f6e82ae0e2090d29b081d857e13c8a1e GIT binary patch literal 609 zcmV-n0-pVeP)m_!I0+BZ625KRW-xnWPX2HX%v~ zdf3^Sk1GVhCW>g3R3bJ(g$s$s!p1_d6B0YY!kjys-DGZachTZIX?+U#3cz;-w)1Hf=4>*jyCuc< zVyYaY%#5pM^=n|><5Qhf)_dO^3xHa^%I2u1vcPhoY&kHM-BNRBM`S0O(cu|l!0ulg zqHSJX4}c27k9)u^Z`1?aHR=I-0HYol^?>g^klfgug8%Ja_5i*USOCCH1#T=5KnEFM v?2yuY(P{0PXL~i1H-=>ZK!IB-@yC>3sH{<_4i}4K00000NkvXXu0mjf$h-+h literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/swap_1.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/swap_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c36e27beae61d9b9620b644d8623083713fa01eb GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C^*m4 z#WAE}PI96|g2AhXK=vN1ge#1T`6NmYtYCJN1q<;=vHy|xVE?oIVu_5#@4&?mPJI2# z{G4IJ(*+X*#6+Ye*bf}I{eAt4vn0 zvVaBek*mkUnr?Yox*>BPn`J0u2l-3Ji=K4h&2J5A+$@dVXr(%o(Q|o&RhO>($f}O1~&iC zTU&R&{>awCX&13;8SjA|TeHh;&vbJ%ZZ^N*ZuXtQU|-bj4}F0PZ*c5Z^ev4loU$3{ O6$VdNKbLh*2~7Z?@n-A* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/template.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/template.png new file mode 100644 index 0000000000000000000000000000000000000000..ced0e918c891c1b3368b2a16dd77701ce9d96e54 GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D7e7W z#WAE}&fDo5IU5W_T!af41zUO^a3wuvnRYJYC5zc3u092hM;wOoKPR!=eqvrexATME z`rS@@H+ref;<~Z!rR$5=`)(*%onZPV|3@@o$8MXTL$b#Oy1iN0+RA*m(vR)&ZQI|> zbiH=f9Zs&0RNZI>wghD4aEGC{?aJ)~_gNenqqMd}JdzK3Qa>!&~Dw^2W_Xzi*M*|Uzyy?n6x3ghfQg)2Lm9y~9c zy2bweTQR#F&3XDZ48c3qzFY6II&>(ptn$4?{<$RgD@|IeCM0y~aa!KAoLf8NR literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/walking.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/walking.png new file mode 100644 index 0000000000000000000000000000000000000000..7dae97470491678029a33cf9973b187a6bf0e4d0 GIT binary patch literal 736 zcmV<60w4W}P)3Zu=GDB(L@B6otnK(DW{{uj|)84AZ@w>sBe4GQQ%Q<}!gvY?b{MA|jjDMcy z<3?ATe7DQ%>N?!Kd&bCnqQXnxzQ3!{gjo-t%~=3UN1KXy88 z!?P7&ILbiB{50~8SR?1Tw-d2}{R@#mqYR`fIz}SLRT#jUo=L@aW5Lay9?Ot;G?h_j=SpyI|2I$Di2uY<*DEk5gB%}pfJaj zVTD|ivDTGqQQL(+pjpTQta!Reo?|kOH6q+paAT?CZV500;0>CYGR`M4Gh`nNy SlNe5-BdyAR{6KV!=ghNSqicZme+6?9OC-efNb)awPA}&dlD&+57O8 zZr%+}=@L=G<>%M%Qk1jvkpUJ@9z4Ae#UDPsb8}}vQRR)!uA8@SJSy}obXg)sv|?I$=N-12z6#>HeY7 z@*Le?3~0pncEq|AJ{1F)OAq!d8??oE*~UnL+ga#o2W~eiE2a8At+R0D$u9wTfG>pO7&M(6T`y zlK~Af`VYSUaPx)Rx2PG`>3Sx9Ff_TJ_=VxfAq zJn{Zv%n=7=j|S!(YDJThS;);mP3++w={Hh5F=;s*xN}J|C2}!uH$Id|T&f_0j?00#U*WX{K|*g|yf49N4^S`n1wLaGNM27Cr`Jx`McIs@>ff-jaN z540MfF;L6V0o6}4x#8o*{GuzdBXPdLdw}^PLUHS6V_zNjDG!VR_)1O1uj8l>h>vLV g9PepmI#Xthzf@?ICeRlLT>t<807*qoM6N<$f?x7-a{vGU literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Crawl.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Crawl.png new file mode 100644 index 0000000000000000000000000000000000000000..631ee105530ea2a5ece251c9a07e6854d1cad628 GIT binary patch literal 705 zcmV;y0zUnTP)0AtJ&Ome?q35`wT`p(INnXdb3YnJVd0 zTZ;c7tyqa&>U621mBFl7XhJLu+bn^Vq!E@hB3kL3$(+Z1^Jd=1qHiy(Gjr$8+;h&I zH!`*9$IWXsLaX7=pWmk=Nv_HN2S8hFEmx9wzxy@r#{jBI&RhhMP@r*tvJwD;e`j&O z7MiHayb63i_!Rrzym%Ln(Rb%%4Cfi+^TTo#IMTm0o(b*acwKLXR?e^MS`KWC+?Zq6 zUr2$rN}dOdJ30}VG{ji0;~FwWg78J*fAM{tzl@vLOH6?oLS0MA*etedN3Zd^`+!JeeilB=Ct22 zAhPz6mI8nc-Fi#LED>U0Oa?nV-ZbmKY=2a<4>y8eRZs!eove@qeaV=K&-%X-pka_6 z3e@ZM;S^vknUEVxgAa)SU}5%o3=9gP?g039`Tg);0nPoEDLw4_w=MPT<%(fT)d0lw z0Xpzy_^i-PDDMR_BM6>$#1N$K9EFJH{x6Ws!H{(g5NL~6VRLYLbs(TqUvVRYbWcZXXYbVc2mN23Pe@Hpa_rgQC@!Yq zAt|tG3fB#%bFY^6{dVN)a@_Sja+cM$_wNedq=+3`$RN?qlpw>^P^iH`CC)3p3lSM< z`z7z!`lkgb3$uoJ+W8pBT#m>|T4&gQ{vCVScmIOw+P0-rQ`fAO-;wQjYrfq255N8d zeYt38x%B70?r>H2`4gE+E*)NcdC}WXi$X;C((MFYN zB~i{nC9QvzmaZuL_PN?s@ltur{z(r?0yZ4GQqj7@uI^n_{~6I^l0piyheEHG^{9Og z-|=eR-^~3=+e<##>`SQKrDe-_S;ai}zQEnA(j%*H>Ho^UV87*$d+_a7c3+(rab5WA z`hEGoyu7zN@Bdpk^XL?TznmZZ|NM6-VcdH!x^S)b+S`Zri+9`q6yf{6@89(A6*-Hz o3bg0dpLkK;@@W6zWcjA}xD*aMoo&lhfzi+4>FVdQ&MBb@0Cafs0{{R3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Drone Front Half.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Drone Front Half.png new file mode 100644 index 0000000000000000000000000000000000000000..ffad609b76d89b0a5f55587aafba980771a94823 GIT binary patch literal 1460 zcmV;l1xxygP)U4bDsq zOf)j|kJvxJ&`1*lG1EYe1U(EjIMIdU@YgCV>>>|#IX7G1H#6UCO}(Bs-Sc`jnfYLu zo$j8ls;{emysA#536#=e<}g!yYjAchV5MA-~oGK7IVVQ0BLzr)!n|Z~0}dk|AhY z{!{|M9y-j~l!L#VDHL)6_2c%!_Ong_%7@|Tw+;DTi{Lb&G1}K*bMtF!@@omuqX1UH zu1f&eXMK#(*YagWyyeqdeB}pkgY)z6#tOL0f!L!@&%W#_I*JwK>w>N?`81Qa9p}GEw)DAWVEr`NPdt9Ksd0zepqhZ zx+V(?3$nJhCfBduF4eaM7z)5x*{H4$K@b6$U+bU0q;pN=T2YR7jLNCsFXwgbV9(%3 z8OX3y1~Q-**MLxX5n%UV{D0)vlcjeMgZUrh05nbh*654O|GYn)_nZ!Jd;9^R^1Y72 z6b>OYHk*eT@D8P#D&ZqvZ-tPTP6Nq20P+BMK6kZlTwD*~8v{2%22NyxXO znUBIWp7NnjiVZ0Y*E>(>Ak=z*URW^dU|i2by)dz!WW)ygClUHQK%*%?1hq%u@gwzu z;owjqyh;eSA^>e;9fi>+4_GwPE_f`b$3{B}>phtJa8XX-`LDE?##{MwbH&_t%BS%- zAhmK5v{PY>;wLKEZ?X@EfTz7G`Ay)p3y^s|0xs|z5PKJ(Tl)a*Qcqlw?P$LSX>{R! zhHbvvcClbjm{szdoJ9TBfEns%MceZGpr~{lJps~j^aM!9(GwsYM^Aus96bR(jhJeV zmGW*Ap}L0r9Nu=t`E<&9x5%lI$rz$a=*}J!1gg?q6o{BS0D)Gin4sZ07+Mv0^-a-v zCr23!A;YL+xSYaNcseQ(F2f0{Pb=whEtHWN*JTA45wnuODX9CmpyAXlYI+>77Zm^q z(-~R~O~foD(D*uoXgDH5t)|CqT#oP4h-gZJkMXWJVd!NFZvym11u(4RZ^HxG(?vuR z66%cCBd!rT`alx8w^KMn(If_Cm#&;B+P!+YlO2K~zNs?qEY|o_r}r2C-@ltpLmL(k z9esS8aC9UPjKu0a8J8pggr)yDdt%}nt{-*K#uCq;y`C6x%C=ErpX+o0Y)`;67({lL z`?)^>X;3Fk+x*F_SACun zCJfGXvpR6Qr1-;Z-n3q3`x*N6!ketRDeVPG05;Wny4~PU)*rjPY~cF0Z`uHsxQs`l(aG#I$q#& z64bx`tkL|QqY6|RKdru!0Bxk}HfCLYNk~qH?+K8w_Y0~>a}g6#4}1qYR)J?~C!#w5 O0000(g5NL~6VRLYLbs(TqUvVRYbWcZXXYbVc2mN23Pe@Hpa_rgQC@!Yq zAt|tG3fB#%bFY^6{dVN)a@_Sja+cM$_wNedq=+3`$RN?qlpw>^P^iH`CC)3p3lSM< z`z7z!`lkgb3$uoJ+W8pBT#m>|T4&gQ{vCVScmIOw+P0-rQ`fAO-;wQjYrfq255N8d zeYt38x%B70?r>H2`4gE+E*)NcdC}WXi$X;C((MFYN zB~i{nC9QvzmaZuL_PN?s@ltur{z(r?0yZ4GQqj7@uI^n_{~6I^l0piyheEHG^{9Og z-|=eR-^~3=+e<##>`SQKrDe-_S;ai}zQEnA(j%*H>Ho^UV87*$d+_a7c3+(rab5WA z`hEGoyu7zN@Bdpk^XL?TznmZZ|NM6-VcdH!x^S)b+S`Zri+9`q6yf{6@89(A6*-Hz o3bg0dpLkK;@@W6zWcjA}xD*aMoo&lhfzi+4>FVdQ&MBb@0Cafs0{{R3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Hunter Front Half.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Hunter Front Half.png new file mode 100644 index 0000000000000000000000000000000000000000..9c0838856a4855d61fa18efbf5b4fdf17c1ecb21 GIT binary patch literal 1428 zcmV;F1#9|=P)qZn$S=zs{WjspWT$b%VlvT;s#pPt+IRd-jtSFJ(!fk(ft zs;+y_sp_igx|K-B(F-6QM=yYM9K8V2ar6R6$I%NQ9Y-&KbR3NW41ODKjlQn@5?b-3 z&;4lowF01$3m0$8lgEFLRfatNcjZ+*7lI#Qzp)2=`uNQ0*sKK&$M4F z04jaI_@bnyHckg^ets|0ibDIahie=5y#_&7E5t0{gpG|at=VrBz_vnN*_f@b?aPvQ z+t15++Yg=wuU@|_FJCN|(x5of@7;Y6z4Zy*3-EttW>0bd_Ral?>-7?VynmOjYl=-YPcjv(2+Ok_W(2f#S6wsutR+_@>Uv$L|gx+=GB{ZqOFJ};;5xX8^S9ruIXLpgQkTAtSqb`5@&fecG&5CeYY(_wI( zUIN&u2mgORe6n;8VeFJ7k)Z8wj+SNb{(b2{~LbYieT@k=L$NxwND1u(R$b``3X&?TiSeJsh zo_RtWp|J<(fd#D&#r1or2PWoIjMzZ^6aoZEoTO<#1dU7K?MvDVhJz!8@hT%oXA7Zh ztfesOpJpVF_N#5F@nJM0Fr+t#g0;!dipnVm#QG9$* z{YmEG5OBp;Wq%TQ%>qU5aFm-NI!MWY1OT<`9Et%=TJH#Jf3O`EJv>fB z0C#2>D`2`yj95aDxF)Szn8fK@)bKc9LgZHNPx$`H+p5ge> z1WlHBy6}3e#cA8_5^JC80PYEthJuLhaum0C`TW0h&mY%6{=6caqwF4m3LOkV9RP?v zUD$aZug1ei|H}OQyv)tb)jIX=|5xetuS+*dEy@87(6L7ZXW^6ejXt{o&J5=#HiIIt z5J|C1>MO`IpN`>P&lVZN_v>wM(d4a7mv5GX=B1GohCVZCC*sPp0NSvGt-}R=J zSLK{z1cRg&E}yK=T1@7p literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Hunter Stalking.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Hunter Stalking.png new file mode 100644 index 0000000000000000000000000000000000000000..732b1798b071bf57dc01710e8ad0babc2883aeda GIT binary patch literal 1857 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 B-sJ!Q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Sentinel Back Half.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Sentinel Back Half.png new file mode 100644 index 0000000000000000000000000000000000000000..659469fd4485f892d702cdd9a1ca3d8a4aaf7de4 GIT binary patch literal 556 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|Vnd zPZ!6KiaBqm+4>(g5NL~6VRLYLbs(TqUvVRYbWcZXXYbVc2mN23Pe@Hpa_rgQC@!Yq zAt|tG3fB#%bFY^6{dVN)a@_Sja+cM$_wNedq=+3`$RN?qlpw>^P^iH`CC)3p3lSM< z`z7z!`lkgb3$uoJ+W8pBT#m>|T4&gQ{vCVScmIOw+P0-rQ`fAO-;wQjYrfq255N8d zeYt38x%B70?r>H2`4gE+E*)NcdC}WXi$X;C((MFYN zB~i{nC9QvzmaZuL_PN?s@ltur{z(r?0yZ4GQqj7@uI^n_{~6I^l0piyheEHG^{9Og z-|=eR-^~3=+e<##>`SQKrDe-_S;ai}zQEnA(j%*H>Ho^UV87*$d+_a7c3+(rab5WA z`hEGoyu7zN@Bdpk^XL?TznmZZ|NM6-VcdH!x^S)b+S`Zri+9`q6yf{6@89(A6*-Hz o3bg0dpLkK;@@W6zWcjA}xD*aMoo&lhfzi+4>FVdQ&MBb@0Cafs0{{R3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Sentinel Front Half.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Sentinel Front Half.png new file mode 100644 index 0000000000000000000000000000000000000000..b0315168bed092e635b3789496cfc9d8f445ddc0 GIT binary patch literal 1431 zcmV;I1!($-P)bSfJ*%U*J{$Z2=0<1c4e@PORI>n1ty>*l0YC49!S{g6n%T|JI#&u?snhXvx~bA z#OZeTc4oev-PyOZnRFaI0n%~w1W3ox6CfQ&Pk?kBJps~j^aM!9(MZ7X^5|szZtp^D z$J2iIq2<>SfKKjx|Fb-O@}Sfi%57U)@B1zmA3}bk2mJfb^K(jF|LS(B?AqsdW;XU? z$*&~<9safXGHNsx`!Xvbln;aPY(sv~B4|e;b^9h99sSpu{6+%oDAcu0Ir>_@Y)i2G zNxNYA(P8lZ@(;4{a@Sk_=;80lN1xDMfd2=BPmA|AuYa4m-yj0$1*3&UXC#bWU0s#A zxjEV2-81_R!FF^l$+goxxet%keMo9iHQ^}9=00;*T4!(3o6L{D4ZGnc4 z5BEe4tLtMBMF8g4!OpIm<8S}|v+#f$U)+-6CnH(<_9s`@7A_7i$xue6GLQkiCZRC8 z&maP9?8W~uTEBxB%>NV{pgQ@-<6XJ(*;Tg=z~ewX+#Y{Gto)#@Foi=1jfG$W?@(%5 zB|_xuMG*4bG?3f_AP;~C#12B^Ru~Hl*`{!~B7ix^|4|N*gqY1soqQTk`OwGVPzu9! zv^abCf1XT)Ik3v0tV7>8cq2zXxs{)KAabfhKq&pDj_K62%&AN ztuXrJ28%}81&`(Q*koH_9fKK%i*gE|{5nf%yp=x~6m#1vpT=W@)XGlKPK8sr`32!* zf0{TP1Mc{$8H#K{R!hHbvvcBx=@m{szp z*@=d&0W;LkinitVhoaJP^aM!9(GwsYM^Aus96bTjar6X)G-9ebRm!_f#OfOJbND31 zIbWMlsj+nFaln`EYRb{Ki4fVLDZ1d~C=Wx(FptWSkRZUgPnlGp;XDln)WK+x7)_oY z*MjWHjAmM$&nG3q8eTQJ)GcXx955;JLYU6bYQd?9h&3E1LanC9?dbD8gos!YxcKV+ zn)InEt3xmW=AuIB{B5+5KkJByA%Vt+jJQVZ=mS}7Y^QJ@MUxnm-Cw?0w9}U;U`S{P zWhk@8FWtUc{Qu}-J`L@$cE+J4oSEq0pM8r?sqp!?Qx+3n4h1o?H6fx zK;J(A)}OsPH{z6SPlpfK@!-AM$skp6UMWiis4;H ziyT|>$Kzkze`{-NwFJ;p^!)=s8*gR$bh9>SyEL*w(H$0@Wn6g|Knu1{3#PK|TyJuH z)y}&{FiC3R)5+?r2ZMEP{o35iJwV_7(D{EDqwfNEloEY;g2~f1c7i%dYvt<88icli zPwlZ+Bqt`b7Z4mK7m#!rgy_zAH%BYcmhl8h;I$aY=XASxR5sWym_=55GhZ-4B)-kG zdyvT@yp?fM+{~Ihxf|3;(>8xH>s6oogmVT@bhA1zT=M(8{gz~=p=;#JuIiX;JAo4V z$B_=Jvy!1hn%*2C0$C5GUOwYt6Q+QzFGT^~2*DK?lAw(!>L(;o0TKbEAS2XhqRKdZ zal==CjsPzSfbs@keQEAH(#m8o1chve?QZ~UG{5Jl0#(M>)mIXrjr85dY^pB_nUGQ5 l6Ewr#FQ_8TM@&pT@ITB!Z_fkrcZdK0002ovPDHLkV1gsEw^0B9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Stand.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Stand.png new file mode 100644 index 0000000000000000000000000000000000000000..4b69b4603ff117dd5a04fb774cfeeadbf11b85eb GIT binary patch literal 747 zcmVJNRCt`lS3yf#K@eVOpb~nKfC!ZY#7nRTOPfn+8nlOc^yXji zSiSb#Yw5p`-g;~=mXOkmh#sEgB0{7E2?RkT*h8`NtvlO!o87nXReAZ~<;~2#-I@7j z_GMpXVX=OrricoDex9C9#W^K^8vx^FbF~!5-}~RJYy&9EIs4)uQVi5)=Sm4+bTPDY zB{WbLybOH)@yXgYUTkLS(uO;Ob$2chWniDK9qtLTwMqU!HPbfIn)iX`PQMUr)Jg;S*?U~G5!Y=1Qjxx}8vXdFP3`qt?%oYV98St%<$$+ez z8+}NYw)dv?Y?o}-l*-S5hOi|^T`kX6=anM)NuzoDtjS!7g;RECttbOQ4Ekzq{jF8^ zzI@d8&PqoWL9X|}b+xKy#^cmPWDKWE&1YKYU^ozr7e$bPU%#)sjC9D>HKhRRjdqHa zKj(*0r%?tHq8eF3hs@v%`JVI-Y!JZi?zVcpvaX82&j2|+p~X?#jwi$pAY+mOcicv-7h-Pcy~6QZ)OC0Ce=^Kz6l{0g2(@SUrEWWo!Rn{;3Y^ z@xws(fP~+et{y?~NQN&Je6hq>kbS{D5L!G0@28nNP!@Cm d_)47?{sKpf#`+S96RZFL002ovPDHLkV1i3{XORE^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/acid.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/acid.png new file mode 100644 index 0000000000000000000000000000000000000000..46053a7c1ae5be4c622871081afb54a98df77f50 GIT binary patch literal 353 zcmV-n0iOPeP)0kkIvC6iyxVwE}Py%zq%P_Gvb#iis2~u3B#c zM2JMIPlAw=JKstb3Sz$Q11C*X zq{azW3xTIeMQdwBe5hT#hM=Yo;u;`mA_Q&e2>}8qF{pQ2vFQ|DqyLZIhA)>5+vu_E z2goiPKSVGv(u79=qPX)eId1&`xxxd78t;k^h_G}T`vGh`00000NkvXXu0mjfzDtZd literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alien_medal.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alien_medal.png new file mode 100644 index 0000000000000000000000000000000000000000..5f92be9f9339bd0223eea15383750604bc6d333b GIT binary patch literal 484 zcmVJLleeZuaPp)c`aA z4Z!~gxVt_`y8W-6Uj;Zcj0Ex4G03*S@x)&|i6U}ML!=;-2YX-*75J(tvb z9S|`9%wY_%`Rrpz!_ka7=leOt`{0<|FifNnB7k+~kAY85uX8o_JdaLK{A`>)&cG5w zYy>EpKSU8-rjgB&IfRHx5c#AlQ3YUp)o!Z@70r=7#@`T`04=G)j{wO2%ruqx&16Dj zRRKepJ-^ILOR&2FA<@PPuz68zzPbeZ5-q{~bgH7+YN^QP3S?A0doe&+Fytzr0ihxB zJmw(YFIxd%19gHRp=IXThRT`|n`5rqk5x+s01Nx2mSec?BQQt9Aqw+3+y{WbSem^E zpez_=rz6Ub8ovV+%%#~^0)X)G)Fi(bAQ^Iu literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alien_medal_active.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alien_medal_active.png new file mode 100644 index 0000000000000000000000000000000000000000..862f6280eef32c67629dd57ed075782e9119026c GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil&0(?ST=hW~Cu(N->nB1zV`Fgj=k=cSC5)ub(ZU6uO4^)zL>h)Y8#Z?mI z7Yr1E0ESIxbj|}sISV`@iy0XBj({-ZRBb+Kpx`b~7sn6_|G5(#g$^t5Fwaf!`23&0 zd}*QH7l9RgM>dviXxI_Ih5yKvn@oHn&m{{(oTJzcqPc5CoL0v-#N3vgcv5Yx=q9!s zc{lc2J6~to#B)PVd4uxIN$a*X7_Q@X_$f2VwV{}eF{jvlrazmaHN&<>%foCR92riv zU;ZsqB>AGFUF4BqkLZHg-(FW4-CuR%z*nw-Pci19Z0yA^+rDxcWbsT=-aB{MBHaTV r$B);(kz66X@Yi4F9~Zd`?#EB)5fi)3;iwa}ySEk$?=Hrhq&PvSXoc1?X`fYvB^lK_AoG(_3Yji0^ z+%|jg*ZVcou}yC;r|jW>@cD1m-Xu?7r!5T|s~8Vwv+SwQi*@iROXv5k_5+DtnH~B1 m*?+6(d`4h^A=&?hDX#36#Eha!RaIcLF?hQAxvXPuou&O$`S@r) z0P{ZC-KjR;xaro{udIw8AOGVH5BA3M0R+q}wFl=6y0ZX;9SXgCKy0s-m><14R!jfS z`S$tIiMz0IG5Wj@iWERI#Q)!Z_qE&F+H(8*`|k74zVNG`BLuxUwhK}J?)2XEc(vg+ zSI1_Dy|!P`F(}M7#vnX}5JsbO;5}7 zBPNKR<7zFmDtwnx0=~uE-1{+e=eB@@#C*9*=v06TPX?Y%|8^U%F3k|X0gQL8X6ZRj z;Xwl{Pr6sHU-QrS7fM--pZJByRYI!*Nc{KTzV}Cre>P{}&Ik8A!(;%A|N6@}^*eiB z5iut4P0UxQZ?W`o>`{0E^g$26nEv+fO`XGc?!a{_A*lcmhp;@_)MJwv8F)5b{`Lgt zgrSIfwE`2gloWKF^r?7DUoAlSp`&y&w?e;20RSdH+FkXoDGN|0z%0MF^L5c9{Jx&K zDE*WLD1Cn4hE@f@lw(?KvjBjrX9JcJ3jnaMQ}k07p!9QMgQNmz%Gk?yZroF+<|nsK zi0806P3!IXtrdt2>shYv8-L>Gw-&%K+&azPK7fFE!wJ?1j*6>mR@sl^{kLy_+6axw zm=`Xx4WLM)=dz?_i~^aSTpgXU$;jFxkF;8&#a9II$o zR9EcD?&@VqoiOQx=HbDP_w*RoBbo2z2;ZpyL%5nV>uBC!7)}Pv$m-$!susMVu*O`| zCXJN2nt2-ZAt05XOTUi-*393E0g*p%YY%(j_@V|lYmx6gQrjS9{%!R69p+&G)#&W=un&E(GKIrTf2XVOS5VGp zY^7V*{XL>;OR8||0a$&`!|2bs5i>$$fQVg9Q*l0o*VSJ+?hbI=odhf3`?0xrAFxNS z>xrV27*kTU(3LWTRkRr)3PP_>Z=V9+gDG!s-*;9K^!R!-rs9sl6+qy+`TS@>T(!T* z(=FqF705GMM}`S+@2v^W6z@S8Nt}f5DY(van$-u26C(E9CBk_v5Zg{tA)4p!}D2Q1W05lATwDx8pfpmLRE&wz)J1|C{}>x_Z3}5k)faknivnGMuLn7Vlh7%8mmEq^xK*wO6mbbuj+7&0siiD zCCx#qtY-Nttxy*iMO;mmatw@bKYRp$`FII}CX!olkod zyaM`|EHx-4@wpOQw0~zvPhl({egQS7 z+-l5efeg`AcP(taww?qFn>%bAgKY^*+b_UGsIAPN1;{6=(oDaxIio8hWMyn9psS$B z{5_Qb!t50Q&e8$^+m{gfh+29Atc=+fuq>Bfagy72``eG*)@$#C_v)l1e-7mjs(S7Q zpO1F#lV->Xc143x3y9U{W1z2)o`I0HWh}t5*}%?ljXc5%A!MjA&UwzQ3&eU9f(5h` zC|98EvinaThZeQa#knv+tlFR!z-lxAQwMFVK2NZ&i;$jR+y;}b`g{y^{mz>{{)SbD z1wG9#O_u z53mFVVqJw1+oRwWP-6Z7111efBp*L!MraujNdWfV-A}T+)$KM27LZe)*QyW8RCG-B z@i5rzWw^8(8dhY z5A2mdE6~zB#(7z?Jqi<@G*+L7z$`tpLsLUZbM~JZG$tUlYm_(Dx{0!4sonM{1Pe&j z=K=Ekh&Z0gb=W?i78Vvk3nI`4YUaVuAwE00000 LNkvXXu0mjf!)EK$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliend_dead.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliend_dead.png new file mode 100644 index 0000000000000000000000000000000000000000..4571e1c06d0a9142096b43f7727816a10f7585ab GIT binary patch literal 964 zcmV;#13UbQP)y!<3TKR>w; zUjF-!ch9@`+;iVQM_pL*g5`$2ul;or)TKoR0O#}f9*3@Z|JHW91riAWoR5uX=-1B= zq3Z-7fIQoDD0`O@#cgsi_5=WSW8{wiza0>n2auITn~K{`sPnD>m`+VFL0emUNa=K% zhA!HO0C^D*YXTDq0CHL`?fL{fJw4`eaPUgg+UZG~9zAi?kLX37R3t2w!uGs~9D#-n zD&&DV@TaWQD34$EKXL?~ZzRASN?x+)d~$$l-yJzX1CXxD&;%nT334JLPDO*6o}A?| zThMFa{H*qm!L*7(EC6thlU*IYPAWC^c{Nu%ad<4|^fR1euICh(&cSk!@~C=90>q4h zfPsZMj|Bj>x3f<7b6;s9qe(V1vc!O_6!|9(f>t2pF+K<6^w)0X=}lpZKB<$BjkECZ zd+_0`cF2SjAQCO4sxKVC>GyV~IP6FP1M|Wye3+lpPN}N(1G?e8bE(%Vn3-E*5L%2h z50DPnPsk@)F{e3zPRM{dG@@7lV3L2344i=7exUNavB1Dq z7AaCE>K;Qu!A63`+8P1^z6PYb~nO|UCKszRK{99B{N+{AR1Vrei_QCSVXG#fBJXyVLDj<%X_vLGiS0SHKLLoQM4e||ek{pyn3&Lo|}pN;^`&2h~_ z0}7f54&HZT(_9+kr802_$*-}+7z^P(#R`fdanPAHpUgw$eG&B+B20VHFT mkJMP*FbGDXB7kI!vd4d0uuP5U04)Xp0000%$hbe{ow$#lk4?b7RmIc+%Mw_i|B_1foL4JhHyWzQO$raz@h-b1mbWw zl)ixEc}c?6`1yS9WMR-TbTEKGoB|_uV1PO3L}0pD7zKbMsl}ZIjR{24mN{~+v9Ckm z&bQlb8+(A@$ic|^oR0z^lh`mh@Z-r?1f4XTSY7z~w zduW$IH+pbJ z^ZZX66HqpK=^c@$Uj=>Yu(G`w^t_c@grEcsZV=7?FArplIjplXPP8 z5m-)xm{E8}<$;)dJhggFa82m(ko1YPiUHrb??QdI+Lv(JpFH|4vQ+y>o>-9Z-%Qo4YO1y?@KWw9z&UrOba zvrj1EF8%V_rTn=2Y5+1~$FajA5I>@{VuQFx=Bfc4kH_-E%)+Y=2!>{2sg5?d7Rb4W zM2mAXj+K(6H0hntsV3j&;`9;_0MSnR*Q^f=tN^I?f1&Ib!Qr1>h+;9P00000NkvXX Hu0mjfD*rd>(M2HT zM^MngPoQ+ck3fP%qCldeL39|=fSX7*_#qi7vMkvGy2qaJp4qea&F;?ZzD?tIinlvE z^X7icojV`*7Ve5;tpIn$u~vY);#eynr}6Bi?L}Xkvwu!D+(ejyezF2U{QVC;_3wZF z@#9kcYj@xC&mX?uTl6tOLC{X$Ule^s_7sQ_=XWyE1qxC!8opKKB*w?mw|JpGfWliL zP)<=ooA9aiF(fMhjDf+J006X)QEd}IP59ZterShhSzh4(T}oiP?N?uSo0~5$^?z}3 z>Q0Uir}F_so2jL0f2;}rclK}jd)o3nA6W|EDB%6;Z@zRpJ3H>^=*WHi(I<^jZ3Bdi zwbOq4=$DVh%xy2%ou3R^fwGrD>%agAmE*{UBCHstux<5|FM|+%_ufPI*8O)v9m@FL zr-bM8zdC7j)l+!*fS9>on_c%lAXf=V3b5WAjLx=dGbH1E-u%{`+wSZjK6+jCpbsU( z(kMLIf-ax@UbRbBLb3&L{zC8v?>_crG63iG%THhV`Yw#I0C;%<^g)mR(XzHnL9YU+ zePxcs$iVY?vusC!eE@wH@Zj#_h6T0JR|`;nUcwf`CZ?=fM_>w{vV9| zy#JjSrkXkp=J*{JRJL1U+S2c`fEfKQBq_iPIj_C1j)pZ`2ojsieO3?~eF6>+OCRZX zSpevxy*qbF=v4sMXfR(f7>K~!_yluwlwE5*yttYu6@$4O+e!NJvGf0<5)5`**HPc*n@Y^xNnURzSss z--hD-?S~%*!WcP}W9?#n!1Q$w0l)&D9qe^l0H+HMLT}!`Ja|$0T$Y_X?4%z}IbhelRPz>rZ#U{NF0jPOe0Lq)2b-i9) z(cy6?2iTS4vV7@ZxRc~l+rh-SC*Uej^K)7qlMl0G$x;BFjX10Ym2mCidZ_2wT~E$p}S6vauw`+s1g{_jm7+l+`ilL z2x4?|cb>NIA~inW2HwVKXnSY^M2ta&rI8y2isdK-CpaXI&+XBJnEB2xgyF&$_HRDA9YP_G4ag{TN! zsvxK?Neo-9aw}{jN({t|;h88{*%hCU0nu6B1?oLrPG~w8?Azx8ZG}XLB+G?z5WBQF z3c&($G^yb&5C>zscbeDLm4o8nhFZg->dP0n5&*CQ3J%_Hx!b+l;+Pc_eewAiNLVAX z@b*52Uqy5JGDj292z)Ry#2^fLNcCOJcGVn(f&!()=V?BgnZmccy*==3xMrZR9K0q`D^No6P+9k}KAyvF^l z@LU!A2Bm5{Wtfb7!u+>qVI^q#oq3(Pf)zstF_xoHn9i5u^Uk@x1cZh;PK?^*x8rrC z5;Ui=kyH`MQ7BqE3BV}Bxp0*A2&x$(Oi+sTu`1Y5RW28gsY!5GK(P5e6c8O6( zNak`gwNk(=F-)^I;Wec`HB6qADqFpV43U;LzFxPfs|NdSn{MICEMq$U53o-%Tp+?c Qga7~l07*qoM6N<$f-pIuasU7T literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliend_sleep.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliend_sleep.png new file mode 100644 index 0000000000000000000000000000000000000000..a172ade2185be070b02ada53a7ab3d385ebd66c6 GIT binary patch literal 1500 zcmV<21ta>2P)l{Qu@-5n#RX9cKRXIYMnGUfnrLZ}3diMOWyLkSZ z`}FaJJ9qxBd$;rwUuQ1`OZ;dHpoBqf%uG*D*XOTaE%LO81z6#a6aY+U@UR_WhhZsX zXmxefAA8-;xR2mj7GRAZWdUFU@p$S`#~nF-OiH&VthbAU?-7P7XO#W&M9y#mE9*B>(^b7z7|Ng5)DKQ!CGJfuCdnATWaT)2-`4Q^^8f zZ2|kICjEI}YD0;em0TfN;Hv}xsRNiy_~Uxqy;!3#(;OjK;Hv}>N*&<_6szINLnjNt z0$(KnIGoOj(|+3tZS3EetQmnraxL3XIw{8QR3TX4tM>u~2OT_k*dIG5wzUD01&WX% zWOOoo?KQqi01P`v+_7D$>C~Z3{~Hq)YRh%Ev=V9|g)H!+1yD)SKO7R=vGuGH6BHsU zQ}iUYBAHDgD}415;M%M5ZJJjfT7kp~+P20u;cFcDY5}yp0Jp3&vxm15l&)*^%+ypW zmB!aafyxXKPP_*W))%kC@6LU03_Cd%V1b`h5o&q~3Bsyvleb4YTUBd{AI=46AV@slioCWi;o%!UE;yoB~k<0ltIsfkOc9(a?i_UHZZI%aO5 zTyA!m+ zFV-CnA5KYAL)Hb8RD84cI045|DayhBKOYctQP_W%G!6}0;z!K~Y^9dl6ic-PH!Ri21CP0+aG75YN4$tA-XbI$x>=rHXRo!7xU-M(Ab90Y; z4i2+Kn5pyeZu3j#^aZT&)xAMT8L=3Ihr#?9ld(00R%BmZ-j7ZW$J$&1S>UUq0Ejhr zQW#&sh%Z!#4sGr-u)>e73F1ahXCa<)Bo#+CBAA$PP(e&|X0^vG@l{Iz1qk-wB@-|? zCMI%dL6)<4Jw15JGO)mp766Bo`A|rmnHUojnT<8=<=L)I8JDxdSN*>LVy@gu%2u`a zz`;(eX)n(-R%-!P_|fC?kR~Jt=K_gKX>)$J&HGA9@d1|jsyu+sL>3;xfrX}iJv}(? zOAUoq`0CwYlex)(1(<5sua_H_V7g09rSa8y0L-W9C8!Ck(U1{3EODKhtngJ9z_8Qy z5;6qU;ilSwm8b();Hv}>>%FZSrWW|xQQ18sEBwEM2w?YNpUR>D0000(RCt`VS3PUoKoFgS6n5f(Vp1q1j?du6xUy3jANJ4J7$Cy!RT%}OUvv(jq0dGqGY%-$nu zV8P=saea^fL_KL}-T>fy|LuF{nJ=FQNmC$R0N{LmPz1 zn61s7(iu3vi~kxhbu6?3fFDL=&tJWiG&T48>0UgE%$k}x1LxSAI|bS~R1Q(zj&FoO zGz$a+b2)DX0Cx86$gH3jPPbPN44`mDiimB{DG0u{*MJ>8s$hL%88vUdLl1ZHjS(b) z@H|r0i3S)wXa@)bET@}#*x${Z$~fyE=o|Sr_J#HUws#KFgG)Uh0G*Ded+Puq`002ovPDHLkV1fvMUFrY; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienh.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienh.png new file mode 100644 index 0000000000000000000000000000000000000000..29db838b5a52515f1f7bc9271051e95e68cbe959 GIT binary patch literal 2103 zcmV-72*~$|P)#B3m!n2RP}M7($sJa|#? zkMQ74|BOBOM+7th4}vEz;w>9;(M1Skbw`*$kcACyZtZ+E{ndQ^=2ds~OwV}8ewUuD z?yC2rUcGu%@9k!I#c`&9@QUM10gHCrer>1X@8f^R8)3~DivB_h0P&l*?#AD5UH>rr z{L@~wP9+RUzqbOEIPlk>zl4uI{%UPX7@Gc>4`_SIb+(9Rm+8As`dI~FfbG|J!sV-1 z!jpsjWL_{gn4N-V_~5}esV~g*`RH%_SuHAnN1u4{;-3b6+qaZ{RsnUVDvUzFU}R#l z)}pW$Xt%_VPsZ*H=6KIFVzx)2%u)Dh(4i68*=bwGqOZeJp zrM8?C%h7*%eCqPsSNKi^C=KDFd~$iSN7i zWjp)Y4kdW>8^VpI?Qo80!xPrY_ic`|w*pA~_uqa98}9J zB+MI55IB7H813;lXIE#L@A3WHw?Cb3SCesQl4Q1JpGctSlzEVcqu|`cAx#-P|)1VIlsr*v(0=&d^{8> zfDVk2mo;@>NX)$_qbH%rG}AY=B2qBJE%Riy^C)yuN=|@^Vhf;9HpZqI=H4#?+qaPh zJ84FE$!W@cK_3(;pi7ulXM|Qs|12{UUU8f$V3AJV-n;G^fuVR-f{X{en4b)-vQ9vi@A2SW#do2%1u%KxrMG}p6-(sOYL+h>q;;V<62!C44#xu# z?)-p0dA>!_COida@}@20?4c+%HkWRy@BEkxB*@^9O7MiYG;Q*xPi?|xm$usS^!UyA z-!e8dJVo2EyH9$Yaz_g&xylNT67(E^WkJSRJ8<#BUKj%R?|L%_*TQ)Y_@&wOH3 zK#9rbiWM{^zH^QD0;>asmrIbuM<3xiS(~N#c|eOL^cDt$XUE{DsdiupCx|gFUU;(+ z^ne!9b3BG?O+tzA0B?_y6U^o3J!ri^I-ieb42OYX(`cHCGc^fC84L6t4@jgy_9={l?;qt{WjMV?zO5 z`Fq~qQwbog&l3z7s9gp=S~E~biOC#+ft_J0kAW3VC!)?VntB9D zozDe$UX4Ps053tA%hAL1X!fWHh@~iDx+J751q=*o0nA1Nm<-kEoGZ9TxPgJT=`1G4lLlTyYs_g7)G5k2WlJ>jQY0(;9_n z0c{bK-GlK&XAq?`GFR0Ue9$GJ{O}qa6967y38{dxBQauY6ruuJ^7AejFxlE5%j^m; zn+yrS-n;urS^{0L%OF`mNq%0lK1@^5G1c4S%KvMGe8ea;OqGCC8qpOD=`sMK0!s7q zEQ;15iI@xAz7hTp(CWZTNjN-L_IpwvhPv|eI{PeAu-VzJ7-C4UJ_%^9>FLhoSpj9@ z?34dSAmruer9D+>s_@+V`;@3J11-!j^}taHv;sY{<2_Hhwnkx72levv5SXcF*63;| zY4-lLL1O}fb;AHps&yG{#Z6T%yiWthBbkdYugLDsQ h{Eb$pII({#{sTp>qciGbH>Usq002ovPDHLkV1i8<_l*Dm literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienh_dead.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienh_dead.png new file mode 100644 index 0000000000000000000000000000000000000000..79edd21d5d24fb0f4c3a0470f09e82d4d0a02933 GIT binary patch literal 1022 zcmVqmeo>lB_sq!8;M$EwJ`}KDMxqI(NE1>x=Xh!B)jw{FG%2|W0DSE3qtrcbUzfaQiR2;x@Sfgb`T1i#bsq_W z$kP>9rte5gc}+Zwry>Bk)^$7lokWE5ATm2qlJc6H3Z6;8_PGselZndw`~&Ik?w0oR zC0IZL3s4%!BoY9)(|KKvtAF)SRyLQ6;*aP{z`CcvXY`F!8kirE=&K6pw`pu;^>xiVfAY>g7 zi4z1TEJ9L){UbU~FZk;K2XT;zvqDpK0ALij1n;(MaN6pjt7Cb_e+M|`ns$LI41&-G z-mmP{{RYV8j;nQ6AQ?y+cq#$rK7pXf76e+~u&Y5f)HSJD;&e)Q;;1e|g0I;zfDdp2 z+q@Ly_?4SQd9^SgAI!;ndbRNA8VDa(_k`I4BG?ad(3Lv|f{ki^no{SD!cXs(%rl^7 zr#rZZgvUmGP^tL!19c-<^CWK;SZwQvFv$F3w5}xX&3w_di|zh1H&v?X*>dIM#;OFs z4cU~L1t6k6G{B4r+cg01xZwj=zWZ~*`E#BX}7zv|)dchAg zf?JK~|7HQ^!?{BV1FbycTLzs_31u{*L;?i2f$0j{{|K_7(Mesub>H}Td0fAlose9e zFp&VjjGyZ+7rc<*q{svS?^l-e9pHV&Sbf8*^1L{%bph?zbdAuBCu>HQMR0Ne>zc6& zb01N@{iK$vPUnG=0$JXWf|Bi>s2A|$UpH48>N;CCglm34?x-u+sNxD*ZUPYddVA zm4K}r-46{YDl9lyN7M&<8Y17$B3n`k*vg?8u0ZZf#0n6U+CGP#H#)T8ySS sc_2bU9P|81ZJIzF8Cr#eIOfsu51Pi0MaKMaP5=M^07*qoM6N<$f=9pDc>n+a literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienh_husked.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienh_husked.png new file mode 100644 index 0000000000000000000000000000000000000000..b733a990fbe0584715533e0e389c686bf085dec8 GIT binary patch literal 711 zcmV;&0yzDNP)fSBjuSB<>&z0C7dxOq4I0 zyiJ0=VI*Y7as1}}o1avG<#Jg~y??*oi&Thg0usJjt#g5zw{Gonxm2Y@vIt1{ zcDrrn&*w8e9*?xyY`Rfv!hXN+h~$#Uwt$4W_K}1jYiKSaxg;hDxX*Pk0@mww^KoKB}^E+Vz?q`=ks^?Dt&!lVme4Ur)boU)JzVF7(B?IA8QLslrN0|-N)o^g#J zZAGFTo3xd1trfdKz<(|nH!#P<2y!yQl<-Lcp8N4|NUa`N;Ffd37!?~fv{Ud!c{ZcchrSx0+48h_J|N@*9F>xo*ye-+)zj}dd z9_u>9ycF|umrMm|Rx@(VT?;Q*+=|$vb&sD}1pM#_C*kkMgvOZ2BH$%=D8eB@J01h> zB!038aJXO3#$cBE6ZsxXj-p$!3mCG3B3(o&+eALXh1eCd2w(+rA6G;zy?zWue$+mj zfPn8vI}nL@iZaR?_&r)Ko51;eZa%E7P)!j5#7u0}5k;3$LBic7Tuucq$6lCb*8zu{ tntES1r%FU1#5nt}SuPo@0-=&Wr@!7K=jz(~o2vi-002ovPDHLkV1l??JW>Dv literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienh_pounce.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienh_pounce.png new file mode 100644 index 0000000000000000000000000000000000000000..1d2d1df7c5b88099639ef9c47772532813d801c5 GIT binary patch literal 2030 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 b{G9#=9OZUOKPP1800000NkvXXu0mjf`BsY7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienother.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienother.png new file mode 100644 index 0000000000000000000000000000000000000000..524096d55d1f186c86f1cfe65a9bb8b52e222983 GIT binary patch literal 1030 zcmV+h1o``kP) zB0>kTP_UEWlcsBhLZzFCc4#nm2$aSQE)Iqm=u)B<95NI^!H5nnw!EJ2zTBsY$ukL& zo+a=8o$tHn_ofE_S;{70+z(jA)}nty_wJMc!Rw;)@P7y+5;XCrRTQLwr)ChT*P}2D zSmlx^nScgA@c6L53Ji}2@paWy;QXygn`n#fl}(~73-IOyfBa)lKz-`=1m}3a!w0_^ zMjYiySp;bIW^VxVKP{|_1+D1E+a1XN(f0#@%pJL0ij6@+vNe>v9kRnG#Q_ge8*_cR9U6Sz1_qAjy0 zGhsX#dx4EdJ$MkCDtM-10#tN(6jI-vX;^g`)__H9%1sH{wVVd(yRf;og8qRdQj(^f zo{)9eYM(K@fm>6uBp2vnQ(K?LhFAdIz=q5Z{z|BuW3C5V94{x}KMOiVswCaFZFsnt z!Re4keJ3Yc(TF2w?P4d1#=a}0qROJL{{^Ln83@#+Fi4_&${a6%JPb-Vm%!*rni@9e_9K7_Q z;adj%JBw-`<=H~icF!$VC`f>}XIj;Yj~QUj4I~XuTRbWrD76xRBmq;Zq|C>q3Oak& zU=5Cmn?w)K6|;h?1wMZ?(7cvgS`}axoH5b043(0c&#!_!KYXoZmqmb)Oy8d4?Ts}J zPM;?y;E>1{o{t25uKl4X0hLCXtFhyjEI5T}$jH~0=#@Z?elMWMMT!z&kYNO>#L|bH zV-;ke0XMbM0$ev@yJ|1brL>+(2+*fgz?V+1lv_r(O2HjF-ALpDPN9(z2pDph>X7@ca5>R4LBx;XKEwzR{es z#yePg4_w4G4f7B4J!p5p!ou|?1PY$5h(NwDq7NW%Kitf1f|uHWDkkv!RTN)lj9mXC z8xKKyon`yZ2r$)H;|ZcotmA<5g^E#C31||0jIh>gaE>bhFPi{g!mRE2V0z4TKHIBK zfVaGy`y{n}Ue$Kp4X=yt9Vc^MFa@iY1^O=;M{@c~Glxt=^R@o4{**)FlADy-GJiTloj{pDw07*qoM6N<$g7KK! AcmMzZ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienq.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienq.png new file mode 100644 index 0000000000000000000000000000000000000000..4865a3c193c1918eb5e852fb60272564cfde3844 GIT binary patch literal 2286 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 IM6N<$g2%u`ZU6uP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienq_dead.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienq_dead.png new file mode 100644 index 0000000000000000000000000000000000000000..62bd50eb51984245aaee65a6d4a2c761a1ea0ca0 GIT binary patch literal 1017 zcmV$T&rck#(;_tu?Z3jqc$-J!Jv16ErK2iGTJitO$E5UGm-4-Jp$ygAni zk=z6TOzY|C^MU&m6c_HzIS_fc-OBptX@nRlpfIC;QDmyloNkiRj4q zn|A49Rqot({Yzw_0wo;ZndH1kB%mLJNd+QK@qkQo*VWMvON1=!oR z)WKMr3GM-oxsF4i3xX{%+GAt^xq9kt2e9~tpdV_1W zTs>H8!QnFQ=AFeQhy zxPSe4T*?ntBi|9+Xhi?F3Xo)&<0dm(4#G1%AI<)(MwCc^;3hCb0q@cAknOB{W_oQV z2n|Az)rM0Ez!>Ma(qRH3%SR`sjJZIq*>e6vNuDZDgZK0lr3m1i#$x240&tWkHYT)g zs+P27B7rz?NDp9L%nu7UAC#GCU3=Y13S@bH2z!QisAfdZKd&#fH5NQ$8|JehFSb+- zcFMRNwIc;g&rL6QW?;`RietXxQ62LeJ0!UXu-nOQ`!j;!z!EbbF{;V%r-Nnd7IH+rgEE(TU_#V00000NkvXXu0mjf5^>h~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienq_husked.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienq_husked.png new file mode 100644 index 0000000000000000000000000000000000000000..9b295cdfdecb4f5d240a635bd87d581b3af32752 GIT binary patch literal 717 zcmV;;0y6!HP)3lw?<#L(V^}N|^^80qXW#Id-ZcN>C9RV<%PJf>jU(gcCBVq8+K%!IpWJt*yMFMP) zQiudHd2GY-v~RcD{e3;wW6CG_Oh!;rR!$m^(fj)RB9aXIu;eP)w!EeOc>&ihq6{~MVe*Z6dflP;}&W)J)(fVov z@`7q#p>Qjmge;ZykWt(t@lk)x5TddZN*7jzEFRSn)dUWQLl)3_p@~Gi3;L*@@Y0>I z1eAM7u&y+|_1CNf3DsY<{eGX;>vf7_?P2r->-XCt=GZXf00000NkvXXu0mjf<>*lF literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienq_sleep.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/alienq_sleep.png new file mode 100644 index 0000000000000000000000000000000000000000..6d841082570402015d00f7230cc22484d4dd421a GIT binary patch literal 840 zcmV-O1GoH%P)c(iO-$$rhwL?#=C6=GJ?=XB(zjd-v|%w=+AlbHgO8 zcPlF~7QgZp^B*h-KvCGypfDMAp{UZi`neh>SmfT-EPQa)Bw%bJNvY zJpc%}cC~lY3B#~cc!eOB-#?mf=cn#H!c>M0B)yP4gcOHx2;|=WQwfg`Qo&;r3{@*g z6hORC;DC*tFva;F!Z4l@KxogT&O#J`A*c`6*v)GgZLeOxGza?+oM%3tzQuGj6v+_a zL)eYZ0tkda`u)E9%>!x@=O7sZrksv1vw+4h42MG*k-pWt6kp5(EG|eZm`*jdJ7)kq zsOIs!g-wbF0YbtMb?fVyj2l~rg^eaH(@02nFTcBJnHl;Ylc9TI}#H@Ye`HZiZX zcSPYi`8eSGLWPi^6JjBQX|HJ5BtXm|&V$HH3$%_IxFD75@_eAA|;=H}8(kvnPY#I_(e1#aV|K S$Mc>50000|8{TY`2 ziNOAht%4Scm5qpv(JC%NAjI9k6hQ`d(RAaSyK}}nZ|BXv+2q3VcHYdqbMCnx@69y{ zu;_Z6xpV2Cq~qS>TpJ4_0NZ=^O2=QPpJY1yEiw`Xe)#CI&fB>*M1lzbn6|dIo&&Ed zD1NxMb088*B8UJMJ02cpRs|A)DQIzxU%Vl~B)kONxMQ)8ANo2+B6YUE|5Cc$uH3qD z2bXxhQ;bsl4yc!>XP^RdAQ_$L_4d}2@?Cfja1aNXIu(Me zfM7Iuk87&}yoEX#bIULS9CNKhpbHl9v%u%$v&w&f+`f0Wq5{dln!p@?T$}@V0RUEB8cGmgAjRfmtKuR(E2{@Y_&nBXl>_vGQgZIw z=Yjr*>qB<8K{hBP3!*VQ{H1=XeQt=%`6C$42z1)lwc_M9vhZEKTPE7;X9FP zLt3nWC8IISfteF^p=ofSbVAy8LbnR6fvgN(y9Ij>VplEwvfZ^B+fV=QbAH<2KBDv%EM_HMmnYm2Hp$ z)^qCx&kWobB8lxY8P&1xxFHE5z}-$J^Y;jb153?(#i%C37fitE`E#+fO8Cqsv9+L9 z3{dukCSw>xs^13$hq=3A@QH{ehT4|~6*MU)#Tn5#n!DZy6QByHZ`3|RVZF2@@Sk0h zU9~J*hj^<`Gc3X*SfNBo#5INtVeuVCS`j!nc-<+8WG)dNPTW!Vk%=sKCiEG=ZAgxX weesQ#`ZV(y7v-ngoA(2G@w_MQ7`hq#1A8!j$PbXFRCt{2TF+}0R}?;hEVQOHiqeQb5{rv!HvTAxltOVOq|i-k z`#;o0!9@dI3vPrg+HDtINkO5DfQ3?urHEjv8ygEkqDkp9N}D#;xSP&*XTJN+oOfsD z&UI-#q;Aam)6R&rgf{3$D*(h# zo&MDQ|KR>l?z(^Sox=aX4_D`sHk1&euhB34##=xW|MkwdGB&ou-zO7oA|(7E^at_* zho|2!WvC6*(dvhnN(FGw!KCo_&)97Gd&WQ4767Er)3GvQ-<3XL>5os(C$H@ix&Px# z&)CU#=jHE5>DYy4^h*_h3C3TYkez$?$i2k{x3AXMy8B+68-G7ooA>V?Jak+hul|mo zeffkk`X}C#RM2@@y>Zfy-FxD?ym><8yRW+M#?miUK>ku9t0I^TOo(*6uoo|WBvVsU zvb?-3=g#Hkx2s5eeWMdx0lhk9D^*7S?v3=>n&CD5jr&&kGWt;p2r_YPA^o}Fo*kW@ z^W$;`MHVL{MtFGh)LZ*|`R}Aw2`T-1*U~vs%MjW0Re)wAjmj`1R)5m3G+U-hhAMmpW{x5 zoIzY+-gvJ}32q#OR!YdMp!-Y<-vqS^(5v?3$)D~X2x$g#XXBn%ttQa)9JhNKN&w&- zaSvBmC!br#IgkQK9LHT}WhuLt5;*qu$Btn#0LFj$`BFY+$ti-4OEZCY^y(9|f)M?Q zeFq9Fiz^fidH|kjpF$l&DxHTWN#;V^0E)~N-80@EZ*Xw<2EqIov*pRwuCG|k7D8LZK%ubr zu4+X9nwK>*T25zW4*%m;;k+kvWK17(_ZH`R;seVM6bzc3l?A5=9TO;eK5!c-6gGl8 z;xunC3?~C-)aqe;q8SO!wOXW67QLBy3iKf$l^;vL9|eqAZAUF=DeC5il zSVhp|Gxi{jP~0(e1rRuYpRH%awf3{z;8IWIrXw>t&$4fRI8%&+Fe-84->2YuoGE{A!5TX=72gb2Qxe}H@YW}hF+AIFF=iG3!qRo#-2lNeUw1}6|3;F# zk`dfLdBKk*gD}y<)5GZ(D(g)m(3F7%L4UycGg8PgN<>IJTBog0o&Nlp&dAv>GpBcd zZC2#bOo1`>4s72xC&R$y%b)o^1i)Luu6dbEjcxZEy~5X3h$*+TfS6R4Rl*mabW|%! zmZ2qMx_4k0*uHJIyXuUR%R((q$jz%=KAH&6dZJT6T}2lNcWg+ZBtEe(I~mwJK*k5f zU;qB$Ea1Zr&U)ch62$Y-M0hUNXl#96D*>OUItv5B-Ou19-#ai2Cx|&xMHYe{&_a2R zpW(VEAx3zB*(2`+oAlY~egXe|zS?D2h74Oq)1^4mlMpqZK21hRAXJ~X2=xnSbE>NR z4ih+$cFG>L^5s1V7B+WSI0mZ{mbPDjiBMfBeqQJnL@)XD8=EugGD23yf&%L5_sri@ z2_Vc~0pNLB0ATwPU;(z~5PDbh8EpXow0!W;4&99*%U5p8)ayt5m^>-TpTqJ8Nj`Uh z&zlRgr0H{l+?r(wT0p2iPcUGhcA5CpJp*}^=*iu!yI4471_Zw1;p0pA-rvp zaJ9hk1M+`>RtH{U!r`8_-;MlZsIES*SD#G^wmMrELktt_PXda2x;!^XnYjAozYqw8 z>htQp@6go3^XzZZqCN<8V}?n+IVI2v^d~!>^GnzED2(b!L-lzG%+fP^bag0c&i>~H z9TO1j8wU8Lnzzv=EVbJn1#bam^?5*tmw`HbVKw|*EkM@I++- zv_9W`!S@82edg~EJ0q-xXG4}1o?A4q6%*ZC5aKDA6|PN-NiqMf@7H~d3RmG}>gjM5L}S8zW70000qJk_pX2Fn@BRoiKN-1~K{my;o&3$j)-)IMh z>-~A>`|kO@9-m?*QhSPNM(!%A^{$`X{Wu?U!E7%mg(Ykn@%(l{ra)MYo*nps_!mz z<>=O=t$sugvZO3wDP7@l5lVnRaDoa%tW-M{o?A3LxkBeJ6McTC&NMAh;gv;l2J&(B z4O`&;Tpcb!sbdx$PSsQCi!Ijl5Q%hw%i19Vd2+|{oI!Bz?rxL4vF=!)kH@hYy$^6$ z5oCg_P*WWMm<`3fMcy@7qCJn2u%ASf~gftK#IImmiiM>tEY7IJUw*QH3vG(HCK0d8QLR|M7Y^rb94o$02x>gFAt zL@%G^cn^g4N}D9v10pyNa?q7H2AqRzelaDlD}^6k&#GTHn_b)?XN2%TzXqkEt{^h?xhkDFp01a6|lsF=^B7H zpVPp_uX-)}*yg!Wh68IrECGKOm>B@mV*cV$pBw#SGdj=&+-OAqHw&=tuI-Q;X!&t% z8FWG>6w`=82?)3eEUqy9k09&mAL0EgHp#%V?{OoyL$b$qoMJ51v zt2oPZfTxwQ(!C4xFgwI`0qvN`cHOwYW@K0dHwQ59DXU2CBgzYRE2(O=Y%?j4RcG87 z!iDzL3(TjOzphKmhRB`{$aQvwG^(J2mY4v{NMoT-X@ zGmA`#Bw#9sVz>giPd+O^P>!cYEtLiJ>?#h<4Si0)A^xtI$OTZ2;6i>Q_r(=*ODQ-g zJ}5#E^Kl{)^qh}%fmlI&Codq!5&=YXEYk62vuQ4u%g6e7Jla|!MFeDg zynJPN}^bS+wGPN__>U-Ix#(WI-QD0WC?i8-Q(qQnSRKRaUJh= zyL7(a@3rXtS-&>@aTx(*mxsdjdQEF5@9S9iB|j>NL~r=Ri7_=s3Fw8+P>Uht76AYe zpl1$;Lpm0b&UmB5)%ElFJg7o81h9t45J*mu5jhmlyYe35A~U2yRUhz5kU^ch3i4JY z`Zbj;s#S+TAbxI`oZuLVV|eHpIpbLZUi)!#NO9fE6Qgmjjs&NF=Kx(VCYi9^Zr?Ir zzpm!rNI5y4*Ivarpa*HINQq}EH38ZE83?-~GOnJ{-=i<&2|%JZ`bLB#)20v*8TU|K z&`EbC*fj4A>2Cr~L?O{eUUGCrk?_QH@`n0OD8wpoLp}$FawXuqRp3b$674(V*yjL- z2?g4~dWCNyEq$k>`}4RH61!C^jFFr5gH{-TrG9xaYC2 zL(E$-KMzSRNsES&d+uI%!{V!mXLQ~3XA%M5Jit zA_8pgpJ!t*r9Lv>bIDQlRqO_aR8XdiC~cd}$G8xuVi5sUp!Nwx^wRssQ07PPiwOwC zjWHe3QbEQ&Bz&9--j2O7P3{8@mzsXx r4X0K_AjCTPuURP>RDn?G|3cvxhf(c#-fL@s00000NkvXXu0mjfH3mZN literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliens_pounce.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliens_pounce.png new file mode 100644 index 0000000000000000000000000000000000000000..7a773b5637ad71783493d2ab94aea863f74cec12 GIT binary patch literal 2296 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliens_unconscious.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/aliens_unconscious.png new file mode 100644 index 0000000000000000000000000000000000000000..6de88942d0dc1f8735bb62fb71779b8cb6a74d79 GIT binary patch literal 893 zcmV-@1A_dCP)(}oYb z2LsnIa_Q=o0ToCFa2a*caRc6bWt`h$*hqW|S&{Oh+iV2VF4xPAim;d!}#bhBTglCSqck7-misg=PeK zqI@R=@>QTKfO$ag$KZ6U0Qa+dJ<*AFI^&qewPA)r#~(?yy0&4Sb3j>@CL71tocD$Y z5_pPAfZ@aL*1(ixX`(N198Wfklp^q)B?whm`^a*Qss6Mf1+uIL+p^;m%>sQC%lCDT zY=F03A3{DSya?o4 z?oceX5-u>D%pWfT^pIug0>dCOd_31xq~U!aVTqyk#i4>p%AOt9_IOU?Kz=HE5uggF zZ`3|Rk@r%cBa7N|(Q)2e0mhCeAgja>5nZBO5x%T%Sp>EJ1)+Y z1}Dh{0c;vm7`ajr%&XQ1PChwV^!MlL@XKo3&ipJr^IrBrPMJV;b+zIA^Pkx}a*OL^ zKUcF?JpZ=0;zxzx{<`m;0%_`RkGf~s{rypFm$~Bjed_~{uXq3W^*PnXYKHsmZ5wlU z{}yzQFZz6cZ@uvTzgOdGRG#18U)gomzH;}^$3WwMM!IbN^rk<8?ZGj>BbUW}edLc^ ztN-s=`RTL78a_KC`{#9^gLVARZIi!WRX6W`c>Je;ZaE&iKx}if{2<{uNeV z_zb=udMf(i+FiBl#U6V>+{d!p{;$vAUb*}pl=AnOkTj?@FN7>zh~d z-RlrL#n5Wxu#hJ}gIR<;rcT0M>xs8!TP*v@7IC1eJn6DQweWG1`wZMO=5Bd$?}*`9 z^8-wIcY7^|f#=H2p!e^Ui7v!D1;QBttWiY<5f-id4x4thCO_4g8@4~IQm zSS?*#{^V!m_VuO*obukp-2W*VZ^yZ-W-X(b)B3f_&&zxDB@+~P?wH)uFz^0UMzNxb z-t`UB6F~`zt$gP6dgdz+^ge&eZ2oFv(!T`U%b_V*TiRu`2& zuf%xnPQUq!KhyR5lkDcFGdOBk?)PXY&%4ikY0aj;HP-U=QvCAzO+iI<6B&SMu6X03 z)u-!r2o>4ieOK50?)dM28TlLjHtfv)aNK^U`Oc^74hD6x+}NhOYrfv|=es|z{Q2|A z@891a?z?|kocEvE>7dWue?@)dH>~3p@;-5v!P$;6`<`jU+gyoXoCZ%kt=Cjs4%^Cj zsm&(yyw*L_j0WWgq5)b*p#GB&DZ0LZ@l~_ey-OrV>AB@o=FGSLzvAc4mtAxIzdi5!=AHXgE7lqBxmCse{MLV5cW{b7LzQEo=G^?l z7X&9P6MZYSCumPeu_>UoQ*5~cX zb*~xnWA=-dzxRK1(m$Rhu_P$IX34Y5{r1l%U;Fwan!VyrkApTmszKXYkbi!t;U3|m z_5VF9KYf-s!)Iq?|NP&FXdnM`r;eM?pa0xWImY!h!{;OR6;hWE=g(kxX3uPD{aE?= z^2hIQ{CsV}rhT_f(Vs!GZqei0EFkWE_A{pq1fAn*dl&o;)$pr6z zTpQ%rZcO^P*8Ms27q2V1bNMg)*tPaEu_Ag-+o4`Hi-2AW`VjCkXUdSE4 zqgq*a?T;z5&XZGq_0Q95eyU{rn#CyQw0@)VbNw!T$pponCnona%-i3=C{}divG#*h zP*7b_FTZ(uKjW*(yWc#$&rq%Oo;mK@b&aD8)k(sSy-D_EsLFxH-yf&VvVU>$qn6Nv z6Mrkb&({C@qXA5mYyvHlK6kTJJpQ#-q1S5L{QT#i^&h|c>lxs6PG9K3?(g|}VI`(- z+qD(HUw-@U`ir_f^ZUQqRoN%J6Z-Sj^t;-&JE{?06B%Cba{GSy>7SZ%J5&4lHTD00 ze!TzxLuBjz-c48jB-OKCW-qzebVR7g_<)iB0lT+CZ_egQ{Nmhj#?$uAMYXl}SUjSi zEwOubQO}Y2jzb*dQYUC)`Pw*XHw$loyhi0|jI4$$J;Af36tm2Z^XspF_Riwj;Q#yO zoby>c1;XDhPb{n2GQa!!x`-yh4?9JT#-hkr)6Lsp$< zFXJ<<&37{0PyXC_xqsID*=tVxwEq`(^j+N-r{sp8`vQsGW_z**{zv>Sm9h~X&tGrj^@O=u<5X=vX$A(S zSWg$nkcv5PXBm1Qc3^0YU$JF1>%!&-iyl1k54dpfHyGYJ)+zDDt8|Fz?j?yWHAXmdKI;Vst0Lwr(Hvj+t literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/burst_stand.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/burst_stand.png new file mode 100644 index 0000000000000000000000000000000000000000..d74ddb08e55b90bef9d1f498a47c1cdd80e2743e GIT binary patch literal 1503 zcmb7EX;71A5dI=*6Sacps7Q=}1rJ10pwL9}aj7T@NU=q0h$WTa1+knWe4&67g>eup zMg#&*R7B8dQ4pg|TL>5qN)oxNtC+1=-4MA+sz zv+QR905E4uNO0t&u9_0`=aX-Ngt~50&7_6wN&)~|!IU6M*4i!ufX|Ay1P4T=myh<~ zPMk?w(x!EdF0P>=M%SWkt0Pe@?u!`i$GEKQI3SZ=}KW+DyTPnTO@O%fkL0M^)+=C%ah&zMm0=py@=c;UM^3Zc5 zk?7Sk@)jZj^8v?=*{7ZSL*}ix__w*H6*1T!-d0C(8Ya@&ouUH$z@wG0)%k^~72z(Q zs8P=yH$fcgvih4=1!A?zSYdrFyM0ET=zvkO9|^uY0$l^ln=F^QZ}$$}(ytKd%J>&x z13|jKcrBSlhLD%QVKot>OfuEtFRm-(bRgsltiV;*y8SSidbRA=z$KOd!gZ6#W3+X|^nk}Wxn zkLimPTi^9GHG;k=2llCa@JOSl{My{!mi`Ne6AyQ}>P5_>%Ei5OoxnZj&R#2#o=_Rn zRGewyUM#mtMNC%}$O3^$C~Ux7bUNInY0l?wgU*&>^9^nodV7lY*`+SWi9!!Lgbu@7 z*_!zRiMn8rLCDg6`EaW^abXqsJT-6>dZTU6**4)+4);eacG5^+jT^3tIhejf5qGo& z(h8W+67@X`9z9PcJP-!dfU_wOcW|@O!NYs7kwWC<=T0}9{}|cFW_#2Xc{n3AeqmJx zh>@{7AphqO{#H2KoPE`t9ADYWK|D7OJ+(bGBT8Kzbj(X`ccmws@iw~2oE^_B>9#wO zx~psQi-H!RKCb<#<(VehBWKS&Ol*m2!CoZ92Os`s5~r7|XEq3%!}aR+^|g1snSir~ znyqf5aH;l6xS5L^fBc6oQ&B!F3axjm{WEQ*M@|;+CLcqirN`&C_V;XRux}#Ny!I8F5JiXzh ze=><8DV*Q;3c{1;4Kk~DFK7tUtMll`=oG#WP#QP_cd!s5UasjvYF4@};h(e;jca*Na*0RD#B7j8W^?jRS{F`>r}vskvqA zT)je@E3a=TgIyGMOTJYC1zBl^ERZBH(^BF*$)5DmHK^#3`+7`zjX_$HHiiSulc{Fh qw(5OTtq4&a|E9YS8h+1$RzyR4!crTi;N>J^16wwR1z!)`oAVctfV#v0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/bursted_lie.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/bursted_lie.png new file mode 100644 index 0000000000000000000000000000000000000000..38212e7b5815ef0138113abb6a892f3fa0afb333 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D7fF# z#WAE}&f6;oc@G)zuwIZ~>E(VRZq7@F63%T6j0u+9r47#lgxy74JG}1*>1``o5p?pu z=E~a-&!;jlOB`TeGiYGs*`VEUxu_wV>4#X^ce##@tNNuB9-6~xbihmFwAS*rsWuRSYbdOC4_hk@ApdbSCtmQOgeUXkJQl<%|ZnI)Z$ z^zS=geZ2Bmz|Hi_68qj;v3k!9wC|eDkb1#N@a#Y4`Aa1a#xmYAYG9m~BI=}bRu`#?gr|Y||BcF)8!d@2-{);jTVwbbOP_1fuvz6oHwPT&D z1a(_VM2-1G^X+&x@oux3U#D|HMBz9~gN!gkkq^TOLq-s1&P66C8<__aEEluJu+LvT zVK$4$g!ieP%iiD3j%}a%eZuS1`-f9+N#_YoXzDq*Z))ldS-u}Sj~+ia{uatw61z*k zXoBG4wuUV~*8TXMk#~@LF^h*k$6u%at7L z+&;0IxE=o=L0tlke(K#iPoP ud9Qunt@sC<<_NvD%28xNgc&pdf3m%t)2z$cqHzuwX$+pOelF{r5}E)Q)xJ*v literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/chitin.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/chitin.png new file mode 100644 index 0000000000000000000000000000000000000000..e15a0cb59a122f12db048555768e394f0c3815db GIT binary patch literal 371 zcmV-(0gV2MP)3DZ3mV1`>+NOPe&wKYa%Kj`3paC?11_%ux8Ov}~ z@9su^4gm8`cgW_mk@UOD0JTA#@28g+Ks@8uHw2gIf)W4{!yLwqcAu@56aW74u<&cC zRpvWmD+D18K<$Rem>^R594l6u%-NX2-;)9$b4m))8s^v2naN7|43HTr%n1VWZ1;Nr zNDNbId$9eGW1Fnd%Q9;$1|bEIt|t8br87W4s_mBsz{#c`PVgK+fIxacTI2Qi#t<`( zS*O`Ya_{DTo_U7&{wo2H(X(*6MrzTy4+S6q@mfo!4h0}AX#fqN0W`qh0Ukrqfw7^- R-01)S002ovPDHLkV1hgNnAHFP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/claw.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/claw.png new file mode 100644 index 0000000000000000000000000000000000000000..d49223cf498921361c20bda50ebeb16fcaef40d0 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DEQ9P z#WAE}&f6&q`3^Yn_v%=y_ZB@iBb9S(7@+_sQ4&5)I4O zX1!x&*z2Qv;_05!Z%a%&7!w$jz2?c4Uz_8wM2PXi55;*h*$pOq1~FgGXvAC1o&3{c z&WwKvTI(EH3cA*-aoi33{G?&xJ=Tx174PTt$o*zr*6=bRsJ%4om5m|8`#H;xND26V zt~C~Y@Ij?7=l*<_j!h@`GH6In`en0wDx*i~%xdN@A5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/egg.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/egg.png new file mode 100644 index 0000000000000000000000000000000000000000..00f63624c75f0e4ef2c499d8a3f8d74d0f328d76 GIT binary patch literal 853 zcmV-b1FHOqP)AR01&xpwnXF*=jdS=17f|rOAGhzI$<*r8i3Q@wt8X= zaXAA#9vdH{u5}n1A~XQRmx}ZB{^J)<%%1_Czde(p`hGK%-%tP?y|K0_#%9}6W&rcB zL}K7JOcp``;NElDG_94kDScBXvt@ar967`>&+Dj&Fc#?%!a27LApj+DUOzCq{|10x z{+>B}rwk#tvSrdq0TFZ!fdCL6Wpcz9wF`X-<@Eb4DokVmh^xv^9!G%)1gJGkQ33MH z=W_F)q_Mv|-T#Qo0Wbtd$znrQaM~9SvVE2z{5J$yAOOC8F#ZU!pqzF#PCrB9TTrQW zXiA%QdUi)y3FiXf;G4JaXz9VMSJx;nSp+86yxfQQ!r~&uV-sW;D@urw01)THUyYUX zIE9ePip7W2Y#z|$^koB%HDO_TclzF3D})in$OU=f=jQms~L zO4lf>-x-Lxj%0%n!^vapV~A`vM?bd)kGE3URzfH@ zEo!yg|Bk&q%IEXq+`w!~r84JVf!Jo-TedYK&x<*%YH_SRxSG} zEnBtdH?)YBg%E)uq>@EpbWsup8*TCy(|n(tX^hGXGy8|fN!uVT0btc3F?zG~-gInsC7|=l(G(3)*!K0h%p}6)fPQp(DU^aOfM`4m7ikrigEEVZrO;fOyK(SDuc6w^ofVc+M?*@;@ zOLL4dNZ;1y5K>e^09d`>KMTcT{ehv;#Ka^4mCLW-85l6lQBS!{=K#=rVPVNM;1xeS z+`*uCh|IB%Ymy|T^QPC(6aWuMB+hlWhrzHclNk!lpVhqCuU4xx_WQbxE9f_7 z^B^Lj1PG+4f#m9;7GbbbZWv1`FgoIcTrLNZs0NrA?&}BunSaFC0E3D|?+FMWp=B>c z&*9qw_PrfefY8f_YhRf#>RiF)_o!LvvI zG;ew{@!-LuiJEAWCe~F*X|WOrg>+e9+1k=%04o!&c$Q&apQYzQqcQ%Zh8k+SNKatk}er3dj0l; z@?0puv!{#tJS-!B1;Bm4w}zP29?gI} z$2uU`9QW710WbvLlEvgQurC_2eVU<7vpg~OM1b{tPK;)8XGBm=I~%8;A$9EnRqGv^ z*A~2<+nK%zaqz{fceH+MndE;qSp+7(dD(~f^|duh#LtsyZYd!`0U*wYznEK5oI*%t z`TT8awGL=*?qcZKF#rf-gn0k>gq&`dR#&f)rfFi`RKP%pt$%VX&K(^cQll|!#xnyz zoT(f8`;YjJxUqIAjPgI2TJ4b9mE(UQC#TL z=l3FBxxC{6YP)pWv_1fCkHxR%rZ0Z)?n4jt{ak#fWV1Ve>p zV7pWpX%N2@fyRNL^v$oSEEa^2&&z*Iad{&tEchKz@;CWes>D?B_^FQooJCyqZPI+w Zp5HH%=g|y4a`^xN002ovPDHLkV1gl3Y;gbp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/egg_opening.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/egg_opening.png new file mode 100644 index 0000000000000000000000000000000000000000..cb764baa2d66a8ac1a9475f97b66bdf2ff3d7b10 GIT binary patch literal 3086 zcma);c{J4h9>;&vOfwW?tA`XrWNR^{koXNomZ!xM5gtpF?0bY+5TO{AE!o|Nv1BPF zV(g*OC`6XA4aSn}GG>_To^#KAo^$Rw_uM}|-`Dw^_xpT4|GdxVd}B?n8}J_xKL7v# zzmcJy*&d1iDjxXW+X6aL_rU98c*`FEkgfkJNb*VKQ2;pDXr!lO9-Oh5Y43m3^2kS$ zI5&Cv{LS6L1gx-6`k_?a!fORlifVIczB}*7_n|FWuo2&b&{W&AVG*{bpZ0g5tF*&& zzqlIyxNjZvZ7AO9(s!dnmr^8bQWn(bUU%PWSpC}h`-hW@WjDbkmFKq>-Rc|sH#I}6 z%zoj9C*>j(+&DPz+(qp*(n_`QpOYd{1A0MDp+wE!E-2DDO$LbXM3A-me>E~Rd#=IM>e z$dOWyjzvy=2RwI+gdvU&OkceXF9(( zU<11<`#sVJw|U*!@^&vPUovbMHsE4i!lm$Q_x{|OjJ8GC*6(xG+R*#GR8$R%;l0Kr zZBH$|VJ*DsC5*uV&frtW71}p$l4C8@mHicqoBUaSSg61{j_`d(`K>+|cZ4{S`m$Df z;NY*vWyse1$xC&Ec%qbtgSgyXE8U*`clE@IYzXJ2tIGPVHaCQErd`l&oNYaQ>NUv+aJ)2EkZ zUmDpkq_I=(3UDUe8@Q=B;e_M{%gKeP1L1v38T0Oq*&6=(Rn>tpwm+@MpEq)5Sr+_& z`pyc$f51)kkd#{dlQ5&w(o>IVG%q3ZF47}z8U*+#yu64Ixa^DjBST|j|I_P*)9j0> z9|64~{Fe4Ey}!S}$~M4DKOzH|X{VN>f$^#IwhuvO3HW!EU0uz;pWZ!v>&3yf1 z7kiXvyfoC5tGzylX2E9KyMrF2#?D)d%Gz3`l$4a# z@$nqaC4&=R2ZBucgx45M%zXh9rR0Y*CXbO3ci5GxtQy&0^btYaV5wGH(p131qN2KT z9N%#3YpfGv=@a8KZM5PGd7<~G+UYJ*w!JDa@<>hI50x~*?8bd=W+Eg6udvJdbY&)9 zXKt*z2Vz3v6%p+^GGtRP2^YNo)?t;#jk(Ua?t)eGf8g#y$Q~yN1!Q!+P>2g1M7%&@ z8m`ez-y4o4=obz5m7nlJS2Mm^W?CPcX>ajf8ya+fIZ!)>OB*`|4#36Fs1he`L&g4$ zvf4N--L2Qi^xHh!(SROZPu7O#36kH z-OOn}M#S}fLr^f{cr(&XYR%EaG@G@$0^^!5e>1>=-#(hEw{&z|WM}vKCZnQ!rf*2K zP~Ii+xoC5ltBltYnJ?;W5t!1ZM`!AHT^?k3H>~Cbdbgd`;a0xM%P+jA_1!9QL5!1- zCC!X=7#4~;%=E1^p|&W?$)W%Oy&mk-&yyvZVmhZkC&Y0(f9ST=wzP~Z|3HE?M9c*O zU)dohw2Ft@d6ks$zOUStzTrhcmI+Hq(!+&hRm%AtGN z7aG$i6vnqT%|6V8{xAjUJRz}bkY}{&LP8g?&flnv8D^#t*C5sz<#;YBqMHRouU$kn z`hZNRYzC=LCk#qXZJ?O4e*rYaJqUQUanG>Y!0DPhfLEI4hzD;^Xqabh%P7|_DX5O7f6Gx0I~LE=PM8UJ}(51^$Dj{X}Cr$d^H zEq}E%nYmaDOIAfOkzH;j+TbZT={M-?C4Vd#tz7@bJ*usLI7j{=nQdb81-?!= z!>#1G;T5@ElFc z3_i*kSp_kk(KVC_zrNXRL-Pv~RA`hwrMgm?k)D;zT~J3S#_7u6k^rjqFJeIec0XTE zmLeXC#lhK&7+S{;C3N@l%7@C6(=RGyv}ApxgICfXRG~n*T`3vFJqGT{Se)qsxuOg`Sup){$zjpL&u3c&j zBS+#!@0wqtg(@%nT2LTshD}45xKH(M2dLYfHjOqxEmec{DIGQF2=T-UY7kt~jAfn{ z`+_V4USp|;YoH=`81{8HXok(TqlCD)rm+EP>Xqpl0#7>?oU40R9#R7%ILx}%lz%ED zO}edS3TX55egNs^5&g_Z(&wZKOgl1_HCgdp5AR`FPKFF)-gcNXs0Mz2%h$mIcxM)} z>0V)7pdH5=KK0*$_`g!~zf4zJ_(YF3`cy*xf)uf?IQzL-o}^xG(j)c*gc2G$ZbFpUnQgKBVg4 zEI;NsBf}`+kX;%Trd)vwIgsggF%xlE^>#qrK+tSJ4XE{m811o1Y~)gKXEC?3@E?{& zg*CbE^X5W>xr1;#veQ(_8{FVmljirf5@l5-(t)!mt7fkw{!rQ63;tF~C%tt~N zBFSN?(K;cxT5#5DV-9bo#98(g{>G3w0t@TXbGu{?CL22arcE&xESkyh@yKlWQ!KHo zaMecV0zc8UVq_u1nyX0bGcl*sJN z8dVJCsDYzvVyOWIVYp@Kz55%8myDlan$hK70PQN^Kv<8cBr3?47?S zsCVipsR<6bjRl-;B$;IhB>Ld{Cc}uZHHP5cElfhC?&*%4_j@|;q#AZlm%^*G{-;6X sNA}DQmtUTsAq)i@j{Mc2F~}WMxbcLv$W@Br-UlBrx_n))OxGdepSMR3mjD0& literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/facehugger.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/facehugger.png new file mode 100644 index 0000000000000000000000000000000000000000..361ee97a4f26eeaac5540ba593b50e7b06b80cdc GIT binary patch literal 1847 zcmZWqdo-Kb7XQA4phXBn&>=OIw1bIPJGhOR%PEQ(S@jjWfnvvDo5OZir? zTCd~aQ>46z!fjC)vS``M5#G{dkw+R+wmmpG$-?JRy&AD}iK!!Shq?0y-&tx(QMmH_ z8js;@jmVCbe!3sY3R-|5UdOLz%C$L)ofopzYmVW#??6)2$^`QnQ2qMYrc(%=*ap;C z_SGt_?E%9`rF`rA-8>P#(#`c8*`YF3je&(4Qc_;9L@v~CvA)};@gRLCpl1e}bG)_E z=wWc4^MSeO1obYK^`x4Y2j*Q`b?1M0c*J?EcYlT;5wH|JTU(FFlp5;#mq5p7`*967 z?kXeUs)Rg6=G>z|eFgXHr4GHYEv`pR53x=)Y6Jb9vXc}$f1^ux`l)hiF}Ax2AOPN< zseDjJ`K@*QGu9{fgdC|vENFZr=A)N+Gm5oyjU`~`-tldCKkFLg6@%1#L7vx!C-Y=o z-wec-N62XAm1oz9Hp!k8c4T5&T!oi$(Q~47r%pFKc zVw2JxX;+E&2Zlxh7@Lx0dp+#;oXUr)e}XLi&@R7L?X4uH}^ljBBkt^YhArGK~8$`{`h-Zfn$j%9)`ykl8z!eJogU z_gA?-_FO}j8^Eg415m4O+jj%lv*YK;fO#t+@{NtVM7lX84Y9(xc}Amb-k5CZ zeH%OZ;9;GrVHvbO+x`h9W+9q!PVp&6+xkiyI&kC{qm>g!J>{1V->d;UhiMO04QGI$ zg!!iHmfy|4eNhTCR733SBB6O0o^RuLd5>l#VS4|ymt6vqTI;t32_P%FBjUeYu?zKx zIQ}(rF9zqS?H!Y?*`d2K+=+@+l%eum7pJBn_NEf?I?#&y~R;&x$FA_pe+F5*|6$29@*_o<1T9B?-? zuz;r-pg<4nKT^3Ega#G-vSAQm=78a`ldJ<%^Gd&<9HeRa;_)SnlhZR$3>XMuie*A4peTDY-sDF4h$hBW+r<0xTO`EYpE>Tl zN6Op?zypiU$5@(-{n#3AM>u=B8AU?O5|mE*GWcz6czBVt3QI|r#2V-8BPeA$-p!Al zOora}H`b{ZtV62HR&HwRgs}Vxc8YJT+z!$;j!FY7nCq?>nQ#MXr|F}L?N9j0pz6HQ zGu!Suar~Mf@@O$SZZoOB_=oh2BB17XichGj@2eMh!nhnJ`2aEJIZDL9VCC-eTq2l~ zJMi*YxM*lIm1Nl5oTw=p+KP$}{y*Zvl*p}x8Bo3RYS%Xi?tpnt_okZ)L4HVAAzR&K zX0NVZqroMijS628pCZzTf{kHeV(*+hS1-72E=rxmSmF;2QxYUeBa1Vg(#~_P#qh$8 z658$(A+0p&2=ix?${3Duhg64+KQu_m!VP4UwtT?UF#6<6Tc#lrMr4>#rF->z%|(JT zCKvq8%wcYbn<1LKJfS<978mxhYJ=a~L=<$TZdBX^ZNye>8ka6~RT%a_8u@Z`klxGn zgdr}mXBsk>TCuUc-eL9}%N$PBd}2H@ZjpIeA}XG}DBZpccc1a!nN1OCZaO`5wf_{= zJfI3bNNvrelNs^Ir~E$$c;WUP9?;^}>K}WnE!ANC7VWPG5<3Yk3`Lzt3>DmiBSK59 z+FY}G!fCpQ+Xc~ir|dA&0)cLEhthY6B170oFC>4s@V8crl`OHQ9FYZelFdmp(aa{A j3$P|hq9O77Ti~n46gj5<26Exw4*&vA1(F*+qh|jP^nQDm literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/facehugger_dead.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/facehugger_dead.png new file mode 100644 index 0000000000000000000000000000000000000000..07e4240f1ec7b907d6b7527d030108aef155615c GIT binary patch literal 711 zcmV;&0yzDNP)+@+ZlHjRt4Gj z^38nTeDCvn|Lm*HIA&`AGyoa^4S`y=h#| z-FHlox&u&LgtuS&dn3~&*}-uVew%G z8v@X2rI@69qYSjC0IqH=J)?7pn)YP!O(4$nO9tYEBLTFyL@ZDQk#jm{grC<}ajE4D zX1;D>c(5Dk!BlY0`=d|c5Zv_c@h7cKfGFVcSnfN5HsE1T@*tv+1qVL`KAclTf1A1cg{?i1c8P_@Ao z3!qcz|MqR{e6qc0*?`Oc)=|h6Lj%YCiH6Fkn>Z1`UdnRBt*4&Yrx2N{+ zb8Zkq-$xY-0hr>9z^p6H1qsT-!KBADYP19Y7U&TicP=1$YSs1tMuS>i!Q&EzpMoP^%p~z%I-sT+r2qlEwf4002ovPDHLkV1iY;NpS!G literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/facehugger_impregnated.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/facehugger_impregnated.png new file mode 100644 index 0000000000000000000000000000000000000000..b5a321498bc73dd3850b9468d0567829db8b1b47 GIT binary patch literal 532 zcmV+v0_**WP)hdh9S zh9Y!vEaKuU4!Q|W{sA581Bli^s2xNc93w9Ao{&>7*PGnbBy`DvG&whIzTY|L%k2n; z90foDPyiGFnE+T*@OA6mca(AmAn~iyMsWS`*y*p|oWJ1gzU`YJQUS0y2|GK-f9~hf z0TSg0(|L8>_1BiFXzkU5`-=5P;=g3x2}WVCo!WI zKo-_j?uoM{J{%$HmMf^(vzWHV#o8!rQMn5KuMX%S=L$I-Fd6Pt@?MML@}KTBzYSp9tll>5VRa6#+of*4c1xY~3_!_=^SL zSy$JPW7+#_@D~XH@^^2Zr!;z6e0#KY3;wDmfZkUQGnjp$Hjwrh5j6M*2_P367(g&5S{&@A&(-hhZQp{ww*VkVhFpk7`Asb#{1yjf3M>9j0i^1Z{Nl@5y0^M> zuX&aiB7j!yTl3#20ISYvRvn7(Jy|qqCYR5W0zCK!MZo*Fr)kxN&ZjBJ<+}S?fjLw) zqQIJes{m~opocvjG5)}IbwwZrQ z^9S7Y$9!mva)pNY1Grt~=k%VgP2WQIb0bp00({ruJ z6Wf|-7==HetsqRuix4ygZVo&@&@@SK+SMPhtuQiEOgsq_hf4x>qG6Hf|@_gs7b>Rv{vSE`+d%BBTn>ZZqF~^Nru$+?jX(W(~}Iu)^tv@IN+Jydg`-c60{^IqZ@28+k-sX3g?Ej5#e@WKgNkCgz;Xeoe zWWl-n;+i!k0Kfd{U@uk^wZyqSU3{pRI zVc-hng!RpP(fWgTf)Iv*Loq_`ugdcZM1*AJ?1B6A+r(Fanl%cJot>J^Iuc^^N96#r zj*vV1)6|&DGkd?XexeD(`*(Jl_nELtB|;2RZNVRipH%ld_5Zt%=3d*|5R?OW4QAR*_<# zfglVbCNV*d>s{P~SS5i=aSpNxfQPvRV(h;H4z+jo?HMq5cV$?HX0SIGp^qFuA|Pw}bU)!a zNFqS9vxYs4Ww>+TK#G?%<3k4sX2^qN%?bKWte&WyAg}3N0Evimo?GD@gM9BVh}i#J za{{1I5~Dl#Oi-6L^{y%_z5R9NyU%n_Kr(zwW*348fFNbJ&8UNh+Mr~(pLHR43j7}i z+=W#8#=3wRI7R}@z%deF29A*cGjNOqm$6aei(`<0`yz}@Eud97!d+rseGADA&BY_(UTw?Jh+FJ`p!W` zfF9KFKIUX7xHgDut;n)2=PKzV7j(^iZPcJ$YEyE5fbYdg-I4;ZIYQf0RB?#%5Og(3 zK=;SDcB`x1rb)vsmMlw>Q8_?cV$c}zZ2s1KUEQy4oNFq#v2!p6I^W@W3?4lSCntw( zlZGwSN;HHZI0v}ZVZs_Pn_I;^kR(c0h7}0&H?!yF*UAA3J)sU=6;AIQ@lAbfzq9`NVwac)n;3aH9a%HWJR9Xui)nUg~`44{?NZY@!nq$REBQP?+gC`6+r8Nbq&vMx8%`1d+82a- zS)zK+0UWIU>chP@XvQF^O^!c)+-{JAI1}_WN7Su&{dS1BMx@r`OQ59wt{g#0000F_XdaaJE-(=c059nje%D8Zo8Jf$X($@6RIm-@@6XYPCQ zoXd009){a@s`h++;3MR4Re#g%ciV#*=e&M$I?aS5O>jB)j`fdQTOvgp&Rw*(`~Ph{ q8%M_tyYF_XdaaJE-(=c059nje%D8Zo8Jf$X($@6RIm-@@6XYPCQ zoXd009){a@s`h++;3MR4Re#g%ciV#*=e&M$I?aS5O>jB)j`fdQTOvgp&Rw*(`~Ph{ q8%M_tyY3VrOF^uXARrvPHu*z9zZ0mP6MrADQ14 zUUsZ#=@-47>9VcOLkorE3=`?4|!7Fd?)!QinT?7X|bRIC| W{4$c(y14c`NYK;O&t;ucLK6V2xK)Y( literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/infected3.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/infected3.png new file mode 100644 index 0000000000000000000000000000000000000000..aa27ce4696c946134c6d74878b5dc92ac15c6fe7 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C^*m4 z#WAE}&f6=yc^ec2*b)rZC9Y()XbPKl%(O>3VrOF^uXARrvPHu*z9zZ0mP6MrADQ14 zUUsZ#=@-47>9VcOLkorE3=`?4|!7Fd?)!QinT?7X|bRIC| W{4$c(y14c`NYK;O&t;ucLK6V2xK)Y( literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/infected4.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/infected4.png new file mode 100644 index 0000000000000000000000000000000000000000..453fc3d4f9aaf003677703d8250ef8a8728650cd GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv(mfq{|L z)5S5QV$Rzs3;7Ni2(SV`zu)bTTm2!WWWVtHn^i4&GaMSlAIKa?QT4mF;`-al-4Y7j zZ5A^s^nIojGx+VhIIHRQ*?EzTX{&SpI=3zXLD0g8Y?jo{h~+Qdq=_A|WH`Nd z<}wlK`b8pYTcy^yF7%sr_ONt$pHwCV24qyv bUcq3wDpH0``d>9Llo&i+{an^LB{Ts5&WC|? literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/infected5.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/infected5.png new file mode 100644 index 0000000000000000000000000000000000000000..453fc3d4f9aaf003677703d8250ef8a8728650cd GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv(mfq{|L z)5S5QV$Rzs3;7Ni2(SV`zu)bTTm2!WWWVtHn^i4&GaMSlAIKa?QT4mF;`-al-4Y7j zZ5A^s^nIojGx+VhIIHRQ*?EzTX{&SpI=3zXLD0g8Y?jo{h~+Qdq=_A|WH`Nd z<}wlK`b8pYTcy^yF7%sr_ONt$pHwCV24qyv bUcq3wDpH0``d>9Llo&i+{an^LB{Ts5&WC|? literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/infected_old.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/infected_old.png new file mode 100644 index 0000000000000000000000000000000000000000..3a6e790f39280918c647746a6b08129615f35212 GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCijS1AIbUn;e^WmG9m(E9&my#v(t9x!Jzm<&Njq1nlf7+}#3H%`o%Blifgy zyCldj_&*#lc=7C?qEJ{!9!*Z1>zVp_>^ax@DUr_f+b-9BBQ$kkNOSoK#Rk z*$c-8?KNWaj1LF=e`v-O!j(Pk&!H#cYVrcdb};DHszxvT+#~?BjKR~@&t;ucLK6V{ Cwqj-g literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva0.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva0.png new file mode 100644 index 0000000000000000000000000000000000000000..ff5587f5b5a19e3f852c4baa846f2a177d0a74b3 GIT binary patch literal 3463 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva0_cuff.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva0_cuff.png new file mode 100644 index 0000000000000000000000000000000000000000..5b3be2ce016f8c35f7a2ade26ff97ef549ee7c27 GIT binary patch literal 1292 zcmV+n1@roeP)8fAOg2R*n?AT2ebT%LZb{RqC|>fU zA~twi@?h|xeW|vFl0I09inJ78WPOl$0hOQuVZDGfCSlDk1SLTfon$Q-i3F2ub2EwU zPS1aKXPv~VJ3E&=oby4LnX{Am{_~yxoHM)smkYrm1%Tj?0zhy`0U$V}01zBf00<5# z00f6&0oE4ftNQD^@hKM^gw_0p1R(OdHA_*NlY?`HPGISD~+W`oF-|CcYz_<3IKQLEn~GwFW_NZr1#UcLC~fd3iZn zTU#;2QZf;bBk-W}?M>k*z6pGf&zG!bqtFH`LHw29{*dPO`Fx1QVhB8oWzBE+J>clV zF^ugjWcOah4Y{Y-+R`B@m81HD+ zwryGS8y28o?>da1Z{c$-nPQ!4D{Jp6D&m>Z)zyV57TCmv7Bn2)3jBP-QW31?HzWX& zK3DGJHJfWqm457OkEq_!e*u;aBkc3b5ALAxD?i-qvqAqN41}H}7o|8XfgSvY1R%1! zn+mX{41?^tQT6k7cS>Ix9SU&t##0Q3Uh*A6v2gV5;5WPr)IN-<-VO!YTcLh09{%GJ zKN2xdQH$rl9sGvZ0Gf9Sov_zmeY>{*(kSscXHnYQ&7bwx;dd666rloVU=_doJph73 z3IM?&1%Tj?0zhy`0U$V}01zBf00<5#00f5=!0ZE@_6y9ZKj8m@(SDqynmtvG?JSkg z_9r;%5BN|p1g%U>#Y?K+SuKL*4E%DKO-Z! zd%ec;HGopwTXRSyZ$itd!|6jPD1D{n_^E00x9IP4D~5~{JIdIg%`X9|xY zz@`B$gtX~-=_b~Bs@3-;R7@)O`6$_$0lS^_2av+S(O$KVoxfoV-~6r15!zSJ)g_Fl zmLnpg4T@^_6p&pRFem;1N}m^x{^Cm4G35vFWQJRm*XUDZc6b72$1*4W0DVnfUx%L^ zoL!!P_r;=bcf=o{f3QNiVHp2yNfRw?2T$2$VTV}MC5%RpNi_8kUhGsI z0*i>~U^pswm{bFURz#?$po7(+@79!vMzBnzPTrOhI3a`B#5S6cZ{P3T-udm@_xTS@ zi2dN>ecnIc_xnB1^FGg3g>6PfKt(`BKt(`B!2d1au& zi>J`heP1MIvz8*ZM8Mv~Ke*fG!*cou<{!VrLtV&&(T`$o_YRnaY+AszFvODp#BQqsQfTG%k!O*|Y#fPLMqO3L?-22fZhf%L2;d zxq&e;c=HUd42&VvydRjDE{a&U0Hc>iC}KWpZKlnuFRoSDkt(~#e;jUy12yMc@Kg7ajU^)l>h-nHkrBC< z(&vp%C;AF?AB*M*7=EJ&LXj(!2_Si--6uWd$7>76XCA#k_|w;t6sVe4sY#f6zSVs( zqeKA7*+NO)=*+)MdoeYSp^52yDW&yN;)WU((krH_6uY^l0Ofh^*8&>AYAzgD`n^KF zPMFDzy~0)iL2}ow`eFn)ckisWec7%%n)i4I?9LVi(8JyjQ!)id&UT}!t`5&K9kRyF z-m8zO~Q546&sS>S0o*6Pox|Ql5;9w*QTIit84nlu8 zMMQ)mE`mC!!NEn`bW$9oI7jGG1t~U5w}KkPAqHYgjlUwsU)OtXay7B^<;6TJlye}w zoBQB>Kj(YS9quW`69)q@00S@p126ysFu?x-&|Fm}^g32qqMniHspFpjka)1wuht16 zQ1junTDJ!#gcXRQ0D^C7MZ3p~j=3McvMZFJnj*HcUl&K3v0g%Og*bxX!sH}Cwq$5jBJ`9hx0VB(%5CsEJ&2^(u zt6!l?Yu|K7J&1M6r4#3;Vf7Go$}{~ePIef8A`haW!%uwkMinjTpk_aZBG~M$UZNC zh9J9V!o9hBHie~QXs6(V03I_KfB_hQ0T_S*7=QtIKEU&V2LWVX(ffYvz}q=~`%Yca zC5Y#Ji<%F_CO?~&q96b*9BlL{0iAXBn)-lTpldqK2l7Qh^MTpLAvG5u!R+|}iBr)2 rnG}vc)_j0Oc|O4N0iF-s?%5PKk7a-1+6y0l00000NkvXXu0mjfyU8NP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva0_stun.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva0_stun.png new file mode 100644 index 0000000000000000000000000000000000000000..911eafe3fd88171d92d58a0fba19cf9c88970b02 GIT binary patch literal 1665 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva1_cuff.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva1_cuff.png new file mode 100644 index 0000000000000000000000000000000000000000..7e12c7c912d15e86787bbf38bd9ce3c54ab1d792 GIT binary patch literal 832 zcmV-G1Hb%OS750}d}D)6KhM_P|kJ*5WZ;^)c$TJ*ME9wWMQ_aWAnY7=wk z7gv2*BE-k8-@K2FmAR?;xlaMwaJ5>6<2V=&hZv1UL^d|>+4EN{uwMTIM1uHf?TFj9 zZFruSi=Vp)Mo)Wtvl|Xr79(udFR{z5kH67wx3SlHiuvQN@GKynW_^xr`smPO8*MBs zOwFI`6bKjZ`cClKb+59_a9tO_PCRyB_7N$9pId-_?=xmA_wfGR3j3bX*xw6H2 zh57^1f>G%gDAXU2B^ZLNX2_ZJ2T;4b==OMCe?l$+X!9x!5;FV=To#%5HTC4F0TEBj z2TQx`eQ~WMyarH;zgTrx4CG6Qpu`_Qn@?*)y(Sf>$$`)2!Em zU^?K@^3rV3k6!(!y9o@&bar5G06I8ec$AF=8Wu zsMwl7uv3YG51@rpi3ADQ2Sn?|6efjM7Q%wnnls7W%+AgvCJ+VL)6CCK_I&rw%-xLB zA1eZg03v`0AOiT`0LggFL+do$v0nvXUDNA%@fTCUkFRb*Sv*|RY;0GmTFFJ6nDF_Q>hRW|SJy+3CJP@`3i zxv<#8_ugr=4Um2n0%CJk2mt1$XkpF7CJLAT0552McxXoa=nZPRp=HNPVz|g=l==60XO~^u#Lx; Q!2kdN07*qoM6N<$g8WJQg#Z8m literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva1_sleep.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva1_sleep.png new file mode 100644 index 0000000000000000000000000000000000000000..11aeb22ef2e3f4200c14ae3efe4705ce6825fc89 GIT binary patch literal 389 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDb50q$YKTtz9S&aI8~cZnt_4Q z+|$J|q+-t78Mb^)4g#&$k9hGVu=XBgu3%c+Y8V!G=te|P1rxWG_9MkNJqr~+vcw&@ zWPL+vapa--1_zirE7!|Rs=a@X|D<1hi4M>TC}{Z4VDPnZevj?E^>Nw^DRq`_gFjw< z_MliHi?QPP*7dW6jaJvV={Br=%XM5xNt;>4Pb`b^!b3)vfO_+w@{RrQ+bkVU8B~?|AvZ{-3Ps~`7!nNpGiVpvI;qUSR9253f_R5sn zs&DmT@GyU`wd`}M&f7Wf!q^Oq+T=TyP2pB}J}1xS_T0liZd|yf?f7H!#;p-P8baAT zp;BQ?8KBUDfgAh@_5qv#O8~%%%;&AFa^Br}ol@tFuL?*vsw>VVC@VoKccjo-o Wv=6E+qRW&(`aE6zT-G@yGywpNP?Ht_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva1_stun.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva1_stun.png new file mode 100644 index 0000000000000000000000000000000000000000..d19536271a4b6e1a63c4ca9720e45bd8b7f7d4c6 GIT binary patch literal 1016 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9F5M?jcysy3fA0|WCa zPZ!6KiaBrR7#3Z25NW$^9P)%A#Pe_q^Ai>x5xF+5cMffBMy`GiiCULZb};hFx^lh9 zkj%0%DLl%!K(uO_dEk@SOx3ryxReQ$1+|`x&QRxMdr^{ zrJ?fOkZeQ=7zWb#8{p$U%gAC2Af2laU z`BC=g>&Combsv)-RfjjoJh*uA;9Tb4YWKI+o)LOGnL+B~TgwxMuWrX^*XR7XwtK-Z z#+YgQ_tXczv76$P<0Rx@yw8^XcU1PDz5CcrrY}r+@^of(Du>~w3;U*VddTkYbo&z+ zf8@!7r=C-07H-|{@8@Obk-GodT`#_m&8#;Pl43R;xYxCliF=Z+;Yrhf3q%w6-$hk@ zJ+R5ebd&z_AA4Eu=vi)#jk7x~bYtIr7nS2b_J%juuCSfB?R&& z98a%ju=uxRe%m=l0_g?CJHnv{WM2JD7WQpeJFz5`D?`lv>f_(vd@UIlajfv)w^nQ0 z)gw)1tx}>gSG_5g{B`u55D@8#x!rw&nfw4C0LAmMV?b2cFi`O5leUz=*Aa+puKq&M6-S5P=iLCc~^HfeMUYXJ4 zrO1QRc8=?Io;}$gJJrVI-!J=}U*F~gZ#|o}PftKHE4s?0sZ}p e55jWHKgL(?$vhjDpG*Q~Wd=`IKbLh*2~7Y`x4jJj literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva2.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva2.png new file mode 100644 index 0000000000000000000000000000000000000000..0a420c6502419bc57c49f6b27109de8eec12ec4d GIT binary patch literal 2151 zcmb7`eLT}^AIE=d$24~{;1hx*L8jV`F>yD*LBs)!xg51 z&;S4cc94MgQIY#K)nUmTrxK(~k#y*?2oTRxD5MK&kCK&& zr#;H#H5#2HfeD|jsCj-fQOZ^>tjtfIUXi?cF!BERbFG&uCwpZ*yHGs~asyfr#ZfBe z8cnmD>@crz*T&v}vn{wfbCa{PL7;Xt#a1DmcsAZGGUR5?^Bo>Ja$8~B)H)^z_!u|O zSA7%+xBw!lIf2Cd`W$*u(HEJNz?Hcy26|^gTbocgkDZ4o0^lNTWk$TE*C(C`4p$(E z(`4j$v?oW@sY&0rWs2^o+u`1DH>2-asp3SxAQzEx)gSI_FgI;I{O+1(9{R!V;s^`R5! zonibs?$NHD8~T>Ew1=zVci`Qd)>aq8=%*wwt-Z8-&~>Oc??jU3;LXQ&smm*V^XIDQ zb>$4yINK02XVmV%hOsslZPMp)tKBwKhxa~QsY59X5N;djolyLgw#$GQ@=1LUwh6?SoyYllkfLQ7 zy*7(gW5o1f(}d!U{O-&MY@X+e`~!rTZbx4Afgz}QIpSMnB*zbL=)gJ8XgdQVu7<(L zs}*l9x#q!}{m0VTFVIRVT%I<3fM6wy?YElYBZTsgP8E?z?)>F`Ilf;#W%W4b**SH$kH5O}gent$Sfdg7Ua z)0eyQCe1vy&7A(cq%+By)^CrZ?U=my?xUMOp`>NY^ZjM55z9j0_O+260jTl8KGtpn zL(CVQ_Lw-mN=7(vGE!Ry_BtKJoIhvN5kha-^{!*TNdxFVv`Fo$b>_VgVfnvHSs%=t z?PpgA3sNC~Q|VxHoB6<&Wf%xgjzIYsU3;;A;;@_zVeuvuhNn3s&2yte+?h5HH+Jl{rXgV%s!C#l2wUQeprXDGRzrL+X zMTr?*>a&53o2gcx%2x2GVavbu_dm@)6xTFpp8P`pVda@4kkM1jv+()|_Ck0R<_1)V zEjF4bx9o-Tbn|<}PPLT~Jd2x|>{y#{f7F)$ZgDFQ)U|5feX;?1*+RB zv2~r9jjxt9>G%)eO2uZ@n?Pbss57q;L|pU>?i**pLu(`_fmmnKRr<&wnDCBjd^jyk z>|V?SgtAn7=5UU`JbO&LVd&f=c6bq()lIHIM?9%YZq}n3tQbo~iTOZ}df+L`o8HWp z`8Kt)rR@ppmjsy+y@f-^d!`O|O>W~Y7~GVG!u0duL)A2Q*wLq%6Cp1{`^D95RW3@2 zN^MlBL2{>oKT2!myyAz9*2!nmd$l#D({USG^&(d9&_$s2#P&kOreNC!w5>D|b1_+% z`ke-h!2N&V3M_!)1$r^+6l{KuHSK$+IitnvE$QN9OthY{n`>Nft{hhmV#-oCRvEb& zYum`C_|#bR2=MhnmW4^u7pot|v~o~Vhx%eA856r)Dy3KhNMq}?Q^;Su_R0ngE|FI= z1_8DKwd30hQuid~bbqN-8v*8i0aFB){agXiql<7Z zZ|kSaUPNIVK@XVTLpTRBjQH!;&o*a=vBz9T)r?Fzyp5|M@st(OAp?p literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva2_cuff.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva2_cuff.png new file mode 100644 index 0000000000000000000000000000000000000000..d00e8d839b214fdc13ab445f2db28e457c3844f4 GIT binary patch literal 824 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|V15 zPZ!6KiaBqiZ2hGj1?F}r1npo@-gO~j(b1<%JqjvWT}3+8?3GkKezHznaHij*xkQwe zcam@N<(q3&%`YsRp{=oC!<>sIzDFkr=e zsf^dIUwihc_ScUeZ8C>U_D^C^_`hM}MCsS}@1BkAOlaP}i6Qj~!?Bo-gzos=Y&G|9 zE<7I|{v~Rm3WHemk^YY};*7Pp8$=$@o%es={{Pn7_V4ZeviQ3|n$5N-8AJJ?y-V0K zK5C~jsNKymDRQYU^by>&;OeQp)kZVV*RK9%qqkj({ zG)z)ixPG%_uSLS;NQQYcj__UPJ>JOkW6{C&rCbT0E+!}h70uo6oN}zdLZneqHCKM3 z+K;KMJDx21+^KGt!c>zk@mS%==6gSPO7#C||DJQeUjVR?nAT(@*_fUO0PsgJ#`Ro)c=ia_*_`Z!~27TiU(g^?s(@kL~~2Cp_n1!iQh@ zJ-DSGu-blsj>Po3#;CuHp-qfArp|Fo>>1vE+I9Q!u751Lj2nI!oo~=R+`?PmG|AO% zpS%CQ^G}Kx(yw2CG;7^Dsr8H=AN$3{mDqj=8CiT}Px#24yW(aKTcOUcLP;}e-qp(w zaB)Z9;fSqwQf0i*RQICf#q*Dabv4=EEAHo*tvr1G;>=XXHS?I3{pCE*#Smm+P^Wsb ziJ!r7foSdF?-lBgR!4dtQS$jM{7<`~=1aoD8xPHdAI$pn=;AasM?>A%gEQ?JVj}{X zD;^2IoGpGNsCL6sPK{%a&d4iRZ(jB7N$i1@_6zd-8{S4})iRY}b{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva2_dead.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva2_dead.png new file mode 100644 index 0000000000000000000000000000000000000000..0d51d0afd7a2cceaad415f30c86eb4fc8e7c6e25 GIT binary patch literal 572 zcmV-C0>k}@P)xVRzW|##aJ_7*`eTMiofE=YP zHa3~Vtm`;21V3ennEdMg`{Cwt!_yb?ev)%$y+du>a94)83sE&INFQGHqWb0KVHM zi7VG}Y3ssK%w<^98Nyg9fL>IRv>P0(UMFnhTx?doPngZF#sYAj6@b1!=V_veOVQET#ue#mShf@ zikNAgk^vauYt=3kq7jSgPaYcLR&bS@Wt>%0x4>|c7pkTIC;SFO+ZkqsG%AV!0000< KMNUMnLSTaT3iVC^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva2_sleep.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva2_sleep.png new file mode 100644 index 0000000000000000000000000000000000000000..ff7726f68bbad39b4fde7c2a0fc84e275bda47f7 GIT binary patch literal 379 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDb50q$YKTtz9S&aI8~cZnt_2) z*VDx@q+-t78;)E}4kBz1IGJMAb`nDpy5#Pk9ot!H9_&!Vn?&Y7)0%V{=5Fm)YFSEN#wzU z%BS}VSKN4z-NV#U8Ta3;wBgXpLmCXRdz_{SEouw6y~_Gaz4RjU1uq*fa|gfUT@lC- z`6GOH>Xk!RB$cBV*uRV|SKof*gl0f@@WTlgquyCB5MFTKQr41d`BpcEDRWduG4 Rz<^_5@O1TaS?83{1ORAanGFB{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva2_stun.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/larva2_stun.png new file mode 100644 index 0000000000000000000000000000000000000000..b6e1f487dda2d18c61128a1c54183dca8fcc7e61 GIT binary patch literal 986 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9F5M?jcysy3fA0|Rr9 zr;B4q#hkZuH|E_o5NJzX;9zqtdK23T>x#_hWv4EeybvyV!CcyJEmGIY5V@IU!|{rs z+I25C>39YT_3wB3d;iIaw!SCjQ$(NgRbCg+5MgLzIuO7h!NuUrn4rPH!`iTr!2m^Y z5!1c+*sc2>|2~{}@l1ozXMU~;4_;q=wg0hv-|>C+wp&$ITErYK^u=fWi(_2)ApZTk zS^53_XQ$teF6G?FDq!;Xchc!Q_51eBiF-b$zJT4sK|JzL{O-G{f?HmAF}(euHmx`E z&z%a^j+?*VZo9j8UtC}9zMYo3`)-tfjMX}p=02b0gzWt@_vgJuqS?Vbr6nALsJJ7L#&{?qc;ufP3SdgY0lDx=Bc*@iQ& zM}2<(wYp(9uc|U@JR67QrVD$fv1-WPcUAtkBL2veC&wMPq$!vgY5Y{0`hDxWu&j>x zItN%LU!TPKEbNSU#El9z)3&I`{I?iqpSZS}**h&GCEoXAHRp!S4%@;{Y`QsVr+R$y zpL^B^=3L=X`6kJm)ouU7TjH<7x@kXZWOxY$FG`sEL>-X%CCp};!Ljwq^YUKBFY|ug zZ&@BOU;oOr`4jFeNHo`&azNLAdaJnC7q${rhjWH1<{3xC;uqWfe|-4x%Q->Q@;FS} zr@Zj*P<8nBufdL&E9&ddZsm7JyuPU~QEP~*ckpU<;{EzlF-XW^uYCgF*Pn)7XXgK9 zeDLE9Kg03#dIk%--^>R--jrwPJO7WN;E$(0?_6e-#DL;j%w(gsy20|w=jUp(8G@Bx zt`@nV)3@ny`@PvkOeum1`uk#!PboWM!9&3B9JUae-Q{^Ez~i#v>_*Pi%y zF7Xb?HT@a9sJz{WIi-HZ`-O7y?#-|)@`vqqX!&}*d(DEt%*x>D>gTe~DWM4foL{tq literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/maid.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/maid.png new file mode 100644 index 0000000000000000000000000000000000000000..d3b21a3df1df08cdd2af567168f0b5e34db805c1 GIT binary patch literal 3119 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 JPDHLkV1iI7^+*5! literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/maid_dead.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/maid_dead.png new file mode 100644 index 0000000000000000000000000000000000000000..0934e55d5e5546328939550b35b37aff11345bfc GIT binary patch literal 1263 zcmV)PF-@Er#U$}eT_j#UsKA-RJ=gO%B2|r|Hyw)yW{fpx9tF+_wNT8H6eG>rq zOPlw(u6^>^ZU(QbtD|49Ok@&?gl{6g2mt)?r`A(q;^(}zuTFjAfLB#j^BkW0E>Na( z69r`aPXzeT)e+}ehf~C+2^7woF7q-CR z(*YQFESZ7 zE0k0RkO?Ai$>60Cent$u@br_cZ8Bw2&7;-S_a5=MZDX?{F+xpi!=nL!%LZRX@0C1R7k9-LHURG8{Z|s|*^T!+L$BLkG!#Uc#p_ven z%MDBGWy^y65rHB&%XbXe8`=CIA~GAe$>W(=t@=*$Gu(h!KpecbshQ^%78ZB}*;MK_ z*9Th}e-_Y4$d8!F?41S25|DKIHtp%yPHpd7?ui~G8aUj*ZkV5+Q!|!3&YtZe8#phU zie>?bz$J(QiHV8CW!4S?cdT4P^l%N)%{Ug)q_i~5%>q3GL=X$G z1mxI>({z0{Li>-8p$rFVYwKK#k1qmVSs;N3fv*7`3RP2u3P`wP{;olvp0oB&O(g=V zEf>TZpx71MF!(wdPisA5Pbq?xYu^t5H2Z+i{;?!pMy17p=K zE=nLVG#GPY2nsE!7eE8_dR)5zBDoIV;~i0s3rX~qR-U(-(m1;hz-ZmM1+63kkl!v2 zsE#(kolOTt@!1vK?zG%6Sp3^=Y3Ev4X~_;g#z zpxqm@;`YCys0+jj;yZwAmT)0rMZN@^R8{eNuH}llAUkqPMS;l_A|fKC9O>zG87WG@ zO#m)=4wqaTjal7t(n?o=%E)~r^*_`BUF0x~D76^XjVA*lLP*9!z)L3JMn(>UoH*e?b?AqGW;hj$=h5O+9(*1V-d2LOyx$Qa$u}}gyFh@ZvC1PvA zca>UM0`)OR9RWTta7$J{z4v;1`z4#%kyI)ruU^j|**kP+Slqm;`xA+7U2kh`mxYCw zUYH7H33PRJtAnMbMVXqOQ27C9Y&;DaIXHARHSBG090hk89BDbztoQr-KjiE7R`n_P zxbm(p_wBnkHa0HH%Zpymg)1^MJ1soNFK#Fd%L^3&JQK}`ub7En|m=+eGvj2Z)#F7@|w*!8ZD%-M-Lxs zS^#Gs3K$uy1NKZ#PLx$6lmJ!kJ5s3u%Db)>;SrKP@ZsTsY<<}*fLw40jJdf1DvRXrnTa$ zQTpr`vP`W^9KQ`Qq@%iNGtLBSLjwpZWY1Qhki;ltzZJ`3M0Np2?lELV4a|zO^ISsn zZ+py8$Zubvef^fMj=;vox^ViTKsue)D+d#2f#n)-OA~}_W}pDybDo4@M5e%`{rPK8 zjM8jMHoA_K1gbfNcEIT4y^tg?Btt zkp9%u!Nc^k$w&>@&QI+gfnqp_Kou_fahvN#I{tjX;e+ ajlgeO>l#B$era|900009azD5Uz;I$8bh0SO2YTJ2@LNfclb>=G z|E1g61t!mXUU~P&u63867FA|2e?O+NQNrCSXz5TD;^7PNWt^EDJ@6Y+VWuECed!~mx z4Cfdg3@&0_1w-xq<%tq?ds64| zpZMu$w7@LJ1Ck7LXiLOwW0P&c8RYOc1lzz4iCw z#twI-i22)l#7lPRF#25n^7YRP(S+K2RW@_Ay%|D7TMK3O@BMx|cF)(HYd^-_ycxb` zPWS;G#+=%lU*ck~7e}4hviNf0#yx(==bz&h-}JqEcL`Iler;>whwc?Qopf2;Iv( Y%XRjVJLlzDfys)&)78&qol`;+04=@aMgRZ+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienp.png b/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienp.png new file mode 100644 index 0000000000000000000000000000000000000000..823b45d579c1201828244afa8e23cdc8f3f3aaae GIT binary patch literal 3660 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienp_dead.png b/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienp_dead.png new file mode 100644 index 0000000000000000000000000000000000000000..196d4573301550fd9d1f8c1ecd4b4617ead75f6d GIT binary patch literal 1684 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienp_sleep.png b/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienp_sleep.png new file mode 100644 index 0000000000000000000000000000000000000000..191bd40e2df5ac37dbe4dca71c904b4a1463da33 GIT binary patch literal 1320 zcmV+@1=sqCP)?1rLHJFGaj0>ZRsVFxnO(NC~89Z*jlLeA}1F>}HehZno@xAT!BKw)?*K&71dT zd>|!9MSzqX6#-ImR0K%LQ4t^|M@4{?92Egla%4h4{b6J1e%JroTMC+{XL?%}h|~#y z@dvLCC%*sq;mD8@5b@j@A}I?YA`=A!#tKRJ_4CBEyHA>OeSIZzE-gJ*5dtD|Cn0qL ztkjLiVKf2bZ~FgCUn?Y-*K$Yzaw8)1Ao%Cva_n<`wGpZU02vMmKr>iMKBc5iOsWLv z;0MFLe0pp8%k>rGeYRA?+Qxb~2L{7PZ8#JJ0{erWWQEifpyiDhZ)`puGhVka4sBf; z{E0ChhHq`ZG_k}iql?j47Ai=U0IYwkeJg822ISs5Z_DmRQ))GlvraqotV;@(2Y|7& z&XMV3z5}XkDUEl|BnWB}01^RX*oQhmipbT3GJ5AfywB$HV4zI{nZy7Z36El(Q_A?K zNnzh$aNFwLgP;;H)@r|xQ~};$7J@R10a(K#Cq~YQ1L1mCqySv+alqWKr=R87(--D* zU?f!lBJM;&CNThg5COxsw#7txH~4`F^x;|U-6%44c6Lnb#00OAcup`c5ebdJW;UG9orZ-SiNX6!c#J}Ve4iv>N6`_P(53nL9O=4_O8sCfqO9Go<6%CW*orZ2vpF*(sJkI zmI%4V^98YIGtpU-^@&;l#EG`aYPC#5fpcSCL^X>gZs3V-Cj7<^`7OH?aXa&%_783?xX<%Ms zbM!gt)X0a0Dj*I%1;jz`79>Jnv_z@x-YCGH4!3;KT%RxWJ7Lgc!4rE3Qg{X6<#}sl zF;TpD3>)1wc1H2Q7d(l=Dgc0C@LYIzn6L&&QfzViMf@nF0sy@XpaPr**%wXa5`=dQ zg(`+L;F06wH=(yoELio&f_YG=S|AEkfv(}L5{C1VfM?=acxIfM3PAu>VBso3|Hq0% zOM= z9H-&t{xN}S3P*stSTX%z3mYPe?`^*pwloy`JKNDQ_^siVq^V1$a0C!85lEQO1_ln1 z)bNIRtW}0D$tR5w+k{oef@wZ8Fm>RnNLfO3&SR4M>^6r@1NB}GAg zeE*>OD}%VaxprF}9S-$Bg3k&uvxI4aZcG~FKngDC^;AL(h@ehX!Wj^P4vB^nMTqAde&0M; zXcS2Nu#xSlQ}dBS0z#~Bn9mdm0AYOY^;Y%umxE7gb8}POxPD8wN947uAl&5Jcy1Te z76!9=i4!3(9v$nF?f~)r%DHyH!>z~hGjIXP|DBv`G3@(G&k3~&;D$R2B89;{AWL_U zB;Y!L|F zK|dc6rv2l#=(Bw{tC~3k2sc82FlK$-+v-9D;Oy+To)dldb3&5TyaX0rzN$b-QG7$nCR|Hjxuy6tLCNLS> zN!;BYW5R=buuh1U)84 z8bPMUbcI+D6^579pzM87&wW1KvvMpJu`z0{6Q|BR zfE7p`VqOvKHx=w#L>AO&t(@lMY26H#4_LOEfwC~eHGFL z*cMk6uJYs|OP)~Pw!}c52PIMj{C624Kpw6tnihLM7m)LT6#)pueT6bTUbE*>2E(_x zB6{BzrxT)OaCmfRgjhZ^36EY2jPm#T<*pKYJ}L{H5qKAXPLM+)cE#F`UiGl$6 z0^1vViUOkNi!O=13qZ)@a>Q`y3X;nz(c}E{nW8;UG)4dk*A)~btCY|D7dt{lkwtD^ xvT10v0Ck`fK(!p50IKEa1W+wUCxB`>{sB&15gk!Cf^Gl+002ovPDHLkV1iZ?HZlMJ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienq.png b/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienq.png new file mode 100644 index 0000000000000000000000000000000000000000..e26765dc0d89756ccf0cfb145c05c117f877841c GIT binary patch literal 6198 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienq_husked.png b/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienq_husked.png new file mode 100644 index 0000000000000000000000000000000000000000..1c28e50d52852db144f656b0f50958e0cb5d722d GIT binary patch literal 1702 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 IM6N<$g5;2s-T(jq literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienqmaid_husked.png b/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienqmaid_husked.png new file mode 100644 index 0000000000000000000000000000000000000000..1e9c3fc1ff73f84a0a3cac37e901476f63e7f358 GIT binary patch literal 4935 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 Y@@SW;II?XD2iDjOp00i_>zopr0H&Y=cmMzZ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienspit_q.png b/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/alienspit_q.png new file mode 100644 index 0000000000000000000000000000000000000000..efbdce2c26b1d64a01eb7c195df695c55ba78fb7 GIT binary patch literal 1973 zcmd5-YfMvT82(PF2q-sEn494iZc`WL9J&gwg7xdEsyAJ@^&I%6= zj>!=%{N-^gHruseNfq%rz~hmEeCSTho)dTXtQF4e`0``)e0SVxO@+I|_c!a5^|SlQ zmUVS>;o9{*v7eO&e&f^?5pp^&yZ_VZ7XP0MrZzaeJD26ndJ1t^kADq*Av-+ZMRPw1 z@()7fhAjdY8^NL;d!kS%L?TgdR;%(T?&KrX!L$f#=)RBGeW=C#AJDQ+m z!nho7uvZ(T&Yc*ws-KBxmPs!&N1>YOxyEuSF{&h9%3W5pgX@zlHsK=H$}sUJ%Qz2z z1yrKG)c)g~&kL+uGTGB3ZbxLT0nOdwXUo&fM2lzL@UsT20@3KEBrc|w$42}e881^H z#u#c})jxrrKMV>}Hl0sy_Fyi0I29or5-sj?ZQ6FgP|pNYJGu1cNsg@q4=7W=$0&M~ zZcyF;l9V;z8Wt5Yxqbf3aXz@{NQ;|@0vs!HN$hnuHxk4s7dS}5K)esP-gWB;-CB9x zdhI`2?d(KS8^PE^d}FjZ_t-7u>|TC=#JN+P*ioh?qqD3EN(TkNt%D>~JD646BxCC` z?JVlAnWW{;jc``lQD{D4?Tc}Y**`sz;Yfb{yJ09vC>RHlq%}a2oY+#Mz4eoK3jQ2M z^aa(`)x)9+cZ{d>=TC9;$$=(z%J=^Z4a2>|15)4bz}@>p=d*4_va&ChcC@rpdA6w< zv5L*e#S(uh{4j`>Mz+LKZ*5&RCZtB>IbcazWe}{4}lE`XIc+JzW0bmB&4p zsw>Td?`3v(I(ZIL?V^rQ``i`(UNKcHBz~ydv zLD`E{k+E#vCwyu<=g>gnB@H_5m3K9l8ZW(M=38jwVTMU^&JrRMGY6=6W#DF;EcaEB z%5!h0`Zr>HcArnmFri~-6X`1$0&|V}CTgm%BDjgKslx;iLp$k@9%Tuxa+irdTipwF z_yJ_VviZiLO`t1t6sLH5w)g048l)DhCT>My7o6zOCc-( literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/facehugger_inactivep_l.png b/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/facehugger_inactivep_l.png new file mode 100644 index 0000000000000000000000000000000000000000..49ebb37a1050682d43ec26945773102443e468e7 GIT binary patch literal 1075 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9F5M?jcysy3fA0|WC@ zPZ!6KiaBrZ+GmS6%Cvvvyb*CDO7leQL~(_SF@gaX4n2!&G+VS}qu1JwBfq3pCv5p7 z8k79cQAsn5SJ8KtwvtoOQs0FM8}H@6cQaotesRLh`_F#c2z(MZ+WmRv-M!h*ViaC7 zD9AA!VQ#2k5a4Hc#OPqd(812|k!phHRU7X1rdL)!eCe|w_`E8^>_1bV=GDDEcJ)FE zhi}6hp@ywLme^Yr{=IO8r(ic@#a*V1s>5fQ*D%Ui-yYHXK8#L!}Q`zoK~2h*&X{LBX{|O#m!&W-WT}uGQ#Gm zkb_O+Zt1gCmKpr(v`;JcuTNNGcAnvXSmn_W|9N-WY~sUmYrcIbe}3!dhky67cKlC0 z|287|9m9at^nCgtX(RcHXJc)kC5OG;=_O@S-JHO57%}-r7 z+dTD??sSHnt^M~oeod`?U-~uLOiy}#?9!Y+YiAxdsMshR)o*pQnrZR<-8BLwtP5-o zrm}pzC+}bM?2A~!<4v7$T%Ri??sDaP(ydl|@%4M`p;A_bu(-d4pRD`B>n)|1_ilF( zI5xTd_s3bc3wJXG%zaQ{)c;#rKlHfh#j4n!hT#mSLc?pWHC)XPJ^tqJsi$HN*CufO zkG|J`SeL;|n1=C+Kdm&(T3uc2!*FGeZ{3~DEqojd1s5tNuc_1hFAYp$2OPJV&a2&) zo4$6+c4h{P7tgO%Ox}GU=(~dd*8&cPcFB&5?vwtrGO%CWxqX2(L)pvSzaON2EG={U z#y2PI4(HygIhyyS3s@g~oqGCbLap|m$l3@SmQtxr@gM$|+}U{3(qpPN!{PP!54~Ca z)?h}>{J9Uc4{S-U{{AQJ-?z(-n+kU@efV2t&13(rEo{a2eG%#NKXWf`Kd?0=+&-M) z&CBce#B$Hdm?b@aI$5OuY+v~wzXXnNUki%&{0f%cugx%RZo|=2(>|u}eD&mb?(^V- zXZ^`p@tG$<;L+-)%=%)foy->m_k5oo&$rC3uAIT>Ap8DLhRZ=rja(c#>^=MJ X6U#GZC$BLDmI4f(u6{1-oD!M0*to_37vZ3M`o1UH7dJi+>&uxFtHKvwNc6fHyw)pwJ%Ad;h<( z^;KU=X5`4NWaK(#bl}}N$4mbOV;Q8k?2UdUU;j@uj?aD)>#`$F^Q-_wf;fLrh z?eN17R|oF+{KL&+%{rCHziwA_53q;dU#;`Qx1RazjXybeqgV0ur{^Xn>)xpTYqRu) z?tu-Aw-RER!v6i-`TI%i^RwNzr;66KE&nIdt^P_Z;Qu|7jIjSV4LN5u#k~=G;KMd& zi@oelG5=5Pjx6<7MQ5e`nUB&m?g*xdIbo~|Hm3aEqSUb6QT4~$%UujC`(#!y9yzJz zu=n@YuLq4YjPKh;vTS(p{+*1#2d0xs4Apfzw}dfY@ZZ3*=^DdVp9j9Ge~V`%{;~T0 z{aW|wwwo*;m^SpW*G=2p7(ZM5VDrzNr*0i=cRHcg5c=<$z|E>he*f}J4oeKdWusKcw6j2WP)Ra}Xea-zA)_uC+=I(a+dizoZ6QLE1Jwp74 zHl;G`e;d5(@9ZT<*6O`>oDlyfV@)MP$fMHFCIL9Z=DB><{x#oObLuVv^EHE~tDnm{ Hr-UW|wbP-Z literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/facehugger_inactiveq_l.png b/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/facehugger_inactiveq_l.png new file mode 100644 index 0000000000000000000000000000000000000000..64f99c5cdfd0b697e691e1fcb4bb9b2bc26b548e GIT binary patch literal 893 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9F5M?jcysy3fA0|T?Z zr;B4q#hkZyH)e?hN;o`>+^}(j?^1<`H_RR?nk>xAHr!O-AavBO)a8hY*-KZ!ZkvPK z1eGGzDBSW-)RKP8JR|Q;eL~6t3fPmoTi4_nYNo@NbmPr6zE`TH_``hQg~ zvxYnD_t(a){4aNsO(02BV*UEi@9*!fE4s;XY?nFZGQnpm) zJl~}MS#!ttXFnPAw{jgZ{bqdU!Cd!^j92#i-#&h0#?cRAmd!hU&txxOcW!;*x9_XY zh)N$=J%7Jjdv)~L!p%Q6>^i)9dwKuApEu7o@omvFYbdxAlbwG$DYsDfSp|4&Ct zR~-_ObTHrXo&El*g>7QjU!CEyy0hy9gVkLjx&H2btVfdTRW&ky^1HHKkiQ^sSn5}m jrlt|Y-1&Gy`7h(~)$03Y# zr;B4q#hkZyH)e@A$~1hm-0+cgjR;Hkmo6c0MaJM8PdI}*G`_7=R$9h=W2u0n&L@`Z zOF9G&Iyr9H?zlAnWuYX)9L59G zCt@}-)Ya8py;Jp}Xv&rBqf9@3ysQrTFUp

1}@1@2cIE|B~M5Tu463RAKzj>Xz^8 zv+urD39p}Awep4U0_J+l!cS}N?w#g!ZjmcfhxCCR>>Z~Y1a;QWc6}W5tKhMpR$=g5 z+Xjh0hnthx?Iyo`ZsGU#Z%CGxjD0nO-rrLirIHahn-~1fzP_Bbe&!#;338E<416{A zYrg~*oMCFapzq2wL;l6&zh~33-Zy z4(-Y~AeG1T*iJ!@wQa)j1f~~k_g~k?HFG}r@ZiUx^xAc6UvWm?<5z2NUG^u2S?qY{ z+x*+_SB5onCIlK5OyB9>v3dXBS#96{J?njTa{c|#b4;Nu1^3#n^uLSEWzXMvcGd3h zHurYkUGhz0^5*)LVWBJr`|S&F+_IL{-5p$6zNeyg)Bc-BHU=$S#gP#AeanYE26~IC z&tE*YdD*w)=dZFDSf7yZt4py=`}1(+Y|d$OeSfW+#o%P_u{r(Urs)kgA200+6+Q4K u;i<%qJI7xyUd43b5f8&Th6mV*clLMV49>1obiWJCSPY)7elF{r5}E+$-h93Q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/facehuggerp_l.png b/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/facehuggerp_l.png new file mode 100644 index 0000000000000000000000000000000000000000..49ebb37a1050682d43ec26945773102443e468e7 GIT binary patch literal 1075 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9F5M?jcysy3fA0|WC@ zPZ!6KiaBrZ+GmS6%Cvvvyb*CDO7leQL~(_SF@gaX4n2!&G+VS}qu1JwBfq3pCv5p7 z8k79cQAsn5SJ8KtwvtoOQs0FM8}H@6cQaotesRLh`_F#c2z(MZ+WmRv-M!h*ViaC7 zD9AA!VQ#2k5a4Hc#OPqd(812|k!phHRU7X1rdL)!eCe|w_`E8^>_1bV=GDDEcJ)FE zhi}6hp@ywLme^Yr{=IO8r(ic@#a*V1s>5fQ*D%Ui-yYHXK8#L!}Q`zoK~2h*&X{LBX{|O#m!&W-WT}uGQ#Gm zkb_O+Zt1gCmKpr(v`;JcuTNNGcAnvXSmn_W|9N-WY~sUmYrcIbe}3!dhky67cKlC0 z|287|9m9at^nCgtX(RcHXJc)kC5OG;=_O@S-JHO57%}-r7 z+dTD??sSHnt^M~oeod`?U-~uLOiy}#?9!Y+YiAxdsMshR)o*pQnrZR<-8BLwtP5-o zrm}pzC+}bM?2A~!<4v7$T%Ri??sDaP(ydl|@%4M`p;A_bu(-d4pRD`B>n)|1_ilF( zI5xTd_s3bc3wJXG%zaQ{)c;#rKlHfh#j4n!hT#mSLc?pWHC)XPJ^tqJsi$HN*CufO zkG|J`SeL;|n1=C+Kdm&(T3uc2!*FGeZ{3~DEqojd1s5tNuc_1hFAYp$2OPJV&a2&) zo4$6+c4h{P7tgO%Ox}GU=(~dd*8&cPcFB&5?vwtrGO%CWxqX2(L)pvSzaON2EG={U z#y2PI4(HygIhyyS3s@g~oqGCbLap|m$l3@SmQtxr@gM$|+}U{3(qpPN!{PP!54~Ca z)?h}>{J9Uc4{S-U{{AQJ-?z(-n+kU@efV2t&13(rEo{a2eG%#NKXWf`Kd?0=+&-M) z&CBce#B$Hdm?b@aI$5OuY+v~wzXXnNUki%&{0f%cugx%RZo|=2(>|u}eD&mb?(^V- zXZ^`p@tG$<;L+-)%=%)foy->m_k5oo&$rC3uAIT>Ap8DLhRZ=rja(c#>^=MJ X6U#GZC$BLDmI4f(u6{1-oD!M0*to_37vZ3M`o1UH7dJi+>&uxFtHKvwNc6fHyw)pwJ%Ad;h<( z^;KU=X5`4NWaK(#bl}}N$4mbOV;Q8k?2UdUU;j@uj?aD)>#`$F^Q-_wf;fLrh z?eN17R|oF+{KL&+%{rCHziwA_53q;dU#;`Qx1RazjXybeqgV0ur{^Xn>)xpTYqRu) z?tu-Aw-RER!v6i-`TI%i^RwNzr;66KE&nIdt^P_Z;Qu|7jIjSV4LN5u#k~=G;KMd& zi@oelG5=5Pjx6<7MQ5e`nUB&m?g*xdIbo~|Hm3aEqSUb6QT4~$%UujC`(#!y9yzJz zu=n@YuLq4YjPKh;vTS(p{+*1#2d0xs4Apfzw}dfY@ZZ3*=^DdVp9j9Ge~V`%{;~T0 z{aW|wwwo*;m^SpW*G=2p7(ZM5VDrzNr*0i=cRHcg5c=<$z|E>he*f}J4oeKdWusKcw6j2WP)Ra}Xea-zA)_uC+=I(a+dizoZ6QLE1Jwp74 zHl;G`e;d5(@9ZT<*6O`>oDlyfV@)MP$fMHFCIL9Z=DB><{x#oObLuVv^EHE~tDnm{ Hr-UW|wbP-Z literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/facehuggerq_l.png b/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/facehuggerq_l.png new file mode 100644 index 0000000000000000000000000000000000000000..64f99c5cdfd0b697e691e1fcb4bb9b2bc26b548e GIT binary patch literal 893 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9F5M?jcysy3fA0|T?Z zr;B4q#hkZyH)e?hN;o`>+^}(j?^1<`H_RR?nk>xAHr!O-AavBO)a8hY*-KZ!ZkvPK z1eGGzDBSW-)RKP8JR|Q;eL~6t3fPmoTi4_nYNo@NbmPr6zE`TH_``hQg~ zvxYnD_t(a){4aNsO(02BV*UEi@9*!fE4s;XY?nFZGQnpm) zJl~}MS#!ttXFnPAw{jgZ{bqdU!Cd!^j92#i-#&h0#?cRAmd!hU&txxOcW!;*x9_XY zh)N$=J%7Jjdv)~L!p%Q6>^i)9dwKuApEu7o@omvFYbdxAlbwG$DYsDfSp|4&Ct zR~-_ObTHrXo&El*g>7QjU!CEyy0hy9gVkLjx&H2btVfdTRW&ky^1HHKkiQ^sSn5}m jrlt|Y-1&Gy`7h(~)$03Y# zr;B4q#hkZyH)e@A$~1hm-0+cgjR;Hkmo6c0MaJM8PdI}*G`_7=R$9h=W2u0n&L@`Z zOF9G&Iyr9H?zlAnWuYX)9L59G zCt@}-)Ya8py;Jp}Xv&rBqf9@3ysQrTFUp

1}@1@2cIE|B~M5Tu463RAKzj>Xz^8 zv+urD39p}Awep4U0_J+l!cS}N?w#g!ZjmcfhxCCR>>Z~Y1a;QWc6}W5tKhMpR$=g5 z+Xjh0hnthx?Iyo`ZsGU#Z%CGxjD0nO-rrLirIHahn-~1fzP_Bbe&!#;338E<416{A zYrg~*oMCFapzq2wL;l6&zh~33-Zy z4(-Y~AeG1T*iJ!@wQa)j1f~~k_g~k?HFG}r@ZiUx^xAc6UvWm?<5z2NUG^u2S?qY{ z+x*+_SB5onCIlK5OyB9>v3dXBS#96{J?njTa{c|#b4;Nu1^3#n^uLSEWzXMvcGd3h zHurYkUGhz0^5*)LVWBJr`|S&F+_IL{-5p$6zNeyg)Bc-BHU=$S#gP#AeanYE26~IC z&tE*YdD*w)=dZFDSf7yZt4py=`}1(+Y|d$OeSfW+#o%P_u{r(Urs)kgA200+6+Q4K u;i<%qJI7xyUd43b5f8&Th6mV*clLMV49>1obiWJCSPY)7elF{r5}E+$-h93Q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/meta.json b/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/meta.json new file mode 100644 index 00000000000..993dd5d0d60 --- /dev/null +++ b/Resources/Textures/Mobs/Aliens/Xenos/alienqueen.rsi/meta.json @@ -0,0 +1,170 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation on: https://github.com/tgstation/tgstation/blob/master/icons/mob/nonhuman-player/alienqueen.dmi", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "alienq", + "directions": 4 + }, + { + "name": "alienq_running", + "directions": 4 + }, + { + "name": "alienq_sleep" + }, + { + "name": "alienq_unconscious" + }, + { + "name": "alienq_dead" + }, + { + "name": "alienq_husked" + }, + { + "name": "alienp", + "directions": 4 + }, + { + "name": "alienp_running", + "directions": 4 + }, + { + "name": "alienp_sleep" + }, + { + "name": "alienp_unconscious" + }, + { + "name": "alienp_dead" + }, + { + "name": "alienp_husked" + }, + { + "name": "facehuggerq_r", + "directions": 4 + }, + { + "name": "facehuggerq_l", + "directions": 4 + }, + { + "name": "facehuggerp_r", + "directions": 4 + }, + { + "name": "facehuggerp_l", + "directions": 4 + }, + { + "name": "facehugger_inactiveq_r", + "directions": 4 + }, + { + "name": "facehugger_inactiveq_l", + "directions": 4 + }, + { + "name": "facehugger_inactivep_r", + "directions": 4 + }, + { + "name": "facehugger_inactivep_l", + "directions": 4 + }, + { + "name": "alienqmaid_husked" + }, + { + "name": "alienspit_p", + "directions": 4, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "alienspit_q", + "directions": 4, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "aliencuff_p", + "directions": 4 + }, + { + "name": "aliencuff_q", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Mobs/Species/Xeno/organs.rsi/acid_gland.png b/Resources/Textures/Mobs/Species/Xeno/organs.rsi/acid_gland.png new file mode 100644 index 0000000000000000000000000000000000000000..02e5548d97405a582954894669e928ba97286597 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv=>VS)S0F9GCE@BGp{Z@sv5KK; zCPPjKgRGqLwA~C793yIh(u^fRe!&b5&u*jvIWC?qjv*QolM^I59RdWVo?oG()S#rG z^5Rv;A_qfL6G7Jl0RaM`-4Bp=CGY-18Tj^e!~$IixZ${QJl9 VXU?3eoj~&#JYD@<);T3K0RaDfG{gV^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Xeno/organs.rsi/brain-x.png b/Resources/Textures/Mobs/Species/Xeno/organs.rsi/brain-x.png new file mode 100644 index 0000000000000000000000000000000000000000..bb5df36e512c9b08f6e09f40a7aec8906993c437 GIT binary patch literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyQ2{<7u0T2`)i*EOcmMv$U9IT{ z56w=AbFD3nJ$h{E;w9yWk1Xu(Pe_h;jtR3{v9fl;q?E{LQ-5!x>iVE%%c~9^nl)uw zMtriBmzz#`m0xawYf+h3fR9mDu2WNMc(##0H_&v(k|4ie28U-i(tw;|PZ!4!i{7_q z4~jJ_@VEq?k}wI_8p6Bf#sB}yO89quyRm()bik|orqwTEYOhK0a)c&FWmz#rcW*K{ z(kCItQ#Z}QUf?#p3!7Eps>>hX3zTCl3GxeOaCmkj4ahm@>EaloG4bq#y@JgKJgpzuG!kOerGIdI zu@cfxn8`ZfZm`6){-38E=c=t*@_ybImDHQ^$KKYhZPojv%%cA)_%My;Lfd6Hyq7w>2euV`#|X=*h=V@T_+K5Zh_E%Cc|v@zvj?7?13#W13tpTi@@c(B@EKC$&rJ uvvB~!E3QSe^&J#q+?M#;eR{L}2g9%PTCTgNRxSs6hQZU-&t;ucLK6VGa&uY$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Xeno/organs.rsi/hivenode.png b/Resources/Textures/Mobs/Species/Xeno/organs.rsi/hivenode.png new file mode 100644 index 0000000000000000000000000000000000000000..308f0bc7685e950d29fe64cf0e6c6218a44a1136 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iS0F9GCE@BGp{Z>mE2k{s z9Ah&1^sI=r8-WsxB|(0{3=Yq3qyaf*o-U3d8WWQfBtAI=Fibta;!THILRN>Cf{0kt zD)$Rl1V!Z literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Xeno/organs.rsi/meta.json b/Resources/Textures/Mobs/Species/Xeno/organs.rsi/meta.json new file mode 100644 index 00000000000..2789988eb75 --- /dev/null +++ b/Resources/Textures/Mobs/Species/Xeno/organs.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": null, + "copyright": null, + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "hivenode" + }, + { + "name": "plasma_vessel" + }, + { + "name": "acid_gland" + }, + { + "name": "eggsac" + }, + { + "name": "brain-x" + } + ] +} diff --git a/Resources/Textures/Mobs/Species/Xeno/organs.rsi/plasma_vessel.png b/Resources/Textures/Mobs/Species/Xeno/organs.rsi/plasma_vessel.png new file mode 100644 index 0000000000000000000000000000000000000000..2a1490c25085a3c9b5459d7af209af68196921a9 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iS0F9GCE@BGp{Z>m;T$6? zr))C$^zwTx8bArgk|4ie28U-i(tw;OPZ!4!jfu$#62BY*7^a?Ik<+1<(6g%LqJ*!* zi6bJB4S@kS&x%GmMBF^Wax@?@+5EXf3S(gM0zr+mmNqUUgGD=nCpa>=GH@8MN?e$8 lsv(Pmc^4a-3GWqFhQv;`B|AKV<$$&@c)I$ztaD0e0s#0IIFbMW literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/resin.rsi/full.png b/Resources/Textures/Structures/Walls/resin.rsi/full.png new file mode 100644 index 0000000000000000000000000000000000000000..39497166714bda675c0b071d52d5b9267383477c GIT binary patch literal 1897 zcmV-v2bTDWP)smCRz=3BYxV#Bqe<6nTI879oW3oy}$>^Ek6OK$0ZJ&vlAS zg0Wc#AWjm(aLUKQfYnSolLXf(nrGK3B7~slcd;y+$B(`xjw9kE!Ln?;a)nRxIfIXV z0P3{{J-=)G0JFJR9BvYfGbLSJu8($%qd9SO#ntc%faxqCj^^gKw!)gjX0wSUgsF4A z)}Y;L8K3Daps?lu@Q2-9gb*g+IF8Z`BuQcdNRoui06-9o+1}n|G#rr6 zuhVLuqLiXqtn5OI-W}t*E=nl?_V-^h8V>Nv6#(-dpx^iL z$`w>}`%afaGsLoNR^m7^8;9W(%d(ly0;H5I+hyNJ#gPf@>DDuHxfEEV;efJNK}u;d zu)qJ3lanK)on6Pj?6F+-75zcKXt!GI?CjFq+~WP|Tf*=LX-k@$TR2XUYPE)xlFNR| zW3OCcGMO+O4b0|ydoNItLMerc6#4u*=ba9l%_g7ba}!J)N32+uO&Ct8-LF%xHP~!6 zIq!5h_{ZOI-4c;fjD`cGEh&2yf?&-3Y7Ky3GNJY1jO+0gK`_Ra3!lk^Uat#~2IjhE z!zWL^V>X={T4qYH%+VLmUz!sEkXuoY;W&o@S@@fxd_Pbb(zirL)CA- zd1TgI&46MNm8O#|C7ts&`};4M&l5(&l$LrUO~>tLyX0~r12`R^HVr_ns#-NyAr%jO zdaYnyxne-3X;$_sNL!j`$0=sY5r#M9^Xo)P(P%tGMT#)I0id)|q}^&!e^8@y{vkcE zWv3X>n>tPr%d#n~Ih>pvWln2LiL@oH4`)bQVoOP*@z9)53l2cD`Gj0fFdU`ArPlyV zW7D<*x6L6*656d6`}==HDaFCTPsTByUniFnT#v6fIXR+MZy1EP+NVTHVK1ob_qzP@ z?wGPyF>0!mVmb>*l7z>PzBSoiS+0H0Pr))A4cLB`%BkjY7~b&a&3_En{azQxb!oLv zahxJSFg7QhOeS29uWr@Rb=iKlOJU8ScE6svXRO3=#MSkPjgps1jkG0Cx1MEywYT?z z=H?cS#zVYvN;mzivC!*vQE^1IS~HYAIQYp>(JNOB08I&W8A>IO!kRXb z>nx>MbgK;-r1|_hVR(bP*r?z4ahxLg{5q~%GUfa z0sz-7aq{+vYPE(fB|rS|7lO$ogCAHDqXpJ1%U;4j92tQKmL$1z-lkS>;FT*J9v&Dl zH8;0tZf=>bSzV+#QVPG6s}w1a=`>!N^`KaLV?k6z};Mq zB%Y@k5JKQOMJo5InVRWR_`NP=uVS*2Bq<|C!+~j1{k~5ynQ(G)gzJ_}pU@cE+1cgi zpWm4KfDqz#FnRR2$@TRJAp{#GkJHol=8~y_Q`$&Td>g>c?|hc+%M0pxr^9p>u(kCR z%d+YDT|N#5+*vOaKi{v_%m4vouGt!(Iw)XXl=)67WaU-l3}m;kLLAqd9i8m~{j><46KME!2r%y7Eyqygmf z1qOYeO0{PGtcT6nbo#sDRGV(+`jnsMb1DmM_;OGMxCy2y2-ge6&tHz=Ium-d{@Td> jHT&8~{{Q}KSvLO#*aKX1%%As@00000NkvXXu0mjfjEthF literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/resin.rsi/meta.json b/Resources/Textures/Structures/Walls/resin.rsi/meta.json new file mode 100644 index 00000000000..2cdd98533c2 --- /dev/null +++ b/Resources/Textures/Structures/Walls/resin.rsi/meta.json @@ -0,0 +1,47 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "", + "copyright": "", + "states": [ + { + "name": "resinwall0", + "directions": 4 + }, + { + "name": "resinwall1", + "directions": 4 + }, + { + "name": "resinwall2", + "directions": 4 + }, + { + "name": "resinwall3", + "directions": 4 + }, + { + "name": "resinwall4", + "directions": 4 + }, + { + "name": "resinwall5", + "directions": 4 + }, + { + "name": "resinwall6", + "directions": 4 + }, + { + "name": "resinwall7", + "directions": 4 + }, + { + "name": "full", + "directions": 1 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Walls/resin.rsi/resinwall0.png b/Resources/Textures/Structures/Walls/resin.rsi/resinwall0.png new file mode 100644 index 0000000000000000000000000000000000000000..9f219aa14ebe7d4e9eba8bb05187f891e9125d6a GIT binary patch literal 2304 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 N002ovPDHLkV1fhr=~Vy# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Windows/resin_membrane.rsi/resin_membrane6.png b/Resources/Textures/Structures/Windows/resin_membrane.rsi/resin_membrane6.png new file mode 100644 index 0000000000000000000000000000000000000000..24613a3ff8229bcafa3290b1d1f51aefca4d19b5 GIT binary patch literal 2227 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 N002ovPDHLkV1fhr=~Vy# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/resin_weeds.rsi/full.png b/Resources/Textures/Structures/resin_weeds.rsi/full.png new file mode 100644 index 0000000000000000000000000000000000000000..ac07e2b501283a00c925b379fe5bdf81d2baa56b GIT binary patch literal 492 zcmVPx#1ZP1_K>z@;j|==^1poj55>QN3MMFVJN=Z>KE;KkcJR%__P)}E;W^=g!000Sa zNLh0L01m_e01m_fl`9S#0004FNkl3hCVU0aT4{CC1fFxBxz3jS<6zIE*W}N~AIRc#@n|Huz1Fq?TqVwF!ax*%Xs% z?PV@DWIOc|i$C{w&)2W-uqHzuXR|q(2x?cn^*FL7g{2P1YJGxUl#?Cp0`b0PwpTD? zqhBD zaK=3mGg1a=luB>=F*;t0oVjdQGdmpqdsep@@_y?}NJc+CIx)~6qfmRi)kv0;=8PZb zW%_W9B_ToRpe4JgmLF>X72-~;x07Wa>M@>4pKUWAD`7M2S#jt@sLhG zWo4cfU)7oxM{OmQ)D^)41fil7iOJ*tS4JeX5dDXvSE$?WiBjXC{q7aic+Vt`*{bbD i5GumueGt3Wrt}9Q>p8e3=j;6d0000chmMb!INSm**Y%8|koAe!e(tjlnPo z5QfUjXLnWs@^r&cfx-g-AAKmHa|)1xZ;iop5}_zG#*+v;W3bFKd#}8HEjp!u`T61y zh6;lqK$<=P0E$8*3>9|9U=Re*dTs9?27&W;c18j7^TmOu44@_`0ILK5P-=u>5Lj1m zL1z>Yh6-u=faxT{D$k(Q2mlbrGkf{~kbL-vK@ec&!TbT>H!q*!i23>AP!!re4?~6N zB*L_^2nwI34;TaicE(^liM)Jwr!0Ub%@ZD1)^K-!3#CTTdW|%F_Wh{`CA4k6IbixI~ zP$3KzibDTX3DZerPyFWQ8vsC6_qn2V3joSk50r|C7xiP-=uYot0`pgkzU+_&OLOe~G-0*tPD2KIPW7|+vTX0r@BsO`{Y>NS9g2W_= zy?x;27DyX#Rse->?)H!f$pP~IVYTbig^rLH7m)M%BssMLYQ47o|DkA&%c*bM@YWXJ z8H0Ymk00MtJJSbBSCG{rN8g2qDwpF7yKd4+@|;v&QEs z%lBoX1fUZcAmODgzBLA`JhRuIjCN9Me7Ox zo|Ql$xfU-oMX8u&#W!zaRhA$z%9VIVm$6uso<}VUC_D$uC6b8vU?1a9VAwbY`9X`{eEv3t=?7XY-&z8c zbH`@g@fx(QfUE1vo=j-iW0W!f?CcYi8d-s<6dygs))fGh{wz;Z?i0ymhvoDj2x?7N z7qngr0A&s^tP&n#nP<>?ZKD8BI}DX|6CX|0PFMhmkV%jIx0p)6omi8nyKo%uicTm1 uc%Cf+&w{h?0m_k@QX@NGY%XNI7XJb_dKFPD4JnfV0000Wq3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/resin_weeds.rsi/resin-weeds1.png b/Resources/Textures/Structures/resin_weeds.rsi/resin-weeds1.png new file mode 100644 index 0000000000000000000000000000000000000000..d2c6702aaeefb3bbaed5c0d97acbb3b966bf003f GIT binary patch literal 1603 zcmV-J2E6%+P)?3=v6@Vo9-uagqO>Dx^sfQg4yM;D8bNkR`AOk&zm|!n!vj zW#cTKff4V(LToGX-mCj@?wKo~#h6X6wzKKgcHif^-|?^RA25O0^lE$maMzhlueR?} zqVG6xT@L_ob9>!sUIPI44|g59Mh6}3zo3cP^lIz69`an^T}pnRoN#k{-DzIacO1U% z{^3r`hJSQ^*#yY2fgfP#2er>uX~JPn#t;1f?^5DjN|=ZM>nV`u0r{ zjH00DI4G3p82SMgPxDU>I|SApKw(c#007TBM&EJxvsIcP3@7Y}Rhk(4e(Na^h7-Qa zJ;y9zQ1r|?p zc-}FDSR;*wV4tPsm zx#$5vbb5|F7hDi2cXY%N@Gd2y z({li3>VWkcK*q%J5`D+vJ1fK*{i-0U93YC$AT}Ee{h*d6hr+r8dX9s~$KU+A-^hI; zO5V{C#Ad@hpl`r`*i!aHft3)$4%WphWG`CX5jw z!sFv_7Duu)spUV_2iNsl!2$sT4j|nh*co+79?z-Jfa#IpN1i*otXTy9<1$`>U+5$^P0<2dr<410NgX ztEy;H%cT7Rnl6P{^F~>7o&Hc*-w;uar(<@NHLCb(k5C8J9dQ3}*P;4ABuO2WzuP0! zh4n2lpso@8$qDL89PJl)jp_1GSdRdpzB8n93ZTA6n579k@A%Uql@3}H0RU>7;zXwh zez13sP#3L;fScRvj#~Vh*tbWhi&i*bHoe*oEA8-4)qUR{p)OkC0JRg4#z;jlOA~I5 zVK}MX`TxbPF!2EOc_7*)XyU6qL>*X<0J{5Rj5PHfv(hH?{x(002ovPDHLkV1k31 B`7;0j literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/resin_weeds.rsi/resin-weeds2.png b/Resources/Textures/Structures/resin_weeds.rsi/resin-weeds2.png new file mode 100644 index 0000000000000000000000000000000000000000..ebac83ba9976a2b625c2dd6cdca7560f12b944b7 GIT binary patch literal 1648 zcmV-$29NoPP)chmMb!INSm**Y%8|koAe!e(tjlnPo z5QfUjXLnWs@^r&cfx-g-AAKmHa|)1xZ;iop5}_zG#*+v;W3bFKd#}8HEjp!u`T61y zh6;lqK$<=P0E$8*3>9|9U=Re*dTs9?27&W;c18j7^TmOu44@_`0ILK5P-=u>5Lj1m zL1z>Yh6-u=faxT{D$k(Q2mlbrGkf{~kbL-vK@ec&!TbT>H!q*!i23>AP!!re4?~6N zB*L_^2nwI34;TaicE(^liM)Jwr!0Ub%@ZD1)^K-!3#CTTdW|%F_Wh{`CA4k6IbixI~ zP$3KzibDTX3DZerPyFWQ8vsC6_qn2V3joSk50r|C7xiP-=uYot0`pgkzU+_&OLOe~G-0*tPD2KIPW7|+vTX0r@BsO`{Y>NS9g2W_= zy?x;27DyX#Rse->?)H!f$pP~IVYTbig^rLH7m)M%BssMLYQ47o|DkA&%c*bM@YWXJ z8H0Ymk00MtJJSbBSCG{rN8g2qDwpF7yKd4+@|;v&QEs z%lBoX1fUZcAmODgzBLA`JhRuIjCN9Me7Ox zo|Ql$xfU-oMX8u&#W!zaRhA$z%9VIVm$6uso<}VUC_D$uC6b8vU?1a9VAwbY`9X`{eEv3t=?7XY-&z8c zbH`@g@fx(QfUE1vo=j-iW0W!f?CcYi8d-s<6dygs))fGh{wz;Z?i0ymhvoDj2x?7N z7qngr0A&s^tP&n#nP<>?ZKD8BI}DX|6CX|0PFMhmkV%jIx0p)6omi8nyKo%uicTm1 uc%Cf+&w{h?0m_k@QX@NGY%XNI7XJb_dKFPD4JnfV0000Wq3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/resin_weeds.rsi/resin-weeds3.png b/Resources/Textures/Structures/resin_weeds.rsi/resin-weeds3.png new file mode 100644 index 0000000000000000000000000000000000000000..d2c6702aaeefb3bbaed5c0d97acbb3b966bf003f GIT binary patch literal 1603 zcmV-J2E6%+P)?3=v6@Vo9-uagqO>Dx^sfQg4yM;D8bNkR`AOk&zm|!n!vj zW#cTKff4V(LToGX-mCj@?wKo~#h6X6wzKKgcHif^-|?^RA25O0^lE$maMzhlueR?} zqVG6xT@L_ob9>!sUIPI44|g59Mh6}3zo3cP^lIz69`an^T}pnRoN#k{-DzIacO1U% z{^3r`hJSQ^*#yY2fgfP#2er>uX~JPn#t;1f?^5DjN|=ZM>nV`u0r{ zjH00DI4G3p82SMgPxDU>I|SApKw(c#007TBM&EJxvsIcP3@7Y}Rhk(4e(Na^h7-Qa zJ;y9zQ1r|?p zc-}FDSR;*wV4tPsm zx#$5vbb5|F7hDi2cXY%N@Gd2y z({li3>VWkcK*q%J5`D+vJ1fK*{i-0U93YC$AT}Ee{h*d6hr+r8dX9s~$KU+A-^hI; zO5V{C#Ad@hpl`r`*i!aHft3)$4%WphWG`CX5jw z!sFv_7Duu)spUV_2iNsl!2$sT4j|nh*co+79?z-Jfa#IpN1i*otXTy9<1$`>U+5$^P0<2dr<410NgX ztEy;H%cT7Rnl6P{^F~>7o&Hc*-w;uar(<@NHLCb(k5C8J9dQ3}*P;4ABuO2WzuP0! zh4n2lpso@8$qDL89PJl)jp_1GSdRdpzB8n93ZTA6n579k@A%Uql@3}H0RU>7;zXwh zez13sP#3L;fScRvj#~Vh*tbWhi&i*bHoe*oEA8-4)qUR{p)OkC0JRg4#z;jlOA~I5 zVK}MX`TxbPF!2EOc_7*)XyU6qL>*X<0J{5Rj5PHfv(hH?{x(002ovPDHLkV1k31 B`7;0j literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/resin_weeds.rsi/resin-weeds4.png b/Resources/Textures/Structures/resin_weeds.rsi/resin-weeds4.png new file mode 100644 index 0000000000000000000000000000000000000000..e13effee6a2f72b4799cdd114fb8d5beb9394182 GIT binary patch literal 1624 zcmV-e2B-OnP)7JdY#K#hWCMTL8e# z%})RTub(r8a|-|fvH;KH2*Z(j4OBM{0C7A;mL}l5ui}9Xw8jDepvxEvDKYQ^6jCD3 z1qObgZXH15*6H7wpcNKyesQ*=2fuZU$KL@|hks6YQoS(+dWN0_C_t7i)- zv6K>f!9F~XTS4bnCX{aBB$2bAh2BD48q797`#Y zY3cFq{uTg~Qv4DzfIx1rtTO;9z~$N@g_tWXK$*h?&Ive~oW9Uk3V2H`Aol8*P)La% zKmNd8un*4r0Dyso7+_RO1FHj&PsZ`I@$+8o!*M)C7>ZS+zxD6jRg%u0n zySvH)mQtz!wioPUP-}ehYrXcjQO%jcSPGMNCq&T^#A2bE7;!vpyap-~27Z7}r(^o| z#xN#;Zj$frLM#?a&y&y7*J7=Nwbjxxg)sqS&Lm;ivj8(A)I>FWCO|J@OygAM%Pl~2#oM434qe&`2S))SsKSb(*1nB=aW+Q4ikoc zfV=zKRs=y~0`yLgKGe{=yLvfH{erf@*agCHq;9#(7^1`DMoCPds!{I)eurHL~CO>+a+FpdHG9$$|!b+bau(W?XErn!M@7!%NC zY~vo^wz+|8SaE?(dwfJfS(euJdThc90h{*tJ~B6O38$49P*syuBvI@9IeAip)l3_# zQthB?3)9aFINuZ0@!lTbrn!SDoUh1yWDjuD+`$yBv4HhGz+O$p`oNVk&R(!@WytEB z0IDJZG)iT%0-8HyX;RG{4njOW#OfJSICp_K4yJHUz_vZWkIo%F3+FDdz6bdD z5Gzs!ez0}!U<&6J090a5EM1m=t6F@;N3`gL+uV#n(;i;z(h9kuBRH;N8V(1q& W=Q`1}O2*y*0000F583r zJ&&BdG#Yh`>+d9I<7nTT_w##i-XSo4`tj$l8*2do<520Sf-6h#feK7RZGm&uiU1|Sv?MG>-W3IKR`yq8$e2Ei5Z<#R443;f`V)`QmX51s|gdX1h^ z$n!ajSs}Z=K@>&u?=Oo&vV?0X0KCM3;1sei?0ty zi9~${$?+(`a#6_VGtM~Uj5cV+r+o{*{_@*bHa9?>%G|#G?(P$Sy13~pg+KoM-TVLH z-=MQn_^?-xV=XCLZPAGWmWx8FI97V>+_LK%Avli#ozwy3?8xU)c(>3wBs@Z) z6AR!84|he&!{a@)9>ACt@_gUT`64#kz`F&!?5Z^2HG@MQFOIbrGQ$VFTR>kal%E01@8*r;BsHe#q;c}ckP17g1IX|krn{}R*jS6pApg^-Ww zZd-WI0yJyR`3P4roB*9n|irj)4>Kt^f`*%F@UQFLxQhU4L*LN z-fVUYtp_47m2wO{L1&~W7aiPUhkZa#DcJ=KjZO#=_5#MNBoMML0QPR;W6iBCI;jNR z=?{O#Hkg$l$Kj#Ti3?D0HaDTM%3U6rTRghH0~-(96;^D#pH2=qn|wvuzPv0YH-=&9bQo zNcs%eE6QDxK8YJ6?p>iMity!gE;|K4?F#NTISEx?dj`Q30PJsz0`&=#P`ym9FdQXv ze*l0mO>W9;gWze9vqU1xrZDTZELG(ByzvY`s5bX<)msr<0X#{4aRIYlOC3O;cQb@L zSoPIO23G*hnRfsVdBQl>jY0{4*B!&)F@U*!xhUlJ7{MUtQs}<#4E+O+!9@`7JdY#K#hWCMTL8e# z%})RTub(r8a|-|fvH;KH2*Z(j4OBM{0C7A;mL}l5ui}9Xw8jDepvxEvDKYQ^6jCD3 z1qObgZXH15*6H7wpcNKyesQ*=2fuZU$KL@|hks6YQoS(+dWN0_C_t7i)- zv6K>f!9F~XTS4bnCX{aBB$2bAh2BD48q797`#Y zY3cFq{uTg~Qv4DzfIx1rtTO;9z~$N@g_tWXK$*h?&Ive~oW9Uk3V2H`Aol8*P)La% zKmNd8un*4r0Dyso7+_RO1FHj&PsZ`I@$+8o!*M)C7>ZS+zxD6jRg%u0n zySvH)mQtz!wioPUP-}ehYrXcjQO%jcSPGMNCq&T^#A2bE7;!vpyap-~27Z7}r(^o| z#xN#;Zj$frLM#?a&y&y7*J7=Nwbjxxg)sqS&Lm;ivj8(A)I>FWCO|J@OygAM%Pl~2#oM434qe&`2S))SsKSb(*1nB=aW+Q4ikoc zfV=zKRs=y~0`yLgKGe{=yLvfH{erf@*agCHq;9#(7^1`DMoCPds!{I)eurHL~CO>+a+FpdHG9$$|!b+bau(W?XErn!M@7!%NC zY~vo^wz+|8SaE?(dwfJfS(euJdThc90h{*tJ~B6O38$49P*syuBvI@9IeAip)l3_# zQthB?3)9aFINuZ0@!lTbrn!SDoUh1yWDjuD+`$yBv4HhGz+O$p`oNVk&R(!@WytEB z0IDJZG)iT%0-8HyX;RG{4njOW#OfJSICp_K4yJHUz_vZWkIo%F3+FDdz6bdD z5Gzs!ez0}!U<&6J090a5EM1m=t6F@;N3`gL+uV#n(;i;z(h9kuBRH;N8V(1q& W=Q`1}O2*y*0000F583r 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/weednode.rsi/weednode1.png b/Resources/Textures/Structures/weednode.rsi/weednode1.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea5287a12c7fa2bd62aa0e76df0cc2661f4d04f GIT binary patch literal 2035 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/weednode.rsi/weednode3.png b/Resources/Textures/Structures/weednode.rsi/weednode3.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea5287a12c7fa2bd62aa0e76df0cc2661f4d04f GIT binary patch literal 2035 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 FV1jef(G36q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/weednode.rsi/weednode5.png b/Resources/Textures/Structures/weednode.rsi/weednode5.png new file mode 100644 index 0000000000000000000000000000000000000000..c2c011fb3d0e5ed1352663c94e62028e8c0fa244 GIT binary patch literal 1828 zcmV+<2iy3GP)t377IN8<`Dp%*X4g3kKY<){K-+itP5Eo;%6(D!w`Z% zN(>=}o;R-)=`& zM|bEh-Nu-mqdqe?^4O^pP>8m@!Xy8H)!+Swpj^W3IFyQI0x8M5F7+)N>#Jq1e*F!V zBR%7%ZUUK1hHABj+i@^Wi^kT_!SlK!kDvMuxO%OM z*XvP;wz?vtP%P6mr|2%-#=HF^_9iFEc|N!l;PrYKLSWn5cwU$K z%p93a27tVOh`4v3%Rv6$|6!ulB1n9-LoQf9{}KX9IDkC?T!=Y1S$av!;s*~dQ42US_1~*F?bV9z@49ijzb_N z)oN{MQpzk8R8%-k(kMuM2W(7N$B&ckYxyAZ1L14x~;%eamK| z)dGlffqH$GdVO{%&OdJ~vhm5s>`qsKLH4MFh}2D>@OYho!OE*p7=|I4OeWsyh2|}` z8rKPb`Z1l1!R65gskhbu-j(it7R_zYni-%2to`+ zjI$zj6M#Xu>q|*~vB7_T`)l?-xK7V9DHO}G*Ed&ISzKOWX4k<@IL!-O-~tyI1taNc zufi{X{;OkE+`u4fQ}Nmmf`<=RfkASU6@q`>|A+S9@H!Y<7(898o2C_qJT-Y8b^4J~M|Q1g?e{t^;Gq15DGRR4m7Oo|?Q8I0GqP(gM@MSayI~;X<*D z+i_z3&hxt1_DMCTL(mu%+IK)Z%F=+B>UE{#nWm*h%+LYtJ0L3rzVF4J|66B2c6u=I z0Xm8pUC>TIU&@zAC>6`Rs8q2McFNnc9dEngX`4bp^m0#y17C(3O$((eo*C>6_bBBVpp8x`73Ky7Pv&Zm$h zMx6k?k*RR9`iofH+)HtO`6Xtijz4=AlX zpt$mY%(u?D&;+#a05z$k;-j`!|{&If$kshnixwam^}Sae^X_!%K!UPQvX5vnc!HWfSR}}d|AqhNuf%-~ty&1F4?P!%06u5J_mtX>M$;$EQf@j8T=9peC>E+qSoP-dLpdi=W}ly^rsELk*ExA(*JWhx7h4#_St#YYc`3 z(kmZ+g#7Vc4wi1wY2Kt2{X#`lUrHuwKcw@=KQJ{nKl0eAJHg~#AuE@|eXz>$GlzG+ z|DLz+-KX;6#P;1tP7k)9()i0?d9nR; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/weednode.rsi/weednode6.png b/Resources/Textures/Structures/weednode.rsi/weednode6.png new file mode 100644 index 0000000000000000000000000000000000000000..7c296e19052ce0336ba0c82d2a5a8b9ffba4e360 GIT binary patch literal 2023 zcmVTrtLQoEEC8kyeyg#!sAphbs?;T-O1h<9TEh1=n@L6&9VUyB%!Jrs;c3-&PPco<;(PG(FS@abO?_5R*+S3clx&%NszSn8RX`7n3D+{_uO+dY0kxPsu0> znx==plfgg`aPR)zp{VkUBKOS(v%3v4k5)*hQnc2egxe$z3Ke1V4SGAZSj8U(gn+0e@I4RT^Fk$PTP6+5L|t8@a#1<9@^P5L#I1nv1H}GsSSF=X znTBP4@T~87bUcqM#u%!q#bOE*mjJQ)Vlsui5#Dz^4^`Dd2Pv&66!J#s2z`vC{}qW7 z07oQCJGZ&?kH;7r{~?z*sMWS9mCD$biEk9xzjy)t?Ez2!CKu1kA{GgV zDx|SHpW+3gYR%oG9*iIyn2zT$T>cr>7k^}QdM1wHr68>YbAfsCJr6CL#eT9z?~Tb% zzWtU9k5(wYKho@Wko54kUs3(@UwFU$N_qmah{XzM*(}{|7wE6>C#?hOcmImsc0%z7 z!c>-e;Nw1i97{AO3uywx>I+mVS8>{HiieO6CNJ`Qf(TXB$mI=Esg&&S(vT)V1T9)N zi_>n0{=C@p;_9CWVdF|^$wHa{k;)P-tXSpf_aeX%iqek3hmQ-=Rv;bNZ9DMKMM?{f zQe9C$-VXwtL4mXch}GOwliz3+K=`5bS*eh&0AzDXk%D-hk=S~eTT_F`Lz z`>nA&)?AhRr3~IzU&S%BG-7dtgzM_M4y{X<*q8sPBzn>(e2{`GGKX;p~eg0c~qY%dIzUPs#Z7MHoXn%jq_|vZ`9?Fg!52Uw1DwPU- zd{xz`UN+eI@=v7AMyTxG7mHxqjK6$E)^Rx8ddcS22AZZzPe2yZ60o;hJ7&{I_V&5< z#vyGs0N9-@v3`4w{mC-jZkJK}4O%uE*7=f#v;>S#lyKVZV=)2rw?<1HrL{1RGyeZd?h{X?BT3qfuTzN3Gw7A?8Wvi174AEzxp8^{Mk1&>uP_(oy zAV|1(|L)MqXQGbN!<7gB-x(n>v0UExU{5zJGZb?%`9j{H6I6HxK>}h6hlRTvHElu) zggY!y$Qx{KZ487GlqNukeY935T3W<+(QsJg3kC(!TcA`bhpU`c6e?5G$3kKO5j940 z`Elg+Wg$&~5Pdibe4WM4rF zvDOB!7-PIP_roNpAJGrdxxmQbREN*#JG92Rsj*Hj$3gWPorPQY zU7y}g4cgARbq84_E&=ED0Y>W%n_C+|zZ{oJrO@32>G2bn03bXgm|lOzP5TY|YwMv> zjGDU2)bue=@<(9?bAj0tqCK*=Po;7d2#Tr@dXUlHqqw}t#3jJ@yil}fXR9F*&FeGl z%>10n%NhiVvQ#P`Q-~+~k-iTSmw<+4GCNyE)AVpcEp?O^lO>u9x7eI4k(s$3J}=G{ zbUZJX>T==|5UmXe@z&h~iqF5H4pep<4A=W<6VZb(K2ZW-bMuAt_=yuBTI|GXii1*F z%cQqcBX?2351tdIu-omDN~K~sI+r*B(ANXeFj^EVDp`aK3ApL_4~aBF(7dr zAl%tfsf?!SVeK%g@I+2QzftAizxxe)pIoD@sj-|F_%F);gl&STtUdq$002ovPDHLk FV1jef(G36q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/weednode.rsi/weednode7.png b/Resources/Textures/Structures/weednode.rsi/weednode7.png new file mode 100644 index 0000000000000000000000000000000000000000..c2c011fb3d0e5ed1352663c94e62028e8c0fa244 GIT binary patch literal 1828 zcmV+<2iy3GP)t377IN8<`Dp%*X4g3kKY<){K-+itP5Eo;%6(D!w`Z% zN(>=}o;R-)=`& zM|bEh-Nu-mqdqe?^4O^pP>8m@!Xy8H)!+Swpj^W3IFyQI0x8M5F7+)N>#Jq1e*F!V zBR%7%ZUUK1hHABj+i@^Wi^kT_!SlK!kDvMuxO%OM z*XvP;wz?vtP%P6mr|2%-#=HF^_9iFEc|N!l;PrYKLSWn5cwU$K z%p93a27tVOh`4v3%Rv6$|6!ulB1n9-LoQf9{}KX9IDkC?T!=Y1S$av!;s*~dQ42US_1~*F?bV9z@49ijzb_N z)oN{MQpzk8R8%-k(kMuM2W(7N$B&ckYxyAZ1L14x~;%eamK| z)dGlffqH$GdVO{%&OdJ~vhm5s>`qsKLH4MFh}2D>@OYho!OE*p7=|I4OeWsyh2|}` z8rKPb`Z1l1!R65gskhbu-j(it7R_zYni-%2to`+ zjI$zj6M#Xu>q|*~vB7_T`)l?-xK7V9DHO}G*Ed&ISzKOWX4k<@IL!-O-~tyI1taNc zufi{X{;OkE+`u4fQ}Nmmf`<=RfkASU6@q`>|A+S9@H!Y<7(898o2C_qJT-Y8b^4J~M|Q1g?e{t^;Gq15DGRR4m7Oo|?Q8I0GqP(gM@MSayI~;X<*D z+i_z3&hxt1_DMCTL(mu%+IK)Z%F=+B>UE{#nWm*h%+LYtJ0L3rzVF4J|66B2c6u=I z0Xm8pUC>TIU&@zAC>6`Rs8q2McFNnc9dEngX`4bp^m0#y17C(3O$((eo*C>6_bBBVpp8x`73Ky7Pv&Zm$h zMx6k?k*RR9`iofH+)HtO`6Xtijz4=AlX zpt$mY%(u?D&;+#a05z$k;-j`!|{&If$kshnixwam^}Sae^X_!%K!UPQvX5vnc!HWfSR}}d|AqhNuf%-~ty&1F4?P!%06u5J_mtX>M$;$EQf@j8T=9peC>E+qSoP-dLpdi=W}ly^rsELk*ExA(*JWhx7h4#_St#YYc`3 z(kmZ+g#7Vc4wi1wY2Kt2{X#`lUrHuwKcw@=KQJ{nKl0eAJHg~#AuE@|eXz>$GlzG+ z|DLz+-KX;6#P;1tP7k)9()i0?d9nR; literal 0 HcmV?d00001 From 5ade4b895effbb82a57f2176cfa4dc7d8a488659 Mon Sep 17 00:00:00 2001 From: Enoken-crypto <68296202+Enoken-crypto@users.noreply.github.com> Date: Tue, 14 May 2024 17:03:11 +0300 Subject: [PATCH 02/18] Larvas inside Now stage 5 spawns larva inside of the host with an ability to gib it's host and turn to a normal larva --- .../Aliens/Systems/AlienInfectedSystem.cs | 16 +++++++- .../Aliens/Systems/InsideAlienLarvaSystem.cs | 39 +++++++++++++++++++ .../Components/AlienInfectedComponent.cs | 7 +++- .../Components/InsideAlienLarvaComponent.cs | 29 ++++++++++++++ Resources/Prototypes/Actions/aliens.yml | 12 ++++++ .../Entities/Mobs/Player/aliens.yml | 9 +++++ Resources/Prototypes/Polymorphs/polymorph.yml | 10 +++++ 7 files changed, 119 insertions(+), 3 deletions(-) create mode 100644 Content.Server/Aliens/Systems/InsideAlienLarvaSystem.cs create mode 100644 Content.Shared/Aliens/Components/InsideAlienLarvaComponent.cs diff --git a/Content.Server/Aliens/Systems/AlienInfectedSystem.cs b/Content.Server/Aliens/Systems/AlienInfectedSystem.cs index c2aecf879da..a70301f088c 100644 --- a/Content.Server/Aliens/Systems/AlienInfectedSystem.cs +++ b/Content.Server/Aliens/Systems/AlienInfectedSystem.cs @@ -5,6 +5,7 @@ using Content.Server.Ghost.Roles; using Content.Server.Ghost.Roles.Components; using Content.Server.Mind; +using Content.Shared.Aliens.Components; using Content.Shared.Body.Components; using Content.Shared.Body.Events; using Content.Shared.Body.Part; @@ -16,6 +17,7 @@ using Content.Shared.Mobs; using Content.Shared.Random; using FastAccessors; +using Robust.Shared.Containers; using Robust.Shared.Random; using Robust.Shared.Timing; using AlienInfectedComponent = Content.Shared.Aliens.Components.AlienInfectedComponent; @@ -33,6 +35,7 @@ public sealed class AlienInfectedSystem : EntitySystem [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly GhostRoleSystem _ghostRole = default!; [Dependency] private readonly MindSystem _mind = default!; + [Dependency] protected readonly SharedContainerSystem _container = default!; public override void Initialize() { base.Initialize(); @@ -46,6 +49,7 @@ private void OnComponentInit(EntityUid uid, AlienInfectedComponent component, Co // _body.TryCreateOrganSlot(torsoPart, "alienLarvaOrgan", out _); // _body.InsertOrgan(torsoPart, Spawn(component.OrganProtoId, Transform(uid).Coordinates), "alienLarvaOrgan"); component.NextGrowRoll = _timing.CurTime + TimeSpan.FromSeconds(component.GrowTime); + component.Stomach = _container.EnsureContainer(uid, "stomach"); } private void OnComponentShutdown(EntityUid uid, AlienInfectedComponent component, ComponentShutdown args) @@ -63,12 +67,20 @@ public override void Update(float frameTime) if (_timing.CurTime < infected.NextGrowRoll) continue; - if (infected.GrowthStage == 5) + if (HasComp(infected.SpawnedLarva) && + Comp(infected.SpawnedLarva).IsGrown) { - Spawn(infected.Prototype, Transform(uid).Coordinates); + _container.EmptyContainer(infected.Stomach); _body.GibBody(uid, true); } + if (infected.GrowthStage == 5) + { + var larva = Spawn(infected.Prototype, Transform(uid).Coordinates); + _container.Insert(larva, infected.Stomach); + infected.SpawnedLarva = larva; + } + if (_random.Prob(infected.GrowProb)) { infected.GrowthStage++; diff --git a/Content.Server/Aliens/Systems/InsideAlienLarvaSystem.cs b/Content.Server/Aliens/Systems/InsideAlienLarvaSystem.cs new file mode 100644 index 00000000000..d055378c66e --- /dev/null +++ b/Content.Server/Aliens/Systems/InsideAlienLarvaSystem.cs @@ -0,0 +1,39 @@ +using Content.Server.Body.Systems; +using Content.Server.Polymorph.Systems; +using Content.Shared.Actions; +using Content.Shared.Aliens.Components; +using Robust.Server.Containers; + +namespace Content.Server.Aliens.Systems; + +///

+/// This handles... +/// +public sealed class InsideAlienLarvaSystem : EntitySystem +{ + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + [Dependency] private readonly PolymorphSystem _polymorphSystem = default!; + [Dependency] private readonly BodySystem _body = default!; + [Dependency] private readonly ContainerSystem _container = default!; + [Dependency] private readonly EntityManager _entityManager = default!; + /// + public override void Initialize() + { + SubscribeLocalEvent(OnComponentInit); + + SubscribeLocalEvent(OnGrow); + } + + private void OnComponentInit(EntityUid uid, InsideAlienLarvaComponent component, ComponentInit args) + { + _actionsSystem.AddAction(uid, ref component.EvolutionActionEntity, component.EvolutionAction, uid); + + _actionsSystem.SetCooldown(component.EvolutionActionEntity, component.EvolutionCooldown); + } + + public void OnGrow(EntityUid uid, InsideAlienLarvaComponent component, AlienLarvaGrowActionEvent args) + { + component.IsGrown = true; + _polymorphSystem.PolymorphEntity(uid, component.PolymorphPrototype); + } +} diff --git a/Content.Shared/Aliens/Components/AlienInfectedComponent.cs b/Content.Shared/Aliens/Components/AlienInfectedComponent.cs index 8468ea7320d..2a31e1f7f74 100644 --- a/Content.Shared/Aliens/Components/AlienInfectedComponent.cs +++ b/Content.Shared/Aliens/Components/AlienInfectedComponent.cs @@ -1,5 +1,6 @@ using System.Threading; using Content.Shared.StatusIcon; +using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Player; using Robust.Shared.Prototypes; @@ -18,7 +19,7 @@ public sealed partial class AlienInfectedComponent : Component public float GrowTime = 2f; [DataField] - public EntProtoId Prototype = "MobAlienLarva"; + public EntProtoId Prototype = "MobAlienLarvaInside"; [DataField] public EntProtoId OrganProtoId = "AlienLarvaOrgan"; @@ -44,4 +45,8 @@ public sealed partial class AlienInfectedComponent : Component [DataField] public TimeSpan NextGrowRoll = TimeSpan.Zero; + + public Container Stomach = default!; + + public EntityUid SpawnedLarva; } diff --git a/Content.Shared/Aliens/Components/InsideAlienLarvaComponent.cs b/Content.Shared/Aliens/Components/InsideAlienLarvaComponent.cs new file mode 100644 index 00000000000..1ca7e9b69fc --- /dev/null +++ b/Content.Shared/Aliens/Components/InsideAlienLarvaComponent.cs @@ -0,0 +1,29 @@ +using Content.Shared.Actions; +using Content.Shared.Polymorph; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Aliens.Components; + +/// +/// This is used for... +/// +[RegisterComponent] +public sealed partial class InsideAlienLarvaComponent : Component +{ + [DataField] + public ProtoId PolymorphPrototype = "AlienLarvaGrow"; + + [DataField("EvolutionAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? EvolutionAction = "ActionLarvaGrow"; + + [DataField("EvolutionActionEntity")] + public EntityUid? EvolutionActionEntity; + + [DataField("evolutionCooldown")] + public TimeSpan EvolutionCooldown = TimeSpan.Zero; + + public bool IsGrown; +} + +public sealed partial class AlienLarvaGrowActionEvent : InstantActionEvent { } diff --git a/Resources/Prototypes/Actions/aliens.yml b/Resources/Prototypes/Actions/aliens.yml index f9494fa1a87..4efff0cfbc7 100644 --- a/Resources/Prototypes/Actions/aliens.yml +++ b/Resources/Prototypes/Actions/aliens.yml @@ -135,6 +135,18 @@ useDelay: 0 icon: { sprite : Mobs/Aliens/Xenos/alienqueen.rsi, state: alienq } event: !type:AlienQueenEvolveActionEvent + +- type: entity + id: ActionLarvaGrow + name: action-larva-grow + description: action-larva-grow-desc + noSpawn: true + components: + - type: InstantAction + priority: 10 + useDelay: 0 + icon: { sprite : Mobs/Aliens/Xenos/alien.rsi, state: larva0 } + event: !type:AlienLarvaGrowActionEvent # Hunter - type: entity diff --git a/Resources/Prototypes/Entities/Mobs/Player/aliens.yml b/Resources/Prototypes/Entities/Mobs/Player/aliens.yml index 9ffd76a136d..83a95042df0 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/aliens.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/aliens.yml @@ -119,6 +119,15 @@ polymorphTime: 50 +- type: entity + parent: MobAlienLarva # Larva that is inside of it's owner + id: MobAlienLarvaInside + components: + - type: TimedPolymorph + enabled: false + - type: InsideAlienLarva + evolutionCooldown: 5 + - type: entity parent: MobAlienLarva id: MobAlienLarvaGrowStageTwo diff --git a/Resources/Prototypes/Polymorphs/polymorph.yml b/Resources/Prototypes/Polymorphs/polymorph.yml index e6cc46573de..20401c72161 100644 --- a/Resources/Prototypes/Polymorphs/polymorph.yml +++ b/Resources/Prototypes/Polymorphs/polymorph.yml @@ -177,6 +177,16 @@ revertOnCrit: false allowRepeatedMorphs: true +- type: polymorph + id: AlienLarvaGrow + configuration: + entity: MobAlienLarva + forced: true + transferName: true + revertOnDeath: false + revertOnCrit: false + allowRepeatedMorphs: true + - type: polymorph id: AlienEvolutionGrowStageThree configuration: From 52b106d875076539f18a4fa327eeb54b955a9c5a Mon Sep 17 00:00:00 2001 From: Enoken-crypto <68296202+Enoken-crypto@users.noreply.github.com> Date: Tue, 14 May 2024 23:03:23 +0300 Subject: [PATCH 03/18] Nests and fixes Added nests and fixed funny bug --- .../Aliens/Systems/AlienInfectedSystem.cs | 2 +- .../Aliens/Systems/AlienQueenSystem.cs | 7 ++- .../Aliens/Systems/ResinSpinnerSystem.cs | 31 ++++++++++-- .../Components/ResinSpinnerComponent.cs | 27 ++++++++++ .../Aliens/Systems/SharedFacehuggerSystem.cs | 2 + .../Systems/SharedResinSpinnerSystem.cs | 13 ++++- .../Buckle/Components/StrapComponent.cs | 8 +++ .../Buckle/SharedBuckleSystem.Buckle.cs | 7 +++ .../buckle/components/buckle-component.ftl | 1 + Resources/Prototypes/Actions/aliens.yml | 12 +++++ .../Entities/Structures/alien_nest.yml | 44 ++++++++++++++++ .../Structures/alien_nest.rsi/alien_nest0.png | Bin 0 -> 1947 bytes .../Structures/alien_nest.rsi/alien_nest1.png | Bin 0 -> 1881 bytes .../Structures/alien_nest.rsi/alien_nest2.png | Bin 0 -> 1947 bytes .../Structures/alien_nest.rsi/alien_nest3.png | Bin 0 -> 1881 bytes .../Structures/alien_nest.rsi/alien_nest4.png | Bin 0 -> 1886 bytes .../Structures/alien_nest.rsi/alien_nest5.png | Bin 0 -> 1868 bytes .../Structures/alien_nest.rsi/alien_nest6.png | Bin 0 -> 1886 bytes .../Structures/alien_nest.rsi/alien_nest7.png | Bin 0 -> 1868 bytes .../Structures/alien_nest.rsi/full.png | Bin 0 -> 1623 bytes .../Structures/alien_nest.rsi/meta.json | 47 ++++++++++++++++++ 21 files changed, 193 insertions(+), 8 deletions(-) create mode 100644 Resources/Prototypes/Entities/Structures/alien_nest.yml create mode 100644 Resources/Textures/Structures/alien_nest.rsi/alien_nest0.png create mode 100644 Resources/Textures/Structures/alien_nest.rsi/alien_nest1.png create mode 100644 Resources/Textures/Structures/alien_nest.rsi/alien_nest2.png create mode 100644 Resources/Textures/Structures/alien_nest.rsi/alien_nest3.png create mode 100644 Resources/Textures/Structures/alien_nest.rsi/alien_nest4.png create mode 100644 Resources/Textures/Structures/alien_nest.rsi/alien_nest5.png create mode 100644 Resources/Textures/Structures/alien_nest.rsi/alien_nest6.png create mode 100644 Resources/Textures/Structures/alien_nest.rsi/alien_nest7.png create mode 100644 Resources/Textures/Structures/alien_nest.rsi/full.png create mode 100644 Resources/Textures/Structures/alien_nest.rsi/meta.json diff --git a/Content.Server/Aliens/Systems/AlienInfectedSystem.cs b/Content.Server/Aliens/Systems/AlienInfectedSystem.cs index a70301f088c..2294f556596 100644 --- a/Content.Server/Aliens/Systems/AlienInfectedSystem.cs +++ b/Content.Server/Aliens/Systems/AlienInfectedSystem.cs @@ -71,7 +71,7 @@ public override void Update(float frameTime) Comp(infected.SpawnedLarva).IsGrown) { _container.EmptyContainer(infected.Stomach); - _body.GibBody(uid, true); + _body.GibBody(uid, true, CompOrNull(uid), true, null, 5f); } if (infected.GrowthStage == 5) diff --git a/Content.Server/Aliens/Systems/AlienQueenSystem.cs b/Content.Server/Aliens/Systems/AlienQueenSystem.cs index 82f8edcb163..4b86e971cbd 100644 --- a/Content.Server/Aliens/Systems/AlienQueenSystem.cs +++ b/Content.Server/Aliens/Systems/AlienQueenSystem.cs @@ -80,8 +80,11 @@ public void CreateStructure(EntityUid uid, AlienQueenComponent component) { if (Prototype(entity) == null) continue; - if (Prototype(entity)!.ID == component.EggPrototype) - return; + if (Prototype(entity)!.ID != component.EggPrototype) + continue; + _popup.PopupEntity(Loc.GetString("alien-create-structure-failed"), uid, uid); + return; + } _plasmaVessel.ChangePlasmaAmount(uid, -component.PlasmaCostEgg); diff --git a/Content.Server/Aliens/Systems/ResinSpinnerSystem.cs b/Content.Server/Aliens/Systems/ResinSpinnerSystem.cs index 33c90921e48..508f2272f6c 100644 --- a/Content.Server/Aliens/Systems/ResinSpinnerSystem.cs +++ b/Content.Server/Aliens/Systems/ResinSpinnerSystem.cs @@ -1,4 +1,5 @@ -using Content.Server.Popups; +using System.Numerics; +using Content.Server.Popups; using Content.Shared.Actions; using Content.Shared.Alert; using Content.Shared.Aliens.Components; @@ -32,6 +33,7 @@ public override void Initialize() SubscribeLocalEvent(OnWallDoAfter); SubscribeLocalEvent(OnWindowDoAfter); + SubscribeLocalEvent(OnNestDoAfter); } private void OnWallDoAfter(EntityUid uid, ResinSpinnerComponent component, ResinWallDoAfterEvent args) @@ -52,15 +54,26 @@ private void OnWindowDoAfter(EntityUid uid, ResinSpinnerComponent component, Res args.Handled = true; } - public void CreateStructure(EntityUid uid, ResinSpinnerComponent component, string structurePrototype) + private void OnNestDoAfter(EntityUid uid, ResinSpinnerComponent component, AlienNestDoAfterEvent args) + { + if (args.Cancelled || args.Handled || component.Deleted) + return; + + CreateStructure(uid, component, component.NestPrototype, false); + args.Handled = true; + } + + public void CreateStructure(EntityUid uid, ResinSpinnerComponent component, string structurePrototype, bool offset = true) { if (_container.IsEntityOrParentInContainer(uid)) return; var xform = Transform(uid); - // Get the tile in front of the drone - var offsetValue = xform.LocalRotation.ToWorldVec(); + var offsetValue = new Vector2(0, 0); + if (offset) + offsetValue = xform.LocalRotation.ToWorldVec(); + var coords = xform.Coordinates.Offset(offsetValue).SnapToGrid(EntityManager, _mapMan); var tile = coords.GetTileRef(EntityManager, _mapMan); if (tile == null) @@ -82,6 +95,16 @@ public void CreateStructure(EntityUid uid, ResinSpinnerComponent component, stri return; } } + + foreach (var entity in _lookupSystem.GetEntitiesInRange(coords, 0.1f)) + { + if (Prototype(entity) == null) + continue; + if (Prototype(entity)!.ID != structurePrototype) + continue; + _popupSystem.PopupEntity(Loc.GetString("alien-create-structure-failed"), uid, uid); + return; + } // Make sure we set the invisible wall to despawn properly Spawn(structurePrototype, _turf.GetTileCenter(tile.Value)); _plasmaVessel.ChangePlasmaAmount(uid, -component.PlasmaCostWall); diff --git a/Content.Shared/Aliens/Components/ResinSpinnerComponent.cs b/Content.Shared/Aliens/Components/ResinSpinnerComponent.cs index 1d394d8f891..15a69bbd0a7 100644 --- a/Content.Shared/Aliens/Components/ResinSpinnerComponent.cs +++ b/Content.Shared/Aliens/Components/ResinSpinnerComponent.cs @@ -67,4 +67,31 @@ public sealed partial class ResinSpinnerComponent : Component public string? ResinWindowAction = "ActionWindowResin"; [DataField("resinWindowActionEntity")] public EntityUid? ResinWindowActionEntity; + + /// + /// How long will it take to make. + /// + [DataField("productionLengthNest")] + [ViewVariables(VVAccess.ReadWrite)] + [AutoNetworkedField] + public float ProductionLengthNest = 1f; + + /// + /// This will subtract (not add, don't get this mixed up) from the current plasma of the mob making structure. + /// + [DataField("plasmaCostNest")] + [ViewVariables(VVAccess.ReadWrite)] + [AutoNetworkedField] + public float PlasmaCostNest = 30f; + + /// + /// The wall prototype to use. + /// + [DataField("nestPrototype", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string NestPrototype = "AlienNest"; + + [DataField("nestWindowAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? NestAction = "ActionAlienNest"; + + [DataField("nestActionEntity")] public EntityUid? NestActionEntity; } diff --git a/Content.Shared/Aliens/Systems/SharedFacehuggerSystem.cs b/Content.Shared/Aliens/Systems/SharedFacehuggerSystem.cs index 221e85db196..2e190004049 100644 --- a/Content.Shared/Aliens/Systems/SharedFacehuggerSystem.cs +++ b/Content.Shared/Aliens/Systems/SharedFacehuggerSystem.cs @@ -47,6 +47,8 @@ public override void Update(float frameTime) continue; if(HasComp(entity)) continue; + if(HasComp(entity)) + continue; if(!alien.Active) continue; validEntities.TryAdd(uid, entity); diff --git a/Content.Shared/Aliens/Systems/SharedResinSpinnerSystem.cs b/Content.Shared/Aliens/Systems/SharedResinSpinnerSystem.cs index de092f4ecf2..5edbf521578 100644 --- a/Content.Shared/Aliens/Systems/SharedResinSpinnerSystem.cs +++ b/Content.Shared/Aliens/Systems/SharedResinSpinnerSystem.cs @@ -27,12 +27,14 @@ public override void Initialize() SubscribeLocalEvent(OnWall); SubscribeLocalEvent(OnWindow); + SubscribeLocalEvent(OnNest); } private void OnComponentInit(EntityUid uid, ResinSpinnerComponent component, ComponentInit args) { _actionsSystem.AddAction(uid, ref component.ResinWallActionEntity, component.ResinWallAction, uid); _actionsSystem.AddAction(uid, ref component.ResinWindowActionEntity, component.ResinWindowAction, uid); + _actionsSystem.AddAction(uid, ref component.NestActionEntity, component.NestAction, uid); } private void OnWall(EntityUid uid, ResinSpinnerComponent component, ResinWallActionEvent args) @@ -45,6 +47,11 @@ private void OnWindow(EntityUid uid, ResinSpinnerComponent component, ResinWindo OnStructureMaking(uid, component.PlasmaCostWindow, component.ProductionLengthWindow, component, new ResinWindowDoAfterEvent()); } + private void OnNest(EntityUid uid, ResinSpinnerComponent component, AlienNestActionEvent args) + { + OnStructureMaking(uid, component.PlasmaCostNest, component.ProductionLengthNest, component, new AlienNestDoAfterEvent()); + } + private void OnStructureMaking(EntityUid uid, float cost, float productionLength, ResinSpinnerComponent component, DoAfterEvent doAfterEvent) { if (TryComp(uid, out var plasmaComp) @@ -70,6 +77,8 @@ public sealed partial class ResinWallActionEvent : InstantActionEvent { } public sealed partial class ResinWindowActionEvent : InstantActionEvent { } +public sealed partial class AlienNestActionEvent : InstantActionEvent { } + /// /// Is relayed at the end of the making structure. /// @@ -77,5 +86,7 @@ public sealed partial class ResinWindowActionEvent : InstantActionEvent { } public sealed partial class ResinWallDoAfterEvent : SimpleDoAfterEvent { } [Serializable, NetSerializable] - public sealed partial class ResinWindowDoAfterEvent : SimpleDoAfterEvent { } + +[Serializable, NetSerializable] +public sealed partial class AlienNestDoAfterEvent : SimpleDoAfterEvent { } diff --git a/Content.Shared/Buckle/Components/StrapComponent.cs b/Content.Shared/Buckle/Components/StrapComponent.cs index f25e1b03741..0f71361cd97 100644 --- a/Content.Shared/Buckle/Components/StrapComponent.cs +++ b/Content.Shared/Buckle/Components/StrapComponent.cs @@ -26,6 +26,14 @@ public sealed partial class StrapComponent : Component [ViewVariables] public EntityWhitelist? AllowedEntities; + /// + /// The amount of time that must pass for this entity to + /// be able to unbuckle after recently buckling. + /// + [DataField] + [ViewVariables(VVAccess.ReadWrite)] + public TimeSpan Delay = TimeSpan.FromSeconds(0.25f); + /// /// The change in position to the strapped mob /// diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs index b58bdf83e49..24971ac37f3 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs @@ -399,6 +399,9 @@ public bool TryUnbuckle(EntityUid buckleUid, EntityUid userUid, bool force = fal buckleComp.BuckledTo is not { } strapUid) return false; + if (CompOrNull(strapUid) != null && Comp(strapUid).Delay > buckleComp.Delay) + buckleComp.Delay = Comp(strapUid).Delay; + if (!force) { var attemptEvent = new BuckleAttemptEvent(strapUid, buckleUid, userUid, false); @@ -408,7 +411,11 @@ public bool TryUnbuckle(EntityUid buckleUid, EntityUid userUid, bool force = fal return false; if (_gameTiming.CurTime < buckleComp.BuckleTime + buckleComp.Delay) + { + _popup.PopupEntity(Loc.GetString("unbuckling-wait-message", ("delay", (buckleComp.Delay - _gameTiming.CurTime + buckleComp.BuckleTime).Seconds)), buckleUid, buckleUid); return false; + } + if (!_interaction.InRangeUnobstructed(userUid, strapUid, buckleComp.Range, popup: true)) return false; diff --git a/Resources/Locale/en-US/buckle/components/buckle-component.ftl b/Resources/Locale/en-US/buckle/components/buckle-component.ftl index 32fbaa999ad..8c8af3d8354 100644 --- a/Resources/Locale/en-US/buckle/components/buckle-component.ftl +++ b/Resources/Locale/en-US/buckle/components/buckle-component.ftl @@ -5,3 +5,4 @@ buckle-component-cannot-buckle-message = You can't buckle yourself there! buckle-component-other-cannot-buckle-message = You can't buckle {$owner} there! buckle-component-cannot-fit-message = You can't fit there! buckle-component-other-cannot-fit-message = {$owner} can't fit there! +unbuckling-wait-message = You'll be able to unbuckle in {$delay} seconds. diff --git a/Resources/Prototypes/Actions/aliens.yml b/Resources/Prototypes/Actions/aliens.yml index 4efff0cfbc7..121ca7ebe2c 100644 --- a/Resources/Prototypes/Actions/aliens.yml +++ b/Resources/Prototypes/Actions/aliens.yml @@ -74,6 +74,18 @@ icon: { sprite : Structures/Windows/resin_membrane.rsi, state: full } event: !type:ResinWindowActionEvent +- type: entity + id: ActionAlienNest + name: action-create-alien-nest-name + description: action-create-alien-nest-desc + noSpawn: true + components: + - type: InstantAction + priority: 4 + useDelay: 1 + icon: { sprite : Structures/alien_nest.rsi, state: full } + event: !type:AlienNestActionEvent + # Evolutions - type: entity diff --git a/Resources/Prototypes/Entities/Structures/alien_nest.yml b/Resources/Prototypes/Entities/Structures/alien_nest.yml new file mode 100644 index 00000000000..b76d288ee01 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/alien_nest.yml @@ -0,0 +1,44 @@ +- type: entity + name: alien-nest-name + description: alien-nest-desc + parent: BaseStructure + id: AlienNest + components: + - type: Sprite + sprite: Structures/alien_nest.rsi + state: full + drawdepth: FloorTiles + - type: Icon + sprite: Structures/alien_nest.rsi + state: full + - type: IconSmooth + key: full + base: alien_nest + - type: Tag + tags: [ Carpet ] + - type: Physics + canCollide: false + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.5,-0.5,0.5,0.5" + layer: + - SlipLayer + mask: + - ItemMask + density: 1000 + hard: false + - type: Damageable + damageContainer: StructuralInorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 15 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: Strap + delay: 120 diff --git a/Resources/Textures/Structures/alien_nest.rsi/alien_nest0.png b/Resources/Textures/Structures/alien_nest.rsi/alien_nest0.png new file mode 100644 index 0000000000000000000000000000000000000000..f66f4f5953e321ea5a52f081c96eb92a33801118 GIT binary patch literal 1947 zcmV;M2W0q(P)H$RaVpCzj`u!YudS{-88th+BzQLtxSJ;eGHTYje~%5k!XV_! zpdSzxa$n_9Szd8oz227Sp58H#QL|3DT!zg#03gAb_#2yZwDm@ybt5OBvb^HtzRHW= z>D2X(frW+d005TNLxM5boC_kxGZW%E2)+pX2?6oy^|oYoyZH6DU!?O!9i`$d^o{|* z-8cZqauNWbX*Dz&b&O{wu>a>fn5GeU{m3N%0A9R&E&;&N@qq-u0f2J33;<}go5<&< zz!D6F>l3%E9{T;@rw_zH0&YXoPQ~U)#JSDEZH|0?N{D_crQ*TY#lY*uLIS)P9Z`G+ zPnMHl2?lQ8ocMTV0^^y9P}Yl;1duBvOP?9{Z}RNy6s>ksyjX$_e#mDcRs`6bgglyoR- z$3g<$?(RtEjXKn^w9f`8sgzF*TJ0ueIf=<^4*C34C~L=p0Kj#DddCndU~`VEtG*C( z+v5TO*E6)*&A{u%h5!I)>kSET^`C5jl1jnm9HwbN(`xweu_ipj&;&w&oA9V(Y3LmT zHs=FwPEpcA?^%N3?Ccaggiu)e_eVaB%JPasCqmZR8?TcOx2ztj)hg66cN6pTi>Uv7 z25<5c1p=#p%{g}WcED{e43;-z`{R!t-}4mbo87L6@uNg2Do`jCebHKGd_r9J`+Oi^ z(K`mLY%lWD2SPG}rfG;MEi*oWcFT>_cK3FWN~z$sOTxvaDO5m~lLJMNC=dz(ijsz= z)r95t=IM%(MyuUKyVb<#hynnDg!4u{jO7C%FaeaIrBW(nIf;|np|Amkf}5?GrXfg~ z%;s=(d>~m?52fO4(B%UounizxfAr|FxOd*D3ztQ{nn)qNkAwaLAxMB_^OwT!Hw;Kx^ z5SRd2P7cK6C$&T2@9F2orHRF7OJdU}wL>a_MT)@x0EMuCTh1CCQE+i-3X6YnY2w>& zUHgz=4CjqH^o}9o{-_ZO0hGbfrU^vMWHtwzbG+T%k!GgnoH(33Aru1W+I#Ze%>(hV z`nM695u^=!uSx#_H))ES_yZwG0B|D(>R1}3;;hdI5-8Or#EFE^QCVJb?rL)rGHP~s zJH59z_9-HU0+rBv+QW9ec29|L9c$x8=zWvt^9*E~iQuL02qvHcC4y%Bs4?PA zoufu*?eWI7PpAH%%{fkLhay1oNgCZic9?~E&(nXL`WD_<;V%RofMrn>Ui~fTT;i;D3{BkmIwd~3*QMc z3WceGpy_{$wbgZJW_r${ugH48HhUN7*)Y=T$R%KNW6Pm=g0|ieq7Dppnt_{)ap>Wd h3h#aDMu$~e{|Ao2BN9fhJ;MM1002ovPDHLkV1j&*v8n(7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/alien_nest.rsi/alien_nest1.png b/Resources/Textures/Structures/alien_nest.rsi/alien_nest1.png new file mode 100644 index 0000000000000000000000000000000000000000..8f5b1bf44535753fd068f3d1ae9c49b83d65fe45 GIT binary patch literal 1881 zcmV-f2d4OmP)GU)Wv6ri-c)qAjQkieP}u z#97c}Y!W+QKZQ+Z;ocWJe3s|dR*zH>VkhoB?|$D4kODk?@~rpb`ODr_?#=6^E8TZh z{1WGvT^FxcUS(XzIa9cY4<7e!-A0ASnkLIwuw=E^ZuQDHw19`pFo0*w`&p7}TCa|=0A3$GlpL6(}3!#0^!4w9j1VrQuMM2gdH*ZQmKXC#82w_dLibmrAg?tg4 zpFhEM+W-LWbJ$i>yp9uzn}B6EQ7%t_DGbKfll8m~y4}8@g?uq`F94whvPhf&pnt06 z@&vfgVcAV+nvSv3II`IhcwR^N1A^TzGo`*w|QuWj7;!VlXMXE)pkzgz`fnklrWf2LO%60f0VXKIho4 z?npmBaRO9LgU>l!w++**;-7!3Lfu6o#5uZMF4UjM`YFO7K~-}?Af_osuB;W#a5 znhwTJd;B=Upma5OcX7GbXdHksCK49_LVc;2VG0x8o=&ikFXHvet3)f(SWKYX4Ni&# zWlC^brdfs0Io3B;!F?|5S2^P}lR_*eU>Fq?@2i)hFoV+9Mp}bvTffmG7$;AO_ z4IqIiWGSp)yi88s!O2M%+z+m2vm@BA?qIAm4xe)vMg{*_&5OSNyF*$7_NzO=$#M== z&56@x3KPNuz}(!tFpV!?lbSR@S_2%X1;=S&abY=9x7$`z)beM2MpbjEhz7Al0Zr3k z+0BRz%VLM7{l88)kqtAtTZl!4(IehU^cD8 zLS;O#RrYGlAc z&dxMz0Qv;cPkl58yVZ!}zi@3xM}hFDYH8^{x+gr-J>eO{m=J0{Jfw<~Cy-Vojqjp< zw{K1NT8C}uqd7ss;A;SA9kvrUf!O;2Bs_rxBtmEslolr_jlqd7O>>_)6Ql{K*K4BmrM8#nbuc$OAGt4_ z_mlVE-P@LZyfk8o0+;pesWvz|cA<~vQj-G!F^0kO`t~&13Tr@`d_XJ&T-LV_YeU!v zqyf?dm}V91>pbtQYupdYVxM!d*wi{~$FkuS2c!v@o|?sEWeRh1^QW#YE-Z^E5jFvR zG>7ru%c⨌pt{vST9M((E+*mayU$KF30vCRd}>-%@R{WdwFb=Zbi>fr6WH;FsL zSe#(c_piaSo5&Z6u&pL6yNUIURcM+nW(5=mfgo%ADNF#kxbLs3IaqcRw$+R@LV$F1 zhouQ9mnTrj7olmo==+loFpLU-KtqU>vC=qp_qH>h*TH0EO7`*6h@}_;5Qzd`8V8ZF z7|?f&WcO*Xe;@`8@Vt%~hY=Z$(*h6(9iICi9lIh4dhz^aFAY8*6{iqJUN7}%2ROW2 zK#p{9sw`VgCcYvQ25AJDOL&0_fQU5oZ!o-G2dN@}Dn73KwO>tY+LiVQWsnL2fS^avI&2FQ@Hvl+ z*Du>6ye?8h0MMTyD2xdoaFsnm8KlAo073YpUV+c~sXgHH_6TK>xCT(@3y;XizAd|n z{r$huXdJ+G+fW!oA>Xew2ZyHg=Q9`WA<7_e z0_bmsY4!c+*cFRbW2Nyc?IFq_aUZa;u_j)(4%;w{2>|`Lf7u@5$MtB>@mrC&2JG%_ zXDA5*0urbga^3c&dx)|~oPaR&(HxGBU1YN(Ld6}Yh3%csn46s!#LymM9L3Q8Q@2AQ TA_JzE00000NkvXXu0mjfX5n>* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/alien_nest.rsi/alien_nest2.png b/Resources/Textures/Structures/alien_nest.rsi/alien_nest2.png new file mode 100644 index 0000000000000000000000000000000000000000..f66f4f5953e321ea5a52f081c96eb92a33801118 GIT binary patch literal 1947 zcmV;M2W0q(P)H$RaVpCzj`u!YudS{-88th+BzQLtxSJ;eGHTYje~%5k!XV_! zpdSzxa$n_9Szd8oz227Sp58H#QL|3DT!zg#03gAb_#2yZwDm@ybt5OBvb^HtzRHW= z>D2X(frW+d005TNLxM5boC_kxGZW%E2)+pX2?6oy^|oYoyZH6DU!?O!9i`$d^o{|* z-8cZqauNWbX*Dz&b&O{wu>a>fn5GeU{m3N%0A9R&E&;&N@qq-u0f2J33;<}go5<&< zz!D6F>l3%E9{T;@rw_zH0&YXoPQ~U)#JSDEZH|0?N{D_crQ*TY#lY*uLIS)P9Z`G+ zPnMHl2?lQ8ocMTV0^^y9P}Yl;1duBvOP?9{Z}RNy6s>ksyjX$_e#mDcRs`6bgglyoR- z$3g<$?(RtEjXKn^w9f`8sgzF*TJ0ueIf=<^4*C34C~L=p0Kj#DddCndU~`VEtG*C( z+v5TO*E6)*&A{u%h5!I)>kSET^`C5jl1jnm9HwbN(`xweu_ipj&;&w&oA9V(Y3LmT zHs=FwPEpcA?^%N3?Ccaggiu)e_eVaB%JPasCqmZR8?TcOx2ztj)hg66cN6pTi>Uv7 z25<5c1p=#p%{g}WcED{e43;-z`{R!t-}4mbo87L6@uNg2Do`jCebHKGd_r9J`+Oi^ z(K`mLY%lWD2SPG}rfG;MEi*oWcFT>_cK3FWN~z$sOTxvaDO5m~lLJMNC=dz(ijsz= z)r95t=IM%(MyuUKyVb<#hynnDg!4u{jO7C%FaeaIrBW(nIf;|np|Amkf}5?GrXfg~ z%;s=(d>~m?52fO4(B%UounizxfAr|FxOd*D3ztQ{nn)qNkAwaLAxMB_^OwT!Hw;Kx^ z5SRd2P7cK6C$&T2@9F2orHRF7OJdU}wL>a_MT)@x0EMuCTh1CCQE+i-3X6YnY2w>& zUHgz=4CjqH^o}9o{-_ZO0hGbfrU^vMWHtwzbG+T%k!GgnoH(33Aru1W+I#Ze%>(hV z`nM695u^=!uSx#_H))ES_yZwG0B|D(>R1}3;;hdI5-8Or#EFE^QCVJb?rL)rGHP~s zJH59z_9-HU0+rBv+QW9ec29|L9c$x8=zWvt^9*E~iQuL02qvHcC4y%Bs4?PA zoufu*?eWI7PpAH%%{fkLhay1oNgCZic9?~E&(nXL`WD_<;V%RofMrn>Ui~fTT;i;D3{BkmIwd~3*QMc z3WceGpy_{$wbgZJW_r${ugH48HhUN7*)Y=T$R%KNW6Pm=g0|ieq7Dppnt_{)ap>Wd h3h#aDMu$~e{|Ao2BN9fhJ;MM1002ovPDHLkV1j&*v8n(7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/alien_nest.rsi/alien_nest3.png b/Resources/Textures/Structures/alien_nest.rsi/alien_nest3.png new file mode 100644 index 0000000000000000000000000000000000000000..8f5b1bf44535753fd068f3d1ae9c49b83d65fe45 GIT binary patch literal 1881 zcmV-f2d4OmP)GU)Wv6ri-c)qAjQkieP}u z#97c}Y!W+QKZQ+Z;ocWJe3s|dR*zH>VkhoB?|$D4kODk?@~rpb`ODr_?#=6^E8TZh z{1WGvT^FxcUS(XzIa9cY4<7e!-A0ASnkLIwuw=E^ZuQDHw19`pFo0*w`&p7}TCa|=0A3$GlpL6(}3!#0^!4w9j1VrQuMM2gdH*ZQmKXC#82w_dLibmrAg?tg4 zpFhEM+W-LWbJ$i>yp9uzn}B6EQ7%t_DGbKfll8m~y4}8@g?uq`F94whvPhf&pnt06 z@&vfgVcAV+nvSv3II`IhcwR^N1A^TzGo`*w|QuWj7;!VlXMXE)pkzgz`fnklrWf2LO%60f0VXKIho4 z?npmBaRO9LgU>l!w++**;-7!3Lfu6o#5uZMF4UjM`YFO7K~-}?Af_osuB;W#a5 znhwTJd;B=Upma5OcX7GbXdHksCK49_LVc;2VG0x8o=&ikFXHvet3)f(SWKYX4Ni&# zWlC^brdfs0Io3B;!F?|5S2^P}lR_*eU>Fq?@2i)hFoV+9Mp}bvTffmG7$;AO_ z4IqIiWGSp)yi88s!O2M%+z+m2vm@BA?qIAm4xe)vMg{*_&5OSNyF*$7_NzO=$#M== z&56@x3KPNuz}(!tFpV!?lbSR@S_2%X1;=S&abY=9x7$`z)beM2MpbjEhz7Al0Zr3k z+0BRz%VLM7{l88)kqtAtTZl!4(IehU^cD8 zLS;O#RrYGlAc z&dxMz0Qv;cPkl58yVZ!}zi@3xM}hFDYH8^{x+gr-J>eO{m=J0{Jfw<~Cy-Vojqjp< zw{K1NT8C}uqd7ss;A;SA9kvrUf!O;2Bs_rxBtmEslolr_jlqd7O>>_)6Ql{K*K4BmrM8#nbuc$OAGt4_ z_mlVE-P@LZyfk8o0+;pesWvz|cA<~vQj-G!F^0kO`t~&13Tr@`d_XJ&T-LV_YeU!v zqyf?dm}V91>pbtQYupdYVxM!d*wi{~$FkuS2c!v@o|?sEWeRh1^QW#YE-Z^E5jFvR zG>7ru%c⨌pt{vST9M((E+*mayU$KF30vCRd}>-%@R{WdwFb=Zbi>fr6WH;FsL zSe#(c_piaSo5&Z6u&pL6yNUIURcM+nW(5=mfgo%ADNF#kxbLs3IaqcRw$+R@LV$F1 zhouQ9mnTrj7olmo==+loFpLU-KtqU>vC=qp_qH>h*TH0EO7`*6h@}_;5Qzd`8V8ZF z7|?f&WcO*Xe;@`8@Vt%~hY=Z$(*h6(9iICi9lIh4dhz^aFAY8*6{iqJUN7}%2ROW2 zK#p{9sw`VgCcYvQ25AJDOL&0_fQU5oZ!o-G2dN@}Dn73KwO>tY+LiVQWsnL2fS^avI&2FQ@Hvl+ z*Du>6ye?8h0MMTyD2xdoaFsnm8KlAo073YpUV+c~sXgHH_6TK>xCT(@3y;XizAd|n z{r$huXdJ+G+fW!oA>Xew2ZyHg=Q9`WA<7_e z0_bmsY4!c+*cFRbW2Nyc?IFq_aUZa;u_j)(4%;w{2>|`Lf7u@5$MtB>@mrC&2JG%_ zXDA5*0urbga^3c&dx)|~oPaR&(HxGBU1YN(Ld6}Yh3%csn46s!#LymM9L3Q8Q@2AQ TA_JzE00000NkvXXu0mjfX5n>* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/alien_nest.rsi/alien_nest4.png b/Resources/Textures/Structures/alien_nest.rsi/alien_nest4.png new file mode 100644 index 0000000000000000000000000000000000000000..293b94f8e3051b91986e1da54099388c25e76aed GIT binary patch literal 1886 zcmV-k2ch_hP)UOrEm$oregAIFV{4;~F6JUBqUP#k;SXdKh-wDdob7REAXihw{$ z&M$l*BtgCHPP+v_As-Urx^;ZNH>C|9gTEX94>91Ydz-_w5bW;mPCe`Q&-ABdWk?Hw z8LIZw%vz2<+JR!G`Wq!^kkl~xP9cRo8+MO1bm0__|rc$ZJB6}tX05~|@ zOLb3s+5`eAxx5@`HCLo4jgWz)-Dw%iof!fEI^AXpLi<-fz;+x0De?Utu3P7iKkGU& z_*evh;e6!JxF7Nt_zSbpLf@Z(RfQcs^e8~UCHz$^D9GLYKV0R{ufU?5puS{aM| zu3I;jpST7nym$fDEL5GnSP> z29ipp#?H=LKKo3NFN_kG`8k`T`aTDTdoyu(h=BkVlA?(VfRvI_sXSG*bWeNSzO_08 zSYBF5Toa55Xf%$sy^3^boBjS78|!z*zNfSVLJ~UNX6oQ@&s4lIVsV1o+plSN#+_1B zBho_XZclC@OKu^aW=0%{EebT7C%~wW7f8ubeIJn)x|5?YOFkeL0;CL!m45$>PP;Yg z=)6x=quLPl0kZ&O0$jI_c;BbH>X{5AmX#rplKD9sRr9MdIB6IYu)4C&^3n<$8+WFj z-MhP~qeRpMatm3?|ESCa3C08jQu1bd3mHgl|Ix$#^2>Oxu2Np#^RTRpsd!_=QVdnA zOJh@;X!0`{$f*HF_q0d9bjFWAy-M5}#^MBhzo(}*`9hISJDl9S+1|o&a=M0BVGzQs z@sltC2)(`Q)^#U0h%_s0J4?IMqSJ0MKW77I65hQJok_x&fJ&uCAz#FCa#&VIm#+|- z280@-NLehEIXK))_4{WmFRhr0H%2VQ5HJ=6-Zf8j4iIf*0NU0*$rNv1XM#fGspDPX5*4DI_k7j|Y zy{$67$)?Fw`vCuM7@NTT``-eigRB0%I&>hzBuJIT`9e{XrFMamL@Yi)9oBX0G@Bo|8M&0VWz*x4JBw{Is)LX4o zYPt#PI5`$eW!(~2{y@R^d$H~Ln828TLcTb)zo!P85H?CxS9r2Uh-18MidbiZ(E$mJ zG~&9sLDGoD30}9yr@a3p)Z8Fx#8L}HKPUJ28jWLY$I**Ts&TrperIYAC{Z5dI7|ML2cLr3nQ5sap7e9^r0)s)QDe9oAjqbYj8|MzDNPI~O!se-3g^OmD zYTS0++`$xy6QFW|>-GS{xkLE(%9$<9tpiCpqiBjSk;CWpER-iZHq~b@%Q!TwV^?*?IeE+!(1=mq-i2>z}vA+USd=vOe_W-JqlT z{?u0a$0G4eFgjD1oFjbm^(MQ!yLy`Jy2s4V*_>ba`n%DaCLe>uH2`36DN_LR*kc10 zacs-(;H>L)Xy;5I5m-#xCTr@9bQ2lP!XagQE@rJ#4$NhR?}p4hv+IieDLVn=l=`- Y3tiqp);H*m#sB~S07*qoM6N<$g4N@u8vpbFlh6NkeDp|X{qJ-hHi3)?XXhuNj1Yu%0DvomyncFGTFD|6l+~ zGRJ6C{2j+_%%&4$L>LYSs8)AM_wsemt4M+AU@J7h_iGpq2XIB91?pS&{TkAAiRo-2 zwS-M&I-6*(ZCwCy+(sDGQLXO4^D5{ME~O7>wK@QRoAEVVQ8-D}RM<>(U|j&bnO<*S zdi=fI6FTHbB{)oYR5(uI8~E*KR1hH(ArROC4PbSi&L%SK@o|#O5k<{X zIApeH;_U-lpaB5n=Gnga?JgF#08paFOoL59n+N>-{NNtIMyv)3yFNZXg5wB8QL}W7 zZU2uyf49m-v^5|Miqw@iFI<8C;1WQg%8nzx7_&{;u@1C-fSR1J-4c;J-`m^YpsoD& zO;A}~81Vt@xx=82Zf6&HPO^l>g5cr>+qiHA#!Av-3)=Sg^6=F?uvy1rt+;smMsj=g zJRkr1+b>pqfRQlBTs|X`+Q7$89(PLj@^zDJP6x(#z|Hu&uzexm`!yNT0F>f(9JetV zUE%cfMArLkLR$c=`b1RPP`9&Na*o>yBRqhsHbjIMFAk)4XKui@zwQG7`#eBf12~Uo z)&`(dwNW>`9`;O>wRK^{2l##s-OermZ18#jGJ6YyI;OLUEO%38mezg^v<2XK6{+T@ zrzZeVqP^_=(sT*WtH2ck)#?s>zoxsi5g1{DtlD`_rACHdt(JOz)7b=JP)8#|slsCu z+5%8Fp%yMOBHZ2O@;XNg)(AEg+b}|f*UQ&@jxvH@ts1=|2|2@XzYgyI`gO%;C*9dID zhzW4o%dvktn@Gn86wYz6xRt8ULK_YTCYINNwgA*O-XC0+raaijTdfYBKRYNnKmZ%9 zZyPWY1_4M8prY5?mzz~L&(CZF7tj^}*Y1H;7*r`P^MLhnmTvbc`u+F1%WFeh0CC(# zlFZ@zHR%M^7#{}pk~z3S$ZOs1Q~Z6lsX6~8j1VEUodvASB1z^*k~tbt6XWrP`AIY3+*t-G`JBp5k<{XPoMh(59R%iW4|W=7%GXWZ+K8IP7_H$cG3!2n86!|0pip~@{1JuY2sEN5gj-~sCU}H(0j$>$ z7~EfEXBP%_dCbqeyL_v?zI7Am4=$0W%c4*4xst?96V>4fcO{H8T^e(S)&LsLfK>@SO_y@Cj=_l)x7aD8Z{w>m060H? zjp=MsvU4@guXmrPvx#(;y4VT<04qw&EH5KMe{i{BBHU;-)mq;Q0dO^$$qhRLzB5tqWi{96)@Y8+zy(e>6QD4&XRK(qU75#eV>3{YSzWRaY+n0000Zp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/alien_nest.rsi/alien_nest6.png b/Resources/Textures/Structures/alien_nest.rsi/alien_nest6.png new file mode 100644 index 0000000000000000000000000000000000000000..293b94f8e3051b91986e1da54099388c25e76aed GIT binary patch literal 1886 zcmV-k2ch_hP)UOrEm$oregAIFV{4;~F6JUBqUP#k;SXdKh-wDdob7REAXihw{$ z&M$l*BtgCHPP+v_As-Urx^;ZNH>C|9gTEX94>91Ydz-_w5bW;mPCe`Q&-ABdWk?Hw z8LIZw%vz2<+JR!G`Wq!^kkl~xP9cRo8+MO1bm0__|rc$ZJB6}tX05~|@ zOLb3s+5`eAxx5@`HCLo4jgWz)-Dw%iof!fEI^AXpLi<-fz;+x0De?Utu3P7iKkGU& z_*evh;e6!JxF7Nt_zSbpLf@Z(RfQcs^e8~UCHz$^D9GLYKV0R{ufU?5puS{aM| zu3I;jpST7nym$fDEL5GnSP> z29ipp#?H=LKKo3NFN_kG`8k`T`aTDTdoyu(h=BkVlA?(VfRvI_sXSG*bWeNSzO_08 zSYBF5Toa55Xf%$sy^3^boBjS78|!z*zNfSVLJ~UNX6oQ@&s4lIVsV1o+plSN#+_1B zBho_XZclC@OKu^aW=0%{EebT7C%~wW7f8ubeIJn)x|5?YOFkeL0;CL!m45$>PP;Yg z=)6x=quLPl0kZ&O0$jI_c;BbH>X{5AmX#rplKD9sRr9MdIB6IYu)4C&^3n<$8+WFj z-MhP~qeRpMatm3?|ESCa3C08jQu1bd3mHgl|Ix$#^2>Oxu2Np#^RTRpsd!_=QVdnA zOJh@;X!0`{$f*HF_q0d9bjFWAy-M5}#^MBhzo(}*`9hISJDl9S+1|o&a=M0BVGzQs z@sltC2)(`Q)^#U0h%_s0J4?IMqSJ0MKW77I65hQJok_x&fJ&uCAz#FCa#&VIm#+|- z280@-NLehEIXK))_4{WmFRhr0H%2VQ5HJ=6-Zf8j4iIf*0NU0*$rNv1XM#fGspDPX5*4DI_k7j|Y zy{$67$)?Fw`vCuM7@NTT``-eigRB0%I&>hzBuJIT`9e{XrFMamL@Yi)9oBX0G@Bo|8M&0VWz*x4JBw{Is)LX4o zYPt#PI5`$eW!(~2{y@R^d$H~Ln828TLcTb)zo!P85H?CxS9r2Uh-18MidbiZ(E$mJ zG~&9sLDGoD30}9yr@a3p)Z8Fx#8L}HKPUJ28jWLY$I**Ts&TrperIYAC{Z5dI7|ML2cLr3nQ5sap7e9^r0)s)QDe9oAjqbYj8|MzDNPI~O!se-3g^OmD zYTS0++`$xy6QFW|>-GS{xkLE(%9$<9tpiCpqiBjSk;CWpER-iZHq~b@%Q!TwV^?*?IeE+!(1=mq-i2>z}vA+USd=vOe_W-JqlT z{?u0a$0G4eFgjD1oFjbm^(MQ!yLy`Jy2s4V*_>ba`n%DaCLe>uH2`36DN_LR*kc10 zacs-(;H>L)Xy;5I5m-#xCTr@9bQ2lP!XagQE@rJ#4$NhR?}p4hv+IieDLVn=l=`- Y3tiqp);H*m#sB~S07*qoM6N<$g4N@u8vpbFlh6NkeDp|X{qJ-hHi3)?XXhuNj1Yu%0DvomyncFGTFD|6l+~ zGRJ6C{2j+_%%&4$L>LYSs8)AM_wsemt4M+AU@J7h_iGpq2XIB91?pS&{TkAAiRo-2 zwS-M&I-6*(ZCwCy+(sDGQLXO4^D5{ME~O7>wK@QRoAEVVQ8-D}RM<>(U|j&bnO<*S zdi=fI6FTHbB{)oYR5(uI8~E*KR1hH(ArROC4PbSi&L%SK@o|#O5k<{X zIApeH;_U-lpaB5n=Gnga?JgF#08paFOoL59n+N>-{NNtIMyv)3yFNZXg5wB8QL}W7 zZU2uyf49m-v^5|Miqw@iFI<8C;1WQg%8nzx7_&{;u@1C-fSR1J-4c;J-`m^YpsoD& zO;A}~81Vt@xx=82Zf6&HPO^l>g5cr>+qiHA#!Av-3)=Sg^6=F?uvy1rt+;smMsj=g zJRkr1+b>pqfRQlBTs|X`+Q7$89(PLj@^zDJP6x(#z|Hu&uzexm`!yNT0F>f(9JetV zUE%cfMArLkLR$c=`b1RPP`9&Na*o>yBRqhsHbjIMFAk)4XKui@zwQG7`#eBf12~Uo z)&`(dwNW>`9`;O>wRK^{2l##s-OermZ18#jGJ6YyI;OLUEO%38mezg^v<2XK6{+T@ zrzZeVqP^_=(sT*WtH2ck)#?s>zoxsi5g1{DtlD`_rACHdt(JOz)7b=JP)8#|slsCu z+5%8Fp%yMOBHZ2O@;XNg)(AEg+b}|f*UQ&@jxvH@ts1=|2|2@XzYgyI`gO%;C*9dID zhzW4o%dvktn@Gn86wYz6xRt8ULK_YTCYINNwgA*O-XC0+raaijTdfYBKRYNnKmZ%9 zZyPWY1_4M8prY5?mzz~L&(CZF7tj^}*Y1H;7*r`P^MLhnmTvbc`u+F1%WFeh0CC(# zlFZ@zHR%M^7#{}pk~z3S$ZOs1Q~Z6lsX6~8j1VEUodvASB1z^*k~tbt6XWrP`AIY3+*t-G`JBp5k<{XPoMh(59R%iW4|W=7%GXWZ+K8IP7_H$cG3!2n86!|0pip~@{1JuY2sEN5gj-~sCU}H(0j$>$ z7~EfEXBP%_dCbqeyL_v?zI7Am4=$0W%c4*4xst?96V>4fcO{H8T^e(S)&LsLfK>@SO_y@Cj=_l)x7aD8Z{w>m060H? zjp=MsvU4@guXmrPvx#(;y4VT<04qw&EH5KMe{i{BBHU;-)mq;Q0dO^$$qhRLzB5tqWi{96)@Y8+zy(e>6QD4&XRK(qU75#eV>3{YSzWRaY+n0000Zp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/alien_nest.rsi/full.png b/Resources/Textures/Structures/alien_nest.rsi/full.png new file mode 100644 index 0000000000000000000000000000000000000000..d814546feca1bb460344706552febd44be26afaf GIT binary patch literal 1623 zcmV-d2B`UoP)mQp0d0qu(A#tn}B%l5c?>#gdA142S{QP9|q!4xOflFdl@I)J_%`XX5NqQz4y%uVd~`r1aQepeL@D+hq}wT+PWEzB>*&aba+{P2t_n!0)a zV2}SNrRNu?TH3P1`v-sI@Z^Na>*3!gCrnsVDFDEXorS7fm2p~RpU#dr(Q3Alw(PK2 zEFzE+0H6!OhXX003jxDO006q(yO{D)slhxV#pDD4WYW`Ucy$24?Ccx>Kn4;*7r42(hAspGDRFgq$!Dyo6k5$TyjD%4ni|_b z*wg$@2Y>$chjv@5BA+X;$7GlyblnPSwJI{{X`Fof3g2(DVXsl=wJOD85yfJWgYsH6 zje%oYb2X<^3B!Y~r(cJH_zNPNEy(@Y_dvhP$0 zu6qq7PyoQ#umh75CITs0VJ1Bdp^Mm_OnMsmTmgoWfY1dyszz;^DY$M0x)6|oWJL41 zLW~|AZbX*M(qbWe`Q|`)xdVB4RowCrp$pXPk0CX+w&D z`k6cj0IyMpVI;WnUAKZ{(t->I=nS`@loGa`<&=@Mnr&{!e6A2V@aFYus0+b;s|qRZ zcJE*q3Ftx~nY3V$x`5ZHquag1(({)wJ!*YWH=JLbMk)B`%b|8#tHPQ} zaSZ@~nM}qYY~hB2F@=|wN|suDF~#* z<71DN21*M87=gCdCopn2kP_v}8H6qvIn~yP0|1yLsHkKhVJ4FZq=fIc;kp%EURAjI znTVuBuP4#%-ob0s2MG4lq@tnLK+J)(Wrqv%iy@_e*pI|CQ*fLdY&*+zE2V_%Rv`Ly zF)XfIfea#Dfs}kfwVG}2xG`E#^uU1I8(tmd@^{o~Rrr28)@lG?+gU6Yo+F) zhy$-*t#X&BDX^weeEE&-AM9znJMY7-&FwIsE8zaYhYVy4wq8%7(`hmEq||jQ2&BZ9 z<3q?ma{g6gpFbbQoT7Wi?{r`oi2)CM{PaOvm|qMXXO5|r=+tp?$fT#y?cOo@0ASc1 zCl~vk&J0lM_2dYXwwi5p?K|ur>}g}<4bdZcNRmlUvvFW>S>$LL-zSIz)LlMUSiGyQ@iL;@M5Mh23}ha6FPfA~&lcy)M< zI!{pK#BHsL@#Ev87&MME2OxeEQaUKV)c^VXGv*54Z^JMWC|AxfV`mXa3CGDXLL@Yv z&Dhy6pDPSzLUnkg5sVJb*jZd&Rbbm$R-{fr05~ltCtpX>Lpn;OQmos6AtJJ-Qn-Kc zVHgR9xYKFj^z0j!p16`TdT%XK=3^IMT9S2 z42VS+0!M!z#)^m(8%Ba_f+pm0vn< zXk7Q2jjN7YQzo$to7>^S{Nl*#mR`d@dv>p{ZT$52v}Lp2{{RG; V{O7$tIc)#{002ovPDHLkV1iWj3Z(!5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/alien_nest.rsi/meta.json b/Resources/Textures/Structures/alien_nest.rsi/meta.json new file mode 100644 index 00000000000..7f788762217 --- /dev/null +++ b/Resources/Textures/Structures/alien_nest.rsi/meta.json @@ -0,0 +1,47 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation on https://github.com/tgstation/tgstation/blob/master/icons/obj/smooth_structures/alien/nest.dmi", + "states": [ + { + "name": "alien_nest0", + "directions": 4 + }, + { + "name": "alien_nest1", + "directions": 4 + }, + { + "name": "alien_nest2", + "directions": 4 + }, + { + "name": "alien_nest3", + "directions": 4 + }, + { + "name": "alien_nest4", + "directions": 4 + }, + { + "name": "alien_nest5", + "directions": 4 + }, + { + "name": "alien_nest6", + "directions": 4 + }, + { + "name": "alien_nest7", + "directions": 4 + }, + { + "name": "full", + "directions": 1 + } + ] +} From 12e97e9f1e6858038c3e6a145a7150eceb46acca Mon Sep 17 00:00:00 2001 From: Enoken-crypto <68296202+Enoken-crypto@users.noreply.github.com> Date: Wed, 15 May 2024 10:21:18 +0300 Subject: [PATCH 04/18] Nest Nest & facehugger fix --- Content.Server/Aliens/Systems/FacehuggerSystem.cs | 2 +- Content.Server/Aliens/Systems/ResinSpinnerSystem.cs | 7 ++++--- Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Content.Server/Aliens/Systems/FacehuggerSystem.cs b/Content.Server/Aliens/Systems/FacehuggerSystem.cs index 2c8b96fe85e..9d952291201 100644 --- a/Content.Server/Aliens/Systems/FacehuggerSystem.cs +++ b/Content.Server/Aliens/Systems/FacehuggerSystem.cs @@ -32,7 +32,7 @@ public override void Initialize() public void OnEquipped(EntityUid uid, FacehuggerComponent component, GotEquippedEvent args) { - if(!component.Active) + if(!component.Active || args.Slot != "mask") return; _stun.TryParalyze(args.Equipee, TimeSpan.FromSeconds(25), false); component.Equipped = true; diff --git a/Content.Server/Aliens/Systems/ResinSpinnerSystem.cs b/Content.Server/Aliens/Systems/ResinSpinnerSystem.cs index 508f2272f6c..751a87698cc 100644 --- a/Content.Server/Aliens/Systems/ResinSpinnerSystem.cs +++ b/Content.Server/Aliens/Systems/ResinSpinnerSystem.cs @@ -1,4 +1,5 @@ -using System.Numerics; +using System.Linq; +using System.Numerics; using Content.Server.Popups; using Content.Shared.Actions; using Content.Shared.Alert; @@ -87,9 +88,9 @@ public void CreateStructure(EntityUid uid, ResinSpinnerComponent component, stri } // Check there are no mobs there - foreach (var entity in _lookupSystem.GetLocalEntitiesIntersecting(tile.Value, 0f)) + if (offset) { - if (HasComp(entity) && entity != uid) + if (_lookupSystem.GetLocalEntitiesIntersecting(tile.Value, 0f).Any(entity => HasComp(entity) && entity != uid)) { _popupSystem.PopupEntity(Loc.GetString("alien-create-structure-failed"), uid, uid); return; diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs index 24971ac37f3..5af7c84f33c 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs @@ -412,7 +412,7 @@ public bool TryUnbuckle(EntityUid buckleUid, EntityUid userUid, bool force = fal if (_gameTiming.CurTime < buckleComp.BuckleTime + buckleComp.Delay) { - _popup.PopupEntity(Loc.GetString("unbuckling-wait-message", ("delay", (buckleComp.Delay - _gameTiming.CurTime + buckleComp.BuckleTime).Seconds)), buckleUid, buckleUid); + _popup.PopupEntity(Loc.GetString("unbuckling-wait-message", ("delay", Math.Round((buckleComp.Delay - _gameTiming.CurTime + buckleComp.BuckleTime).TotalSeconds))), buckleUid, buckleUid); return false; } From a14e56c6b22c9f78c14bb620c7001fac1311470e Mon Sep 17 00:00:00 2001 From: Enoken-crypto <68296202+Enoken-crypto@users.noreply.github.com> Date: Wed, 15 May 2024 11:44:46 +0300 Subject: [PATCH 05/18] Event Added random event of spawning aliens --- .../Entities/Markers/Spawners/ghost_roles.yml | 19 ++++++++++++++++++ Resources/Prototypes/GameRules/events.yml | 20 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml b/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml index 3da346cdd65..3a401f97dac 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml @@ -153,3 +153,22 @@ - state: green - sprite: Mobs/Species/Terminator/parts.rsi state: full + +- type: entity + id: SpawnPointGhostAlienLarva + name: ghost role spawn point + suffix: alien larva + parent: MarkerBase + components: + - type: GhostRole + name: ghost-role-information-alien-larva-name + description: ghost-role-information-alien-larva-description + rules: ghost-role-information-xeno-rules + - type: GhostRoleMobSpawner + prototype: MobAlienLarvaGrowStageTwo + - type: Sprite + sprite: Markers/jobs.rsi + layers: + - state: green + - sprite: Mobs/Aliens/Xenos/alien.rsi + state: larva1 diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml index 6812ca14f70..26ba1f269f0 100644 --- a/Resources/Prototypes/GameRules/events.yml +++ b/Resources/Prototypes/GameRules/events.yml @@ -477,3 +477,23 @@ minimumPlayers: 20 weight: 5 - type: MobReplacementRule + +- type: entity + id: AlienInfestation + parent: BaseGameRule + noSpawn: true + components: + - type: StationEvent + startAnnouncement: station-event-alien-infestation-anouncement + startAudio: + path: /Audio/Announcements/attention.ogg + startDelay: 10 + earliestStart: 20 + minimumPlayers: 10 + weight: 5 + duration: 1 + - type: VentCrittersRule + entries: + specialEntries: + - id: SpawnPointGhostAlienLarva + prob: 0.05 From 42f01d1c04e7e5ffbeb2e5d77bdfc835b6c127a1 Mon Sep 17 00:00:00 2001 From: Enoken-crypto <68296202+Enoken-crypto@users.noreply.github.com> Date: Wed, 15 May 2024 11:46:04 +0300 Subject: [PATCH 06/18] Event fix Fixed alien event --- Resources/Prototypes/GameRules/events.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml index 26ba1f269f0..eef7fafa53e 100644 --- a/Resources/Prototypes/GameRules/events.yml +++ b/Resources/Prototypes/GameRules/events.yml @@ -494,6 +494,8 @@ duration: 1 - type: VentCrittersRule entries: + - id: SpawnPointGhostAlienLarva + prob: 0.05 specialEntries: - id: SpawnPointGhostAlienLarva prob: 0.05 From e74ab1c8e26e08b0e2be6e716bad5289ed9d1106 Mon Sep 17 00:00:00 2001 From: Enoken-crypto <68296202+Enoken-crypto@users.noreply.github.com> Date: Wed, 15 May 2024 12:34:31 +0300 Subject: [PATCH 07/18] InfectedIcons Added infected icons --- .../Overlays/ShowInfectedIconsSystem.cs | 13 ++++- Resources/Locale/en-US/abilities/alien.ftl | 4 ++ Resources/Locale/en-US/aliens/alien.ftl | 2 + .../Entities/Mobs/Player/aliens.yml | 22 +++++--- .../Prototypes/Entities/Mobs/facehugger.yml | 6 +-- .../Entities/Objects/Misc/alien_egg.yml | 16 +++--- Resources/Prototypes/StatusIcon/antag.yml | 50 ++++++++++++++++++ .../Interface/Misc/infected.rsi/infected0.png | Bin 0 -> 172 bytes .../Interface/Misc/infected.rsi/infected1.png | Bin 0 -> 172 bytes .../Interface/Misc/infected.rsi/infected2.png | Bin 0 -> 193 bytes .../Interface/Misc/infected.rsi/infected3.png | Bin 0 -> 193 bytes .../Interface/Misc/infected.rsi/infected4.png | Bin 0 -> 212 bytes .../Interface/Misc/infected.rsi/infected5.png | Bin 0 -> 212 bytes .../Interface/Misc/infected.rsi/meta.json | 29 ++++++++++ 14 files changed, 121 insertions(+), 21 deletions(-) create mode 100644 Resources/Textures/Interface/Misc/infected.rsi/infected0.png create mode 100644 Resources/Textures/Interface/Misc/infected.rsi/infected1.png create mode 100644 Resources/Textures/Interface/Misc/infected.rsi/infected2.png create mode 100644 Resources/Textures/Interface/Misc/infected.rsi/infected3.png create mode 100644 Resources/Textures/Interface/Misc/infected.rsi/infected4.png create mode 100644 Resources/Textures/Interface/Misc/infected.rsi/infected5.png create mode 100644 Resources/Textures/Interface/Misc/infected.rsi/meta.json diff --git a/Content.Client/Overlays/ShowInfectedIconsSystem.cs b/Content.Client/Overlays/ShowInfectedIconsSystem.cs index 343b0a58c26..445452d5441 100644 --- a/Content.Client/Overlays/ShowInfectedIconsSystem.cs +++ b/Content.Client/Overlays/ShowInfectedIconsSystem.cs @@ -1,5 +1,6 @@ using System.Linq; using Content.Shared.Aliens.Components; +using Content.Shared.Mobs; using Content.Shared.StatusIcon; using Content.Shared.StatusIcon.Components; using Robust.Shared.Prototypes; @@ -24,8 +25,16 @@ private void OnGetStatusIconsEvent(EntityUid uid, AlienInfectedComponent compone { if (!IsActive) return; + if (component.GrowthStage <= 5) + { + if (_prototype.TryIndex(component.InfectedIcons.ElementAt(component.GrowthStage), out var iconPrototype)) + ev.StatusIcons.Add(iconPrototype); + } + else + { + if (_prototype.TryIndex(component.InfectedIcons.ElementAt(5), out var iconPrototype)) + ev.StatusIcons.Add(iconPrototype); + } - if (_prototype.TryIndex(component.InfectedIcons.ElementAt(component.GrowthStage), out var iconPrototype)) - ev.StatusIcons.Add(iconPrototype); } } diff --git a/Resources/Locale/en-US/abilities/alien.ftl b/Resources/Locale/en-US/abilities/alien.ftl index ee50c9dc2f5..ce76be0948f 100644 --- a/Resources/Locale/en-US/abilities/alien.ftl +++ b/Resources/Locale/en-US/abilities/alien.ftl @@ -57,3 +57,7 @@ alien-node-desc = It's strangely glowing alien-weed-name = Weed alien-weed-desc = "" +action-larva-grow = Grow +action-larva-grow-desc = Escape from your host and start growing. + + diff --git a/Resources/Locale/en-US/aliens/alien.ftl b/Resources/Locale/en-US/aliens/alien.ftl index d3cb81ce409..dfde4b25b3a 100644 --- a/Resources/Locale/en-US/aliens/alien.ftl +++ b/Resources/Locale/en-US/aliens/alien.ftl @@ -27,3 +27,5 @@ ghost-role-mob-alien-description = Become a grown alien and spread the infestati station-event-alien-infestation-anouncement = Unidentified lifesigns detected coming aboard the station. Secure any exterior access, including ducting and ventilation. hud-chatbox-select-channel-XenoHivemind = Hivemind + +ghost-role-information-alien-larva-inside-description = Become an alien larva that is going to burst out. diff --git a/Resources/Prototypes/Entities/Mobs/Player/aliens.yml b/Resources/Prototypes/Entities/Mobs/Player/aliens.yml index 83a95042df0..dd9191f7ef2 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/aliens.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/aliens.yml @@ -1,8 +1,8 @@ - type: entity - name: alien-larva-name + name: Alien larva parent: SimpleSpaceMobBase id: MobAlienLarva - description: alien-larva-desc + description: Little and harmless alien components: - type: ShowInfectedIcons - type: Body @@ -127,6 +127,12 @@ enabled: false - type: InsideAlienLarva evolutionCooldown: 5 + - type: GhostRole + makeSentient: true + allowSpeech: true + allowMovement: true + name: ghost-role-information-alien-larva-name + description: ghost-role-information-alien-larva-inside-description - type: entity parent: MobAlienLarva @@ -188,7 +194,7 @@ evolutionCooldown: 50 - type: entity - name: mob-alien-drone-name + name: Alien drone abstract: true id: MobAlienBase parent: SimpleSpaceMobBase @@ -389,7 +395,7 @@ - type: LizardAccent - type: entity - name: mob-alien-drone-name + name: Alien drone id: MobAlienDrone parent: MobAlienBase components: @@ -404,7 +410,7 @@ - type: PraetorianEvolution - type: entity - name: mob-alien-sentinel-name + name: Alien sentinel id: MobAlienSentinel parent: MobAlienBase components: @@ -475,7 +481,7 @@ baseSprintSpeed: 5 - type: entity - name: mob-alien-praetorian-name + name: Alien praetorian id: MobAlienPraetorian parent: MobAlienBase components: @@ -553,7 +559,7 @@ - type: TailLash - type: entity - name: mob-alien-hunter-name + name: Alien hunter id: MobAlienHunter parent: MobAlienBase components: @@ -610,7 +616,7 @@ baseSprintSpeed: 8 - type: entity - name: mob-alien-queen-name + name: Alien queen id: MobAlienQueen parent: MobAlienBase components: diff --git a/Resources/Prototypes/Entities/Mobs/facehugger.yml b/Resources/Prototypes/Entities/Mobs/facehugger.yml index b9c8019fd74..43787cf5134 100644 --- a/Resources/Prototypes/Entities/Mobs/facehugger.yml +++ b/Resources/Prototypes/Entities/Mobs/facehugger.yml @@ -1,8 +1,8 @@ - type: entity - name: facehugger-name + name: Alien parent: BaseItem id: Facehugger - description: facehugger-desc + description: "It has some sort of a tube at the end of its tail. [color=red]It seems to be active![/color]" components: - type: Physics - type: Fixtures @@ -63,7 +63,7 @@ name: Facehugger parent: BaseItem id: FacehuggerInactive - description: facehugger-desc + description: It has some sort of a tube at the end of its tail. It doesn't seem active. suffix: Inactive components: - type: Sprite diff --git a/Resources/Prototypes/Entities/Objects/Misc/alien_egg.yml b/Resources/Prototypes/Entities/Objects/Misc/alien_egg.yml index 2b6785c3ca9..2444a113f66 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/alien_egg.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/alien_egg.yml @@ -1,8 +1,8 @@ - type: entity parent: BaseStructureDynamic id: AlienEggGrowing - name: alien-egg-name - description: alien-egg-desc + name: Egg + description: A large mottled egg components: - type: Transform noRot: true @@ -53,8 +53,8 @@ - type: entity parent: BaseStructureDynamic id: AlienEgg - name: alien-egg-name - description: alien-egg-desc + name: Egg + description: A large mottled egg components: - type: Transform noRot: true @@ -104,8 +104,8 @@ - type: entity parent: BaseStructureDynamic id: AlienEggHatching - name: alien-egg-name - description: alien-egg-desc + name: Egg + description: A large mottled egg components: - type: Transform noRot: true @@ -124,8 +124,8 @@ - type: entity parent: BaseStructureDynamic id: AlienEggOpened - name: alien-egg-name - description: alien-egg-desc + name: Egg + description: A large mottled egg components: - type: Transform noRot: true diff --git a/Resources/Prototypes/StatusIcon/antag.yml b/Resources/Prototypes/StatusIcon/antag.yml index 41bb0957416..77803a9178a 100644 --- a/Resources/Prototypes/StatusIcon/antag.yml +++ b/Resources/Prototypes/StatusIcon/antag.yml @@ -42,3 +42,53 @@ icon: sprite: /Textures/Interface/Misc/job_icons.rsi state: Syndicate + +# Infection stages + +- type: statusIcon + id: AlienInfectedIconStageZero + priority: 0 + locationPreference: Right + icon: + sprite: /Textures/Interface/Misc/infected.rsi + state: infected0 + +- type: statusIcon + id: AlienInfectedIconStageOne + priority: 0 + locationPreference: Right + icon: + sprite: /Textures/Interface/Misc/infected.rsi + state: infected1 + +- type: statusIcon + id: AlienInfectedIconStageTwo + priority: 0 + locationPreference: Right + icon: + sprite: /Textures/Interface/Misc/infected.rsi + state: infected2 + +- type: statusIcon + id: AlienInfectedIconStageThree + priority: 0 + locationPreference: Right + icon: + sprite: /Textures/Interface/Misc/infected.rsi + state: infected3 + +- type: statusIcon + id: AlienInfectedIconStageFour + priority: 0 + locationPreference: Right + icon: + sprite: /Textures/Interface/Misc/infected.rsi + state: infected4 + +- type: statusIcon + id: AlienInfectedIconStageFive + priority: 0 + locationPreference: Right + icon: + sprite: /Textures/Interface/Misc/infected.rsi + state: infected5 diff --git a/Resources/Textures/Interface/Misc/infected.rsi/infected0.png b/Resources/Textures/Interface/Misc/infected.rsi/infected0.png new file mode 100644 index 0000000000000000000000000000000000000000..3960ecc2a7badc32e8e6bb6761a9e553338078cb GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^96-#;!3HGxgLCzO6k~CayA#8@b22Z19F}xPUq=Rp zjs4tz5?Mhi3p^r=85sDEfH31!Z9ZwBprfaYV~9p@@&dgZ)|wyeIh=PU9AH^`@PKBy z?37l91lH}_%$rLMnHtxu671k)PhjoOpU+(Ez?GQ8({Q#fi-C=eL2;h=G?4>OR{{-V N@O1TaS?83{1OOCaExG^z literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Misc/infected.rsi/infected1.png b/Resources/Textures/Interface/Misc/infected.rsi/infected1.png new file mode 100644 index 0000000000000000000000000000000000000000..3960ecc2a7badc32e8e6bb6761a9e553338078cb GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^96-#;!3HGxgLCzO6k~CayA#8@b22Z19F}xPUq=Rp zjs4tz5?Mhi3p^r=85sDEfH31!Z9ZwBprfaYV~9p@@&dgZ)|wyeIh=PU9AH^`@PKBy z?37l91lH}_%$rLMnHtxu671k)PhjoOpU+(Ez?GQ8({Q#fi-C=eL2;h=G?4>OR{{-V N@O1TaS?83{1OOCaExG^z literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Misc/infected.rsi/infected2.png b/Resources/Textures/Interface/Misc/infected.rsi/infected2.png new file mode 100644 index 0000000000000000000000000000000000000000..530c30afe333e3d3488b457ddc662048ace2b087 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^96-#;!3-oVdgsajDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheJOMr-u6rj1{{Q#y*7jzgK%q-<07zX)kYDis|Nj{rv{rrr@;M7UB8wRq z_>O=u<5X=vX`rBRLAL{Yuvobu#O=u<5X=vX`rBpn4pxB{^XWLH1|S&-%Izo gc5aWi=6}E-ewJa8@xB>1fjSvHUHx3vIVCg!0Q=H93jhEB literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Misc/infected.rsi/infected4.png b/Resources/Textures/Interface/Misc/infected.rsi/infected4.png new file mode 100644 index 0000000000000000000000000000000000000000..866493beb891069a47fca3539e51bab9e64ace86 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^96-#;!3-oVdgsajDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheq5(c3uK)l2+dC=nKLdjRJNsfbwp-hqfijlFzkq8&<_7q|;5Ma!G{NKMXCV+PfgK22)Bv<32 vlFzkq8&<_7q|;5Ma!G{NKMXCV+PfgK22)Bv<32 v Date: Thu, 16 May 2024 14:20:08 +0300 Subject: [PATCH 08/18] Hunter's jump New hunter ability - leap --- Content.Client/Aliens/JumpVisualsComponent.cs | 17 ++++ .../Aliens/Components/AlienJumpComponent.cs | 45 ++++++++++ .../Aliens/Systems/AlienJumpSystem.cs | 82 ++++++++++++++++++ Resources/Prototypes/Actions/aliens.yml | 20 ++++- .../Entities/Mobs/Player/aliens.yml | 17 ++++ .../Prototypes/Entities/Mobs/facehugger.yml | 4 +- .../Entities/Structures/alien_nest.yml | 3 + .../Xenos/alien_hunter_jump.rsi/icon.png | Bin 0 -> 972 bytes .../Xenos/alien_hunter_jump.rsi/meta.json | 15 ++++ 9 files changed, 200 insertions(+), 3 deletions(-) create mode 100644 Content.Client/Aliens/JumpVisualsComponent.cs create mode 100644 Content.Shared/Aliens/Components/AlienJumpComponent.cs create mode 100644 Content.Shared/Aliens/Systems/AlienJumpSystem.cs create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien_hunter_jump.rsi/icon.png create mode 100644 Resources/Textures/Mobs/Aliens/Xenos/alien_hunter_jump.rsi/meta.json diff --git a/Content.Client/Aliens/JumpVisualsComponent.cs b/Content.Client/Aliens/JumpVisualsComponent.cs new file mode 100644 index 00000000000..f87a92478a3 --- /dev/null +++ b/Content.Client/Aliens/JumpVisualsComponent.cs @@ -0,0 +1,17 @@ +using Robust.Client.Graphics; + +namespace Content.Client.Aliens; + +/// +/// This is used for... +/// +[RegisterComponent] +public sealed partial class JumpVisualsComponent : Component +{ + +} + +public enum JumpLayers : byte +{ + Jumping +} diff --git a/Content.Shared/Aliens/Components/AlienJumpComponent.cs b/Content.Shared/Aliens/Components/AlienJumpComponent.cs new file mode 100644 index 00000000000..6583f1f37c4 --- /dev/null +++ b/Content.Shared/Aliens/Components/AlienJumpComponent.cs @@ -0,0 +1,45 @@ +using Content.Shared.Actions; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; +using Robust.Shared.Utility; + +namespace Content.Shared.Aliens.Components; + +/// +/// This is used for... +/// +[RegisterComponent] +public sealed partial class AlienJumpComponent : Component +{ + [ViewVariables(VVAccess.ReadWrite)] + public EntProtoId Action = "ActionJumpAlien"; + + [DataField("actionEntity")] + public EntityUid? ActionEntity; + + [DataField] + public float JumpTime = 1f; + + [ViewVariables(VVAccess.ReadWrite)] + [DataField("jumpSprite")] + public ResPath JumpSprite { get; set; } + + [ViewVariables(VVAccess.ReadWrite)] + [DataField("sprite")] + public ResPath Sprite { get; set; } + + [ViewVariables] + public SpriteSpecifier? OldSprite; + + [ViewVariables] + public bool Hit = false; +} + +public sealed partial class AlienJumpActionEvent : WorldTargetActionEvent { } + +[NetSerializable] +[Serializable] +public enum JumpVisuals : byte +{ + Jumping +} diff --git a/Content.Shared/Aliens/Systems/AlienJumpSystem.cs b/Content.Shared/Aliens/Systems/AlienJumpSystem.cs new file mode 100644 index 00000000000..ce1a5f7e04b --- /dev/null +++ b/Content.Shared/Aliens/Systems/AlienJumpSystem.cs @@ -0,0 +1,82 @@ +using System.Numerics; +using Content.Shared.Actions; +using Content.Shared.Aliens.Components; +using Content.Shared.Maps; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; +using Content.Shared.Physics; +using Content.Shared.Pinpointer; +using Content.Shared.StatusEffect; +using Content.Shared.Stunnable; +using Content.Shared.Throwing; +using Robust.Shared.Map; +using Robust.Shared.Physics.Components; +using Robust.Shared.Physics.Systems; + +namespace Content.Shared.Aliens.Systems; + +/// +/// This handles... +/// +public sealed class AlienJumpSystem : EntitySystem +{ + [Dependency] private readonly SharedActionsSystem _actions = default!; + [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly IEntityManager _entityManager = default!; + [Dependency] private readonly IMapManager _mapMan = default!; + [Dependency] private readonly ThrowingSystem _throwing = default!; + [Dependency] private readonly TurfSystem _turf = default!; + [Dependency] private readonly SharedStunSystem _stun = default!; + [Dependency] private readonly StatusEffectsSystem _statusEffect = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + /// + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnJump); + SubscribeLocalEvent(OnHit); + SubscribeLocalEvent(OnStop); + } + + private void OnInit(EntityUid uid, AlienJumpComponent comp, ComponentStartup args) + { + _actions.AddAction(uid, ref comp.ActionEntity, comp.Action); + } + + private void OnJump(EntityUid uid, AlienJumpComponent comp, AlienJumpActionEvent args) + { + args.Handled = true; + + _throwing.TryThrow(uid, args.Target, 15f); + _appearance.SetData(uid, JumpVisuals.Jumping, true, Comp(uid)); + } + + private void OnHit(EntityUid uid, AlienJumpComponent comp, ThrowDoHitEvent args) + { + var xform = Transform(args.Target); + var coords = xform.Coordinates; + var tile = coords.GetTileRef(EntityManager, _mapMan); + + if (tile == null) + return; + + if (_turf.IsTileBlocked(tile.Value, CollisionGroup.Impassable)) + { + _stun.TryParalyze(uid, TimeSpan.FromSeconds(4), true); + return; + } + + if (HasComp(args.Target) && _statusEffect.CanApplyEffect(args.Target, "Stun")) + { + _stun.TryParalyze(args.Target, TimeSpan.FromSeconds(10), true); + _physics.SetBodyStatus(EnsureComp(uid), BodyStatus.OnGround); + } + } + + private void OnStop(EntityUid uid, AlienJumpComponent comp, StopThrowEvent args) + { + _appearance.SetData(uid, JumpVisuals.Jumping, false, Comp(uid)); + } +} diff --git a/Resources/Prototypes/Actions/aliens.yml b/Resources/Prototypes/Actions/aliens.yml index 121ca7ebe2c..ef536db3c76 100644 --- a/Resources/Prototypes/Actions/aliens.yml +++ b/Resources/Prototypes/Actions/aliens.yml @@ -159,7 +159,8 @@ useDelay: 0 icon: { sprite : Mobs/Aliens/Xenos/alien.rsi, state: larva0 } event: !type:AlienLarvaGrowActionEvent -# Hunter + +# Sentinel - type: entity id: ActionStalkAlien @@ -173,6 +174,23 @@ icon: { sprite : Interface/Alien/screen_alien.rsi, state: walking } event: !type:AlienStalkActionEvent +# Hunter + +- type: entity + id: ActionJumpAlien + name: action-alien-jump + description: action-alien-jump-desc + noSpawn: true + components: + - type: WorldTargetAction + priority: 0 + useDelay: 3 + checkCanAccess: false + range: 10 + icon: { sprite : Interface/Alien/screen_alien.rsi, state: leap_off } + iconOn: { sprite : Interface/Alien/screen_alien.rsi, state: leap_on } + event: !type:AlienJumpActionEvent + # Queen - type: entity diff --git a/Resources/Prototypes/Entities/Mobs/Player/aliens.yml b/Resources/Prototypes/Entities/Mobs/Player/aliens.yml index dd9191f7ef2..3102b26b118 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/aliens.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/aliens.yml @@ -567,6 +567,10 @@ drawdepth: Mobs sprite: Mobs/Aliens/Xenos/alien.rsi layers: + - map: [ "enum.JumpLayers.Jumping" ] + sprite: Mobs/Aliens/Xenos/alien_hunter_jump.rsi + state: icon + visible: false - map: [ "enum.DamageStateVisualLayers.Base" ] state: alienh - map: [ "pocket1" ] @@ -580,6 +584,15 @@ sprite: "Effects/creampie.rsi" state: "creampie_human" visible: false + - type: GenericVisualizer + visuals: + enum.JumpVisuals.Jumping: + enum.JumpLayers.Jumping: + True: { visible: true } + False: { visible: false } + enum.DamageStateVisualLayers.Base: + True: { visible: false} + False: { visible: true} - type: MobThresholds thresholds: 0: Alive @@ -614,6 +627,10 @@ - type: MovementSpeedModifier baseWalkSpeed: 4 baseSprintSpeed: 8 + - type: JumpVisuals + baseState: alienh + - type: AlienJump + jumpSprite: Mobs/Aliens/Xenos/alien_hunter_jump.rsi - type: entity name: Alien queen diff --git a/Resources/Prototypes/Entities/Mobs/facehugger.yml b/Resources/Prototypes/Entities/Mobs/facehugger.yml index 43787cf5134..ddd2bd89637 100644 --- a/Resources/Prototypes/Entities/Mobs/facehugger.yml +++ b/Resources/Prototypes/Entities/Mobs/facehugger.yml @@ -2,7 +2,7 @@ name: Alien parent: BaseItem id: Facehugger - description: "It has some sort of a tube at the end of its tail. [color=red]It seems to be active![/color]" + description: It has some sort of a tube at the end of its tail. It seems to be active! components: - type: Physics - type: Fixtures @@ -60,7 +60,7 @@ - type: Blindfold - type: entity - name: Facehugger + name: Alien parent: BaseItem id: FacehuggerInactive description: It has some sort of a tube at the end of its tail. It doesn't seem active. diff --git a/Resources/Prototypes/Entities/Structures/alien_nest.yml b/Resources/Prototypes/Entities/Structures/alien_nest.yml index b76d288ee01..a326fd3fc19 100644 --- a/Resources/Prototypes/Entities/Structures/alien_nest.yml +++ b/Resources/Prototypes/Entities/Structures/alien_nest.yml @@ -42,3 +42,6 @@ acts: [ "Destruction" ] - type: Strap delay: 120 + position: Down + rotation: -90 + diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien_hunter_jump.rsi/icon.png b/Resources/Textures/Mobs/Aliens/Xenos/alien_hunter_jump.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..25d3f75cc490b897c5942c7d45b515ee34836cf3 GIT binary patch literal 972 zcmV;-12g=IP)Px#1ZP1_K>z@;j|==^1poj58&FJCMGy)YQc{RCGfOBZIc8>N>gwwM|NkHtFaQ7m zQ0g=K00009bW%=J|NsC0|NsC008>wR5&!@I32;bRa{vGi!vFvd!vV){sAK>D10_jB zK~!i%?O5BAs~`|Wh)e$ei%)mYV9Y86*h-xj+N}kdTh9Pd4A1|JMPLzF1QvlsphDn% z_?s;6eTPlsAy{K~LwL7n*x!pn%;)PDcjk-!`QGRP^V z{2_xnftUjbggmtbfRMqR$WsI`e;Km~8eB#*2q^=Bi@-;2Q4u0OViRcRwgEH1EFg)d z{k<$CtR2iC|G1dP8H5N^Mc>*PR0zNp7om2T0ODg4B!mb1CWDGZC2*kYqx~QObrDUl>uI&vv|pcqB#Yl zr6nXqWzJSoFarTF5D~lh;X%4*0=$>Nm3Yx9GB*_}luA(bSjGOIP)}X!89<2vnVj4* z#{DX1;R*wNSwZv5)j3G%T2qDCA|gsG&$zAbG6*1*8fQd&KKXAG0L_g*ECv+NB2;Z4 zBEO^3SWTQxm)@f#)$WD^ucUd@@|5@j2nt`_!jAQ8KNy+>7@e(8x;*mN_>KdHz?b0* zU(`Xv?P+KUxuLDYEmT_I!T~oPoqJfS-m-I2yrLz<43@ouRVBC9GR*mDz-`RvH1YV} uQZ!G1fm~jC#|S%z?dzs=E&~-jpZ@^9%H9o_XA?^R0000 Date: Thu, 16 May 2024 14:59:00 +0300 Subject: [PATCH 09/18] Custom health and harm for aliens --- Content.Shared/Alert/AlertType.cs | 3 ++ Resources/Prototypes/Actions/aliens.yml | 14 +++++++ Resources/Prototypes/Alerts/alerts.yml | 37 +++++++++++++++++++ .../Mobs/Player/alien_inventory_template.yml | 4 +- .../Entities/Mobs/Player/aliens.yml | 10 +++++ 5 files changed, 66 insertions(+), 2 deletions(-) diff --git a/Content.Shared/Alert/AlertType.cs b/Content.Shared/Alert/AlertType.cs index b917dd692d7..0bfcb5b220c 100644 --- a/Content.Shared/Alert/AlertType.cs +++ b/Content.Shared/Alert/AlertType.cs @@ -23,6 +23,9 @@ public enum AlertType : byte HumanCrit, HumanDead, HumanHealth, + AlienCrit, + AlienDead, + AlienHealth, BorgBattery, BorgBatteryNone, PilotingShuttle, diff --git a/Resources/Prototypes/Actions/aliens.yml b/Resources/Prototypes/Actions/aliens.yml index ef536db3c76..0fe88d4295d 100644 --- a/Resources/Prototypes/Actions/aliens.yml +++ b/Resources/Prototypes/Actions/aliens.yml @@ -48,6 +48,20 @@ icon: { sprite: Structures/weednode.rsi, state: full } event: !type:WeednodeActionEvent +- type: entity + id: ActionCombatModeToggleAlien + name: "[color=red]Combat Mode[/color]" + description: Enter combat mode + noSpawn: true + components: + - type: InstantAction + checkCanInteract: false + checkConsciousness: false + icon: { sprite: Interface/Alien/screen_alien.rsi, state: combat_off } + iconOn: { sprite: Interface/Alien/screen_alien.rsi, state: combat } + event: !type:ToggleCombatActionEvent + priority: -100 + # Drone - type: entity diff --git a/Resources/Prototypes/Alerts/alerts.yml b/Resources/Prototypes/Alerts/alerts.yml index 2d1c9062e61..bc49873472f 100644 --- a/Resources/Prototypes/Alerts/alerts.yml +++ b/Resources/Prototypes/Alerts/alerts.yml @@ -187,6 +187,43 @@ minSeverity: 0 maxSeverity: 4 +- type: alert + id: AlienHealth + category: Health + icons: + - sprite: /Textures/Interface/Alien/screen_alien.rsi + state: health0 + - sprite: /Textures/Interface/Alien/screen_alien.rsi + state: health1 + - sprite: /Textures/Interface/Alien/screen_alien.rsi + state: health2 + - sprite: /Textures/Interface/Alien/screen_alien.rsi + state: health3 + - sprite: /Textures/Interface/Alien/screen_alien.rsi + state: health4 + name: alerts-health-name + description: alerts-health-desc + minSeverity: 0 + maxSeverity: 4 + +- type: alert + id: AlienCrit + category: Health + icons: + - sprite: /Textures/Interface/Alien/screen_alien.rsi + state: health6 + name: alerts-crit-name + description: alerts-crit-desc + +- type: alert + id: AlienDead + category: Health + icons: + - sprite: /Textures/Interface/Alien/screen_alien.rsi + state: health7 + name: alerts-dead-name + description: alerts-dead-desc + - type: alert id: BorgHealth category: Health diff --git a/Resources/Prototypes/Entities/Mobs/Player/alien_inventory_template.yml b/Resources/Prototypes/Entities/Mobs/Player/alien_inventory_template.yml index 2f85ad5d695..cdf5c18721c 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/alien_inventory_template.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/alien_inventory_template.yml @@ -2,7 +2,7 @@ id: alien slots: - name: pocket1 - slotTexture: pocket + slotTexture: "pocket" slotFlags: POCKET slotGroup: MainHotbar stripTime: 3 @@ -11,7 +11,7 @@ displayName: Pocket 1 stripHidden: true - name: pocket2 - slotTexture: pocket + slotTexture: "pocket" slotFlags: POCKET slotGroup: MainHotbar stripTime: 3 diff --git a/Resources/Prototypes/Entities/Mobs/Player/aliens.yml b/Resources/Prototypes/Entities/Mobs/Player/aliens.yml index 3102b26b118..d99815a5db5 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/aliens.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/aliens.yml @@ -66,6 +66,10 @@ thresholds: 0: Alive 25: Dead + stateAlertDict: + Alive: AlienHealth + Critical: AlienCrit + Dead: AlienDead - type: MovementSpeedModifier baseWalkSpeed : 5 baseSprintSpeed : 5 @@ -84,6 +88,7 @@ - Meat wilhelmProbability: 0.001 - type: CombatMode + combatToggleAction: ActionCombatModeToggleAlien - type: MeleeWeapon soundHit: path: /Audio/Weapons/Xeno/alien_claw_flesh1.ogg @@ -204,6 +209,7 @@ - type: PlasmaTransfer - type: Insulated - type: CombatMode + combatToggleAction: ActionCombatModeToggleAlien - type: InputMover - type: MobMover - type: MovementSpeedModifier @@ -279,6 +285,10 @@ 0: Alive 180: Critical 280: Dead + stateAlertDict: + Alive: AlienHealth + Critical: AlienCrit + Dead: AlienDead - type: SlowOnDamage speedModifierThresholds: 25: 0.5 From 2d0ddfe15c099182be78675b4adacb2467d02d42 Mon Sep 17 00:00:00 2001 From: Enoken-crypto <68296202+Enoken-crypto@users.noreply.github.com> Date: Thu, 16 May 2024 18:35:46 +0300 Subject: [PATCH 10/18] Mobs & plasma Added Plasma counter Added lusty xenomorpgh maiden added Lamarr --- Content.Server/Aliens/Systems/AlienSystem.cs | 2 +- Content.Shared/Alert/AlertCategory.cs | 3 +- Content.Shared/Alert/AlertType.cs | 1 + .../Systems/SharedPlasmaVesselSystem.cs | 3 + Resources/Locale/en-US/abilities/alien.ftl | 5 + Resources/Prototypes/Actions/aliens.yml | 2 +- Resources/Prototypes/Alerts/alerts.yml | 32 ++++++ .../Entities/Mobs/Player/aliens.yml | 49 +++++++++ .../Prototypes/Entities/Mobs/facehugger.yml | 62 +++++++++++ .../Entities/Objects/Misc/alien_weed.yml | 8 +- .../Weapons/Guns/Projectiles/projectiles.yml | 17 +++ .../Objects/Weapons/Melee/alien_acid.yml | 97 ++++++++++++++++++ .../Alerts/plasma_counter.rsi/meta.json | 44 ++++++++ .../plasma_counter.rsi/power_display0.png | Bin 0 -> 573 bytes .../plasma_counter.rsi/power_display1.png | Bin 0 -> 583 bytes .../plasma_counter.rsi/power_display10.png | Bin 0 -> 586 bytes .../plasma_counter.rsi/power_display2.png | Bin 0 -> 578 bytes .../plasma_counter.rsi/power_display3.png | Bin 0 -> 590 bytes .../plasma_counter.rsi/power_display4.png | Bin 0 -> 584 bytes .../plasma_counter.rsi/power_display5.png | Bin 0 -> 595 bytes .../plasma_counter.rsi/power_display6.png | Bin 0 -> 579 bytes .../plasma_counter.rsi/power_display7.png | Bin 0 -> 594 bytes .../plasma_counter.rsi/power_display8.png | Bin 0 -> 587 bytes .../plasma_counter.rsi/power_display9.png | Bin 0 -> 592 bytes .../Alien/screen_alien.rsi/nightvision0.png | Bin 946 -> 591 bytes .../Alien/screen_alien.rsi/nightvision1.png | Bin 931 -> 569 bytes 26 files changed, 318 insertions(+), 7 deletions(-) create mode 100644 Resources/Prototypes/Entities/Objects/Weapons/Melee/alien_acid.yml create mode 100644 Resources/Textures/Interface/Alerts/plasma_counter.rsi/meta.json create mode 100644 Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display0.png create mode 100644 Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display1.png create mode 100644 Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display10.png create mode 100644 Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display2.png create mode 100644 Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display3.png create mode 100644 Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display4.png create mode 100644 Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display5.png create mode 100644 Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display6.png create mode 100644 Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display7.png create mode 100644 Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display8.png create mode 100644 Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display9.png diff --git a/Content.Server/Aliens/Systems/AlienSystem.cs b/Content.Server/Aliens/Systems/AlienSystem.cs index 9c788345ddc..527ef700a7d 100644 --- a/Content.Server/Aliens/Systems/AlienSystem.cs +++ b/Content.Server/Aliens/Systems/AlienSystem.cs @@ -58,7 +58,7 @@ private void OnPickup(EntityUid uid, AlienComponent component, PickupAttemptEven if (!_tag.HasTag(args.Item, "AlienItem")) { args.Cancel(); - _popup.PopupEntity(Loc.GetString("alien-pickup-item-fail"), uid); + _popup.PopupEntity(Loc.GetString("alien-pickup-item-fail"), uid, uid); } } diff --git a/Content.Shared/Alert/AlertCategory.cs b/Content.Shared/Alert/AlertCategory.cs index 7450f585a4e..8f64f3fd7ed 100644 --- a/Content.Shared/Alert/AlertCategory.cs +++ b/Content.Shared/Alert/AlertCategory.cs @@ -16,5 +16,6 @@ public enum AlertCategory Hunger, Thirst, Toxins, - Battery + Battery, + Counter } diff --git a/Content.Shared/Alert/AlertType.cs b/Content.Shared/Alert/AlertType.cs index 0bfcb5b220c..19884301685 100644 --- a/Content.Shared/Alert/AlertType.cs +++ b/Content.Shared/Alert/AlertType.cs @@ -43,6 +43,7 @@ public enum AlertType : byte VowOfSilence, VowBroken, Essence, + PlasmaCounter, Corporeal, Bleed, Pacified, diff --git a/Content.Shared/Aliens/Systems/SharedPlasmaVesselSystem.cs b/Content.Shared/Aliens/Systems/SharedPlasmaVesselSystem.cs index 0559f6850ca..0a9fa544382 100644 --- a/Content.Shared/Aliens/Systems/SharedPlasmaVesselSystem.cs +++ b/Content.Shared/Aliens/Systems/SharedPlasmaVesselSystem.cs @@ -14,6 +14,7 @@ public sealed class SharedPlasmaVesselSystem : EntitySystem { [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly AlertsSystem _alerts = default!; public override void Initialize() { @@ -51,6 +52,8 @@ public bool ChangePlasmaAmount(EntityUid uid, FixedPoint2 amount, PlasmaVesselCo uid); } + _alerts.ShowAlert(uid, AlertType.PlasmaCounter, (short) Math.Clamp(Math.Round(component.Plasma.Float() / 50f), 0, 10)); + return true; } diff --git a/Resources/Locale/en-US/abilities/alien.ftl b/Resources/Locale/en-US/abilities/alien.ftl index ce76be0948f..19e5522d10b 100644 --- a/Resources/Locale/en-US/abilities/alien.ftl +++ b/Resources/Locale/en-US/abilities/alien.ftl @@ -60,4 +60,9 @@ alien-weed-desc = "" action-larva-grow = Grow action-larva-grow-desc = Escape from your host and start growing. +alien-create-structure-failed = You can't create it here. +action-alien-jump = Leap +action-alien-jump-desc = Leap onto your enemies stunning them. + +alien-evolution-fail = There is a royal xenomorph alreagy. diff --git a/Resources/Prototypes/Actions/aliens.yml b/Resources/Prototypes/Actions/aliens.yml index 0fe88d4295d..901726324c7 100644 --- a/Resources/Prototypes/Actions/aliens.yml +++ b/Resources/Prototypes/Actions/aliens.yml @@ -6,7 +6,7 @@ noSpawn: true components: - type: InstantAction - icon: Interface/VerbIcons/light.svg.192dpi.png + icon: { sprite: Interface/Alien/screen_alien.rsi, state: nightvision0 } priority: -1 clientExclusive: true checkCanInteract: false diff --git a/Resources/Prototypes/Alerts/alerts.yml b/Resources/Prototypes/Alerts/alerts.yml index bc49873472f..bfbe77b8244 100644 --- a/Resources/Prototypes/Alerts/alerts.yml +++ b/Resources/Prototypes/Alerts/alerts.yml @@ -5,6 +5,7 @@ id: BaseAlertOrder order: - category: Health + - category: Counter - category: Stamina - alertType: SuitPower - category: Internals @@ -64,6 +65,37 @@ name: alerts-low-pressure-name description: alerts-low-pressure-desc +- type: alert + id: PlasmaCounter + category: Counter + icons: + - sprite: /Textures/Interface/Alerts/plasma_counter.rsi + state: power_display0 + - sprite: /Textures/Interface/Alerts/plasma_counter.rsi + state: power_display1 + - sprite: /Textures/Interface/Alerts/plasma_counter.rsi + state: power_display2 + - sprite: /Textures/Interface/Alerts/plasma_counter.rsi + state: power_display3 + - sprite: /Textures/Interface/Alerts/plasma_counter.rsi + state: power_display4 + - sprite: /Textures/Interface/Alerts/plasma_counter.rsi + state: power_display5 + - sprite: /Textures/Interface/Alerts/plasma_counter.rsi + state: power_display6 + - sprite: /Textures/Interface/Alerts/plasma_counter.rsi + state: power_display7 + - sprite: /Textures/Interface/Alerts/plasma_counter.rsi + state: power_display8 + - sprite: /Textures/Interface/Alerts/plasma_counter.rsi + state: power_display9 + - sprite: /Textures/Interface/Alerts/plasma_counter.rsi + state: power_display10 + minSeverity: 0 + maxSeverity: 11 + name: alerts-plasma-name + description: alerts-plasma-desc + - type: alert id: HighPressure category: Pressure diff --git a/Resources/Prototypes/Entities/Mobs/Player/aliens.yml b/Resources/Prototypes/Entities/Mobs/Player/aliens.yml index d99815a5db5..a0bdcf6bb8c 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/aliens.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/aliens.yml @@ -714,3 +714,52 @@ speechSounds: Alien speechVerb: LargeMob - type: TailLash + +- type: entity + name: Lusty alien maiden + description: Don't ask it to lay eggs in you. + id: MobAlieMaiden + parent: MobAlienBase + components: + - type: PlasmaVessel + plasmaPerSecond: 5 + plasmaModified: 40 + - type: Sprite + drawdepth: Mobs + sprite: Mobs/Aliens/Xenos/alien.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: maid + - map: [ "pocket1" ] + - map: [ "pocket2" ] + - map: [ "enum.HumanoidVisualLayers.Handcuffs" ] + color: "#ffffff" + sprite: Mobs/Aliens/Xenos/alien.rsi + state: aliencuff + visible: false + - map: [ "clownedon" ] # Dynamically generated + sprite: "Effects/creampie.rsi" + state: "creampie_human" + visible: false + - type: MobThresholds + thresholds: + 0: Alive + 208: Dead + - type: MeleeWeapon + altDisarm: true + angle: 0 + soundHit: + collection: AlienClaw + animation: WeaponArcBite + damage: + groups: + Brute: 25 + types: + Structural: 60 + - type: DamageStateVisuals + rotate: true + states: + Alive: + Base: maid + Dead: + Base: maid_dead diff --git a/Resources/Prototypes/Entities/Mobs/facehugger.yml b/Resources/Prototypes/Entities/Mobs/facehugger.yml index ddd2bd89637..11d2c9e03fb 100644 --- a/Resources/Prototypes/Entities/Mobs/facehugger.yml +++ b/Resources/Prototypes/Entities/Mobs/facehugger.yml @@ -81,4 +81,66 @@ - Mask - type: BreathMask - type: Blindfold + - type: Tag + tags: + - AlienItem + - MonkeyWearable +- type: entity + name: Lamarr + parent: BaseItem + id: FacehuggerLamarr + description: It has some sort of a tube at the end of its tail, but it doesn't seem, like it can use it. + components: + - type: Physics + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.2 + density: 100 + mask: + - SmallMobMask + layer: + - SmallMobLayer + - type: MobState + - type: Deathgasp + - type: MobStateActions + actions: + Critical: + - ActionCritSuccumb + - ActionCritFakeDeath + - ActionCritLastWords + - type: MobThresholds + thresholds: + 0: Alive + 25: Dead + - type: MovementSpeedModifier + baseWalkSpeed: 5 + baseSprintSpeed: 5 + - type: DamageStateVisuals + states: + Alive: + Base: facehugger + Dead: + Base: facehugger_dead + - type: Tag + tags: + - AlienItem + - MonkeyWearable + - type: Sprite + sprite: Mobs/Aliens/Xenos/alien.rsi + state: facehugger + - type: Item + sprite: Mobs/Aliens/Xenos/alien.rsi + state: facehugger + size: Small + - type: StaticPrice + price: 1000 + - type: Clothing + sprite: Clothing/Mask/facehugger.rsi + slots: + - Mask + - type: BreathMask + - type: Blindfold diff --git a/Resources/Prototypes/Entities/Objects/Misc/alien_weed.yml b/Resources/Prototypes/Entities/Objects/Misc/alien_weed.yml index d7de6fd7180..46c3bc9f83c 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/alien_weed.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/alien_weed.yml @@ -1,6 +1,6 @@ - type: entity - name: alien-weed-name - description: alien-weed-desc + name: Weed + description: Strange grey weeds. parent: BaseStructure id: AlienWeed components: @@ -43,8 +43,8 @@ - type: PlasmaGainModifier - type: entity - name: alien-node-name - description: alien-node-desc + name: Weed node + description: It's strangely glowing. parent: BaseStructure id: AlienWeednode components: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index 935e335c2a4..8ec27aa2720 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -773,6 +773,23 @@ - type: Ammo muzzleFlash: null +- type: entity + id: BulletAcidSentinel + name: acid spit + parent: BaseBullet + noSpawn: true + components: + - type: Projectile + damage: + types: + Caustic: 33 + - type: Sprite + sprite: Objects/Weapons/Guns/Projectiles/xeno_toxic.rsi + layers: + - state: xeno_toxic + - type: Ammo + muzzleFlash: null + - type: entity id: BulletWaterShot name: water diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/alien_acid.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/alien_acid.yml new file mode 100644 index 00000000000..101d21928c9 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/alien_acid.yml @@ -0,0 +1,97 @@ +- type: entity + parent: BaseItem + id: AlienAcid + name: alien-acid-name + description: alien-acid-desc + components: + - type: Fixtures + fixtures: + fix1: + shape: !type:PolygonShape + vertices: + - -0.20,0.10 + - -0.10,0.20 + - 0.20,-0.10 + - 0.10,-0.20 + density: 20 + mask: + - ItemMask + restitution: 0.3 + friction: 0.2 + - type: Sprite + sprite: Mobs/Aliens/Xenos/alien.rsi + state: acid + - type: MeleeWeapon + wideAnimationRotation: -45 + damage: + types: + Caustic: 100 + angle: 0 + animation: WeaponArcThrust + soundHit: + path: /Audio/Weapons/pierce.ogg + - type: Item + size: Tiny + sprite: Mobs/Aliens/Xenos/alien.rsi + state: acid + - type: Damageable + damageContainer: Inorganic + - type: Appearance + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 75 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 15 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: WoodDestroy + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: DamageOnHit + damage: + types: + Blunt: 100 + - type: Unremoveable + - type: AlienAcid + - type: Tag + tags: + - AlienItem + +- type: entity + id: CorrosiveAcid + name: alien-acid-name + suffix: overlay + description: alien-acid-desc + components: + - type: Sprite + sprite: Mobs/Aliens/Xenos/alien.rsi + state: acid + - type: TimedSpawner + prototypes: + - CorrodedAcid + intervalSeconds: 30 + minimumEntitiesSpawned: 1 + maximumEntitiesSpawned: 1 + +- type: entity + id: CorrodedAcid + name: corroded acid + suffix: overlay + description: alien-acid-desc + components: + - type: Sprite + sprite: Mobs/Aliens/Xenos/alien.rsi + state: acid + - type: EventHorizon + radius: 0.1 + consumeTiles: false + canBreachContainment: true + - type: TimedDespawn + lifetime: 0.1 diff --git a/Resources/Textures/Interface/Alerts/plasma_counter.rsi/meta.json b/Resources/Textures/Interface/Alerts/plasma_counter.rsi/meta.json new file mode 100644 index 00000000000..aa7f47056c8 --- /dev/null +++ b/Resources/Textures/Interface/Alerts/plasma_counter.rsi/meta.json @@ -0,0 +1,44 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Created by Kai5", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "power_display0" + }, + { + "name": "power_display1" + }, + { + "name": "power_display2" + }, + { + "name": "power_display3" + }, + { + "name": "power_display4" + }, + { + "name": "power_display5" + }, + { + "name": "power_display6" + }, + { + "name": "power_display7" + }, + { + "name": "power_display8" + }, + { + "name": "power_display9" + }, + { + "name": "power_display10" + } + ] +} diff --git a/Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display0.png b/Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display0.png new file mode 100644 index 0000000000000000000000000000000000000000..2255be6f45116638bda3407d97a1b205334deeed GIT binary patch literal 573 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCilW1AIbUWt8OPL=;lIbJbArTU z0!Yc01o;L3#{(E5+n#3u6>=7ML>4nJ@ErkR#;MwT(m=<%dAc};SoqgY=APWFz|-Q` zaenvaz4K}#{{4Ty=kA240;_e4o1Y|ms_c4FGnvojfH^xyql3yV7fr#I$=S?;MuD2L zM>PDFC{KvtSJ;wJlQ4lfL&D{lxI>Ho(pz%#jB0DkKYeB^I6M1;+U1uajC1a_h+FzI zY}0*a`G(~|`Gi1`g3UD-etv3qVo=Ciy&yF*N92Q`l?c;b;}5nUohGi}xw^-eEp`)N{rf6CI7O!u3Gn-eeeY%|G7e%80Ct#Zw+qHAXj zKk-UV(-k*b^w!^Yk4@wu=>uDh4o%Bde1Bct>w@l&bXFfjv(LvbGTsX7KgHlCdAl>d kk>QZpXGa#kLz;h?^B!x4c%4qM0tPdKr>mdKI;Vst0AEM$zyJUM literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display1.png b/Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display1.png new file mode 100644 index 0000000000000000000000000000000000000000..6550bf5ddbfba316d671ef3ed994c8d1efe15c0a GIT binary patch literal 583 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCilW1AIbUWt8OPL=;lIbJbArTU z0!Yc01o;L3#{(E5+n#3u6>=7ML>4nJ@ErkR#;MwT(m=-tc)B=-SoqgY?k#Fo5NL6< zsJ|^Wd6pUH`~P$9?p0>VJyy!r_&dVFGPY=+C%e*v*~~2t3PPV@@|6(sZ0Ue zW<1{@-0)dpvBrb6%EeDV^|~-9*nKKV4OZ=&*?4SG8hI;Po|e*ToerO$AFuHdvB?#lXl1=hPw^ArTU z0!Yc01o;L3#{(E5+n#3u6>=7ML>4nJ@ErkR#;MwT(m=-td%8G=SoqgY<}PYB;Bm=K z`Izf{Y04JGeg7?YYfC$G98NpN_&RgqhJuSfwdQp+toIXOa#DHHyEa6yZ=IM@N>gB& zV3XC=Hir^jhLr~^5+{fUTwnQ(+o5H3U@5o1teu_o-zdgE$CU28EZDh+;f~&+-Z*xK zr-F|)tQmj2+Y-)vX9fGNdvzB$7>>BAo%%OnZrGj{wqAyWe<_|Z%l9}PmhH7L7Ff2V z^wjF9h3W~cGFA)xn5W&@%dC^PLebhGpUuaave%jzADZP~Ia^|*uT5Cmax;%aS>_CD< z@v0jM%Q{anf1Z*1y z#tHu8dIsCdLL?KWY@GW;j6-2gIiJe|6`9BOR%JR<_P^Wp4;bbQp00i_>zopr0GUwt AO8@`> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display2.png b/Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display2.png new file mode 100644 index 0000000000000000000000000000000000000000..79dedf2b17e35556bf83d2aba3fb5b82773ed1c3 GIT binary patch literal 578 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCilW1AIbUWt8OPL=;lIbJbArTU z0!Yc01o;L3#{(E5+n#3u6>=7ML>4nJ@ErkR#;MwT(m=<1d%8G=SoqgY?k;Oq5O8sf zn4f!c@v`2B|Mzb;=3db&)85kjCN(9|^x_S*c^wV8egaH=9p{CsI~8PnUw2IS==JhI zwV{%1V@4IjI@V;_W*LXW3PxfL9Mwy2$;~sWtttDol`$hxbY9A?n176O;#%2v`Y~J! zZ+UQ!<$>7=4XzmqqOtGqd$2G(+Ld-J-)(wzyYq_)91VNw+-_H8RVfH=mOAt0fc;m2 zZ66f^%nC{l*oi9e%E}}Z9+&fzsgPc582573;rE_TQ6=IWK-%J})fJCz1Jrm|Mgq-ITYVoVb2*)kX3J_psJkSUKE$6`I-* pc8@zrI5I&9+JMzQC|%@O1TaS?83{1OUa0@!tRd literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display3.png b/Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display3.png new file mode 100644 index 0000000000000000000000000000000000000000..24fb35ec74e0bcf79bc69575906054ac5f1ad87a GIT binary patch literal 590 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCilW1AIbUWt8OPL=;lIbJbArTU z0!Yc01o;L3#{(E5+n#3u6>=7ML>4nJ@ErkR#;MwT(m=5IQCa*%l1d+vI^2@^x%*_oGI5)TU7sFY-|G(7jWcyqr_=`e3^%TWft zZ6D-M?+{$Uy2omPAFGG6KHr8Ni`v#QZz+9{_eC*fY4)_AI}Z1s&}Ud|ds?foecfYa zsipTVbaKtwuHU(O@RrWiMbFmpT~mwO8mZvD`-Ab)+@j4{lF^Z^+h(`lxDpoj(&cAa zae_h5yjdj%xr=HN-fixi<6nGkk5lXIiQa85eguEl;NP}^$s*0oVw0}O<3A4Ezc}h5 zIk!tl|9tp@DS37DQ-;Moww?Kn42SBT_j0^x@&3tNen5N2Q7_qPz;I{qboFyt=akR{ E049LArTU z0!Yc01o;L3#{(E5+n#3u6>=7ML>4nJ@ErkR#;MwT(m=-tdb&7U&;y^#c9@l zi0e7wpfF3Y;q}3Y;|lT%GKFTwGYIy1eO0ze{rN-Y$!p#RT&@+9pBCL@oTGQBJ4T%0 zsj%V>H->%cGhG>lpEz8<&CkWyU}1EvG}kTXP=gbLLH*U;atojKIr*4f*ezEoS$Nzu}PT`Z5W&x<$%!g1+%BJ=3>g znF-&@Gb_ZhE?6xw+IV%tfp_apTvF`ck}%U|&6b|Mm$)ux_H8@8G~`m>spDtc9F3oa zEbpCZrDc95`SP^Wci-6F-*9Nx(-@~Me^<6oRrju7-eKl;W0P&l+ixzMzc~Lz@&)&> z{bP0l+XkKUl{oQ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display5.png b/Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display5.png new file mode 100644 index 0000000000000000000000000000000000000000..a4e9a2996c2f678e376dd2cfbaf21972a4f0358a GIT binary patch literal 595 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCilW1AIbUWt8OPL=;lIbJbArTU z0!Yc01o;L3#{(E5+n#3u6>=7ML>4nJ@ErkR#;MwT(m=<@c)B=-SoqgY?k;Lk;Bj^A zIKS;(*=xI)fB&tk^E+Nx^%b(Hs9$$ko!WvOW6@)$B-v}xH*QM z;i>3ji88ha+b73~6fBmx@%3A~6T^Z2j?7sl8#<*PNr^Bue4KnwX1Zz4j>Q7$OjX4( z*Jd4?+n`pkqQOS=g29bAMj`Vj0bULQ#dkD5m{dJiO6EyCI48Vy*+Xru zL#_#n15T~s$oA;d<=S~>iBP1%ak17IH9J$48TN}xHcS-KncP10@{cWZ679}j3lBSW zY|G*|J8l|exN-B|nz3{7n#8!x+vb!O_tZGG-JZrRdGXuwy?gdV9^!g1>t*8UYX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display6.png b/Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display6.png new file mode 100644 index 0000000000000000000000000000000000000000..74841d5cf9692d008ce13d40ea383c26bd6eb05b GIT binary patch literal 579 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCilW1AIbUWt8OPL=;lIbJbArTU z0!Yc01o;L3#{(E5+n#3u6>=7ML>4nJ@ErkR#;MwT(m==ic)B=-SoqgY?w-`Fz~k!J zasKX7{oT>0|JOgiCp|IfbcL*>g1X|wj71xLZ3Gx^%P6qO2+lY2>O3Ih`?_PoN3WMh zstuK78#AgH*0Cnb_ReuQtYDPKAlT=%)i&wWm#=qEp65OwylKOvmnBuqJLa~w&QWLh z*&%Spk3p}wXHf%Z(8Zrs&Wa2P?Z<7-?-rC_2xPyoe;wU-p~PKLjrGEI8Pi^CM&AWe zjFnmpGny_}v$X6`YG2!Oc74Zz+Y-GWTNZk?#80$m;BuC?^tk@9qpjfOZr2m3W+xX1 zv7YXcS|pXID?C5S`OK?`o(a=Vp1x#K7G)fhzj?c_o~pOCR;;-++u0d0bIqRJ3S5~e z*S#&~RoeTVPHm~DcZy#8wp=c3p3Xzo2ay?xr?*YmdRkcZh2WpfGTSn^{}h%qZM(YK ri(&1Sw@21HFg)85EZE3g-1DDjo=(g3gTe~DWM4f%*pX$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display7.png b/Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display7.png new file mode 100644 index 0000000000000000000000000000000000000000..3e103c7d91d9afae4de30731d8d678cecf8e4142 GIT binary patch literal 594 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCilW1AIbUWt8OPL=;lIbJbArTU z0!Yc01o;L3#{(E5+n#3u6>=7ML>4nJ@ErkR#;MwT(m=;Yd%8G=SoqgYW-M=3;AwH} zxV7tS+1$HXKmYG9E@xl#^=qY_;K}JT97<09RFmy!$mbJaYV^?Ij-GjNPKh?fPwgE=C4xn`N1o0_1uU*EuUPys&@yY{!{}5Br>AI2X)* zY!oh4&gAtVm*t73Ltar;Z-apOlMPc8>@$QLmlu}l3AJsqmdkF5-)zs&wD8ST-lqYTKd|XZ%0SvC>Cw+NB$s=`;K{fA`g0 z>LnZ6H=DOPO=q2B?@a4eCTEhvPEXD2o0xy1;C7Lsa#sDThi^{`g)vHYUjT+ZgQu&X J%Q~loCIBL8{{8>} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display8.png b/Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display8.png new file mode 100644 index 0000000000000000000000000000000000000000..cdf7c43445448defa883bcfab7c09bbc8d4123e7 GIT binary patch literal 587 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCilW1AIbUWt8OPL=;lIbJbArTU z0!Yc01o;L3#{(E5+n#3u6>=7ML>4nJ@ErkR#;MwT(m=?G=9Tfoxfh<8JrIymVLI?fz4qhgX;N|?N7gdGn7>tE z+ed{7<^=+bze5_fRJ~JDI3imevF*b*UBL?Jy~Tkq4|CWn?PoY~=&6F!<$}&GgQD~8 z0ZKZVVQv5W6EfAf18cllyoKF!6(6*Q-ncmJl1XKx4asi=O)1?%gxPiSfgkEgMp@PyGJbDpJB(7s(jB zrT0(4mgY@YSD#{7yXEbXUmdKI;Vst00>z3 ATL1t6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display9.png b/Resources/Textures/Interface/Alerts/plasma_counter.rsi/power_display9.png new file mode 100644 index 0000000000000000000000000000000000000000..30c7d6821297e7ad3e402f7264b7c4fe076021aa GIT binary patch literal 592 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCilW1AIbUWt8OPL=;lIbJbArTU z0!Yc01o;L3#{(E5+n#3u6>=7ML>4nJ@ErkR#;MwT(m=;Ydb&7FS*pv=9qGaL1~ZH)o&*>FW;_Km$z<6);l!UXZmURhW_pXXvClhj)%}MIlm0aViQ|i~K@m48bF?aIptxs2^ir&imwr^ut)=QVC zZ=W4VkSNZ$aBxfKDdx`+rB6PY96wGvq`RY&0E<8Y-;9-85u%l5*1n zixVf#o#x`>{{IZa|Ns9t9oXp_8s+5eE~lh;{L)!XFB?Y{6U(&VTv=uL>uVS$&Yf}W z{Ar*CmBp*>0V(B@AirRsHUfYlO|yC0L`Cs>Mh8z9#}Etu*2!{q7`7&IfCJlQ|l!m>-;a7c4U|Yvs~c zJPXnnys6*S5)eP*@^@Co8WyXKYMP5qWo(Izw^dKjbxN4P`|N=4uY38-?CT7sSo}OK z!?5E}I74A;j(bAHvJB2#8^*&9-ESBB{`x4mqm`q%!qFq~jEo|~YNh1ayARw+OI*tP zv1y5~%#^J=TRhl~=6+hSTqTnsPk8nNE6Ep@E}MMgwr9SJc$l!qebQ`;MaNyg-ix<9 z`D;TavKT_7cE0%JwbP-Yz zUWnMm3=%7}AA;PX^2~MQRBCF?Hd?vP^KReS+1RR`9erT?&VSE$c%Sz<@87Y})*{)^ zUUD_q*sv_iw6OY1zaLq8&nvu-gy*xKEtx=ftB<`F#y>2^Xh&tW zb|soN9;U8y$A9_wRL=?RxR>Qe3@oiImqq}_Ba1S1x9?-)YP3A-K8%k9#we^Q@@RHi zH-2HDpB|2m@gCCzgy&vIWsc|hakQNF*(fZ>hg+t0*_|{M9(EUeBMV;p%C`$ zcJK-n^1&2=qy`vgB6lY8l4$mIQRH4&KlgaOcv3${T7N~xBOfO0&kw_8Bsie0`dzL-iD?MW`hXG9_@EmdBDe8-HaHGO&$}rMxVKu6) z6)Zc>h5UdeX~;0BAiPKS`}p*A);3{0RsV^Nf&_X3U@8p(s1UrLQbBlMrKXw?g`)bt z%tSP=O+=Z%YiVoMYk}z?gkd(4mVP}X(>Ax08xqj$+;5l%HnJun04lgVZu0~tgAVEg=?)?+FY5@UG2i3o&JM zL4;RIMYtd&K1fA87_q6nKoCkJnR~ycW+3O5PDGMcgt9)*fj?chw|Gj8EA0RP002ov JPDHLkV1jU^uN43Q diff --git a/Resources/Textures/Interface/Alien/screen_alien.rsi/nightvision1.png b/Resources/Textures/Interface/Alien/screen_alien.rsi/nightvision1.png index f3fca7a4278eb7fe826b0fcc5e6ddd5755d6d09e..c2457ead6a624769b302228a9a3bc482822f8249 100644 GIT binary patch delta 535 zcmZ3?zLRBwWIZzj1B1(wu46!ou{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU!K3fKQ0) z)CDtTl;nUst8n*?`?epyaHefycRnlY1U0qE^Jd72DA;H^7By5@g}Z6U>Llf+2Nowz zoIB0M$6fR~!~g&PHyzmN^pi8PP(q3Kw7e z4`t~q_`8y+@!WMq^)naw3e;I=sP!*oc-`ZWajd*FB<(=MH=hM!3nY*C7>J*%fBELIW7&RXi9R#?N`q-L{$vK}cQu4mu=|`)a?ld7W)$8K zsdqa?`g{ZTho4&+%$XFK8J=I`U}*`^f3?n+^;_(kT)pBOJwdmpbU)Gv?r@rI^lFL< zzd~-2a8SCBlH#V^Q@djS%krzK?OeI|m*4IcQC$g>{uT=o=mW#|&3}9|JkR%j@81;C_9A(x z%1iOd7-779?+$IL07a6NIY{4s{zx-FXX!!kAq{sA@N-uM2;r^5-DDUB(YI-9?NOHZ z6N%sM2mo>AE+4i1{m#USnnJ|~t@YSklt=777M)7_Hg5qRFy&YCf;#0e?0>d|+;2K0g5A-SJ*im=Wdi*ZhKW0q@4bR57j*wfYHGSPvDY9v)$Z zY;YtXslen46R!uUI*SM#%Z<6zz3%hjOY0tC2}?KN)h7f5z!zb0C+we5te`j!hHkoCL%bbuIp=@5+V>0Po4)k z4}?cQSP_x4fR487)IyyUy5E)d99DoshLjbGGQv?H4%w`(m+=tKa~2Tnc}$w7QF|5< zo5hhT-G7?rECA%dvsYc47Gd`VamXzxMw`Kv)>d{v;LL@9a{<_q9e+mu|4nU^pBASl zt$RmdDCFl(UCh}BB141h{fFyo_y`<@Vf*Dy9&;gIQV}7ADeo{`kND_aKb`nGL~SY$ zJYCNItt(+TQTx|n#^9%?1-jRN0f5Bnz~vm z7dXxXAZ8Mq=~0Yu;p|bAQvJY6T1N!H3SPa^xqzX_peAkE(rV#BPbg;}FwByits?@l z^nV0-rDD4XSYpXm0r@D@5vcZo@6C=V9sA2l@~;ID!T$xG6oE7*$e4}C8)*2`2x&VC z`267qFS>%3Bf3(IltXE8idla~b}?R$&LRNGgaE{pmz23%4IzX_GCf=b$q%XcgB@F1 ujz!Qal9}tp#rw9kAJ9}1O8Y$r{s9~WwGownYlw>g0000 Date: Thu, 16 May 2024 18:43:46 +0300 Subject: [PATCH 11/18] Spawners for alien egg Alien egg spawner --- .../Entities/Objects/Misc/alien_egg.yml | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Resources/Prototypes/Entities/Objects/Misc/alien_egg.yml b/Resources/Prototypes/Entities/Objects/Misc/alien_egg.yml index 2444a113f66..93c03930f53 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/alien_egg.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/alien_egg.yml @@ -173,3 +173,33 @@ prototypes: - Facehugger +- type: entity + id: AlienEggSpawner + name: alien egg spawner + parent: MarkerBase + components: + - type: Sprite + layers: + - state: red + - sprite: Mobs/Aliens/Xenos/alien.rsi + state: egg + - type: RandomSpawner + prototypes: + - AlienEgg + chance: 1 + +- type: entity + id: AlienEggSpawnerRandom + name: alien egg spawner + suffix: 20% + parent: MarkerBase + components: + - type: Sprite + layers: + - state: red + - sprite: Mobs/Aliens/Xenos/alien.rsi + state: egg + - type: RandomSpawner + prototypes: + - AlienEgg + chance: 0.2 From f473692c97592c134a603ce42eee38f5349ae900 Mon Sep 17 00:00:00 2001 From: Enoken-crypto <68296202+Enoken-crypto@users.noreply.github.com> Date: Fri, 17 May 2024 10:53:12 +0300 Subject: [PATCH 12/18] Aliens greeting text --- .../Aliens/Systems/AlienInfectedSystem.cs | 7 +-- .../Aliens/Systems/AlienQueenSystem.cs | 2 +- Content.Server/Aliens/Systems/AlienSystem.cs | 43 +++++++++++++++++++ .../Aliens/Components/AlienComponent.cs | 3 +- .../Aliens/Components/AlienRoleComponent.cs | 12 ++++++ .../Systems/SharedPlasmaVesselSystem.cs | 3 +- Resources/Locale/en-US/abilities/alien.ftl | 5 ++- Resources/Locale/en-US/aliens/alien.ftl | 12 ++++++ .../Entities/Mobs/Player/aliens.yml | 14 +++++- 9 files changed, 91 insertions(+), 10 deletions(-) create mode 100644 Content.Shared/Aliens/Components/AlienRoleComponent.cs diff --git a/Content.Server/Aliens/Systems/AlienInfectedSystem.cs b/Content.Server/Aliens/Systems/AlienInfectedSystem.cs index 2294f556596..234b2a7f410 100644 --- a/Content.Server/Aliens/Systems/AlienInfectedSystem.cs +++ b/Content.Server/Aliens/Systems/AlienInfectedSystem.cs @@ -14,8 +14,11 @@ using Content.Shared.Gibbing.Components; using Content.Shared.Gibbing.Events; using Content.Shared.Gibbing.Systems; +using Content.Shared.Inventory.Events; using Content.Shared.Mobs; using Content.Shared.Random; +using Content.Shared.StatusIcon; +using Content.Shared.StatusIcon.Components; using FastAccessors; using Robust.Shared.Containers; using Robust.Shared.Random; @@ -33,9 +36,7 @@ public sealed class AlienInfectedSystem : EntitySystem [Dependency] private readonly BodySystem _body = default!; [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly GhostRoleSystem _ghostRole = default!; - [Dependency] private readonly MindSystem _mind = default!; - [Dependency] protected readonly SharedContainerSystem _container = default!; + [Dependency] private readonly SharedContainerSystem _container = default!; public override void Initialize() { base.Initialize(); diff --git a/Content.Server/Aliens/Systems/AlienQueenSystem.cs b/Content.Server/Aliens/Systems/AlienQueenSystem.cs index 4b86e971cbd..af5f34f857d 100644 --- a/Content.Server/Aliens/Systems/AlienQueenSystem.cs +++ b/Content.Server/Aliens/Systems/AlienQueenSystem.cs @@ -105,7 +105,7 @@ public void OnRoyalLarva(EntityUid uid, AlienQueenComponent component, RoyalLarv HasComp(args.Target) || HasComp(args.Target)) { - _popup.PopupEntity(Loc.GetString("alien-evolution-fail"), uid, uid); + _popup.PopupEntity(Loc.GetString("alien-promotion-fail"), uid, uid); return; } diff --git a/Content.Server/Aliens/Systems/AlienSystem.cs b/Content.Server/Aliens/Systems/AlienSystem.cs index 527ef700a7d..73f4f2c0e6a 100644 --- a/Content.Server/Aliens/Systems/AlienSystem.cs +++ b/Content.Server/Aliens/Systems/AlienSystem.cs @@ -1,7 +1,12 @@ using Content.Server.Actions; using Content.Server.Aliens.Systems; using Content.Server.Animals.Components; +using Content.Server.Chat.Managers; +using Content.Server.Ghost.Roles.Components; +using Content.Server.Mind; +using Content.Server.NPC.HTN; using Content.Server.Popups; +using Content.Server.Roles; using Content.Shared.Aliens; using Content.Shared.Aliens.Components; using Content.Shared.Aliens.Systems; @@ -13,12 +18,16 @@ using Content.Shared.DoAfter; using Content.Shared.Item; using Content.Shared.Maps; +using Content.Shared.Mind; +using Content.Shared.Mind.Components; using Content.Shared.Mobs; using Content.Shared.Mobs.Components; using Content.Shared.Physics; +using Content.Shared.Players; using Content.Shared.Tag; using Robust.Shared.Containers; using Robust.Shared.Map; +using Robust.Shared.Player; using AlienComponent = Content.Shared.Aliens.Components.AlienComponent; namespace Content.Server.Aliens.Systems; @@ -36,6 +45,9 @@ public sealed class AlienSystem : EntitySystem [Dependency] private readonly IMapManager _mapMan = default!; [Dependency] private readonly SharedContainerSystem _container = default!; [Dependency] private readonly SharedPlasmaVesselSystem _plasmaVessel = default!; + [Dependency] private readonly RoleSystem _role = default!; + [Dependency] private readonly MindSystem _mind = default!; + [Dependency] private readonly IChatManager _chatMan = default!; /// public override void Initialize() @@ -45,12 +57,43 @@ public override void Initialize() SubscribeLocalEvent(OnPickup); SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnNode); + SubscribeLocalEvent(OnTakeRole); } private void OnMapInit(EntityUid uid, AlienComponent component, MapInitEvent args) { _actions.AddAction(uid, ref component.ToggleLightingActionEntity, component.ToggleLightingAction); _actions.AddAction(uid, ref component.WeednodeActionEntity, component.WeednodeAction); + + } + + private void OnTakeRole(EntityUid uid, AlienComponent component, PlayerAttachedEvent args) + { + switch (component.Caste) + { + case "larva": + _chatMan.DispatchServerMessage(args.Player, Loc.GetString("alien-role-greeting")); + break; + case "drone": + _chatMan.DispatchServerMessage(args.Player, Loc.GetString("alien-drone-greeting")); + break; + case "sentinel": + _chatMan.DispatchServerMessage(args.Player, Loc.GetString("alien-sentinel-greeting")); + break; + case "hunter": + _chatMan.DispatchServerMessage(args.Player, Loc.GetString("alien-hunter-greeting")); + break; + case "praetorian": + _chatMan.DispatchServerMessage(args.Player, Loc.GetString("alien-praetorian-greeting")); + break; + case "queen": + _chatMan.DispatchServerMessage(args.Player, Loc.GetString("alien-queen-greeting")); + break; + case "maid": + _chatMan.DispatchServerMessage(args.Player, Loc.GetString("alien-maid-greeting")); + break; + } + } private void OnPickup(EntityUid uid, AlienComponent component, PickupAttemptEvent args) diff --git a/Content.Shared/Aliens/Components/AlienComponent.cs b/Content.Shared/Aliens/Components/AlienComponent.cs index 83357a0502a..e457f76b267 100644 --- a/Content.Shared/Aliens/Components/AlienComponent.cs +++ b/Content.Shared/Aliens/Components/AlienComponent.cs @@ -41,7 +41,8 @@ public sealed partial class AlienComponent : Component [DataField("nodeAction", customTypeSerializer: typeof(PrototypeIdSerializer))] public string? WeednodeAction = "ActionAlienNode"; - + [DataField] + public string Caste; [DataField("nodeActionEntity")] public EntityUid? WeednodeActionEntity; diff --git a/Content.Shared/Aliens/Components/AlienRoleComponent.cs b/Content.Shared/Aliens/Components/AlienRoleComponent.cs new file mode 100644 index 00000000000..aaa22769691 --- /dev/null +++ b/Content.Shared/Aliens/Components/AlienRoleComponent.cs @@ -0,0 +1,12 @@ +using Content.Shared.Roles; + +namespace Content.Shared.Aliens.Components; + +/// +/// This is used for... +/// +[RegisterComponent, ExclusiveAntagonist] +public sealed partial class AlienRoleComponent : AntagonistRoleComponent +{ + +} diff --git a/Content.Shared/Aliens/Systems/SharedPlasmaVesselSystem.cs b/Content.Shared/Aliens/Systems/SharedPlasmaVesselSystem.cs index 0a9fa544382..4efaa2b5519 100644 --- a/Content.Shared/Aliens/Systems/SharedPlasmaVesselSystem.cs +++ b/Content.Shared/Aliens/Systems/SharedPlasmaVesselSystem.cs @@ -48,8 +48,7 @@ public bool ChangePlasmaAmount(EntityUid uid, FixedPoint2 amount, PlasmaVesselCo } if(amount != component.PlasmaUnmodified && amount != component.WeedModifier) { - _popup.PopupEntity(Loc.GetString("alien-left-plasma-part1") + component.Plasma + Loc.GetString("alien-left-plama-part2"), - uid); + _popup.PopupEntity(Loc.GetString("alien-plasma-left", ("value", component.Plasma)), uid, uid); } _alerts.ShowAlert(uid, AlertType.PlasmaCounter, (short) Math.Clamp(Math.Round(component.Plasma.Float() / 50f), 0, 10)); diff --git a/Resources/Locale/en-US/abilities/alien.ftl b/Resources/Locale/en-US/abilities/alien.ftl index 19e5522d10b..1de6844a437 100644 --- a/Resources/Locale/en-US/abilities/alien.ftl +++ b/Resources/Locale/en-US/abilities/alien.ftl @@ -43,8 +43,7 @@ action-tail-lash-desc = Stun nearby enemies with your tail. action-transfer-plasma-alien = Transfer plasma action-transfer-plasma-alien-desc = Transfer 50 plasma to nearby sister. -alien-left-plasma-part1 = You have -alien-left-plama-part2 = plasma left for use. +alien-left-plasma = You have {$value} left for use. alien-create-structure-failed = You can't create structure here. alien-action-fail-plasma = You don't have enough plasma to make this. @@ -66,3 +65,5 @@ action-alien-jump = Leap action-alien-jump-desc = Leap onto your enemies stunning them. alien-evolution-fail = There is a royal xenomorph alreagy. + +alerts-promotion-fail = This daughter is already a royal xenomorph. diff --git a/Resources/Locale/en-US/aliens/alien.ftl b/Resources/Locale/en-US/aliens/alien.ftl index dfde4b25b3a..87adc706526 100644 --- a/Resources/Locale/en-US/aliens/alien.ftl +++ b/Resources/Locale/en-US/aliens/alien.ftl @@ -29,3 +29,15 @@ station-event-alien-infestation-anouncement = Unidentified lifesigns detected co hud-chatbox-select-channel-XenoHivemind = Hivemind ghost-role-information-alien-larva-inside-description = Become an alien larva that is going to burst out. + +alien-role-greeting = You are an alien larva. Help your hive to expand. You can contact your hive adding "a" to beginning of your message. If you are first alien - find place for a new hive and evolve into drone. +alien-hunter-greeting = You are an alien hunter. Find facehuggers, throw them at your preys. Devour people and get them to your hive. +alien-drone-greeting = You are an alien drone. Build your hive, evolve into praetorian, if you are first. +alien-sentinel-greeting = You are an alien sentinel. Defend your hive, fight off intruders. +alien-praetorian-greeting = You are an alien praetorian. Defend your queen. Help build new hives. Evolve into queen if there isn't one yet. +alien-queen-greeting = You are an alien queen. Command your hive, lay eggs. STAY FUKKEN' ALIVE. +alien-maid-greeting = You are an alien maid. Be lusty. Do most important job in your hive - seduce fellow spaceman. + +alerts-plasma-name = Plasma +alerts-plasma-desc = Your body is syntesizing plasma, that you can use for your abilities + diff --git a/Resources/Prototypes/Entities/Mobs/Player/aliens.yml b/Resources/Prototypes/Entities/Mobs/Player/aliens.yml index a0bdcf6bb8c..f23bd5742d1 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/aliens.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/aliens.yml @@ -111,6 +111,7 @@ - Critical - Dead - type: Alien + caste: larva weedHeal: groups: Burn: -5 @@ -351,6 +352,7 @@ - Critical - Dead - type: Alien + caste: drone weedHeal: groups: Burn: -5 @@ -424,6 +426,8 @@ id: MobAlienSentinel parent: MobAlienBase components: + - type: Alien + caste: sentinel - type: AlienStalk - type: AcidMaker action: ActionMakeAcid @@ -495,6 +499,8 @@ id: MobAlienPraetorian parent: MobAlienBase components: + - type: Alien + caste: praetorian - type: AcidMaker action: ActionMakeAcid entityProduced: AlienAcid @@ -573,6 +579,8 @@ id: MobAlienHunter parent: MobAlienBase components: + - type: Alien + caste: hunter - type: Sprite drawdepth: Mobs sprite: Mobs/Aliens/Xenos/alien.rsi @@ -647,6 +655,8 @@ id: MobAlienQueen parent: MobAlienBase components: + - type: Alien + caste: queen - type: Sprite drawdepth: Mobs sprite: Mobs/Aliens/Xenos/alienqueen.rsi @@ -716,11 +726,13 @@ - type: TailLash - type: entity - name: Lusty alien maiden + name: Lusty alien maid description: Don't ask it to lay eggs in you. id: MobAlieMaiden parent: MobAlienBase components: + - type: Alien + caste: maid - type: PlasmaVessel plasmaPerSecond: 5 plasmaModified: 40 From 84f4cc69f150aebf07b0a013a5510bac059adb0a Mon Sep 17 00:00:00 2001 From: Enoken-crypto <68296202+Enoken-crypto@users.noreply.github.com> Date: Sat, 18 May 2024 02:36:09 +0300 Subject: [PATCH 13/18] Some fixes --- Resources/Prototypes/Entities/Mobs/Player/aliens.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Mobs/Player/aliens.yml b/Resources/Prototypes/Entities/Mobs/Player/aliens.yml index f23bd5742d1..804325a089a 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/aliens.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/aliens.yml @@ -728,7 +728,7 @@ - type: entity name: Lusty alien maid description: Don't ask it to lay eggs in you. - id: MobAlieMaiden + id: MobAlienMaid parent: MobAlienBase components: - type: Alien @@ -775,3 +775,4 @@ Base: maid Dead: Base: maid_dead + - type: OwOAccent From 683b1363281d65a8f35c54a9ac97776734f10b89 Mon Sep 17 00:00:00 2001 From: Enoken-crypto <68296202+Enoken-crypto@users.noreply.github.com> Date: Sun, 19 May 2024 14:56:25 +0300 Subject: [PATCH 14/18] Locale & fixes --- Content.Server/Aliens/Systems/AlienInfectedSystem.cs | 1 + Content.Shared/Aliens/Systems/SharedFacehuggerSystem.cs | 4 ++-- .../Aliens/Systems/SharedPlasmaTransferSystem.cs | 9 +++++++-- Resources/Locale/en-US/abilities/alien.ftl | 7 ++++++- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/Content.Server/Aliens/Systems/AlienInfectedSystem.cs b/Content.Server/Aliens/Systems/AlienInfectedSystem.cs index 234b2a7f410..22d624a74ef 100644 --- a/Content.Server/Aliens/Systems/AlienInfectedSystem.cs +++ b/Content.Server/Aliens/Systems/AlienInfectedSystem.cs @@ -80,6 +80,7 @@ public override void Update(float frameTime) var larva = Spawn(infected.Prototype, Transform(uid).Coordinates); _container.Insert(larva, infected.Stomach); infected.SpawnedLarva = larva; + infected.GrowthStage++; } if (_random.Prob(infected.GrowProb)) diff --git a/Content.Shared/Aliens/Systems/SharedFacehuggerSystem.cs b/Content.Shared/Aliens/Systems/SharedFacehuggerSystem.cs index 2e190004049..401accd9778 100644 --- a/Content.Shared/Aliens/Systems/SharedFacehuggerSystem.cs +++ b/Content.Shared/Aliens/Systems/SharedFacehuggerSystem.cs @@ -78,8 +78,8 @@ public override void Update(float frameTime) if (invalidEntities.ContainsKey(entity.Key)) continue; - _inventory.TryUnequip(entity.Value, "mask"); - _inventory.TryEquip(entity.Value, entity.Key, "mask"); + _inventory.TryUnequip(entity.Value, "mask", true); + _inventory.TryEquip(entity.Value, entity.Key, "mask", true); } diff --git a/Content.Shared/Aliens/Systems/SharedPlasmaTransferSystem.cs b/Content.Shared/Aliens/Systems/SharedPlasmaTransferSystem.cs index 29e951d083a..c392d7fd6a7 100644 --- a/Content.Shared/Aliens/Systems/SharedPlasmaTransferSystem.cs +++ b/Content.Shared/Aliens/Systems/SharedPlasmaTransferSystem.cs @@ -33,6 +33,12 @@ private void OnCompInit(EntityUid uid, PlasmaTransferComponent comp, ComponentSt public void OnPlasmaTransfer(EntityUid uid, PlasmaTransferComponent component, TransferPlasmaActionEvent args) { + if (args.Handled) + { + return; + } + + args.Handled = true; if (!HasComp(args.Target)) { _popup.PopupEntity(Loc.GetString("alien-transfer-fail"), uid); @@ -50,11 +56,10 @@ public void OnPlasmaTransfer(EntityUid uid, PlasmaTransferComponent component, T { _popup.PopupEntity(Loc.GetString("alien-transfer-fail"), uid); } - } /// - /// Takeths away the action to preform making acid from the entity. + /// Takeths away the action to preform plasma transfer from the entity. /// private void OnCompRemove(EntityUid uid, PlasmaTransferComponent comp, ComponentShutdown args) { diff --git a/Resources/Locale/en-US/abilities/alien.ftl b/Resources/Locale/en-US/abilities/alien.ftl index 1de6844a437..afc267c5446 100644 --- a/Resources/Locale/en-US/abilities/alien.ftl +++ b/Resources/Locale/en-US/abilities/alien.ftl @@ -43,7 +43,7 @@ action-tail-lash-desc = Stun nearby enemies with your tail. action-transfer-plasma-alien = Transfer plasma action-transfer-plasma-alien-desc = Transfer 50 plasma to nearby sister. -alien-left-plasma = You have {$value} left for use. +alien-plasma-left = You have {$value} left for use. alien-create-structure-failed = You can't create structure here. alien-action-fail-plasma = You don't have enough plasma to make this. @@ -67,3 +67,8 @@ action-alien-jump-desc = Leap onto your enemies stunning them. alien-evolution-fail = There is a royal xenomorph alreagy. alerts-promotion-fail = This daughter is already a royal xenomorph. + +alien-transfer-fail = You can't transfer plasma here now. + +action-create-alien-nest-name = Create nest +action-create-alien-nest-desc = Create nest that holds your preys for a long time. From 362c17b51618ebd6c3eec335862d622ef0af4904 Mon Sep 17 00:00:00 2001 From: Enoken-crypto <68296202+Enoken-crypto@users.noreply.github.com> Date: Sun, 19 May 2024 15:23:09 +0300 Subject: [PATCH 15/18] Rsi names fix --- .../{Drone Back Half.png => Drone_Back_Half.png} | Bin .../{Drone Front Half.png => Drone_Front_Half.png} | Bin .../{Hunter Back Half.png => Hunter_Back_Half.png} | Bin ...{Hunter Front Half.png => Hunter_Front_Half.png} | Bin ...orian Back Half.png => Praetorian_Back_Half.png} | Bin ...ian Front Half.png => Praetorian_Front_Half.png} | Bin ...entinel Back Half.png => Sentinel_Back_Half.png} | Bin ...tinel Front Half.png => Sentinel_Front_Half.png} | Bin 8 files changed, 0 insertions(+), 0 deletions(-) rename Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/{Drone Back Half.png => Drone_Back_Half.png} (100%) rename Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/{Drone Front Half.png => Drone_Front_Half.png} (100%) rename Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/{Hunter Back Half.png => Hunter_Back_Half.png} (100%) rename Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/{Hunter Front Half.png => Hunter_Front_Half.png} (100%) rename Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/{Praetorian Back Half.png => Praetorian_Back_Half.png} (100%) rename Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/{Praetorian Front Half.png => Praetorian_Front_Half.png} (100%) rename Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/{Sentinel Back Half.png => Sentinel_Back_Half.png} (100%) rename Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/{Sentinel Front Half.png => Sentinel_Front_Half.png} (100%) diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Drone Back Half.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Drone_Back_Half.png similarity index 100% rename from Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Drone Back Half.png rename to Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Drone_Back_Half.png diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Drone Front Half.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Drone_Front_Half.png similarity index 100% rename from Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Drone Front Half.png rename to Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Drone_Front_Half.png diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Hunter Back Half.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Hunter_Back_Half.png similarity index 100% rename from Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Hunter Back Half.png rename to Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Hunter_Back_Half.png diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Hunter Front Half.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Hunter_Front_Half.png similarity index 100% rename from Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Hunter Front Half.png rename to Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Hunter_Front_Half.png diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Praetorian Back Half.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Praetorian_Back_Half.png similarity index 100% rename from Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Praetorian Back Half.png rename to Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Praetorian_Back_Half.png diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Praetorian Front Half.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Praetorian_Front_Half.png similarity index 100% rename from Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Praetorian Front Half.png rename to Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Praetorian_Front_Half.png diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Sentinel Back Half.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Sentinel_Back_Half.png similarity index 100% rename from Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Sentinel Back Half.png rename to Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Sentinel_Back_Half.png diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Sentinel Front Half.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Sentinel_Front_Half.png similarity index 100% rename from Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Sentinel Front Half.png rename to Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Sentinel_Front_Half.png From e48570b1422a04979ef9ec7e608d6a7b05f18db0 Mon Sep 17 00:00:00 2001 From: Enoken-crypto <68296202+Enoken-crypto@users.noreply.github.com> Date: Sun, 19 May 2024 15:28:20 +0300 Subject: [PATCH 16/18] Filename Fix 2 --- .../{Hunter Stalking.png => Hunter_Stalking.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/{Hunter Stalking.png => Hunter_Stalking.png} (100%) diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Hunter Stalking.png b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Hunter_Stalking.png similarity index 100% rename from Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Hunter Stalking.png rename to Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/Hunter_Stalking.png From efe529024421d53ce864493279c66f084862f85c Mon Sep 17 00:00:00 2001 From: Enoken-crypto <68296202+Enoken-crypto@users.noreply.github.com> Date: Sun, 19 May 2024 15:34:32 +0300 Subject: [PATCH 17/18] Xeno Vents event Now alien infestation replaces xeno vents gamerule --- .../Prototypes/DeltaV/GameRules/events.yml | 23 +++++-------------- Resources/Prototypes/GameRules/events.yml | 22 ------------------ 2 files changed, 6 insertions(+), 39 deletions(-) diff --git a/Resources/Prototypes/DeltaV/GameRules/events.yml b/Resources/Prototypes/DeltaV/GameRules/events.yml index 73b0ca6549c..42ebd2ace14 100644 --- a/Resources/Prototypes/DeltaV/GameRules/events.yml +++ b/Resources/Prototypes/DeltaV/GameRules/events.yml @@ -1,5 +1,5 @@ - type: entity - id: XenoVents + id: AlienInfestation parent: BaseGameRule noSpawn: true components: @@ -13,22 +13,11 @@ duration: 60 - type: VentCrittersRule entries: - - id: MobXeno - prob: 0.01 - - id: MobXenoRouny - prob: 0.005 - - id: MobXenoDrone - prob: 0.005 - - id: MobXenoSpitter - prob: 0.005 - - id: MobXenoRunner - prob: 0.005 - - id: MobXenoPraetorian - prob: 0.005 - - id: MobXenoRavager - prob: 0.005 - - id: MobXenoQueen - prob: 0.005 + - id: SpawnPointGhostAlienLarva + prob: 0.05 + specialEntries: + - id: SpawnPointGhostAlienLarva + prob: 0.05 - type: entity id: MothroachSpawn diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml index eef7fafa53e..6812ca14f70 100644 --- a/Resources/Prototypes/GameRules/events.yml +++ b/Resources/Prototypes/GameRules/events.yml @@ -477,25 +477,3 @@ minimumPlayers: 20 weight: 5 - type: MobReplacementRule - -- type: entity - id: AlienInfestation - parent: BaseGameRule - noSpawn: true - components: - - type: StationEvent - startAnnouncement: station-event-alien-infestation-anouncement - startAudio: - path: /Audio/Announcements/attention.ogg - startDelay: 10 - earliestStart: 20 - minimumPlayers: 10 - weight: 5 - duration: 1 - - type: VentCrittersRule - entries: - - id: SpawnPointGhostAlienLarva - prob: 0.05 - specialEntries: - - id: SpawnPointGhostAlienLarva - prob: 0.05 From 5b85df8d162d636ccd6db355b08f0bc27d5dc5db Mon Sep 17 00:00:00 2001 From: Enoken-crypto <68296202+Enoken-crypto@users.noreply.github.com> Date: Sun, 19 May 2024 18:54:38 +0300 Subject: [PATCH 18/18] Rsi fix --- .../Clothing/Mask/facehugger.rsi/meta.json | 4 ++-- .../Alerts/plasma_counter.rsi/meta.json | 2 +- .../Mobs/Aliens/Xenos/alien.rsi/meta.json | 18 +++++++++--------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Resources/Textures/Clothing/Mask/facehugger.rsi/meta.json b/Resources/Textures/Clothing/Mask/facehugger.rsi/meta.json index 662ccbd51ff..b0555d7d958 100644 --- a/Resources/Textures/Clothing/Mask/facehugger.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/facehugger.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, - "license": null, - "copyright": null, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation on https://github.com/tgstation/tgstation/blob/master/icons/mob/clothing/mask.dmi", "size": { "x": 32, "y": 32 diff --git a/Resources/Textures/Interface/Alerts/plasma_counter.rsi/meta.json b/Resources/Textures/Interface/Alerts/plasma_counter.rsi/meta.json index aa7f47056c8..263023a9a52 100644 --- a/Resources/Textures/Interface/Alerts/plasma_counter.rsi/meta.json +++ b/Resources/Textures/Interface/Alerts/plasma_counter.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Created by Kai5", + "copyright": "Redacted by Kai5, take taken from tgstation on https://github.com/tgstation/tgstation/blob/master/icons/hud/screen_alien.dmin from", "size": { "x": 32, "y": 32 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/meta.json b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/meta.json index 72676a25448..1eefed76a14 100644 --- a/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/meta.json +++ b/Resources/Textures/Mobs/Aliens/Xenos/alien.rsi/meta.json @@ -131,39 +131,39 @@ "name": "bursted_lie" }, { - "name": "Hunter Stalking", + "name": "Hunter_Stalking", "directions": 4 }, { - "name": "Hunter Front Half", + "name": "Hunter_Front_Half", "directions": 4 }, { - "name": "Hunter Back Half", + "name": "Hunter_Back_Half", "directions": 4 }, { - "name": "Drone Front Half", + "name": "Drone_Front_Half", "directions": 4 }, { - "name": "Drone Back Half", + "name": "Drone_Back_Half", "directions": 4 }, { - "name": "Sentinel Front Half", + "name": "Sentinel_Front_Half", "directions": 4 }, { - "name": "Sentinel Back Half", + "name": "Sentinel_Back_Half", "directions": 4 }, { - "name": "Praetorian Front Half", + "name": "Praetorian_Front_Half", "directions": 4 }, { - "name": "Praetorian Back Half", + "name": "Praetorian_Back_Half", "directions": 4 }, {