From 2620eb48a887d13481357c9ade6f5711920e7f14 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Thu, 7 Nov 2024 20:09:25 +0000 Subject: [PATCH] upstream merge 2/11 (#2090) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix multiplying colors of differing nullabilities (#32991) * revert the temporary hack * Make atmos alert computer colors private variables (#32992) * Add flash reaction effect (#32377) add flash reaction effect * Automatic changelog update * Fix loneop spawnrate by reverting it to not use the shuttle event system. (#32942) Fix loneop spawnrate by reverting it to not use the custom shuttle event system. * Automatic changelog update * add atmosia to devmap (#32460) change * bowls now make drinking sounds (#32819) * Automatic changelog update * Add health analyzer unrevivability warning (#32636) * Add health analyzer unrevivability warning * Remove errornous comment * Automatic changelog update * Removed the name "Hujsak" (#32998) removed hujsak * fix pie throwing sound not playing (#33017) * Automatic changelog update * Fix TestSuicideByHeldItem and TestSuicideByHeldItemSpreadDamage (#33030) * make ai speak robotically (#33025) * Automatic changelog update * Extends the minimum round time for meteor swarm events (#32876) * adjusted minimum timers in meteorswarms.yml * Updated timer minimum from 20 to 15 minutes * Reduced minimum timer to 10 minutes as a result of other meteor changes --------- Co-authored-by: august-sun <45527070+august.sun@users.noreply.github.com> * Automatic changelog update * add StartDelay bool to actions (#33026) * add StartDelay bool to actions * forgot summary * Updated an incorrect sprite in the smite menu (#33043) changed the synth sprite used in the icon for the instrumentify smite out for the more accurate supersynth sprite * fix lava expeds (#33042) Co-authored-by: deltanedas <@deltanedas:kde.org> * Automatic changelog update * Fix separated game screen bumping (#33046) I don't really understand why RecordedSplitContainer exists but removing it looks identical and fixes the panel bumping occasionally. * Automatic changelog update * Fix: Make Plushie Damage Unexaminable (#33061) Set hidden to true * fix chameleon projector bot whitelist (#33055) fix * Various Vaugely Connected Sprite Updates™: Encryption Keys, Station Map, Brig Timer (#32786) * various resprites (encryption keys + signal screens + station map) * brig timer update * fixes n shit * Give proto-kinetic crushers, glaives, and daggers better inhands. Update the crusher and glaive icons. (#32212) * inhands * better inhands * indent * Automatic changelog update * Make the security belt contain more useful items by default (#32291) * replace tear gas and flashbang with holobarrier and sec radio * holobarrier-belt-fix * revert changes of 32291 * Automatic changelog update * Add 3 bottle boxes to nanomed plus (#33018) three bottle boxes in nanomed plus * Automatic changelog update * Nukie med bundle now costs 24 tc and contains a unique defibrillator (#32720) * a-few-injectors * comment * defib-ops-when * Automatic changelog update * Pill Bottles can only store pills now (#33074) * no longer absurd * Update Resources/Prototypes/Entities/Objects/Specific/chemistry.yml --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Automatic changelog update * Add a spare bible to PietyVend (#32363) Update chapel.yml * Automatic changelog update * [#28722 fix] Add notification for dependent wearables being dropped (#33078) * add notification for dependent wearables being dropped * fix dropped item popup redundancy - did a check to see if any item was dropped, instead of making a notification for each item being dropped. * change popup to client-only variant * fix redundant messages, add plural locale string * fix conventions, fix locale input to be more intuitive --------- Co-authored-by: Justin * Automatic changelog update * More pda space (#32601) * Rebalance the max programs that a PDA can hold * Give Caps PDA more programs too. * Make the max programs a static 8 * I forgor sec and med * CaseCase * Empty commit to re-run checks * The final change, I hope. * Automatic changelog update * Fixed spelling mistake in water blaster description. (#33087) Fixed minor spelling mistake * [#20285 fix] Carp Plush and Rehydratables can now be put into mop bucket (#33079) * Make shark plush janitor-bucketable * fix bucketed grey shark texture * Make sprites less shiny and adapt copyright notice * Made shark way way less shiny * Allow carp plush and rehydratables in mop bucket. * Remove old mop bucket shark sprites * Fix post-merge bugs * Fix errors * Move ReactiveContainer stuff to shared That should mean it is now predicted. * Custom eject verb for the mop bucket * Fixes OnSolutionChange, removes pop-up as there already is one. * .ftl is not necessary as the custom pop-up was removed * Review fixes * Update Content.Shared/Chemistry/Components/ReactiveContainerComponent.cs * Update Content.Shared/Chemistry/EntitySystems/ReactiveContainerSystem.cs --------- Co-authored-by: Psychpsyo Co-authored-by: Psychpsyo <60073468+Psychpsyo@users.noreply.github.com> Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Automatic changelog update * remove now duplicated nyano PlushieCarp tag * Fixes tailthump breaking positional audio by making it mono (#33092) * Automatic changelog update * ExaminableDamage now puts its message at the bottom and in color (#32820) * the examineableDamage component now puts its messages at the bottom, and in color * god help us if something is priority -100 :godo: * Automatic changelog update * Lower in-round votekick requirements (#32953) Initial commit * Allow votekicks to be initiated in the lobby (#32528) Initial commit * Automatic changelog update * Fixes bolt lights of previously unpowered bolted doors (#33063) fix * Automatic changelog update * Muffins (#29318) * Update meta.json * Add files via upload * Update misc.yml * Update meal_recipes.yml * Update meta.json * Add files via upload * Update plate.yml * Update food_baked_single.yml * Update dinnerware.yml * Update cooking.yml * Update misc.yml * Add files via upload * Delete Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/muffin-cherry.png * Add files via upload * Update meta.json * Update misc.yml * Update meal_recipes.yml * Update meta.json * Fix meta.json * Fix meta.json again * Update misc.yml * Update misc.yml * Update misc.yml * Update misc.yml * Update meta.json * Update meta.json * Update misc.yml * Update meal_recipes.yml * Update Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Update dinnerware.yml * Delete cherry * Add files via upload * Delete banana * Add banana * Delete chocolate * Add chocolate * lathe recipe fix --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Automatic changelog update * Borgs can no longer see mindshield + AI can no longer toggle off seeing job icons (#33069) * :( * Removed the sprite + updated RSI * Automatic changelog update * Add CanLoad for biomes (#33050) CPUJob to come later. * Remove CargoPallet component from the cargo pallet (#33022) * Change cargo shuttle pallets to catwalks. * Remove CargoPallet component from the cargo pallet. * Undo cargo shuttle changes. * Automatic changelog update * Minor antagonist guidebook changes (#32824) * took a two month nap. accidentally pushed too many buttons. let's try this again. added thieves to antagonists.xml * even after that nap, i don't feel well-rested at all. * please don't kill me for using webedit * capitalization, typo * Apply suggestions from code review (more period moving) Thanks Evan, very cool Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * guess you could say im not pro-proper noun * typo * Update Resources/ServerInfo/Guidebook/Antagonist/Nuclear Operatives.xml * ok Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> * Give Nukies a Hand Labeler (#33053) * Add hand-labeler to nukie planet * Rearrange nukie chem table * Fix `ItemSlotSystem` popup Logic (#28856) * move popup call out of `CanInsert` into `OnInteractUsing` * im stupid and `reason` is completely unnecessary Signed-off-by: Brandon Li * return early when `itemSlots.Slots.Count == 0` * tweak logic for triggering popups * change popup logic again * Consolidate whitelist check * Get any popup message not just last failed slot * Apply suggestions from code review Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> * yoink Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> --------- Signed-off-by: Brandon Li Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> * Add cvars to votekick to customize requirements for the initiator. (#32490) * Automatic changelog update * Add on-call functionality for adminning (#30443) * Add on-call functionality for adminning The first time an ahelp gets SOS it gets relayed to the specified channel with the specified ping. Every time after that it doesn't until it gets a non-SOS response received. * Remove redundant name Pretty sure this already gets chucked on the name of the msg itself I think it just didn't show in screenshot because they were subsequent. * Update Content.Server/Administration/Systems/BwoinkSystem.cs Co-authored-by: Chief-Engineer <119664036+Chief-Engineer@users.noreply.github.com> --------- Co-authored-by: Chief-Engineer <119664036+Chief-Engineer@users.noreply.github.com> Co-authored-by: deathride58 * Automatic changelog update * Pills are explosion resistant (partially reverts #15851) (#32458) * idk how to revert a pr so I just deleted some lines * pill destructible with explosion resistance * comment for explosion resist * "and" to "but" --------- Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> * Automatic changelog update * Hasten handcraft gauze recipe & decrease techfab gauze cost (#32744) * med lathe gauze price reduction * gauze craft doafter time * 3 second doafter craft * Automatic changelog update * Service workers antagonist fix. (#31359) * add * Revert "add" This reverts commit 25da34b0fead5812fe5800c9bf5dd7b10ef48d7d. * antagonism allowed:tm: * Automatic changelog update * Adds a new AME sound effect! (#33097) * Changes the AME sound effect to not be the default MetalThud. * Was told on discord to make a minor change to autorerun the tests due to the Build & Test Debug failing! * Attribution and licensing, as requsted by deathride58 * Fixes the high-pitched squeak audible to some people! * Audio file tweaked by SlamBamActionMan to eliminate a weird squeak they were still able to hear. Thanks! * Automatic changelog update * Allow for the ai's laws to be changed from its core and eye (#32461) * Allow for the ai's laws to be changed from its core and eye * Address reviews * Automatic changelog update * clean up tools lathe recipes (#31521) * clean up tools lathe recipes * add medical and cooking tools * add result * add result to others * review * engine --------- Co-authored-by: deltanedas <@deltanedas:kde.org> * Automatic changelog update * Intercoms and Radios both pick up proximate speech (#32737) * Deduping of recent messages should consider the channel it's being sent to * rerun actions * Automatic changelog update * Adds headphones to loadouts (#33067) added headphones to trinkets * Automatic changelog update * Cardboard Box Capacity 4 -> 5 (#32743) * capacity upgrade * comment update * remove our duplicate pill whitelist * fix * remove broken crew monitor from dev map, how did it even get there --------- Signed-off-by: Brandon Li Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> Co-authored-by: deltanedas <@deltanedas:kde.org> Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Co-authored-by: PJBot Co-authored-by: BramvanZijp <56019239+BramvanZijp@users.noreply.github.com> Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com> Co-authored-by: Moomoobeef <62638182+Moomoobeef@users.noreply.github.com> Co-authored-by: Saphire Lattice Co-authored-by: FluffMe <1780586+FluffMe@users.noreply.github.com> Co-authored-by: Theodore Lukin <66275205+pheenty@users.noreply.github.com> Co-authored-by: August Sun <45527070+august-sun@users.noreply.github.com> Co-authored-by: august-sun <45527070+august.sun@users.noreply.github.com> Co-authored-by: lzk <124214523+lzk228@users.noreply.github.com> Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Co-authored-by: Preston Smith <92108534+thetolbean@users.noreply.github.com> Co-authored-by: Milon Co-authored-by: Flareguy <78941145+Flareguy@users.noreply.github.com> Co-authored-by: Alzore <140123969+Blackern5000@users.noreply.github.com> Co-authored-by: Boaz1111 <149967078+Boaz1111@users.noreply.github.com> Co-authored-by: Jarmer123 <148848017+Jarmer123@users.noreply.github.com> Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> Co-authored-by: Justin Co-authored-by: SpaceLizard Co-authored-by: Psychpsyo Co-authored-by: Psychpsyo <60073468+Psychpsyo@users.noreply.github.com> Co-authored-by: deathride58 Co-authored-by: PopGamer46 Co-authored-by: RumiTiger <154005209+RumiTiger@users.noreply.github.com> Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Co-authored-by: Minemoder5000 Co-authored-by: UBlueberry <161545003+UBlueberry@users.noreply.github.com> Co-authored-by: Brandon Li <48413902+aspiringLich@users.noreply.github.com> Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> Co-authored-by: Vasilis Co-authored-by: Chief-Engineer <119664036+Chief-Engineer@users.noreply.github.com> Co-authored-by: K-Dynamic <20566341+K-Dynamic@users.noreply.github.com> Co-authored-by: Ubaser <134914314+UbaserB@users.noreply.github.com> Co-authored-by: AftrLite <61218133+AftrLite@users.noreply.github.com> Co-authored-by: nikthechampiongr <32041239+nikthechampiongr@users.noreply.github.com> Co-authored-by: Centronias Co-authored-by: joshepvodka <86210200+joshepvodka@users.noreply.github.com> Co-authored-by: Scribbles0 <91828755+Scribbles0@users.noreply.github.com> --- .../AtmosAlertsComputerWindow.xaml.cs | 43 +- .../UI/HealthAnalyzerWindow.xaml | 3 +- .../UI/HealthAnalyzerWindow.xaml.cs | 25 +- Content.Client/Mapping/MappingScreen.xaml | 4 +- Content.Client/Mapping/MappingScreen.xaml.cs | 1 - .../Controls/RecordedSplitContainer.cs | 29 - .../Screens/SeparatedChatGameScreen.xaml | 6 +- .../Screens/SeparatedChatGameScreen.xaml.cs | 1 - Content.Client/Voting/UI/VoteCallMenu.xaml.cs | 14 +- Content.Client/Voting/VotingSystem.cs | 5 - .../Tests/Commands/SuicideCommandTests.cs | 8 +- .../Systems/AdminVerbSystem.Smites.cs | 2 +- .../Administration/Systems/AdminVerbSystem.cs | 29 +- .../Administration/Systems/BwoinkSystem.cs | 207 +- .../Ame/Components/AmeControllerComponent.cs | 2 +- .../Damage/Systems/ExaminableDamageSystem.cs | 2 +- Content.Server/Doors/Systems/DoorSystem.cs | 2 +- .../Effects/FlashReactionEffect.cs | 82 + Content.Server/Ghost/GhostSystem.cs | 9 +- Content.Server/Medical/CryoPodSystem.cs | 1 + .../Medical/HealthAnalyzerSystem.cs | 8 +- .../Nutrition/EntitySystems/CreamPieSystem.cs | 4 +- Content.Server/Parallax/BiomeSystem.cs | 14 +- .../Radio/EntitySystems/RadioDeviceSystem.cs | 11 +- .../Managers/VoteManager.DefaultVotes.cs | 15 +- Content.Server/Voting/VotingSystem.cs | 52 +- Content.Shared/Actions/BaseActionComponent.cs | 5 + Content.Shared/Actions/SharedActionsSystem.cs | 3 + Content.Shared/Bed/Sleep/SleepingSystem.cs | 3 - Content.Shared/CCVar/CCVars.cs | 34 +- .../CartridgeLoaderComponent.cs | 2 +- .../Components/ReactiveContainerComponent.cs | 21 + .../EntitySystems/ReactiveContainerSystem.cs | 53 + .../Containers/ItemSlot/ItemSlotsSystem.cs | 155 +- .../Inventory/InventorySystem.Equip.cs | 45 +- .../HealthAnalyzerScannedUserMessage.cs | 4 +- .../Audio/Machines/ame_fuelinjection.ogg | Bin 0 -> 29727 bytes Resources/Audio/Machines/attributions.yml | 5 + .../Voice/Reptilian/reptilian_tailthump.ogg | Bin 31956 -> 9215 bytes Resources/Changelog/Admin.yml | 23 + Resources/Changelog/Changelog.yml | 528 ++- .../en-US/guidebook/chemistry/effects.ftl | 6 + .../components/inventory-component.ftl | 6 + .../janitorial/janitorial-slot-component.ftl | 3 +- .../components/health-analyzer-component.ftl | 3 +- .../Locale/en-US/store/uplink-catalog.ftl | 4 +- .../Locale/en-US/voting/ui/vote-call-menu.ftl | 4 +- .../Locale/en-US/window/window-component.ftl | 9 +- Resources/Maps/Nonstations/nukieplanet.yml | 9 +- Resources/Maps/Test/dev_map.yml | 3805 ++++++++++++++--- Resources/Prototypes/Actions/station_ai.yml | 19 +- Resources/Prototypes/Actions/types.yml | 2 + .../Catalog/Fills/Backpacks/duffelbag.yml | 16 +- .../Prototypes/Catalog/Fills/Items/belt.yml | 6 +- .../VendingMachines/Inventories/chapel.yml | 3 +- .../Inventories/dinnerware.yml | 1 + .../VendingMachines/Inventories/medical.yml | 1 + .../Prototypes/Catalog/uplink_catalog.yml | 4 +- Resources/Prototypes/Datasets/Names/last.yml | 1 - .../Entities/Clothing/Belt/belts.yml | 1 - .../Entities/Effects/chemistry_effects.yml | 13 + .../Random/Food_Drinks/food_baked_single.yml | 2 + .../Mobs/Cyborgs/base_borg_chassis.yml | 1 - .../Entities/Mobs/Player/admin_ghost.yml | 6 +- .../Entities/Mobs/Player/observer.yml | 1 + .../Entities/Mobs/Player/silicon.yml | 4 +- .../Objects/Consumable/Food/Baked/misc.yml | 95 +- .../Consumable/Food/Containers/bowl.yml | 4 + .../Consumable/Food/Containers/plate.yml | 24 + .../Objects/Devices/holoprojectors.yml | 1 + .../Entities/Objects/Devices/pda.yml | 77 +- .../Prototypes/Entities/Objects/Fun/toys.yml | 5 +- .../Objects/Specific/Cargo/cargo_pallet.yml | 2 - .../Objects/Specific/Medical/defib.yml | 66 + .../Objects/Specific/Medical/hypospray.yml | 97 +- .../Entities/Objects/Specific/chemistry.yml | 20 +- .../Objects/Specific/rehydrateable.yml | 5 +- .../Objects/Weapons/Guns/Basic/watergun.yml | 4 +- .../Entities/Objects/Weapons/Melee/mining.yml | 4 + .../Entities/Structures/Machines/lathe.yml | 1 + .../Structures/Piping/Atmospherics/miners.yml | 8 + .../Structures/Specific/Janitor/janicart.yml | 19 +- .../Structures/Storage/Closets/big_boxes.yml | 2 +- .../Entities/Structures/Wallmounts/timer.yml | 4 +- Resources/Prototypes/GameRules/events.yml | 3 +- .../Prototypes/GameRules/meteorswarms.yml | 4 +- .../Prototypes/GameRules/unknown_shuttles.yml | 7 +- .../Loadouts/Miscellaneous/trinkets.yml | 43 +- .../Prototypes/Loadouts/loadout_groups.yml | 1 + Resources/Prototypes/Nyanotrasen/tags.yml | 3 - .../Prototypes/Procedural/dungeon_configs.yml | 2 + .../Recipes/Cooking/meal_recipes.yml | 61 + .../Crafting/Graphs/improvised/gauze.yml | 2 +- .../Prototypes/Recipes/Lathes/botany.yml | 38 +- .../Prototypes/Recipes/Lathes/cooking.yml | 59 +- .../Prototypes/Recipes/Lathes/medical.yml | 82 +- Resources/Prototypes/Recipes/Lathes/tools.yml | 120 +- .../Recipes/Reactions/chemicals.yml | 17 +- .../Roles/Jobs/Civilian/service_worker.yml | 3 +- .../Shuttles/shuttle_incoming_event.yml | 5 - Resources/Prototypes/tags.yml | 3 + .../Guidebook/Antagonist/Antagonists.xml | 7 +- .../Guidebook/Antagonist/MinorAntagonists.xml | 32 +- .../Antagonist/Nuclear Operatives.xml | 16 +- .../Guidebook/Antagonist/Revolutionaries.xml | 16 +- .../Guidebook/Antagonist/SpaceNinja.xml | 18 +- .../Guidebook/Antagonist/Thieves.xml | 5 +- .../Actions/actions_ai.rsi/job_view.png | Bin 508 -> 0 bytes .../Actions/actions_ai.rsi/meta.json | 3 - .../Consumable/Food/Baked/misc.rsi/meta.json | 9 +- .../Food/Baked/misc.rsi/muffin-banana.png | Bin 0 -> 373 bytes .../Food/Baked/misc.rsi/muffin-berry.png | Bin 611 -> 3389 bytes .../Food/Baked/misc.rsi/muffin-cherry.png | Bin 285 -> 299 bytes .../Food/Baked/misc.rsi/muffin-chocolate.png | Bin 0 -> 425 bytes .../Consumable/Food/plates.rsi/meta.json | 5 +- .../Consumable/Food/plates.rsi/muffin-tin.png | Bin 0 -> 3023 bytes .../encryption_keys.rsi/crypt_blue.png | Bin 505 -> 311 bytes .../encryption_keys.rsi/crypt_gold.png | Bin 501 -> 307 bytes .../encryption_keys.rsi/crypt_gray.png | Bin 509 -> 300 bytes .../encryption_keys.rsi/crypt_orange.png | Bin 507 -> 313 bytes .../Devices/encryption_keys.rsi/crypt_red.png | Bin 499 -> 286 bytes .../encryption_keys.rsi/crypt_rusted.png | Bin 636 -> 514 bytes .../encryption_keys.rsi/crypt_silver.png | Bin 512 -> 313 bytes .../Devices/encryption_keys.rsi/meta.json | 2 +- .../Objects/Devices/tablets.rsi/generic.png | Bin 271 -> 230 bytes .../Objects/Devices/tablets.rsi/meta.json | 27 +- .../Objects/Devices/tablets.rsi/tablet.png | Bin 348 -> 302 bytes .../Objects/Devices/tablets.rsi/tabletsol.png | Bin 414 -> 389 bytes .../Objects/Fun/sharkplush.rsi/meta.json | 9 - .../Janitorial/janitorial.rsi/meta.json | 14 +- .../janitorial.rsi/mopbucket_carpplush.png | Bin 0 -> 587 bytes .../janitorial.rsi}/mopbucket_shark_blue.png | Bin .../janitorial.rsi}/mopbucket_shark_grey.png | Bin .../janitorial.rsi}/mopbucket_shark_pink.png | Bin .../Specific/Medical/defibsmall.rsi/icon.png | Bin 0 -> 300 bytes .../Medical/defibsmall.rsi/inhand-left.png | Bin 0 -> 294 bytes .../Medical/defibsmall.rsi/inhand-right.png | Bin 0 -> 300 bytes .../Specific/Medical/defibsmall.rsi/meta.json | 28 + .../Specific/Medical/defibsmall.rsi/ready.png | Bin 0 -> 178 bytes .../Medical/defibsmall.rsi/screen.png | Bin 0 -> 198 bytes .../Specific/Medical/defibsyndi.rsi/icon.png | Bin 0 -> 300 bytes .../Medical/defibsyndi.rsi/inhand-left.png | Bin 0 -> 290 bytes .../Medical/defibsyndi.rsi/inhand-right.png | Bin 0 -> 295 bytes .../Specific/Medical/defibsyndi.rsi/meta.json | 28 + .../Specific/Medical/defibsyndi.rsi/ready.png | Bin 0 -> 158 bytes .../Medical/defibsyndi.rsi/screen.png | Bin 0 -> 191 bytes .../Specific/Medical/medipen.rsi/dexpen.png | Bin 0 -> 286 bytes .../Medical/medipen.rsi/dexpen_empty.png | Bin 0 -> 311 bytes .../Specific/Medical/medipen.rsi/meta.json | 18 + .../Specific/Medical/medipen.rsi/punctpen.png | Bin 0 -> 286 bytes .../Medical/medipen.rsi/punctpen_empty.png | Bin 0 -> 311 bytes .../Specific/Medical/medipen.rsi/pyrapen.png | Bin 0 -> 286 bytes .../Medical/medipen.rsi/pyrapen_empty.png | Bin 0 -> 311 bytes .../Melee/crusher-inhands.rsi/inhand-left.png | Bin 0 -> 596 bytes .../crusher-inhands.rsi/inhand-right.png | Bin 0 -> 598 bytes .../Melee/crusher-inhands.rsi/meta.json | 27 + .../wielded-inhand-left.png | Bin 0 -> 599 bytes .../wielded-inhand-right.png | Bin 0 -> 601 bytes .../Weapons/Melee/crusher.rsi/icon.png | Bin 716 -> 431 bytes .../Weapons/Melee/crusher.rsi/inhand-left.png | Bin 655 -> 0 bytes .../Melee/crusher.rsi/inhand-right.png | Bin 637 -> 0 bytes .../Weapons/Melee/crusher.rsi/meta.json | 20 +- .../Melee/crusher.rsi/wielded-inhand-left.png | Bin 823 -> 0 bytes .../crusher.rsi/wielded-inhand-right.png | Bin 851 -> 0 bytes .../Melee/crusher_dagger.rsi/inhand-left.png | Bin 503 -> 362 bytes .../Melee/crusher_dagger.rsi/inhand-right.png | Bin 495 -> 361 bytes .../Melee/crusher_dagger.rsi/meta.json | 4 +- .../inhand-left.png | Bin 0 -> 611 bytes .../inhand-right.png | Bin 0 -> 620 bytes .../crusher_glaive-inhands.rsi/meta.json | 27 + .../wielded-inhand-left.png | Bin 0 -> 536 bytes .../wielded-inhand-right.png | Bin 0 -> 535 bytes .../Weapons/Melee/crusher_glaive.rsi/icon.png | Bin 618 -> 405 bytes .../Melee/crusher_glaive.rsi/inhand-left.png | Bin 576 -> 0 bytes .../Melee/crusher_glaive.rsi/inhand-right.png | Bin 568 -> 0 bytes .../Melee/crusher_glaive.rsi/meta.json | 20 +- .../wielded-inhand-left.png | Bin 567 -> 0 bytes .../wielded-inhand-right.png | Bin 520 -> 0 bytes .../Machines/station_map.rsi/meta.json | 2 +- .../Machines/station_map.rsi/station_map0.png | Bin 15417 -> 2926 bytes .../station_map.rsi/station_map_broken.png | Bin 16171 -> 609 bytes .../station_map.rsi/station_map_frame0.png | Bin 15800 -> 423 bytes .../station_map.rsi/station_map_frame1.png | Bin 16488 -> 642 bytes .../station_map.rsi/station_map_frame2.png | Bin 16277 -> 341 bytes .../Wallmounts/signalscreen.rsi/meta.json | 2 +- .../signalscreen.rsi/signalscreen.png | Bin 870 -> 286 bytes 186 files changed, 5042 insertions(+), 1578 deletions(-) delete mode 100644 Content.Client/UserInterface/Controls/RecordedSplitContainer.cs create mode 100644 Content.Server/EntityEffects/Effects/FlashReactionEffect.cs create mode 100644 Content.Shared/Chemistry/Components/ReactiveContainerComponent.cs create mode 100644 Content.Shared/Chemistry/EntitySystems/ReactiveContainerSystem.cs create mode 100644 Resources/Audio/Machines/ame_fuelinjection.ogg delete mode 100644 Resources/Textures/Interface/Actions/actions_ai.rsi/job_view.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/muffin-banana.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/muffin-chocolate.png create mode 100644 Resources/Textures/Objects/Consumable/Food/plates.rsi/muffin-tin.png create mode 100644 Resources/Textures/Objects/Specific/Janitorial/janitorial.rsi/mopbucket_carpplush.png rename Resources/Textures/Objects/{Fun/sharkplush.rsi => Specific/Janitorial/janitorial.rsi}/mopbucket_shark_blue.png (100%) rename Resources/Textures/Objects/{Fun/sharkplush.rsi => Specific/Janitorial/janitorial.rsi}/mopbucket_shark_grey.png (100%) rename Resources/Textures/Objects/{Fun/sharkplush.rsi => Specific/Janitorial/janitorial.rsi}/mopbucket_shark_pink.png (100%) create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/icon.png create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/meta.json create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/ready.png create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/screen.png create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/icon.png create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/meta.json create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/ready.png create mode 100644 Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/screen.png create mode 100644 Resources/Textures/Objects/Specific/Medical/medipen.rsi/dexpen.png create mode 100644 Resources/Textures/Objects/Specific/Medical/medipen.rsi/dexpen_empty.png create mode 100644 Resources/Textures/Objects/Specific/Medical/medipen.rsi/punctpen.png create mode 100644 Resources/Textures/Objects/Specific/Medical/medipen.rsi/punctpen_empty.png create mode 100644 Resources/Textures/Objects/Specific/Medical/medipen.rsi/pyrapen.png create mode 100644 Resources/Textures/Objects/Specific/Medical/medipen.rsi/pyrapen_empty.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/meta.json create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/wielded-inhand-right.png delete mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher.rsi/inhand-left.png delete mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher.rsi/inhand-right.png delete mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher.rsi/wielded-inhand-left.png delete mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher.rsi/wielded-inhand-right.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/meta.json create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/wielded-inhand-right.png delete mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/inhand-left.png delete mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/inhand-right.png delete mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/wielded-inhand-left.png delete mode 100644 Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/wielded-inhand-right.png diff --git a/Content.Client/Atmos/Consoles/AtmosAlertsComputerWindow.xaml.cs b/Content.Client/Atmos/Consoles/AtmosAlertsComputerWindow.xaml.cs index 5416f73e70..81c9a409a3 100644 --- a/Content.Client/Atmos/Consoles/AtmosAlertsComputerWindow.xaml.cs +++ b/Content.Client/Atmos/Consoles/AtmosAlertsComputerWindow.xaml.cs @@ -43,6 +43,18 @@ public sealed partial class AtmosAlertsComputerWindow : FancyWindow private const float SilencingDuration = 2.5f; + // Colors + private Color _wallColor = new Color(64, 64, 64); + private Color _tileColor = new Color(28, 28, 28); + private Color _monitorBlipColor = Color.Cyan; + private Color _untrackedEntColor = Color.DimGray; + private Color _regionBaseColor = new Color(154, 154, 154); + private Color _inactiveColor = StyleNano.DisabledFore; + private Color _statusTextColor = StyleNano.GoodGreenFore; + private Color _goodColor = Color.LimeGreen; + private Color _warningColor = new Color(255, 182, 72); + private Color _dangerColor = new Color(255, 67, 67); + public AtmosAlertsComputerWindow(AtmosAlertsComputerBoundUserInterface userInterface, EntityUid? owner) { RobustXamlLoader.Load(this); @@ -55,8 +67,8 @@ public sealed partial class AtmosAlertsComputerWindow : FancyWindow NavMap.Owner = _owner; // Set nav map colors - NavMap.WallColor = new Color(64, 64, 64); - NavMap.TileColor = Color.DimGray * NavMap.WallColor; + NavMap.WallColor = _wallColor; + NavMap.TileColor = _tileColor; // Set nav map grid uid var stationName = Loc.GetString("atmos-alerts-window-unknown-location"); @@ -214,7 +226,7 @@ public sealed partial class AtmosAlertsComputerWindow : FancyWindow if (consoleCoords != null && consoleUid != null) { var texture = _spriteSystem.Frame0(new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_circle.png"))); - var blip = new NavMapBlip(consoleCoords.Value, texture, Color.Cyan, true, false); + var blip = new NavMapBlip(consoleCoords.Value, texture, _monitorBlipColor, true, false); NavMap.TrackedEntities[consoleUid.Value] = blip; } @@ -263,7 +275,7 @@ public sealed partial class AtmosAlertsComputerWindow : FancyWindow VerticalAlignment = VAlignment.Center, }; - label.SetMarkup(Loc.GetString("atmos-alerts-window-no-active-alerts", ("color", StyleNano.GoodGreenFore.ToHexNoAlpha()))); + label.SetMarkup(Loc.GetString("atmos-alerts-window-no-active-alerts", ("color", _statusTextColor.ToHexNoAlpha()))); AlertsTable.AddChild(label); } @@ -292,7 +304,7 @@ public sealed partial class AtmosAlertsComputerWindow : FancyWindow if (!TryGetSensorRegionColor(regionOwner, alarmState, out var regionColor)) continue; - regionOverlay.Color = regionColor.Value; + regionOverlay.Color = regionColor; var priority = (_trackedEntity == regionOwner) ? 999 : (int)alarmState; prioritizedRegionOverlays.Add(regionOverlay, priority); @@ -323,7 +335,7 @@ public sealed partial class AtmosAlertsComputerWindow : FancyWindow var coords = _entManager.GetCoordinates(metaData.NetCoordinates); if (_trackedEntity != null && _trackedEntity != metaData.NetEntity) - color *= Color.DimGray; + color *= _untrackedEntColor; var selectable = true; var blip = new NavMapBlip(coords, _spriteSystem.Frame0(texture), color, _trackedEntity == metaData.NetEntity, selectable); @@ -331,23 +343,20 @@ public sealed partial class AtmosAlertsComputerWindow : FancyWindow NavMap.TrackedEntities[metaData.NetEntity] = blip; } - private bool TryGetSensorRegionColor(NetEntity regionOwner, AtmosAlarmType alarmState, [NotNullWhen(true)] out Color? color) + private bool TryGetSensorRegionColor(NetEntity regionOwner, AtmosAlarmType alarmState, out Color color) { - color = null; + color = Color.White; var blip = GetBlipTexture(alarmState); if (blip == null) return false; - // DeltaV: fix client until upstream does // Color the region based on alarm state and entity tracking - var output = blip.Value.Item2 * new Color(154, 154, 154); + color = blip.Value.Item2 * _regionBaseColor; if (_trackedEntity != null && _trackedEntity != regionOwner) - output *= Color.DimGray; - - color = output; + color *= _untrackedEntColor; return true; } @@ -588,13 +597,13 @@ public sealed partial class AtmosAlertsComputerWindow : FancyWindow switch (alarmState) { case AtmosAlarmType.Invalid: - output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_circle.png")), StyleNano.DisabledFore); break; + output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_circle.png")), _inactiveColor); break; case AtmosAlarmType.Normal: - output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_circle.png")), Color.LimeGreen); break; + output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_circle.png")), _goodColor); break; case AtmosAlarmType.Warning: - output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_triangle.png")), new Color(255, 182, 72)); break; + output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_triangle.png")), _warningColor); break; case AtmosAlarmType.Danger: - output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_square.png")), new Color(255, 67, 67)); break; + output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_square.png")), _dangerColor); break; } return output; diff --git a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml index 19d00a0bbf..aae8785b1f 100644 --- a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml +++ b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml @@ -47,8 +47,7 @@ - + diff --git a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs index d61267d002..fd3615d59f 100644 --- a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs +++ b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs @@ -110,18 +110,29 @@ namespace Content.Client.HealthAnalyzer.UI // Alerts - AlertsDivider.Visible = msg.Bleeding == true; - AlertsContainer.Visible = msg.Bleeding == true; + var showAlerts = msg.Unrevivable == true || msg.Bleeding == true; + + AlertsDivider.Visible = showAlerts; + AlertsContainer.Visible = showAlerts; + + if (showAlerts) + AlertsContainer.DisposeAllChildren(); + + if (msg.Unrevivable == true) + AlertsContainer.AddChild(new RichTextLabel + { + Text = Loc.GetString("health-analyzer-window-entity-unrevivable-text"), + Margin = new Thickness(0, 4), + MaxWidth = 300 + }); if (msg.Bleeding == true) - { - AlertsContainer.DisposeAllChildren(); - AlertsContainer.AddChild(new Label + AlertsContainer.AddChild(new RichTextLabel { Text = Loc.GetString("health-analyzer-window-entity-bleeding-text"), - FontColorOverride = Color.Red, + Margin = new Thickness(0, 4), + MaxWidth = 300 }); - } // Damage Groups diff --git a/Content.Client/Mapping/MappingScreen.xaml b/Content.Client/Mapping/MappingScreen.xaml index 9cc3e734f0..bad492e7e4 100644 --- a/Content.Client/Mapping/MappingScreen.xaml +++ b/Content.Client/Mapping/MappingScreen.xaml @@ -8,7 +8,7 @@ VerticalExpand="False" VerticalAlignment="Bottom" HorizontalAlignment="Center"> - @@ -82,5 +82,5 @@ - + diff --git a/Content.Client/Mapping/MappingScreen.xaml.cs b/Content.Client/Mapping/MappingScreen.xaml.cs index 46c0e51fad..20e2528a44 100644 --- a/Content.Client/Mapping/MappingScreen.xaml.cs +++ b/Content.Client/Mapping/MappingScreen.xaml.cs @@ -197,7 +197,6 @@ public sealed partial class MappingScreen : InGameScreen public override void SetChatSize(Vector2 size) { - ScreenContainer.DesiredSplitCenter = size.X; ScreenContainer.ResizeMode = SplitContainer.SplitResizeMode.RespectChildrenMinSize; } diff --git a/Content.Client/UserInterface/Controls/RecordedSplitContainer.cs b/Content.Client/UserInterface/Controls/RecordedSplitContainer.cs deleted file mode 100644 index fd217bc7e8..0000000000 --- a/Content.Client/UserInterface/Controls/RecordedSplitContainer.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Numerics; -using Robust.Client.UserInterface.Controls; - -namespace Content.Client.UserInterface.Controls; - -/// -/// A split container that performs an action when the split resizing is finished. -/// -public sealed class RecordedSplitContainer : SplitContainer -{ - public double? DesiredSplitCenter; - - protected override Vector2 ArrangeOverride(Vector2 finalSize) - { - if (ResizeMode == SplitResizeMode.RespectChildrenMinSize - && DesiredSplitCenter != null - && !finalSize.Equals(Vector2.Zero)) - { - SplitFraction = (float) DesiredSplitCenter.Value; - - if (!Size.Equals(Vector2.Zero)) - { - DesiredSplitCenter = null; - } - } - - return base.ArrangeOverride(finalSize); - } -} diff --git a/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml b/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml index 7f1d1bcd5b..653302fae4 100644 --- a/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml +++ b/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml @@ -14,7 +14,7 @@ VerticalExpand="False" VerticalAlignment="Bottom" HorizontalAlignment="Center"> - + @@ -26,7 +26,7 @@ - + @@ -36,5 +36,5 @@ - + diff --git a/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml.cs b/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml.cs index e04d377d32..2892ca4425 100644 --- a/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml.cs +++ b/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml.cs @@ -40,7 +40,6 @@ public sealed partial class SeparatedChatGameScreen : InGameScreen public override void SetChatSize(Vector2 size) { - ScreenContainer.DesiredSplitCenter = size.X; ScreenContainer.ResizeMode = SplitContainer.SplitResizeMode.RespectChildrenMinSize; } } diff --git a/Content.Client/Voting/UI/VoteCallMenu.xaml.cs b/Content.Client/Voting/UI/VoteCallMenu.xaml.cs index c5746c24d7..b9dd11f7a7 100644 --- a/Content.Client/Voting/UI/VoteCallMenu.xaml.cs +++ b/Content.Client/Voting/UI/VoteCallMenu.xaml.cs @@ -1,5 +1,6 @@ using System.Linq; using System.Numerics; +using Content.Client.Gameplay; using Content.Client.Stylesheets; using Content.Shared.Administration; using Content.Shared.CCVar; @@ -8,6 +9,7 @@ using Content.Shared.Voting; using JetBrains.Annotations; using Robust.Client.AutoGenerated; using Robust.Client.Console; +using Robust.Client.State; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; @@ -28,6 +30,7 @@ namespace Content.Client.Voting.UI [Dependency] private readonly IEntityManager _entityManager = default!; [Dependency] private readonly IEntityNetworkManager _entNetManager = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly IStateManager _state = default!; private VotingSystem _votingSystem; @@ -62,7 +65,7 @@ namespace Content.Client.Voting.UI Stylesheet = IoCManager.Resolve().SheetSpace; CloseButton.OnPressed += _ => Close(); - VoteNotTrustedLabel.Text = Loc.GetString("ui-vote-trusted-users-notice", ("timeReq", _cfg.GetCVar(CCVars.VotekickEligibleVoterDeathtime) / 60)); + VoteNotTrustedLabel.Text = Loc.GetString("ui-vote-trusted-users-notice", ("timeReq", _cfg.GetCVar(CCVars.VotekickEligibleVoterDeathtime))); foreach (StandardVoteType voteType in Enum.GetValues()) { @@ -70,6 +73,7 @@ namespace Content.Client.Voting.UI VoteTypeButton.AddItem(Loc.GetString(option.Name), (int)voteType); } + _state.OnStateChanged += OnStateChanged; VoteTypeButton.OnItemSelected += VoteTypeSelected; CreateButton.OnPressed += CreatePressed; FollowButton.OnPressed += FollowSelected; @@ -101,6 +105,14 @@ namespace Content.Client.Voting.UI UpdateVoteTimeout(); } + private void OnStateChanged(StateChangedEventArgs obj) + { + if (obj.NewState is not GameplayState) + return; + + Close(); + } + private void CanCallVoteChanged(bool obj) { if (!obj) diff --git a/Content.Client/Voting/VotingSystem.cs b/Content.Client/Voting/VotingSystem.cs index d204917460..dd74e1ccb1 100644 --- a/Content.Client/Voting/VotingSystem.cs +++ b/Content.Client/Voting/VotingSystem.cs @@ -19,11 +19,6 @@ public sealed class VotingSystem : EntitySystem private void OnVotePlayerListResponseEvent(VotePlayerListResponseEvent msg) { - if (!_ghostSystem.IsGhost) - { - return; - } - VotePlayerListResponse?.Invoke(msg); } diff --git a/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs b/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs index 696de8616e..bc27d1e595 100644 --- a/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs +++ b/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs @@ -168,7 +168,7 @@ public sealed class SuicideCommandTests await pair.CleanReturnAsync(); } - /// + /// /// Run the suicide command in the console /// Should only ghost the player but not kill them /// @@ -241,6 +241,7 @@ public sealed class SuicideCommandTests var mindSystem = entManager.System(); var mobStateSystem = entManager.System(); var transformSystem = entManager.System(); + var damageableSystem = entManager.System(); // We need to know the player and whether they can be hurt, killed, and whether they have a mind var player = playerMan.Sessions.First().AttachedEntity!.Value; @@ -276,6 +277,8 @@ public sealed class SuicideCommandTests // and that all the damage is concentrated in the Slash category await server.WaitAssertion(() => { + // Heal all damage first (possible low pressure damage taken) + damageableSystem.SetAllDamage(player, damageableComp, 0); consoleHost.GetSessionShell(playerMan.Sessions.First()).ExecuteCommand("suicide"); var lethalDamageThreshold = mobThresholdsComp.Thresholds.Keys.Last(); @@ -313,6 +316,7 @@ public sealed class SuicideCommandTests var mindSystem = entManager.System(); var mobStateSystem = entManager.System(); var transformSystem = entManager.System(); + var damageableSystem = entManager.System(); // We need to know the player and whether they can be hurt, killed, and whether they have a mind var player = playerMan.Sessions.First().AttachedEntity!.Value; @@ -348,6 +352,8 @@ public sealed class SuicideCommandTests // and that slash damage is split in half await server.WaitAssertion(() => { + // Heal all damage first (possible low pressure damage taken) + damageableSystem.SetAllDamage(player, damageableComp, 0); consoleHost.GetSessionShell(playerMan.Sessions.First()).ExecuteCommand("suicide"); var lethalDamageThreshold = mobThresholdsComp.Thresholds.Keys.Last(); diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs index 7836239081..d57898d9d9 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs @@ -654,7 +654,7 @@ public sealed partial class AdminVerbSystem { Text = "admin-smite-become-mouse-name", Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Objects/Fun/Instruments/h_synthesizer.rsi"), "icon"), + Icon = new SpriteSpecifier.Rsi(new ("/Textures/Objects/Fun/Instruments/h_synthesizer.rsi"), "supersynth"), Act = () => { _polymorphSystem.PolymorphEntity(args.Target, "AdminInstrumentSmite"); diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.cs b/Content.Server/Administration/Systems/AdminVerbSystem.cs index 2ab27e4388..0640537f57 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.cs @@ -35,8 +35,10 @@ using Robust.Shared.Toolshed; using Robust.Shared.Utility; using System.Linq; using Content.Server.Silicons.Laws; +using Content.Shared.Movement.Components; using Content.Shared.Silicons.Laws.Components; using Robust.Server.Player; +using Content.Shared.Silicons.StationAi; using Robust.Shared.Physics.Components; using static Content.Shared.Configurable.ConfigurationComponent; @@ -345,7 +347,30 @@ namespace Content.Server.Administration.Systems Impact = LogImpact.Low }); - if (TryComp(args.Target, out var lawBoundComponent)) + // This logic is needed to be able to modify the AI's laws through its core and eye. + EntityUid? target = null; + SiliconLawBoundComponent? lawBoundComponent = null; + + if (TryComp(args.Target, out lawBoundComponent)) + { + target = args.Target; + } + // When inspecting the core we can find the entity with its laws by looking at the AiHolderComponent. + else if (TryComp(args.Target, out var holder) && holder.Slot.Item != null + && TryComp(holder.Slot.Item, out lawBoundComponent)) + { + target = holder.Slot.Item.Value; + // For the eye we can find the entity with its laws as the source of the movement relay since the eye + // is just a proxy for it to move around and look around the station. + } + else if (TryComp(args.Target, out var relay) + && TryComp(relay.Source, out lawBoundComponent)) + { + target = relay.Source; + + } + + if (lawBoundComponent != null && target != null) { args.Verbs.Add(new Verb() { @@ -359,7 +384,7 @@ namespace Content.Server.Administration.Systems return; } _euiManager.OpenEui(ui, session); - ui.UpdateLaws(lawBoundComponent, args.Target); + ui.UpdateLaws(lawBoundComponent, target.Value); }, Icon = new SpriteSpecifier.Rsi(new ResPath("/Textures/Interface/Actions/actions_borg.rsi"), "state-laws"), }); diff --git a/Content.Server/Administration/Systems/BwoinkSystem.cs b/Content.Server/Administration/Systems/BwoinkSystem.cs index 1efc0a9d56..7a47755db9 100644 --- a/Content.Server/Administration/Systems/BwoinkSystem.cs +++ b/Content.Server/Administration/Systems/BwoinkSystem.cs @@ -47,20 +47,23 @@ namespace Content.Server.Administration.Systems [GeneratedRegex(@"^https://discord\.com/api/webhooks/(\d+)/((?!.*/).*)$")] private static partial Regex DiscordRegex(); - private ISawmill _sawmill = default!; - private readonly HttpClient _httpClient = new(); private string _webhookUrl = string.Empty; private WebhookData? _webhookData; + + private string _onCallUrl = string.Empty; + private WebhookData? _onCallData; + + private ISawmill _sawmill = default!; + private readonly HttpClient _httpClient = new(); + private string _footerIconUrl = string.Empty; private string _avatarUrl = string.Empty; private string _serverName = string.Empty; - private readonly - Dictionary _relayMessages = new(); + private readonly Dictionary _relayMessages = new(); private Dictionary _oldMessageIds = new(); - private readonly Dictionary> _messageQueues = new(); + private readonly Dictionary> _messageQueues = new(); private readonly HashSet _processingChannels = new(); private readonly Dictionary _typingUpdateTimestamps = new(); private string _overrideClientName = string.Empty; @@ -82,12 +85,16 @@ namespace Content.Server.Administration.Systems public override void Initialize() { base.Initialize(); + + Subs.CVar(_config, CCVars.DiscordOnCallWebhook, OnCallChanged, true); + Subs.CVar(_config, CCVars.DiscordAHelpWebhook, OnWebhookChanged, true); Subs.CVar(_config, CCVars.DiscordAHelpFooterIcon, OnFooterIconChanged, true); Subs.CVar(_config, CCVars.DiscordAHelpAvatar, OnAvatarChanged, true); Subs.CVar(_config, CVars.GameHostName, OnServerNameChanged, true); Subs.CVar(_config, CCVars.AdminAhelpOverrideClientName, OnOverrideChanged, true); _sawmill = IoCManager.Resolve().GetSawmill("AHELP"); + var defaultParams = new AHelpMessageParams( string.Empty, string.Empty, @@ -96,7 +103,7 @@ namespace Content.Server.Administration.Systems _gameTicker.RunLevel, playedSound: false ); - _maxAdditionalChars = GenerateAHelpMessage(defaultParams).Length; + _maxAdditionalChars = GenerateAHelpMessage(defaultParams).Message.Length; _playerManager.PlayerStatusChanged += OnPlayerStatusChanged; SubscribeLocalEvent(OnGameRunLevelChanged); @@ -111,6 +118,33 @@ namespace Content.Server.Administration.Systems ); } + private async void OnCallChanged(string url) + { + _onCallUrl = url; + + if (url == string.Empty) + return; + + var match = DiscordRegex().Match(url); + + if (!match.Success) + { + Log.Error("On call URL does not appear to be valid."); + return; + } + + if (match.Groups.Count <= 2) + { + Log.Error("Could not get webhook ID or token for on call URL."); + return; + } + + var webhookId = match.Groups[1].Value; + var webhookToken = match.Groups[2].Value; + + _onCallData = await GetWebhookData(webhookId, webhookToken); + } + private void PlayerRateLimitedAction(ICommonSession obj) { RaiseNetworkEvent( @@ -259,13 +293,13 @@ namespace Content.Server.Administration.Systems // Store the Discord message IDs of the previous round _oldMessageIds = new Dictionary(); - foreach (var message in _relayMessages) + foreach (var (user, interaction) in _relayMessages) { - var id = message.Value.id; + var id = interaction.Id; if (id == null) return; - _oldMessageIds[message.Key] = id; + _oldMessageIds[user] = id; } _relayMessages.Clear(); @@ -330,10 +364,10 @@ namespace Content.Server.Administration.Systems var webhookToken = match.Groups[2].Value; // Fire and forget - await SetWebhookData(webhookId, webhookToken); + _webhookData = await GetWebhookData(webhookId, webhookToken); } - private async Task SetWebhookData(string id, string token) + private async Task GetWebhookData(string id, string token) { var response = await _httpClient.GetAsync($"https://discord.com/api/v10/webhooks/{id}/{token}"); @@ -342,10 +376,10 @@ namespace Content.Server.Administration.Systems { _sawmill.Log(LogLevel.Error, $"Discord returned bad status code when trying to get webhook data (perhaps the webhook URL is invalid?): {response.StatusCode}\nResponse: {content}"); - return; + return null; } - _webhookData = JsonSerializer.Deserialize(content); + return JsonSerializer.Deserialize(content); } private void OnFooterIconChanged(string url) @@ -358,14 +392,14 @@ namespace Content.Server.Administration.Systems _avatarUrl = url; } - private async void ProcessQueue(NetUserId userId, Queue messages) + private async void ProcessQueue(NetUserId userId, Queue messages) { // Whether an embed already exists for this player var exists = _relayMessages.TryGetValue(userId, out var existingEmbed); // Whether the message will become too long after adding these new messages - var tooLong = exists && messages.Sum(msg => Math.Min(msg.Length, MessageLengthCap) + "\n".Length) - + existingEmbed.description.Length > DescriptionMax; + var tooLong = exists && messages.Sum(msg => Math.Min(msg.Message.Length, MessageLengthCap) + "\n".Length) + + existingEmbed?.Description.Length > DescriptionMax; // If there is no existing embed, or it is getting too long, we create a new embed if (!exists || tooLong) @@ -385,10 +419,10 @@ namespace Content.Server.Administration.Systems // If we have all the data required, we can link to the embed of the previous round or embed that was too long if (_webhookData is { GuildId: { } guildId, ChannelId: { } channelId }) { - if (tooLong && existingEmbed.id != null) + if (tooLong && existingEmbed?.Id != null) { linkToPrevious = - $"**[Go to previous embed of this round](https://discord.com/channels/{guildId}/{channelId}/{existingEmbed.id})**\n"; + $"**[Go to previous embed of this round](https://discord.com/channels/{guildId}/{channelId}/{existingEmbed.Id})**\n"; } else if (_oldMessageIds.TryGetValue(userId, out var id) && !string.IsNullOrEmpty(id)) { @@ -398,13 +432,22 @@ namespace Content.Server.Administration.Systems } var characterName = _minds.GetCharacterName(userId); - existingEmbed = (null, lookup.Username, linkToPrevious, characterName, _gameTicker.RunLevel); + existingEmbed = new DiscordRelayInteraction() + { + Id = null, + CharacterName = characterName, + Description = linkToPrevious, + Username = lookup.Username, + LastRunLevel = _gameTicker.RunLevel, + }; + + _relayMessages[userId] = existingEmbed; } // Previous message was in another RunLevel, so show that in the embed - if (existingEmbed.lastRunLevel != _gameTicker.RunLevel) + if (existingEmbed!.LastRunLevel != _gameTicker.RunLevel) { - existingEmbed.description += _gameTicker.RunLevel switch + existingEmbed.Description += _gameTicker.RunLevel switch { GameRunLevel.PreRoundLobby => "\n\n:arrow_forward: _**Pre-round lobby started**_\n", GameRunLevel.InRound => "\n\n:arrow_forward: _**Round started**_\n", @@ -413,26 +456,35 @@ namespace Content.Server.Administration.Systems $"{_gameTicker.RunLevel} was not matched."), }; - existingEmbed.lastRunLevel = _gameTicker.RunLevel; + existingEmbed.LastRunLevel = _gameTicker.RunLevel; } + // If last message of the new batch is SOS then relay it to on-call. + // ... as long as it hasn't been relayed already. + var discordMention = messages.Last(); + var onCallRelay = !discordMention.Receivers && !existingEmbed.OnCall; + // Add available messages to the embed description while (messages.TryDequeue(out var message)) { - // In case someone thinks they're funny - if (message.Length > MessageLengthCap) - message = message[..(MessageLengthCap - TooLongText.Length)] + TooLongText; + string text; - existingEmbed.description += $"\n{message}"; + // In case someone thinks they're funny + if (message.Message.Length > MessageLengthCap) + text = message.Message[..(MessageLengthCap - TooLongText.Length)] + TooLongText; + else + text = message.Message; + + existingEmbed.Description += $"\n{text}"; } - var payload = GeneratePayload(existingEmbed.description, - existingEmbed.username, - existingEmbed.characterName); + var payload = GeneratePayload(existingEmbed.Description, + existingEmbed.Username, + existingEmbed.CharacterName); // If there is no existing embed, create a new one // Otherwise patch (edit) it - if (existingEmbed.id == null) + if (existingEmbed.Id == null) { var request = await _httpClient.PostAsync($"{_webhookUrl}?wait=true", new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json")); @@ -455,11 +507,11 @@ namespace Content.Server.Administration.Systems return; } - existingEmbed.id = id.ToString(); + existingEmbed.Id = id.ToString(); } else { - var request = await _httpClient.PatchAsync($"{_webhookUrl}/messages/{existingEmbed.id}", + var request = await _httpClient.PatchAsync($"{_webhookUrl}/messages/{existingEmbed.Id}", new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json")); if (!request.IsSuccessStatusCode) @@ -474,6 +526,43 @@ namespace Content.Server.Administration.Systems _relayMessages[userId] = existingEmbed; + // Actually do the on call relay last, we just need to grab it before we dequeue every message above. + if (onCallRelay && + _onCallData != null) + { + existingEmbed.OnCall = true; + var roleMention = _config.GetCVar(CCVars.DiscordAhelpMention); + + if (!string.IsNullOrEmpty(roleMention)) + { + var message = new StringBuilder(); + message.AppendLine($"<@&{roleMention}>"); + message.AppendLine("Unanswered SOS"); + + // Need webhook data to get the correct link for that channel rather than on-call data. + if (_webhookData is { GuildId: { } guildId, ChannelId: { } channelId }) + { + message.AppendLine( + $"**[Go to ahelp](https://discord.com/channels/{guildId}/{channelId}/{existingEmbed.Id})**"); + } + + payload = GeneratePayload(message.ToString(), existingEmbed.Username, existingEmbed.CharacterName); + + var request = await _httpClient.PostAsync($"{_onCallUrl}?wait=true", + new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json")); + + var content = await request.Content.ReadAsStringAsync(); + if (!request.IsSuccessStatusCode) + { + _sawmill.Log(LogLevel.Error, $"Discord returned bad status code when posting relay message (perhaps the message is too long?): {request.StatusCode}\nResponse: {content}"); + } + } + } + else + { + existingEmbed.OnCall = false; + } + _processingChannels.Remove(userId); } @@ -652,7 +741,7 @@ namespace Content.Server.Administration.Systems if (sendsWebhook) { if (!_messageQueues.ContainsKey(msg.UserId)) - _messageQueues[msg.UserId] = new Queue(); + _messageQueues[msg.UserId] = new Queue(); var str = message.Text; var unameLength = senderSession.Name.Length; @@ -701,7 +790,7 @@ namespace Content.Server.Administration.Systems .ToList(); } - private static string GenerateAHelpMessage(AHelpMessageParams parameters) + private static DiscordRelayedData GenerateAHelpMessage(AHelpMessageParams parameters) { var stringbuilder = new StringBuilder(); @@ -718,13 +807,57 @@ namespace Content.Server.Administration.Systems stringbuilder.Append($" **{parameters.RoundTime}**"); if (!parameters.PlayedSound) stringbuilder.Append(" **(S)**"); - if (parameters.Icon == null) stringbuilder.Append($" **{parameters.Username}:** "); else stringbuilder.Append($" **{parameters.Username}** "); stringbuilder.Append(parameters.Message); - return stringbuilder.ToString(); + + return new DiscordRelayedData() + { + Receivers = !parameters.NoReceivers, + Message = stringbuilder.ToString(), + }; + } + + private record struct DiscordRelayedData + { + /// + /// Was anyone online to receive it. + /// + public bool Receivers; + + /// + /// What's the payload to send to discord. + /// + public string Message; + } + + /// + /// Class specifically for holding information regarding existing Discord embeds + /// + private sealed class DiscordRelayInteraction + { + public string? Id; + + public string Username = String.Empty; + + public string? CharacterName; + + /// + /// Contents for the discord message. + /// + public string Description = string.Empty; + + /// + /// Run level of the last interaction. If different we'll link to the last Id. + /// + public GameRunLevel LastRunLevel; + + /// + /// Did we relay this interaction to OnCall previously. + /// + public bool OnCall; } } diff --git a/Content.Server/Ame/Components/AmeControllerComponent.cs b/Content.Server/Ame/Components/AmeControllerComponent.cs index fae3d86633..2c5464dd8e 100644 --- a/Content.Server/Ame/Components/AmeControllerComponent.cs +++ b/Content.Server/Ame/Components/AmeControllerComponent.cs @@ -55,7 +55,7 @@ public sealed partial class AmeControllerComponent : SharedAmeControllerComponen /// [DataField("injectSound")] [ViewVariables(VVAccess.ReadWrite)] - public SoundSpecifier InjectSound = new SoundCollectionSpecifier("MetalThud"); + public SoundSpecifier InjectSound = new SoundPathSpecifier("/Audio/Machines/ame_fuelinjection.ogg"); /// /// The last time this could have injected fuel into the AME. diff --git a/Content.Server/Damage/Systems/ExaminableDamageSystem.cs b/Content.Server/Damage/Systems/ExaminableDamageSystem.cs index dd7c4b12e8..c80e19a53d 100644 --- a/Content.Server/Damage/Systems/ExaminableDamageSystem.cs +++ b/Content.Server/Damage/Systems/ExaminableDamageSystem.cs @@ -39,7 +39,7 @@ public sealed class ExaminableDamageSystem : EntitySystem var level = GetDamageLevel(uid, component); var msg = Loc.GetString(messages[level]); - args.PushMarkup(msg); + args.PushMarkup(msg,-99); } private int GetDamageLevel(EntityUid uid, ExaminableDamageComponent? component = null, diff --git a/Content.Server/Doors/Systems/DoorSystem.cs b/Content.Server/Doors/Systems/DoorSystem.cs index 292f8ec8e9..754818619a 100644 --- a/Content.Server/Doors/Systems/DoorSystem.cs +++ b/Content.Server/Doors/Systems/DoorSystem.cs @@ -46,8 +46,8 @@ public sealed class DoorSystem : SharedDoorSystem SetBoltsDown(ent, true); } - UpdateBoltLightStatus(ent); ent.Comp.Powered = args.Powered; Dirty(ent, ent.Comp); + UpdateBoltLightStatus(ent); } } diff --git a/Content.Server/EntityEffects/Effects/FlashReactionEffect.cs b/Content.Server/EntityEffects/Effects/FlashReactionEffect.cs new file mode 100644 index 0000000000..fbf99e902d --- /dev/null +++ b/Content.Server/EntityEffects/Effects/FlashReactionEffect.cs @@ -0,0 +1,82 @@ +using Content.Shared.EntityEffects; +using Content.Server.Flash; +using Robust.Server.GameObjects; +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; + +namespace Content.Server.EntityEffects.Effects; + +[DataDefinition] +public sealed partial class FlashReactionEffect : EntityEffect +{ + /// + /// Flash range per unit of reagent. + /// + [DataField] + public float RangePerUnit = 0.2f; + + /// + /// Maximum flash range. + /// + [DataField] + public float MaxRange = 10f; + + /// + /// How much to entities are slowed down. + /// + [DataField] + public float SlowTo = 0.5f; + + /// + /// The time entities will be flashed in seconds. + /// The default is chosen to be better than the hand flash so it is worth using it for grenades etc. + /// + [DataField] + public float Duration = 4f; + + /// + /// The prototype ID used for the visual effect. + /// + [DataField] + public EntProtoId? FlashEffectPrototype = "ReactionFlash"; + + /// + /// The sound the flash creates. + /// + [DataField] + public SoundSpecifier? Sound = new SoundPathSpecifier("/Audio/Weapons/flash.ogg"); + + protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("reagent-effect-guidebook-flash-reaction-effect", ("chance", Probability)); + + public override void Effect(EntityEffectBaseArgs args) + { + var transform = args.EntityManager.GetComponent(args.TargetEntity); + var transformSystem = args.EntityManager.System(); + + var range = 1f; + + if (args is EntityEffectReagentArgs reagentArgs) + range = MathF.Min((float)(reagentArgs.Quantity * RangePerUnit), MaxRange); + + args.EntityManager.System().FlashArea( + args.TargetEntity, + null, + range, + Duration * 1000, + slowTo: SlowTo, + sound: Sound); + + if (FlashEffectPrototype == null) + return; + + var uid = args.EntityManager.SpawnEntity(FlashEffectPrototype, transformSystem.GetMapCoordinates(transform)); + transformSystem.AttachToGridOrMap(uid); + + if (!args.EntityManager.TryGetComponent(uid, out var pointLightComp)) + return; + var pointLightSystem = args.EntityManager.System(); + // PointLights with a radius lower than 1.1 are too small to be visible, so this is hardcoded + pointLightSystem.SetRadius(uid, MathF.Max(1.1f, range), pointLightComp); + } +} diff --git a/Content.Server/Ghost/GhostSystem.cs b/Content.Server/Ghost/GhostSystem.cs index 85fec0d7d1..2f4269a05d 100644 --- a/Content.Server/Ghost/GhostSystem.cs +++ b/Content.Server/Ghost/GhostSystem.cs @@ -213,14 +213,7 @@ namespace Content.Server.Ghost private void OnMapInit(EntityUid uid, GhostComponent component, MapInitEvent args) { - if (_actions.AddAction(uid, ref component.BooActionEntity, out var act, component.BooAction) - && act.UseDelay != null) - { - var start = _gameTiming.CurTime; - var end = start + act.UseDelay.Value; - _actions.SetCooldown(component.BooActionEntity.Value, start, end); - } - + _actions.AddAction(uid, ref component.BooActionEntity, component.BooAction); _actions.AddAction(uid, ref component.ToggleGhostHearingActionEntity, component.ToggleGhostHearingAction); _actions.AddAction(uid, ref component.ToggleLightingActionEntity, component.ToggleLightingAction); _actions.AddAction(uid, ref component.ToggleFoVActionEntity, component.ToggleFoVAction); diff --git a/Content.Server/Medical/CryoPodSystem.cs b/Content.Server/Medical/CryoPodSystem.cs index fc9ab081d2..15fe2a69cf 100644 --- a/Content.Server/Medical/CryoPodSystem.cs +++ b/Content.Server/Medical/CryoPodSystem.cs @@ -201,6 +201,7 @@ public sealed partial class CryoPodSystem : SharedCryoPodSystem ? bloodSolution.FillFraction : 0, null, + null, null )); } diff --git a/Content.Server/Medical/HealthAnalyzerSystem.cs b/Content.Server/Medical/HealthAnalyzerSystem.cs index 60a492a755..90646725bb 100644 --- a/Content.Server/Medical/HealthAnalyzerSystem.cs +++ b/Content.Server/Medical/HealthAnalyzerSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Body.Components; using Content.Server.Medical.Components; using Content.Server.PowerCell; using Content.Server.Temperature.Components; +using Content.Server.Traits.Assorted; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Damage; using Content.Shared.DoAfter; @@ -196,6 +197,7 @@ public sealed class HealthAnalyzerSystem : EntitySystem var bloodAmount = float.NaN; var bleeding = false; + var unrevivable = false; if (TryComp(target, out var bloodstream) && _solutionContainerSystem.ResolveSolution(target, bloodstream.BloodSolutionName, @@ -205,12 +207,16 @@ public sealed class HealthAnalyzerSystem : EntitySystem bleeding = bloodstream.BleedAmount > 0; } + if (HasComp(target)) + unrevivable = true; + _uiSystem.ServerSendUiMessage(healthAnalyzer, HealthAnalyzerUiKey.Key, new HealthAnalyzerScannedUserMessage( GetNetEntity(target), bodyTemperature, bloodAmount, scanMode, - bleeding + bleeding, + unrevivable )); } } diff --git a/Content.Server/Nutrition/EntitySystems/CreamPieSystem.cs b/Content.Server/Nutrition/EntitySystems/CreamPieSystem.cs index a8d75ac5f8..0a0839f35f 100644 --- a/Content.Server/Nutrition/EntitySystems/CreamPieSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/CreamPieSystem.cs @@ -40,7 +40,9 @@ namespace Content.Server.Nutrition.EntitySystems protected override void SplattedCreamPie(EntityUid uid, CreamPieComponent creamPie) { - _audio.PlayPvs(_audio.GetSound(creamPie.Sound), uid, AudioParams.Default.WithVariation(0.125f)); + // The entity is deleted, so play the sound at its position rather than parenting + var coordinates = Transform(uid).Coordinates; + _audio.PlayPvs(_audio.GetSound(creamPie.Sound), coordinates, AudioParams.Default.WithVariation(0.125f)); if (EntityManager.TryGetComponent(uid, out FoodComponent? foodComp)) { diff --git a/Content.Server/Parallax/BiomeSystem.cs b/Content.Server/Parallax/BiomeSystem.cs index 22b531eb7c..109aa0f6e4 100644 --- a/Content.Server/Parallax/BiomeSystem.cs +++ b/Content.Server/Parallax/BiomeSystem.cs @@ -10,6 +10,7 @@ using Content.Server.Shuttles.Events; using Content.Server.Shuttles.Systems; using Content.Shared.Atmos; using Content.Shared.Decals; +using Content.Shared.Ghost; using Content.Shared.Gravity; using Content.Shared.Parallax.Biomes; using Content.Shared.Parallax.Biomes.Layers; @@ -51,6 +52,7 @@ public sealed partial class BiomeSystem : SharedBiomeSystem private EntityQuery _biomeQuery; private EntityQuery _fixturesQuery; + private EntityQuery _ghostQuery; private EntityQuery _xformQuery; private readonly HashSet _handledEntities = new(); @@ -81,6 +83,7 @@ public sealed partial class BiomeSystem : SharedBiomeSystem Log.Level = LogLevel.Debug; _biomeQuery = GetEntityQuery(); _fixturesQuery = GetEntityQuery(); + _ghostQuery = GetEntityQuery(); _xformQuery = GetEntityQuery(); SubscribeLocalEvent(OnBiomeMapInit); SubscribeLocalEvent(OnFTLStarted); @@ -315,6 +318,11 @@ public sealed partial class BiomeSystem : SharedBiomeSystem } } + private bool CanLoad(EntityUid uid) + { + return !_ghostQuery.HasComp(uid); + } + public override void Update(float frameTime) { base.Update(frameTime); @@ -332,7 +340,8 @@ public sealed partial class BiomeSystem : SharedBiomeSystem if (_xformQuery.TryGetComponent(pSession.AttachedEntity, out var xform) && _handledEntities.Add(pSession.AttachedEntity.Value) && _biomeQuery.TryGetComponent(xform.MapUid, out var biome) && - biome.Enabled) + biome.Enabled && + CanLoad(pSession.AttachedEntity.Value)) { var worldPos = _transform.GetWorldPosition(xform); AddChunksInRange(biome, worldPos); @@ -349,7 +358,8 @@ public sealed partial class BiomeSystem : SharedBiomeSystem if (!_handledEntities.Add(viewer) || !_xformQuery.TryGetComponent(viewer, out xform) || !_biomeQuery.TryGetComponent(xform.MapUid, out biome) || - !biome.Enabled) + !biome.Enabled || + !CanLoad(viewer)) { continue; } diff --git a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs index c8867744a4..3829fc34d2 100644 --- a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs +++ b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs @@ -30,7 +30,7 @@ public sealed class RadioDeviceSystem : EntitySystem [Dependency] private readonly SharedAppearanceSystem _appearance = default!; // Used to prevent a shitter from using a bunch of radios to spam chat. - private HashSet<(string, EntityUid)> _recentlySent = new(); + private HashSet<(string, EntityUid, RadioChannelPrototype)> _recentlySent = new(); public override void Initialize() { @@ -114,7 +114,7 @@ public sealed class RadioDeviceSystem : EntitySystem { if (args.Powered) return; - SetMicrophoneEnabled(uid, null, false, true, component); + SetMicrophoneEnabled(uid, null, false, true, component); } public void SetMicrophoneEnabled(EntityUid uid, EntityUid? user, bool enabled, bool quiet = false, RadioMicrophoneComponent? component = null) @@ -191,8 +191,9 @@ public sealed class RadioDeviceSystem : EntitySystem if (HasComp(args.Source)) return; // no feedback loops please. - if (_recentlySent.Add((args.Message, args.Source))) - _radio.SendRadioMessage(args.Source, args.Message, _protoMan.Index(component.BroadcastChannel), uid); + var channel = _protoMan.Index(component.BroadcastChannel)!; + if (_recentlySent.Add((args.Message, args.Source, channel))) + _radio.SendRadioMessage(args.Source, args.Message, channel, uid); } private void OnAttemptListen(EntityUid uid, RadioMicrophoneComponent component, ListenAttemptEvent args) @@ -279,7 +280,7 @@ public sealed class RadioDeviceSystem : EntitySystem if (TryComp(ent, out var mic)) mic.BroadcastChannel = channel; if (TryComp(ent, out var speaker)) - speaker.Channels = new(){ channel }; + speaker.Channels = new() { channel }; Dirty(ent); } } diff --git a/Content.Server/Voting/Managers/VoteManager.DefaultVotes.cs b/Content.Server/Voting/Managers/VoteManager.DefaultVotes.cs index 736ff48817..fb99b3cfad 100644 --- a/Content.Server/Voting/Managers/VoteManager.DefaultVotes.cs +++ b/Content.Server/Voting/Managers/VoteManager.DefaultVotes.cs @@ -32,6 +32,7 @@ namespace Content.Server.Voting.Managers private VotingSystem? _votingSystem; private RoleSystem? _roleSystem; + private GameTicker? _gameTicker; private static readonly Dictionary> _voteTypesToEnableCVars = new() { @@ -70,8 +71,8 @@ namespace Content.Server.Voting.Managers default: throw new ArgumentOutOfRangeException(nameof(voteType), voteType, null); } - var ticker = _entityManager.EntitySysManager.GetEntitySystem(); - ticker.UpdateInfoText(); + _gameTicker = _entityManager.EntitySysManager.GetEntitySystem(); + _gameTicker.UpdateInfoText(); if (timeoutVote) TimeoutStandardVote(voteType); } @@ -346,8 +347,14 @@ namespace Content.Server.Voting.Managers return; } + + + var voterEligibility = _cfg.GetCVar(CCVars.VotekickVoterGhostRequirement) ? VoterEligibility.GhostMinimumPlaytime : VoterEligibility.MinimumPlaytime; + if (_cfg.GetCVar(CCVars.VotekickIgnoreGhostReqInLobby) && _gameTicker!.RunLevel == GameRunLevel.PreRoundLobby) + voterEligibility = VoterEligibility.MinimumPlaytime; + var eligibleVoterNumberRequirement = _cfg.GetCVar(CCVars.VotekickEligibleNumberRequirement); - var eligibleVoterNumber = _cfg.GetCVar(CCVars.VotekickVoterGhostRequirement) ? CalculateEligibleVoterNumber(VoterEligibility.GhostMinimumPlaytime) : CalculateEligibleVoterNumber(VoterEligibility.MinimumPlaytime); + var eligibleVoterNumber = CalculateEligibleVoterNumber(voterEligibility); string target = args[0]; string reason = args[1]; @@ -441,7 +448,7 @@ namespace Content.Server.Voting.Managers }, Duration = TimeSpan.FromSeconds(_cfg.GetCVar(CCVars.VotekickTimer)), InitiatorTimeout = TimeSpan.FromMinutes(_cfg.GetCVar(CCVars.VotekickTimeout)), - VoterEligibility = _cfg.GetCVar(CCVars.VotekickVoterGhostRequirement) ? VoterEligibility.GhostMinimumPlaytime : VoterEligibility.MinimumPlaytime, + VoterEligibility = voterEligibility, DisplayVotes = false, TargetEntity = targetNetEntity }; diff --git a/Content.Server/Voting/VotingSystem.cs b/Content.Server/Voting/VotingSystem.cs index 25475c2157..5df1ce7c1f 100644 --- a/Content.Server/Voting/VotingSystem.cs +++ b/Content.Server/Voting/VotingSystem.cs @@ -1,5 +1,6 @@ using Content.Server.Administration.Managers; using Content.Server.Database; +using Content.Server.GameTicking; using Content.Server.Ghost; using Content.Server.Roles.Jobs; using Content.Shared.CCVar; @@ -12,6 +13,7 @@ using Robust.Shared.Network; using Robust.Shared.Player; using Robust.Shared.Timing; using System.Threading.Tasks; +using Content.Shared.Players.PlayTimeTracking; namespace Content.Server.Voting; @@ -24,6 +26,8 @@ public sealed class VotingSystem : EntitySystem [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly JobSystem _jobs = default!; + [Dependency] private readonly GameTicker _gameTicker = default!; + [Dependency] private readonly ISharedPlaytimeManager _playtimeManager = default!; public override void Initialize() { @@ -34,8 +38,7 @@ public sealed class VotingSystem : EntitySystem private async void OnVotePlayerListRequestEvent(VotePlayerListRequestEvent msg, EntitySessionEventArgs args) { - if (args.SenderSession.AttachedEntity is not { Valid: true } entity - || !await CheckVotekickInitEligibility(args.SenderSession)) + if (!await CheckVotekickInitEligibility(args.SenderSession)) { var deniedResponse = new VotePlayerListResponseEvent(new (NetUserId, NetEntity, string)[0], true); RaiseNetworkEvent(deniedResponse, args.SenderSession.Channel); @@ -46,17 +49,23 @@ public sealed class VotingSystem : EntitySystem foreach (var player in _playerManager.Sessions) { - if (player.AttachedEntity is not { Valid: true } attached) - continue; - - if (attached == entity) continue; + if (args.SenderSession == player) continue; if (_adminManager.IsAdmin(player, false)) continue; - var playerName = GetPlayerVoteListName(attached); - var netEntity = GetNetEntity(attached); + if (player.AttachedEntity is not { Valid: true } attached) + { + var playerName = player.Name; + var netEntity = NetEntity.Invalid; + players.Add((player.UserId, netEntity, playerName)); + } + else + { + var playerName = GetPlayerVoteListName(attached); + var netEntity = GetNetEntity(attached); - players.Add((player.UserId, netEntity, playerName)); + players.Add((player.UserId, netEntity, playerName)); + } } var response = new VotePlayerListResponseEvent(players.ToArray(), false); @@ -86,22 +95,29 @@ public sealed class VotingSystem : EntitySystem if (initiator.AttachedEntity != null && _adminManager.IsAdmin(initiator.AttachedEntity.Value, false)) return true; - if (_cfg.GetCVar(CCVars.VotekickInitiatorGhostRequirement)) + // If cvar enabled, skip the ghost requirement in the preround lobby + if (!_cfg.GetCVar(CCVars.VotekickIgnoreGhostReqInLobby) || (_cfg.GetCVar(CCVars.VotekickIgnoreGhostReqInLobby) && _gameTicker.RunLevel != GameRunLevel.PreRoundLobby)) { - // Must be ghost - if (!TryComp(initiator.AttachedEntity, out GhostComponent? ghostComp)) - return false; + if (_cfg.GetCVar(CCVars.VotekickInitiatorGhostRequirement)) + { + // Must be ghost + if (!TryComp(initiator.AttachedEntity, out GhostComponent? ghostComp)) + return false; - // Must have been dead for x seconds - if ((int)_gameTiming.RealTime.Subtract(ghostComp.TimeOfDeath).TotalSeconds < _cfg.GetCVar(CCVars.VotekickEligibleVoterDeathtime)) - return false; + // Must have been dead for x seconds + if ((int)_gameTiming.RealTime.Subtract(ghostComp.TimeOfDeath).TotalSeconds < _cfg.GetCVar(CCVars.VotekickEligibleVoterDeathtime)) + return false; + } } // Must be whitelisted - if (!await _dbManager.GetWhitelistStatusAsync(initiator.UserId)) + if (!await _dbManager.GetWhitelistStatusAsync(initiator.UserId) && _cfg.GetCVar(CCVars.VotekickInitiatorWhitelistedRequirement)) return false; - return true; + // Must be eligible to vote + var playtime = _playtimeManager.GetPlayTimes(initiator); + return playtime.TryGetValue(PlayTimeTrackingShared.TrackerOverall, out TimeSpan overallTime) && (overallTime >= TimeSpan.FromHours(_cfg.GetCVar(CCVars.VotekickEligibleVoterPlaytime)) + || !_cfg.GetCVar(CCVars.VotekickInitiatorTimeRequirement)); } /// diff --git a/Content.Shared/Actions/BaseActionComponent.cs b/Content.Shared/Actions/BaseActionComponent.cs index 01452bdc72..c3aa6cc97e 100644 --- a/Content.Shared/Actions/BaseActionComponent.cs +++ b/Content.Shared/Actions/BaseActionComponent.cs @@ -76,6 +76,11 @@ public abstract partial class BaseActionComponent : Component // TODO serialization public (TimeSpan Start, TimeSpan End)? Cooldown; + /// + /// If true, the action will have an initial cooldown applied upon addition. + /// + [DataField] public bool StartDelay = false; + /// /// Time interval between action uses. /// diff --git a/Content.Shared/Actions/SharedActionsSystem.cs b/Content.Shared/Actions/SharedActionsSystem.cs index 76b8a1b081..fc6f0baf77 100644 --- a/Content.Shared/Actions/SharedActionsSystem.cs +++ b/Content.Shared/Actions/SharedActionsSystem.cs @@ -813,6 +813,9 @@ public abstract class SharedActionsSystem : EntitySystem if (action.AttachedEntity != null) RemoveAction(action.AttachedEntity.Value, actionId, action: action); + if (action.StartDelay && action.UseDelay != null) + SetCooldown(actionId, action.UseDelay.Value); + DebugTools.AssertOwner(performer, comp); comp ??= EnsureComp(performer); action.AttachedEntity = performer; diff --git a/Content.Shared/Bed/Sleep/SleepingSystem.cs b/Content.Shared/Bed/Sleep/SleepingSystem.cs index fa3bf70421..620ff96a75 100644 --- a/Content.Shared/Bed/Sleep/SleepingSystem.cs +++ b/Content.Shared/Bed/Sleep/SleepingSystem.cs @@ -130,9 +130,6 @@ public sealed partial class SleepingSystem : EntitySystem RaiseLocalEvent(ent, ref ev); _blindableSystem.UpdateIsBlind(ent.Owner); _actionsSystem.AddAction(ent, ref ent.Comp.WakeAction, WakeActionId, ent); - - // TODO remove hardcoded time. - _actionsSystem.SetCooldown(ent.Comp.WakeAction, _gameTiming.CurTime, _gameTiming.CurTime + TimeSpan.FromSeconds(2f)); } private void OnSpeakAttempt(Entity ent, ref SpeakAttemptEvent args) diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index a8965aa93c..c63fac2c47 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -461,6 +461,18 @@ namespace Content.Shared.CCVar * Discord */ + /// + /// The role that will get mentioned if a new SOS ahelp comes in. + /// + public static readonly CVarDef DiscordAhelpMention = + CVarDef.Create("discord.on_call_ping", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL); + + /// + /// URL of the discord webhook to relay unanswered ahelp messages. + /// + public static readonly CVarDef DiscordOnCallWebhook = + CVarDef.Create("discord.on_call_webhook", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL); + /// /// URL of the Discord webhook which will relay all ahelp messages. /// @@ -1469,7 +1481,7 @@ namespace Content.Shared.CCVar /// Config for when the votekick should be allowed to be called based on number of eligible voters. /// public static readonly CVarDef VotekickEligibleNumberRequirement = - CVarDef.Create("votekick.eligible_number", 10, CVar.SERVERONLY); + CVarDef.Create("votekick.eligible_number", 5, CVar.SERVERONLY); /// /// Whether a votekick initiator must be a ghost or not. @@ -1477,6 +1489,18 @@ namespace Content.Shared.CCVar public static readonly CVarDef VotekickInitiatorGhostRequirement = CVarDef.Create("votekick.initiator_ghost_requirement", true, CVar.SERVERONLY); + /// + /// Should the initiator be whitelisted to initiate a votekick? + /// + public static readonly CVarDef VotekickInitiatorWhitelistedRequirement = + CVarDef.Create("votekick.initiator_whitelist_requirement", true, CVar.SERVERONLY); + + /// + /// Should the initiator be able to start a votekick if they are bellow the votekick.voter_playtime requirement? + /// + public static readonly CVarDef VotekickInitiatorTimeRequirement = + CVarDef.Create("votekick.initiator_time_requirement", false, CVar.SERVERONLY); + /// /// Whether a votekick voter must be a ghost or not. /// @@ -1493,7 +1517,7 @@ namespace Content.Shared.CCVar /// Config for how many seconds a player must have been dead to initiate a votekick / be able to vote on a votekick. /// public static readonly CVarDef VotekickEligibleVoterDeathtime = - CVarDef.Create("votekick.voter_deathtime", 180, CVar.REPLICATED | CVar.SERVER); + CVarDef.Create("votekick.voter_deathtime", 30, CVar.REPLICATED | CVar.SERVER); /// /// The required ratio of eligible voters that must agree for a votekick to go through. @@ -1537,6 +1561,12 @@ namespace Content.Shared.CCVar public static readonly CVarDef VotekickBanDuration = CVarDef.Create("votekick.ban_duration", 180, CVar.SERVERONLY); + /// + /// Whether the ghost requirement settings for votekicks should be ignored for the lobby. + /// + public static readonly CVarDef VotekickIgnoreGhostReqInLobby = + CVarDef.Create("votekick.ignore_ghost_req_in_lobby", true, CVar.SERVERONLY); + /* * BAN */ diff --git a/Content.Shared/CartridgeLoader/CartridgeLoaderComponent.cs b/Content.Shared/CartridgeLoader/CartridgeLoaderComponent.cs index c9cd710c52..f47112c794 100644 --- a/Content.Shared/CartridgeLoader/CartridgeLoaderComponent.cs +++ b/Content.Shared/CartridgeLoader/CartridgeLoaderComponent.cs @@ -33,7 +33,7 @@ public sealed partial class CartridgeLoaderComponent : Component /// The maximum amount of programs that can be installed on the cartridge loader entity /// [DataField] - public int DiskSpace = 5; + public int DiskSpace = 8; /// /// Controls whether the cartridge loader will play notifications if it supports it at all diff --git a/Content.Shared/Chemistry/Components/ReactiveContainerComponent.cs b/Content.Shared/Chemistry/Components/ReactiveContainerComponent.cs new file mode 100644 index 0000000000..6aefd8f462 --- /dev/null +++ b/Content.Shared/Chemistry/Components/ReactiveContainerComponent.cs @@ -0,0 +1,21 @@ +namespace Content.Shared.Chemistry.Components; + +/// +/// Represents a container that also contains a solution. +/// This means that reactive entities react when inserted into the container. +/// +[RegisterComponent] +public sealed partial class ReactiveContainerComponent : Component +{ + /// + /// The container that holds the solution. + /// + [DataField(required: true)] + public string Container = default!; + + /// + /// The solution in the container. + /// + [DataField(required: true)] + public string Solution = default!; +} diff --git a/Content.Shared/Chemistry/EntitySystems/ReactiveContainerSystem.cs b/Content.Shared/Chemistry/EntitySystems/ReactiveContainerSystem.cs new file mode 100644 index 0000000000..aa217c60ba --- /dev/null +++ b/Content.Shared/Chemistry/EntitySystems/ReactiveContainerSystem.cs @@ -0,0 +1,53 @@ +using Content.Shared.Chemistry.Components; +using Content.Shared.Chemistry.Reaction; +using Robust.Shared.Containers; + +namespace Content.Shared.Chemistry.EntitySystems; + +public sealed class ReactiveContainerSystem : EntitySystem +{ + [Dependency] private readonly SharedContainerSystem _containerSystem = default!; + [Dependency] private readonly ReactiveSystem _reactiveSystem = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInserted); + SubscribeLocalEvent(OnSolutionChange); + } + + private void OnInserted(EntityUid uid, ReactiveContainerComponent comp, EntInsertedIntoContainerMessage args) + { + // Only reactive entities can react with the solution + if (!HasComp(args.Entity)) + return; + + if (!_solutionContainerSystem.TryGetSolution(uid, comp.Solution, out _, out var solution)) + return; + if (solution.Volume == 0) + return; + + _reactiveSystem.DoEntityReaction(args.Entity, solution, ReactionMethod.Touch); + } + + private void OnSolutionChange(EntityUid uid, ReactiveContainerComponent comp, SolutionContainerChangedEvent args) + { + if (!_solutionContainerSystem.TryGetSolution(uid, comp.Solution, out _, out var solution)) + return; + if (solution.Volume == 0) + return; + if (!TryComp(uid, out var manager)) + return; + if (!_containerSystem.TryGetContainer(uid, comp.Container, out var container)) + return; + + foreach (var entity in container.ContainedEntities) + { + if (!HasComp(entity)) + continue; + _reactiveSystem.DoEntityReaction(entity, solution, ReactionMethod.Touch); + } + } +} diff --git a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs index f41fa2b22d..fdd77e8e72 100644 --- a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs +++ b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs @@ -60,6 +60,7 @@ namespace Content.Shared.Containers.ItemSlots } #region ComponentManagement + /// /// Spawn in starting items for any item slots that should have one. /// @@ -70,7 +71,8 @@ namespace Content.Shared.Containers.ItemSlots if (slot.HasItem || string.IsNullOrEmpty(slot.StartingItem)) continue; - var item = EntityManager.SpawnEntity(slot.StartingItem, EntityManager.GetComponent(uid).Coordinates); + var item = Spawn(slot.StartingItem, Transform(uid).Coordinates); + if (slot.ContainerSlot != null) _containers.Insert(item, slot.ContainerSlot); } @@ -99,7 +101,8 @@ namespace Content.Shared.Containers.ItemSlots if (itemSlots.Slots.TryGetValue(id, out var existing)) { if (existing.Local) - Log.Error($"Duplicate item slot key. Entity: {EntityManager.GetComponent(uid).EntityName} ({uid}), key: {id}"); + Log.Error( + $"Duplicate item slot key. Entity: {EntityManager.GetComponent(uid).EntityName} ({uid}), key: {id}"); else // server state takes priority slot.CopyFrom(existing); @@ -134,7 +137,10 @@ namespace Content.Shared.Containers.ItemSlots Dirty(uid, itemSlots); } - public bool TryGetSlot(EntityUid uid, string slotId, [NotNullWhen(true)] out ItemSlot? itemSlot, ItemSlotsComponent? component = null) + public bool TryGetSlot(EntityUid uid, + string slotId, + [NotNullWhen(true)] out ItemSlot? itemSlot, + ItemSlotsComponent? component = null) { itemSlot = null; @@ -143,9 +149,11 @@ namespace Content.Shared.Containers.ItemSlots return component.Slots.TryGetValue(slotId, out itemSlot); } + #endregion #region Interactions + /// /// Attempt to take an item from a slot, if any are set to EjectOnInteract. /// @@ -201,20 +209,50 @@ namespace Content.Shared.Containers.ItemSlots if (!EntityManager.TryGetComponent(args.User, out HandsComponent? hands)) return; + if (itemSlots.Slots.Count == 0) + return; + + // If any slot can be inserted into don't show popup. + // If any whitelist passes, but slot is locked, then show locked. + // If whitelist fails all, show whitelist fail. + + // valid, insertable slots (if any) var slots = new List(); + + string? whitelistFailPopup = null; + string? lockedFailPopup = null; foreach (var slot in itemSlots.Slots.Values) { if (!slot.InsertOnInteract) continue; - if (!CanInsert(uid, args.Used, args.User, slot, swap: slot.Swap, popup: args.User)) - continue; + if (CanInsert(uid, args.Used, args.User, slot, slot.Swap)) + { + slots.Add(slot); + } + else + { + var allowed = CanInsertWhitelist(args.Used, slot); + if (lockedFailPopup == null && slot.LockedFailPopup != null && allowed && slot.Locked) + lockedFailPopup = slot.LockedFailPopup; - slots.Add(slot); + if (whitelistFailPopup == null && slot.WhitelistFailPopup != null) + whitelistFailPopup = slot.WhitelistFailPopup; + } } if (slots.Count == 0) + { + // it's a bit weird that the popupMessage is stored with the item slots themselves, but in practice + // the popup messages will just all be the same, so it's probably fine. + // + // doing a check to make sure that they're all the same or something is probably frivolous + if (lockedFailPopup != null) + _popupSystem.PopupClient(Loc.GetString(lockedFailPopup), uid, args.User); + else if (whitelistFailPopup != null) + _popupSystem.PopupClient(Loc.GetString(whitelistFailPopup), uid, args.User); return; + } // Drop the held item onto the floor. Return if the user cannot drop. if (!_handsSystem.TryDrop(args.User, args.Used, handsComp: hands)) @@ -236,23 +274,31 @@ namespace Content.Shared.Containers.ItemSlots return; } } + #endregion #region Insert + /// /// Insert an item into a slot. This does not perform checks, so make sure to also use or just use instead. /// /// If true, will exclude the user when playing sound. Does nothing client-side. /// Useful for predicted interactions - private void Insert(EntityUid uid, ItemSlot slot, EntityUid item, EntityUid? user, bool excludeUserAudio = false) + private void Insert(EntityUid uid, + ItemSlot slot, + EntityUid item, + EntityUid? user, + bool excludeUserAudio = false) { bool? inserted = slot.ContainerSlot != null ? _containers.Insert(item, slot.ContainerSlot) : null; // ContainerSlot automatically raises a directed EntInsertedIntoContainerMessage // Logging if (inserted != null && inserted.Value && user != null) - _adminLogger.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(user.Value)} inserted {ToPrettyString(item)} into {slot.ContainerSlot?.ID + " slot of "}{ToPrettyString(uid)}"); + _adminLogger.Add(LogType.Action, + LogImpact.Low, + $"{ToPrettyString(user.Value)} inserted {ToPrettyString(item)} into {slot.ContainerSlot?.ID + " slot of "}{ToPrettyString(uid)}"); _audioSystem.PlayPredicted(slot.InsertSound, uid, excludeUserAudio ? user : null); } @@ -261,46 +307,53 @@ namespace Content.Shared.Containers.ItemSlots /// Check whether a given item can be inserted into a slot. Unless otherwise specified, this will return /// false if the slot is already filled. /// - /// - /// If a popup entity is given, and if the item slot is set to generate a popup message when it fails to - /// pass the whitelist or due to slot being locked, then this will generate an appropriate popup. - /// - public bool CanInsert(EntityUid uid, EntityUid usedUid, EntityUid? user, ItemSlot slot, bool swap = false, EntityUid? popup = null) + public bool CanInsert(EntityUid uid, + EntityUid usedUid, + EntityUid? user, + ItemSlot slot, + bool swap = false) { if (slot.ContainerSlot == null) return false; - if (_whitelistSystem.IsWhitelistFail(slot.Whitelist, usedUid) || _whitelistSystem.IsBlacklistPass(slot.Blacklist, usedUid)) - { - if (popup.HasValue && slot.WhitelistFailPopup.HasValue) - _popupSystem.PopupClient(Loc.GetString(slot.WhitelistFailPopup), uid, popup.Value); + if (slot.HasItem && (!swap || swap && !CanEject(uid, user, slot))) + return false; + + if (!CanInsertWhitelist(usedUid, slot)) return false; - } if (slot.Locked) - { - if (popup.HasValue && slot.LockedFailPopup.HasValue) - _popupSystem.PopupClient(Loc.GetString(slot.LockedFailPopup), uid, popup.Value); - return false; - } - - if (slot.HasItem && (!swap || (swap && !CanEject(uid, user, slot)))) return false; var ev = new ItemSlotInsertAttemptEvent(uid, usedUid, user, slot); RaiseLocalEvent(uid, ref ev); RaiseLocalEvent(usedUid, ref ev); if (ev.Cancelled) + { return false; + } return _containers.CanInsert(usedUid, slot.ContainerSlot, assumeEmpty: swap); } + private bool CanInsertWhitelist(EntityUid usedUid, ItemSlot slot) + { + if (_whitelistSystem.IsWhitelistFail(slot.Whitelist, usedUid) + || _whitelistSystem.IsBlacklistPass(slot.Blacklist, usedUid)) + return false; + return true; + } + /// /// Tries to insert item into a specific slot. /// /// False if failed to insert item - public bool TryInsert(EntityUid uid, string id, EntityUid item, EntityUid? user, ItemSlotsComponent? itemSlots = null, bool excludeUserAudio = false) + public bool TryInsert(EntityUid uid, + string id, + EntityUid item, + EntityUid? user, + ItemSlotsComponent? itemSlots = null, + bool excludeUserAudio = false) { if (!Resolve(uid, ref itemSlots)) return false; @@ -315,7 +368,11 @@ namespace Content.Shared.Containers.ItemSlots /// Tries to insert item into a specific slot. /// /// False if failed to insert item - public bool TryInsert(EntityUid uid, ItemSlot slot, EntityUid item, EntityUid? user, bool excludeUserAudio = false) + public bool TryInsert(EntityUid uid, + ItemSlot slot, + EntityUid item, + EntityUid? user, + bool excludeUserAudio = false) { if (!CanInsert(uid, item, user, slot)) return false; @@ -329,7 +386,11 @@ namespace Content.Shared.Containers.ItemSlots /// Does not check action blockers. /// /// False if failed to insert item - public bool TryInsertFromHand(EntityUid uid, ItemSlot slot, EntityUid user, HandsComponent? hands = null, bool excludeUserAudio = false) + public bool TryInsertFromHand(EntityUid uid, + ItemSlot slot, + EntityUid user, + HandsComponent? hands = null, + bool excludeUserAudio = false) { if (!Resolve(user, ref hands, false)) return false; @@ -406,6 +467,7 @@ namespace Content.Shared.Containers.ItemSlots return 1; } + #endregion #region Eject @@ -425,7 +487,7 @@ namespace Content.Shared.Containers.ItemSlots return false; } - if (slot.ContainerSlot?.ContainedEntity is not {} item) + if (slot.ContainerSlot?.ContainedEntity is not { } item) return false; var ev = new ItemSlotEjectAttemptEvent(uid, item, user, slot); @@ -450,7 +512,9 @@ namespace Content.Shared.Containers.ItemSlots // Logging if (ejected != null && ejected.Value && user != null) - _adminLogger.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(user.Value)} ejected {ToPrettyString(item)} from {slot.ContainerSlot?.ID + " slot of "}{ToPrettyString(uid)}"); + _adminLogger.Add(LogType.Action, + LogImpact.Low, + $"{ToPrettyString(user.Value)} ejected {ToPrettyString(item)} from {slot.ContainerSlot?.ID + " slot of "}{ToPrettyString(uid)}"); _audioSystem.PlayPredicted(slot.EjectSound, uid, excludeUserAudio ? user : null); } @@ -459,7 +523,11 @@ namespace Content.Shared.Containers.ItemSlots /// Try to eject an item from a slot. /// /// False if item slot is locked or has no item inserted - public bool TryEject(EntityUid uid, ItemSlot slot, EntityUid? user, [NotNullWhen(true)] out EntityUid? item, bool excludeUserAudio = false) + public bool TryEject(EntityUid uid, + ItemSlot slot, + EntityUid? user, + [NotNullWhen(true)] out EntityUid? item, + bool excludeUserAudio = false) { item = null; @@ -481,8 +549,12 @@ namespace Content.Shared.Containers.ItemSlots /// Try to eject item from a slot. /// /// False if the id is not valid, the item slot is locked, or it has no item inserted - public bool TryEject(EntityUid uid, string id, EntityUid? user, - [NotNullWhen(true)] out EntityUid? item, ItemSlotsComponent? itemSlots = null, bool excludeUserAudio = false) + public bool TryEject(EntityUid uid, + string id, + EntityUid? user, + [NotNullWhen(true)] out EntityUid? item, + ItemSlotsComponent? itemSlots = null, + bool excludeUserAudio = false) { item = null; @@ -513,12 +585,16 @@ namespace Content.Shared.Containers.ItemSlots return true; } + #endregion #region Verbs - private void AddAlternativeVerbs(EntityUid uid, ItemSlotsComponent itemSlots, GetVerbsEvent args) + + private void AddAlternativeVerbs(EntityUid uid, + ItemSlotsComponent itemSlots, + GetVerbsEvent args) { - if (args.Hands == null || !args.CanAccess ||!args.CanInteract) + if (args.Hands == null || !args.CanAccess || !args.CanInteract) { return; } @@ -612,7 +688,9 @@ namespace Content.Shared.Containers.ItemSlots } } - private void AddInteractionVerbsVerbs(EntityUid uid, ItemSlotsComponent itemSlots, GetVerbsEvent args) + private void AddInteractionVerbsVerbs(EntityUid uid, + ItemSlotsComponent itemSlots, + GetVerbsEvent args) { if (args.Hands == null || !args.CanAccess || !args.CanInteract) return; @@ -671,7 +749,7 @@ namespace Content.Shared.Containers.ItemSlots new SpriteSpecifier.Texture( new ResPath("/Textures/Interface/VerbIcons/insert.svg.192dpi.png")); } - else if(slot.EjectOnInteract) + else if (slot.EjectOnInteract) { // Inserting/ejecting is a primary interaction for this entity. Instead of using the insert // category, we will use a single "Place " verb. @@ -690,9 +768,11 @@ namespace Content.Shared.Containers.ItemSlots args.Verbs.Add(insertVerb); } } + #endregion #region BUIs + private void HandleButtonPressed(EntityUid uid, ItemSlotsComponent component, ItemSlotButtonPressedEvent args) { if (!component.Slots.TryGetValue(args.SlotId, out var slot)) @@ -703,6 +783,7 @@ namespace Content.Shared.Containers.ItemSlots else if (args.TryInsert && !slot.HasItem) TryInsertFromHand(uid, slot, args.Actor); } + #endregion /// diff --git a/Content.Shared/Inventory/InventorySystem.Equip.cs b/Content.Shared/Inventory/InventorySystem.Equip.cs index 1d5d91a9e3..f089dfaf23 100644 --- a/Content.Shared/Inventory/InventorySystem.Equip.cs +++ b/Content.Shared/Inventory/InventorySystem.Equip.cs @@ -47,7 +47,7 @@ public abstract partial class InventorySystem private void OnEntRemoved(EntityUid uid, InventoryComponent component, EntRemovedFromContainerMessage args) { - if(!TryGetSlot(uid, args.Container.ID, out var slotDef, inventory: component)) + if (!TryGetSlot(uid, args.Container.ID, out var slotDef, inventory: component)) return; var unequippedEvent = new DidUnequipEvent(uid, args.Entity, slotDef); @@ -59,8 +59,8 @@ public abstract partial class InventorySystem private void OnEntInserted(EntityUid uid, InventoryComponent component, EntInsertedIntoContainerMessage args) { - if(!TryGetSlot(uid, args.Container.ID, out var slotDef, inventory: component)) - return; + if (!TryGetSlot(uid, args.Container.ID, out var slotDef, inventory: component)) + return; var equippedEvent = new DidEquipEvent(uid, args.Entity, slotDef); RaiseLocalEvent(uid, equippedEvent, true); @@ -118,7 +118,7 @@ public abstract partial class InventorySystem RaiseLocalEvent(held.Value, new HandDeselectedEvent(actor)); - TryEquip(actor, actor, held.Value, ev.Slot, predicted: true, inventory: inventory, force: true, checkDoafter:true); + TryEquip(actor, actor, held.Value, ev.Slot, predicted: true, inventory: inventory, force: true, checkDoafter: true); } public bool TryEquip(EntityUid uid, EntityUid itemUid, string slot, bool silent = false, bool force = false, bool predicted = false, @@ -365,6 +365,25 @@ public abstract partial class InventorySystem ClothingComponent? clothing = null, bool reparent = true, bool checkDoafter = false) + { + var itemsDropped = 0; + return TryUnequip(actor, target, slot, out removedItem, ref itemsDropped, + silent, force, predicted, inventory, clothing, reparent, checkDoafter); + } + + private bool TryUnequip( + EntityUid actor, + EntityUid target, + string slot, + [NotNullWhen(true)] out EntityUid? removedItem, + ref int itemsDropped, + bool silent = false, + bool force = false, + bool predicted = false, + InventoryComponent? inventory = null, + ClothingComponent? clothing = null, + bool reparent = true, + bool checkDoafter = false) { removedItem = null; @@ -423,17 +442,27 @@ public abstract partial class InventorySystem return false; } + if (!_containerSystem.Remove(removedItem.Value, slotContainer, force: force, reparent: reparent)) + return false; + + // this is in order to keep track of whether this is the first instance of a recursion call + var firstRun = itemsDropped == 0; + ++itemsDropped; + foreach (var slotDef in inventory.Slots) { if (slotDef != slotDefinition && slotDef.DependsOn == slotDefinition.Name) { //this recursive call might be risky - TryUnequip(actor, target, slotDef.Name, true, true, predicted, inventory, reparent: reparent); + TryUnequip(actor, target, slotDef.Name, out _, ref itemsDropped, true, true, predicted, inventory, reparent: reparent); } } - if (!_containerSystem.Remove(removedItem.Value, slotContainer, force: force, reparent: reparent)) - return false; + // we check if any items were dropped, and make a popup if they were. + // the reason we check for > 1 is because the first item is always the one we are trying to unequip, + // whereas we only want to notify for extra dropped items. + if (!silent && _gameTiming.IsFirstTimePredicted && firstRun && itemsDropped > 1) + _popup.PopupClient(Loc.GetString("inventory-component-dropped-from-unequip", ("items", itemsDropped - 1)), target, target); // TODO: Inventory needs a hot cleanup hoo boy // Check if something else (AKA toggleable) dumped it into a container. @@ -466,7 +495,7 @@ public abstract partial class InventorySystem if ((containerSlot == null || slotDefinition == null) && !TryGetSlotContainer(target, slot, out containerSlot, out slotDefinition, inventory)) return false; - if (containerSlot.ContainedEntity is not {} itemUid) + if (containerSlot.ContainedEntity is not { } itemUid) return false; if (!_containerSystem.CanRemove(itemUid, containerSlot)) diff --git a/Content.Shared/MedicalScanner/HealthAnalyzerScannedUserMessage.cs b/Content.Shared/MedicalScanner/HealthAnalyzerScannedUserMessage.cs index 78f26ed5c0..08af1a36a7 100644 --- a/Content.Shared/MedicalScanner/HealthAnalyzerScannedUserMessage.cs +++ b/Content.Shared/MedicalScanner/HealthAnalyzerScannedUserMessage.cs @@ -13,14 +13,16 @@ public sealed class HealthAnalyzerScannedUserMessage : BoundUserInterfaceMessage public float BloodLevel; public bool? ScanMode; public bool? Bleeding; + public bool? Unrevivable; - public HealthAnalyzerScannedUserMessage(NetEntity? targetEntity, float temperature, float bloodLevel, bool? scanMode, bool? bleeding) + public HealthAnalyzerScannedUserMessage(NetEntity? targetEntity, float temperature, float bloodLevel, bool? scanMode, bool? bleeding, bool? unrevivable) { TargetEntity = targetEntity; Temperature = temperature; BloodLevel = bloodLevel; ScanMode = scanMode; Bleeding = bleeding; + Unrevivable = unrevivable; } } diff --git a/Resources/Audio/Machines/ame_fuelinjection.ogg b/Resources/Audio/Machines/ame_fuelinjection.ogg new file mode 100644 index 0000000000000000000000000000000000000000..30c9175ee97733b81ce14e9ac55964c67b0dd3c3 GIT binary patch literal 29727 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 Hm4W{O+Q|*_ literal 31956 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 + [1] Causes + *[other] cause + } a blinding flash + reagent-effect-guidebook-foam-area-reaction-effect = { $chance -> [1] Creates diff --git a/Resources/Locale/en-US/inventory/components/inventory-component.ftl b/Resources/Locale/en-US/inventory/components/inventory-component.ftl index 79943d914e..1cde6b5943 100644 --- a/Resources/Locale/en-US/inventory/components/inventory-component.ftl +++ b/Resources/Locale/en-US/inventory/components/inventory-component.ftl @@ -2,3 +2,9 @@ inventory-component-can-equip-cannot = You can't equip this! inventory-component-can-equip-does-not-fit = This doesn't fit! inventory-component-can-unequip-cannot = You can't unequip this! + +inventory-component-dropped-from-unequip = + You dropped {$items -> + [1] an item! + *[other] some items! +} diff --git a/Resources/Locale/en-US/janitorial/janitorial-slot-component.ftl b/Resources/Locale/en-US/janitorial/janitorial-slot-component.ftl index b722116587..bc03943a01 100644 --- a/Resources/Locale/en-US/janitorial/janitorial-slot-component.ftl +++ b/Resources/Locale/en-US/janitorial/janitorial-slot-component.ftl @@ -1,5 +1,6 @@ # mop bucket -mop-bucket-slot-component-slot-name-shark = Shark +mop-bucket-slot-component-slot-name-item = Item +mop-bucket-slot-component-eject-verb = Take out # janitorial trolley janitorial-trolley-slot-component-slot-name-plunger = Plunger janitorial-trolley-slot-component-slot-name-sign = Sign diff --git a/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl b/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl index fe1f92e914..eb79358ecc 100644 --- a/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl +++ b/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl @@ -15,7 +15,8 @@ health-analyzer-window-entity-damage-total-text = Total Damage: health-analyzer-window-damage-group-text = {$damageGroup}: {$amount} health-analyzer-window-damage-type-text = {$damageType}: {$amount} -health-analyzer-window-entity-bleeding-text = Patient is bleeding! +health-analyzer-window-entity-unrevivable-text = [color=red]Unique body composition detected! Patient can not be resuscitated by normal means![/color] +health-analyzer-window-entity-bleeding-text = [color=red]Patient is bleeding![/color] health-analyzer-window-scan-mode-text = Scan Mode: health-analyzer-window-scan-mode-active = Active diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl index 3677efa38f..9e83cbe64e 100644 --- a/Resources/Locale/en-US/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/store/uplink-catalog.ftl @@ -218,8 +218,8 @@ uplink-chemistry-kit-desc = A starter kit for the aspiring chemist, includes tox uplink-knives-kit-name = Throwing Knives Kit uplink-knives-kit-desc = A set of 4 syndicate branded throwing knives, perfect for embedding into the body of your victims. -uplink-meds-bundle-name = Medical Bundle -uplink-meds-bundle-desc = All you need to get your comrades back in the fight: mainly a combat medkit, a defibrillator and three combat medipens. +uplink-meds-bundle-name = Interdyne Medical Bundle +uplink-meds-bundle-desc = An assortment of autoinjectors and premium medical equipment to cover for every possible situation. Contains an elite compact defibrillator that can be used as a weapon. uplink-ammo-bundle-name = Ammo Bundle uplink-ammo-bundle-desc = Reloading! Contains 4 magazines for the C-20r, 4 drums for the Bulldog, and 2 ammo boxes for the L6 SAW. diff --git a/Resources/Locale/en-US/voting/ui/vote-call-menu.ftl b/Resources/Locale/en-US/voting/ui/vote-call-menu.ftl index 7ac9c344fd..82e3a5d1f8 100644 --- a/Resources/Locale/en-US/voting/ui/vote-call-menu.ftl +++ b/Resources/Locale/en-US/voting/ui/vote-call-menu.ftl @@ -25,8 +25,8 @@ ui-vote-type-not-available = This vote type has been disabled # Vote option only available for specific users. ui-vote-trusted-users-notice = - This vote option is only available to whitelisted players. - In addition, you must have been a ghost for { $timeReq } minutes. + This vote option is only available to players who have enough playtime or are whitelisted. + In addition, you must have been a ghost for { $timeReq } seconds. # Warning to not abuse a specific vote option. ui-vote-abuse-warning = diff --git a/Resources/Locale/en-US/window/window-component.ftl b/Resources/Locale/en-US/window/window-component.ftl index 3ecceb8a94..62e9c46f1b 100644 --- a/Resources/Locale/en-US/window/window-component.ftl +++ b/Resources/Locale/en-US/window/window-component.ftl @@ -2,13 +2,14 @@ # Shown when examining the window. Each entry represents the window's health condition comp-window-damaged-1 = It looks fully intact. -comp-window-damaged-2 = It has a few scratches +comp-window-damaged-2 = It has a few scratches. comp-window-damaged-3 = It has a few small cracks. -comp-window-damaged-4 = It has several big cracks running along its surface. -comp-window-damaged-5 = It has deep cracks across multiple layers. -comp-window-damaged-6 = It's extremely cracked and on the verge of shattering. +comp-window-damaged-4 = [color=yellow]It has several big cracks running along its surface.[/color] +comp-window-damaged-5 = [color=orange]It has deep cracks across multiple layers.[/color] +comp-window-damaged-6 = [color=red]It's extremely cracked and on the verge of shattering.[/color] ### Interaction Messages # Shown when knocking on a window comp-window-knock = *knock knock* + diff --git a/Resources/Maps/Nonstations/nukieplanet.yml b/Resources/Maps/Nonstations/nukieplanet.yml index 665657f7dd..6c0a209dec 100644 --- a/Resources/Maps/Nonstations/nukieplanet.yml +++ b/Resources/Maps/Nonstations/nukieplanet.yml @@ -6576,7 +6576,7 @@ entities: - uid: 2031 components: - type: Transform - pos: 3.6114278,-10.732791 + pos: 4.0109396,-12.223828 parent: 104 - uid: 2095 components: @@ -10993,6 +10993,13 @@ entities: - type: Transform pos: 11.5,-6.5 parent: 104 +- proto: HandLabeler + entities: + - uid: 1826 + components: + - type: Transform + pos: 3.4542694,-10.616036 + parent: 104 - proto: KitchenKnife entities: - uid: 1061 diff --git a/Resources/Maps/Test/dev_map.yml b/Resources/Maps/Test/dev_map.yml index 9fab52cc29..e535f9e011 100644 --- a/Resources/Maps/Test/dev_map.yml +++ b/Resources/Maps/Test/dev_map.yml @@ -36,11 +36,11 @@ entities: version: 6 0,-1: ind: 0,-1 - tiles: eQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAAA + tiles: eQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAAA version: 6 1,-1: ind: 1,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + tiles: eQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA version: 6 -2,0: ind: -2,0 @@ -68,12 +68,16 @@ entities: version: 6 0,-2: ind: 0,-2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA version: 6 -1,-2: ind: -1,-2 tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA version: 6 + 1,-2: + ind: 1,-2 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 - type: Broadphase - type: Physics bodyStatus: InAir @@ -100,247 +104,301 @@ entities: data: tiles: -4,0: + 0: 65532 + -4,-1: 0: 65535 -4,1: - 0: 65535 + 0: 15 + 1: 65280 + -5,1: + 1: 52292 + -4,2: + 1: 8959 + -5,2: + 1: 204 + -4,3: + 1: 8738 + -4,4: + 1: 230 -3,0: - 0: 65535 + 0: 65524 -3,1: - 0: 65535 + 0: 3823 + -3,2: + 1: 35071 + -3,-1: + 0: 56797 -2,0: - 0: 65535 + 0: 65534 -2,1: - 0: 65535 + 0: 61167 + -3,3: + 1: 8 + -2,3: + 1: 15 -2,2: - 0: 65535 + 0: 3822 + -2,-1: + 0: 61166 -1,0: 0: 65535 -1,1: 0: 65535 -1,2: - 0: 65535 - -4,-3: - 0: 61440 - -4,-2: - 0: 65535 - -4,-1: - 0: 65535 - -3,-3: - 0: 61440 - -3,-2: - 0: 65535 - -3,-1: - 0: 65535 - -2,-4: - 0: 65520 - -2,-3: - 0: 65535 - -2,-2: - 0: 65535 - -2,-1: - 0: 65535 - -1,-4: - 0: 65535 - -1,-3: - 0: 65535 - -1,-2: - 0: 65535 + 0: 53247 + -1,3: + 1: 1 -1,-1: 0: 65535 - 0,4: - 0: 61183 - 0,5: - 0: 61166 - 0,6: - 0: 14 - 1,4: - 0: 65535 - 1,5: - 0: 65535 - 1,6: - 0: 65535 - 1,7: - 0: 15 - 2,4: - 0: 65535 - 2,5: - 0: 65535 - 2,6: - 0: 4095 - 3,4: - 0: 65535 - 3,5: - 0: 65535 - 3,6: - 0: 53247 - 3,7: - 0: 12 0,0: 0: 65535 0,1: 0: 65535 0,2: 0: 65535 - 0,3: + -4,-2: 0: 65535 - 1,0: - 0: 65535 - 1,1: - 0: 65535 - 1,2: - 0: 65535 - 1,3: - 0: 65535 - 2,0: - 0: 4369 - 1: 8738 - 2,2: - 0: 65535 - 2,3: - 0: 65535 - 3,0: - 0: 65535 - 3,2: - 0: 65535 - 3,3: - 0: 65535 - 3,1: + -3,-2: + 0: 56829 + -2,-2: + 0: 3838 + -2,-4: + 0: 60928 + -2,-3: 0: 61166 + -1,-4: + 0: 65350 + -1,-3: + 0: 65535 + -1,-2: + 0: 4095 + -1,-5: + 0: 16384 0,-4: - 0: 65527 + 0: 65299 0,-3: 0: 65535 0,-2: - 0: 65535 + 0: 53247 0,-1: 0: 65535 - 1,-4: - 0: 30576 - 1,-3: - 0: 65399 - 1,-2: - 0: 63359 + 0,4: + 1: 17 + 0: 3276 + 0,3: + 1: 4368 + 0: 52428 + -1,4: + 1: 240 + 0,5: + 0: 52428 + 0,6: + 0: 14 + 1,4: + 0: 17759 + 1,3: + 0: 65535 + 1,5: + 0: 58990 + 1,6: + 0: 26350 + 1,7: + 0: 4 + 2,4: + 0: 65419 + 2,5: + 0: 45311 + 2,6: + 0: 187 + 2,3: + 0: 16383 + 3,4: + 0: 46011 + 3,5: + 0: 47295 + 3,6: + 0: 35007 + 3,3: + 0: 8191 + 4,4: + 0: 12595 + 4,5: + 0: 13107 + 4,6: + 0: 13107 + 1,0: + 0: 65535 + 1,2: + 0: 65520 1,-1: 0: 65535 - 2,-2: - 0: 4096 - 1: 8738 - 2,-1: - 0: 4369 + 1,1: + 0: 61166 + 2,2: + 0: 7632 + 2,0: 1: 8738 + 2,1: + 1: 2 + 3,2: + 0: 36828 + 3,0: + 0: 36590 + 3,1: + 0: 52428 3,-1: - 0: 65262 - 3,-2: - 0: 61152 - 4,-2: - 0: 65520 - 4,-1: - 0: 65535 - 5,-2: - 0: 65520 - 5,-1: - 0: 65535 - 6,-2: - 0: 65520 - 6,-1: - 0: 65535 - 7,-2: - 0: 65520 - 7,-1: - 0: 65535 - -5,0: - 0: 52428 - -5,-3: - 0: 32768 - -5,-2: - 0: 51336 - -5,-1: - 0: 52428 + 0: 35771 4,0: - 0: 65535 + 0: 8191 4,1: 0: 65535 4,2: 0: 65535 4,3: + 0: 8191 + 0,-5: + 0: 4096 + 1,-4: + 0: 48008 + 1,-3: + 0: 65467 + 1,-2: + 0: 3003 + 1,-5: + 0: 34952 + 2,-4: + 0: 45875 + 1: 1092 + 2: 2056 + 2,-3: 0: 65535 + 2,-2: + 0: 61439 + 2,-5: + 0: 65535 + 2,-1: + 0: 3822 + 3,-4: + 0: 65535 + 3,-3: + 0: 65535 + 3,-2: + 0: 48063 + 3,-5: + 0: 65535 + 4,-4: + 0: 65535 + 4,-3: + 0: 65535 + 4,-2: + 0: 65311 + 4,-1: + 0: 8191 + 4,-5: + 0: 65535 + 5,-4: + 0: 62451 + 2: 3084 + 5,-3: + 0: 62451 + 3: 12 + 4: 3072 + 5,-2: + 0: 65283 + 5: 12 + 5,-1: + 0: 36863 + 5,-5: + 0: 62451 + 2: 3084 5,0: - 0: 65535 - 5,1: - 0: 65535 - 5,2: - 0: 65535 - 5,3: - 0: 65535 + 0: 40959 + 6,-4: + 2: 257 + 0: 4112 + 1: 17476 + 6,-3: + 3: 1 + 0: 4112 + 4: 256 + 1: 17476 + 6,-2: + 5: 1 + 0: 47872 + 1: 4 + 6,-1: + 0: 7103 + 6,-5: + 0: 4112 + 1: 17476 + 2: 257 6,0: 0: 65535 - 6,1: - 0: 65535 - 6,2: - 0: 65535 - 6,3: - 0: 63351 + 7,-2: + 0: 65280 + 7,-1: + 0: 8191 7,0: - 0: 30583 - 7,1: - 0: 4375 - 7,2: - 0: 4369 - 7,3: - 0: 4096 + 0: 13107 8,-2: - 0: 30576 + 0: 13056 8,-1: - 0: 30583 - 4,4: - 0: 30583 - 4,5: - 0: 30583 - 4,6: - 0: 30583 - 4,7: - 0: 7 - -4,2: - 0: 26367 - -1,3: - 0: 15 - 2,1: - 0: 4369 - 1: 2 - -5,1: - 0: 52428 - -4,3: - 0: 26222 - -3,3: - 0: 15 - -2,3: - 0: 15 - -4,4: - 0: 238 + 0: 819 + -5,0: + 1: 17476 + -5,-1: + 1: 17476 + -5,-2: + 1: 16384 + 5,1: + 0: 48051 + 5,2: + 0: 7103 + 5,3: + 0: 4095 + 6,1: + 0: 65525 + 6,2: + 0: 4095 + 6,3: + 0: 626 -3,4: - 0: 255 + 1: 240 -2,4: - 0: 255 - -1,4: - 0: 255 - -5,2: - 0: 204 - -3,2: - 0: 35071 - 0,-5: - 0: 28672 - -1,-5: + 1: 240 + 1,-7: + 1: 192 + 0: 32768 + 1,-6: + 0: 34952 + 2,-7: + 1: 240 0: 61440 - 2,-3: - 1: 12834 - 2,-4: - 1: 61166 - 3,-4: - 1: 13107 - 2,-5: - 1: 57344 - 3,-5: - 1: 12288 + 2,-6: + 0: 65535 + 3,-7: + 1: 240 + 0: 61440 + 3,-6: + 0: 65535 + 4,-7: + 1: 240 + 0: 62976 + 4,-6: + 0: 65535 + 5,-7: + 1: 240 + 0: 61440 + 5,-6: + 0: 62451 + 2: 3084 + 6,-7: + 1: 17520 + 0: 4096 + 6,-6: + 2: 257 + 0: 4112 + 1: 17476 uniqueMixes: - volume: 2500 temperature: 293.15 @@ -357,6 +415,21 @@ entities: - 0 - 0 - 0 + - volume: 2500 + immutable: True + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 293.15 moles: @@ -372,6 +445,51 @@ entities: - 0 - 0 - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 0 + - 0 + - 0 + - 6666.982 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 0 + - 6666.982 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 6666.982 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 chunkSize: 4 - type: GasTileOverlay - type: BecomesStation @@ -384,6 +502,7 @@ entities: - type: MetaData - type: Transform - type: Map + mapPaused: True - type: PhysicsMap - type: GridTree - type: MovedGrids @@ -401,12 +520,23 @@ entities: - type: DeviceList devices: - 801 -- proto: AirCanister - entities: - - uid: 458 + - uid: 1556 components: - type: Transform - pos: 7.5,-0.5 + rot: 3.141592653589793 rad + pos: 10.5,-12.5 + parent: 179 +- proto: AirCanister + entities: + - uid: 1281 + components: + - type: Transform + pos: 12.5,-5.5 + parent: 179 + - uid: 1284 + components: + - type: Transform + pos: 13.5,-5.5 parent: 179 - proto: Airlock entities: @@ -435,6 +565,32 @@ entities: - type: Transform pos: 6.5,28.5 parent: 179 +- proto: AirlockAtmospherics + entities: + - uid: 77 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-8.5 + parent: 179 + - uid: 678 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-9.5 + parent: 179 + - uid: 904 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,-6.5 + parent: 179 + - uid: 995 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,-6.5 + parent: 179 - proto: AirlockCargo entities: - uid: 87 @@ -481,16 +637,6 @@ entities: - type: Transform pos: 0.5,-14.5 parent: 179 - - uid: 255 - components: - - type: Transform - pos: 7.5,-8.5 - parent: 179 - - uid: 256 - components: - - type: Transform - pos: 5.5,-8.5 - parent: 179 - uid: 318 components: - type: Transform @@ -741,6 +887,23 @@ entities: rot: 3.141592653589793 rad pos: -0.5,-13.5 parent: 179 +- proto: AmmoniaCanister + entities: + - uid: 250 + components: + - type: Transform + pos: 9.5,-1.5 + parent: 179 + - uid: 251 + components: + - type: Transform + pos: 10.5,-1.5 + parent: 179 + - uid: 1317 + components: + - type: Transform + pos: 24.5,-19.5 + parent: 179 - proto: AnomalyLocator entities: - uid: 1086 @@ -795,6 +958,362 @@ entities: - type: Transform pos: 0.5,-16.5 parent: 179 + - uid: 1184 + components: + - type: Transform + pos: 22.5,-16.5 + parent: 179 + - uid: 1187 + components: + - type: Transform + pos: 22.5,-14.5 + parent: 179 + - uid: 1200 + components: + - type: Transform + pos: 22.5,-10.5 + parent: 179 + - uid: 1201 + components: + - type: Transform + pos: 22.5,-12.5 + parent: 179 + - uid: 1207 + components: + - type: Transform + pos: 22.5,-18.5 + parent: 179 + - uid: 1220 + components: + - type: Transform + pos: 22.5,-8.5 + parent: 179 + - uid: 1235 + components: + - type: Transform + pos: 22.5,-20.5 + parent: 179 + - uid: 1238 + components: + - type: Transform + pos: 22.5,-22.5 + parent: 179 + - uid: 1260 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-24.5 + parent: 179 + - uid: 1335 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,-25.5 + parent: 179 + - uid: 1336 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,-25.5 + parent: 179 + - uid: 1489 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-12.5 + parent: 179 + - uid: 1493 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-14.5 + parent: 179 + - uid: 1500 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-16.5 + parent: 179 + - uid: 1507 + components: + - type: Transform + pos: 7.5,-19.5 + parent: 179 + - uid: 1508 + components: + - type: Transform + pos: 8.5,-19.5 + parent: 179 + - uid: 1509 + components: + - type: Transform + pos: 9.5,-19.5 + parent: 179 + - uid: 1510 + components: + - type: Transform + pos: 10.5,-19.5 + parent: 179 + - uid: 1511 + components: + - type: Transform + pos: 11.5,-19.5 + parent: 179 + - uid: 1512 + components: + - type: Transform + pos: 12.5,-19.5 + parent: 179 + - uid: 1513 + components: + - type: Transform + pos: 13.5,-19.5 + parent: 179 + - uid: 1514 + components: + - type: Transform + pos: 14.5,-19.5 + parent: 179 + - uid: 1515 + components: + - type: Transform + pos: 14.5,-20.5 + parent: 179 + - uid: 1516 + components: + - type: Transform + pos: 14.5,-21.5 + parent: 179 + - uid: 1517 + components: + - type: Transform + pos: 14.5,-22.5 + parent: 179 + - uid: 1518 + components: + - type: Transform + pos: 14.5,-23.5 + parent: 179 + - uid: 1519 + components: + - type: Transform + pos: 14.5,-24.5 + parent: 179 +- proto: AtmosFixBlockerMarker + entities: + - uid: 1582 + components: + - type: Transform + pos: 23.5,-13.5 + parent: 179 + - uid: 1583 + components: + - type: Transform + pos: 23.5,-15.5 + parent: 179 + - uid: 1584 + components: + - type: Transform + pos: 23.5,-17.5 + parent: 179 + - uid: 1585 + components: + - type: Transform + pos: 23.5,-19.5 + parent: 179 + - uid: 1586 + components: + - type: Transform + pos: 23.5,-21.5 + parent: 179 + - uid: 1587 + components: + - type: Transform + pos: 23.5,-23.5 + parent: 179 + - uid: 1588 + components: + - type: Transform + pos: 10.5,-14.5 + parent: 179 + - uid: 1589 + components: + - type: Transform + pos: 22.5,-13.5 + parent: 179 + - uid: 1590 + components: + - type: Transform + pos: 24.5,-13.5 + parent: 179 + - uid: 1591 + components: + - type: Transform + pos: 24.5,-15.5 + parent: 179 + - uid: 1592 + components: + - type: Transform + pos: 22.5,-15.5 + parent: 179 + - uid: 1593 + components: + - type: Transform + pos: 22.5,-17.5 + parent: 179 + - uid: 1594 + components: + - type: Transform + pos: 24.5,-17.5 + parent: 179 + - uid: 1595 + components: + - type: Transform + pos: 24.5,-19.5 + parent: 179 + - uid: 1596 + components: + - type: Transform + pos: 22.5,-19.5 + parent: 179 + - uid: 1597 + components: + - type: Transform + pos: 22.5,-21.5 + parent: 179 + - uid: 1598 + components: + - type: Transform + pos: 22.5,-23.5 + parent: 179 + - uid: 1599 + components: + - type: Transform + pos: 24.5,-23.5 + parent: 179 + - uid: 1600 + components: + - type: Transform + pos: 24.5,-21.5 + parent: 179 + - uid: 1607 + components: + - type: Transform + pos: 10.5,-15.5 + parent: 179 + - uid: 1608 + components: + - type: Transform + pos: 10.5,-13.5 + parent: 179 + - uid: 1609 + components: + - type: Transform + pos: 11.5,-13.5 + parent: 179 + - uid: 1610 + components: + - type: Transform + pos: 11.5,-15.5 + parent: 179 +- proto: AtmosFixInstantPlasmaFireMarker + entities: + - uid: 1611 + components: + - type: Transform + pos: 12.5,-15.5 + parent: 179 + - uid: 1612 + components: + - type: Transform + pos: 13.5,-15.5 + parent: 179 + - uid: 1613 + components: + - type: Transform + pos: 14.5,-15.5 + parent: 179 + - uid: 1614 + components: + - type: Transform + pos: 14.5,-14.5 + parent: 179 + - uid: 1615 + components: + - type: Transform + pos: 13.5,-14.5 + parent: 179 + - uid: 1616 + components: + - type: Transform + pos: 12.5,-14.5 + parent: 179 + - uid: 1617 + components: + - type: Transform + pos: 12.5,-13.5 + parent: 179 + - uid: 1618 + components: + - type: Transform + pos: 13.5,-13.5 + parent: 179 + - uid: 1619 + components: + - type: Transform + pos: 14.5,-13.5 + parent: 179 +- proto: AtmosFixNitrogenMarker + entities: + - uid: 1579 + components: + - type: Transform + pos: 23.5,-9.5 + parent: 179 + - uid: 1603 + components: + - type: Transform + pos: 22.5,-9.5 + parent: 179 + - uid: 1604 + components: + - type: Transform + pos: 24.5,-9.5 + parent: 179 +- proto: AtmosFixOxygenMarker + entities: + - uid: 1580 + components: + - type: Transform + pos: 23.5,-7.5 + parent: 179 + - uid: 1605 + components: + - type: Transform + pos: 22.5,-7.5 + parent: 179 + - uid: 1606 + components: + - type: Transform + pos: 24.5,-7.5 + parent: 179 +- proto: AtmosFixPlasmaMarker + entities: + - uid: 1581 + components: + - type: Transform + pos: 23.5,-11.5 + parent: 179 + - uid: 1601 + components: + - type: Transform + pos: 22.5,-11.5 + parent: 179 + - uid: 1602 + components: + - type: Transform + pos: 24.5,-11.5 + parent: 179 - proto: Autolathe entities: - uid: 1 @@ -912,6 +1431,37 @@ entities: - type: Transform pos: -2.5,-16.5 parent: 179 + - uid: 1230 + components: + - type: Transform + pos: 6.5,-20.5 + parent: 179 + - uid: 1232 + components: + - type: Transform + pos: 6.5,-17.5 + parent: 179 + - type: DeviceLinkSink + invokeCounter: 2 + - uid: 1233 + components: + - type: Transform + pos: 6.5,-16.5 + parent: 179 + - type: DeviceLinkSink + invokeCounter: 2 + - uid: 1234 + components: + - type: Transform + pos: 6.5,-15.5 + parent: 179 + - type: DeviceLinkSink + invokeCounter: 2 + - uid: 1385 + components: + - type: Transform + pos: 11.5,-14.5 + parent: 179 - proto: BoozeDispenser entities: - uid: 752 @@ -945,6 +1495,14 @@ entities: - type: Transform pos: 7.1447573,15.900927 parent: 179 +- proto: ButtonFrameCautionSecurity + entities: + - uid: 1488 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-12.5 + parent: 179 - proto: CableApcExtension entities: - uid: 15 @@ -2242,6 +2800,411 @@ entities: - type: Transform pos: 8.5,25.5 parent: 179 + - uid: 1277 + components: + - type: Transform + pos: 4.5,-10.5 + parent: 179 + - uid: 1282 + components: + - type: Transform + pos: 4.5,-11.5 + parent: 179 + - uid: 1289 + components: + - type: Transform + pos: 5.5,-9.5 + parent: 179 + - uid: 1292 + components: + - type: Transform + pos: 4.5,-9.5 + parent: 179 + - uid: 1348 + components: + - type: Transform + pos: 6.5,-9.5 + parent: 179 + - uid: 1349 + components: + - type: Transform + pos: 7.5,-9.5 + parent: 179 + - uid: 1350 + components: + - type: Transform + pos: 9.5,-9.5 + parent: 179 + - uid: 1351 + components: + - type: Transform + pos: 10.5,-9.5 + parent: 179 + - uid: 1352 + components: + - type: Transform + pos: 11.5,-9.5 + parent: 179 + - uid: 1353 + components: + - type: Transform + pos: 12.5,-9.5 + parent: 179 + - uid: 1354 + components: + - type: Transform + pos: 13.5,-9.5 + parent: 179 + - uid: 1355 + components: + - type: Transform + pos: 14.5,-9.5 + parent: 179 + - uid: 1356 + components: + - type: Transform + pos: 15.5,-9.5 + parent: 179 + - uid: 1357 + components: + - type: Transform + pos: 16.5,-9.5 + parent: 179 + - uid: 1358 + components: + - type: Transform + pos: 17.5,-9.5 + parent: 179 + - uid: 1359 + components: + - type: Transform + pos: 18.5,-9.5 + parent: 179 + - uid: 1360 + components: + - type: Transform + pos: 19.5,-9.5 + parent: 179 + - uid: 1361 + components: + - type: Transform + pos: 20.5,-9.5 + parent: 179 + - uid: 1362 + components: + - type: Transform + pos: 21.5,-9.5 + parent: 179 + - uid: 1363 + components: + - type: Transform + pos: 8.5,-9.5 + parent: 179 + - uid: 1364 + components: + - type: Transform + pos: 11.5,-8.5 + parent: 179 + - uid: 1365 + components: + - type: Transform + pos: 11.5,-7.5 + parent: 179 + - uid: 1366 + components: + - type: Transform + pos: 11.5,-5.5 + parent: 179 + - uid: 1367 + components: + - type: Transform + pos: 11.5,-4.5 + parent: 179 + - uid: 1368 + components: + - type: Transform + pos: 11.5,-6.5 + parent: 179 + - uid: 1369 + components: + - type: Transform + pos: 11.5,-3.5 + parent: 179 + - uid: 1370 + components: + - type: Transform + pos: 9.5,-16.5 + parent: 179 + - uid: 1371 + components: + - type: Transform + pos: 9.5,-22.5 + parent: 179 + - uid: 1372 + components: + - type: Transform + pos: 9.5,-21.5 + parent: 179 + - uid: 1373 + components: + - type: Transform + pos: 9.5,-10.5 + parent: 179 + - uid: 1374 + components: + - type: Transform + pos: 9.5,-20.5 + parent: 179 + - uid: 1375 + components: + - type: Transform + pos: 9.5,-19.5 + parent: 179 + - uid: 1376 + components: + - type: Transform + pos: 9.5,-18.5 + parent: 179 + - uid: 1377 + components: + - type: Transform + pos: 9.5,-17.5 + parent: 179 + - uid: 1378 + components: + - type: Transform + pos: 9.5,-15.5 + parent: 179 + - uid: 1379 + components: + - type: Transform + pos: 9.5,-11.5 + parent: 179 + - uid: 1380 + components: + - type: Transform + pos: 9.5,-14.5 + parent: 179 + - uid: 1381 + components: + - type: Transform + pos: 9.5,-13.5 + parent: 179 + - uid: 1382 + components: + - type: Transform + pos: 9.5,-12.5 + parent: 179 + - uid: 1383 + components: + - type: Transform + pos: 10.5,-14.5 + parent: 179 + - uid: 1384 + components: + - type: Transform + pos: 11.5,-14.5 + parent: 179 + - uid: 1389 + components: + - type: Transform + pos: 16.5,-14.5 + parent: 179 + - uid: 1390 + components: + - type: Transform + pos: 17.5,-14.5 + parent: 179 + - uid: 1391 + components: + - type: Transform + pos: 19.5,-14.5 + parent: 179 + - uid: 1392 + components: + - type: Transform + pos: 20.5,-14.5 + parent: 179 + - uid: 1393 + components: + - type: Transform + pos: 21.5,-14.5 + parent: 179 + - uid: 1394 + components: + - type: Transform + pos: 22.5,-14.5 + parent: 179 + - uid: 1395 + components: + - type: Transform + pos: 18.5,-14.5 + parent: 179 + - uid: 1396 + components: + - type: Transform + pos: 22.5,-9.5 + parent: 179 + - uid: 1397 + components: + - type: Transform + pos: 10.5,-19.5 + parent: 179 + - uid: 1398 + components: + - type: Transform + pos: 11.5,-19.5 + parent: 179 + - uid: 1399 + components: + - type: Transform + pos: 12.5,-19.5 + parent: 179 + - uid: 1400 + components: + - type: Transform + pos: 13.5,-19.5 + parent: 179 + - uid: 1401 + components: + - type: Transform + pos: 14.5,-19.5 + parent: 179 + - uid: 1402 + components: + - type: Transform + pos: 15.5,-19.5 + parent: 179 + - uid: 1403 + components: + - type: Transform + pos: 17.5,-19.5 + parent: 179 + - uid: 1404 + components: + - type: Transform + pos: 18.5,-19.5 + parent: 179 + - uid: 1405 + components: + - type: Transform + pos: 19.5,-19.5 + parent: 179 + - uid: 1406 + components: + - type: Transform + pos: 20.5,-19.5 + parent: 179 + - uid: 1407 + components: + - type: Transform + pos: 21.5,-19.5 + parent: 179 + - uid: 1408 + components: + - type: Transform + pos: 22.5,-19.5 + parent: 179 + - uid: 1409 + components: + - type: Transform + pos: 16.5,-19.5 + parent: 179 + - uid: 1410 + components: + - type: Transform + pos: 9.5,-23.5 + parent: 179 + - uid: 1411 + components: + - type: Transform + pos: 9.5,-24.5 + parent: 179 + - uid: 1412 + components: + - type: Transform + pos: 10.5,-24.5 + parent: 179 + - uid: 1413 + components: + - type: Transform + pos: 11.5,-24.5 + parent: 179 + - uid: 1414 + components: + - type: Transform + pos: 12.5,-24.5 + parent: 179 + - uid: 1415 + components: + - type: Transform + pos: 13.5,-24.5 + parent: 179 + - uid: 1416 + components: + - type: Transform + pos: 14.5,-24.5 + parent: 179 + - uid: 1417 + components: + - type: Transform + pos: 15.5,-24.5 + parent: 179 + - uid: 1418 + components: + - type: Transform + pos: 16.5,-24.5 + parent: 179 + - uid: 1419 + components: + - type: Transform + pos: 17.5,-24.5 + parent: 179 + - uid: 1420 + components: + - type: Transform + pos: 18.5,-24.5 + parent: 179 + - uid: 1421 + components: + - type: Transform + pos: 19.5,-24.5 + parent: 179 + - uid: 1422 + components: + - type: Transform + pos: 20.5,-24.5 + parent: 179 + - uid: 1423 + components: + - type: Transform + pos: 21.5,-24.5 + parent: 179 + - uid: 1424 + components: + - type: Transform + pos: 22.5,-24.5 + parent: 179 + - uid: 1502 + components: + - type: Transform + pos: 13.5,-14.5 + parent: 179 + - uid: 1503 + components: + - type: Transform + pos: 12.5,-14.5 + parent: 179 + - uid: 1504 + components: + - type: Transform + pos: 14.5,-14.5 + parent: 179 + - uid: 1554 + components: + - type: Transform + pos: 15.5,-14.5 + parent: 179 - proto: CableApcStack entities: - uid: 70 @@ -2360,6 +3323,23 @@ entities: - type: Transform pos: -3.277628,-2.15838 parent: 179 +- proto: CarbonDioxideCanister + entities: + - uid: 748 + components: + - type: Transform + pos: 13.5,-4.5 + parent: 179 + - uid: 749 + components: + - type: Transform + pos: 12.5,-4.5 + parent: 179 + - uid: 1316 + components: + - type: Transform + pos: 24.5,-21.5 + parent: 179 - proto: Catwalk entities: - uid: 2 @@ -2433,132 +3413,6 @@ entities: - type: Transform pos: -5.5,-13.5 parent: 179 - - uid: 345 - components: - - type: Transform - anchored: False - rot: -1.5707963267949 rad - pos: 9.5,0.5 - parent: 179 - - uid: 346 - components: - - type: Transform - anchored: False - rot: -1.5707963267949 rad - pos: 9.5,1.5 - parent: 179 - - uid: 347 - components: - - type: Transform - anchored: False - rot: -1.5707963267949 rad - pos: 9.5,2.5 - parent: 179 - - uid: 348 - components: - - type: Transform - anchored: False - rot: -1.5707963267949 rad - pos: 9.5,3.5 - parent: 179 - - uid: 349 - components: - - type: Transform - anchored: False - rot: -1.5707963267949 rad - pos: 9.5,4.5 - parent: 179 - - uid: 403 - components: - - type: Transform - anchored: False - rot: -1.5707963267949 rad - pos: 9.5,-0.5 - parent: 179 - - uid: 404 - components: - - type: Transform - anchored: False - rot: -1.5707963267949 rad - pos: 9.5,-1.5 - parent: 179 - - uid: 405 - components: - - type: Transform - anchored: False - rot: -1.5707963267949 rad - pos: 9.5,-2.5 - parent: 179 - - uid: 406 - components: - - type: Transform - anchored: False - rot: -1.5707963267949 rad - pos: 9.5,-3.5 - parent: 179 - - uid: 407 - components: - - type: Transform - anchored: False - rot: -1.5707963267949 rad - pos: 9.5,-4.5 - parent: 179 - - uid: 408 - components: - - type: Transform - anchored: False - rot: -1.5707963267949 rad - pos: 9.5,-5.5 - parent: 179 - - uid: 409 - components: - - type: Transform - anchored: False - rot: -1.5707963267949 rad - pos: 9.5,-6.5 - parent: 179 - - uid: 410 - components: - - type: Transform - anchored: False - rot: -1.5707963267949 rad - pos: 9.5,-7.5 - parent: 179 - - uid: 411 - components: - - type: Transform - anchored: False - rot: -1.5707963267949 rad - pos: 9.5,-8.5 - parent: 179 - - uid: 412 - components: - - type: Transform - anchored: False - rot: -1.5707963267949 rad - pos: 9.5,-9.5 - parent: 179 - - uid: 413 - components: - - type: Transform - anchored: False - rot: -1.5707963267949 rad - pos: 9.5,-10.5 - parent: 179 - - uid: 414 - components: - - type: Transform - anchored: False - rot: -1.5707963267949 rad - pos: 9.5,-11.5 - parent: 179 - - uid: 415 - components: - - type: Transform - anchored: False - rot: -1.5707963267949 rad - pos: 8.5,-8.5 - parent: 179 - uid: 438 components: - type: Transform @@ -2704,52 +3558,16 @@ entities: parent: 179 - proto: ClosetEmergencyFilledRandom entities: - - uid: 319 + - uid: 349 components: - type: Transform pos: 1.5,-10.5 parent: 179 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.14957 - moles: - - 2.9923203 - - 11.2568245 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - uid: 322 + - uid: 403 components: - type: Transform pos: 0.5,-10.5 parent: 179 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.14957 - moles: - - 2.9923203 - - 11.2568245 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - proto: ClosetToolFilled entities: - uid: 524 @@ -2844,6 +3662,13 @@ entities: - 0 - 0 - 0 +- proto: ClothingBeltChiefEngineerFilled + entities: + - uid: 1573 + components: + - type: Transform + pos: 1.3037996,-5.2961445 + parent: 179 - proto: ClothingBeltUtilityFilled entities: - uid: 427 @@ -2960,7 +3785,7 @@ entities: parent: 179 - proto: ComputerCargoShuttle entities: - - uid: 995 + - uid: 404 components: - type: Transform pos: 0.5,-11.5 @@ -3097,31 +3922,6 @@ entities: - 0 - 0 - 0 -- proto: CrateGeneric - entities: - - uid: 266 - components: - - type: Transform - pos: 5.5,-6.5 - parent: 179 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.14957 - moles: - - 2.9923203 - - 11.2568245 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - proto: CrateHydroponicsSeeds entities: - uid: 754 @@ -3172,6 +3972,18 @@ entities: - 0 - 0 - 0 +- proto: CrateMaterialSteel + entities: + - uid: 1258 + components: + - type: Transform + pos: 7.5,-11.5 + parent: 179 + - uid: 1293 + components: + - type: Transform + pos: 7.5,-10.5 + parent: 179 - proto: CrateMedical entities: - uid: 131 @@ -3246,12 +4058,19 @@ entities: - type: Transform pos: 0.5,-3.5 parent: 179 +- proto: DebugGenerator + entities: + - uid: 490 + components: + - type: Transform + pos: -6.5,-11.5 + parent: 179 - proto: DefaultStationBeaconAISatellite entities: - uid: 1198 components: - type: Transform - pos: 11.5,-14.5 + pos: 8.5,-10.5 parent: 179 - proto: DefaultStationBeaconBotany entities: @@ -3408,6 +4227,13 @@ entities: - type: Transform pos: 13.5,12.5 parent: 179 +- proto: FireAxeCabinetFilled + entities: + - uid: 1574 + components: + - type: Transform + pos: 8.5,-4.5 + parent: 179 - proto: FireExtinguisher entities: - uid: 323 @@ -3514,114 +4340,757 @@ entities: - type: Transform pos: 3.5215416,6.799056 parent: 179 -- proto: GasAnalyzer +- proto: FrezonCanister entities: - - uid: 876 + - uid: 1308 components: - type: Transform - pos: 4.4732866,-0.48882532 + pos: 9.5,-5.5 parent: 179 -- proto: GasFilter + - uid: 1309 + components: + - type: Transform + pos: 10.5,-5.5 + parent: 179 + - uid: 1318 + components: + - type: Transform + pos: 24.5,-15.5 + parent: 179 +- proto: GasAnalyzer + entities: + - uid: 1571 + components: + - type: Transform + pos: 7.3675013,-6.725376 + parent: 179 +- proto: GasMinerAmmonia + entities: + - uid: 1204 + components: + - type: Transform + pos: 23.5,-19.5 + parent: 179 +- proto: GasMinerCarbonDioxide + entities: + - uid: 1205 + components: + - type: Transform + pos: 23.5,-21.5 + parent: 179 +- proto: GasMinerFrezon + entities: + - uid: 1223 + components: + - type: Transform + pos: 23.5,-15.5 + parent: 179 +- proto: GasMinerNitrogenStation + entities: + - uid: 1222 + components: + - type: Transform + pos: 23.5,-9.5 + parent: 179 +- proto: GasMinerNitrousOxide + entities: + - uid: 1225 + components: + - type: Transform + pos: 23.5,-17.5 + parent: 179 +- proto: GasMinerOxygenStation + entities: + - uid: 1199 + components: + - type: Transform + pos: 23.5,-7.5 + parent: 179 +- proto: GasMinerPlasma + entities: + - uid: 1221 + components: + - type: Transform + pos: 23.5,-11.5 + parent: 179 +- proto: GasMinerTritium + entities: + - uid: 1224 + components: + - type: Transform + pos: 23.5,-13.5 + parent: 179 +- proto: GasMinerWaterVapor + entities: + - uid: 1202 + components: + - type: Transform + pos: 23.5,-23.5 + parent: 179 +- proto: GasMixer + entities: + - uid: 1480 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-9.5 + parent: 179 + - type: GasMixer + inletTwoConcentration: 0.20999998 + inletOneConcentration: 0.79 +- proto: GasOutletInjector + entities: + - uid: 406 + components: + - type: Transform + pos: 24.5,-21.5 + parent: 179 + - uid: 409 + components: + - type: Transform + pos: 24.5,-17.5 + parent: 179 + - uid: 410 + components: + - type: Transform + pos: 24.5,-23.5 + parent: 179 + - uid: 411 + components: + - type: Transform + pos: 24.5,-15.5 + parent: 179 + - uid: 413 + components: + - type: Transform + pos: 24.5,-11.5 + parent: 179 + - uid: 414 + components: + - type: Transform + pos: 24.5,-19.5 + parent: 179 + - uid: 429 + components: + - type: Transform + pos: 24.5,-7.5 + parent: 179 + - uid: 444 + components: + - type: Transform + pos: 24.5,-9.5 + parent: 179 + - uid: 447 + components: + - type: Transform + pos: 24.5,-13.5 + parent: 179 +- proto: GasPassiveVent + entities: + - uid: 1319 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-23.5 + parent: 179 + - uid: 1320 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-21.5 + parent: 179 + - uid: 1321 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-19.5 + parent: 179 + - uid: 1322 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-15.5 + parent: 179 + - uid: 1323 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-17.5 + parent: 179 + - uid: 1324 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-13.5 + parent: 179 + - uid: 1325 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-11.5 + parent: 179 + - uid: 1326 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-9.5 + parent: 179 + - uid: 1327 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 22.5,-7.5 + parent: 179 + - uid: 1544 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-26.5 + parent: 179 +- proto: GasPipeBend + entities: + - uid: 407 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-16.5 + parent: 179 + - uid: 408 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-14.5 + parent: 179 + - uid: 412 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-8.5 + parent: 179 + - uid: 415 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-10.5 + parent: 179 + - uid: 418 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-12.5 + parent: 179 + - uid: 1439 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-18.5 + parent: 179 + - uid: 1440 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-20.5 + parent: 179 + - uid: 1441 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-22.5 + parent: 179 + - uid: 1442 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-24.5 + parent: 179 + - uid: 1482 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,-7.5 + parent: 179 + - uid: 1542 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-9.5 + parent: 179 +- proto: GasPipeStraight + entities: + - uid: 1443 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-24.5 + parent: 179 + - uid: 1444 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-24.5 + parent: 179 + - uid: 1445 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-22.5 + parent: 179 + - uid: 1446 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-22.5 + parent: 179 + - uid: 1447 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-20.5 + parent: 179 + - uid: 1448 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-20.5 + parent: 179 + - uid: 1449 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-18.5 + parent: 179 + - uid: 1450 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-16.5 + parent: 179 + - uid: 1451 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-14.5 + parent: 179 + - uid: 1452 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-12.5 + parent: 179 + - uid: 1453 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-10.5 + parent: 179 + - uid: 1454 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,-8.5 + parent: 179 + - uid: 1455 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-8.5 + parent: 179 + - uid: 1456 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-10.5 + parent: 179 + - uid: 1457 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-12.5 + parent: 179 + - uid: 1458 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-14.5 + parent: 179 + - uid: 1460 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-16.5 + parent: 179 + - uid: 1461 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,-18.5 + parent: 179 + - uid: 1483 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-7.5 + parent: 179 + - uid: 1484 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-8.5 + parent: 179 + - uid: 1485 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,-8.5 + parent: 179 + - uid: 1486 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 18.5,-9.5 + parent: 179 + - uid: 1487 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.5,-9.5 + parent: 179 + - uid: 1522 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-21.5 + parent: 179 + - uid: 1523 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-20.5 + parent: 179 + - uid: 1524 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-19.5 + parent: 179 + - uid: 1525 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-18.5 + parent: 179 + - uid: 1526 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-17.5 + parent: 179 + - uid: 1527 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-16.5 + parent: 179 + - uid: 1528 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-15.5 + parent: 179 + - uid: 1529 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-14.5 + parent: 179 + - uid: 1530 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-12.5 + parent: 179 + - uid: 1531 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-13.5 + parent: 179 + - uid: 1532 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-10.5 + parent: 179 + - uid: 1533 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-11.5 + parent: 179 + - uid: 1534 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,-9.5 + parent: 179 + - uid: 1535 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,-9.5 + parent: 179 + - uid: 1536 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,-9.5 + parent: 179 + - uid: 1537 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,-9.5 + parent: 179 + - uid: 1538 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,-9.5 + parent: 179 + - uid: 1539 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-9.5 + parent: 179 + - uid: 1540 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-9.5 + parent: 179 + - uid: 1541 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-9.5 + parent: 179 + - uid: 1546 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-25.5 + parent: 179 + - uid: 1547 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 12.5,-22.5 + parent: 179 + - uid: 1548 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,-22.5 + parent: 179 + - uid: 1549 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,-22.5 + parent: 179 + - uid: 1550 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,-22.5 + parent: 179 + - uid: 1551 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 16.5,-22.5 + parent: 179 + - uid: 1552 + components: + - type: Transform + pos: 17.5,-23.5 + parent: 179 +- proto: GasPipeTJunction + entities: + - uid: 1479 + components: + - type: Transform + pos: 20.5,-9.5 + parent: 179 + - uid: 1481 + components: + - type: Transform + pos: 19.5,-7.5 + parent: 179 + - uid: 1553 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,-22.5 + parent: 179 +- proto: GasPressurePump + entities: + - uid: 1459 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-7.5 + parent: 179 + - uid: 1462 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-9.5 + parent: 179 + - uid: 1463 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-11.5 + parent: 179 + - uid: 1464 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-13.5 + parent: 179 + - uid: 1465 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-15.5 + parent: 179 + - uid: 1466 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-17.5 + parent: 179 + - uid: 1467 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-19.5 + parent: 179 + - uid: 1468 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-21.5 + parent: 179 + - uid: 1469 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-23.5 + parent: 179 + - uid: 1470 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-24.5 + parent: 179 + - uid: 1471 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-22.5 + parent: 179 + - uid: 1472 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-20.5 + parent: 179 + - uid: 1473 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-18.5 + parent: 179 + - uid: 1474 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-16.5 + parent: 179 + - uid: 1475 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-14.5 + parent: 179 + - uid: 1476 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-12.5 + parent: 179 + - uid: 1477 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-10.5 + parent: 179 + - uid: 1478 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-8.5 + parent: 179 +- proto: GasThermoMachineFreezer entities: - uid: 480 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,-3.5 + pos: 9.5,-7.5 parent: 179 -- proto: GasMixer - entities: - - uid: 747 + - uid: 616 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,-2.5 + pos: 10.5,-7.5 parent: 179 -- proto: GasOutletInjector +- proto: GasThermoMachineHeater entities: - - uid: 429 + - uid: 483 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,-1.5 + pos: 13.5,-7.5 parent: 179 -- proto: GasPipeBend - entities: - - uid: 727 + - uid: 1568 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,-0.5 - parent: 179 -- proto: GasPipeFourway - entities: - - uid: 728 - components: - - type: Transform - pos: 5.5,-1.5 - parent: 179 -- proto: GasPipeStraight - entities: - - uid: 749 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,-3.5 - parent: 179 -- proto: GasPipeTJunction - entities: - - uid: 748 - components: - - type: Transform - pos: 5.5,-2.5 - parent: 179 -- proto: GasPort - entities: - - uid: 457 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,-0.5 - parent: 179 -- proto: GasPressurePump - entities: - - uid: 171 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-3.5 + pos: 12.5,-7.5 parent: 179 - proto: GasValve entities: - - uid: 168 + - uid: 1545 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-2.5 + rot: 3.141592653589793 rad + pos: 17.5,-24.5 parent: 179 - proto: GasVentPump entities: - - uid: 729 + - uid: 1521 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,-3.5 + rot: 3.141592653589793 rad + pos: 9.5,-22.5 parent: 179 - proto: GasVentScrubber entities: - - uid: 452 + - uid: 1543 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,-2.5 - parent: 179 -- proto: GasVolumePump - entities: - - uid: 160 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-1.5 + rot: 1.5707963267948966 rad + pos: 11.5,-22.5 parent: 179 - proto: GeigerCounter entities: @@ -3717,13 +5186,6 @@ entities: - type: Transform pos: -3.5805476,0.74100244 parent: 179 -- proto: HandheldCrewMonitor - entities: - - uid: 1184 - components: - - type: Transform - pos: 1.6819578,7.502847 - parent: 179 - proto: HandheldHealthAnalyzer entities: - uid: 513 @@ -3738,6 +5200,10 @@ entities: - type: Transform pos: -8.5,7.5 parent: 179 + - type: Fixtures + fixtures: {} + - type: Airtight + noAirWhenFullyAirBlocked: True missingComponents: - TimedDespawn - uid: 901 @@ -3745,6 +5211,10 @@ entities: - type: Transform pos: -10.5,7.5 parent: 179 + - type: Fixtures + fixtures: {} + - type: Airtight + noAirWhenFullyAirBlocked: True missingComponents: - TimedDespawn - uid: 902 @@ -3752,8 +5222,19 @@ entities: - type: Transform pos: -9.5,7.5 parent: 179 + - type: Fixtures + fixtures: {} + - type: Airtight + noAirWhenFullyAirBlocked: True missingComponents: - TimedDespawn +- proto: HolofanProjectorEmpty + entities: + - uid: 1569 + components: + - type: Transform + pos: 7.2439203,-7.545966 + parent: 179 - proto: HolosignWetFloor entities: - uid: 848 @@ -3786,6 +5267,13 @@ entities: - type: Transform pos: 2.5,15.5 parent: 179 +- proto: Igniter + entities: + - uid: 728 + components: + - type: Transform + pos: 13.546334,-14.688479 + parent: 179 - proto: KitchenReagentGrinder entities: - uid: 731 @@ -3822,6 +5310,13 @@ entities: - type: Transform pos: -3.511025,-10.35149 parent: 179 +- proto: LockerAtmosphericsFilledHardsuit + entities: + - uid: 1278 + components: + - type: Transform + pos: 7.5,-12.5 + parent: 179 - proto: LockerBotanistFilled entities: - uid: 869 @@ -3897,81 +5392,27 @@ entities: - 0 - 0 - 0 -- proto: LockerChiefEngineerFilled +- proto: LockerChiefEngineerFilledHardsuit entities: - - uid: 447 + - uid: 1564 components: - type: Transform - pos: 7.5,2.5 + pos: 7.5,-13.5 parent: 179 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.14957 - moles: - - 2.9923203 - - 11.2568245 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - proto: LockerElectricalSuppliesFilled entities: - - uid: 444 + - uid: 405 components: - type: Transform - pos: 7.5,3.5 + pos: 5.5,-6.5 parent: 179 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.14957 - moles: - - 2.9923203 - - 11.2568245 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 -- proto: LockerEngineerFilled +- proto: LockerEngineerFilledHardsuit entities: - - uid: 490 + - uid: 458 components: - type: Transform - pos: 7.5,4.5 + pos: 5.5,-5.5 parent: 179 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.14957 - moles: - - 2.9923203 - - 11.2568245 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - proto: LockerMedical entities: - uid: 128 @@ -4122,29 +5563,11 @@ entities: - 0 - proto: LockerWeldingSuppliesFilled entities: - - uid: 871 + - uid: 457 components: - type: Transform - pos: 7.5,1.5 + pos: 5.5,-7.5 parent: 179 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.14957 - moles: - - 2.9923203 - - 11.2568245 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - proto: MachineAnomalyGenerator entities: - uid: 1071 @@ -4314,10 +5737,37 @@ entities: 'UID: 31739': 801 - proto: NitrogenCanister entities: - - uid: 459 + - uid: 871 components: - type: Transform - pos: 7.5,-1.5 + pos: 9.5,-4.5 + parent: 179 + - uid: 876 + components: + - type: Transform + pos: 10.5,-4.5 + parent: 179 + - uid: 1315 + components: + - type: Transform + pos: 24.5,-9.5 + parent: 179 +- proto: NitrousOxideCanister + entities: + - uid: 617 + components: + - type: Transform + pos: 10.5,-3.5 + parent: 179 + - uid: 1302 + components: + - type: Transform + pos: 9.5,-3.5 + parent: 179 + - uid: 1314 + components: + - type: Transform + pos: 24.5,-17.5 parent: 179 - proto: Ointment entities: @@ -4333,10 +5783,20 @@ entities: parent: 179 - proto: OxygenCanister entities: - - uid: 340 + - uid: 747 components: - type: Transform - pos: 7.5,-3.5 + pos: 13.5,-3.5 + parent: 179 + - uid: 875 + components: + - type: Transform + pos: 12.5,-3.5 + parent: 179 + - uid: 1310 + components: + - type: Transform + pos: 24.5,-7.5 parent: 179 - proto: PaperBin10 entities: @@ -4366,10 +5826,20 @@ entities: parent: 179 - proto: PlasmaCanister entities: - - uid: 461 + - uid: 255 components: - type: Transform - pos: 7.5,-2.5 + pos: 10.5,-2.5 + parent: 179 + - uid: 256 + components: + - type: Transform + pos: 9.5,-2.5 + parent: 179 + - uid: 1311 + components: + - type: Transform + pos: 24.5,-11.5 parent: 179 - proto: PlasticFlapsAirtightClear entities: @@ -4400,12 +5870,12 @@ entities: - type: Transform pos: -5.5,-5.5 parent: 179 -- proto: PortableGeneratorSuperPacman +- proto: PowerCellAntiqueProto entities: - - uid: 1016 + - uid: 1570 components: - type: Transform - pos: -6.5,-11.5 + pos: 7.5772533,-7.233466 parent: 179 - proto: PowerCellHigh entities: @@ -4462,6 +5932,12 @@ entities: parent: 179 - type: ApcPowerReceiver powerLoad: 0 + - uid: 249 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.5,-24.5 + parent: 179 - uid: 536 components: - type: Transform @@ -4470,6 +5946,12 @@ entities: parent: 179 - type: ApcPowerReceiver powerLoad: 0 + - uid: 546 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-5.5 + parent: 179 - uid: 660 components: - type: Transform @@ -4541,22 +6023,6 @@ entities: parent: 179 - type: ApcPowerReceiver powerLoad: 0 - - uid: 678 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 7.5,-1.5 - parent: 179 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 680 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 16.5,-5.5 - parent: 179 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 681 components: - type: Transform @@ -4591,6 +6057,97 @@ entities: rot: 1.5707963267948966 rad pos: 15.5,22.5 parent: 179 + - uid: 1425 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-3.5 + parent: 179 + - uid: 1426 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-3.5 + parent: 179 + - uid: 1427 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-7.5 + parent: 179 + - uid: 1428 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-14.5 + parent: 179 + - uid: 1429 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-18.5 + parent: 179 + - uid: 1430 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-24.5 + parent: 179 + - uid: 1431 + components: + - type: Transform + pos: 14.5,-7.5 + parent: 179 + - uid: 1432 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-23.5 + parent: 179 + - uid: 1433 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-19.5 + parent: 179 + - uid: 1434 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-15.5 + parent: 179 + - uid: 1435 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-11.5 + parent: 179 + - uid: 1436 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 24.5,-7.5 + parent: 179 + - uid: 1437 + components: + - type: Transform + pos: 19.5,-7.5 + parent: 179 +- proto: PoweredlightExterior + entities: + - uid: 1557 + components: + - type: Transform + pos: 16.5,-26.5 + parent: 179 +- proto: PoweredLightPostSmall + entities: + - uid: 1438 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,-17.5 + parent: 179 - proto: PoweredSmallLight entities: - uid: 163 @@ -4631,14 +6188,6 @@ entities: parent: 179 - type: ApcPowerReceiver powerLoad: 0 - - uid: 483 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-9.5 - parent: 179 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 534 components: - type: Transform @@ -4647,6 +6196,12 @@ entities: parent: 179 - type: ApcPowerReceiver powerLoad: 0 + - uid: 727 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-10.5 + parent: 179 - proto: Protolathe entities: - uid: 12 @@ -4806,6 +6361,13 @@ entities: - type: Transform pos: -14.5,9.5 parent: 179 +- proto: RCDExperimental + entities: + - uid: 1575 + components: + - type: Transform + pos: 1.6787996,-5.6922684 + parent: 179 - proto: ReinforcedWindow entities: - uid: 1084 @@ -5025,6 +6587,30 @@ entities: - Pressed: Toggle 698: - Pressed: Toggle + - uid: 1560 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-12.5 + parent: 179 + - type: DeviceLinkSource + linkedPorts: + 728: + - Pressed: Trigger +- proto: SignAtmos + entities: + - uid: 1301 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-7.5 + parent: 179 + - uid: 1558 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-6.5 + parent: 179 - proto: SignCargoDock entities: - uid: 1046 @@ -5032,6 +6618,54 @@ entities: - type: Transform pos: 4.5,-4.5 parent: 179 +- proto: SignCryogenics + entities: + - uid: 1298 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-15.5 + parent: 179 +- proto: SignDanger + entities: + - uid: 1203 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-19.5 + parent: 179 +- proto: SignFlammable + entities: + - uid: 1297 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-13.5 + parent: 179 + - uid: 1299 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-11.5 + parent: 179 +- proto: SignSpace + entities: + - uid: 1291 + components: + - type: Transform + pos: 6.5,-19.5 + parent: 179 + - uid: 1555 + components: + - type: Transform + pos: 6.5,-14.5 + parent: 179 + - uid: 1563 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-25.5 + parent: 179 - proto: SmallLight entities: - uid: 1048 @@ -5060,6 +6694,20 @@ entities: - type: Transform pos: 8.5,12.5 parent: 179 +- proto: SpawnMobCorgiMouse + entities: + - uid: 1050 + components: + - type: Transform + pos: 3.5,8.5 + parent: 179 +- proto: SpawnMobCrabAtmos + entities: + - uid: 729 + components: + - type: Transform + pos: 15.5,-10.5 + parent: 179 - proto: SpawnMobHuman entities: - uid: 138 @@ -5077,13 +6725,6 @@ entities: - type: Transform pos: 3.5,7.5 parent: 179 -- proto: SpawnMobCorgiMouse - entities: - - uid: 1050 - components: - - type: Transform - pos: 3.5,8.5 - parent: 179 - proto: SpawnPointCaptain entities: - uid: 954 @@ -5119,6 +6760,13 @@ entities: - type: Transform pos: 6.985283,16.424004 parent: 179 +- proto: SprayPainter + entities: + - uid: 1572 + components: + - type: Transform + pos: 7.5948057,-5.356733 + parent: 179 - proto: Stimpack entities: - uid: 462 @@ -5139,6 +6787,28 @@ entities: rot: 3.141592653589793 rad pos: -2.5,-6.5 parent: 179 +- proto: StorageCanister + entities: + - uid: 1285 + components: + - type: Transform + pos: 10.5,-6.5 + parent: 179 + - uid: 1286 + components: + - type: Transform + pos: 9.5,-6.5 + parent: 179 + - uid: 1287 + components: + - type: Transform + pos: 12.5,-6.5 + parent: 179 + - uid: 1288 + components: + - type: Transform + pos: 13.5,-6.5 + parent: 179 - proto: Stunbaton entities: - uid: 434 @@ -5209,6 +6879,11 @@ entities: - type: Transform pos: 8.5,21.5 parent: 179 + - uid: 76 + components: + - type: Transform + pos: 7.5,-7.5 + parent: 179 - uid: 92 components: - type: Transform @@ -5398,6 +7073,16 @@ entities: - type: Transform pos: 3.5,5.5 parent: 179 + - uid: 452 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 179 + - uid: 461 + components: + - type: Transform + pos: 7.5,-6.5 + parent: 179 - uid: 465 components: - type: Transform @@ -5573,6 +7258,11 @@ entities: - type: Transform pos: 0.5,-3.5 parent: 179 + - uid: 1561 + components: + - type: Transform + pos: 7.5,-5.5 + parent: 179 - proto: TableGlass entities: - uid: 964 @@ -5600,6 +7290,13 @@ entities: - type: Transform pos: 12.5,12.5 parent: 179 +- proto: TargetClown + entities: + - uid: 459 + components: + - type: Transform + pos: 7.5,-0.5 + parent: 179 - proto: TargetHuman entities: - uid: 159 @@ -5607,6 +7304,43 @@ entities: - type: Transform pos: -6.5,-1.5 parent: 179 + - uid: 248 + components: + - type: Transform + pos: 7.5,1.5 + parent: 179 +- proto: TargetSyndicate + entities: + - uid: 613 + components: + - type: Transform + pos: 7.5,-2.5 + parent: 179 +- proto: TegCenter + entities: + - uid: 1576 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 13.5,-18.5 + parent: 179 +- proto: TegCirculator + entities: + - uid: 1577 + components: + - type: Transform + pos: 14.5,-18.5 + parent: 179 + - type: PointLight + color: '#FF3300FF' + - uid: 1578 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-18.5 + parent: 179 + - type: PointLight + color: '#FF3300FF' - proto: TelecomServerFilled entities: - uid: 963 @@ -5659,6 +7393,23 @@ entities: - type: Transform pos: 1.354346,4.548879 parent: 179 +- proto: TritiumCanister + entities: + - uid: 254 + components: + - type: Transform + pos: 13.5,-2.5 + parent: 179 + - uid: 619 + components: + - type: Transform + pos: 12.5,-2.5 + parent: 179 + - uid: 1312 + components: + - type: Transform + pos: 24.5,-13.5 + parent: 179 - proto: TwoWayLever entities: - uid: 699 @@ -5722,6 +7473,53 @@ entities: - Left: Forward - Right: Reverse - Middle: Off + - uid: 1290 + components: + - type: Transform + pos: 7.5,-14.5 + parent: 179 + - type: TwoWayLever + nextSignalLeft: True + - type: DeviceLinkSource + linkedPorts: + 1234: + - Left: Open + - Right: Open + - Middle: Close + 1233: + - Left: Open + - Right: Open + - Middle: Close + 1232: + - Left: Open + - Right: Open + - Middle: Close + 728: + - Left: Trigger + - Right: Trigger + - Middle: Trigger + - uid: 1499 + components: + - type: Transform + pos: 11.5,-12.5 + parent: 179 + - type: DeviceLinkSource + linkedPorts: + 1385: + - Left: Open + - Right: Open + - Middle: Close + - uid: 1520 + components: + - type: Transform + pos: 7.5,-18.5 + parent: 179 + - type: DeviceLinkSource + linkedPorts: + 1230: + - Left: Open + - Right: Open + - Middle: Close - proto: UnfinishedMachineFrame entities: - uid: 522 @@ -5755,6 +7553,17 @@ entities: - type: Transform pos: -11.5,-1.5 parent: 179 + - uid: 1567 + components: + - type: Transform + pos: 5.5,-11.5 + parent: 179 + - type: ActionGrant + actions: + - ActionVendingThrow + - ActionVendingThrow + - ActionVendingThrow + - ActionVendingThrow - proto: VendingMachineMedical entities: - uid: 156 @@ -5791,12 +7600,26 @@ entities: - type: Transform pos: -13.5,4.5 parent: 179 -- proto: VendingMachineTankDispenserEVA +- proto: VendingMachineTankDispenserEngineering entities: - - uid: 875 + - uid: 615 components: - type: Transform - pos: 7.5,0.5 + pos: 17.5,-7.5 + parent: 179 +- proto: VendingMachineTankDispenserEVA + entities: + - uid: 614 + components: + - type: Transform + pos: 14.5,-7.5 + parent: 179 +- proto: VendingMachineVendomat + entities: + - uid: 1565 + components: + - type: Transform + pos: 5.5,-12.5 parent: 179 - proto: VendingMachineYouTool entities: @@ -5805,6 +7628,17 @@ entities: - type: Transform pos: -11.5,-0.5 parent: 179 + - uid: 1566 + components: + - type: Transform + pos: 5.5,-10.5 + parent: 179 + - type: ActionGrant + actions: + - ActionVendingThrow + - ActionVendingThrow + - ActionVendingThrow + - ActionVendingThrow - proto: WallSolid entities: - uid: 3 @@ -6072,16 +7906,6 @@ entities: - type: Transform pos: 9.5,22.5 parent: 179 - - uid: 76 - components: - - type: Transform - pos: 8.5,-1.5 - parent: 179 - - uid: 77 - components: - - type: Transform - pos: 8.5,-2.5 - parent: 179 - uid: 78 components: - type: Transform @@ -6137,11 +7961,6 @@ entities: - type: Transform pos: 7.5,27.5 parent: 179 - - uid: 97 - components: - - type: Transform - pos: 8.5,-3.5 - parent: 179 - uid: 98 components: - type: Transform @@ -6252,6 +8071,12 @@ entities: - type: Transform pos: 4.5,24.5 parent: 179 + - uid: 160 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,-0.5 + parent: 179 - uid: 164 components: - type: Transform @@ -6263,11 +8088,23 @@ entities: - type: Transform pos: 8.5,2.5 parent: 179 + - uid: 168 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-0.5 + parent: 179 - uid: 169 components: - type: Transform pos: 8.5,0.5 parent: 179 + - uid: 171 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-0.5 + parent: 179 - uid: 173 components: - type: Transform @@ -6503,31 +8340,6 @@ entities: - type: Transform pos: -7.5,-5.5 parent: 179 - - uid: 248 - components: - - type: Transform - pos: 5.5,-7.5 - parent: 179 - - uid: 249 - components: - - type: Transform - pos: 5.5,-9.5 - parent: 179 - - uid: 250 - components: - - type: Transform - pos: 6.5,-9.5 - parent: 179 - - uid: 251 - components: - - type: Transform - pos: 6.5,-7.5 - parent: 179 - - uid: 254 - components: - - type: Transform - pos: 7.5,-9.5 - parent: 179 - uid: 260 components: - type: Transform @@ -6538,6 +8350,11 @@ entities: - type: Transform pos: 6.5,-5.5 parent: 179 + - uid: 266 + components: + - type: Transform + pos: 8.5,-3.5 + parent: 179 - uid: 271 components: - type: Transform @@ -6678,6 +8495,12 @@ entities: - type: Transform pos: 24.5,14.5 parent: 179 + - uid: 322 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-11.5 + parent: 179 - uid: 329 components: - type: Transform @@ -6718,6 +8541,12 @@ entities: - type: Transform pos: 26.5,12.5 parent: 179 + - uid: 346 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-7.5 + parent: 179 - uid: 352 components: - type: Transform @@ -6818,11 +8647,6 @@ entities: - type: Transform pos: 22.5,11.5 parent: 179 - - uid: 418 - components: - - type: Transform - pos: 7.5,-7.5 - parent: 179 - uid: 439 components: - type: Transform @@ -7019,11 +8843,6 @@ entities: - type: Transform pos: 7.5,-4.5 parent: 179 - - uid: 546 - components: - - type: Transform - pos: 8.5,-4.5 - parent: 179 - uid: 547 components: - type: Transform @@ -7172,47 +8991,18 @@ entities: - uid: 612 components: - type: Transform - pos: 13.5,-1.5 - parent: 179 - - uid: 613 - components: - - type: Transform - pos: 13.5,-6.5 - parent: 179 - - uid: 614 - components: - - type: Transform - pos: 13.5,-5.5 - parent: 179 - - uid: 615 - components: - - type: Transform - pos: 13.5,-4.5 - parent: 179 - - uid: 616 - components: - - type: Transform - pos: 13.5,-3.5 - parent: 179 - - uid: 617 - components: - - type: Transform - pos: 13.5,-2.5 + pos: 8.5,-2.5 parent: 179 - uid: 618 components: - type: Transform pos: 14.5,-6.5 parent: 179 - - uid: 619 - components: - - type: Transform - pos: 15.5,-6.5 - parent: 179 - uid: 620 components: - type: Transform - pos: 16.5,-6.5 + rot: -1.5707963267948966 rad + pos: 6.5,-7.5 parent: 179 - uid: 621 components: @@ -7409,6 +9199,11 @@ entities: - type: Transform pos: 27.5,4.5 parent: 179 + - uid: 680 + components: + - type: Transform + pos: 8.5,-1.5 + parent: 179 - uid: 702 components: - type: Transform @@ -7497,6 +9292,12 @@ entities: rot: 3.141592653589793 rad pos: 15.5,18.5 parent: 179 + - uid: 1016 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-9.5 + parent: 179 - uid: 1072 components: - type: Transform @@ -7512,11 +9313,293 @@ entities: - type: Transform pos: 17.5,28.5 parent: 179 + - uid: 1176 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-10.5 + parent: 179 - uid: 1181 components: - type: Transform pos: 5.5,28.5 parent: 179 + - uid: 1206 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-12.5 + parent: 179 + - uid: 1209 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-8.5 + parent: 179 + - uid: 1210 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-17.5 + parent: 179 + - uid: 1211 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-15.5 + parent: 179 + - uid: 1212 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-19.5 + parent: 179 + - uid: 1213 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-18.5 + parent: 179 + - uid: 1214 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-22.5 + parent: 179 + - uid: 1215 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-20.5 + parent: 179 + - uid: 1216 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-21.5 + parent: 179 + - uid: 1217 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-13.5 + parent: 179 + - uid: 1218 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-14.5 + parent: 179 + - uid: 1219 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-16.5 + parent: 179 + - uid: 1226 + components: + - type: Transform + pos: 6.5,-22.5 + parent: 179 + - uid: 1228 + components: + - type: Transform + pos: 6.5,-21.5 + parent: 179 + - uid: 1229 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-19.5 + parent: 179 + - uid: 1231 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-18.5 + parent: 179 + - uid: 1263 + components: + - type: Transform + pos: 6.5,-23.5 + parent: 179 + - uid: 1272 + components: + - type: Transform + pos: 6.5,-24.5 + parent: 179 + - uid: 1294 + components: + - type: Transform + pos: 25.5,-24.5 + parent: 179 + - uid: 1295 + components: + - type: Transform + pos: 25.5,-23.5 + parent: 179 + - uid: 1303 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-1.5 + parent: 179 + - uid: 1304 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-2.5 + parent: 179 + - uid: 1305 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-3.5 + parent: 179 + - uid: 1306 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-4.5 + parent: 179 + - uid: 1307 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-5.5 + parent: 179 + - uid: 1328 + components: + - type: Transform + pos: 25.5,-25.5 + parent: 179 + - uid: 1329 + components: + - type: Transform + pos: 24.5,-25.5 + parent: 179 + - uid: 1330 + components: + - type: Transform + pos: 23.5,-25.5 + parent: 179 + - uid: 1331 + components: + - type: Transform + pos: 22.5,-25.5 + parent: 179 + - uid: 1332 + components: + - type: Transform + pos: 21.5,-25.5 + parent: 179 + - uid: 1333 + components: + - type: Transform + pos: 20.5,-25.5 + parent: 179 + - uid: 1334 + components: + - type: Transform + pos: 19.5,-25.5 + parent: 179 + - uid: 1337 + components: + - type: Transform + pos: 16.5,-25.5 + parent: 179 + - uid: 1338 + components: + - type: Transform + pos: 15.5,-25.5 + parent: 179 + - uid: 1339 + components: + - type: Transform + pos: 14.5,-25.5 + parent: 179 + - uid: 1340 + components: + - type: Transform + pos: 12.5,-25.5 + parent: 179 + - uid: 1341 + components: + - type: Transform + pos: 11.5,-25.5 + parent: 179 + - uid: 1342 + components: + - type: Transform + pos: 10.5,-25.5 + parent: 179 + - uid: 1343 + components: + - type: Transform + pos: 9.5,-25.5 + parent: 179 + - uid: 1344 + components: + - type: Transform + pos: 8.5,-25.5 + parent: 179 + - uid: 1345 + components: + - type: Transform + pos: 7.5,-25.5 + parent: 179 + - uid: 1346 + components: + - type: Transform + pos: 6.5,-25.5 + parent: 179 + - uid: 1347 + components: + - type: Transform + pos: 13.5,-25.5 + parent: 179 + - uid: 1506 + components: + - type: Transform + pos: 10.5,-12.5 + parent: 179 + - uid: 1559 + components: + - type: Transform + pos: 8.5,-4.5 + parent: 179 +- proto: WarningCO2 + entities: + - uid: 1300 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-21.5 + parent: 179 +- proto: WarningN2 + entities: + - uid: 1208 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-9.5 + parent: 179 +- proto: WarningN2O + entities: + - uid: 1296 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-17.5 + parent: 179 +- proto: WarningO2 + entities: + - uid: 1227 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,-7.5 + parent: 179 - proto: WaterTankFull entities: - uid: 115 @@ -7529,6 +9612,23 @@ entities: - type: Transform pos: -2.5,3.5 parent: 179 +- proto: WaterVaporCanister + entities: + - uid: 97 + components: + - type: Transform + pos: 12.5,-1.5 + parent: 179 + - uid: 319 + components: + - type: Transform + pos: 13.5,-1.5 + parent: 179 + - uid: 1313 + components: + - type: Transform + pos: 24.5,-23.5 + parent: 179 - proto: WeaponCapacitorRecharger entities: - uid: 708 @@ -7630,6 +9730,331 @@ entities: - type: Transform pos: 2.5,-14.5 parent: 179 +- proto: WindowReinforcedDirectional + entities: + - uid: 340 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-7.5 + parent: 179 + - uid: 345 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-8.5 + parent: 179 + - uid: 347 + components: + - type: Transform + pos: 24.5,-22.5 + parent: 179 + - uid: 348 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,-8.5 + parent: 179 + - uid: 1236 + components: + - type: Transform + pos: 23.5,-8.5 + parent: 179 + - uid: 1237 + components: + - type: Transform + pos: 24.5,-8.5 + parent: 179 + - uid: 1239 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,-10.5 + parent: 179 + - uid: 1240 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-10.5 + parent: 179 + - uid: 1241 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-9.5 + parent: 179 + - uid: 1242 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-11.5 + parent: 179 + - uid: 1243 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-13.5 + parent: 179 + - uid: 1244 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-15.5 + parent: 179 + - uid: 1245 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-17.5 + parent: 179 + - uid: 1246 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-19.5 + parent: 179 + - uid: 1247 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,-22.5 + parent: 179 + - uid: 1248 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-21.5 + parent: 179 + - uid: 1249 + components: + - type: Transform + pos: 23.5,-10.5 + parent: 179 + - uid: 1250 + components: + - type: Transform + pos: 24.5,-10.5 + parent: 179 + - uid: 1251 + components: + - type: Transform + pos: 24.5,-12.5 + parent: 179 + - uid: 1252 + components: + - type: Transform + pos: 24.5,-14.5 + parent: 179 + - uid: 1253 + components: + - type: Transform + pos: 24.5,-16.5 + parent: 179 + - uid: 1254 + components: + - type: Transform + pos: 24.5,-18.5 + parent: 179 + - uid: 1255 + components: + - type: Transform + pos: 24.5,-20.5 + parent: 179 + - uid: 1256 + components: + - type: Transform + pos: 23.5,-20.5 + parent: 179 + - uid: 1257 + components: + - type: Transform + pos: 23.5,-18.5 + parent: 179 + - uid: 1259 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,-24.5 + parent: 179 + - uid: 1261 + components: + - type: Transform + pos: 23.5,-16.5 + parent: 179 + - uid: 1262 + components: + - type: Transform + pos: 23.5,-14.5 + parent: 179 + - uid: 1264 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-22.5 + parent: 179 + - uid: 1265 + components: + - type: Transform + pos: 23.5,-12.5 + parent: 179 + - uid: 1266 + components: + - type: Transform + pos: 23.5,-22.5 + parent: 179 + - uid: 1267 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,-12.5 + parent: 179 + - uid: 1268 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-12.5 + parent: 179 + - uid: 1269 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-14.5 + parent: 179 + - uid: 1270 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,-14.5 + parent: 179 + - uid: 1271 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 21.5,-23.5 + parent: 179 + - uid: 1273 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,-16.5 + parent: 179 + - uid: 1274 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-16.5 + parent: 179 + - uid: 1275 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-18.5 + parent: 179 + - uid: 1276 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,-18.5 + parent: 179 + - uid: 1279 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,-20.5 + parent: 179 + - uid: 1280 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-20.5 + parent: 179 + - uid: 1283 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-24.5 + parent: 179 + - uid: 1386 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-15.5 + parent: 179 + - uid: 1387 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,-13.5 + parent: 179 + - uid: 1388 + components: + - type: Transform + pos: 12.5,-12.5 + parent: 179 + - uid: 1490 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-15.5 + parent: 179 + - uid: 1491 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-14.5 + parent: 179 + - uid: 1492 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-16.5 + parent: 179 + - uid: 1494 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-13.5 + parent: 179 + - uid: 1495 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,-16.5 + parent: 179 + - uid: 1496 + components: + - type: Transform + pos: 11.5,-12.5 + parent: 179 + - uid: 1497 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,-16.5 + parent: 179 + - uid: 1498 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-15.5 + parent: 179 + - uid: 1501 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,-16.5 + parent: 179 + - uid: 1505 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-13.5 + parent: 179 + - uid: 1562 + components: + - type: Transform + pos: 14.5,-12.5 + parent: 179 - proto: Wirecutter entities: - uid: 359 diff --git a/Resources/Prototypes/Actions/station_ai.yml b/Resources/Prototypes/Actions/station_ai.yml index 58513d7db1..dc70603810 100644 --- a/Resources/Prototypes/Actions/station_ai.yml +++ b/Resources/Prototypes/Actions/station_ai.yml @@ -5,35 +5,20 @@ description: Sends your eye back to the core. components: - type: InstantAction - priority: -10 + priority: -9 itemIconStyle: BigAction icon: sprite: Interface/Actions/actions_ai.rsi state: ai_core event: !type:JumpToCoreEvent -- type: entity - id: ActionShowJobIcons - name: Show job icons - description: Shows job icons for crew members. - components: - - type: InstantAction - priority: -5 - itemIconStyle: BigAction - icon: - sprite: Interface/Actions/actions_ai.rsi - state: job_view - event: !type:ActionComponentChangeEvent - components: - - type: ShowJobIcons - - type: entity id: ActionSurvCameraLights name: Toggle camera lights description: Enable surveillance camera lights near wherever you're viewing. components: - type: InstantAction - priority: -6 + priority: -5 itemIconStyle: BigAction icon: sprite: Interface/Actions/actions_ai.rsi diff --git a/Resources/Prototypes/Actions/types.yml b/Resources/Prototypes/Actions/types.yml index 5430a3f005..d80e36bde1 100644 --- a/Resources/Prototypes/Actions/types.yml +++ b/Resources/Prototypes/Actions/types.yml @@ -280,6 +280,8 @@ checkCanInteract: false checkConsciousness: false event: !type:WakeActionEvent + startDelay: true + useDelay: 2 - type: entity id: ActionActivateHonkImplant diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml index 48619d0938..52ab1dae96 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml @@ -302,13 +302,19 @@ components: - type: StorageFill contents: + - id: DefibrillatorSyndicate - id: MedkitCombatFilled - - id: Defibrillator + amount: 4 + - id: Tourniquet + amount: 4 - id: CombatMedipen - amount: 3 - - id: ClothingHandsGlovesNitrile - - id: SyringeTranexamicAcid - - id: SyringeHyronalin + amount: 4 + - id: PunctAutoInjector + amount: 4 + - id: PyraAutoInjector + amount: 4 + - id: AirlossAutoInjector + amount: 4 - type: entity parent: ClothingBackpackDuffelSyndicateBundle diff --git a/Resources/Prototypes/Catalog/Fills/Items/belt.yml b/Resources/Prototypes/Catalog/Fills/Items/belt.yml index e0aaf0c835..519de0d169 100644 --- a/Resources/Prototypes/Catalog/Fills/Items/belt.yml +++ b/Resources/Prototypes/Catalog/Fills/Items/belt.yml @@ -46,10 +46,12 @@ table: !type:AllSelector children: - id: Stunbaton - - id: GrenadeFlashBang - - id: TearGasGrenade + - id: GrenadeFlashBang # DeltaV: revert upstream #32291 + - id: TearGasGrenade # DeltaV - id: Handcuffs - id: Handcuffs + #- id: HoloprojectorSecurity # DeltaV + #- id: RadioHandheldSecurity # DeltaV - type: entity id: ClothingBeltSecurityFilled diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chapel.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chapel.yml index 6c1c8d5d72..9b0ca383ae 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chapel.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chapel.yml @@ -20,7 +20,8 @@ BoxCandle: 2 BoxCandleSmall: 2 Urn: 5 - SilverRing: 2 # Delta-V (Isn't the stuff above also deltav??) + Bible: 1 + SilverRing: 2 # Delta-V RingBox: 2 # Delta-V emaggedInventory: ClothingOuterArmorCult: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/dinnerware.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/dinnerware.yml index dda9b4647d..5051caf855 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/dinnerware.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/dinnerware.yml @@ -11,6 +11,7 @@ FoodPlate: 10 FoodPlateSmall: 10 FoodPlateTin: 5 + FoodPlateMuffinTin: 5 FoodKebabSkewer: 5 DrinkGlass: 5 Beaker: 5 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml index 9fe0f028b1..9e7c72a46c 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml @@ -7,6 +7,7 @@ Bloodpack: 5 EpinephrineChemistryBottle: 3 Syringe: 5 + BoxBottle: 3 Portafib: 1 # DeltaV - Add Portafibs, see Prototypes/DeltaV/Entities/Objects/Devices/Medical/portafib.yml ClothingEyesHudMedical: 2 ClothingEyesEyepatchHudMedical: 2 diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index 587bbb6544..0f44be58f0 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -699,9 +699,9 @@ productEntity: ClothingBackpackDuffelSyndicateMedicalBundleFilled discountCategory: rareDiscounts discountDownTo: - Telecrystal: 12 + Telecrystal: 16 cost: - Telecrystal: 20 + Telecrystal: 24 categories: - UplinkChemicals conditions: diff --git a/Resources/Prototypes/Datasets/Names/last.yml b/Resources/Prototypes/Datasets/Names/last.yml index 8cc544afd6..2f952f957a 100644 --- a/Resources/Prototypes/Datasets/Names/last.yml +++ b/Resources/Prototypes/Datasets/Names/last.yml @@ -219,7 +219,6 @@ - Howe - Huey - Hughes - - Hujsak - Hunt - Hunter - Hussain diff --git a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml index 17bd290d72..5b0fc16516 100644 --- a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml +++ b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml @@ -495,7 +495,6 @@ - CartridgeAmmo - DoorRemote - Whistle - - HolosignProjector - BalloonPopper - type: ItemMapper # DeltaV - adjust for DeltaV sprites. mapLayers: diff --git a/Resources/Prototypes/Entities/Effects/chemistry_effects.yml b/Resources/Prototypes/Entities/Effects/chemistry_effects.yml index 59fa1b0d1a..8784ed77ce 100644 --- a/Resources/Prototypes/Entities/Effects/chemistry_effects.yml +++ b/Resources/Prototypes/Entities/Effects/chemistry_effects.yml @@ -222,3 +222,16 @@ state: metal_foam-north - map: [ "enum.EdgeLayer.West" ] state: metal_foam-west + +- type: entity + id: ReactionFlash + categories: [ HideSpawnMenu ] + components: + - type: PointLight + enabled: true + radius: 2 + energy: 8 + - type: LightFade + duration: 0.5 + - type: TimedDespawn + lifetime: 0.5 diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/food_baked_single.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/food_baked_single.yml index 99093b2557..ea943bc85b 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/food_baked_single.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/food_baked_single.yml @@ -46,6 +46,8 @@ - FoodBakedMuffinBerry - FoodBakedMuffinCherry - FoodBakedMuffinBluecherry + - FoodBakedMuffinChocolate + - FoodBakedMuffinBanana - FoodBakedBunHoney - FoodBakedBunHotX - FoodBakedBunMeat diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml index b4cee6b091..2ec028c020 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml @@ -289,7 +289,6 @@ - type: AccessReader access: [["Command"], ["Research"]] - type: ShowJobIcons - - type: ShowMindShieldIcons - type: entity id: BaseBorgChassisSyndicate diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index fc4f9efdd5..48ed10b618 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -133,7 +133,7 @@ icon: { sprite: Interface/Actions/actions_ai.rsi, state: mass_scanner } iconOn: Interface/Actions/actions_ai.rsi/mass_scanner.png keywords: [ "AI", "console", "interface" ] - priority: -7 + priority: -6 event: !type:ToggleIntrinsicUIEvent { key: enum.RadarConsoleUiKey.Key } - type: entity @@ -157,7 +157,7 @@ icon: { sprite: Interface/Actions/actions_ai.rsi, state: crew_monitor } iconOn: Interface/Actions/actions_ai.rsi/crew_monitor.png keywords: [ "AI", "console", "interface" ] - priority: -9 + priority: -8 event: !type:ToggleIntrinsicUIEvent { key: enum.CrewMonitoringUIKey.Key } - type: entity @@ -169,5 +169,5 @@ icon: { sprite: Interface/Actions/actions_ai.rsi, state: station_records } iconOn: Interface/Actions/actions_ai.rsi/station_records.png keywords: [ "AI", "console", "interface" ] - priority: -8 + priority: -7 event: !type:ToggleIntrinsicUIEvent { key: enum.GeneralStationRecordConsoleKey.Key } diff --git a/Resources/Prototypes/Entities/Mobs/Player/observer.yml b/Resources/Prototypes/Entities/Mobs/Player/observer.yml index 9208d4c8a9..cc8ed53c01 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/observer.yml @@ -84,6 +84,7 @@ icon: Interface/Actions/scream.png checkCanInteract: false event: !type:BooActionEvent + startDelay: true useDelay: 120 - type: entity diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 9f7e206c24..be2b5a44f9 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -33,7 +33,6 @@ - type: ActionGrant actions: - ActionJumpToCore - - ActionShowJobIcons - ActionSurvCameraLights - ActionAIViewLaws - type: UserInterface @@ -70,6 +69,9 @@ canShuttle: false title: comms-console-announcement-title-station-ai color: "#2ed2fd" + - type: Speech + speechVerb: Robotic + - type: ShowJobIcons - type: entity id: AiHeldIntellicard diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml index e68ede7a3c..b4be6a8dfd 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml @@ -19,44 +19,84 @@ - type: Item size: Tiny -# Muffins/Buns +# Muffins - type: entity name: muffin - parent: FoodBakedBase + parent: FoodInjectableBase id: FoodBakedMuffin description: A delicious and spongy little cake. components: + - type: Food + trash: + - FoodPlateMuffinTin - type: Sprite + sprite: Objects/Consumable/Food/Baked/misc.rsi state: muffin + - type: SolutionContainerManager + solutions: + food: + maxVol: 10 + reagents: + - ReagentId: Nutriment + Quantity: 6 + - ReagentId: Vitamin + Quantity: 2 + - type: FlavorProfile + flavors: + - sweet + - type: Item + size: Tiny - type: entity name: berry muffin - parent: FoodBakedBase + parent: FoodBakedMuffin id: FoodBakedMuffinBerry description: A delicious and spongy little cake, with berries. components: - type: Sprite state: muffin-berry + - type: SolutionContainerManager + solutions: + food: + maxVol: 12 + reagents: + - ReagentId: Nutriment + Quantity: 6 + - ReagentId: Vitamin + Quantity: 2 + - ReagentId: JuiceBerry + Quantity: 2 - type: Tag tags: - Fruit - type: entity name: cherry muffin - parent: FoodBakedBase + parent: FoodBakedMuffin id: FoodBakedMuffinCherry description: A sweet muffin with cherry bits. components: - type: Sprite state: muffin-cherry + - type: SolutionContainerManager + solutions: + food: + maxVol: 12 + reagents: + - ReagentId: Nutriment + Quantity: 6 + - ReagentId: Vitamin + Quantity: 2 + - ReagentId: JuiceCherry + Quantity: 2 - type: Tag tags: - Fruit - type: entity name: bluecherry muffin - parent: FoodBakedBase + parent: FoodBakedMuffin id: FoodBakedMuffinBluecherry description: Blue cherries inside a delicious muffin. components: @@ -66,6 +106,51 @@ tags: - Fruit +- type: entity + name: chocolate muffin + parent: FoodBakedMuffin + id: FoodBakedMuffinChocolate + description: A delicious and spongy chocolate muffin. + components: + - type: Sprite + state: muffin-chocolate + - type: SolutionContainerManager + solutions: + food: + maxVol: 12 + reagents: + - ReagentId: Nutriment + Quantity: 6 + - ReagentId: Vitamin + Quantity: 2 + - ReagentId: CocoaPowder + Quantity: 2 + +- type: entity + name: banana muffin + parent: FoodBakedMuffin + id: FoodBakedMuffinBanana + description: A delicious and spongy banana muffin. + components: + - type: Sprite + state: muffin-banana + - type: SolutionContainerManager + solutions: + food: + maxVol: 12 + reagents: + - ReagentId: Nutriment + Quantity: 6 + - ReagentId: Vitamin + Quantity: 2 + - ReagentId: JuiceBanana + Quantity: 2 + - type: Tag + tags: + - Fruit + +# Buns + - type: entity name: honey bun #TODO honey parent: FoodBakedBase diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml index 40cb141af7..ffccf07ab6 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml @@ -21,6 +21,10 @@ visible: false - type: MixableSolution solution: food + - type: Drink + solution: food + useSound: + path: /Audio/Items/drink.ogg - type: DamageOnLand damage: types: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml index 63c47df67e..2e2f2979bc 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml @@ -178,3 +178,27 @@ materialComposition: Steel: 60 - type: SpaceGarbage + +# Muffin Tin + +- type: entity + name: muffin tin + parent: BaseItem + id: FoodPlateMuffinTin + description: A cheap foil tin for muffins. + components: + - type: Sprite + sprite: Objects/Consumable/Food/plates.rsi + state: muffin-tin + - type: Item + size: Small + shape: + - 0,0,1,0 + storedOffset: 0,-3 + - type: Tag + tags: + - Trash + - type: PhysicalComposition + materialComposition: + Steel: 30 + - type: SpaceGarbage diff --git a/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml b/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml index 0c8b539c59..0df74d80d6 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml @@ -121,6 +121,7 @@ - type: Tag tags: - HolofanProjector + - SecBeltEquip - type: StaticPrice price: 50 diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index f065fd6faa..75fc55f21c 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -730,6 +730,14 @@ accentHColor: "#447987" - type: Icon state: pda-hos + - type: CartridgeLoader + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - CrimeAssistCartridge # DeltaV + - SecWatchCartridge # DeltaV: SecWatch replaces WantedList + - LogProbeCartridge - type: entity parent: BaseSecurityPDA @@ -778,6 +786,16 @@ borderColor: "#00842e" - type: Icon state: pda-centcom + - type: CartridgeLoader + uiKey: enum.PdaUiKey.Key + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - MedTekCartridge + - SecWatchCartridge # DeltaV: SecWatch replaces WantedList + - LogProbeCartridge + - AstroNavCartridge - type: entity parent: CentcomPDA @@ -799,6 +817,9 @@ - NotekeeperCartridge - NewsReaderCartridge - LogProbeCartridge + - SecWatchCartridge # DeltaV: SecWatch replaces WantedList + - MedTekCartridge + - AstroNavCartridge - StockTradingCartridge # Delta-V - type: entity @@ -893,14 +914,6 @@ uiKey: enum.PdaUiKey.Key preinstalled: - NotekeeperCartridge - cartridgeSlot: - priority: -1 - name: Cartridge - ejectSound: /Audio/Machines/id_swipe.ogg - insertSound: /Audio/Machines/id_insert.ogg - whitelist: - components: - - Cartridge - type: entity parent: BaseSecurityPDA @@ -918,6 +931,16 @@ accentVColor: "#447987" - type: Icon state: pda-ert + - type: CartridgeLoader + uiKey: enum.PdaUiKey.Key + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - MedTekCartridge + - SecWatchCartridge # DeltaV: SecWatch replaces WantedList + - LogProbeCartridge + - AstroNavCartridge - type: entity parent: ERTLeaderPDA @@ -958,14 +981,6 @@ components: - type: Pda id: ERTMedicIDCard - - type: CartridgeLoader - uiKey: enum.PdaUiKey.Key - preinstalled: - - CrewManifestCartridge - - NotekeeperCartridge - - NewsReaderCartridge - - MedTekCartridge - - SecWatchCartridge # DeltaV: SecWatch replaces wantedList - type: entity parent: ERTLeaderPDA @@ -1073,6 +1088,14 @@ borderColor: "#774705" - type: Icon state: pda-detective + - type: CartridgeLoader + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - CrimeAssistCartridge # DeltaV + - SecWatchCartridge # DeltaV: SecWatch replaces WantedList + - LogProbeCartridge - type: entity parent: BaseMedicalPDA @@ -1089,14 +1112,14 @@ accentVColor: "#d7d7d0" - type: Icon state: pda-brigmedic - - type: CartridgeLoader # DeltaV - Crime Assist + SecWatch, increased diskSpace by 2 to fit them - diskSpace: 7 + - type: CartridgeLoader preinstalled: - - CrewManifestCartridge - - NotekeeperCartridge - - NewsReaderCartridge - - CrimeAssistCartridge - - SecWatchCartridge + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - CrimeAssistCartridge # DeltaV + - SecWatchCartridge # DeltaV: SecWatch replaces WantedList + - MedTekCartridge - type: entity parent: ClownPDA @@ -1213,11 +1236,3 @@ preinstalled: - NotekeeperCartridge - MedTekCartridge - cartridgeSlot: - priority: -1 - name: Cartridge - ejectSound: /Audio/Machines/id_swipe.ogg - insertSound: /Audio/Machines/id_insert.ogg - whitelist: - components: - - Cartridge diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index 7367892033..e68b47c3c7 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -35,6 +35,7 @@ damage: types: Blunt: 0 + hidden: true - type: PhysicalComposition materialComposition: Cloth: 100 @@ -600,7 +601,9 @@ animation: WeaponArcBite # Rrrr! - type: Tag tags: - - PlushieCarp # DeltaV - fish labeler craft + - Payload + - ClothMade + - PlushieCarp - type: entity parent: PlushieCarp diff --git a/Resources/Prototypes/Entities/Objects/Specific/Cargo/cargo_pallet.yml b/Resources/Prototypes/Entities/Objects/Specific/Cargo/cargo_pallet.yml index e95e663a79..518e63edea 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Cargo/cargo_pallet.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Cargo/cargo_pallet.yml @@ -20,8 +20,6 @@ density: 15 mask: - MachineMask - - type: CargoPallet - palletType: All - type: StaticPrice price: 100 - type: Sprite diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/defib.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/defib.yml index 69c106efab..fb0f3d52c6 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/defib.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/defib.yml @@ -71,3 +71,69 @@ id: DefibrillatorOneHandedUnpowered parent: BaseDefibrillator suffix: One-Handed, Unpowered + +- type: entity + id: DefibrillatorCompact # This should be a research item at some point + parent: [ BaseDefibrillator, PowerCellSlotMediumItem ] + name: compact defibrillator + description: Now in fun size! + components: + - type: Sprite + sprite: Objects/Specific/Medical/defibsmall.rsi + layers: + - state: icon + - state: screen + map: [ "enum.ToggleVisuals.Layer" ] + visible: false + shader: unshaded + - state: ready + map: ["enum.PowerDeviceVisualLayers.Powered"] + shader: unshaded + - type: Item + size: Normal + - type: ToggleCellDraw + - type: PowerCellDraw + useRate: 100 + - type: Defibrillator + zapHeal: + types: + Asphyxiation: -40 + doAfterDuration: 6 + - type: DoAfter + - type: UseDelay + +- type: entity + id: DefibrillatorSyndicate + parent: DefibrillatorCompact + name: interdyne defibrillator + description: Doubles as a self-defense weapon against war-crime inclined tiders. + components: + - type: Sprite + sprite: Objects/Specific/Medical/defibsyndi.rsi + layers: + - state: icon + - state: screen + map: [ "enum.ToggleVisuals.Layer" ] + visible: false + shader: unshaded + - state: ready + map: ["enum.PowerDeviceVisualLayers.Powered"] + shader: unshaded + - type: MeleeWeapon + damage: + types: + Blunt: 8 + - type: ItemToggleMeleeWeapon + activatedSoundOnHit: + path: /Audio/Items/Defib/defib_zap.ogg + params: + variation: 0.250 + activatedSoundOnHitNoDamage: + path: /Audio/Items/Defib/defib_zap.ogg + params: + variation: 0.250 + volume: -10 + activatedDamage: + types: + Blunt: 8 + Shock: 16 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml index c81af6e128..93eeef2073 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml @@ -271,7 +271,6 @@ transferAmount: 20 onlyAffectsMobs: false injectOnly: true - - type: SolutionContainerManager solutions: pen: @@ -284,6 +283,102 @@ - type: Tag tags: [] +- type: entity + name: puncturase auto-injector + parent: ChemicalMedipen + id: PunctAutoInjector + description: A rapid dose of puncturase and tranexamic acid, intended for combat applications. + components: + - type: Sprite + sprite: Objects/Specific/Medical/medipen.rsi + layers: + - state: punctpen + map: ["enum.SolutionContainerLayers.Fill"] + - type: SolutionContainerVisuals + maxFillLevels: 1 + changeColor: false + emptySpriteName: punctpen_empty + - type: Hypospray + solutionName: pen + transferAmount: 15 + onlyAffectsMobs: false + injectOnly: true + - type: SolutionContainerManager + solutions: + pen: + maxVol: 15 + reagents: + - ReagentId: Puncturase + Quantity: 10 + - ReagentId: TranexamicAcid + Quantity: 5 + - type: Tag + tags: [] + +- type: entity + name: pyrazine auto-injector + parent: ChemicalMedipen + id: PyraAutoInjector + description: A rapid dose of pyrazine and dermaline, intended for combat applications. + components: + - type: Sprite + sprite: Objects/Specific/Medical/medipen.rsi + layers: + - state: pyrapen + map: ["enum.SolutionContainerLayers.Fill"] + - type: SolutionContainerVisuals + maxFillLevels: 1 + changeColor: false + emptySpriteName: pyrapen_empty + - type: Hypospray + solutionName: pen + transferAmount: 20 + onlyAffectsMobs: false + injectOnly: true + - type: SolutionContainerManager + solutions: + pen: + maxVol: 20 + reagents: + - ReagentId: Pyrazine + Quantity: 10 + - ReagentId: Dermaline + Quantity: 10 + - type: Tag + tags: [] + +- type: entity + name: airloss auto-injector + parent: ChemicalMedipen + id: AirlossAutoInjector + description: A rapid dose of saline and dexalin plus, intended to get someone up quickly. + components: + - type: Sprite + sprite: Objects/Specific/Medical/medipen.rsi + layers: + - state: dexpen + map: ["enum.SolutionContainerLayers.Fill"] + - type: SolutionContainerVisuals + maxFillLevels: 1 + changeColor: false + emptySpriteName: dexpen_empty + - type: Hypospray + solutionName: pen + transferAmount: 40 + onlyAffectsMobs: false + injectOnly: true + - type: SolutionContainerManager + solutions: + pen: + maxVol: 40 + reagents: + - ReagentId: Saline + Quantity: 20 + - ReagentId: DexalinPlus + Quantity: 20 + - type: Tag + tags: [] + - type: entity name: space medipen parent: ChemicalMedipen diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml index 4c31d70090..bc3e1a8443 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml @@ -550,12 +550,8 @@ solutions: food: maxVol: 20 - - type: SolutionSpiker - sourceSolution: food - - type: Extractable - grindableSolutionName: food - - type: StaticPrice - price: 0 + - type: ExplosionResistance + damageCoefficient: 0.025 # survives conventional explosives but not minibombs and nukes - type: Damageable damageContainer: Inorganic - type: Destructible @@ -568,6 +564,12 @@ solution: food - !type:DoActsBehavior acts: [ "Destruction" ] + - type: SolutionSpiker + sourceSolution: food + - type: Extractable + grindableSolutionName: food + - type: StaticPrice + price: 0 - type: Tag tags: - Pill @@ -588,9 +590,6 @@ tags: - PillCanister - type: Storage - whitelist: # DeltaV - Remove the ability to store anything other than pills in pill canisters - tags: - - Pill grid: - 0,0,4,1 quickInsert: true @@ -598,4 +597,7 @@ areaInsertRadius: 1 storageInsertSound: /Audio/Effects/pill_insert.ogg storageRemoveSound: /Audio/Effects/pill_remove.ogg + whitelist: + tags: + - Pill - type: Dumpable diff --git a/Resources/Prototypes/Entities/Objects/Specific/rehydrateable.yml b/Resources/Prototypes/Entities/Objects/Specific/rehydrateable.yml index c114b57615..72404d0ad7 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/rehydrateable.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/rehydrateable.yml @@ -209,8 +209,9 @@ handle: false sound: path: /Audio/Effects/bite.ogg - - type: Tag - tags: [] # DeltaV - remove PlushieCarp tag to prevent wasting + - type: Tag # DeltaV - remove PlushieCarp and ClothMade tag to prevent wasting/eating + tags: + - Payload - type: entity #why is this all redefined down here as a parent of base object instead of just being parented to monkeycube?? TODO: Fix this shit parent: BaseItem diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/watergun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/watergun.yml index c96a1522d2..55adfb7ba6 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/watergun.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/watergun.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity id: WeaponWaterGunBase abstract: true parent: BaseItem @@ -71,7 +71,7 @@ id: WeaponWaterBlaster parent: WeaponWaterGunBase name: water blaster - description: With this bad boy, you'll be the cooleste kid at the summer barbecue. + description: With this bad boy, you'll be the coolest kid at the summer barbecue. components: - type: Gun cameraRecoilScalar: 0 #no recoil diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml index 23506610b3..3b2fd4893b 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml @@ -153,6 +153,7 @@ - type: GunRequiresWield - type: Item size: Ginormous + sprite: Objects/Weapons/Melee/crusher-inhands.rsi - type: DisarmMalus - type: Prying @@ -195,3 +196,6 @@ - type: Tag tags: - Pickaxe + - type: Item + size: Ginormous + sprite: Objects/Weapons/Melee/crusher_glaive-inhands.rsi diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 30967c955f..f6f58803ed 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -163,6 +163,7 @@ - FoodPlateSmallPlastic - FoodBowlBig - FoodPlateTin + - FoodPlateMuffinTin - FoodKebabSkewer - SprayBottle - MopItem diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml index 71e171fc50..5562715fdb 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml @@ -113,6 +113,14 @@ - type: GasMiner spawnGas: Tritium +- type: entity + name: frezon gas miner + parent: GasMinerBase + id: GasMinerFrezon + components: + - type: GasMiner + spawnGas: Frezon + - type: entity name: water vapor gas miner parent: GasMinerBase diff --git a/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml b/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml index 6ed06addcd..d74fe8b0f1 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml @@ -47,19 +47,30 @@ whitelist: tags: - PlushieSharkGrey - sprite: Objects/Fun/sharkplush.rsi + mopbucket_carpplush: + whitelist: + tags: + - PlushieCarp + sprite: Objects/Specific/Janitorial/janitorial.rsi - type: Transform noRot: true - type: ItemSlots slots: - shark_slot: - name: mop-bucket-slot-component-slot-name-shark + item_slot: + name: mop-bucket-slot-component-slot-name-item + ejectVerbText: mop-bucket-slot-component-eject-verb whitelist: tags: - PlushieSharkBlue - PlushieSharkPink - PlushieSharkGrey + - PlushieCarp + components: + - Rehydratable priority: 3 # Higher than drinking priority + - type: ReactiveContainer + solution: bucket + container: item_slot - type: Drink solution: bucket - type: Appearance @@ -70,7 +81,7 @@ containers: storagebase: !type:Container ents: [] - shark_slot: !type:ContainerSlot {} + item_slot: !type:ContainerSlot {} - type: GuideHelp guides: - Janitorial diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/big_boxes.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/big_boxes.yml index 17ccb5a41f..a6d5a49f67 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/big_boxes.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/big_boxes.yml @@ -29,7 +29,7 @@ isCollidableWhenOpen: false openOnMove: false airtight: false - capacity: 4 #4 Entities seems like a nice comfy fit for a cardboard box. + capacity: 5 #5 entity capacity to fit all of your friends (or teammates on your nuclear operation without reinforcements). - type: ContainerContainer containers: entity_storage: !type:Container diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml index cd81687ec1..dc78110678 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml @@ -64,8 +64,8 @@ canEditLabel: true - type: TextScreenVisuals color: FloralWhite - textOffset: 0,8 - timerOffset: 0,8 + textOffset: 0,6 + timerOffset: 0,6 textLength: 5 rows: 1 - type: Sprite diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml index cd60ecd70e..58453cb836 100644 --- a/Resources/Prototypes/GameRules/events.yml +++ b/Resources/Prototypes/GameRules/events.yml @@ -39,6 +39,7 @@ - id: RevenantSpawn - id: SleeperAgents - id: ZombieOutbreak + - id: LoneOpsSpawn - type: entity id: BaseStationEvent @@ -457,7 +458,7 @@ duration: 1 - type: RuleGrids - type: LoadMapRule - preloadedGrid: ShuttleStriker + mapPath: /Maps/Shuttles/ShuttleEvent/striker.yml - type: NukeopsRule roundEndBehavior: Nothing - type: AntagSelection diff --git a/Resources/Prototypes/GameRules/meteorswarms.yml b/Resources/Prototypes/GameRules/meteorswarms.yml index 935843257f..95f9985b6a 100644 --- a/Resources/Prototypes/GameRules/meteorswarms.yml +++ b/Resources/Prototypes/GameRules/meteorswarms.yml @@ -57,7 +57,7 @@ components: - type: GameRule - type: BasicStationEventScheduler - minimumTimeUntilFirstEvent: 300 # 5 min + minimumTimeUntilFirstEvent: 600 # 10 min minMaxEventTiming: min: 750 # 12.5 min max: 930 # 17.5 min @@ -70,7 +70,7 @@ components: - type: GameRule - type: BasicStationEventScheduler - minimumTimeUntilFirstEvent: 300 # 5 min + minimumTimeUntilFirstEvent: 600 # 10 min minMaxEventTiming: min: 750 # 12.5 min max: 930 # 17.5 min diff --git a/Resources/Prototypes/GameRules/unknown_shuttles.yml b/Resources/Prototypes/GameRules/unknown_shuttles.yml index cde980debf..c2962e2507 100644 --- a/Resources/Prototypes/GameRules/unknown_shuttles.yml +++ b/Resources/Prototypes/GameRules/unknown_shuttles.yml @@ -20,7 +20,6 @@ #- id: UnknownShuttleMeatZone #- id: UnknownShuttleMicroshuttle #- id: UnknownShuttleSpacebus - #- id: UnknownShuttleInstigator # DeltaV - remove random ops - type: entityTable id: UnknownShuttlesFreelanceTable @@ -33,10 +32,10 @@ - type: entityTable id: UnknownShuttlesHostileTable table: !type:AllSelector # we need to pass a list of rules, since rules have further restrictions to consider via StationEventComp - children: - - id: LoneOpsSpawn + children: [] # DeltaV: empty list to remove instigator + #- id: UnknownShuttleInstigator # DeltaV: remove random ops -# Shuttle Game Rules +# Shuttle Game Rules - type: entity abstract: true diff --git a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml index fc4e689084..a6b106953d 100644 --- a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml +++ b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml @@ -21,6 +21,13 @@ back: - ClothingHeadHatHairflower +# Headphones +- type: loadout + id: Headphones + storage: + back: + - ClothingNeckHeadphones + # Plushies - type: loadout id: PlushieLizard @@ -165,7 +172,7 @@ !type:OverallPlaytimeRequirement time: 36000 # 10hr storage: - back: + back: - TowelColorWhite - type: loadout @@ -176,9 +183,9 @@ !type:OverallPlaytimeRequirement time: 1800000 # 500hr storage: - back: + back: - TowelColorSilver - + - type: loadout id: TowelColorGold effects: @@ -187,7 +194,7 @@ !type:OverallPlaytimeRequirement time: 3600000 # 1000hr storage: - back: + back: - TowelColorGold - type: loadout @@ -199,7 +206,7 @@ department: Logistics # DeltaV: Logistics replaces Cargo time: 360000 # 100hr storage: - back: + back: - TowelColorLightBrown - type: loadout @@ -211,7 +218,7 @@ department: Civilian time: 360000 # 100hr storage: - back: + back: - TowelColorGreen - type: loadout @@ -223,7 +230,7 @@ department: Command time: 360000 # 100hr storage: - back: + back: - TowelColorDarkBlue - type: loadout @@ -235,9 +242,9 @@ department: Engineering time: 360000 # 100hr storage: - back: + back: - TowelColorOrange - + - type: loadout id: TowelColorLightBlue effects: @@ -247,7 +254,7 @@ department: Medical time: 360000 # 100hr storage: - back: + back: - TowelColorLightBlue - type: loadout @@ -259,7 +266,7 @@ department: Epistemics # DeltaV: Epistemics replaces Science time: 360000 # 100hr storage: - back: + back: - TowelColorPurple - type: loadout @@ -271,7 +278,7 @@ department: Security time: 360000 # 100hr storage: - back: + back: - TowelColorRed - type: loadout @@ -283,7 +290,7 @@ role: JobPassenger time: 360000 # 100hr storage: - back: + back: - TowelColorGray - type: loadout @@ -295,7 +302,7 @@ role: JobChaplain time: 360000 # 100hr storage: - back: + back: - TowelColorBlack - type: loadout @@ -307,7 +314,7 @@ role: JobLibrarian time: 360000 # 100hr storage: - back: + back: - TowelColorDarkGreen - type: loadout @@ -319,7 +326,7 @@ role: JobLawyer time: 360000 # 100hr storage: - back: + back: - TowelColorMaroon - type: loadout @@ -331,7 +338,7 @@ role: JobClown time: 360000 # 100hr storage: - back: + back: - TowelColorYellow - type: loadout @@ -343,5 +350,5 @@ role: JobMime time: 360000 # 100hr storage: - back: + back: - TowelColorMime diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml index afd513e4e8..8ae7c622e3 100644 --- a/Resources/Prototypes/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Loadouts/loadout_groups.yml @@ -7,6 +7,7 @@ loadouts: - FlowerWreath - Hairflower + - Headphones - PlushieLizard - PlushieSpaceLizard - Lighter diff --git a/Resources/Prototypes/Nyanotrasen/tags.yml b/Resources/Prototypes/Nyanotrasen/tags.yml index ff3b901b1c..54f39b7b6e 100644 --- a/Resources/Prototypes/Nyanotrasen/tags.yml +++ b/Resources/Prototypes/Nyanotrasen/tags.yml @@ -12,6 +12,3 @@ - type: Tag id: NormalityCrystal - -- type: Tag - id: PlushieCarp diff --git a/Resources/Prototypes/Procedural/dungeon_configs.yml b/Resources/Prototypes/Procedural/dungeon_configs.yml index b55d5a9e69..d75581bbc2 100644 --- a/Resources/Prototypes/Procedural/dungeon_configs.yml +++ b/Resources/Prototypes/Procedural/dungeon_configs.yml @@ -127,6 +127,8 @@ Junction: BaseAirlock WallMounts: ScienceLabsWalls Window: BaseWindow + tiles: + FallbackTile: FloorDark whitelists: Rooms: tags: diff --git a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml index fa2b657391..173cf9e9db 100644 --- a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml +++ b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml @@ -1779,6 +1779,67 @@ FoodOrange: 1 FoodAmbrosiaVulgaris: 1 +# Muffins + +- type: microwaveMealRecipe + id: RecipeMuffin + name: muffin recipe + result: FoodBakedMuffin + time: 15 + solids: + FoodPlateMuffinTin: 1 + FoodDoughSlice: 1 + reagents: + Sugar: 10 + +- type: microwaveMealRecipe + id: RecipeMuffinChocolate + name: chocolate muffin recipe + result: FoodBakedMuffinChocolate + time: 15 + solids: + FoodPlateMuffinTin: 1 + FoodDoughSlice: 1 + FoodSnackChocolateBar: 1 + reagents: + Sugar: 10 + +- type: microwaveMealRecipe + id: RecipeMuffinBerry + name: berry muffin recipe + result: FoodBakedMuffinBerry + time: 15 + solids: + FoodPlateMuffinTin: 1 + FoodDoughSlice: 1 + FoodBerries: 1 + reagents: + Sugar: 10 + +- type: microwaveMealRecipe + id: RecipeMuffinBanana + name: banana muffin recipe + result: FoodBakedMuffinBanana + time: 15 + solids: + FoodPlateMuffinTin: 1 + FoodDoughSlice: 1 + FoodBanana: 1 + reagents: + Sugar: 10 + +- type: microwaveMealRecipe + id: RecipeMuffinCherry + name: cherry muffin recipe + result: FoodBakedMuffinCherry + time: 15 + solids: + FoodPlateMuffinTin: 1 + FoodDoughSlice: 1 + FoodCherry: 3 + reagents: + Sugar: 10 + # NOT ACTUAL FOOD - type: microwaveMealRecipe diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/gauze.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/gauze.yml index ea21a56448..bb36f36d69 100644 --- a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/gauze.yml +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/gauze.yml @@ -8,6 +8,6 @@ steps: - material: Cloth amount: 2 - doAfter: 10 + doAfter: 3 - node: gauze entity: Gauze1 diff --git a/Resources/Prototypes/Recipes/Lathes/botany.yml b/Resources/Prototypes/Recipes/Lathes/botany.yml index 010beb491a..ae5a444ed8 100644 --- a/Resources/Prototypes/Recipes/Lathes/botany.yml +++ b/Resources/Prototypes/Recipes/Lathes/botany.yml @@ -1,39 +1,39 @@ +# Base prototypes + - type: latheRecipe - id: MiniHoe - result: HydroponicsToolMiniHoe - completetime: 2 + abstract: true + parent: BaseToolRecipe + id: BaseHydroToolRecipe materials: Steel: 200 Plastic: 100 +# Recipes + - type: latheRecipe + parent: BaseHydroToolRecipe + id: HydroponicsToolMiniHoe + result: HydroponicsToolMiniHoe + +- type: latheRecipe + parent: BaseHydroToolRecipe id: HydroponicsToolScythe result: HydroponicsToolScythe - completetime: 2 materials: Steel: 300 Plastic: 200 - type: latheRecipe + parent: BaseHydroToolRecipe id: HydroponicsToolHatchet result: HydroponicsToolHatchet - completetime: 2 - materials: - Steel: 200 - Plastic: 100 - type: latheRecipe - id: Spade + parent: BaseHydroToolRecipe + id: HydroponicsToolSpade result: HydroponicsToolSpade - completetime: 2 - materials: - Steel: 200 - Plastic: 100 - + - type: latheRecipe - id: Clippers + parent: BaseHydroToolRecipe + id: HydroponicsToolClippers result: HydroponicsToolClippers - completetime: 2 - materials: - Steel: 200 - Plastic: 100 diff --git a/Resources/Prototypes/Recipes/Lathes/cooking.yml b/Resources/Prototypes/Recipes/Lathes/cooking.yml index 577d8299da..333279a820 100644 --- a/Resources/Prototypes/Recipes/Lathes/cooking.yml +++ b/Resources/Prototypes/Recipes/Lathes/cooking.yml @@ -1,67 +1,65 @@ - type: latheRecipe + parent: BaseToolRecipe id: ButchCleaver result: ButchCleaver - completetime: 2 materials: Steel: 300 Plastic: 50 - type: latheRecipe + parent: BaseToolRecipe id: KitchenKnife result: KitchenKnife - completetime: 2 materials: Steel: 200 Plastic: 50 - type: latheRecipe - id: DrinkMug - result: DrinkMug + abstract: true + id: BaseGlasswareRecipe completetime: 0.8 materials: Glass: 100 - type: latheRecipe + parent: BaseGlasswareRecipe + id: DrinkMug + result: DrinkMug + +- type: latheRecipe + parent: DrinkMug id: DrinkMugMetal result: DrinkMugMetal - completetime: 0.8 materials: Steel: 100 - type: latheRecipe + parent: DrinkMug id: DrinkGlass result: DrinkGlass - completetime: 0.8 - materials: - Glass: 100 - type: latheRecipe + parent: DrinkMug id: DrinkShotGlass result: DrinkShotGlass completetime: 0.4 - materials: - Glass: 100 - type: latheRecipe + parent: DrinkMug id: DrinkGlassCoupeShaped result: DrinkGlassCoupeShaped - completetime: 0.8 - materials: - Glass: 100 -- type: latheRecipe - id: CustomDrinkJug - result: CustomDrinkJug - completetime: 2 - materials: - Plastic: 200 - - type: latheRecipe + id: CustomDrinkJug + result: CustomDrinkJug + completetime: 2 + materials: + Plastic: 200 + +- type: latheRecipe + parent: BaseGlasswareRecipe id: FoodPlate result: FoodPlate - completetime: 0.8 - materials: - Glass: 100 - type: latheRecipe id: FoodPlateSmall @@ -71,25 +69,23 @@ Glass: 50 - type: latheRecipe + parent: FoodPlate id: FoodPlatePlastic result: FoodPlatePlastic - completetime: 0.8 materials: Plastic: 100 - type: latheRecipe + parent: FoodPlateSmall id: FoodPlateSmallPlastic result: FoodPlateSmallPlastic - completetime: 0.4 materials: Plastic: 50 - type: latheRecipe + parent: FoodPlate id: FoodBowlBig result: FoodBowlBig - completetime: 0.8 - materials: - Glass: 100 - type: latheRecipe id: FoodPlateTin @@ -98,6 +94,13 @@ materials: Steel: 100 +- type: latheRecipe + parent: FoodPlateTin + id: FoodPlateMuffinTin + result: FoodPlateMuffinTin + materials: + Steel: 50 + - type: latheRecipe id: FoodKebabSkewer result: FoodKebabSkewer diff --git a/Resources/Prototypes/Recipes/Lathes/medical.yml b/Resources/Prototypes/Recipes/Lathes/medical.yml index f4c0da5de7..5fce880c7d 100644 --- a/Resources/Prototypes/Recipes/Lathes/medical.yml +++ b/Resources/Prototypes/Recipes/Lathes/medical.yml @@ -1,51 +1,46 @@ +# Base prototypes + - type: latheRecipe + abstract: true + parent: BaseToolRecipe + id: BaseSurgicalRecipe + materials: + Steel: 200 + +# Recipes + +- type: latheRecipe + parent: BaseSurgicalRecipe id: Scalpel result: Scalpel - category: Tools - completetime: 2 - materials: - Steel: 200 - type: latheRecipe + parent: BaseSurgicalRecipe id: Retractor result: Retractor - category: Tools - completetime: 2 - materials: - Steel: 200 - type: latheRecipe + parent: BaseSurgicalRecipe id: Cautery result: Cautery - category: Tools - completetime: 2 - materials: - Steel: 200 - type: latheRecipe + parent: BaseToolRecipe id: Drill result: Drill - category: Tools - completetime: 2 materials: Steel: 200 Plastic: 100 - type: latheRecipe + parent: BaseSurgicalRecipe id: Saw result: Saw - category: Tools - completetime: 2 - materials: - Steel: 200 - type: latheRecipe + parent: BaseSurgicalRecipe id: Hemostat result: Hemostat - category: Tools - completetime: 2 - materials: - Steel: 200 - type: latheRecipe id: BodyBag @@ -75,7 +70,7 @@ result: Gauze1 completetime: 1 materials: - Cloth: 200 + Cloth: 100 # lathe more efficient than handcrafting - type: latheRecipe id: HandheldCrewMonitor @@ -150,66 +145,51 @@ Plastic: 300 - type: latheRecipe + parent: Medkit id: MedkitBurn result: MedkitBurn name: lathe-recipe-MedkitBurn-name - completetime: 2 - materials: - Plastic: 300 - type: latheRecipe + parent: Medkit id: MedkitToxin result: MedkitToxin name: lathe-recipe-MedkitToxin-name - completetime: 2 - materials: - Plastic: 300 - type: latheRecipe + parent: Medkit id: MedkitO2 result: MedkitO2 name: lathe-recipe-MedkitO2-name - completetime: 2 - materials: - Plastic: 300 - type: latheRecipe + parent: Medkit id: MedkitBrute result: MedkitBrute name: lathe-recipe-MedkitBrute-name - completetime: 2 - materials: - Plastic: 300 - type: latheRecipe + parent: Medkit id: MedkitAdvanced result: MedkitAdvanced name: lathe-recipe-MedkitAdvanced-name - completetime: 2 - materials: - Plastic: 300 - type: latheRecipe + parent: Medkit id: MedkitRadiation result: MedkitRadiation name: lathe-recipe-MedkitRadiation-name - completetime: 2 - materials: - Plastic: 300 - type: latheRecipe + parent: Medkit id: MedkitCombat result: MedkitCombat name: lathe-recipe-MedkitCombat-name - completetime: 2 - materials: - Plastic: 300 - type: latheRecipe + parent: BaseToolRecipe id: HandLabeler result: HandLabeler - category: Tools - completetime: 2 materials: Plastic: 100 @@ -229,20 +209,14 @@ Plastic: 300 - type: latheRecipe + parent: RollerBedSpawnFolded id: CheapRollerBedSpawnFolded result: CheapRollerBedSpawnFolded - completetime: 1 - materials: - Steel: 600 - Plastic: 300 - type: latheRecipe + parent: RollerBedSpawnFolded id: EmergencyRollerBedSpawnFolded result: EmergencyRollerBedSpawnFolded - completetime: 1 - materials: - Steel: 600 - Plastic: 300 - type: latheRecipe id: WhiteCane diff --git a/Resources/Prototypes/Recipes/Lathes/tools.yml b/Resources/Prototypes/Recipes/Lathes/tools.yml index 3f5003d909..fc35153317 100644 --- a/Resources/Prototypes/Recipes/Lathes/tools.yml +++ b/Resources/Prototypes/Recipes/Lathes/tools.yml @@ -1,40 +1,51 @@ +# Base prototypes + - type: latheRecipe + abstract: true + id: BaseToolRecipe + category: Tools + completetime: 2 + materials: + Steel: 200 + Plastic: 50 + +- type: latheRecipe + abstract: true + parent: BaseToolRecipe + id: BaseBigToolRecipe + materials: + Steel: 800 + Glass: 300 + +# Recipes + +- type: latheRecipe + parent: BaseToolRecipe id: Wirecutter + result: Wirecutter icon: sprite: Objects/Tools/wirecutters.rsi state: cutters-map - result: Wirecutter - category: Tools - completetime: 2 - materials: - Steel: 200 - Plastic: 50 - type: latheRecipe + parent: BaseToolRecipe id: Screwdriver + result: Screwdriver icon: sprite: Objects/Tools/screwdriver.rsi state: screwdriver-map - result: Screwdriver - category: Tools - completetime: 2 - materials: - Steel: 200 - Plastic: 50 - type: latheRecipe + parent: BaseToolRecipe id: Welder result: Welder - category: Tools - completetime: 2 materials: Steel: 400 - type: latheRecipe + parent: BaseToolRecipe id: Wrench result: Wrench - category: Tools - completetime: 2 materials: Steel: 200 @@ -42,155 +53,122 @@ id: CableStack result: CableApcStack1 category: Parts - completetime: 2 + completetime: 0.1 materials: Steel: 30 - type: latheRecipe + parent: CableStack id: CableMVStack result: CableMVStack1 - category: Parts - completetime: 2 - materials: - Steel: 30 - type: latheRecipe + parent: CableStack id: CableHVStack result: CableHVStack1 - category: Parts - completetime: 2 - materials: - Steel: 30 - type: latheRecipe + parent: BaseToolRecipe id: CrowbarGreen result: CrowbarGreen - category: Tools - completetime: 2 materials: Steel: 200 - type: latheRecipe + parent: BaseToolRecipe id: Pickaxe result: Pickaxe - category: Tools completetime: 4 materials: Steel: 1000 Wood: 500 - type: latheRecipe + parent: BaseToolRecipe id: Shovel result: Shovel - category: Tools - completetime: 2 materials: Steel: 200 Wood: 100 - type: latheRecipe + parent: BaseToolRecipe id: Multitool result: Multitool - category: Tools - completetime: 2 materials: Steel: 200 Plastic: 200 - type: latheRecipe + parent: Multitool id: NetworkConfigurator result: NetworkConfigurator - category: Tools - completetime: 2 - materials: - Steel: 200 - Plastic: 200 - type: latheRecipe + parent: BaseToolRecipe id: PowerDrill result: PowerDrill - category: Tools - completetime: 2 materials: Steel: 600 Plastic: 200 - type: latheRecipe + parent: BaseToolRecipe id: RCD result: RCDEmpty - category: Tools completetime: 4 materials: Steel: 1000 Plastic: 300 - type: latheRecipe + parent: BaseToolRecipe id: RCDAmmo result: RCDAmmo - category: Tools - completetime: 2.4 materials: Steel: 500 Plastic: 250 - type: latheRecipe + parent: BaseBigToolRecipe id: HandHeldMassScanner result: HandHeldMassScannerEmpty - category: Tools - completetime: 2 - materials: - Steel: 800 - Glass: 300 - type: latheRecipe + parent: BaseBigToolRecipe id: HandheldGPSBasic result: HandheldGPSBasic - category: Tools - completetime: 2 - materials: - Steel: 800 - Glass: 300 - type: latheRecipe + parent: BaseBigToolRecipe id: TRayScanner result: trayScanner - category: Tools - completetime: 2 - materials: - Steel: 800 - Glass: 300 - type: latheRecipe + parent: BaseBigToolRecipe id: GasAnalyzer result: GasAnalyzer - category: Tools - completetime: 2 - materials: - Steel: 800 - Glass: 300 - type: latheRecipe + parent: BaseToolRecipe id: SprayPainter result: SprayPainter - category: Tools - completetime: 2 materials: Steel: 300 Plastic: 100 - type: latheRecipe + parent: BaseToolRecipe id: UtilityBelt result: ClothingBeltUtility - category: Tools - completetime: 2 materials: Cloth: 100 Steel: 50 - type: latheRecipe + parent: BaseToolRecipe id: HolofanProjector result: HolofanProjectorEmpty - category: Tools completetime: 8 materials: Steel: 300 @@ -198,18 +176,18 @@ Plastic: 50 - type: latheRecipe + parent: BaseToolRecipe id: WelderExperimental result: WelderExperimental - category: Tools completetime: 6 materials: Steel: 800 Plasma: 200 - type: latheRecipe + parent: BaseToolRecipe id: JawsOfLife result: JawsOfLife - category: Tools completetime: 6 materials: Steel: 1000 @@ -218,9 +196,9 @@ Gold: 50 - type: latheRecipe + parent: BaseToolRecipe id: HoloprojectorField result: HoloprojectorFieldEmpty - category: Tools completetime: 3 materials: Steel: 500 @@ -228,9 +206,9 @@ Glass: 100 - type: latheRecipe + parent: BaseToolRecipe id: WeaponParticleDecelerator result: WeaponParticleDecelerator - category: Tools completetime: 6 materials: Steel: 750 diff --git a/Resources/Prototypes/Recipes/Reactions/chemicals.yml b/Resources/Prototypes/Recipes/Reactions/chemicals.yml index 537a792e85..78fdfec7c9 100644 --- a/Resources/Prototypes/Recipes/Reactions/chemicals.yml +++ b/Resources/Prototypes/Recipes/Reactions/chemicals.yml @@ -81,7 +81,7 @@ amount: 1 Sulfur: amount: 1 - Oxygen: + Oxygen: amount: 2 products: SulfuricAcid: 3 @@ -205,6 +205,20 @@ energyConsumption: 12500 duration: 15 +- type: reaction + id: Flash + impact: High + priority: 20 + reactants: + Aluminium: + amount: 1 + Potassium: + amount: 1 + Sulfur: + amount: 1 + effects: + - !type:FlashReactionEffect + - type: reaction id: TableSalt minTemp: 370 @@ -501,3 +515,4 @@ amount: 1 products: Tazinide: 1 + diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml b/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml index 93a62876a7..12f5097c7f 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml @@ -1,4 +1,4 @@ -- type: job +- type: job id: ServiceWorker name: job-name-serviceworker description: job-description-serviceworker @@ -6,7 +6,6 @@ startingGear: ServiceWorkerGear icon: "JobIconServiceWorker" supervisors: job-supervisors-service - canBeAntag: true # DeltaV - Can be antagonist access: - Service - Maintenance diff --git a/Resources/Prototypes/Shuttles/shuttle_incoming_event.yml b/Resources/Prototypes/Shuttles/shuttle_incoming_event.yml index a5269a73da..1703e0c698 100644 --- a/Resources/Prototypes/Shuttles/shuttle_incoming_event.yml +++ b/Resources/Prototypes/Shuttles/shuttle_incoming_event.yml @@ -1,8 +1,3 @@ -- type: preloadedGrid - id: ShuttleStriker - path: /Maps/Shuttles/ShuttleEvent/striker.yml - copies: 2 - - type: preloadedGrid id: ShuttleCargoLost path: /Maps/Shuttles/ShuttleEvent/lost_cargo.yml diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 1c02d7f3d0..fdf9de78d1 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -1071,6 +1071,9 @@ - type: Tag id: Plunger +- type: Tag + id: PlushieCarp + - type: Tag id: PlushieGhost diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Antagonists.xml b/Resources/ServerInfo/Guidebook/Antagonist/Antagonists.xml index 2592c10762..7f47f1e490 100644 --- a/Resources/ServerInfo/Guidebook/Antagonist/Antagonists.xml +++ b/Resources/ServerInfo/Guidebook/Antagonist/Antagonists.xml @@ -7,13 +7,12 @@ These bad actors are more often than not employed or backed by the [color=#ff0000]Syndicate[/color], a rival organization to Nanotrasen that wants nothing more than to see it burn. ## Various Antagonists - Antagonist roles come with their own special sets of abilities, tools and risks to the station. - Antagonists can take many forms, like: - [textlink="Nuclear operatives" link="Nuclear Operatives"], with the goal of infiltrating and destroying the station. - [textlink="Traitors" link="Traitors"] amongst the crew who must assassinate, steal and decieve. - - [textlink="Space Ninjas" link="SpaceNinja"], masters of espionage and sabotage with special gear. - [textlink="Revolutionaries" link="Revolutionaries"] who are intent on taking control of the station from the inside. - [textlink="Zombies" link="Zombies"] that crave the flesh of every crew member and creature on board. - - [textlink="Several non-humanoid creatures" link="MinorAntagonists"] that usually just try to kill anything that moves. + - [textlink="Space Ninjas" link="SpaceNinja"], masters of espionage and sabotage with special gear. + - [textlink="Thieves" link="Thieves"] driven by kleptomania, determined to get their fix using their special gloves. + - [textlink="Various non-humanoid creatures" link="MinorAntagonists"] that generally attack anything that moves. diff --git a/Resources/ServerInfo/Guidebook/Antagonist/MinorAntagonists.xml b/Resources/ServerInfo/Guidebook/Antagonist/MinorAntagonists.xml index 6704ed28e0..97574c4021 100644 --- a/Resources/ServerInfo/Guidebook/Antagonist/MinorAntagonists.xml +++ b/Resources/ServerInfo/Guidebook/Antagonist/MinorAntagonists.xml @@ -9,12 +9,12 @@ - Revenants are ethereal beings made of ectoplasm that haunt the crew and steal [color=cyan]life essence[/color] from them. + Revenants are ethereal beings made of ectoplasm that haunt the crew and steal [color=#8f63e6]life essence[/color] from them. - Your essence is your very own [bold]life force[/bold]. Taking damage reduces your essence. - Essence is also spent to use [bold]abilities[/bold]. - - To gain essence you first [bold]inspect[/bold] various souls for their worth. More worthy souls grant more essence. Then you must [bold]siphon[/bold] it either when the victim is crit, dead or asleep. + - To gain essence you first [bold]inspect[/bold] various souls for their worth. More worthy souls grant more essence. Then you must [bold]siphon[/bold] it either when the victim is crit, dead or asleep. All of this is done with [color=yellow][bold][keybind="Use"][/bold][/color]. - [bold]Stolen essence[/bold] is used to purchase new abilities to incapacitate the crew easier. - - You are [bold]vulnerable[/bold] to attacks when you siphon a soul or use an ability. You can tell when you are vulnerable when you have a [italic]"Corporeal"[/italic] status effect. + - You are [bold]vulnerable[/bold] to attacks when you siphon a soul or use an ability. You can tell when you are vulnerable when you have a [color=#8f63e6][italic]Corporeal[/italic][/color] status effect. # Rat King @@ -26,12 +26,12 @@ - Rat Kings are abnormally large rodents capable of [color=cyan]raising huge rat armies[/color] by eating equally huge amounts of food. - - You have several abilities that come at the cost of your [bold]hunger[/bold]. - - One ability is summoning [color=cyan]Rat Servants[/color] who you can [bold]command[/bold] to stay in place, follow you, attack a target of your choice or attack indiscriminately. - - You can conjure a cloud of [color=#77b58e]ammonia[/color], which is mildly poisonous to humans but heals rats. - - You can also [italic]"Rummage"[/italic] through any disposal unit by using the context menu. Use this to find [bold]scraps of food[/bold] to grow your army. - - Besides your abilities, you are [bold]stronger[/bold] than most other animals. You and your servants are capable of speech and you're both small enough to fit under airlocks and tables. + Rat kings are abnormally large rodents capable of [color=yellow]raising huge rat armies[/color] by eating equally huge amounts of food. + - You have several abilities that come at the cost of your [bold]hunger.[/bold] + - One such ability is [color=yellow][italic]Raise Army[/italic][/color], which summons a [bold]Rat Servant[/bold]. You can [bold]command[/bold] your servants to stay in place, follow you, attack a target of your choice or attack indiscriminately. + - You can conjure a cloud of [color=#77b58e]ammonia[/color] using [color=purple][italic]Rat King's Domain[/italic][/color]. This purple gas is mildly poisonous to humans but heals rats. + - [color=#9daa98][italic]Rummage[/italic][/color] through a disposal unit by using the context menu. Use this to find [bold]scraps of food[/bold] to grow your army. + - Besides your abilities, [bold]you are stronger than most other animals.[/bold] You and your servants are capable of speech and you're both small enough to fit under airlocks and tables. - [bold]Your underlings are still very fragile![/bold] Beware of spacings, explosions and the buisness end of a melee weapon. # Space Dragon @@ -44,11 +44,11 @@ - Space Dragons is are giant extradimensional fish that [color=cyan]create rifts and eat crew.[/color] - - Dragons have powerful jaws to [bold]devour[/bold] infrastructure such as doors, windows, and walls. - - Your [color=orange]dragon's breath[/color] is a flaming projectile which travels a straight flight path, exploding multiple times and igniting things along the way. Be careful, your carps are not immune to this! - - You have the ability to summon [bold]carp rifts[/bold] that periodically spawn [bold]space carp[/bold]. There can be 3 rifts active at any given time. - - Rifts charge up energy over a period of 5 minutes and are [bold]vulnerable[/bold] during this time. After 5 minutes, it becomes invulnerable and will continue summoning carp as long as the dragon lives. + Space dragons are giant extradimensional fish that can [color=red]eat crew[/color] and create [color=#4b7fcc]carp rifts.[/color] + - Dragons have powerful jaws that allow them to [color=red][italic]Devour[/italic][/color] infrastructure such as doors, windows, and walls. + - They can also heal themselves by using [color=red][italic]Devour[/italic][/color] on crew members that have gone unconscious or have died. + - Your [color=orange][italic]Dragon's Breath[/italic][/color] is a [bold]flaming projectile[/bold] which travels a straight flight path, exploding multiple times and igniting things along the way. Try not to hit your carps with this! + - You have the ability to [color=#4b7fcc][italic]Summon a Carp Rift[/italic][/color]. Rifts periodically spawn [bold]space carp[/bold] and charge up energy over a period of 5 minutes, [bold]which is when it's vulnerable.[/bold] After 5 minutes, it becomes invulnerable and will continue summoning carp as long as the dragon lives. - You'll suffer a [bold]temporary debilitating feedback effect[/bold] if one of your rifts are destroyed before it's done charging. - If a period of five minutes passes since your spawn or since the last time a rift was charging, [bold]you'll disappear.[/bold] - Dragons who have the maximum of 3 fully charged rifts will [bold]never disappear[/bold], but they are still mortal. @@ -61,6 +61,6 @@ Slimes and spiders have no remarkable features, but will [color=cyan]infest the station[/color] from time to time regardless. Both will give chase and attack anything they see. - - Slimes may deal extra [bold]cellular or posion damage[/bold], based upon their color. Water hurts them just as it would hurt a slime person. - - Spiders can lay [bold]webs[/bold], which non-spiders have a hard time moving through. They can easily be destroyed with a blade. + - Slimes may [bold]deal extra cellular or poison damage[/bold], based upon their color. Water hurts them just as it would hurt a slime person. + - Spiders have a venomous bite and can [bold]create webs[/bold] that are hard to move though. Webs are easily destroyed with a blade. They can also pry open airlocks. diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Nuclear Operatives.xml b/Resources/ServerInfo/Guidebook/Antagonist/Nuclear Operatives.xml index ee58663374..11149bab66 100644 --- a/Resources/ServerInfo/Guidebook/Antagonist/Nuclear Operatives.xml +++ b/Resources/ServerInfo/Guidebook/Antagonist/Nuclear Operatives.xml @@ -1,6 +1,6 @@ # Nuclear Operatives - + [color=#999999][italic]"OPERATIVES STANDBY. YOUR OBJECTIVES ARE SIMPLE.[/italic][/color] @@ -38,13 +38,13 @@ ## Preparation - Each member in your squad has been given an [color=cyan]uplink[/color] to purchase everything you will need for the mission, similar to [textlink="Traitors." link="Traitors"] + Each member in your squad has been given an [color=cyan]uplink[/color] to purchase everything you will need for the mission, similar to [textlink="traitors." link="Traitors"] - You can purchase the same kinds of gear Traitors can, but you have higher quality gear available to you and more telecrystals to spend. + You can purchase the same kinds of gear traitors can, but you have higher quality gear available to you and more telecrystals to spend. @@ -71,8 +71,8 @@ ## Getting to the Station You've got the plan, you've got the gear. Now, execute. - Grab a [bold]jetpack[/bold] from your armory and go with your other operatives to the [color=cyan]Syndicate Shuttle[/color]. - Among other things you may need, you'll find an [bold]IFF Console[/bold] on the shuttle. It allows you to hide from other ships and mass scanners when [italic]"Show IFF"[/italic] and [italic]"Show Vessel"[/italic] are toggled off. + Grab a [bold]jetpack[/bold] from your armory and go with your other operatives to your [color=cyan]shuttle[/color]. + Among other things you may need, you'll find an [bold]IFF Computer[/bold] on the shuttle. It allows you to hide from other ships and mass scanners when [italic]Show IFF[/italic] and [italic]Show Vessel[/italic] are toggled off. When everyone is ready, FTL to the station and fly to it with a jetpack. Don't forget the code, your pinpointers and the nuke if you're taking it. @@ -82,12 +82,12 @@ ## The Nuke & Arming Procedure - You have a paper with the [color=cyan]nuclear authentication codes[/color] on your shuttle. [bold]Check to see if the nuke ID matches the one on your shuttle.[/bold] If it doesn't, you'll have to use explosive in the station's vault. + You have a paper with the [color=cyan]nuclear authentication codes[/color] on your shuttle. [bold]Check to see if the nuke ID matches the one on your shuttle.[/bold] If it doesn't, you'll be arming the station's nuke instead. - Obtain the [bold]nuclear authentication disk[/bold] and insert it into the nuke. - Type in the [bold]nuclear authentication code[/bold] and press "[bold]E[/bold]" on the keypad to Enter. - - To begin [bold]self-destruct process[/bold], press "[color=red]ARM[/color]". After 300 seconds, the nuke will explode. - - [bold]Defend the nuke[/bold], even if it's at the cost of your lives! The mission requirements do not include your return. + - [bold]To begin the self-destruct sequence, press [color=#EB2D3A]ARM[/color][/bold]. After 300 seconds, the nuke will explode. + - [bold]Defend the nuke[/bold], even if it's at the cost of your lives! The mission requirements do not include your return. - It takes 30 seconds for someone to [bold]disarm[/bold] the nuke. Re-arming it is possible, but the chance of mission success drops if you let it happen. - Should the nuke be re-armed, the timer will start from where it left off. diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml b/Resources/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml index 4a1887a392..9bc0b28068 100644 --- a/Resources/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml +++ b/Resources/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml @@ -1,6 +1,6 @@ # Revolutionaries - + [color=#999999][italic]"Viva la revolución!!"[/italic][/color] @@ -13,20 +13,20 @@ ## Objectives You must cuff, kill, or exile all of the [textlink="Command staff" link="Command"] on station in no particular order. - Your objective is not to destroy the station, but [italic]take it over[/italic], so try to minimize damage where possible. + Your objective is [bold]not to destroy the station[/bold], but [italic]to take it over[/italic], so try to minimize damage where possible. [bold]The revolution will fail[/bold] if all of the [bold][color=#5e9cff]Head Revolutionaries[/color][/bold] die, and all [color=red]Revolutionaries[/color] will de-convert if this happens. ## Headrevs & Conversion [bold][color=#5e9cff]Head Revolutionaries[/color][/bold] are chosen at the start of the shift and begin with a [color=cyan]flash[/color] and a pair of [color=cyan]sunglasses[/color]. - + - + You can convert crew members to your side by taking any [bold]flash[/bold] and attacking someone with it using [color=#ff0000]harm mode[/color]. - However, you can't convert your target if they're wearing [color=cyan]flash protection[/color] such as [bold]sunglasses[/bold] or a [bold]welding mask[/bold]. + However, [bold]you can't convert your target if they're wearing [color=cyan]flash protection[/color][/bold] such as sunglasses or a welding mask. @@ -34,10 +34,10 @@ - Another hurdle in your way are pesky [color=cyan]mindshield implanters[/color]. These will: + Another obstacle in your way are those pesky [color=cyan]mindshield implanters[/color]. These will: - Prevent the implanted person from being converted into a [color=red]Revolutionary[/color] - De-convert Revolutionaries, and will make them no longer loyal to your cause - - Visibly be destroyed upon being implanted into a [bold][color=#5e9cff]Head Revolutionary[/color][/bold], giving away your cover + - [bold]Visibly be destroyed upon being implanted into a [color=#5e9cff]Head Revolutionary[/color][/bold], giving you away - NOT protect against flash disorientation Assume all of [color=#cb0000]Security[/color] and [color=#1b67a5]Command[/color] are implanted with mindshields already. @@ -47,7 +47,7 @@ ## Revolutionary - A [bold][color=red]Revolutionary[/color][/bold] is a crew member that has been converted by a [bold][color=#5e9cff]Head Revolutionary[/color][/bold]. + A [color=red]Revolutionary[/color] is a crew member that has been converted by a [bold][color=#5e9cff]Head Revolutionary[/color][/bold]. [bold][color=red]Revolutionaries[/color] can't convert people themselves,[/bold] but they're more than capable of doing dirty work and carrying out orders. diff --git a/Resources/ServerInfo/Guidebook/Antagonist/SpaceNinja.xml b/Resources/ServerInfo/Guidebook/Antagonist/SpaceNinja.xml index 9998d4b38a..c001b97937 100644 --- a/Resources/ServerInfo/Guidebook/Antagonist/SpaceNinja.xml +++ b/Resources/ServerInfo/Guidebook/Antagonist/SpaceNinja.xml @@ -7,7 +7,7 @@ You are an elite mercenary that [color=#66FF00]The Spider Clan[/color] has sent to wreak all kinds of havoc on the station. You are equipped to keep it silent-but-deadly. - Whether you decide to mercilessly pick off the station's crew one by one or stay out of trouble, your discipline has taught you that [italic]your objectives must be at least attempted[/italic]. For honor! + Whether you get bloody or stay out of trouble, your discipline has taught you that [italic]your objectives must be at least attempted[/italic]. For honor! ## Standard Equipment You begin implanted with a [color=cyan]death acidifier[/color], so if you are captured or KIA all your precious equipment is kept out of enemy hands. @@ -19,7 +19,7 @@ - ## Ninja Suit & Boots + ## Your Suit @@ -27,12 +27,12 @@ - Your single most important item is [color=#66FF00]your suit[/color], without it none of your abilities would work. + Your single most important item is [color=cyan]your suit[/color], without it none of your abilities would work. Your suit requires power to function, which is supplied by its [bold]internal battery[/bold]. It can be replaced, and [italic]high capacity batteries[/italic] mean a [italic]highly effective ninja[/italic]. - [bold]You can recharge your internal battery directly[/bold] by using [color=#66FF00]your gloves[/color]. You can see the current charge by examining the suit or checking the nifty battery alert on your screen. + [bold]You can recharge your internal battery directly[/bold] by using [color=cyan]your gloves[/color]. You can see the current charge by examining the suit or checking the nifty battery alert on your screen. - Your outfit also includes [color=#66FF00]special boots[/color] that keep you agile, upright and grounded without using energy. You've also got flash protection thanks to your [color=#66FF00]visor[/color]. + Your outfit also includes [color=cyan]special boots[/color] that keep you agile, upright and grounded without using energy. You've also got flash protection thanks to your [color=cyan]visor[/color]. ## Ninja Gloves @@ -58,9 +58,9 @@ [bold]You have sworn yourself to the sword and refuse to use firearms.[/bold] Luckily, you've got a pretty cool sword. - Your [color=#66FF00]energy katana[/color] hurts plenty and can be [bold]recalled at will[/bold] at the cost of suit power. The farther away it is from you, the more energy required to recall it. + Your [color=cyan]energy katana[/color] hurts plenty and can be [bold]recalled at will[/bold] at the cost of suit power. The farther away it is from you, the more energy required to recall it. - While in hand you may also [color=#66FF00]teleport[/color] to anywhere that you can see, [bold]including through windows[/bold]. The charges required to do this regenerate slowly, so keep a charge or two spare in case you need a quick getaway. + While in hand you may also [color=cyan]teleport[/color] to anywhere that you can see, [bold]including through windows[/bold]. The charges required to do this regenerate slowly, so keep a charge or two spare in case you need a quick getaway. ## Spider Clan Charge @@ -68,9 +68,9 @@ - [color=#66FF00]A modified C-4 explosive[/color], which can be found in your pocket. Creates a large explosion but [bold]must be armed in your target area[/bold] as it is one of your [color=#66FF00]objectives[/color]. + This is a [color=cyan]modified C-4 explosive[/color] which can be found in your pocket. Creates a large explosion but [bold]must be armed in your target area[/bold] as it is one of your objectives. - It can't be activated manually, so simply plant it on a wall or a particularly ugly piece of furniture. Can't be unstuck once planted. + It can't be activated manually, so simply plant it on a wall or some furniture that does not spark joy. Choose wisely, it can't be unstuck once planted. ## Objectives diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Thieves.xml b/Resources/ServerInfo/Guidebook/Antagonist/Thieves.xml index 7ed5aa9839..4c11fc0d99 100644 --- a/Resources/ServerInfo/Guidebook/Antagonist/Thieves.xml +++ b/Resources/ServerInfo/Guidebook/Antagonist/Thieves.xml @@ -11,7 +11,7 @@ Thieves are petty yet crafty [color=green]criminals[/color] who can't keep their hands to themselves. You were forcefully given a [bold]pacifism implant[/bold] after your last arrest, but you won't let that stop you from trying to add to your collection. ## Art of the Steal - Unlike other antagonists, [italic]staying out of trouble is almost a requirement for you[/italic] because of your implant. + Unlike other antagonists, [bold]staying out of trouble is almost a requirement for you[/bold] because of your implant. You can only run if [color=#cb0000]Security[/color] picks a fight with you, and because you work alone you don't have any friends to pull you out of danger. But against all odds, you'll sucessfully swipe what you want using determination, sleight of hand, a few tools and your [color=cyan]thieving gloves.[/color] @@ -39,6 +39,9 @@ Your [color=cyan]toolbox[/color] contains... well, whatever you remembered to pack. [bold]You can select two pre-made kits[/bold] to help you complete grander heists. Approve your choices in a safe place, as the toolbox will dissolve and the gear will drop at your feet. + + + diff --git a/Resources/Textures/Interface/Actions/actions_ai.rsi/job_view.png b/Resources/Textures/Interface/Actions/actions_ai.rsi/job_view.png deleted file mode 100644 index b407c4755e13c72eaefa36aeab453a72b1903d0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmVNCu5t(CbZ2X@dmYzL(7H%(`0ka$^NmI*#_MkX| z1z;x^a>NNEGbT#`aS z$sJYh-cD3L8?b~s^B2KC^98#*K_wwcAs_~=E|pv%^tV^2YF^C{l1SDz+Oj9RMnPfIKP)Px$FG)l}R9J=Wl&@06Fc6177(`7gIgxW9;0dt2055PS&hii^c?cYX!D4uTvuA3H z0M`hRiD+FAX?nS#%xnt`f_yWb{MpU!FWV%LNF);for5Whni7ZceFI=&b~P>5s73A# z*AHxDFwhz>8fMFJF%PAVO^Ks`{>%66SpkKDavh2MDFIE1%TzRB2AsM%HHXaz5#kE; zNkVcP&4I6q-F2lLNt`kRsDY%Bu(q>V1KJ`+B;Z}calEZgKpVyujM=qj=ofuQKvfBx zEa+OEI3T_<;b6_9N`#Gu9owz~%R6~oQ3U|BhQ$gV?!Wd~tl;TU8qqWA(RjJ_RX90= z*XPeI!0GibJwyO?4cqQKocqKohs&F3u@Z?y;?Ma26SH9r T#ZNbK00000NkvXXu0mjfI!B%? literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/muffin-berry.png b/Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/muffin-berry.png index 9e0165e8121f4ef42b231cfa6169f6b531d76893..161da9acb430d928b6ef97426bd06b288562ea4f 100644 GIT binary patch delta 3387 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 R5pVzi002ovPDHLkV1h)-a*F@} delta 587 zcmV-R0<`_T8sh|zBYy%aNklQ`QPz0GcAPjp9#>7DbXR`3S3N;*qpt1CB0`oc8l&%4Tajj8D}8*tpVSAW@+` z;76E(Vntzetc|F@lZaw1t$`DLZwOT*Oe9+veHCK1=zrt%Awd*@FzXa6UT#mc@xxH4 zv@RzcEIT&f_{)q8#iUtLd6|y#y`Ui_9PFKBU9iN=oXW&Zl#puB(Ng35&7@;pM;8Fd zW;GJKBjj><)+hp_s#2Zvk}@?Uu->1ie_x2#X$B!2;OQb$4nuFf3k0002xNklE9XC4n8J3lmf)0-V)&0Vi-yS9u&kk6z|)AVny4JeAD{5y-7O$Br^Zj3!d<_g+W z4IC`v*4R)XOW#2I)&Of~Ju$wE6E};10=lhd!W75@M0i)A8Go6(et56W6f2(~DX)E~ zJ%|1ch^^-qAPHR&trcVYhpO_CfTts5jF6iP-d{!@*2eO=??ArdIUuiB1)#rO2HYlM zGT`o;&=Ax#uBHk*;4xqUj^AoT02NT0apKt0tcMcSzjNqnU~djifm38IMNyQW^8(~K WH~&GnHNF4<00{s|MNUMnLSTYjcX%}b delta 257 zcmV+c0sj800-XYoB!A>dL_t(|oMT`Z1*2dTjDk@x3I-T3lA~#NyV-wqG1tmdWSK>h zCYZ(g&L$Xg7x$ha%OON7-ra8YADhM4972jCm`Jt!V$K5JiJ(ox_ljsnD zfoE@jFh~h=z%7M|kqgKwJQkMdVWe_WeLf0C!6+C7g9ZQqWqwXX&J1V_00000NkvXX Hu0mjfYaVJ* diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/muffin-chocolate.png b/Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/muffin-chocolate.png new file mode 100644 index 0000000000000000000000000000000000000000..7ca1a22cb0651c2a615a77172ea78ea4f54c2b67 GIT binary patch literal 425 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 Rw=)0$002ovPDHLkV1idoz03dr literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_blue.png b/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_blue.png index a1b463f7896d5d6b8c2fc4300c01a8871c3de454..45e0c9755e4f077515ab8cf0b41d4bb1d3c4715d 100644 GIT binary patch delta 271 zcmey#yq#%+Vf{x>7srr@*5m{U*2M`TJxz>kJt`~yp3fF)3P1SVINQT?vI%>{mw4qB zFI*Oic|O}T;Q<315VS2XU-xM0_80q)6)XyPZNITk;U;7M^0r6e6ZXzh`P@;)u-=p7 zaACIuo84pqHnTw2HCc6g_wk2w`|`6e3UB25QIp2|cw6zFBlVJ}&bhAHc*MHly2_LK z&+A{hto-}^v-DS42W^8_43jo1GBYb}<)6W9=ew^xbdG*_=Qpt4!`q6#Sv+Mqb2#%g zL-)UIp0oQ4PCCBeSI>OH5Mld4W7*uq+m>-``iswNlpNbC6VxLO_8b$)4b&00bPKu6{1-oD!MY&A?g#R1Xw^(G1KB7@?|x z<}6@>t5#URj9`OwespsD1Ee?$JR*x37)-B#Fk@WmQx2e@Os0!}2#^L^2nGT`QUi!V zGzhO=Skd?!NSAxMIEF-UCM8I)E><*OR^<2O8w$=de+VwRB%aY;A z;c6Nnz^|H&6im|F7ez>j`A!gPf3@pdeJR^5(zkXXF0P zzpnCR|AutUFrG=wD;Za+UW#}$wbzQllEuNXm;16R*FSmlU;Vt7Re2knl3s^YuaOY* zQkeDQit7@u84njIsI_E1V~F_1%xbS8av^hujjxPDibJoKG;iZY0f{O_U_6FKJS{!I Ryd7vYgQu&X%Q~loCIBPRh=~9I diff --git a/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_gold.png b/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_gold.png index 641a4c22153e4c61e72b9fd9e842a708bdca640e..53b97f4c783c567aae26c9f93716597ed2d440f5 100644 GIT binary patch delta 267 zcmey$yqRf&Vf|ZA7srr@*5m{U*2M`TJxz>kJt`~y%4h0yg&+L1dA+CUWE1v3^%tFQ zICKh4I+Ln+kdX%j{^!XY*8czBm7jUB%gOpAS;tMxGi0wloch1I!Q^vCnZuHe8qA0P zrt(ZYwumRvZ&JinpWEMM)``uM<6u%tlHKsze*iukfWe1rbQ ztd;K=q8bC)C(PlMln_{1dqC#H?REUCEnY8Fx@Dd4^X7G)ZJ(xZJSA)QdsZUnTG@u} zb~D%}Tl+|}%e;&|asUVtgpVBB@K#2@dHTh4ky-B#RtNP+gFVK?1_BIczB{~8>G)#B P00f?{el9HQoD!M<8Y&A?g#R1Xw^(G1KB7@?|x z<}6@>t5#URj9`OwespsD1Ee?$JR*x37)-B#Fk@WmQx2e@Os0!}2#^L^2nGT`QUi!V zGzc$VznJqRkk0pXaSVyzOiGYoU94yz#RMcmoE{XcyjP!OaP|-Lra%9?<^KHmU%x>) z^AX1c=6`Y=N*#`UEGw7pQm$eWJvhx>s{7yZc8CbG!?b_)c`Rl!;ZY7{DpzG0j0#?d zR4S1Y`z_h0bn|KX)o5r!Uo zOW2l7^GNOtH+#kKM1Xx6a)we zA2KOs(E0t>KJQEY>yY37UzqsJQ{z)GTHrRdx9va%2hU!hza6(MiwK!KWd_J0p00i_ I>zopr01_yI%K!iX diff --git a/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_gray.png b/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_gray.png index 47d410736e70e9c8254247ce1db5374f4db03e73..8f905fb9a88cd0f8feae32d63cf1a5317969637e 100644 GIT binary patch delta 259 zcmV+e0sQ{`1FQm&F@NSsL_t(oh3%C+3IZ_@MnA<;Td~{D0|+)US}h1R-oSte9>cwY zrC7}sEcOIb2*O@r*=`Fv4-gxF5Hy>hi_JU;3CYLs2q6O~ilY3PMnKjQkuxA7p*6z< zn7J}!j0vjS3J?GQ0#}mYFR8=SY&|zV^cV27HJJi~bgSB1BR2Hd7SE zBYS%fl{9??M5K{s9q+7fU2g#*vgh{FJNt8ix=?}Oe*k#C_P+`AhU>TcY&A?g#R1Xw^(G1KB7@?|x z<}6@>t5#URj9`OwespsD1Ee?$JR*x37)-B#Fk@WmQx2e@Os0!}2#^L^2nGT`QUi!V zGzhO>ChGbKNLPEhIEF-UCM8I)E><*l_1XCjee;m1>?;-Tv+^Wp!Fi}ljdv;SYbcrn7z zqc4q*;b+F{km^M;4yE^-c}z@9Sbq1-5MWrTdQA{$Im7?|FD;(U05bAH&PYyB5R#CR z`WL^W;31MJd`sAtO!G+Y3^#kl@I-)t)l|=Cx(0`4%pZB_W!_Q@%Vz!G=9mhy?U^FO zrUrp!k$NlEuKmk@=zqWT-}_cq<(k`0UOvKjB>hIL`_5pLiGxM2P#idTB)7}A-j(uaWmAH&mZq2c8 z4E~lhb^xS4ID}o&8d6tmB*8qA65-WnUm31G`^q40^^4&w2RjB0lOF}6U=)l3QUCxl XW>a1!R>=_n015yANkvXXu0mjf%#?U| literal 507 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}6{!)PX}-P; zT0k}j0}G=R11m@g5Zf_I!`W_(8Vt-}aV7?a_DlvAs2V>Y&A?g#R1Xw^(G1KB7@?|x z<}6@>t5#URj9`OwespsD1Ee?$JR*x37)-B#Fk@WmQx2e@Os0!}2#^L^2nGT`QUi!V zGzhP|C{$Vkq^mq#977^FlM*CY7b_Y_F#(AXr-YU2hwGCJ&i-NE^yhn*#Gi_2%Nr9- z3RzAt>fidxku*WsF>B?!j-ucWW(N~Ho+1^Gd1`z=>hEy8*?o8Cs{b1kBQ!1^VN{UM zotx!9g?Yuh>Ise8k|t;{{1lq~-Z5!|0K-bvYl1+#8UFuYSd}afWaNQdk({6)bfe4g zPyNMp-|K-c_zyHJ!q9_n3EPrs9?6~IX0I5Y2r#gk>iJC9;LwcuBQL$oTS~(`^+&#R zNSkQ$lMFc~1#XVSSx=cF_WZZc`%?cp_e T;_+|YAUAlr`njxgN@xNA=(CAd diff --git a/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_red.png b/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_red.png index d30341b1422ba957935c3067f3e8b2d494c241fc..14b22cf14a4163d8c3cc7a205a2f9da62e4bb9da 100644 GIT binary patch delta 245 zcmey&JdbIDVf_tH7srr@*5m{U*2M`TJxz>kJt`~y`ZF7Q7B|eCDe36C+;6VZ$rv#q znFAp3;pJuZJ)hFj(s+R4zx>xIdz2mMl{WuyDmx=%LW-OxpM~W|{^pPgDu*v^&);~; zott}diX}4;2yk!0o;8o-6&pRcy&3&Bu p!RS|ylemAKXICNE2Z3ORGBEi1m^;jnZDeNv0#8>zmvv4FO#qGaY}Wt) literal 499 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}6{!)PX}-P; zT0k}j0}G=R11m@g5Zf_I!`W_(8Vt-}aV7?a_DlvAs2V>Y&A?g#R1Xw^(G1KB7@?|x z<}6@>t5#URj9`OwespsD1Ee?$JR*x37)-B#Fk@WmQx2e@Os0!}2#^L^2nGT`QUi!V zGzc$sJFo_%xzN+aF(iUBDM5mDv7&(#6OagTatI3gWN)XVp}{e2`OJEUX|rd}e0cQU zy?a}VSxzuYNlCF7o|w4c!h$M~1|C++1Sx6hIG!M9WA;Dxd0*<~FEEDh+_^Dng3MVN z2ChqMgWq-*FefvK& zFK>;63VRT9koS^}N3^9&8HzX>nxw>+d5g5HG5^=kds&s&hxymNeXhLPY$q?;usDbb z95Ol0YGh>e-|@%)!o~lim)}ahU{E>BqTvUR^{OHh7B}aFj#dVSo#M(#P2qKmfL1ej My85}Sb4q9e09mksl>h($ diff --git a/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_rusted.png b/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_rusted.png index ce82c248db8d03f5ce27802e954258c56294475e..8223bcca8fa87d56495186ceba1cd934457725f1 100644 GIT binary patch delta 476 zcmV<20VDqW1cC&RFn^LR_hNiU@kouD=ljMo(4L2 zpXH9{9=<&91Mm01#l^+tKjV=a-iLY>pK8n#+%F^csd?mpp)J1^;@M3UPqn{Hp;; zJ9iFH>ITHO;Lp=(t*_KgD@f>ElidL)i^vKRIe%|xAHC3zfY9*fy-TCH$f|>u z94(@BI*n3_?)okOdJ132cY&A?g#R1Xw^(G1KB7@?|x z<}6@>t5#URj9`OwespsD1Ee?$JR*x37)-B#Fk@WmQx2e@Os0!}2#^L^2nGT`QUi!V zGzh<1u=vAYAid4g#W5s;GburWb+Mv>6cdmLaZ)fm@Yep!+O01G|7Uj>|G$3inv+2X zuZVLPbFjCmRN9X-r(XQuJvAkw zAh4*D*`e=-)m6Fu%seIs_!jJX@5m-4CDp{s&T79-fZ=4L6T^~e5$-^DGyMO*Wz{;6 zPd9^nker|(Bq1gBFMdbC!+L4v-v1XbUX0k-+shll>!CaGn9zEjXAI`Wp=+i!%eacO z^Tcputo##iu~1HiRl&WXhWqe>fX2?oD-v4Wmle1g+L|siTzE9$&`}MG&3PZ|1=uWC znAvvynszvd>qLRAsAq-74YsL&-H$nxPH^$)7HF_!a%q-f;>rr>XfQOA)^M8~)9?oD yxBR(T|K;bhS@tXoYA0_QT9`SVbb6Mw<&;$V2jLF&n diff --git a/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_silver.png b/Resources/Textures/Objects/Devices/encryption_keys.rsi/crypt_silver.png index c31a743f473e0440a89cf06984930634deb7f86b..03e2960779226fb6ab002f96db054f4443615009 100644 GIT binary patch delta 273 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/inhand-left.png b/Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..42d319843d99564a585539451cff12800025cf70 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x9yxO4#fulk#l_PXZ^*Cj2MQNeOKbpAY$ZW{!T&*kVe|ea`+*{y z1s;*b3=DjSK$uZf!>a)(*zM`!7!u+B_L?JKg94As#chZFuFsjZ%zK)>jWPdTrno`*JZ|Rep$&$73=)fGe>69! z7GPvDVq!^Q;W%M%VRI^b|E)Lc*yFhV=;Xg+53HZSQBo_!@#43Fz=jv$jSZpu-+U6_ fS9-vHV2-(;f#2(u9ZM2{&SLO%^>bP0l+XkK5Uy%& literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..a2317f7facec9ebb7460963a2fae389595bfbf02 GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x9yxO4#fulk#l_PXZ^*Cj2MQNeOKbpAY$ZW{!T&*kVe|ea`+*{y z1s;*b3=DjSK$uZf!>a)(IMLI^F(ktM?KN+{0}3200SObM~ZKLOQ zMg|9Fh6XkUhO!lvI6;>1s;*b3=DjSL74G){)!Z!pu4AwV@QO1vIOhm1d*PmKm#tfgAUAY8oojw zW_|ej|8n$u$t71=Bon@DW6IlfCaLL?3S-G>$1fTP^=%pn2@DLuPlPtbiW}?z8p+`4 L>gTe~DWM4f3t%-Y literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/screen.png b/Resources/Textures/Objects/Specific/Medical/defibsmall.rsi/screen.png new file mode 100644 index 0000000000000000000000000000000000000000..1a2ac1cdec93e592dcf259277ebf800e1bcc406f GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCikh0(?ST#hiWh;xij|9svqmD75+tQdbh>7ySSKe+CDwm0y5-&H|6fVg?4j z!ywFfJby(BP|(=Z#WBRfKRH2-!A;cRzzQag1>2d}I2t}FFti>&!NSxNAjdLcSwo{B j%ZG?Y-X0FtGiMlT`?*hL74ez^wKI6S`njxgN@xNAS7bM8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/icon.png b/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..69c4e441de03015ad7ab1cd7fda81e35e63e1fa6 GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCiji0(?ST1q1|ygoM=9)wQ&=jE#*I6&33l8G({Z-)qFT3xUThWz(_XSP z8PDB(gLg$^cm7VsRexpfAJAc6s~A>o=_uk}o$z?h{E19D3>%Nk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}zYH4X18ygD=2`MTn0>zlCg=&EmYe|q_@P8m+_`QuU7%0G5;1OBO zz`%D9gc)~C%zg_L?DlkV42f`md(Dxr#em28qQ#eg>2j_~)8#Xc=B2FH+FIveW^(Pg zgh7B|!h%B%Z+2G%&D=G8y`zHir?`D-(icAX?RN065ocS%7IU4E!8wGbo_RAnP-)Tu zhocRRT+GI|%RXeRd0Dj}>_K|w4*8V-j!Fh!Jrxq(H9H(|-p|cq^YykK|3?M3e+&_? Z*@bu6>)e|8%oXS?22WQ%mvv4FO#nAuVsroi literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..c30877c534e5fb585fd2ac7319483ebd6d4297bd GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}zYH4X18ygD=2`MTn0>zlCg=&EmYe|q_@P8m+_`QuU7%0G5;1OBO zz`%D9gc)~C%zg_LoZ#u=7!u+B_L?`>0Rs+}faA~prRzCm&FW{o96K|zb7lX8-l?Aq zSvVp%1U6VGv|ll13%z1AojpKsZK_^6!>!zY2F5=}Wf+7Gl=?cn5>$L7zq>?=iA4vZ z!N);oo&T|QQ!)-G>iYPyL`U7WdSk?Nu||W(!A73bcEfD*g<|h{_Wt!h_Nt_HnbQMy b2TgPSpY}S3`(ri$-NxYQ>gTe~DWM4fD1Bat literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/meta.json b/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/meta.json new file mode 100644 index 0000000000..441fd4f5fe --- /dev/null +++ b/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/meta.json @@ -0,0 +1,28 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Created by EmoGarbage404 (github) for Space Staiton 14 and modified by alzore_(Discord)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "ready" + }, + { + "name": "screen" + } + ] +} diff --git a/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/ready.png b/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/ready.png new file mode 100644 index 0000000000000000000000000000000000000000..e5a8065eadc06d555fc09d7e309e6b57a08342e0 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSK$uZf!>a)(Xzc0Y7!u+B_Uvv>1_cr318??EPLBND7~a9m yaY(jBL{o_2fw!$>?$bB3?(H~Vew~HkkJ`)+eL{tDJOv^^?F^o-elF{r5}E+i0WDep literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/screen.png b/Resources/Textures/Objects/Specific/Medical/defibsyndi.rsi/screen.png new file mode 100644 index 0000000000000000000000000000000000000000..0c7a26a2a5eda1c3b5cd730138d9d6fdcc07eef0 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSK$uZf!>a)(7~<*T7!u*0EWx@sL8PZC(16SBpoRpivYdfa z=AuS@=ELn-)2+opNLIZ?x;Ff{&p zEl{QY9K$W?giABqW)yI4nrD=7QU8>HcP!IM-?g=OexX#nb2rPSjFr1(pM{DS|Z0ER1fW-J6saTa()7Bet#3xY6XeMwPPjwzXhKo6MDkV9f(>wLuyM>xy}Kvd8^NxEKhqD%m;J>gQu&X%Q~loCIFxseuDr2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/medipen.rsi/meta.json b/Resources/Textures/Objects/Specific/Medical/medipen.rsi/meta.json index 8e9f54f1d0..8872f25f52 100644 --- a/Resources/Textures/Objects/Specific/Medical/medipen.rsi/meta.json +++ b/Resources/Textures/Objects/Specific/Medical/medipen.rsi/meta.json @@ -96,6 +96,24 @@ }, { "name": "medipen-inhand-right" + }, + { + "name": "punctpen" + }, + { + "name": "punctpen_empty" + }, + { + "name": "pyrapen" + }, + { + "name": "pyrapen_empty" + }, + { + "name": "dexpen" + }, + { + "name": "dexpen_empty" } ] } diff --git a/Resources/Textures/Objects/Specific/Medical/medipen.rsi/punctpen.png b/Resources/Textures/Objects/Specific/Medical/medipen.rsi/punctpen.png new file mode 100644 index 0000000000000000000000000000000000000000..fa529e8d189535e042a31cca590cddc3ada837e8 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCikd1AIbUkME0JvSi7wUAvaewfgX40uX%o@ZsLIDy82tSLzimU%uQ>p|)ek zj>g7DppNtTZ+-$P{*oZS;QuIq;mVyE3xQIc1s;*b3=G_YAk0{w5%bXG_!3+0q3T9MhO@7PYHO(GM)5YTYKkM8q4{zgnj%jdfOdM_AnS!S^%wL N@O1TaS?83{1OUM_a?1b! literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/medipen.rsi/punctpen_empty.png b/Resources/Textures/Objects/Specific/Medical/medipen.rsi/punctpen_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..4bd9cd4858379faae8933ea2fd38884f95a7428a GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCikd1AIbUkME29@M6NUxmHV-EZMPR$F5zwCQO*{;lqb}*Q&g|z5gpJUcP*} zv9YnCLJg>+bM;MLAjMx2Gh-o8inG8YvY3H^TM&d9>r>(<0tG8PT^vI! z{NMJS7CIon!@xPU;>iE{Jl{RHoR2L%{_fz6tsN`b|1J0&na~qCZkkfe9T3Tr)0oPFt{BqG+}$e-NLwz%A}iM-_f5Rh@T;;VO<6dz8-LVzVvZ q?ZB;{ToIP_JS#u2&vg!X&0BrmWO>@NU_PK57(8A5T-G@yGywnxT!1A2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/medipen.rsi/pyrapen.png b/Resources/Textures/Objects/Specific/Medical/medipen.rsi/pyrapen.png new file mode 100644 index 0000000000000000000000000000000000000000..fee075cc3bef3ea8eea9fc2f5fd7e1d7f39c7e2a GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCikd1AIbUk1vT`vSi7wUAvYwS$()L0SG>P_;7D;mC|pSEAFVdQ&MBb@0F)$g8vpKsU_yrh*Nh9D(-!QOD4K1`AH-)ZaEtrXQH7sMRp%XIxQe629;Gw5*lf#p pJ8VM%xNb!1@J z*w6hZkrl|-3h)VWRaI5Bx3@1XWe5!oHINawdGltj=zqrl_jTDAW*Qr>U%!4wziol9 zDp0xZ6VVJH#a9yK7yKU?Ft{GLa{?&CS>O>_3{-Fggc+x5^GO38Fw@h;F{C2y?X81F zhYWaF0yGUDO!)P`emmFIgYCznmQLV1{BG&Dgg4?sJ4%-RE#^>YU|@m~4cnPIwwe8` z(Eqk;nV#0hh>~lXQTmhDdc{ut&#DyFrMv&fm+d#QgHEkxSR0e?TEY>axjp-%wX0Rt8R2L?tc@!@5| bwSA0zXH3)Ixu}-|V~)Yo)z4*}Q$iB}1E=jS literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..75934554bfae3c552bf228829cc2f6e6018c4ef8 GIT binary patch literal 598 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl|-3h)VWEiGlRx3^bSRSgXdy?OJdfs6p-|NFV3|JScyKhxM)myMyoS9M3f zEl_!McA5u};wuUA3;vG`7+eqBIRTX6Ebxdd1}ZoL!i-b3`J{mknC@@dvo=`7-K!|`<3H+ zAXe{S@=5ReI{Z6X%B44OR#>_!gjUx76H;JWw8dQi@1!iRx1au4JM8gz^yt6yf~S$Y z&hTw$JsG<|bPe+*=fjZ;rUo-id|p#fX3~(o?^;bjCu79Z{fAYzNcEdBAK2V~VBg#| z-UsZyFN}Sr`n^FE;bctKgLsBjwe`xIw(oy^J#fdp@8(7(%@tz4{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/meta.json new file mode 100644 index 0000000000..c634ba82a3 --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "by alzore_ (discord) based on the proto-kinetic crusher", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/wielded-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..e8e9a267ff2eb9b55ab0083fedda98514671c026 GIT binary patch literal 599 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl`{3-AeXwYRrdQ&S5K4OLZDHINY~D`O}vWnlb&KUeg>E*ry4W8tQ$9O ztY5$W=FOWs`fUq*Re@U7EZ4sUQbHv`e!>6I0mGyH`-OnAoCO|{#S9F5M?jcysy3fA z&_O+(E{-7;ac^&(oYt%$;u@%QM9nPp-~aPsGtwtB=xIcrd~!!n(dI^zap33aAdjE` z4u&hfQcH`uZP(skuC;V&q}i==I%l1o7?PJnnjKrh@UAp>*0mD7s@^~4nsaAwTlfA` zad-NqTU&Z7Z>y^DGWKreW)MDNyaQ)msJG=smIc6;3ej<$=- zzWnk_c)VV|id{`QbDB@eErti18ByGf#(BU}aCTahto-s-bNaWw_grVk7_-Z5LX0fy zmD0=W$~l&3D_3tVaS^`Hc-QQ-EK_;?1NE;i+jFkIJ04m3XaB#Qou~Q!r0wV5wyXNu ztvR9d-yHZ@UH|Ua%d3G0mQ20$|6j-4I9c|d@I1jK;m7+Ec9nE1?6l&WvHq@-$67na g8Z{)h)JPhfuNRXtcKKl&6ao_WboFyt=akR{0DdU&umAu6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/crusher-inhands.rsi/wielded-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..4ef9c388d62a58017b13116d133dc50fddcd07b8 GIT binary patch literal 601 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl`{3-AeXRZ~;5x3^bSRSgXdHINa|Wn;({{m=OSerYK~SsBAjW8teZD) zu3x|Y#*G_0`fUq*Re@SBJviJAq=ZU>{DS|Z1BOTY_X`1KISV`@iy0XBj({-ZRBb+K zpo986T^vIy;@;jmTXe{Phb3W+MyDd@mG}QQ-8eR7%h6A}cn+t2cS>6Far*q|5)OGj zMiv1F1{C4~v&D|0gyW^LA?_P@FbW>g(rovzVpyf%uvJEBBSX>o8H+BjxhH?Reyhx0 z|JG#7+~<}KpO)^LlPGa4xaZttuiwwQmK+MUtX}dhW**a{%jfL3?^rX@wbW5AZ|R0_ zX(8_p?AtNt1k>Ai?KO98KB&f+7q0T#RvfwFX^no&X(w$31eRO`$)!e&{ z?9%gOZ?L{;i#rrLXL29^CHv&^Bp{Tp{V9{BBq f9F+2GEd{Ln(nh=Ut=>%nMi+yptDnm{r-UW|*iG%| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/icon.png b/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/icon.png index d9b6ca8157b74b5484b09fb1baecec7238373cd2..1df2bf438850dfc03a279ea0ce8dc98c3f672207 100644 GIT binary patch delta 396 zcmX@Zx}JH0WIZzj1B1(wu46!ou{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU$hHfKQ04 zs;a8Jy?uJRNoZ(jX(>ZiR@Tj%Hw|P2az+2|=(kKKNMNS1 zae=QYQ1@vY88#p#ToU9L{2v)`fjJDDYVUANR1~jgc;M;c7-Hc+chXzFCIcSVX!R)z z!*2ezU$b4dTVC7v^RB>r}xHnqnbOpT%4Y2-v$iL~h=KUjbXc zbGJ8rt^c5Zu>7~7@0|QS!h7VkeP3_+%-^_2{`2RMe|iZgj`2pOJg!Y3}>% z$FaBMmTr9TKk!I-ho%L0Rf=xw`Tc!U|J&yLpwo5&Z8A*DZ64??VQg;@l&f99 i%Jcubf^&qIrhm_UE4e`K>l1;&!QkoY=d#Wzp$Pz#hOkQj delta 703 zcmV;w0zmz*1Iz`G8Gi-<0047(dh`GQ010qNS#tmY4#WTe4#WYKD-Ig~00MqVL_t(| zoW+;FOB-Pr$Dcr|OpdWg37%T$jy;A;B;$8+FA2>AHr8NGWu;R@Ka zw{=9NlXETn&40}M-UTenir_Gy3urswFJBOCt?baZjamAU|AV(VEFr^@Kso>kd@uh?T$t2?<24oZ)DHCX)$f1^_RWN&=2;EICNDs+{4= zALhCfkgHeW2rs$2;1KOtzz}c zg$zb?aDU$de&HNQ;76?)qFy z0d?9Tp$?r+f;x;=fNv)G9?uWF+h_%*;^bb}hiSdo*bWP>7065*4&Z~vGqSP;aV`%F z-XtKyuWzM7h2IiT;kcT0GgMs(;D^ND0Sw$}UpV2O0B5~8OxFHE-{4IGSZ?BMc4GF6 leF zuUPAy97`kTtg-ka8sz`M%R{yP%-)Fw=lETGOzym&E}ehK(mkP%gQ3`kVTLl(0U1Gt zXB`X%?ko+KN(^TN8Ljw&bj0S)HZu6blym!>qO*#SfdtPSx5W?H>|*Pfp9)o(8M!`^ zypXkZ&dr>*XUApMr)P7XxWaOwm@{G;>*~9%OFwhpQ3_TO3s`^s?)Q%sJw{C`i#WxM zsMW^%wfA^#xyQ*iccHIF_=Oiw??~>|zgWGw*uUKM`L9aVRiB zbl$eydv~opx9a)^)r;K_{UmTu^pgP#N@!pP)bS36%YT`y`tw~Fc>8{_wrT8~Um9BK z^F>)g(4jfI?p$GErPEg@cBzYZ`x9IomKOK7m(7!6_mPRqwr>(-yrP~E`7`%qjC$f< zjzUAFhI11-Kg2ct5)4}{y6Bszgx~}I^{Y2zE|OQA#t^!nKdS1FYSG=$*tvf>Tv8bC z{i?mvcu2tNm!QZ(rbXA@|84eeuKgwW=RUV+!HZwDLS)z4*}Q$iB}St=AX diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/inhand-right.png deleted file mode 100644 index dcf606531ba187e61220fa6fa327c4490e1d29fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|S%3 zr;B4q#hkaZ_GcXm5IJUlP`zNnq}YjG2UkXCYjU)1b3SI*7@}G7<{Ep!ipdw27icso zOxaadB0YY8H!<`6Cg{cKsEk9*)uRpzT62FwmOrJ2bZ|(QLn;-aD^DZuHYt(`kRmLq7%}?w< zbJ2QVRek*7)!LIM9lTpUx5b|E-o)#z;f80w=vGf@w>$j8ul>*8(v$lv><`4|%SqYk z9&G;h*?jtMFA2N3Hx6HC-K8I<=O6xsrS`lZym}Cp|ZET;-V~XTo_vpMh2K z3^)TKM_1wHyv8N3^K}(g&STulch!Aq&$`wdH=`UT*)p#UJ3Y^DdB(o8A8OusIQ-dv z52)(pJjP${yKcR+_*}yr{_%Rh%7gvYY!eH1GyQjZ<5a+ zP%CEr%Fxn#k;|j_e8W0+g`NY!3uZr>*QoJZ59*&k3=L8i5*n{>UI(Tp22WQ%mvv4F FO#mFS8wLOX diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/meta.json index 2d91fb460b..8a70dbd998 100644 --- a/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "https://github.com/Citadel-Station-13/Citadel-Station-13-RP/blob/817e7c1f225876b45891e3f06908e6d032f0a8bc/icons/obj/mining.dmi", + "copyright": "https://github.com/Citadel-Station-13/Citadel-Station-13-RP/blob/817e7c1f225876b45891e3f06908e6d032f0a8bc/icons/obj/mining.dmi and modified by alzore_ (discord)", "size": { "x": 32, "y": 32 @@ -21,22 +21,6 @@ 0.3 ] ] - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "wielded-inhand-left", - "directions": 4 - }, - { - "name": "wielded-inhand-right", - "directions": 4 } ] -} \ No newline at end of file +} diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/crusher.rsi/wielded-inhand-left.png deleted file mode 100644 index 6b55e43f72e5bc32ecda58186c6fc39ada252bcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|V1b zPZ!6KiaBp*9qbkglsUfNDWK$Ln1_p%M7Ln)8qwX`gT#7TGY&RS`OUs%EvuyW1>J9A z5>Grc^jYUxRjydesyK?8%WK+zHjlq zpNG>;_3K_Rc+1(J=V zY|b#}-s<#Ms0Bx$B8T{aUjAMer8jQ^6aGGapEpUoL+Wtc znU#3%&)enie!E<+6v^S1_;#j2&YJgP-~;PlX{9gr6n?VW$N8hRU`dl)?~&%696Nuq zyJRlea3Rj7BH)B#KwuN2XI_)XVpXNc7CEn|Ac2ohT#waCr&-U=n|-$|ywh0z#+yGk z=9<5^HlCe&zeUl~i@~E$h+)!VmWC%9j0)&nGe)6wzfC)D2B+=%PZ@hjGW}&*8@n ziZ-sfnRCl!wQg+UQFZCxQ|x)9HqPGJy<^XZPdAu9 zq}E9B=LM`{&Jxy^*G%qA;BuI`aph+n(?ElKso7fJ-`~r+CH1;&_qNT!cNMmlTPqau zO0To_4c=O~p3OeuzvSEb{%06fyAf5e#%^RAvrpIa%dzNK})dqMc&bZtBPw+&g{*GCU&2t6kUvMlE*&R21 z?rT*8ofbI}$J<~3sQp;)^uqCG==wtwWKNS%G}%0G|-o z^mLP(H*cz{s)mM!W@TmV=(jEKRkgRb2g)n2bz2FfI7@>3g8xGSL$H5^&_qS?dWOTE zE{-7)?r*1^=4(~panaoO>wmn?RV9vKp`^Sbaa-xE6EX!yS^jl!$0+Q0u)XO($yyVe zqxZNA0}l$dAD3A2XH`>a%7!wpe`YUkBy+C%lX_w0ae}0f zJ&=CzC-;J3Gi#c>Lf2X2epcp3>zbKZ|2~fMs9wL{p(${mHrM6-7alQ*8yL@DrBFMs UYqR46pf?#jUHx3vIVCg!0Ey3o(*OVf delta 488 zcmaFG^qqNvWIY=L1H-D!!h1l9v%n*=n1O-s2naJy)#j6CU|?M7>EaktG3V_qdoSid zf#V;kwT0MT#u!3m)?SwPSM%V37Ow|KfdK@9V2py?VP@fy>FDVcWx`gqSD zbqZjAVPqrD>?pe6{D&A}MVBlFe*ewCo@aO2oVVsbZ^*RQH)}cDhPd2@m&?9?i1}Rh z`KYh$?D)rTQ+4bA=_~R%l$U+|XT4DVWO4Zdu1;nT{&l5l&*j?^Y}gw<$}k)&W{^0~ zh|b~oc|2+Tq1#-$q@PUvG2wRBLDsvxe7>KpS=6^mzbTq#a_Hn+w%eCtX02lMu=_Mc ztck1P%ZE8^O%@Eft^4htv_D@Wc!V*db7!KCU1;0$SsW~OY1wNw$<)^EmHxWzx~kib z`aQCxeW$V;j>+v`tNZ1}*^iO+VmI2Ky;u8U`FIWEH|b9~J2V;;;o%4h)W3{x_r1F( U@P}zHFftiDUHx3vIVCg!0EK1OLI3~& diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_dagger.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/crusher_dagger.rsi/inhand-right.png index cce061bab2933eef43d0399aa85e5c6a4a3fe57d..ae6e01f4a50fd3ab86113959a90076dd0f11a240 100644 GIT binary patch delta 325 zcmaFQ{E}&cWFj*I1H;_yjcNS%G}%0G|-o zn>TN!r<;U^hN`NnW@TmV=(jEKRkgRb2g+~UdUPF-;w%aB3;quU48i^tLK79m>lqGt zx;TbJxWAotTB=2X!_9E_hkyPyD}Gq6m~u-e?chz9Q}t^^nf4uFQRA5Lz?{k9xPI}D ziYkGex}y*NOk@4s)%eMp`x?)j{-z9$^O6?xSvVf_NAxgjo@Dy9XmYpWKEKmV-7+zD z&dUSqmAErfodQ0&Zs_9l5in@vWK#PP>=-%gx6og{i{C!onf{`@W10E++Ri%W71h6g zN;}_O^JHy`=KLT!h*-T9r|oTjDj*k_w7_kQ(NF9~jao_Q=!7jN#Kyi9AO z)|2+or`D&QZ`b=0QIYsXBgab6#cluI5S2eNYWG>M3B=8?_S?&Y=}sg^H?#`w5_{-- zpuV|9?|QZ1h4uSye-U(QDrRi|`h91M-dRi058;YMT8gR`!Vk3eC{AHfXNqYzZ<&yw zdmy~RIligiYwJ`7$qWCE##b~?EGR90wVM%xNb!1@J z*w6hZkrl|-4e$wZy?OIyX(>ZiR+hcJy{f9JfsDZV_3Lv*|1UP)GBJwBn_&*9@xN>L4LZB39fk$L90|Va?5N4dJ%_j|X#1c;z$B>G+ zx3|vb9aa!vNsykV@=x>q{~brQ+TSXk?g?GqWmL==#!z3jBX!xY^MVcxj4T2WqM@9{ zCcfxd<_*(gUq*$k?@vx>uzV^oL0J0%L-8iY0}+hO8_NDq%42*m%}Y39e~S~tnkhg2 z#a>wU)mz2lz^T86JO1}SC`@PJS@70o$A3kOInx=YZJm;7Q#;Ema(W#j3!BdCCcEid zch*|)ac$TWA`vkCPW$5qhSN7W8vdFd*p|~aUnfoP2b)=qyU_>5C7bKNI?Aw2_-?l# zsO*ITLqpA{zuTKHy9Y8b6fUY`kE*yU$)Mc8z{H_|oyccD@Jx7jP{RhB2hJj#5)LtP z9~8S-SP}xjv_V1ynATv>;Q#T!m8rmeh0OzIan1yWAh{2Y-7F90B~%_@*AYsXE%cO8 zeu)PITUo4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..6949718a597117c697fe0311b2475cd2fa75e5f9 GIT binary patch literal 620 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl|-4e$wZy?OIyR#sMNDTBSey{f9}`t|D#WCR%h-_I5OKhxM)myIDbG_=51 zbw|G~P)A$j^7lZBza+>n_&*9@xN>L4LZB39fk$L90|Va?5N4dJ%_j|X#9B`m$B>G+ zx3^9g9ai9B4M-N5bi?%j|D6+q&G;rYu-z%Cdha!}@W{txb>ENEL9T~``K%W1#Wqhl z3JU$6t~hgXCd2z=CMJP#>HNLUHFX8z%pY_)5_=Nz=gj@jRKc}w zyCM_U_UyWU+6}C~OOqLD(r^BhRPYPt_^$f*#muL2ho;C*XSUeFBT(S~ac5V3TN55b3?N`pb^-D|H7Ya={|99(_cM4ZZ zMW6kPiYgb#+SOHDue;WoLp1j3&i%8F$+i?lr@mXiJePeTo5H!jy(VuJrbufS*K6xq za~wT)>(2fOuVh<<8n*1LSG;P?!Fr&0;)8UCf7z?f-e8E@YxZ3~^}eIW(wT>ZE3$hR z9@mzT=YG(;w>i&{;qG;hBN7dMubEqGzL*zyAv^WKe&(ba24AI;*2fFyDu84>UHx3v IIVCg!00hGL3IG5A literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/meta.json new file mode 100644 index 0000000000..c6fb3d12d8 --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "by alzore_ (discord) based on the proto-kinetic crusher glaive", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/wielded-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..330b936fb254e39bad9b220d6dd9c291e9aecaca GIT binary patch literal 536 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl|-3h)VWRaI3jEoCr}5n%j(KUeg>E*rzmn>W|5UvF=3KhxMaG&FQaziol9 zDp2{&g6ai8imxQdFZe$)U~oNf=LArOv%n*=7^vU~2s2LA=930GAlB2xF{C2y?X9zA z%?bi-4+VLZ)_$+wotkhdOUfeXt*6-g?VdkoKJ3(MUZc+kGz0}aux0!tzsBqG-!~JK z&&BFrShjSpZ-ktmP_MLlx%WxtUfp?Jv)#V0xmot+xuu2gt=&4Ob&p9Dl^A|8P?`Q_ z(S9%CXE$$$oLjfnpT+mqbT=U|LWJSHn(-I z-ER9Ha%uM zE?-DeeYbOhvF*=w+X_v$^449;W;s1+y}%mz{qLDgHm|&v=p7jQxvE#8_L=$zN$dGe zEBDzqUc1`-Yts4a965V0KCI*mH@Eiwe{ib&=s#s3bzDt3<%K(=|0#D;b8_p?l2 Tq-;pM2a@n~^>bP0l+XkK8o$z0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive-inhands.rsi/wielded-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..2d1a481266dd20b91a96205758635bf8bde856e9 GIT binary patch literal 535 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl|-3h)VWRaI3rkP#>?Wzc0~$QAw1`2W7Wy?tnC=uBhd_3PK)ym@m+ziol9 zDp2`B(*+qoimxQdFZe$)U~oNf=LArOv%n*=7^vU~2s2LA=930GAjZ?hF{C2y?X8PN zO$Gw34}Du%GAjRH&n@d*>gTy>h3xT}|6^8k?mn#^Clnbk12hE%9FS&w67Thwfz#1W zC-t#LbmO#Xy>(Gji_WU5^CWL@{rSlvOz@cElv4ZSpH*IEZ&@-$@3P6u5Z^h^k7oT# zoB2G$^k&qyZ%4ZR6htR&+OB)ir1D)(WY+cbO+FW%+}gBRJ(OkY-TSvw6;F#rUkS?M zTXyZ=?o;1#x7-ZZeRJX-R0`bOnj@#7F6XdnDk>MyTGoyya&p<9P1CSN@w?ri@!Ae zZsVVgH}CFc{=lvituRc8-OqSsx|s=! Rxzl-&jHj!g%Q~loCIDCo)Z_pF literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/icon.png b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/icon.png index 980af14aa86c025fc1be958d55d6902884cca2ab..e22b636f3da9e25706672b73b822daca1573690b 100644 GIT binary patch delta 370 zcmaFGGL?CPWIZzj1B1(wu46!ou{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU$hHfKQ0) z&6_vV(@pH{?bokgUs}qbs;Zimm1Q6!5E>eqEBb#&zb(VOt&IQgAKwz8%f>KKNMNS1 zae=QYQ1_BG9ic!0&^HP)!yNls3=~~aLm)iF~q{Zc7nH9vjPu;=xntG z%clO8-}W%rF?mL>{<($|BJ3)eY{fl!g4wK}x$iAjsFYy2xmZ>tzm{picPj>`H+#5_ z{BAh=n&I!Rw`c8H5~FK>Hui8al=q*08G7K&lL^7qwcIo8c>>zcm?r!)ivMHk@!Ikh zwoa#KLi+Rb)^D);+bu?uAJa- z5orN}MY@#I<14%_AhMAkfPP-|4gN@gUN`!4 qflJLV{)0f{wDVO!(=^{&-kATOhZR63qbJA!0000O*Na%yE`C^QR2~SwcEO%BNIOqM^1B{ct9&bqU~?)#)yjc zjSqLPYnIr+RiJk0?~@7-rhR!!kIr&gJclPy!p7}Ke#Gs1yR-_GTQ?s_WZ4T{%m1GC z_b0D~kszSo5;iszrfRoV4GY_9^-p+H6j z8BqpIYK{ieieDTSzXWfvCS09SRXZg#BaHFN!@FODJQIW)rXMVfylxtKcEVzj^GXc$ zcZznZ@a8XE=d_vQ0at#Z>Khi8wcV}^=@s2mH_Ya4x^`GeA#6Uw(eE!B1vs8RVtF8^ zalZIN?wT2@2d=#j&S?0Qd*XxGgKO{4OGdYSf9qwb@!-nW-^o8#izmL?%g#DyS6#hM x@LrDKid-g5*7A=(?}~31pV1ABoDT61%&+gsBy#kg{Rd1E44$rjF6*2UngEgz_AdYc diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/inhand-right.png deleted file mode 100644 index e2d24c9ee8af39cd2379d386af1a2122da0879fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 568 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|VnL zPZ!6KiaBp*`DZmdh#cGRAa2_z@_mwCaifw*i_=S2Ce^*3kJI!n`G&FPKQP;|?u(e2 zztO>EStjQ^((nCle8NAo^M1aJddfZC8OlrtWCR(WbubvXvou&LF`N-(47R@U{`=LU zoiPUj)i@*8Ul)~mp2cX_qP|XO!Qp%}=^Zscg%`8B1U~VtNSeaHHD9IE{9)%orWzi9 z9wtN0ib?D#2|8RDISk%#5%bax^ z^2+@C%PT^cmOnH-?(=o(hU)qiW%KVZkgm~vP_cady!Za+_qM29NO=9>%e_plA2NGR zR{H&PW&wICp^t;1*o6VjzsFc-tP-EG`rUyQ440#yU6~(rY86W|Q_fZH8`Bb88hUk$ zU$rlDoVBd<|F(ZC=jj}Hwr=CJf|^X%Ln(~gwx5|Tlu>@mWHRfSK>Y=(H*UOBl%(# zl-kb&mX&SsV(jUMX3?q`=_m>gTe~DWM4f Dl|1t* diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/meta.json index 2d91fb460b..8a70dbd998 100644 --- a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "https://github.com/Citadel-Station-13/Citadel-Station-13-RP/blob/817e7c1f225876b45891e3f06908e6d032f0a8bc/icons/obj/mining.dmi", + "copyright": "https://github.com/Citadel-Station-13/Citadel-Station-13-RP/blob/817e7c1f225876b45891e3f06908e6d032f0a8bc/icons/obj/mining.dmi and modified by alzore_ (discord)", "size": { "x": 32, "y": 32 @@ -21,22 +21,6 @@ 0.3 ] ] - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "wielded-inhand-left", - "directions": 4 - }, - { - "name": "wielded-inhand-right", - "directions": 4 } ] -} \ No newline at end of file +} diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/wielded-inhand-left.png deleted file mode 100644 index ce6c530f30cbc37d39d8a17ab069a3a9c60f73a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 567 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|Vnr zPZ!6KiaBp*?e{wrAacxJnB6=!MImolqJr92MxH*sJ{xu^aruKsHMp7AA9!&n#l)_` zmxnpgHR;tO=@?5D@!M6=JEz$nF0bQ$yZ1uz`SsJwEYhW)tYDb1n8~4!i@{Qh0gclT z%AR2&b<8ww{q>7kTLV^K-L}DT4%4A#+v4KVmd&T9UwM>cG}SA$Oz!x{nsa?$tM*>W zSGlOvc6edt_S+IXY%4#WOli895fbJ1|J{+8`}-87>Mhql6)C9N)Bo@B@%4p~Q~s_A zTmAX-lL!HpV|p=tPxYQFmdCT4C=8ntqhG!DKgUEHmH8_fp6>}h@VD7IposBu@^zax zNpHU|_Y~7J&{XtXetD+)yxzCYaeC9H+A!CMM}LutICg&lM=f`Qj3`4<2*Zg$Mg@0P zJe)aOrybvY_g&QKhuufwW;LX3&Ri0cxBAGm{ihzEcHvsNZ=*N2!0AiU0C?=X7Mh$H&4g%w5-3G@sqDCQ*Qq9UqAnbZBMYZcUkl{ zcgGLCZ`BW6G?}OyuYXDS!Ra--lmE=Iet)@t!cp%7@n_j)FY@7U+{fmK2!Ch&2hyK+ W9#3a}tRDhQ2@IaDelF{r5}E*3Z1E!i diff --git a/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/crusher_glaive.rsi/wielded-inhand-right.png deleted file mode 100644 index 84abf8014872d68e3dda5c27c3762dd628caffae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 520 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|VnO zPZ!6KiaBp*?e#hwAklW;N$zN=eHG@SM@tXy0keB`Kif#BOq(wXgkP9NErE-hp+ z*9;PO-=4hRDQnjJ$xB`+y#MXsd2agW&re?}p8m-+L77p(oynn(r9p<1!BU8!NQL2v z2g8Yp3?K>h2)*ffCQ^wTBc8~ed;U3Wm#qX(%su&i@W5{ zuP&5-_;TXz-Ij;1el31$m>O};^<&-s{)YuWHZ$u?NZlH>)1q&?XUXo^?V0Ky7wv21 zJTvcJVP#zoQAt7!d*SuhsBPR`a(%}iPxDRsesam|>~-;hIu8ql z%>Rk=OHMwOs{j0D$*WVpZtZ42*_-e5$M}-v?|Wx2xCTX5U-3~h|LUzWmisSDv|bCo$=Lhu)>7*QZ(?ktjT1N{mCAfKl>PbD z==^cb-rrL%Zds?Gejr>wAtjrwW-Fub%FSh0WqiwHAM&lR3jTk3R^zIz_0qL0j)+iw c!CJ#?%5Yd}k#M&xFlre*UHx3vIVCg!0Kwwl6#xJL diff --git a/Resources/Textures/Structures/Machines/station_map.rsi/meta.json b/Resources/Textures/Structures/Machines/station_map.rsi/meta.json index a1da3673bb..12c6a212a1 100644 --- a/Resources/Textures/Structures/Machines/station_map.rsi/meta.json +++ b/Resources/Textures/Structures/Machines/station_map.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC0-1.0", - "copyright": "Made by brainfood1183 (github) for ss14", + "copyright": "Made by brainfood1183 (github) for ss14 and modified by Flareguy for ss14. station_map_broken based on broken state in Cryogenic2.dmi from vgstation13 at https://github.com/vgstation-coders/vgstation13/blob/96246eed6e19899971a6d18e849fa6fe0b8ab52a/icons/obj/Cryogenic2.dmi", "size": { "x": 32, "y": 32 diff --git a/Resources/Textures/Structures/Machines/station_map.rsi/station_map0.png b/Resources/Textures/Structures/Machines/station_map.rsi/station_map0.png index 9c22f5852cfed9bd71c08363090b16159202c22c..a15bffd4487353a9d031286226f66f2081439a99 100644 GIT binary patch delta 732 zcmdm4@lI@lWF#{K1B1(wu46!ou{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU$hKfKQ04 zjEqc3NQj1phNY#Ytb(Stwl+{EV$Y%;AjMu1c)mncXHTiZgKqPPFo8G3F3^szB}fv6B>2M{#_Lfv6@0r6B=)IgLUixG%wVNn+4{?a;%{cN^A0BR&5aT3ah^uk~V!LeRgarAQfqB;UMZDTPlds zVo%qBskf=fE%5cV^2jVM$uFt|T7_bJaB3mQ_G9c|dw#GRfVAs##Db{F9Cje;21kT5 zLYIPq4cPjeOk|_LLJ+ec#@pzlTRXXq6C7CUIL$$(zJyRJT;Ont;?e^N_HdbksH0q_ z^$;5&cDbY$Cl_TFlw{`Tfh~oI2D!Kac|eP-fL7(EmL!6B_7w$*$=RtT3aNQ1wn{}x z_ICUWKV1W+fg(>A#}Etux0Ag28VopCGc$MopV<1zlr*<{an^LB{Ts53G~sw literal 15417 zcmeI3eQX=$9mg-FDQzm+wF+ujwaqoG1nBu*eYS6o+ca)TwmGDZOVa^q&v%cLQ*58> zyAa0{>zhEdTcv8_rA)Nd1}lR?1PFz725A@#o{b_FZ4tMP1X?8I8klkNr1$7W{7(ixco` zPOfvkNm27&xBnU*yk*{Eijtf4M4#0c`@XCi8K0sVN#HAFav&0TkWC}`-;e0Gp zFGy3%F}dM<+8LUrG9V2yAZwX0j;kA&8#FA#95kj$S$0pG7}g{fE9b5|-b|)$YSUVE zH$+fES~t>6jOG9n2c|KcSHY^g;jLU>@9r%b6$-<9 zl{@l4v5b7eFwzlsmi0^`^mKGMv&z%DPS0w_hU@aX_PkiXzaOA7}y>2(babKg`&R z7fMvdRhk>6_WIH(5d;JQ7FSG)L03AdY8)MsSXJ}~B+eh?zqE8J=oeJYmgXi$?FV#H z1)Rw7e2Q0+|5JKEhcnyd;amnqAPKxG(4xwRXi)%AFPTiyDhP&@0OTZvQuRgM)>`=0 zmBp3LUJwT}TKFn2DtGi% zsv=q>2?7Lf5?pvbh?n3(fZ$Dn3(p7f5?lxnyh(83`5<0`3ju;R2`)Sz#7l4?K=3BP zh3A8K2`&T(-Xys2d=M|eg#f{u1Q(tU;w88cAb6AD!t+7A1Q!AXZxUR1K8Tm#LV(~+ zf(y?F@e*7J5WGon;rSq5f(rqHHwi90AH+*=AwcjZ!G-68cnK~92;L;P@O%(2!G!?9 zn*p)HH{E*w9- z;NDjnqPNi(X1?G0@$MVu?1&FO*0A;P#-Fq=-oEqND!xCc+m! zoy)y;ZO{3?9;WnPuKvx8(f>SoI{3{q*ZpDZ{g*%g{hs@OyL9)5Z*4oibM^-ZZdVk2 zSK^5iKfCm=6Z3y?ZjAc(-`0-L+}XXO*mvf@?bls+=+<4cF8+y0ynFK>(|@_DW#0`K z7w-Pnr#G!z^GKfmnp2kzXrSA64+H&<_EK7Vi9 z+o2avY>r%+`QoyJ^m}K8%c{o~U|wqIV@(tCdM c+ZU-L!l_fAd^B;?ez~`6Rd;l3<;HFQ1yvsMg8%>k diff --git a/Resources/Textures/Structures/Machines/station_map.rsi/station_map_broken.png b/Resources/Textures/Structures/Machines/station_map.rsi/station_map_broken.png index 7297442f10813defdc0deaf445505decdb66008c..6228597a401255050e6cd7403deccba77ac7e0d2 100644 GIT binary patch delta 584 zcmV-O0=NCEe&Ga=B!2;OQb$4nuFf3k0006TNklb;z6n(8KRVor}T`(wz zV8{|SMo0%s%^kXC=pnLlhg9kUjEq@O#UY}KEFF`*+kVgA z{~H7U_+#9d9E1?oCed!U({gD$2_ek3?Kb(b*=)2TN*yx!`+wKD6>|D`ZxnH7nk2|S zmzS{*XL$cQ3lT*a1t{e4B?^|naAx%0*3ORsSaQdrU{yH&5srT>%rT>0KnZR}?rO=S z-~myvt`zxm0dcxGfNW=61Q3RA2*Wo)E=Xg&$Ret9KtdEe2oWg}04y-yPL7r4~Q;gxnaccr{a#awd3rG?ht79$`U`Y#Wppu*Bno*sE z!&&-|*kGZ`HGU(2KHjHqf|>=I!1NXXuJK7Gi)d4T=}}slguPy`WO>`RZ43qjVT=Bv zHK9^Kw?W%2S>8^P1pR(r*rLB^O{lDb{eG{t02J~hNlJd*936}~0JN6}rt|;DRp1-0 WBMgajKLF4G00006e7REJ?$|GZrHWcaIBJ`eVS-=Vs?Z{Sa#KyFzG z!v-8xJ}E253>b!CPkksBm&&CD&oI2?GqQrj0b|$~fW0xyIW`<%`I$i0bHFS5GYvQ1 zdDoy9g-pW~O95FB$N?2%Ze0)*)lDkq>t^x}!7$dPbA}n{zz1YjANE!HLrgf+5b?{v zYo(bm=p$X^nVE(xC7`~vpirM91%cjTwBkHzwdrjRqsd~knQa+*iZodWk|t;pr)b7Z zGG(nO9SO$88DBHozLvtv~;IZ~w*gu?}-rC$5IxYBWYl@I#|lVnIrWG10^`? z66o2W2v0V)GNF$$7Xi-2!P|J7;NfvVL$(%RW^tCYa=4AP({_rbS-_dvLnLw2B~-4c zlt69g6&WdkBJk_Zt??3woIwFL7y`-;n`vm@Vml74=&Fvb?Z{5eu)K15xp-v*1cH<3 z)EXaFhov*xLF}5&dqdF0y!#k66~M2yfks_LdUfw4Bzfc-HVCr3aBI1jy*=u+vl;3> zd6nFkM1{ohz%oTDw-F zQ@QGIi5LHEJ5SEb)u7 z3!X=jfg;TbR?0n6^Z+k{xAVYdwOD9)K%&j4MWGl5m8EVG9^fHmKcQiyhz+VpYFO5t zVS*xN7)@2ejdx@-jJCqtdialm==e*~WuNTW#qQ@td`9=vE8Gl1h`OlZQs;wcHCzY~by35m&Ii$IxDX)fqJ~SI52Dp@Awbkc4VO9}M62OK zfT)WaE_FVLR>Oq=Q5Q8_>UQHFszEiurJFoj9HCggQexa zdT#=T^*EpB&MFRH{OZ*+{)e+3UGVO;?6Qd$EAtP{$kF?@>F2I~{pLmYBSjm>J+iUM zb~EqL*UjJcNK0GdTVh@@wa45)ZhEc(Z`_uVAvc~LURIi(Uw_Gd!sGdu@Y(lm8{1B; zTbXf^TjhKC@dImm{ zg2Ujz;;-6R^V*-!o|WHt@YD?XaI0}rFHA4zumfu#mZkx!-m;z6yDkU z)EeD04VjOdPfazTd}xSD4VbfumeZyV4tudr`4Rdx#8U2hqrIv^N_Aj`FUN| zAI_BHdk$x(yKkoVZmM&pRzRu#t!r)Rd+S8YNwzw* z=R|VR_U+BJ&SgK_?H{@TV^4eu@Rr>3dPe0v3H%yyzYGK>4%|i&|&cd@3GmJYIN&9BZ zrZAYlFaPqw%L8ki-dnf77<~Nhj*8A}*rKf8 W=I^(!U9UXOo;QAy`_1g~dH(_XKN64t diff --git a/Resources/Textures/Structures/Machines/station_map.rsi/station_map_frame0.png b/Resources/Textures/Structures/Machines/station_map.rsi/station_map_frame0.png index 460c86b896a6a470270efa82d8a4f4c609bb0359..1b6241a5754a7771d06b4c2fd5d5e6f21d3cee56 100644 GIT binary patch delta 397 zcmV;80doGhd#3}CB!2;OQb$4nuFf3k0004DNklb!4|u^iV*dSYxAe_Wh9w|00BOD7!(^q2mk)3JD)z>F(%7h z5&)z-`^-u3-mCr(H{o5_tw5XsGiS5XxVHoxx$TH(em{<^i}CmtTow>Q_@A3_PsF1F zu0R!#Y96i2Q-9pvrIbAdP18U`vJN!IF{e#esfh>xZW+niwxzD?R`z5Cn3+VR=nKTm zGz`PWz7gP@n;)OLu1^K=-h-J@Rn^Mg_x;SrP{(rZ(K#y&nXz2Gicj|-g literal 15800 zcmeI3e{37&8ON`T4H^n6>NZB(iL2Xa1A4ySw(oG zzH#0~tkV8@t;F{8KJW8=-upc7kMkdQV0g#PSN5#!VHoDhp~3V{^vMSQmwyhud)4Yk z=woGZaF@q0SDgy}R~)+Ws&x!=(;Ien%pc3#svB-03QRW#qm@Dt^=6plmP!#AQ_yE~ zaKd)_A`377GQ!$sUu0Cx2$|vloU{k4B{)*uku|DQhGs^#qtqEm<-xeP?=mJsq<8B9p#f)Oo&KE=S99)GbZ$qNZuQAn}sKp&pz! z8)kzU?|}pbK*DwBHwr1c{oj`gIkG%|wn@XNM^A6;R~GsK9p% zGL2?Tak`YR4b3!on1==E_#TQAyT%nKUElR4-6c{s-Ag7$HOXX}xx0?HQ0SW4^SA9q z2DBs;&dnlo+ZZ)EA|p$fhP>BO@**RNp!9H zKnVihEoEIdp9*K$a04MbFi@LS>{mx^$8^iy^+_HNY1O->2GhWYDM^rIPEgTbR*dOr zN{Ygbf~X5Zn@HFb)5y4{ZOwFONK#f*bxG4zwOymFC$53kj|qIRES2`YZ91l*TW+ZU z{FGe)6Ob=D6G^_+*w(W-tMmak@0QT8U`kH%-I}{brCnn>nAZJ{0X z6-;!tHXM076>b}*YuKjVN(u!fZYoBOQ#4WLL=l=?0sxsaRcOj$TodA|n&gAUizHg( zs?Uvjdv|F|fpJ+z#Z_`jB9zVKXWi3=j98j8tjf}9B6R7KWerU((gMd7U?)ukKR zk#zS$2?;?pRYTyc1TgD`0+Pz*1R2I+8j!S{(n!=MwkXkUB^#Y=Am7#}xE2##ix@Xl zO^$0Euw=+VOR+djGej;2fTaOVfC2!G6kTK%r5dz@B{0)DBWp`w1m4xz+FAm&GpGnk z9t?KazDQ$>Z5~?Ttgg@P+D@$lBRIWMMz8@wGs$B^Zs%btrm8YJ zAn|5AV%V<0{8-vX2e=pPCo;-Zi@_aT19vSI*ygAQhNWt|@vd!#VJo_=N53fe=1+=6 z`($$$yO>{ES9CE|F)f+|141?_E;1j?OL1X9$R@=_=7V`DE({3Sq`1g@FfYZ00U?_d z7nu*{rMNI4WRv0|^TE6n7Y2lEQe0#{n3v+hfRIg!i_8b}Qd}4ivPp4~`Cwj(3j;zn zDK0V}%u8`$K*%P=MdpKfDJ~2M*`&D0d@wJ?g#jU(6c?Ef=B2nWAY_x`BJ;t#6c+}B zY*JigKA4x{!hn!Xii^w#^HN+G5VA>ek@;X=iVFimHYqMLAIwW}VL-?x#YN_Wc_}Uo z2-&2#$b2v_#f1SOn?zhat%r1>gPzPSqepP>``7w2=?7N3yKDmHC z-(#3*fnnYsXBhoahPlRl_|Dh1Gt3HeDBYi}yfZ&4K5{R+YW+WF?tT0BulBz5?C6un zFC72q-0J+s3qSey;lF=4m&?q4e0tMCFf4BW^EL}qHyx${WA-H z{nmzGt?<;$$e+IaCF9uUTYmh^XGgw$-Y)l?oB57^_PQ%>&pi0+yH5RdGqd_k#qf@Q=Jcva_0L!Q z?QZr9NA~bf`CqIS`d@$Kx|vt^9C}N=dwllYXATd)7=38X`5)epncwi;n^#`A;pAn^ YfP4Pz$Gp7{)rJ|`wj+IX>-hKn1L(9;e*gdg diff --git a/Resources/Textures/Structures/Machines/station_map.rsi/station_map_frame1.png b/Resources/Textures/Structures/Machines/station_map.rsi/station_map_frame1.png index 4b6fd1babf7739947ea84136e81474ec89f19d00..83dfe28b291ef58fff374c32de3c2afbc0167e99 100644 GIT binary patch delta 618 zcmV-w0+s#ffB}L9kR*Qrb5ch_0Itp)=>Px%JV``BR9J=Wm$7TxKorJ*3d+#U9?o5A z@D+?fL!m{*#S|ha8A8Yu3Wjd^YdUo3Ur?N(kfl@T$(7%@B3;2jYcCPpB-8naeuz=Cph)ILvwP^^P&Us&l0z*)})l7>$>E<=$cA-ngl=y zk-LA=9+mP@T0k7tuC5HqNqa=|>Qz~HiwUT9^>BP}n|qULR}U*c>I;*X7VsxgD4^)} z%OW=mU>d;{>Y0BG!XVM-auEd?Sr365B)MwgeS0zH{wo6JBL2@xm=!##yv|xHDoVLoV45bb>*jwtP&rPosk*DIjtJmhE!q2{ zqiB3_bHi|JE1J8mi)C3_uh%OUFe^3-HKlt&pe#H>2o1n-oP_<(C-6KEDJ1}gVc@j- z=ug*pdHfE5H-iDK^>y|;9h_F5*B6@roB$#S5JFI^)e=5!+Xk{@MA??de{`;QhdlfC zA{u}G_=I9l&1T~4_3khl&-ccNGuv`yDUJ*9fBr%UF}?NiCi@-O84Nht*Z{z3_1QlE z5bgi|_AA@t>3seISx~(Iz)Jp{SeB*PwoTRxJmSIe8<)E9y(&-bD*ylh07*qoM6N<$ Ef`-d0O#lD@ literal 16488 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 M07*qoM6N<$f;PaB9RL6T literal 16277 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