From 55d1c715e594a7167f43bfdc5bf8be95b6a68020 Mon Sep 17 00:00:00 2001 From: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com> Date: Tue, 30 Apr 2024 00:45:33 +0530 Subject: [PATCH] Pulls2 (#27514) * New docking port sprites (#82729) * Adds text to lootpanel items [no gbp] (#82722) ## About The Pull Request Just some qol, this captures a small portion of the item name and fixes some icon clipping issues I clipped it at 5 because monke ![Screenshot 2024-04-17 034211](https://github.com/tgstation/tgstation/assets/42397676/64d9ce18-3722-4382-a58d-f58eb6b9f26c) ![gXR2XjslzR](https://github.com/tgstation/tgstation/assets/42397676/3fc93110-e35e-434a-b63b-89aa669090e7) ## Why It's Good For The Game Handy if youre in a rush and won't upgrade byond to fix the issue ## Changelog :cl: fix: Lootpanel additions: Condensed item names for the quick of draw /:cl: * Fixes tgui alert buttons (#82714) ## About The Pull Request Been on my mind for a long time I did this while relatively inexperienced (how do I center a div etc) Fixes an issue inherent to our stack implementation where reversing the direction caused strange spacing issues. This effectively reverses the extra margins in css so it looks identically spaced whether reversed/not
before/after Before (normal buttons) ![image](https://github.com/tgstation/tgstation/assets/42397676/a91f5522-b363-4069-9e71-9852b15e9d98) Before (large buttons) ![image](https://github.com/tgstation/tgstation/assets/42397676/1448b6db-9417-4f93-bbe3-3cb39c70d6a4) After (normal buttons) ![Screenshot 2024-04-16 234002](https://github.com/tgstation/tgstation/assets/42397676/e19f6a71-bd11-4f21-8cfc-b29e89020f5c) After (large buttons) ![Screenshot 2024-04-16 234015](https://github.com/tgstation/tgstation/assets/42397676/6adc55cc-42ca-4c1a-a18c-c2dadf3413ce) Long buttons (normal) ![Screenshot 2024-04-17 174208](https://github.com/tgstation/tgstation/assets/42397676/b919c049-658c-4b9e-ab3f-6d06eb9d467e) Long buttons (large buttons (I am 35 and yet still fight the forces of chaos)) ![Screenshot 2024-04-17 174202](https://github.com/tgstation/tgstation/assets/42397676/01fae7ff-8c51-4789-88ac-9d533e1f0eeb)
## Why It's Good For The Game Looks better, runs smoother, no clipping ## Changelog :cl: fix: TGUI Alerts shouldn't have such wonky buttons any more /:cl: --------- Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com> * MetaStation: Replaces the tools in the Primary Surgery Theatre with filled surgery trays (#82730) ## About The Pull Request Replaces the tools on the tables with 2 surgery trays. ![image](https://github.com/tgstation/tgstation/assets/139372157/91d195f0-10d4-4b73-843a-a2da88fc5d33) ## Why It's Good For The Game Makes surgery a bit less painful in the surgery theatre, Using tools from a tray is much nicer than having to open the context menu on the piles of tools on the tables. ## Changelog :cl: qol: Replaced the surgical tools in the Primary Surgery Theatre with 2 Surgery Trays. /:cl: * Fixes smart pipe & cryo gas reallocation (#82701) ## About The Pull Request **1. Smart Pipe Problem** - Fill a pipe with any gas, plasma for e.g. - Unwrench the pipe to deconstruct - The pressure sends you flying but notice plasma is nowhere to be seen from the now destroyed pipe **2. Cryo pipe connector problem** The gas gets reallocated when the object is deleted. We only want this when its deconstructed not deleted to prevent any side effects This PR fixes them ## Changelog :cl: fix: smart pipes release their gases into the air when unwrenched fix: cryo pipe connector component has no side effects of gas reallocation when deleted /:cl: * Fix Primal Instincts (#82741) ## About The Pull Request #82539 randomly made these two lines switch their AI controllers to idle rather than on, when the intent was for them to wake up immediately to do make the mob attack or fight or do something ## Changelog :cl: Melbert fix: Primal Instincts and Living Flesh should be a tad more reactive /:cl: * Fix handcuffing (#82760) ## About The Pull Request Changed this to an early return but then didn't invert the condition ## Changelog :cl: Melbert fix: You can handcuff people with 2 arms and you can no longer handcuff people with 0 arms /:cl: * Gets rid of UNIT_TESTS compiler warning (#82695) ## About The Pull Request Basically every single CI Run is throwing the following warning: ```txt code/modules/unit_tests/lootpanel.dm:24:warning (unused_var): new_box: variable defined but not used ``` You may find an example here: https://github.com/tgstation/tgstation/actions/runs/8698627681/job/23855921813#step:9:24 This is pretty silly but I don't really know why we even have this variable (I assume there's something far more complicated underneath the surface based on what the unit test is asserting), but assuming it is important let's just insert a do-nothing procedure to get rid of the compiler warning while ensuring the unit test is actually operating as it should. I also don't really like the fact that this is a warning instead of an error but let's tackle this problem one step at a time by at least getting rid of the compiler warning in a quick advance PR while I dwell on this issue (is there a way to get the Dreamchecker linter to look at the unit test files? it's caught perfectly fine in the langserver) --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> * Makes dropdowns better (#82697) ## About The Pull Request Kind of a pain to work with, confusing people with its prop names (many such cases!) After recently discovering deathmatch it's very obvious to me how broken it is, so I made it less so (now comes with a complete ui upgrade!) It now scrolls with the selection and to the selection on open, which felt like major QoL
pics/vids In motion ![7627sWJ2nS](https://github.com/tgstation/tgstation/assets/42397676/982427b2-6dc8-4c91-90cf-6e17d211f5ae) Deathmatch got some UI facelifts ![GAotCHxtZg](https://github.com/tgstation/tgstation/assets/42397676/769317ad-7a9f-410a-a60f-4ddfb377210c) ![Ca2UJSpxlY](https://github.com/tgstation/tgstation/assets/42397676/ea188cda-a79b-4ca0-9209-1c69f57231dc) Fixes #75741 ![image](https://github.com/tgstation/tgstation/assets/42397676/d30a1ae4-cf08-4512-9ce6-5499084647b4)
## Why It's Good For The Game Better UX Bug fixes Potential exploit patched (ui validation for ai voice changer) Fixes #81506 ## Changelog :cl: fix: Dropdowns received some much-needed QoL, like having the scrollbar follow your selection. fix: AI voice changer now shows its current voice selection. fix: Deathmatch screen has been touched up. fix: Prefs menu has their dropdowns simplified, hopefully fixing issues /:cl: --------- Co-authored-by: san7890 * Fixes the NT SWAT helmet sprite (#82743) * Mass Item Creation (#82455) ## About The Pull Request Have you ever had to click the "Make" button a dozen times for a chef making soup? I've also had it, so with this PR you can press the button and everything will repeat itself as long as possible. ## Why It's Good For The Game Makes life easier for chefs, now they can play chess on their cool smartphone and craft food. (actually you can transfer it to other items as well, see for yourself). * Adds Retain volume flag on the ants reaction (#82718) Fixes #82575 We'd expect feeding ants to always result in more ants I imagine. * Borg movement now has sounds (#82704) ## About The Pull Request adds sound effects to cyborgs when they move Demo: https://imgur.com/a/7Mu98pQ Open to feedback on this sound so please tell me what you think. ## Why It's Good For The Game a hunk of metal moving at you without any sound is frightening ## Changelog :cl: grungussuss sound: cyborgs now have sounds to indicate they are moving /:cl: * Use cell defined constants for various stuff (#82594) ## About The Pull Request This re writes most cell power usage cases with 2 defines `STANDARD_CELL_CHARGE`(Joules) & `STANDARD_CELL_RATE`(Watts) so changing cell capacity values in the future won't cause discrepancies. ## Changelog :cl: code: most cell power usages are scaled with defined constants to help adapt to future changes /:cl: * Plumbing machinery power & processing tweaks (#82702) ## About The Pull Request - Plumbing machinery begins processing only when wrenched & ends processing when unwrenched. The machines plumbing component `/datum/component/plumbing/process()` already does this but the underlying machines processing proc for e.g. `/obj/machinery/plumbing/synthesizer/process()` is always processing regardless of its wrenched state or not. We can optimize this & save power when unwrenched - Fixes #82621. This adds plumbing machines `idle_power_usage` on top of its `active_power_usage` ensuring it only uses power when actively doing work, So if your factory is say full of reagents & cannot do any more work it will use less energy i.e almost enter an stand by mode, efficiency - Plumbing grinder chemical will grinds & juice stuff correctly i.e. prefer grinding over juicing most of the time ## Changelog :cl: fix: plumbing machinery begins processing only when wrenched & ends when unwrenched fix: plumbing machinery uses energy only when wrenched & doing work, will stop/use less energy when idle fix: plumbing grinder chemical will grinds & juice stuff correctly i.e. prefer grinding over juicing for most stuff /:cl: * Carps migrating through the station no longer idle so they don't get stuck after spawning until someone walks by. (#82744) ## About The Pull Request Carps migrating through the station no longer idle so they don't get stuck after spawning until someone walks by. ## Why It's Good For The Game Bugfix for Carp Migrations. ## Changelog :cl: fix: Carps migrating through the station no longer idle so they don't get stuck after spawning until someone walks by. /:cl: * Alt click no longer conflicts with mech suit [no gbp] (#82758) ## About The Pull Request Get in the gundam shinji!!! Context: Mech users hold ALT to disable strafe, which would trigger the lootpanel to come up while committing war crimes (annoying!) This prevents the panel from appearing and fixes the previous behavior, meaning you can alt click your own mech to disable strafing. ![dreamseeker_mpU1ObsHNI](https://github.com/tgstation/tgstation/assets/42397676/59270585-a2c7-4fc6-a57a-aad6265d3543) It also makes toggling strafe a balloon alert with sound. Parties for all occupants!! ## Why It's Good For The Game Fixes #82753 ## Changelog :cl: fix: Mecha pilots are no longer bothered by incessant loot panels while holding ALT for strafe disable. /:cl: --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> * Adds a Wizard-themed map to the deathmatch (#81640) ## About The Pull Request Deathmatch is severely lacking in HIGH IMPACT MAGIC LARPING. So I added a big ass wizard arena. The arena itself is based off the wizard den. Loadouts: **Wizard:** Standard all-rounder. Got magic missile, jaunt, and forcewall. Regular gear. **Pyromancer:** Fire guy. Red robes, fireball, smoke. **Electromancer:** Zappy guy. Lightning and tesla shock. **Necromancer:** Is a skeleton. Has Scream for Me and blink. **LARPer:** Straight from Station & Spessmen. Fake robes and can only throw lightning and repulse. **Chuunibyou:** Classic animage. Got chuuni buff and magic cards. **Battlemage:** Melee fighter. Got some armor and a big hammer with instant summons. **Apprentice:** Underpowered until they find a mystery box. Got charge. **Gunmancer:** Who needs magic when you have guns? Starts with an m1911, lesser gun summons, and knock. **Monkeymancer:** Is a monkey. Can summon monkeys and gorillas. Has a banana. **Chaosmancer:** Jumbled robes. Starts with a chaos rod. Can rod form and summon traps for high chaos. **Funnymancer:** It's just a clown with a banana staff. The map itself is a pretty standard arena with a long sightline in the middle. Each participant spawns in their own room complete with a magic item box. The very southern portion of the ship has a standard mystery gun box. Soon after the round starts, a hostile gelatinous cube in the center of the map will break out and attack whoever it sees. Inside its enclosure is a free death wand. Map has been tested to make sure deathmatch participants can't escape the deathmatch. ## Why It's Good For The Game Deathmatch provides a unique opportunity for people to play with mechanics they will not often get to use. Allowing people to play wizard for a few minutes shouldn't cause too much harm aside from admin logging from explosions, which hopefully a fix is in the pipeline for. ## Changelog :cl:Motho add: Added wizard-themed deathmatch map. add: Added mystery wand box. /:cl: * Makes viewers() defines (#82767) * Fixes Pseudo circuit delay & some missed cell define usages (#82771) ## About The Pull Request - Fixes #82688 If the circuit cost is<= 1% of `STANDARD_CELL_CHARGE` then the delay is 5 seconds, if the circuit cost is >= 50% of `STANDARD_CELL_CHARGE` then delay is 1 minute. All other delay values are interpolated in between these 2. - Pseudo circuits don't use power when used on cooldown - Makes `INSPECTOR_ENERGY_USAGE_*` defines values use standard cell values ## Changelog :cl: fix: pseudo circuit adapter computes recharge delay durations correctly & won't use power when on cooldown code: uses standard cell defines for N-spect scanner /:cl: * Lava/Plasma River tiles now immerse you in them (#82736) ## About The Pull Request This adds the "immerse" element to lava tiles. ![lava tests but smaller file](https://github.com/tgstation/tgstation/assets/28870487/a03555bf-6d2a-46d9-a437-da49a636a61a) It's a tad hard to see because you're super on-fire, but it still looks nice. ## Why It's Good For The Game Eye candy, pretty... ## Changelog :cl: Rhials qol: Lava and plasma rivers now immerse you in them. /:cl: * Adds `ALLOW_RESTING` to a bunch of items (#82761) ## About The Pull Request Allows you to alt-click a bunch of items while resting. Fixes #82788 ## Why It's Good For The Game Some of these, such as storage, are bugfixes. You shouldn't need to be standing up to configure a spray can, or change the direction of your bedsheet Others are just sensible changes. ## Changelog :cl: Melbert fix: You can open bags with alt click while resting again qol: Many items which previously required you to stand to alt-click now don't, such as bedsheets and spray cans /:cl: * Fixes sight range on lootpanel [no gbp] (#82765) ## About The Pull Request When asked to make lootpanel visible at range they did not just mean _any range_ AI alt click was a little weird (still is) but now it works (TM BUG) Fixes #82768 * Adds Omnitools for engineer and medical cyborgs, reducing on inventory clutter. (#82425) [This PR is a bounty requested by Ophaq and worked on by Singul0.](https://tgstation13.org/phpBB/viewtopic.php?f=5&t=36013) All of the following description in this PR is written by Ophaq as to what this PR entails: In this PR, the medical and engineering cyborg's tools are completely reworked and condensed into an arm similar to the implant a carbon would get. The tools are shown in a radial wheel around the character to quick select what is needed instead of looking for it in a cluttered bag of items. There are a few tools such as the blood filter for the medical cyborg, as well as the welder, gas analyzer, and t-ray scanner for the engineering cyborg excluded from the radial wheel. mostly due to their inherent inmodularity ![image](https://github.com/tgstation/tgstation/assets/127663818/f66425b3-771a-46a0-86e5-958124a3dd6f) ![image](https://github.com/tgstation/tgstation/assets/127663818/45e75c47-8f61-42aa-9ba3-01b25f266941) Each cyborg gets two arms in case the player wishes to have one on the side to quick swap to, like having a scalpel in one arm and a hemostat in the other on the hotbar for convenience or just preference. An upgraded version of the tools has been added to each respective cyborg upgrade node with somewhat faster action speed. The upgrade replaces the arms and transforms them into the "advanced" version which is currently the same sprite as the regular but just a faster and more efficient version. The sprites for the surgical arm currently look good but may need replacing later if someone who wishes to resprite them down the line decides to do so. As it currently stands, the medical cyborg's magical bag of gadgets takes up a lot of your screen space and as a player who plays medical A LOT, this was a MUCH NEEDED quality of life feature. The amount of clutter in a medical cyborg's bag makes it in my opinion, hard to see at the bottom of the screen and a nuisance to constantly close compared to other models. My standard set up for playing medical cyborg on the hotbar is 1=med analyzer, 2=usually a secondary surgery tool or injector, and 3=another surgery tool. The flow of gameplay during surgery ends up being surgery tool, hit 3 and drop it, surgery tool, repeat or for efficiency using X to swap between the two surgery tools I need on 2 and 3. This gets tedious especially after so many hours of playing medical cyborg. I know some people may disagree, but I think it would help a lot of help to speed up this flow of gameplay during surgery and declutter. By turning the medical cyborg's toolset into an omni-surgery tool which functions like the surgery arm implant's radial wheel, this would greatly declutter by like an entire row and make things easier on medical cyborg players. Having a secondary in the bag helps with efficiency for those players who like having an extra tool on their hotbar and swapping back and forth would also improve efficiency and make less swapping by hitting Z needed. Additionally with the upgraded version as an optional upgrade in the mediborg tech, this also lets them be on par with players who use advanced tools late game but not at the level of alien tools where players would obviously out compete a mediborg in terms of action speed. Engineering models also benefit from this rework but at a slightly different and lesser way whereas certain tools are excluded such as the welder, due to the way they work on refill and the gas scanner and t-ray scanner not counting as tool components are not included in the arms. Syndicate versions of the engineering and medical cyborg also get these arms, unupgraded. :cl: add: Adds an omnitoolset for both engineering and medical cyborgs, containing various basic tools qol: Engineer and Medical module inventory space is now significantly decluttered /:cl: --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> * Fixes dropdown displaytext not working for numeric values (#82778) ## About The Pull Request https://github.com/tgstation/tgstation/pull/82697 broke the prefs menu downstream; we have a couple of dropdown choices that are numeric but that make use of `display_names` to map those choices to appropriate strings. The code was assuming that `value` would always be a string when calling `capitalizeFirst(value)`. Basically it should be doing `display_names[value]` when `display_names` are present. ## Why It's Good For The Game Fixes an oversight/bug. ## Changelog :cl: fix: dropdowns that use display_names as an alias for numeric values will no longer cause tgui bluescreens /:cl: * [NO GBP] HPLC can purify inverted chems (#82727) ## About The Pull Request - Fixes #82725 Inverted chems are now coloured green and classified as clean (like before my general maintenance PR) which means they can be purified again. Only chems that are too impure to use & have an inverted chem value are coloured red in the UI and not when they are just of the inverted type ## Changelog :cl: fix: HPLC can purify inverted chems and are now coloured green(clean) in the UI /:cl: * Lathes compute their local storage size correctly (#82770) ## About The Pull Request Basically we have to add the material container before we call parent Initialize(which calls `RefreshParts()`), else the container doesn't get initialized early and we skip over computing storage sizes ## Changelog :cl: fix: off station & round start lathes with local storage don't have infinite storage size. /:cl: * Arcmining QoL: GPS component to scanned vents and vent(pin)pointer (#82724) ## About The Pull Request Scanning ore vents will now tag them on GPS so you can find them easily when you are prepared (and remove them when they are tapped). Also adds special pinpointer to help with finding unscanned vents in a first place. And adds missing uranium overlays for scanned vents. Because why not.
![image](https://github.com/tgstation/tgstation/assets/8430839/d13df20f-79c0-46a7-a602-81c630309a2d) ![image](https://github.com/tgstation/tgstation/assets/8430839/72690bec-dffd-41a8-8a5e-1ceb7ae182d0)
## Why It's Good For The Game While looking at mineral density to find vents is somewhat fun and entertaining, having some sort of upgrade to make finding them easier adds a bit of a progression. Also re-finding already scanned vents can be a bit annoying. You need to fill your backpacks with GPSs and tag them manually. It is also inconsistent with geysers that are added to positioning after you scan them. And with tendrils, which are always visible. ## Changelog :cl: add: added ventpointer that points toward nearby ore vents and can be bought with mining points balance: scanned ore vents can now be found with GPS fix: fixed ore vents missing overlay icon for uranium /:cl: * Fix oven tray runtime (#82782) ## About The Pull Request Fixes a lil typo from the interaction refactors that broke the ability to load oven trays from containers ## Why It's Good For The Game squamsh bug ## Changelog :cl: fix: loading oven trays from serving trays and other containers works again /:cl: * Fix flaky test detection (#82790) - Add missing job pagination. - Fix multiple jobs being able to fail if they aren't in `CONSIDERED_JOBS` * Add utf8 support for state laws button (#82789) ## About The Pull Request Adds UTF-8 support for state laws HTML page. Now it supports more than just English ## Why It's Good For The Game Support for other symbols, such as cyrillic ![Screenshot 2024-04-21 015220](https://github.com/tgstation/tgstation/assets/31931237/57ca6d56-14da-4f10-a9b6-63b541c5eb5b) * Update highest available sound channel (#82780) Current channels are: ``` ``` So, the highest available now is 1013 Updating the thing which everyone forgot for 7 years. Not that many special channels were added either way * Revert "Borg movement now has sounds" (#82795) Reverts tgstation/tgstation#82704 The sound ingame appears much louder than the original author intended. Not to mention that the sound loops stack for every borg moving near you. * Use defines for "General Research" where it's not used (#82785) ## About The Pull Request There is a define for it, so why not use it? ## Why It's Good For The Game Defines good * [READY] the unfuckening of clothing rendering (#79784) refactors clothing visors to use the same system, including masks being toggled and stuff like riot helmets toggling using the same system and welding helmets and such adds a handler that updates all visuals in slots that an item has obscured, each visual proc calls that so you no longer have weird shit happening like having to hardcode a proc for heads where you need to also update hair, mask, glasses everytime you put on an item one thing here i could also do is make check_obscured_slots return the HIDEX flags instead of item slots, because in 99% of cases its hardcoded to be ran against specific slots (like eye code running it against the glasses slot), but maintainers didnt seem to like that :/ fuck this 2003 bullshit theres like several bugs here i fixed but i forgot them all and they are small * Allows vv investigate /appearance + better checking image (#82670) * Fixes Alien Numerical Identifier Transfer System (#82762) ## About The Pull Request Fixes #82756 I'm not sure what the root cause of the issue is or why it broke so recently (this has been a thing since #49150) but I went and cleaned up the code and ensured that we always reset the `name` to the `initial()` value we have for it if we determine that we need to transfer over the `numba` from the old xenomorph. This is done by a new proc which is a lot less convoluted from the old system (always respecting var-edited names and stuff like that) that should make it flow a lot better and make it more hardy against double-addition of the `numba` to the name. ## Why It's Good For The Game Having two numbers in your name is weird, should only have one. [x] I tested this PR ## Changelog :cl: fix: Evolved aliens should no longer have two numbers in their name. /:cl: * [NO GBP] Fixes runtime in advanced camera console (#82699) ## About The Pull Request We only unset machine if we have a user who has logged in ## Changelog :cl: fix: Fixes runtime in advanced camera console when power is turned off /:cl: * Refactors how basic ais do their success/failures (#82643) * Rocky DLXIII: Fitness to Athletics, Athletics skill influences Boxing against Boxers, Boxing overhaul, Evil Boxing (#82611) as the only meaningful reward Basically just a rebranding so that it is more broad in its concept. It isn't just about peak physique. It's about how you can apply it too. Reaching Legendary rewards you with the Golden Gloves. I started it in this pr here https://github.com/tgstation/tgstation/pull/80635 But this is a more significant overhaul of boxing from the ground up. Namely, it now is majorly influenced by the Athletics skill, and also more thoroughly aligns with conventional punching in its current state. However, a major component of this is that boxing's breadth of mechanics is only relevant when used against another boxer. Non-boxer targets are only ever going to get smacked by a stamina punch, as it is currently (and more or less the same values too). Additionally, boxers cannot punch someone who is either unconscious or in stamina crit, so it can't be used to maintain stamcrit. - Boxing now has a One-Two Punch mechanic. Swapping between the left and right mouse buttons to punch and maintaining this causes every second punch to do more damage (to boxers). Breaking this chain by punching with the same button twice will cause you to lose damage (against boxers). - Boxing now can have crits occur below 50 stamina damage (against boxers). However, to knock someone out clean, the target must be staggered from a previous crit first. (Or I guess be staggered at all, maybe their shoelaces were tied or something). Crit probabilities are determined by adding your Athletics probability skill bonuses to your unarmed effectiveness, and then reduced by the targets own Athletics skill bonuses. It is hard for two athletes to knock each other out in one blow. It is trivial for a legendary boxer to knock out a novice in a single punch. Cybernetically enhanced boxers are dangerously effective at boxing. - Boxers can block other boxers by using throw mode, but the chances of doing so is based on Athletics skill bonuses. A successful block causes the attacker to take stamina damage (as does the blocker, but less so). - Participating in boxing increases the Athletics skill. Your gains are probably slower than normal training, but you at least get some reward for doing so. Only relevant if your opponent is a boxer. Get a sparring partner! So this is all well and good, but what if you're a scoundrel with no care for the other person in this equation? Well, that's where Evil Boxing comes in. Evil Boxing has absolutely no restrictions at all, and can freely use its boxing abilities against anyone. Even non-boxers. You can even grab people! Wow, what a scumbag. I bet you even king hit people. Thankfully, only an admin can make you into an Evil Boxer. (against boxers) Both mutations have a flimsy increase to instability of 5 because of how incredibly particular the bonus is. Strength now reduces the amount of stamina damage inflicted via exercising by half. Strength also adds a +2 damage bonus on boxing punches while boxing against boxers (this doesn't influence normal unarmed attacks whatsoever, or boxing against nonboxers). Obviously, evil boxers just get this benefit against everyone because they're knaves. Stimmed increases the duration of the exercised status effect by one factor. (That is, if you have no other modifiers, it will double the duration on its own) @Jacquerel was racking their brain trying to come up with an alternative to the skill rewards of Fitness. At the moment, sprite growth is not only a really bad bonus (it does literally nothing but make you big, and thus is actually a detriment due to how intrusive sprite size is with interaction, and plays weird with other sprite changing effects), but isn't really all that interesting for all the effort put in. Problem is, how do you make Fitness meaningful without making it a powergame mechanic? Simple! You make it applicable to a really niche, self-contained but still utilized game mechanic that is engaging to participate in and makes you meaningfully very good in it. AND scratches that power scaling itch that many players have. Boxing is reasonably self-contained as is, but pretty bland due to how old it is. While maintaining that self-contained nature, I hoped to expand the interactivity of boxing a little bit by giving it a small mini-game in of itself. And also introduce ways to simulate the idea of boxing a bit better. The idea of being an Evil Boxer is funny. For every Rocky, there is a [Insert Rocky Villain Here that isn't Creed]. But in this case, it's probably some Syndicate douchebag looking to punch clowns into a coma and inspire the mime to take up shadowboxing in revenge. :cl: add: Replaces Fitness with Athletics; same skill, but now more specifically applicable to boxing. add: Athletics does not increase sprite size. balance: Overhauls Boxing to add a lot more depth to the interactions. Only applicable to other boxers, however. You can still punch the snot out of non-boxers though. But only up to stamcrit or unconsciousness. No hitting someone who can't fight back! balance: Adds Evil Boxing, which is the evil and fucked up version of boxing that you kill people with and are allowed to flout the sacred rules of boxing as you please. Everyone is a victim! /:cl: * Cargo ui refactor -> TS (#82745) Refactors cargo ui, fixing some visual bugs, just making it look better in general Should be no gameplay effect other than it looking better
pics ![Il0e6EWjUa](https://github.com/tgstation/tgstation/assets/42397676/d16e83a5-ee36-4346-9411-7ea76907994d) ![Screenshot 2024-04-17 230621](https://github.com/tgstation/tgstation/assets/42397676/f5e15b04-c148-4be4-8f7e-7a195ac8e815) ![Screenshot 2024-04-17 235319](https://github.com/tgstation/tgstation/assets/42397676/d3085f70-74ca-41fb-bbcd-e3bd6c990cee) ![Screenshot 2024-04-17 234758](https://github.com/tgstation/tgstation/assets/42397676/95df59ae-e7e3-4349-a63c-7bfbe6777561) Fixes #81442 ![Screenshot 2024-04-18 000750](https://github.com/tgstation/tgstation/assets/42397676/2d97ba9c-68d7-4ac3-9ff8-3bc5cfecf0f6) Made a type grabber for backend data in case you want to make your own typescript uis `logger.log(getShallowTypes(data))` ![image](https://github.com/tgstation/tgstation/assets/42397676/ff914895-3302-4aca-982c-46af3299a4af) Otherwise cargo's data is unreadable
Any UI over 500 lines should get broken up to reduce cognitive load ~~Any ui in javascript shouldn't exist~~ Cargo UI is better Typescript :cl: fix: Cargo's supply console has been upgraded visually. /:cl: --------- Co-authored-by: EricZilla <81941674+EricZilla@users.noreply.github.com> Co-authored-by: Helg2 <93882977+Helg2@users.noreply.github.com> * Makes lavaland stone tiles prevent immersion (#82807) ## About The Pull Request Adds the same trait that lavaproof rods have to the stone tiles, so things can continue being visually outside of the lava ## Why It's Good For The Game this shit looks goofy ![324271923-9c1e353d-70ff-4321-839c-8bac2fd03c01](https://github.com/tgstation/tgstation/assets/25628932/d120458d-8f65-418c-a0c8-7d1f939a472b) ## Changelog :cl: FlufflesTheDog fix: Stone tiles (and things on them) no longer get immersed in lava /:cl: * Getting up from prone, z movement, and mod de/activation don't do cogwheels (#82794) Adds `hidden` to getting up (from prone), moving up (z-movement), moving down (z-movement), and de/activating MODsuits - Getting up from prone happens very often, makes it a bit hard to differentiate when people are doing actions or just crawling around. - If we want feedback for getting up, should just be a chat message. - Moving up and down is just movement. Only affects using the verbs. - Same as before: If we want feedback, it should just be a chat message. - Other methods of moving up/down (IE, ladders) are untouched / retain their cogwheel. - De/activating modsuits have their own visual feedback and sound effects associated. Both feels unnecessary. :cl: Melbert qol: Getting up from prone, moving up or down a z-level (not via ladders, naturally. Like flight), and de/activating your modsuit no longer shows cogwheel effect /:cl: * [NO GBP]Inversely scale mechanical favor with STANDARD_CELL_CHARGE. (#82801) ## About The Pull Request Makes the mechanical sect cell sacrifice favor adjustment inversely scale with STANDARD_CELL_CHARGE. This reduces it by a factor of 1,000. ## Why It's Good For The Game So they don't get 1,000 times the favor as intended from a cell. ## Changelog :cl: fix: Fixes mechanical sect gaining 1,000 times the favor from a cell sacrifice. /:cl: * Fix all types of damage to the head causing brain damage (#82763) ## About The Pull Request 5 months ago when I separated this stuff out to its own proc I forgot a damagetype check. ## Changelog :cl: Melbert fix: Only brute damage causes brain damage when applied to the forehead, rather than all damage types /:cl: * Converts ListInputModal to actually be a Modal | Adds ListInputWindow which uses it (#82792) ## About The Pull Request If we say something is a Modal it should actually be a Modal ## Why It's Good For The Game You can now use this system in other windows if you want. Fixed the misnomer. --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> * Higher capacity SMES variant for low maintenance areas; miners can access their maintenance area on mining base, gulag no longer saps all power from the main base (#82713) ## About The Pull Request Creates a higher capacity version of the SMES unit that spawns in with super capacity cells, as well as a full version. Places the full version into all the AI sats (which all have independent grids for the most part), some remote space ruins and the mining base. These SMES units are intended for areas where players aren't expected or cannot reasonably be expected to constantly monitor power usage within the length of a standard round. Miners can access their power stations, telecommunications box and atmospheric station on the mining base. They're really the only people who care, after all. The gulag's SMES (also now upgraded) no longer saps power from the main base due to having its input terminal rigged to the main base power grid, and thus demanding all power from the grid greedily. To revert this in-game is a single power cable placed back east of the SMES unit. ## Why It's Good For The Game The power changes made some of the once largely low-maintenance areas much more likely to run out of power more quickly than you would expect. These aren't areas expected to be maintained or monitored by engineering (probably because they're not easily accessed), and they're just kind of troublesome to deal with on a round-to-round basis. Mining had this problem triple-fold. It had significant drain with no convenient method of installing power generation at all, miners couldn't access what power generation there was without using their 'skeleton key' to open the way (only engineers could, and they aren't expected to come down to mining at all), and even then, there was the gulag SMES just eating all the power anyway. I'm pretty sure that SMES unit was the biggest culprit of them all, but I think this conveniently future proofs these issues for the time being. ## Changelog :cl: add: Adds a higher capacity SMES unit to lower maintenance areas and maps. fix: Miners can actually access and fix their engineering issues on the lavaland base via the engineering section of the base. fix: The gulag SMES unit is no longer needlessly draining the entire power grid of the main mining base. /:cl: * Revert "Higher capacity SMES variant for low maintenance areas; miners can access their maintenance area on mining base, gulag no longer saps all power from the main base (#82713)" This reverts commit af8d69f889f5f7a6397b34af7b0e29e76d97a847. * New views for mc controller ui (#82769) ## About The Pull Request Lots of qol improvements for controller tgui - Auto sort order based on type - Bar view for items in deciseconds
vids in a live round ![image](https://github.com/tgstation/tgstation/assets/42397676/52fd4677-763a-4ea9-965a-386ab59cd353) modals ![Tzp0i9yfwP](https://github.com/tgstation/tgstation/assets/42397676/06ca6d9e-c528-4f02-8dbb-d302d2380396) bar view with defaults for decisecond sorts ![2X6IqQIE7c](https://github.com/tgstation/tgstation/assets/42397676/88b80fd4-1116-4ba1-aa0b-6bac56827e6b)
## Why It's Good For The Game Better admin tools ## Changelog :cl: add: Admin tools buffed, check the Controller Overview add: Controller Overview moved to debug tab /:cl: * Revert "Converts ListInputModal to actually be a Modal | Adds ListInputWindow which uses it" (#82841) Reverts tgstation/tgstation#82792 * [no gbp] Fixes cargo express console (#82843) ## About The Pull Request Cargo express console does not send amounts by name Fixed and touched up the express console a bit ![Screenshot 2024-04-22 195254](https://github.com/tgstation/tgstation/assets/42397676/c099cdc0-6b4d-4348-9b5b-f9d4cc325d0b) ## Why It's Good For The Game Bug fix (no issue yet) ## Changelog :cl: fix: Cargo express console fixed: No more bluescreen /:cl: * Plumbing & chem reaction chamber patches (#82781) ## About The Pull Request 1. Both Plumbing & Chem reaction chamber will use the beakers `heat_capacity()` proc instead of the formulae `SPECIFIC_HEAT_DEFAULT * reagents.total_volume`. This yields the exact same results as before but will mean in the future if individual reagents heat capacities are changed then the heating effects will be accurately reflected here. It also uses that amount of power for heating 2. Plumbing rection chamber will not use energy when its either 'emptying' or when no reagents are present in its internal buffer 3. You can hit the chem reaction chamber with items like beakers, screwdrivers, crowbars and what not ## Changelog :cl: fix: plumbing & chem reaction chamber heating effects accurately reflect the beakers heat capacity & power usage fix: plumbing reaction will not use power when emptying or when there are no reagents to heat fix: you can hit the chem reaction chamber with items like beakers, screwdrivers, crowbars and what not /:cl: * fixes brimdemon AI (and some other mobs) (#82831) ## About The Pull Request i noticed brimdemons werent attacking when i tried investigating the problem i saw it extends to other mobs ## Why It's Good For The Game brimdemons, as well as other mobs, will behave normally ## Changelog :cl: fix: brimdemons (and other mobs) will act normally /:cl: * Implements data systems (#82816) ## About The Pull Request Subsystems currently come in two different flavors: 1. Systems that process at intervals with the master controller 2. Global data containers that do not fire And I think they should be split up... This moves 4 non firing, non init subsytems -> datasystem ## Why It's Good For The Game Clarity in code * fixes ammo_bench data system * [no gbp] express console: Bluescreen on cart (#82844) ## About The Pull Request Truly, ## Why It's Good For The Game Bug fix before you even issue report it * Adds Medieval Pirates (and small assault_pod change) (#82392) ## About The Pull Request (short, slightly outdated video compilation of the pirates) https://youtu.be/j9BNFzcUSjc Adds the **MEDIEVAL WARMONGERS** pirate gang, these pirates are focused on causing chaos directly on the station with the use of melee weaponry and swarming tactics. they are not very smart when it comes to using technology, so they crash in the station in an attempt to dock. the pirates spawn with the NOGUN trait as they have never used guns before but have access to dashing and the unbreakable component(small heal burst upon reaching crit). Warlord spawns with a better version of hulk(isnt removed upon crit and can still do stuff while critted) and gigantism mutation by default because ~~Chad Maximus~~ the other pirates require someone to run to when stuff like flashbangs, batons or lasers are present. The warlord spawns with a boarding axe which is a better axe that is good at destroying things and a meat hook. **there's a total of 5 pirates.** the pirate shuttle has: - thermite barrel and 3 large beakers - single weak claymore - 3 extra military spears - 3 kite shields - 3 heavy bolas - 4 regular bolas - a stack of wood - 2 stacks of mourning poultice (15 uses each) - one burn medkit **shuttle was made by striders18, big thanks to him** ![image](https://github.com/tgstation/tgstation/assets/114047053/766d0b96-4487-47d3-b524-70d811ce4d73) things added: - the new pirate gang - a gamberson jumpsuit - crude armor (good melee and wound protection but lacks on the rest) - warlord armor (extreme protection at the cost of slowdown) - a shortsword(bootleg claymore with 30 block chance and goes on belt instead of back) - military spear (better at throwing, better wounding, deals blunt wounds instead of sharp) - axe with better damage and demolition mod for the warlord - a var to specify the name of the landing zone destination for the assaultpod - an assault pod targeting device item for the medieval shuttle - a thermite barrel - kite shields - new hulk variant that doesnt go away when crit and has tenacity ## Why It's Good For The Game I always liked the chaotic nature of the russian bounty hunters that would come from their extra numbers and lack of tools. i thought something of a similar idea on pirates would be good, a very direct and scary militia rushing in with sword and faith would create some awesome scenarios ## Changelog :cl: add: New heavy weight pirates, medieval warmongers add: Adds military spear, shortsword, boarding axe, kite shields add: Adds warlord and crude armor add: Adds medieval shuttle (made by striders18) /:cl: --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> * fix for pirate suit * Adds sorting options and a search bar to the crew monitor (#82732) ## About The Pull Request This PR adds buttons in the crew monitor UI to sort by name, position, or vitals, as well as a search bar for searching for specific people. For vitals, people are sorted first by life status (living, crit, dead, etc), then by damage. Also TS-ifies the UI. https://github.com/tgstation/tgstation/assets/42454181/a7c0c262-8ea7-4e9f-8de6-6b9cf7481b23 ## Why It's Good For The Game Currently, finding a specific person, or a person in a specific place, is a pain in the butt with the crew monitor. You have to go through an unsorted list of people grouped only by department. Don't know the person's job? Tough luck, you're going down the list one by one. It is not at all a friendly user experience. With this PR, it becomes a breeze, and makes the crew monitor much easier to use. ## Changelog :cl: add: The crew monitor now has sorting options and a search bar. /:cl: * Accessing Datasystem Manager from MC controller panel (#82848) * [NO GBP] fixes issues with human rendering fixes (#82852) ## About The Pull Request fixes #82838, forgot to add the attack_self there fixes #82869 fixes the atmos hardhat not using flags_inv and transparent_protection correctly (you could pull off someones glasses through it for example makes modsuits use the new rendering stuff fixes rendering stuff not working correctly with adjustable clothing fixes quick equip dropping the item if you cant equip it ## Why It's Good For The Game waow its awesome ## Changelog :cl: fix: you can no longer take off someones glasses or mask through atmos hardhat fix: once you adjust a welding helmet or something it no longer makes your cigarette or sunglasses invisible fix: welding gas mask works once again fix: quick equips dont drop the item if you cant equip it /:cl: * fixes erp slots * Redoes how appearance VV works because it scares me (#82851) * [NO GBP] Critical fixes for cyborg omnitools (#82825) ## About The Pull Request Fixes several critical fixes for cyborg omnitools, surgical omnitools in peculiar. Which is: 1. bonesetter omnitool can do compound fracture surgery now 2. omnitool butchering not properly disabled works (why didn't that runtime. fucking dreammaker) 3. omnitool surgery_initiator not properly disabled 4. cautery in offhand not working Fixes #82805 Fixes #82868 Honestly I have now regretted for doing this kind of implementation at the start. with how shoddily coded it is. Planning to refactor cyborg omnitools, admin omnitool and ayys omnitool (all have the same base of implementation) to be less snowflakey. but that's for the future. and will take some time. This is a bandaid fix for now ## Why It's Good For The Game this is cbt ## Changelog :cl: fix: fixed cyborg bonesetter not working for compound fractures fix: butchering not disabling in cyborg omnitool fix: fixes a bug where if you select the omnitool it would be stuck in surgery initiator mode fix: cautery in off hand for cyborg omnitools not working /:cl: * fixes ai controllers hard deletes (#82861) ## About The Pull Request ![image](https://github.com/tgstation/tgstation/assets/138636438/47010ad2-64ef-40dd-94d3-b928e4216d1b) i noticed almost all ai controllers were being hard deleted, its because the controller itself was being addedto the behavior_cooldowns list rather than the behavior itself ## Why It's Good For The Game fixes hard deletes ## Changelog :cl: /:cl: * [no gbp] actually fixes bot access (#82809) ## About The Pull Request real fix to bots having AA. also i forgot to address simple bots in my previous attempt so this fixes them too ## Why It's Good For The Game fixes bots having AA ## Changelog :cl: fix: all bots have their normal accesses restored /:cl: * [no gbp] Adds silicon interaction flags (#82822) ## About The Pull Request A few items with special silicon interactions did not have the proper flags to permit their use at distance (airlocks for instance) ## Why It's Good For The Game Fixes #82800 ## Changelog :cl: fix: Restored silicon alt-clicking capability /:cl: * Monkey eyes fix and noticable organ display refactor; AI monkeys no longer catatonic (#82669) ## About The Pull Request It turns out monkeys being catatonic got broken 2 years ago in a PR that was meant to fix something else; also, it turns out monkeys are supposed to have primal eyes when turned into humans, and that got broken too. I fixed both of those things, and while I was at it I did a refactor to make it easier to give noticable organs (or anything else that you'd want correct pronoun and verb tenses) easier to implement. 1) AI controlled mobs now properly display their noticable organs when appropriate 2) Added some macros and a helper proc for replacing appropriate pronouns and verb tenses in text 3) The noticable organ HTML is no longer broken, so you can pass text with spans into it, if you want the text to be pretty or big or whatever 4) Monkeys are no longer catatonic if they have an active AI controller; this goes for any carbon actually but I think monkeys are the only one with AI controllers at the moment ## Why It's Good For The Game Fixes the logic for displaying organs on AI controller mobs (currently monkeys) Makes it easier to add these kind of organs for carbons, AI controlled or not, in the future Look! An actual use-case for split editor: ![image](https://github.com/tgstation/tgstation/assets/49173900/8cd0d69e-8091-4431-9418-6bd29e1713b5) ## Changelog Humanized monkeys now have their primal eyes again; monkeys with active AI are no longer catatonic. :cl: Bisar fix: AI controlled monkeys are no longer catatonic, and they have primal eyes again when turned into humans. spellcheck: Noticable organs now have more modular grammar, and their current grammar is fixed. refactor: Refactored the code for displaying the messages for noticable organs. config: Added a documented define of all our pronouns /:cl: --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> * DNA Infusion Refactor: Separates DNA Infusion Behavior from DNA Infuser (#82829) ## About The Pull Request - infuser entries global is now an assoc list type -> singleton. makes it easier to pick specific entries as needed - separated infusion behavior onto both movable level (for machine occupants and things that can potentially be infused) and human level (for the actual infusion into a human) - [x] tested ## Why It's Good For The Game Upcoming plans is to fix up maintenance sect's organ replacement system that just so happens to work a lot like how infusions do with actual infusion mechanics, and that requires this prerequisite. In general outside of that vision I see a lot of potential in alternate infusion sources, from wherever they may be. ## Changelog no player side changes, this is a refactor --------- Co-authored-by: Thunder12345 Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com> Co-authored-by: starrm4nn <139372157+starrm4nn@users.noreply.github.com> Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: san7890 Co-authored-by: Bm0n <92271472+Bm0n@users.noreply.github.com> Co-authored-by: Yaroslav Nurkov <78199449+AnywayFarus@users.noreply.github.com> Co-authored-by: Pink Co-authored-by: Sadboysuss <96586172+Sadboysuss@users.noreply.github.com> Co-authored-by: Iamgoofball Co-authored-by: Name Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com> Co-authored-by: Singul0 <127663818+Singul0@users.noreply.github.com> Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> Co-authored-by: Iajret <8430839+Iajret@users.noreply.github.com> Co-authored-by: FlufflesTheDog Co-authored-by: Jordan Dominion Co-authored-by: larentoun <31931237+larentoun@users.noreply.github.com> Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> Co-authored-by: EvilDragonfiend <87972842+EvilDragonfiend@users.noreply.github.com> Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com> Co-authored-by: EricZilla <81941674+EricZilla@users.noreply.github.com> Co-authored-by: Helg2 <93882977+Helg2@users.noreply.github.com> Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com> Co-authored-by: Kyle Spier-Swenson Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> Co-authored-by: uaioy <114047053+uaioy@users.noreply.github.com> Co-authored-by: Nick <42454181+Momo8289@users.noreply.github.com> Co-authored-by: Joshua Kidder <49173900+Metekillot@users.noreply.github.com> Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com> --- .github/guides/VISUALS.md | 234 +- _maps/deathmatch/ragin_mages.dmm | 1880 +++++++++++++++++ _maps/map_files/Birdshot/birdshot.dmm | 222 +- .../map_files/Deltastation/DeltaStation2.dmm | 1060 +++++----- .../map_files/IceBoxStation/IceBoxStation.dmm | 306 +-- _maps/map_files/MetaStation/MetaStation.dmm | 272 ++- _maps/map_files/Mining/Lavaland.dmm | 130 +- _maps/map_files/NorthStar/north_star.dmm | 168 +- _maps/map_files/tramstation/tramstation.dmm | 68 +- _maps/shuttles/pirate_medieval.dmm | 535 +++++ code/__DEFINES/ai/ai.dm | 10 + code/__DEFINES/dcs/signals/signals_reagent.dm | 4 +- code/__DEFINES/devices.dm | 4 +- code/__DEFINES/lights.dm | 2 +- code/__DEFINES/melee.dm | 1 + code/__DEFINES/power.dm | 8 +- code/__DEFINES/pronouns.dm | 40 + code/__DEFINES/sound.dm | 14 +- code/__DEFINES/tools.dm | 2 +- code/__DEFINES/traits/declarations.dm | 9 + code/__DEFINES/traits/sources.dm | 1 + code/__HELPERS/construction.dm | 2 +- code/__HELPERS/global_lists.dm | 4 +- code/__HELPERS/mobs.dm | 24 +- code/__HELPERS/priority_announce.dm | 2 +- code/__HELPERS/pronouns.dm | 23 + code/__HELPERS/view.dm | 25 +- code/_globalvars/bitfields.dm | 13 + code/_globalvars/traits/_traits.dm | 3 + code/_onclick/ai.dm | 33 +- code/_onclick/click_alt.dm | 32 +- code/_onclick/item_attack.dm | 4 +- code/controllers/master.dm | 2 +- code/controllers/subsystem/dynamic/dynamic.dm | 6 +- .../subsystem/movement/cliff_falling.dm | 2 +- .../subsystem/movement/movement_types.dm | 28 +- code/controllers/subsystem/statpanel.dm | 1 + code/datums/actions/mobs/charge.dm | 6 +- code/datums/actions/mobs/charge_apc.dm | 2 +- code/datums/ai/_ai_behavior.dm | 2 +- code/datums/ai/_ai_controller.dm | 31 +- code/datums/ai/_item_behaviors.dm | 10 +- code/datums/ai/babies/babies_behaviors.dm | 18 +- .../basic_ai_behaviors/basic_attacking.dm | 18 +- .../basic_ai_behaviors/befriend_target.dm | 6 +- .../basic_ai_behaviors/climb_tree.dm | 3 +- .../basic_ai_behaviors/find_parent.dm | 10 +- .../basic_ai_behaviors/pick_up_item.dm | 9 +- .../basic_ai_behaviors/pull_target.dm | 7 +- .../run_away_from_target.dm | 14 +- .../set_travel_destination.dm | 7 +- .../basic_ai_behaviors/step_towards_turf.dm | 3 +- .../basic_ai_behaviors/stop_and_stare.dm | 4 +- .../targeted_mob_ability.dm | 7 +- .../basic_ai_behaviors/targeting.dm | 13 +- .../basic_ai_behaviors/tipped_reaction.dm | 4 +- .../basic_ai_behaviors/travel_towards.dm | 6 +- .../basic_ai_behaviors/unbuckle_mob.dm | 7 +- .../basic_ai_behaviors/ventcrawling.dm | 43 +- .../basic_ai_behaviors/write_on_paper.dm | 3 +- .../basic_subtrees/attack_adjacent_target.dm | 5 +- .../basic_subtrees/attack_obstacle_in_path.dm | 8 +- .../basic_subtrees/call_reinforcements.dm | 3 +- .../basic_subtrees/capricious_retaliate.dm | 23 +- .../basic_subtrees/maintain_distance.dm | 10 +- .../basic_mobs/basic_subtrees/mine_walls.dm | 13 +- .../basic_subtrees/move_to_cardinal.dm | 12 +- .../basic_subtrees/ranged_skirmish.dm | 12 +- .../ai/basic_mobs/basic_subtrees/run_emote.dm | 8 +- .../basic_subtrees/sleep_with_no_target.dm | 4 +- .../basic_subtrees/target_retaliate.dm | 9 +- .../teleport_away_from_target.dm | 7 +- .../basic_subtrees/use_mob_ability.dm | 8 +- .../ai/basic_mobs/pet_commands/fetch.dm | 38 +- .../pet_commands/pet_follow_friend.dm | 5 +- .../pet_commands/pet_use_targeted_ability.dm | 6 +- .../ai/basic_mobs/pet_commands/play_dead.dm | 4 +- code/datums/ai/dog/dog_behaviors.dm | 11 +- code/datums/ai/dog/dog_subtrees.dm | 3 +- code/datums/ai/generic/find_and_set.dm | 12 +- code/datums/ai/generic/generic_behaviors.dm | 115 +- .../ai/hunting_behavior/hunting_behaviors.dm | 18 +- code/datums/ai/monkey/monkey_behaviors.dm | 113 +- code/datums/ai/monkey/monkey_controller.dm | 2 +- code/datums/ai/movement/_ai_movement.dm | 2 +- .../movement/ai_movement_basic_avoidance.dm | 2 +- .../ai/movement/ai_movement_complete_stop.dm | 4 +- code/datums/ai/movement/ai_movement_dumb.dm | 2 +- code/datums/ai/movement/ai_movement_jps.dm | 2 +- code/datums/ai/objects/mod.dm | 5 +- .../vending_machine_behaviors.dm | 7 +- .../robot_customer_behaviors.dm | 21 +- code/datums/brain_damage/special.dm | 3 +- code/datums/components/conveyor_movement.dm | 2 +- code/datums/components/crafting/_recipes.dm | 2 + code/datums/components/crafting/crafting.dm | 36 +- .../components/crafting/entertainment.dm | 15 + code/datums/components/drift.dm | 2 +- code/datums/components/explodable.dm | 8 +- code/datums/components/force_move.dm | 2 +- code/datums/components/fullauto.dm | 2 +- .../components/material/remote_materials.dm | 2 +- code/datums/components/plumbing/splitter.dm | 1 + .../datums/components/ranged_mob_full_auto.dm | 2 +- code/datums/components/shuttle_cling.dm | 2 +- code/datums/components/surgery_initiator.dm | 7 +- code/datums/elements/ai_control_examine.dm | 2 +- code/datums/elements/noticable_organ.dm | 25 +- code/datums/martial/boxing.dm | 292 ++- code/datums/materials/_material.dm | 4 +- code/datums/mutations/body.dm | 27 + code/datums/mutations/hulk.dm | 18 + .../proximity_monitor/fields/timestop.dm | 2 +- code/datums/shuttles/pirate.dm | 4 + code/datums/skills/athletics.dm | 27 + code/datums/skills/fitness.dm | 25 - code/datums/status_effects/buffs.dm | 11 +- code/datums/status_effects/debuffs/debuffs.dm | 2 +- code/datums/systems/_system.dm | 16 + .../systems/ds}/battle_royale.dm | 11 +- .../systems/ds}/communications.dm | 9 +- .../systems/ds}/materials.dm | 17 +- .../systems/ds}/move_handler.dm | 10 +- code/datums/systems/manager.dm | 14 + code/game/atom/atom_materials.dm | 2 +- code/game/machinery/autolathe.dm | 8 +- code/game/machinery/cell_charger.dm | 7 +- .../machinery/computer/camera_advanced.dm | 22 +- .../game/machinery/computer/communications.dm | 20 +- .../orders/order_items/mining/order_mining.dm | 4 + .../game/machinery/dna_infuser/dna_infuser.dm | 101 +- .../machinery/dna_infuser/dna_infusion.dm | 75 + .../machinery/dna_infuser/infuser_book.dm | 2 +- .../machinery/dna_infuser/infuser_entry.dm | 11 +- .../dna_infuser/organ_sets/carp_organs.dm | 8 +- .../dna_infuser/organ_sets/goliath_organs.dm | 8 +- .../dna_infuser/organ_sets/gondola_organs.dm | 8 +- .../dna_infuser/organ_sets/rat_organs.dm | 8 +- .../dna_infuser/organ_sets/roach_organs.dm | 2 +- code/game/machinery/doors/airlock.dm | 1 + code/game/machinery/doors/firedoor.dm | 2 +- code/game/machinery/firealarm.dm | 2 +- code/game/machinery/hologram.dm | 1 + .../machinery/porta_turret/portable_turret.dm | 1 + code/game/machinery/rechargestation.dm | 2 +- code/game/machinery/recycler.dm | 2 +- code/game/machinery/suit_storage_unit.dm | 7 +- code/game/machinery/syndicatebomb.dm | 8 +- .../anomalies/anomalies_dimensional.dm | 2 +- .../effects/decals/cleanable/aliens.dm | 2 +- .../effects/decals/cleanable/humans.dm | 4 +- .../effects/decals/cleanable/robots.dm | 2 +- .../effects/effect_system/effect_system.dm | 2 +- .../effect_system/effects_explosion.dm | 2 +- .../effects/effect_system/effects_water.dm | 4 +- .../effects/spawners/xeno_egg_delivery.dm | 4 +- code/game/objects/effects/step_triggers.dm | 2 +- .../effects/temporary_visuals/effect_trail.dm | 2 +- code/game/objects/items.dm | 2 +- code/game/objects/items/crayons.dm | 2 +- code/game/objects/items/credit_holochip.dm | 2 +- .../objects/items/devices/battle_royale.dm | 2 +- .../objects/items/devices/desynchronizer.dm | 2 +- .../devices/electroadaptive_pseudocircuit.dm | 18 +- code/game/objects/items/devices/multitool.dm | 2 +- code/game/objects/items/devices/powersink.dm | 2 +- .../objects/items/devices/quantum_keycard.dm | 2 +- .../items/devices/scanners/gas_analyzer.dm | 2 +- .../items/devices/scanners/health_analyzer.dm | 2 +- code/game/objects/items/devices/swapper.dm | 2 +- code/game/objects/items/extinguisher.dm | 2 +- code/game/objects/items/fireaxe.dm | 10 + code/game/objects/items/flamethrower.dm | 2 +- .../game/objects/items/implants/implantpad.dm | 2 +- code/game/objects/items/inspector.dm | 16 +- code/game/objects/items/machine_wand.dm | 2 +- code/game/objects/items/maintenance_loot.dm | 2 +- code/game/objects/items/rcd/RCD.dm | 6 +- code/game/objects/items/robot/items/food.dm | 2 +- code/game/objects/items/robot/items/hypo.dm | 8 +- code/game/objects/items/robot/items/tools.dm | 213 +- .../objects/items/robot/robot_upgrades.dm | 62 +- code/game/objects/items/shields.dm | 9 + code/game/objects/items/spear.dm | 25 + .../stacks/golem_food/golem_status_effects.dm | 19 +- code/game/objects/items/stacks/stack.dm | 6 +- code/game/objects/items/storage/bags.dm | 2 +- code/game/objects/items/storage/belt.dm | 2 +- code/game/objects/items/storage/storage.dm | 1 + code/game/objects/items/tanks/tank_types.dm | 2 +- code/game/objects/items/tanks/watertank.dm | 2 +- code/game/objects/items/tools/crowbar.dm | 2 +- code/game/objects/items/tools/screwdriver.dm | 2 +- code/game/objects/items/tools/wirecutters.dm | 2 +- code/game/objects/items/tools/wrench.dm | 2 +- code/game/objects/items/weaponry.dm | 12 + code/game/objects/structures/bedsheet_bin.dm | 2 +- .../objects/structures/gym/punching_bag.dm | 5 +- .../objects/structures/gym/weight_machine.dm | 10 +- code/game/objects/structures/headpike.dm | 4 + .../objects/structures/lavaland/gulag_vent.dm | 5 +- .../objects/structures/lavaland/ore_vent.dm | 3 + code/game/objects/structures/mystery_box.dm | 32 + .../transit_tubes/transit_tube_pod.dm | 2 +- code/game/turfs/open/lava.dm | 6 +- code/game/world.dm | 4 + code/modules/admin/verbs/adminevents.dm | 12 +- .../debug_variable_appearance.dm | 101 + .../admin/view_variables/debug_variables.dm | 7 +- .../admin/view_variables/view_variables.dm | 31 +- .../antagonists/malf_ai/malf_ai_modules.dm | 21 +- .../antagonists/ninja/ninjaDrainAct.dm | 16 +- .../nukeop/equipment/borgchameleon.dm | 4 +- .../antagonists/pirate/pirate_event.dm | 2 +- .../antagonists/pirate/pirate_gangs.dm | 22 + .../antagonists/pirate/pirate_outfits.dm | 31 + .../antagonists/pirate/pirate_roles.dm | 30 + .../pirate/pirate_shuttle_equipment.dm | 3 + .../antagonists/space_dragon/carp_rift.dm | 2 +- .../antagonists/wizard/equipment/artefact.dm | 2 +- code/modules/antagonists/xeno/xeno.dm | 6 +- code/modules/asset_cache/assets/tgui.dm | 22 + .../machinery/air_alarm/air_alarm_interact.dm | 2 +- .../components/electrolyzer/electrolyzer.dm | 2 +- .../unary_devices/machine_connector.dm | 20 +- .../atmospherics/machinery/pipes/pipes.dm | 12 +- .../machinery/portable/canister.dm | 2 +- code/modules/cards/deck/deck.dm | 2 +- code/modules/cards/singlecard.dm | 2 +- code/modules/clothing/clothing.dm | 63 +- code/modules/clothing/glasses/_glasses.dm | 17 +- code/modules/clothing/gloves/boxing.dm | 32 + code/modules/clothing/head/hardhat.dm | 30 +- code/modules/clothing/head/helmet.dm | 85 +- code/modules/clothing/head/jobs.dm | 4 +- code/modules/clothing/head/soft_caps.dm | 2 +- code/modules/clothing/head/welding.dm | 7 +- code/modules/clothing/masks/_masks.dm | 37 +- code/modules/clothing/masks/bandana.dm | 27 +- code/modules/clothing/masks/boxing.dm | 4 +- code/modules/clothing/masks/breath.dm | 6 +- code/modules/clothing/masks/gasmask.dm | 21 +- code/modules/clothing/masks/hailer.dm | 2 +- code/modules/clothing/masks/surgical.dm | 2 +- .../clothing/spacesuits/_spacesuits.dm | 4 +- code/modules/clothing/spacesuits/plasmamen.dm | 28 +- code/modules/clothing/suits/armor.dm | 45 + code/modules/clothing/under/costume.dm | 14 + .../modules/deathmatch/deathmatch_loadouts.dm | 170 +- code/modules/deathmatch/deathmatch_mapping.dm | 3 + code/modules/deathmatch/deathmatch_maps.dm | 22 + .../events/immovable_rod/immovable_rod.dm | 12 +- code/modules/events/shuttle_insurance.dm | 2 +- code/modules/explorer_drone/loot.dm | 2 +- .../food_and_drinks/machinery/microwave.dm | 2 +- .../modules/food_and_drinks/machinery/oven.dm | 2 +- .../food_and_drinks/recipes/food_mixtures.dm | 1 + code/modules/hydroponics/fermenting_barrel.dm | 10 + code/modules/hydroponics/plant_genes.dm | 2 +- code/modules/jobs/access.dm | 9 +- .../ruins/lavalandruin_code/biodome_winter.dm | 2 +- .../ruins/objects_and_mobs/necropolis_gate.dm | 2 +- code/modules/meteors/meteor_types.dm | 2 +- .../modules/mining/equipment/explorer_gear.dm | 16 +- code/modules/mining/equipment/vent_pointer.dm | 19 + code/modules/mining/machine_processing.dm | 2 +- code/modules/mining/machine_silo.dm | 2 +- code/modules/mob/inventory.dm | 14 +- code/modules/mob/living/basic/bots/_bots.dm | 4 +- code/modules/mob/living/basic/bots/bot_ai.dm | 27 +- .../living/basic/bots/cleanbot/cleanbot_ai.dm | 6 +- .../basic/bots/hygienebot/hygienebot_ai.dm | 13 +- .../mob/living/basic/bots/medbot/medbot_ai.dm | 29 +- .../mob/living/basic/drone/drone_tools.dm | 10 +- .../mob/living/basic/drone/visuals_icons.dm | 4 +- .../basic/farm_animals/bee/bee_ai_behavior.dm | 19 +- .../modules/mob/living/basic/festivus_pole.dm | 15 +- .../basic/icemoon/ice_demon/ice_demon_ai.dm | 9 +- .../basic/icemoon/ice_whelp/ice_whelp_ai.dm | 17 +- .../basic/lavaland/brimdemon/brimdemon_ai.dm | 3 +- .../basic/lavaland/goliath/goliath_ai.dm | 18 +- .../lavaland/gutlunchers/gutlunchers_ai.dm | 7 +- .../lavaland/lobstrosity/lobstrosity_ai.dm | 49 +- .../mob/living/basic/lavaland/mook/mook_ai.dm | 18 +- .../mob/living/basic/minebots/minebot_ai.dm | 30 +- .../mob/living/basic/pets/cat/cat_ai.dm | 29 +- .../mob/living/basic/pets/cat/kitten_ai.dm | 5 +- .../mob/living/basic/pets/orbie/orbie_ai.dm | 12 +- .../pets/parrot/parrot_ai/parrot_perching.dm | 12 +- .../pets/parrot/parrot_ai/parroting_action.dm | 2 +- .../living/basic/pets/pet_cult/pet_cult_ai.dm | 16 +- .../mob/living/basic/ruin_defender/flesh.dm | 2 +- .../mob/living/basic/slime/ai/behaviours.dm | 5 +- .../mob/living/basic/space_fauna/carp/carp.dm | 2 + .../basic/space_fauna/carp/carp_ai_actions.dm | 3 +- .../space_fauna/carp/carp_ai_migration.dm | 6 +- .../space_fauna/carp/carp_ai_rift_actions.dm | 12 +- .../eyeball/eyeball_ai_behavior.dm | 28 +- .../space_fauna/hivebot/hivebot_behavior.dm | 7 +- .../giant_spider/giant_spider_subtrees.dm | 18 +- .../basic/space_fauna/statue/mannequin.dm | 7 +- .../mob/living/basic/trader/trader_ai.dm | 8 +- code/modules/mob/living/carbon/alien/alien.dm | 26 +- code/modules/mob/living/carbon/carbon.dm | 30 +- .../mob/living/carbon/carbon_update_icons.dm | 68 +- .../mob/living/carbon/human/_species.dm | 2 +- code/modules/mob/living/carbon/human/dummy.dm | 3 +- .../mob/living/carbon/human/examine.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 9 +- .../mob/living/carbon/human/human_helpers.dm | 12 +- .../living/carbon/human/human_update_icons.dm | 80 +- .../mob/living/carbon/human/inventory.dm | 66 +- code/modules/mob/living/carbon/inventory.dm | 54 +- code/modules/mob/living/init_signals.dm | 2 +- code/modules/mob/living/living.dm | 20 +- code/modules/mob/living/living_say.dm | 2 +- code/modules/mob/living/silicon/robot/life.dm | 2 +- .../modules/mob/living/silicon/robot/robot.dm | 2 +- .../mob/living/silicon/robot/robot_model.dm | 36 +- code/modules/mob/living/silicon/silicon.dm | 2 +- .../living/simple_animal/bot/SuperBeepsky.dm | 6 +- .../mob/living/simple_animal/bot/bot.dm | 15 +- .../mob/living/simple_animal/bot/secbot.dm | 8 +- .../living/simple_animal/hostile/hostile.dm | 10 +- .../hostile/megafauna/colossus.dm | 18 +- .../hostile/mining_mobs/curse_blob.dm | 2 +- .../mob/living/simple_animal/simple_animal.dm | 2 +- code/modules/mob/mob_movement.dm | 6 +- code/modules/mob/mob_update_icons.dm | 92 +- code/modules/mod/mod_activation.dm | 29 +- code/modules/mod/mod_link.dm | 2 +- code/modules/mod/modules/modules_general.dm | 2 +- code/modules/mod/modules/modules_medical.dm | 2 +- code/modules/mod/modules/modules_ninja.dm | 4 - .../file_system/programs/techweb.dm | 2 +- code/modules/paperwork/paper.dm | 2 +- .../plumbing/plumbers/_plumb_machinery.dm | 17 +- code/modules/plumbing/plumbers/acclimator.dm | 3 +- code/modules/plumbing/plumbers/bottler.dm | 4 +- code/modules/plumbing/plumbers/destroyer.dm | 3 +- code/modules/plumbing/plumbers/fermenter.dm | 3 +- .../plumbing/plumbers/grinder_chemical.dm | 17 +- code/modules/plumbing/plumbers/iv_drip.dm | 15 +- code/modules/plumbing/plumbers/pill_press.dm | 3 +- .../plumbing/plumbers/reaction_chamber.dm | 16 +- code/modules/plumbing/plumbers/splitters.dm | 1 - code/modules/plumbing/plumbers/synthesizer.dm | 5 +- code/modules/plumbing/plumbers/teleporter.dm | 2 +- code/modules/plumbing/plumbers/vatgrower.dm | 3 +- code/modules/power/apc/apc_main.dm | 3 +- code/modules/power/apc/apc_tool_act.dm | 4 +- code/modules/power/cell.dm | 18 +- .../boxes_magazines/_box_magazine.dm | 2 +- .../projectiles/guns/ballistic/shotgun.dm | 2 +- .../projectiles/guns/energy/special.dm | 16 +- .../chemistry/machinery/chem_heater.dm | 37 +- .../chemistry/machinery/chem_mass_spec.dm | 28 +- .../reagents/chemistry/recipes/others.dm | 2 +- .../reagents/reagent_containers/misc.dm | 2 +- .../reagents/reagent_containers/spray.dm | 2 +- code/modules/recycling/conveyor.dm | 8 +- code/modules/recycling/disposal/holder.dm | 2 +- code/modules/religion/religion_sects.dm | 4 +- code/modules/religion/rites.dm | 2 +- .../designs/mechfabricator_designs.dm | 30 + .../modules/research/machinery/_production.dm | 21 +- code/modules/research/rdconsole.dm | 2 +- code/modules/research/techweb/all_nodes.dm | 2 + code/modules/shuttle/assault_pod.dm | 25 +- code/modules/shuttle/shuttle.dm | 6 +- .../surgery/bodyparts/head_hair_and_lips.dm | 21 +- code/modules/surgery/bone_mending.dm | 4 +- code/modules/surgery/surgery_step.dm | 7 +- code/modules/tgui_input/list.dm | 2 +- code/modules/unit_tests/lootpanel.dm | 3 +- code/modules/unit_tests/organ_set_bonus.dm | 2 +- .../screenshot_antag_icons_obsessed.png | Bin 3644 -> 3824 bytes code/modules/vehicles/mecha/_mecha.dm | 26 +- .../mecha/equipment/tools/mining_tools.dm | 2 +- .../mecha/equipment/tools/other_tools.dm | 6 +- .../mecha/equipment/tools/work_tools.dm | 2 +- code/modules/vehicles/mecha/mech_bay.dm | 6 +- code/modules/vehicles/mecha/mecha_actions.dm | 13 +- .../vehicles/mecha/mecha_mob_interaction.dm | 24 +- code/modules/vehicles/motorized_wheelchair.dm | 2 +- code/modules/wiremod/shell/gun.dm | 6 +- icons/effects/docking_ports.dmi | Bin 0 -> 697 bytes icons/effects/vent_overlays.dmi | Bin 1404 -> 781 bytes icons/mob/clothing/back.dmi | Bin 111486 -> 126744 bytes icons/mob/clothing/belt.dmi | Bin 50341 -> 47462 bytes icons/mob/clothing/belt_mirror.dmi | Bin 85871 -> 91954 bytes icons/mob/clothing/hands.dmi | Bin 17715 -> 17998 bytes icons/mob/clothing/head/helmet.dmi | Bin 43611 -> 43316 bytes icons/mob/clothing/suits/armor.dmi | Bin 101933 -> 104383 bytes icons/mob/clothing/under/costume.dmi | Bin 52403 -> 60960 bytes .../inhands/equipment/shields_lefthand.dmi | Bin 14975 -> 15916 bytes .../inhands/equipment/shields_righthand.dmi | Bin 15404 -> 16358 bytes icons/mob/inhands/weapons/axes_lefthand.dmi | Bin 2967 -> 3629 bytes icons/mob/inhands/weapons/axes_righthand.dmi | Bin 2912 -> 3585 bytes .../mob/inhands/weapons/polearms_lefthand.dmi | Bin 8440 -> 9494 bytes .../inhands/weapons/polearms_righthand.dmi | Bin 9478 -> 10273 bytes icons/mob/inhands/weapons/swords_lefthand.dmi | Bin 28983 -> 29182 bytes .../mob/inhands/weapons/swords_righthand.dmi | Bin 31921 -> 32213 bytes icons/mob/silicon/robot_items.dmi | Bin 1632 -> 7003 bytes icons/obj/clothing/gloves.dmi | Bin 29739 -> 29425 bytes icons/obj/clothing/head/helmet.dmi | Bin 20861 -> 20816 bytes icons/obj/clothing/suits/armor.dmi | Bin 34336 -> 34031 bytes icons/obj/clothing/under/costume.dmi | Bin 23548 -> 26119 bytes icons/obj/devices/tracker.dmi | Bin 11554 -> 11771 bytes icons/obj/items_cyborg.dmi | Bin 3605 -> 4009 bytes icons/obj/structures.dmi | Bin 83526 -> 81449 bytes icons/obj/weapons/fireaxe.dmi | Bin 1005 -> 1349 bytes icons/obj/weapons/shields.dmi | Bin 6921 -> 7367 bytes icons/obj/weapons/spear.dmi | Bin 5147 -> 5365 bytes icons/obj/weapons/sword.dmi | Bin 22691 -> 22928 bytes .../antagonists/pirate/pirate_outfits.dm | 3 + .../code/modules/clothing/head/_head.dm | 4 +- .../code/modules/clothing/head/hardhat.dm | 12 + .../ammo_workbench/code/ammo_workbench.dm | 2 +- .../modules/borgs/code/robot_model.dm | 8 +- .../modules/clock_cult/code/items/clothing.dm | 4 +- .../modules/clothing/masks/breath.dm | 2 +- .../clothing/~donator/donator_clothing.dm | 12 +- .../modules/ghostcafe/code/robot_ghostcafe.dm | 4 +- .../goofsec/code/sec_clothing_overrides.dm | 2 +- .../modules/implants/code/augments_arms.dm | 4 +- .../medical/code/anesthetic_machine.dm | 6 +- .../code/lewd_machinery/washing_machine.dm | 2 +- .../primitive_catgirls/code/clothing.dm | 2 +- strings/pirates.json | 17 + tgstation.dme | 17 +- tgui/packages/common/type-utils.ts | 41 + tgui/packages/tgui/components/Dropdown.tsx | 204 +- tgui/packages/tgui/components/Stack.tsx | 30 +- tgui/packages/tgui/interfaces/AdminFax.jsx | 5 +- tgui/packages/tgui/interfaces/AdminPDA.jsx | 3 +- .../tgui/interfaces/AiVoiceChanger.tsx | 36 +- tgui/packages/tgui/interfaces/AlertModal.tsx | 222 +- tgui/packages/tgui/interfaces/Cargo.jsx | 576 ----- .../tgui/interfaces/Cargo/CargoButtons.tsx | 39 + .../tgui/interfaces/Cargo/CargoCart.tsx | 130 ++ .../tgui/interfaces/Cargo/CargoCatalog.tsx | 238 +++ .../tgui/interfaces/Cargo/CargoHelp.tsx | 80 + .../tgui/interfaces/Cargo/CargoRequests.tsx | 85 + .../tgui/interfaces/Cargo/CargoStatus.tsx | 75 + .../packages/tgui/interfaces/Cargo/helpers.ts | 35 + tgui/packages/tgui/interfaces/Cargo/index.tsx | 91 + tgui/packages/tgui/interfaces/Cargo/types.ts | 58 + .../packages/tgui/interfaces/CargoExpress.tsx | 26 +- tgui/packages/tgui/interfaces/Changelog.jsx | 4 +- .../tgui/interfaces/CircuitModule.jsx | 2 +- .../tgui/interfaces/CircuitSignalHandler.tsx | 2 +- .../tgui/interfaces/CommandReport.tsx | 4 +- .../tgui/interfaces/ControllerOverview.tsx | 245 --- .../ControllerOverview/OverviewSection.tsx | 57 + .../ControllerOverview/SubsystemDialog.tsx | 69 + .../ControllerOverview/SubsystemRow.tsx | 107 + .../ControllerOverview/SubsystemViews.tsx | 114 + .../interfaces/ControllerOverview/contants.ts | 43 + .../interfaces/ControllerOverview/filters.ts | 45 + .../interfaces/ControllerOverview/index.tsx | 152 ++ .../interfaces/ControllerOverview/types.ts | 33 + tgui/packages/tgui/interfaces/CrewConsole.jsx | 195 -- tgui/packages/tgui/interfaces/CrewConsole.tsx | 307 +++ .../tgui/interfaces/DeathmatchLobby.tsx | 476 +++-- .../tgui/interfaces/DeathmatchPanel.jsx | 95 - .../tgui/interfaces/DeathmatchPanel.tsx | 162 ++ .../IntegratedCircuit/ComponentMenu.jsx | 3 +- .../IntegratedCircuit/FundamentalTypes.jsx | 2 +- .../IntegratedCircuit/VariableMenu.jsx | 4 +- .../tgui/interfaces/LibraryConsole.jsx | 2 +- .../{ => ListInputWindow}/ListInputModal.tsx | 172 +- .../tgui/interfaces/ListInputWindow/index.tsx | 44 + .../tgui/interfaces/LootPanel/IconDisplay.tsx | 14 +- .../tgui/interfaces/LootPanel/LootBox.tsx | 49 +- .../tgui/interfaces/LootPanel/index.tsx | 2 +- tgui/packages/tgui/interfaces/MODsuit.tsx | 2 +- tgui/packages/tgui/interfaces/MineBot.tsx | 2 +- tgui/packages/tgui/interfaces/NavBeacon.tsx | 8 +- tgui/packages/tgui/interfaces/NtosCard.tsx | 3 +- .../tgui/interfaces/NtosRoboControl.jsx | 26 +- .../packages/tgui/interfaces/NtosScipaper.jsx | 8 +- .../tgui/interfaces/NtosVirtualPet.tsx | 6 +- .../tgui/interfaces/PersonalCrafting.tsx | 135 +- .../tgui/interfaces/PlaneMasterDebug.tsx | 1 - .../CharacterPreferenceWindow.tsx | 2 +- .../interfaces/PreferencesMenu/JobsPage.tsx | 13 +- .../interfaces/PreferencesMenu/LimbsPage.tsx | 11 +- .../PreferencesMenu/RandomizationButton.tsx | 5 +- .../preferences/features/base.tsx | 143 +- .../character_preferences/ai_core_display.tsx | 3 +- .../ai_emote_display.tsx | 2 +- .../ai_hologram_display.tsx | 2 +- .../character_preferences/body_type.tsx | 3 +- .../character_preferences/food_allergy.tsx | 3 +- .../character_preferences/glasses.tsx | 2 +- .../character_preferences/hemiplegic.tsx | 3 +- .../features/character_preferences/junkie.tsx | 3 +- .../character_preferences/language.tsx | 3 +- .../features/character_preferences/pda.tsx | 8 +- .../features/character_preferences/phobia.tsx | 3 +- .../character_preferences/pride_pin.tsx | 3 +- .../character_preferences/prisoner_crime.tsx | 3 +- .../character_preferences/prosthetic_limb.tsx | 3 +- .../prosthetic_organ.tsx | 3 +- .../security_department.tsx | 3 +- .../character_preferences/skin_tone.tsx | 80 +- .../skyrat/brain_type.tsx | 3 +- .../skyrat/character_laugh.tsx | 3 +- .../skyrat/character_scream.tsx | 3 +- .../character_preferences/skyrat/genitals.tsx | 2 +- .../skyrat/loadout_override_preference.tsx | 3 +- .../skyrat/pet_owner.tsx | 8 +- .../skyrat/species_features.tsx | 2 +- .../trans_prosthetic.tsx | 3 +- .../character_preferences/tts_voice.tsx | 2 +- .../character_preferences/uplink_loc.tsx | 3 +- .../preferences/features/dropdowns.tsx | 113 + .../features/game_preferences/admin.tsx | 2 +- .../features/game_preferences/ghost.tsx | 5 +- .../game_preferences/ghost_lighting.tsx | 3 +- .../features/game_preferences/mod_select.tsx | 3 +- .../features/game_preferences/parallax.tsx | 3 +- .../game_preferences/preferred_map.tsx | 3 +- .../features/game_preferences/screentips.tsx | 2 +- .../skyrat/erp_preferences.tsx | 8 +- .../features/game_preferences/sounds.tsx | 2 +- .../features/game_preferences/ui_style.tsx | 1 - .../preferences/features/species_features.tsx | 2 +- .../packages/tgui/interfaces/ProcCallMenu.tsx | 4 +- .../RequestsConsole/MessageWriteTab.tsx | 6 +- .../tgui/interfaces/StationTraitsPanel.tsx | 4 +- .../tgui/interfaces/TramController.tsx | 2 +- .../tgui/interfaces/common/InputButtons.tsx | 23 +- .../tgui/styles/components/SearchItem.scss | 21 +- .../tgui/styles/components/Stack.scss | 18 + tools/pull_request_hooks/rerunFlakyTests.js | 47 +- 537 files changed, 10040 insertions(+), 5195 deletions(-) create mode 100644 _maps/deathmatch/ragin_mages.dmm create mode 100644 _maps/shuttles/pirate_medieval.dmm create mode 100644 code/__DEFINES/pronouns.dm create mode 100644 code/datums/skills/athletics.dm delete mode 100644 code/datums/skills/fitness.dm create mode 100644 code/datums/systems/_system.dm rename code/{controllers/subsystem => datums/systems/ds}/battle_royale.dm (96%) rename code/{controllers/subsystem => datums/systems/ds}/communications.dm (87%) rename code/{controllers/subsystem => datums/systems/ds}/materials.dm (92%) rename code/{controllers/subsystem/movement => datums/systems/ds}/move_handler.dm (91%) create mode 100644 code/datums/systems/manager.dm create mode 100644 code/game/machinery/dna_infuser/dna_infusion.dm create mode 100644 code/modules/admin/view_variables/debug_variable_appearance.dm create mode 100644 code/modules/mining/equipment/vent_pointer.dm create mode 100644 icons/effects/docking_ports.dmi create mode 100644 modular_skyrat/master_files/code/modules/clothing/head/hardhat.dm create mode 100644 tgui/packages/common/type-utils.ts delete mode 100644 tgui/packages/tgui/interfaces/Cargo.jsx create mode 100644 tgui/packages/tgui/interfaces/Cargo/CargoButtons.tsx create mode 100644 tgui/packages/tgui/interfaces/Cargo/CargoCart.tsx create mode 100644 tgui/packages/tgui/interfaces/Cargo/CargoCatalog.tsx create mode 100644 tgui/packages/tgui/interfaces/Cargo/CargoHelp.tsx create mode 100644 tgui/packages/tgui/interfaces/Cargo/CargoRequests.tsx create mode 100644 tgui/packages/tgui/interfaces/Cargo/CargoStatus.tsx create mode 100644 tgui/packages/tgui/interfaces/Cargo/helpers.ts create mode 100644 tgui/packages/tgui/interfaces/Cargo/index.tsx create mode 100644 tgui/packages/tgui/interfaces/Cargo/types.ts delete mode 100644 tgui/packages/tgui/interfaces/ControllerOverview.tsx create mode 100644 tgui/packages/tgui/interfaces/ControllerOverview/OverviewSection.tsx create mode 100644 tgui/packages/tgui/interfaces/ControllerOverview/SubsystemDialog.tsx create mode 100644 tgui/packages/tgui/interfaces/ControllerOverview/SubsystemRow.tsx create mode 100644 tgui/packages/tgui/interfaces/ControllerOverview/SubsystemViews.tsx create mode 100644 tgui/packages/tgui/interfaces/ControllerOverview/contants.ts create mode 100644 tgui/packages/tgui/interfaces/ControllerOverview/filters.ts create mode 100644 tgui/packages/tgui/interfaces/ControllerOverview/index.tsx create mode 100644 tgui/packages/tgui/interfaces/ControllerOverview/types.ts delete mode 100644 tgui/packages/tgui/interfaces/CrewConsole.jsx create mode 100644 tgui/packages/tgui/interfaces/CrewConsole.tsx delete mode 100644 tgui/packages/tgui/interfaces/DeathmatchPanel.jsx create mode 100644 tgui/packages/tgui/interfaces/DeathmatchPanel.tsx rename tgui/packages/tgui/interfaces/{ => ListInputWindow}/ListInputModal.tsx (57%) create mode 100644 tgui/packages/tgui/interfaces/ListInputWindow/index.tsx create mode 100644 tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/dropdowns.tsx diff --git a/.github/guides/VISUALS.md b/.github/guides/VISUALS.md index 82ee0c6b5d6..9c385ee8765 100644 --- a/.github/guides/VISUALS.md +++ b/.github/guides/VISUALS.md @@ -4,10 +4,10 @@ Welcome to a breakdown of visuals and visual effects in our codebase, and in BYO I will be describing all of the existing systems we use, alongside explaining and providing references to BYOND's ref for each tool. -Note, I will not be covering things that are trivial to understand, and which we don't mess with much. +Note, I will not be covering things that are trivial to understand, and which we don't mess with much. For a complete list of byond ref stuff relevant to this topic, see [here](https://www.byond.com/docs/ref/#/atom/var/appearance). -This is to some extent a collation of the BYOND ref, alongside a description of how we actually use these tools. +This is to some extent a collation of the BYOND ref, alongside a description of how we actually use these tools. My hope is after reading this you'll be able to understand and implement different visual effects in our codebase. Also please see the ref entry on the [renderer](https://www.byond.com/docs/ref/#/{notes}/renderer). @@ -53,10 +53,10 @@ You'll find links to the relevant reference entries at the heading of each entry ## Appearances in BYOND - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/appearance) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/appearance) Everything that is displayed on the map has an appearance variable that describes exactly how it should be rendered. -To be clear, it doesn't contain EVERYTHING, [plane masters](#planes) exist separately and so do many other factors. +To be clear, it doesn't contain EVERYTHING, [plane masters](#planes) exist separately and so do many other factors. But it sets out a sort of recipe of everything that could effect rendering. Appearances have a few quirks that can be helpful or frustrating depending on what you're trying to do. @@ -65,25 +65,27 @@ To start off with, appearances are static. You can't directly edit an appearance The way to edit them most of the time is to just modify the corresponding variable on the thing the appearance represents. -This doesn't mean it's impossible to modify them directly however. While appearances are static, +This doesn't mean it's impossible to modify them directly however. While appearances are static, their cousins mutable appearances [(Ref Entry)](https://www.byond.com/docs/ref/info.html#/mutable_appearance) **are**. -What we can do is create a new mutable appearance, set its appearance to be a copy of the static one (remember all appearance variables are static), +What we can do is create a new mutable appearance, set its appearance to be a copy of the static one (remember all appearance variables are static), edit it, and then set the desired thing's appearance var to the appearance var of the mutable. Somewhat like this ```byond -// NOTE: we do not actually have access to a raw appearance type, so we will often +// NOTE: we do not actually have access to a raw appearance type, so we will often // Lie to the compiler, and pretend we are using a mutable appearance // This lets us access vars as expected. Be careful with it tho -/proc/mutate_icon_state(mutable_appearance/thing) +/proc/mutate_icon_state(mutable_appearance/thing) var/mutable_appearance/temporary_lad = new() temporary_lad.appearance = thing temporary_lad.icon_state += "haha_owned" return temporary_lad.appearance ``` +> **Note:** More then being static, appearances are unique. Only one copy of each set of appearance vars exists, and when you modify any of those vars, the corrosponding appearance variable changes its value to whatever matches the new hash. That's why appearance vars can induce inconsistent cost on modification. + > **Warning:** BYOND has been observed to have issues with appearance corruption, it's something to be weary of when "realizing" appearances in this manner. ## Overlays @@ -91,7 +93,7 @@ Somewhat like this - [Table of Contents](#table-of-contents) - [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/overlays) (Also see [rendering](https://www.byond.com/docs/ref/#/{notes}/renderer)) -Overlays are a list of static [appearances](#appearances-in-byond) that we render on top of ourselves. +Overlays are a list of static [appearances](#appearances-in-byond) that we render on top of ourselves. Said appearances can be edited via the realizing method mentioned above. Their rendering order is determined by [layer](#layers) and [plane](#planes), but conflicts are resolved based off order of appearance inside the list. @@ -104,67 +106,67 @@ It's not significant, but it is there, and something to be aware of. ### Our Implementation -We use overlays as our primary method of overlaying visuals. +We use overlays as our primary method of overlaying visuals. However, since overlays are COPIES of a thing's appearance, ensuring that they can be cleared is semi troublesome. To solve this problem, we manage most overlays using `update_overlays()`. -This proc is called whenever an atom's appearance is updated with `update_appearance()` -(essentially just a way to tell an object to rerender anything static about it, like icon state or name), +This proc is called whenever an atom's appearance is updated with `update_appearance()` +(essentially just a way to tell an object to rerender anything static about it, like icon state or name), which will often call `update_icon()`. `update_icon()` handles querying the object for its desired icon, and also manages its overlays, by calling `update_overlays()`. -Said proc returns a list of things to turn into static appearances, which are then passed into `add_overlay()`, +Said proc returns a list of things to turn into static appearances, which are then passed into `add_overlay()`, which makes them static with `build_appearance_list()` before queuing an overlay compile. -This list of static appearances is then queued inside a list called `managed_overlays` on `/atom`. +This list of static appearances is then queued inside a list called `managed_overlays` on `/atom`. This is so we can clear old overlays out before running an update. -We actually compile queued overlay builds once every tick using a dedicated subsystem. +We actually compile queued overlay builds once every tick using a dedicated subsystem. This is done to avoid adding/removing/adding again to the overlays list in cases like humans where it's mutated a lot. -You can bypass this managed overlays system if you'd like, using `add_overlay()` and `cut_overlay()`, +You can bypass this managed overlays system if you'd like, using `add_overlay()` and `cut_overlay()`, but this is semi dangerous because you don't by default have a way to "clear" the overlay. Be careful of this. ## Visual Contents - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/vis_contents) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/vis_contents) The `vis_contents` list allows you to essentially say "Hey, render this thing ON me". -The definition of "ON" varies significantly with the `vis_flags` value of the *thing* being relayed. -See the ref [here](https://www.byond.com/docs/ref/#/atom/var/vis_flags). +The definition of "ON" varies significantly with the `vis_flags` value of the *thing* being relayed. +See the ref [here](https://www.byond.com/docs/ref/#/atom/var/vis_flags). Some flags of interest: -- `VIS_INHERIT_ID`: This allows you to link the object DIRECTLY to the thing it's drawn on, +- `VIS_INHERIT_ID`: This allows you to link the object DIRECTLY to the thing it's drawn on, so clicking on the `vis_contents`'d object is just like clicking on the thing -- `VIS_INHERIT_PLANE`: We will discuss [planes](#planes) more in future, but we use them to both effect rendering order and apply effects as a group. -This flag changes the plane of any `vis_contents`'d object (while displayed on the source object) to the source's. +- `VIS_INHERIT_PLANE`: We will discuss [planes](#planes) more in future, but we use them to both effect rendering order and apply effects as a group. +This flag changes the plane of any `vis_contents`'d object (while displayed on the source object) to the source's. This is occasionally useful, but should be used with care as it breaks any effects that rely on plane. -Anything inside a `vis_contents` list will have its loc stored in its `vis_locs` variable. +Anything inside a `vis_contents` list will have its loc stored in its `vis_locs` variable. We very rarely use this, primarily just for clearing references from `vis_contents`. -`vis_contents`, unlike `overlays` is a reference, not a copy. So you can update a `vis_contents`'d thing and have it mirror properly. +`vis_contents`, unlike `overlays` is a reference, not a copy. So you can update a `vis_contents`'d thing and have it mirror properly. This is how we do multiz by the by, with uh, some more hell discussed under [multiz](#multiz). -To pay for this additional behavior however, vis_contents has additional cost in maptick. -Because it's not a copy, we need to constantly check if it's changed at all, which leads to cost scaling with player count. +To pay for this additional behavior however, vis_contents has additional cost in maptick. +Because it's not a copy, we need to constantly check if it's changed at all, which leads to cost scaling with player count. Careful how much you use it. ## Images - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/image) +- [Reference Entry](https://www.byond.com/docs/ref/#/image) Images are technically parents of [mutable appearances](#appearances-in-byond). We don't often use them, mostly because we can accomplish their behavior with just MAs. -Images exist both to be used in overlays, and to display things to only select clients on the map. +Images exist both to be used in overlays, and to display things to only select clients on the map. See [/client/var/images](#client-images) > Note: the inheritance between the two is essentially for engine convenience. Don't rely on it. @@ -172,7 +174,7 @@ See [/client/var/images](#client-images) ## Client Images - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/client/var/images) +- [Reference Entry](https://www.byond.com/docs/ref/#/client/var/images) `/client/var/images` is a list of image objects to display to JUST that particular client. @@ -180,35 +182,35 @@ The image objects are displayed at their loc variable, and can be shown to more ### Our Implementation -We use client images in a few ways. Often they will be used just as intended, to modify the view of just one user. +We use client images in a few ways. Often they will be used just as intended, to modify the view of just one user. Think tray scanner or technically ai static. -However, we often want to show a set of images to the same GROUP of people, but in a limited manner. +However, we often want to show a set of images to the same GROUP of people, but in a limited manner. For this, we use the `/datum/atom_hud` (hereafter hud) system. This is different from `/datum/hud`, which I will discuss later. -HUDs are datums that represent categories of images to display to users. +HUDs are datums that represent categories of images to display to users. They are most often global, but can be created on an atom to atom bases in rare cases. They store a list of images to display (sorted by source z level to reduce lag) and a list of clients to display to. -We then mirror this group of images into/out of the client's images list, based on what HUDs they're able to see. +We then mirror this group of images into/out of the client's images list, based on what HUDs they're able to see. This is the pattern we use for things like the medihud, or robot trails. ## View - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/client/var/view) +- [Reference Entry](https://www.byond.com/docs/ref/#/client/var/view) -`/client/var/view` is actually a pretty simple topic, -but I'm gonna take this chance to discuss the other things we do to manage pixel sizing and such since there isn't a better place for it, +`/client/var/view` is actually a pretty simple topic, +but I'm gonna take this chance to discuss the other things we do to manage pixel sizing and such since there isn't a better place for it, and they're handled in the same place by us. Alright then, view. This is pretty simple, but it basically just lets us define the tile bound we want to show to our client. This can either be a number for an X by X square, or a string in the form "XxY" for more control. -We use `/datum/view_data` to manage and track view changes, so zoom effects can work without canceling or being canceled by anything else. +We use `/datum/view_data` to manage and track view changes, so zoom effects can work without canceling or being canceled by anything else. ### Client Rendering Modes @@ -218,29 +220,29 @@ Clients get some choice in literally how they want the game to be rendered to th The two I'm gonna discuss here are `zoom`, and `zoom-mode` mode, both of which are skin params (basically just variables that live on the client) -`zoom` decides how the client wants to display the turfs shown to it. -It can have two types of values. -If it's equal to 0 it will stretch the tiles sent to the client to fix the size of the map-window. -Otherwise, any other numbers will lead to pixels being scaled by some multiple. +`zoom` decides how the client wants to display the turfs shown to it. +It can have two types of values. +If it's equal to 0 it will stretch the tiles sent to the client to fix the size of the map-window. +Otherwise, any other numbers will lead to pixels being scaled by some multiple. This effect can only really result in nice clean edges if you pass in whole numbers which is why most of the constant scaling we give players are whole numbers. -`zoom-mode` controls how a pixel will be up-scaled, if it needs to be. -See the ref for more details, but `normal` is gonna have the sharpest output, `distort` uses nearest neighbor, +`zoom-mode` controls how a pixel will be up-scaled, if it needs to be. +See the ref for more details, but `normal` is gonna have the sharpest output, `distort` uses nearest neighbor, which causes some blur, and `blur` uses bilinear sampling, which causes a LOT of blur. ## Eye - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/client/var/eye) +- [Reference Entry](https://www.byond.com/docs/ref/#/client/var/eye) -`/client/var/eye` is the atom or mob at which our view should be centered. +`/client/var/eye` is the atom or mob at which our view should be centered. Any screen objects we display will show "off" this, as will our actual well eye position. -It is by default `/client/var/mob` but it can be modified. +It is by default `/client/var/mob` but it can be modified. This is how we accomplish ai eyes and ventcrawling, alongside most other effects that involve a player getting "into" something. ## Client Screen - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/HUD) +- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/HUD) Similar to client images but not *quite* the same, we can also insert objects onto our client's literal screen @@ -256,21 +258,21 @@ The classic `screen_loc` format looks something like this (keeping in mind it co The pixel offsets can be discarded as optional, but crucially the x and y values do not NEED to be absolute. -We can use cardinal keywords like `NORTH` to anchor screen objects to the view size of the client (a topic that will be discussed soon). -You can also use directional keywords like `TOP` to anchor to the actual visible map-window, which prevents any accidental out of bounds. -Oh yeah you can use absolute offsets to position screen objects out of the view range, which will cause the map-window to forcefully expand, +We can use cardinal keywords like `NORTH` to anchor screen objects to the view size of the client (a topic that will be discussed soon). +You can also use directional keywords like `TOP` to anchor to the actual visible map-window, which prevents any accidental out of bounds. +Oh yeah you can use absolute offsets to position screen objects out of the view range, which will cause the map-window to forcefully expand, exposing the parts of the map byond uses to ahead of time render border things so moving is smooth. ### Secondary Maps While we're here, this is a bit of a side topic but you can have more then one map-window on a client's screen at once. -This gets into dmf fuckery but you can use [window ids](https://www.byond.com/docs/ref/#/{skin}/param/id) to tell a screen object to render to a secondary map. +This gets into dmf fuckery but you can use [window ids](https://www.byond.com/docs/ref/#/{skin}/param/id) to tell a screen object to render to a secondary map. Useful for creating popup windows and such. ## Blend Mode - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/blend_mode) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/blend_mode) `/atom/var/blend_mode` defines how an atom well, renders onto the map. @@ -280,7 +282,7 @@ This is how we do lighting effects, since the lighting [plane](#planes) can be u ## Appearance Flags - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/appearance_flags) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/appearance_flags) `/atom/var/appearance_flags` is a catch all for toggles that apply to visual elements of an atom. I won't go over all of them, but I will discuss a few. @@ -293,8 +295,8 @@ Flags of interest: ## Gliding - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/gliding) - +- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/gliding) + You may have noticed that moving between tiles is smooth, or at least as close as we can get it. Moving at 0.2 or 10 tiles per second will be smooth. This is because we have control over the speed at which atoms animate between moves. @@ -306,37 +308,37 @@ This is done using `/atom/movable/proc/set_glide_size`, which will inform anythi Glide size is often set in the context of some rate of movement. Either the movement delay of a mob, set in `/client/Move()`, or the delay of a movement subsystem. We use defines to turn delays into pixels per tick. -Client moves will be limited by `DELAY_TO_GLIDE_SIZE` which will allow at most 32 pixels a tick. -Subsystems and other niche uses use `MOVEMENT_ADJUSTED_GLIDE_SIZE`. -We will also occasionally use glide size as a way to force a transition between different movement types, like space-drift into normal walking. +Client moves will be limited by `DELAY_TO_GLIDE_SIZE` which will allow at most 32 pixels a tick. +Subsystems and other niche uses use `MOVEMENT_ADJUSTED_GLIDE_SIZE`. +We will also occasionally use glide size as a way to force a transition between different movement types, like space-drift into normal walking. There's extra cruft here. -> Something you should know: Our gliding system attempts to account for time dilation when setting move rates. +> Something you should know: Our gliding system attempts to account for time dilation when setting move rates. This is done in a very simplistic way however, so a spike in td will lead to jumping around as glide rate is outpaced by mob movement rate. -On that note, it is VERY important that glide rate is the same or near the same as actual move rate. -Otherwise you will get strange jumping and jitter. +On that note, it is VERY important that glide rate is the same or near the same as actual move rate. +Otherwise you will get strange jumping and jitter. This can also lead to stupid shit where people somehow manage to intentionally shorten a movement delay to jump around. Dumb. Related to the above, we are not always able to maintain sync between glide rate and mob move rate. -This is because mob move rate is a function of the initial move delay and a bunch of slowdown/speedup modifiers. -In order to maintain sync we would need to issue a move command the MOMENT a delay is up, and if delays are not cleanly divisible by our tick rate (0.5 deciseconds) this is impossible. +This is because mob move rate is a function of the initial move delay and a bunch of slowdown/speedup modifiers. +In order to maintain sync we would need to issue a move command the MOMENT a delay is up, and if delays are not cleanly divisible by our tick rate (0.5 deciseconds) this is impossible. This is why you'll sometime see a stutter in your step when slowed Just so you know, client movement works off `/client/var/move_delay` which sets the next time an input will be accepted. It's typically glide rate, but is in some cases just 1 tick. ## Sight - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/mob/var/sight) +- [Reference Entry](https://www.byond.com/docs/ref/#/mob/var/sight) `/mob/var/sight` is a set of bitflags that *mostly* set what HAS to render on your screen. Be that mobs, turfs, etc. That said, there is some nuance here so I'ma get into that. -- `SEE_INFRA`: I'll get into this later, but infrared is essentially a copy of BYOND darkness, it's not something we currently use. -- `SEE_BLACKNESS`: This relates heavily to [planes](#planes), essentially typically the "blackness" (that darkness that masks things that you can't see) -is rendered separately, out of our control as "users". +- `SEE_INFRA`: I'll get into this later, but infrared is essentially a copy of BYOND darkness, it's not something we currently use. +- `SEE_BLACKNESS`: This relates heavily to [planes](#planes), essentially typically the "blackness" (that darkness that masks things that you can't see) +is rendered separately, out of our control as "users". However, if the `SEE_BLACKNESS` flag is set, it will instead render on plane 0, the default BYOND plane. -This allows us to capture it, and say, blur it, or redraw it elsewhere. This is in theory very powerful, but not possible with the 'side_map' [map format](https://www.byond.com/docs/ref/#/world/var/map_format) +This allows us to capture it, and say, blur it, or redraw it elsewhere. This is in theory very powerful, but not possible with the 'side_map' [map format](https://www.byond.com/docs/ref/#/world/var/map_format) ## BYOND Lighting @@ -346,14 +348,14 @@ Alongside OUR lighting implementation, which is discussed in with color matrixes It's very basic. Essentially, a tile is either "lit" or it's not. -If a tile is not lit, and it matches some other preconditions, it and all its contents will be hidden from the user, +If a tile is not lit, and it matches some other preconditions, it and all its contents will be hidden from the user, sort of like if there was a wall between them. This hiding uses BYOND darkness, and is thus controllable. I'll use this section to discuss all the little bits that contribute to this behavior ### Luminosity - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/luminosity) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/luminosity) `/atom/var/luminosity` is a variable that lets us inject light into BYOND's lighting system. It's real simple, just a range of tiles that will be lit, respecting sight-lines and such of course. @@ -363,16 +365,16 @@ You can actually force it to use a particular mob's sight to avoid aspects of th ### See in Dark - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/mob/var/see_in_dark) +- [Reference Entry](https://www.byond.com/docs/ref/#/mob/var/see_in_dark) This is why when you stand in darkness you can see yourself, and why you can see a line of objects appear when you use mesons (horrible effect btw). It's quite simple, but worth describing. ### Infrared - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/mob/var/see_infrared) +- [Reference Entry](https://www.byond.com/docs/ref/#/mob/var/see_infrared) -Infrared vision can be thought of as a hidden copy of standard BYOND darkness. +Infrared vision can be thought of as a hidden copy of standard BYOND darkness. It's not something we actually use, but I think you should know about it, because the whole thing is real confusing without context. ## Invisibility @@ -388,16 +390,16 @@ It's also used to hide some more then ghost invisible things, like some timers a ## Layers - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/layer) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/layer) -`/atom/var/layer` is the first bit of logic that decides the order in which things on the map render. -Rendering order depends a LOT on the [map format](https://www.byond.com/docs/ref/#/world/var/map_format), -which I will not get into in this document because it is not yet relevant. -All you really need to know is for our current format, -the objects that appear first in something's contents will draw first, and render lowest. -Think of it like stacking little paper cutouts. +`/atom/var/layer` is the first bit of logic that decides the order in which things on the map render. +Rendering order depends a LOT on the [map format](https://www.byond.com/docs/ref/#/world/var/map_format), +which I will not get into in this document because it is not yet relevant. +All you really need to know is for our current format, +the objects that appear first in something's contents will draw first, and render lowest. +Think of it like stacking little paper cutouts. -Layer has a bit more nuance then just being lowest to highest, tho it's not a lot. +Layer has a bit more nuance then just being lowest to highest, tho it's not a lot. There are a few snowflake layers that can be used to accomplish niche goals, alongside floating layers, which are essentially just any layer that is negative. Floating layers will float "up" the chain of things they're being drawn onto, until they find a real layer. They'll then offset off of that. @@ -406,7 +408,7 @@ This allows us to keep relative layer differences while not needing to make all ## Planes - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/plane) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/plane) Allllright `/atom/var/plane`s. Let's talk about em. @@ -415,16 +417,16 @@ Higher planes will (**normally**) render over lower ones. Very clearcut. Similarly to [layers](#layers), planes also support "floating" with `FLOAT_PLANE`. See above for an explanation of that. -However, they can be used for more complex and... fun things too! +However, they can be used for more complex and... fun things too! If a client has an atom with the `PLANE_MASTER` [appearance flag](#appearance-flags) in their [screen](#client-screen), then rather then being all rendered normally, anything in the client's view is instead first rendered onto the plane master. -This is VERY powerful, because it lets us [hide](https://www.byond.com/docs/ref/#/atom/var/alpha), [color](#color), +This is VERY powerful, because it lets us [hide](https://www.byond.com/docs/ref/#/atom/var/alpha), [color](#color), and [distort](#filters) whole classes of objects, among other things. I cannot emphasize enough how useful this is. It does have some downsides however. Because planes are tied to both grouping and rendering order, there are some effects that require splitting a plane into bits. -It's also possible for some effects, especially things relating to [map format](https://www.byond.com/docs/ref/#/world/var/map_format), +It's also possible for some effects, especially things relating to [map format](https://www.byond.com/docs/ref/#/world/var/map_format), to just be straight up impossible, or conflict with each other. It's dumb, but it's what we've got brother so we're gonna use it like it's a free ticket to the bahamas. @@ -432,15 +434,15 @@ We have a system that allows for arbitrary grouping of plane masters for the pur called `/atom/movable/plane_master_controller`. This is somewhat outmoded by our use of [render relays](#render-targetsource), but it's still valid and occasionally useful. -> Something you should know: Plane masters effect ONLY the map their screen_loc is on. +> Something you should know: Plane masters effect ONLY the map their screen_loc is on. For this reason, we are forced to generate whole copies of the set of plane masters with the proper screen_loc to make subviews look right -> Warning: Planes have some restrictions on valid values. They NEED to be whole integers, and they NEED to have an absolute value of `10000`. +> Warning: Planes have some restrictions on valid values. They NEED to be whole integers, and they NEED to have an absolute value of `10000`. This is to support `FLOAT_PLANE`, which lives out at the very edge of the 32 bit int range. ## Render Target/Source - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/render_target) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/render_target) Render targets are a way of rendering one thing onto another. Not like vis_contents but in a literal sense ONTO. The target object is given a `/atom/var/render_target` value, and anything that wishes to "take" it sets its `/atom/var/render_source` var to match. @@ -475,8 +477,8 @@ This meant the turf below looked as if it was offset, and everything was good. Except not, for 2 reasons. One more annoying then the other. - 1: It looked like dog doo-doo. This pattern destroyed the old planes of everything vis_contents'd, so effects/lighting/dropshadows broke bad. -- 2: I alluded to this earlier, but it totally breaks the `side_map` [map format](https://www.byond.com/docs/ref/#/world/var/map_format) -which I need for a massive resprite I'm helping with. This is because `side_map` changes how rendering order works, +- 2: I alluded to this earlier, but it totally breaks the `side_map` [map format](https://www.byond.com/docs/ref/#/world/var/map_format) +which I need for a massive resprite I'm helping with. This is because `side_map` changes how rendering order works, going off "distance" from the front of the frame. The issue here is it of course needs a way to group things that are even allowed to overlap, so it uses plane. So when you squish everything down onto one plane, this of course breaks horribly and fucks you. @@ -491,7 +493,7 @@ to the openspace plane master one level up. More then doable. SECOND problem. How do we get everything below to "land" on the right plane? The answer to this is depressing but still true. We manually offset every single object on the map's plane based off its "z layer". -This includes any `overlays` or `vis_contents` with a unique plane value. +This includes any `overlays` or `vis_contents` with a unique plane value. Mostly we require anything that sets the plane var to pass in a source of context, like a turf or something that can be used to derive a turf. There are a few edge cases where we need to work in explicitly offsets, but those are much rarer. @@ -500,18 +502,18 @@ This is stupid, but it's makable, and what we do. ## Mouse Opacity - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/mouse_opacity) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/mouse_opacity) `/atom/var/mouse_opacity` tells clients how to treat mousing over the atom in question. A value of 0 means it is completely ignored, no matter what. A value of 1 means it is transparent/opaque based off the alpha of the icon at any particular part. -A value of 2 means it will count as opaque across ALL of the icon-state. All 32x32 (or whatever) of it. +A value of 2 means it will count as opaque across ALL of the icon-state. All 32x32 (or whatever) of it. -We will on occasion use mouse opacity to expand hitboxes, but more often this is done with [vis_contents](#visual-contents), +We will on occasion use mouse opacity to expand hitboxes, but more often this is done with [vis_contents](#visual-contents), or just low alpha pixels on the sprite. -> Note: Mouse opacity will only matter if the atom is being rendered on its own. [Overlays](#overlays)(and [images](#images)) +> Note: Mouse opacity will only matter if the atom is being rendered on its own. [Overlays](#overlays)(and [images](#images)) will NOT work as expected with this. However, you can still have totally transparent overlays. If you render them onto a [plane master](#planes) with the desired mouse opacity value it will work as expected. This is because as a step of the rendering pipeline the overlay is rendered ONTO the plane master, and then the plane @@ -519,10 +521,10 @@ master's effects are applied. ## Filters - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/filters) +- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/filters) Filters are a general purpose system for applying a limited set of shaders to a render. -These shaders run on the client's machine. This has upsides and downsides. +These shaders run on the client's machine. This has upsides and downsides. Upside: Very cheap for the server. Downside: Potentially quite laggy for the client. Take care with these @@ -544,7 +546,7 @@ It'll let you add and tweak *most* of the filters in BYOND. ## Particles - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/particles) +- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/particles) Particles are a system that allows you to attach "generators" to atoms on the world, and have them spit out little visual effects. This is done by creating a subtype of the `/particles` type, and giving it the values you want. @@ -558,7 +560,7 @@ It'll let you add and tweak the particles attached to that atom. ## Pixel Offsets - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/pixel_x) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/pixel_x) This is a real simple idea and I normally wouldn't mention it, but I have something else I wanna discuss related to it, so I'ma take this chance. @@ -571,7 +573,7 @@ There are two "types" of each direction offset. There's the "real" offset (x/y) Real offsets will change both the visual position (IE: where it renders) and also the positional position (IE: where the renderer thinks they are). Fake offsets only effect visual position. -This doesn't really matter for our current map format, but for anything that takes position into account when layering, like `side_map` or `isometric_map` +This doesn't really matter for our current map format, but for anything that takes position into account when layering, like `side_map` or `isometric_map` it matters a whole ton. It's kinda a hard idea to get across, but I hope you have at least some idea. ## Map Formats @@ -585,10 +587,10 @@ There are 4 types currently. Only 2 that are interesting to us, and one that's n Most of them involve changing how layering works, from the standard [layers](#layers) and [planes](#planes) method. There's a bit more detail here, not gonna go into it, stuff like [underlays](https://www.byond.com/docs/ref/#/atom/var/underlays) drawing under things. See [Understanding The Renderer](https://www.byond.com/docs/ref/#/{notes}/renderer) -> There is very technically more nuance here. +> There is very technically more nuance here. > In default rendering modes, byond will conflict break by using the thing that is highest in the contents list of its location. Or lowest. Don't remember. -### [`TOPDOWN_MAP`](https://www.byond.com/docs/ref/#/{notes}/topdown) +### [`TOPDOWN_MAP`](https://www.byond.com/docs/ref/#/{notes}/topdown) This is the default rendering format. What we used to use. It tells byond to render going off [plane](#planes) first, then [layer](#layers). There's a few edgecases involving big icons, but it's small peanuts. @@ -604,7 +606,7 @@ The idea is the closer to the front of the screen something is, the higher its l `pixel_y` + `y` tell the engine where something "is". `/atom/var/bound_width`, `/atom/var/bound_height` and `/atom/var/bound_x/y` describe how big it is, which lets us in theory control what it tries to layer "against". -I'm not bothering with reference links because they are entirely unrelated. +I'm not bothering with reference links because they are entirely unrelated. An issue that will crop up with this map format is needing to manage the "visual" (how/where it renders) and physical (where it is in game) aspects of position and size. Physical position tells the renderer how to layer things. Visual position and a combination of physical bounds (manually set) and visual bounds (inferred from other aspects of it. Sprite width/height, physical bounds, transforms, filters, etc) tell it what the sprite might be rendering OVER. @@ -645,28 +647,28 @@ One more thing. Big icons are fucked From the byond reference >If you use an icon wider than one tile, the "footprint" of the isometric icon (the actual map tiles it takes up) will always be a square. That is, if your normal tile size is 64 and you want to show a 128x128 icon, the icon is two tiles wide and so it will take up a 2×2-tile area on the map. The height of a big icon is irrelevant--any excess height beyond width/2 is used to show vertical features. To draw this icon properly, other tiles on that same ground will be moved behind it in the drawing order. -> One important warning about using big icons in isometric mode is that you should only do this with dense atoms. If part of a big mob icon covers the same tile as a tall building for instance, the tall building is moved back and it could be partially covered by other turfs that are actually behind it. A mob walking onto a very large non-dense turf icon would experience similar irregularities. +> One important warning about using big icons in isometric mode is that you should only do this with dense atoms. If part of a big mob icon covers the same tile as a tall building for instance, the tall building is moved back and it could be partially covered by other turfs that are actually behind it. A mob walking onto a very large non-dense turf icon would experience similar irregularities. These can cause very annoying flickering. In fact, MUCH of how rendering works causes flickering. This is because we don't decide on a pixel by pixel case, the engine groups sprites up into a sort of rendering stack, unable to split them up. -This combined with us being unable to modify bounds means that if one bit of the view is conflicting. +This combined with us being unable to modify bounds means that if one bit of the view is conflicting. If A wants to be above B and below C, but B wants to be below A and above C, we'll be unable to resolve the rendering properly, leading to flickering depending on other aspects of the layering. This can just sort of spread. Very hard to debug. -### [`ISOMETRIC_MAP`](https://www.byond.com/docs/ref/#/{notes}/isometric) - +### [`ISOMETRIC_MAP`](https://www.byond.com/docs/ref/#/{notes}/isometric) + Isometric mode, renders everything well, isometrically, biased to the north east. This gives the possibility for fake 3d, assuming you get things drawn properly. It will render things in the foreground "last", after things in the background. This is the right way of thinking about it, it's not rendering things above or below, but in a layering order. This is interesting mostly in the context of understanding [side map](#side_map-check-the-main-page-too), but we did actually run an isometric station for april fools once. It was really cursed and flickered like crazy (which causes client lag). Fun as hell though. -The mode essentially overrides the layer/plane layering discussed before, and inserts new rules. -I wish I knew what those rules EXACTLY are, but I'm betting they're similar to [side map's](#side_map-check-the-main-page-too), and lummy's actually told me those. +The mode essentially overrides the layer/plane layering discussed before, and inserts new rules. +I wish I knew what those rules EXACTLY are, but I'm betting they're similar to [side map's](#side_map-check-the-main-page-too), and lummy's actually told me those. Yes this is all rather poorly documented. Similar to sidemap, we take physical position into account when deciding layering. In addition to its height positioning, we also account for width. -So both `pixel_y` and `pixel_x` can effect layering. `pixel_z` handles strictly visual y, and `pixel_w` handles x. +So both `pixel_y` and `pixel_x` can effect layering. `pixel_z` handles strictly visual y, and `pixel_w` handles x. This has similar big icon problems to [sidemap](#side_map-check-the-main-page-too). @@ -677,14 +679,14 @@ it would be automatically broken down into smaller icon states, which you would ## Color - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/color) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/color) `/atom/var/color` is another one like [pixel offsets](#pixel-offsets) where its most common use is really uninteresting, but it has an interesting edge case I think is fun to discuss/important to know. So let's get the base case out of the way shall we? -At base, you can set an atom's color to some `rrggbbaa` string (see [here](https://www.byond.com/docs/ref/#/{{appendix}}/html-colors)). This will shade every pixel on that atom to said color, and override its [`/atom/var/alpha`](https://www.byond.com/docs/ref/#/atom/var/alpha) value. +At base, you can set an atom's color to some `rrggbbaa` string (see [here](https://www.byond.com/docs/ref/#/{{appendix}}/html-colors)). This will shade every pixel on that atom to said color, and override its [`/atom/var/alpha`](https://www.byond.com/docs/ref/#/atom/var/alpha) value. See [appearance flags](#appearance-flags) for how this effect can carry into overlays and such. That's the boring stuff, now the fun shit. @@ -703,7 +705,7 @@ It'll help visualize this process quite well. Play around with it, it's fun. ## Transform - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/transform) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/transform) `/atom/var/transform` allows you to shift, contort, rotate and scale atoms visually. This is done using a matrix, similarly to color matrixes. You will likely never need to use it manually however, since there are @@ -730,17 +732,17 @@ and forget to update this file. ## Animate() - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/proc/animate) +- [Reference Entry](https://www.byond.com/docs/ref/#/proc/animate) The animate proc allows us to VISUALLY transition between different values on an appearance on clients, while in actuality setting the values instantly on the servers. This is quite powerful, and lets us do many things, like slow fades, shakes, hell even parallax using matrixes. -It doesn't support everything, and it can be quite temperamental especially if you use things like the flag that makes it work in +It doesn't support everything, and it can be quite temperamental especially if you use things like the flag that makes it work in parallel. It's got a lot of nuance to it, but it's real useful. Works on filters and their variables too, which is AGGRESSIVELY useful. -Lets you give radiation glow a warm pulse, that sort of thing. +Lets you give radiation glow a warm pulse, that sort of thing. ## GAGS - [Table of Contents](#table-of-contents) diff --git a/_maps/deathmatch/ragin_mages.dmm b/_maps/deathmatch/ragin_mages.dmm new file mode 100644 index 00000000000..37939643b72 --- /dev/null +++ b/_maps/deathmatch/ragin_mages.dmm @@ -0,0 +1,1880 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ay" = ( +/obj/structure/railing/corner/end{ + dir = 4 + }, +/obj/machinery/door/airlock/wood, +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"aT" = ( +/obj/item/cardboard_cutout/adaptive{ + pixel_y = 14; + pixel_x = 8 + }, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"bb" = ( +/obj/structure/chair/wood/wings{ + dir = 8 + }, +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"bg" = ( +/obj/effect/spawner/random/entertainment/arcade, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"bv" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/floor/plating/airless, +/area/deathmatch/teleport) +"co" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin/carbon{ + pixel_y = 12; + pixel_x = 7 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"ct" = ( +/obj/structure/flora/bush/grassy/style_random, +/mob/living/simple_animal/pet/gondola{ + name = "Jommy"; + faction = list("gondola", "Wizard") + }, +/turf/open/floor/grass, +/area/deathmatch/teleport) +"cU" = ( +/obj/structure/chair/wood/wings{ + dir = 1 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"dj" = ( +/obj/machinery/door/airlock/wood, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"ds" = ( +/turf/open/floor/carpet/purple, +/area/deathmatch/teleport) +"ez" = ( +/obj/structure/closet/crate, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"fH" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/griddle, +/obj/item/food/burger/spell{ + pixel_y = 11; + pixel_x = -3 + }, +/obj/item/stack/medical/ointment{ + pixel_y = -2; + pixel_x = 9 + }, +/turf/open/floor/iron, +/area/deathmatch/teleport) +"fI" = ( +/turf/open/lava, +/area/deathmatch/teleport) +"gn" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"gr" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/chair/wood, +/turf/open/floor/iron, +/area/deathmatch/teleport) +"hg" = ( +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/obj/machinery/door/airlock/wood, +/obj/structure/railing/corner/end{ + dir = 8 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"hk" = ( +/obj/item/kirbyplants/organic/plant10{ + pixel_y = 21; + pixel_x = -7 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"hK" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"ig" = ( +/obj/structure/table/wood, +/obj/item/stack/medical/bruise_pack{ + pixel_x = -12 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"iz" = ( +/obj/structure/chair/comfy/brown{ + dir = 1 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"iL" = ( +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/turf/open/floor/carpet/red, +/area/deathmatch/teleport) +"iQ" = ( +/obj/structure/table, +/obj/structure/bedsheetbin{ + pixel_y = 4; + pixel_x = 3 + }, +/turf/open/floor/plastic, +/area/deathmatch/teleport) +"iZ" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/sink/directional/west, +/turf/open/floor/iron, +/area/deathmatch/teleport) +"jb" = ( +/obj/machinery/door/airlock/wood, +/obj/structure/railing/corner/end/flip, +/obj/structure/railing/corner/end, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"jg" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/floor/iron, +/area/deathmatch/teleport) +"jm" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/mystery_box/wands, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"js" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/deathmatch/teleport) +"jM" = ( +/obj/structure/table/reinforced, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"jV" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/door/airlock/wood, +/turf/open/floor/iron, +/area/deathmatch/teleport) +"kl" = ( +/obj/structure/flora/bush/grassy/style_random, +/obj/machinery/light/floor, +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/turf/open/floor/grass, +/area/deathmatch/teleport) +"li" = ( +/obj/structure/table, +/obj/item/extinguisher{ + pixel_x = 7; + pixel_y = -6 + }, +/obj/item/clothing/suit/wizrobe/red{ + pixel_y = 3; + pixel_x = -6 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"lM" = ( +/obj/structure/bed{ + dir = 1 + }, +/obj/item/bedsheet/wiz{ + dir = 1 + }, +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"lO" = ( +/obj/structure/closet/crate, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"mu" = ( +/obj/effect/turf_decal/stripes, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron, +/area/deathmatch/teleport) +"mV" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/mystery_box/tdome, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"nk" = ( +/obj/item/gun/magic/wand/death, +/obj/structure/window/reinforced/plasma/spawner/directional/east, +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/obj/structure/window/reinforced/plasma/spawner/directional/west, +/turf/open/floor/grass, +/area/deathmatch/teleport) +"nx" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/floor/carpet/red, +/area/deathmatch/teleport) +"nQ" = ( +/obj/machinery/door/airlock/wood, +/turf/open/floor/plastic, +/area/deathmatch/teleport) +"on" = ( +/obj/structure/table/wood, +/turf/open/floor/carpet/red, +/area/deathmatch/teleport) +"oP" = ( +/obj/structure/destructible/cult/item_dispenser/archives/library, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"pe" = ( +/obj/item/kirbyplants/organic/plant10{ + pixel_y = 21; + pixel_x = -7 + }, +/turf/open/floor/carpet/red, +/area/deathmatch/teleport) +"ph" = ( +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"pv" = ( +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/turf/open/floor/iron, +/area/deathmatch/teleport) +"pL" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/mystery_box/wands, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"pV" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/deathmatch/teleport) +"qx" = ( +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/turf/open/floor/carpet/purple, +/area/deathmatch/teleport) +"qY" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"rj" = ( +/obj/machinery/door/window/right/directional/east, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"rD" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"sf" = ( +/obj/structure/mirror/directional/east, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"tL" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/mob/living/simple_animal/hostile/ooze/gelatinous{ + name = "Jimmy"; + faction = list("slime", "Wizard") + }, +/turf/open/floor/grass, +/area/deathmatch/teleport) +"ue" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/item/food/burger/yellow{ + pixel_x = -11; + pixel_y = 8 + }, +/obj/item/food/burger/red{ + pixel_y = 13; + pixel_x = 6 + }, +/obj/item/food/burger/purple{ + pixel_y = 3 + }, +/obj/structure/table/reinforced, +/turf/open/floor/iron, +/area/deathmatch/teleport) +"ui" = ( +/obj/effect/turf_decal/stripes, +/turf/open/floor/iron, +/area/deathmatch/teleport) +"uz" = ( +/turf/open/floor/iron, +/area/deathmatch/teleport) +"uR" = ( +/obj/item/clothing/shoes/sandal/magic{ + pixel_y = 16 + }, +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/turf/open/floor/plastic, +/area/deathmatch/teleport) +"vh" = ( +/obj/structure/mystery_box/wands, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"vv" = ( +/obj/vehicle/ridden/scooter/skateboard{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"vR" = ( +/obj/structure/bookcase/random, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"wd" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/mystery_box/wands, +/turf/open/floor/iron, +/area/deathmatch/teleport) +"wl" = ( +/obj/item/kirbyplants/organic/plant10{ + pixel_y = 1; + pixel_x = -6 + }, +/turf/open/floor/carpet/purple, +/area/deathmatch/teleport) +"wL" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/gibber/autogibber, +/turf/open/floor/iron, +/area/deathmatch/teleport) +"xk" = ( +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north{ + pixel_y = 36 + }, +/turf/open/floor/plastic, +/area/deathmatch/teleport) +"xs" = ( +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/deathmatch/teleport) +"yA" = ( +/obj/structure/chair/wood/wings, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"zN" = ( +/obj/structure/mystery_box/wands, +/obj/structure/sign/poster/contraband/the_big_gas_giant_truth/directional/north, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"zO" = ( +/obj/structure/closet, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"Au" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"AD" = ( +/obj/structure/sign/departments/restroom/directional/west, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"Bm" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/floor/plastic, +/area/deathmatch/teleport) +"Cb" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/table/wood, +/turf/open/floor/iron, +/area/deathmatch/teleport) +"Cj" = ( +/obj/structure/table, +/obj/item/clothing/ears/earmuffs{ + pixel_y = 14; + pixel_x = 4 + }, +/obj/item/toy/gun{ + pixel_y = 2; + pixel_x = -3 + }, +/obj/item/clothing/head/wizard/red{ + pixel_x = 6; + pixel_y = -10 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"Cq" = ( +/turf/open/floor/carpet/red, +/area/deathmatch/teleport) +"CM" = ( +/obj/structure/railing/corner, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"DK" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"DW" = ( +/obj/machinery/computer, +/turf/open/floor/carpet/red, +/area/deathmatch/teleport) +"Eh" = ( +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"Fb" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"Fm" = ( +/obj/structure/chair/comfy/black{ + dir = 1 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"Fv" = ( +/obj/structure/chair/wood/wings{ + dir = 4 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"Fx" = ( +/obj/item/target, +/obj/structure/sign/flag/nanotrasen/directional/north, +/turf/open/floor/iron, +/area/deathmatch/teleport) +"FL" = ( +/turf/open/floor/plastic, +/area/deathmatch/teleport) +"Ge" = ( +/obj/item/flashlight/flare{ + pixel_x = -5; + pixel_y = -12 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"Gv" = ( +/obj/item/kirbyplants/organic/plant10{ + pixel_y = 2; + pixel_x = 5 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"GC" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"GZ" = ( +/obj/structure/curtain, +/obj/machinery/shower/directional/north, +/obj/item/soap/syndie, +/turf/open/floor/noslip, +/area/deathmatch/teleport) +"Hf" = ( +/obj/item/kirbyplants/organic/plant10{ + pixel_y = 1; + pixel_x = -6 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"Hs" = ( +/turf/template_noop, +/area/template_noop) +"HM" = ( +/obj/structure/rack, +/obj/item/knife/ritual{ + pixel_y = 5 + }, +/obj/item/staff{ + pixel_x = -4; + pixel_y = 4 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"HP" = ( +/obj/structure/chair/comfy/black{ + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/deathmatch/teleport) +"HS" = ( +/obj/structure/table/wood/fancy, +/turf/open/floor/plastic, +/area/deathmatch/teleport) +"IE" = ( +/obj/structure/table/wood, +/obj/item/clothing/suit/wizrobe/black{ + pixel_y = 3; + pixel_x = -1 + }, +/obj/item/clothing/head/wizard/black{ + pixel_y = 13; + pixel_x = 6 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"IM" = ( +/obj/item/kirbyplants/organic/plant10{ + pixel_y = 2; + pixel_x = 5 + }, +/turf/open/floor/carpet/purple, +/area/deathmatch/teleport) +"Jm" = ( +/turf/closed/wall/mineral/wood, +/area/deathmatch/teleport) +"Jo" = ( +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/plastic, +/area/deathmatch/teleport) +"Kr" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"KW" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"Le" = ( +/obj/structure/filingcabinet, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"Mg" = ( +/obj/machinery/computer, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"Nl" = ( +/obj/machinery/power/shuttle_engine/heater{ + resistance_flags = 3 + }, +/obj/structure/window/reinforced/spawner/directional/north{ + resistance_flags = 3 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"Nm" = ( +/obj/item/kirbyplants/organic/plant10{ + pixel_y = 21; + pixel_x = 6 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"Nt" = ( +/obj/item/target{ + pixel_y = 11 + }, +/obj/effect/turf_decal/stripes, +/turf/open/floor/iron, +/area/deathmatch/teleport) +"NW" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"Ok" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"OD" = ( +/obj/structure/filingcabinet, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"OK" = ( +/obj/item/kirbyplants/organic/plant10{ + pixel_y = 21; + pixel_x = 6 + }, +/turf/open/floor/carpet/red, +/area/deathmatch/teleport) +"PD" = ( +/obj/structure/table/wood, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"Qj" = ( +/obj/structure/dresser, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"QH" = ( +/obj/structure/table, +/obj/item/clothing/head/wizard{ + pixel_y = 14; + pixel_x = 4 + }, +/turf/open/floor/plastic, +/area/deathmatch/teleport) +"QT" = ( +/obj/structure/mystery_box/wands, +/turf/open/floor/plastic, +/area/deathmatch/teleport) +"RB" = ( +/obj/machinery/vending/snack, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"RI" = ( +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"RT" = ( +/obj/machinery/power/shuttle_engine/heater{ + resistance_flags = 3 + }, +/obj/structure/window/reinforced/spawner/directional/north{ + resistance_flags = 3 + }, +/turf/open/lava, +/area/deathmatch/teleport) +"Sa" = ( +/turf/open/floor/grass, +/area/deathmatch/teleport) +"SK" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/deathmatch/teleport) +"Th" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/table/reinforced, +/obj/item/food/burger/rat{ + pixel_y = 9; + pixel_x = -2 + }, +/obj/item/food/bun{ + pixel_x = 8; + pixel_y = 2 + }, +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/turf/open/floor/iron, +/area/deathmatch/teleport) +"Vk" = ( +/obj/machinery/door/window/left/directional/east, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"VM" = ( +/obj/structure/table/wood/poker, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"Wl" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"WX" = ( +/obj/machinery/vending/magivend, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"Xv" = ( +/obj/structure/railing{ + layer = 3.1 + }, +/obj/structure/railing{ + layer = 3.1; + dir = 1 + }, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"YP" = ( +/obj/structure/closet/crate/coffin, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"YS" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/engine/cult, +/area/deathmatch/teleport) +"Zo" = ( +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/deathmatch/teleport) +"ZS" = ( +/obj/structure/railing/corner/end/flip, +/turf/open/floor/iron, +/area/deathmatch/teleport) + +(1,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +"} +(2,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +"} +(3,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +"} +(4,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +"} +(5,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Jm +Jm +Jm +Jm +Jm +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +"} +(6,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Jm +Jm +vR +lM +Qj +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Hs +Hs +Hs +Hs +"} +(7,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +Jm +Jm +vR +ph +ph +ph +Jm +QT +Jo +HS +iQ +GZ +Jm +Fx +uz +ui +Fb +ph +ph +ph +ph +RT +bv +Hs +Hs +Hs +"} +(8,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +gn +PD +iz +ph +ph +ph +dj +FL +FL +Bm +QH +uR +Jm +Fx +pv +Nt +Fb +Kr +ph +Eh +ph +RT +bv +Hs +Hs +Hs +"} +(9,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +gn +ig +ph +Kr +qY +Jm +Jm +Jm +Jm +xk +FL +FL +Jm +Fx +ZS +mu +NW +Wl +Au +Vk +rj +RT +bv +Hs +Hs +Hs +"} +(10,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +Jm +HM +ph +Eh +Jm +Jm +qx +wl +Jm +Jm +nQ +Jm +Jm +dj +Jm +Jm +pL +ph +ph +ph +Gv +Jm +Hs +Hs +Hs +Hs +"} +(11,1,1) = {" +Hs +Hs +Hs +gn +gn +gn +Jm +zN +ph +ph +Jm +WX +ds +ds +Hf +Jm +ph +AD +Eh +ph +vR +Jm +Jm +Cj +li +ph +Jm +Jm +Hs +Hs +Hs +Hs +"} +(12,1,1) = {" +Hs +Hs +gn +gn +IE +PD +Jm +oP +ph +ph +dj +ph +ds +ds +ph +dj +ph +ph +ph +ph +ph +vR +Jm +Jm +Jm +ay +Jm +Hs +Hs +Hs +Hs +Hs +"} +(13,1,1) = {" +Hs +Hs +gn +Mg +Fm +Hf +Jm +Jm +sf +Gv +Jm +vR +ds +ds +ph +Jm +Jm +Jm +Jm +Nm +ph +ph +vR +Jm +fI +Xv +Jm +Jm +Hs +Hs +Hs +Hs +"} +(14,1,1) = {" +Hs +Hs +gn +Mg +ph +ph +vh +Jm +Jm +Jm +Jm +vR +ds +ds +ph +Jm +xs +tL +Jm +Jm +ph +ph +vR +Jm +fI +Xv +fI +Jm +Jm +Hs +Hs +Hs +"} +(15,1,1) = {" +Hs +Hs +gn +on +Cq +Cq +Cq +Cq +Cq +Cq +Cq +Cq +ds +ds +Cq +GC +Zo +Sa +xs +Jm +OK +Cq +Cq +Jm +fI +Xv +fI +fI +RT +bv +Hs +Hs +"} +(16,1,1) = {" +Hs +Hs +gn +DW +HP +iL +nx +Cq +Cq +Cq +iL +Cq +ds +ds +Cq +GC +Sa +kl +nk +Jm +nx +iL +Cq +jb +DK +CM +rD +mV +Nl +bv +Hs +Hs +"} +(17,1,1) = {" +Hs +Hs +gn +on +Cq +Cq +Cq +Cq +Cq +Cq +Cq +Cq +ds +ds +Cq +GC +Sa +pV +SK +Jm +pe +Cq +Cq +Jm +fI +Xv +fI +fI +RT +bv +Hs +Hs +"} +(18,1,1) = {" +Hs +Hs +gn +Mg +ph +ph +Ok +Jm +Jm +Jm +Jm +vR +ds +ds +ph +Jm +SK +ct +Jm +Jm +ph +ph +vR +Jm +fI +Xv +fI +Jm +Jm +Hs +Hs +Hs +"} +(19,1,1) = {" +Hs +Hs +gn +Mg +Fm +Gv +Jm +Jm +PD +vh +Jm +vR +ds +ds +ph +Jm +Jm +Jm +Jm +hk +ph +ph +vR +Jm +fI +Xv +Jm +Jm +Hs +Hs +Hs +Hs +"} +(20,1,1) = {" +Hs +Hs +gn +gn +PD +PD +Jm +PD +ph +ph +dj +ph +ds +ds +ph +dj +ph +ph +ph +ph +ph +vR +Jm +Jm +Jm +hg +Jm +Hs +Hs +Hs +Hs +Hs +"} +(21,1,1) = {" +Hs +Hs +Hs +gn +gn +gn +Jm +PD +ph +ph +Jm +RB +ds +ds +Gv +Jm +ph +ph +Eh +ph +vh +Jm +Jm +YS +KW +Ge +Jm +Jm +Hs +Hs +Hs +Hs +"} +(22,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +Jm +PD +ph +Eh +Jm +Jm +qx +IM +Jm +Jm +jV +Jm +Jm +dj +Jm +Jm +RI +ph +vR +ph +lO +Jm +Hs +Hs +Hs +Hs +"} +(23,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +gn +zO +ph +Kr +ph +Jm +Jm +Jm +Jm +wL +js +fH +Jm +aT +ph +KW +ph +hK +vR +KW +ez +RT +bv +Hs +Hs +Hs +"} +(24,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +gn +bg +ph +ph +Fv +ph +dj +js +js +jg +js +Th +Jm +jm +Eh +vR +KW +Kr +KW +Eh +vv +RT +bv +Hs +Hs +Hs +"} +(25,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +Jm +Jm +ph +yA +VM +cU +Jm +wd +gr +Cb +iZ +ue +Jm +YP +KW +KW +ph +Le +OD +co +jM +RT +bv +Hs +Hs +Hs +"} +(26,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Jm +Jm +ph +bb +Gv +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Jm +Hs +Hs +Hs +Hs +"} +(27,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Jm +Jm +Jm +Jm +Jm +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +"} +(28,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +"} +(29,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +"} +(30,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +"} +(31,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +"} +(32,1,1) = {" +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +Hs +"} diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm index eec9705fcf4..ba86d17dc61 100644 --- a/_maps/map_files/Birdshot/birdshot.dmm +++ b/_maps/map_files/Birdshot/birdshot.dmm @@ -254,19 +254,6 @@ /obj/structure/table, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"agb" = ( -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/chair/office/light{ - dir = 8 - }, -/obj/effect/landmark/start/virologist, -/turf/open/floor/iron/white, -/area/station/medical/virology) "agy" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/tank/oxygen{ @@ -2799,12 +2786,6 @@ }, /turf/open/floor/circuit/green, /area/station/science/robotics/mechbay) -"boT" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/light/cold/dim/directional/west, -/obj/machinery/vending/wardrobe/engi_wardrobe, -/turf/open/floor/iron, -/area/station/engineering/main) "boW" = ( /obj/structure/table/glass, /obj/machinery/status_display/ai/directional/south, @@ -10013,6 +9994,22 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood/tile, /area/station/science/lower) +"erJ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table/greyscale, +/obj/item/folder/yellow{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/clothing/glasses/meson, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = -8; + pixel_y = 14 + }, +/turf/open/floor/iron/grimy, +/area/station/engineering/main) "erK" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/thinplating_new, @@ -11507,6 +11504,14 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"eWf" = ( +/obj/structure/closet/cardboard, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/item/airlock_painter, +/turf/open/floor/iron/grimy, +/area/station/engineering/main) "eWj" = ( /obj/machinery/atmospherics/components/unary/thermomachine/heater/on{ dir = 4; @@ -11986,6 +11991,17 @@ /obj/machinery/light_switch/directional/west, /turf/open/floor/iron/cafeteria, /area/station/service/cafeteria) +"fhX" = ( +/obj/structure/table/greyscale, +/obj/item/lightreplacer{ + pixel_y = 7 + }, +/obj/item/lightreplacer{ + pixel_y = 2; + pixel_x = -2 + }, +/turf/open/floor/iron/grimy, +/area/station/engineering/main) "fib" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19298,13 +19314,6 @@ }, /turf/open/floor/wood, /area/station/engineering/main) -"hGt" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/landmark/start/virologist, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "hGE" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -24920,16 +24929,6 @@ }, /turf/open/floor/iron/dark/small, /area/station/ai_monitored/security/armory) -"jBA" = ( -/obj/structure/cable, -/obj/machinery/power/smes/full, -/obj/machinery/camera/directional/north{ - c_tag = "AI Chamber - SMES"; - network = list("aicore") - }, -/obj/machinery/flasher/directional/north, -/turf/open/floor/circuit/red, -/area/station/ai_monitored/turret_protected/ai) "jBD" = ( /obj/structure/table/wood, /obj/effect/mapping_helpers/broken_floor, @@ -25638,10 +25637,6 @@ "jKU" = ( /turf/closed/wall, /area/station/engineering/atmos/storage/gas) -"jLi" = ( -/obj/effect/landmark/start/virologist, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/virology) "jLl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -25705,6 +25700,13 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) +"jMq" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/virologist, +/turf/open/floor/iron/white/small, +/area/station/medical/virology) "jMy" = ( /obj/machinery/atmospherics/components/binary/pump/on{ dir = 8; @@ -26989,12 +26991,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"kiQ" = ( -/obj/structure/cable, -/obj/machinery/power/smes/full, -/obj/machinery/status_display/ai/directional/north, -/turf/open/floor/iron/smooth, -/area/station/ai_monitored/turret_protected/aisat/equipment) "kjg" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -28885,6 +28881,13 @@ /obj/effect/turf_decal/trimline/blue/warning, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"kNk" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/landmark/start/virologist, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "kNn" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -31141,18 +31144,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"lwl" = ( -/obj/effect/gibspawner/human, -/obj/structure/table/optable{ - desc = "A cold, hard place for your final rest."; - name = "Morgue Slab" - }, -/mob/living/carbon/human/species/monkey/humand_legged{ - name = "Charles"; - real_name = "Charles" - }, -/turf/open/floor/iron/white/diagonal, -/area/station/maintenance/department/science/xenobiology) "lwn" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/hatch, @@ -33039,14 +33030,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"lWK" = ( -/obj/structure/closet/cardboard, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/item/airlock_painter, -/turf/open/floor/iron/grimy, -/area/station/engineering/main) "lWQ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/ticket_machine/directional/north, @@ -35262,13 +35245,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/dark/hidden, /turf/open/floor/iron/grimy, /area/station/tcommsat/server) -"mIa" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/virologist, -/turf/open/floor/iron/white/small, -/area/station/medical/virology) "mIg" = ( /obj/machinery/light/small/directional/west, /turf/open/floor/catwalk_floor/iron_dark, @@ -36955,6 +36931,12 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/textured_half, /area/station/security) +"nki" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/cold/dim/directional/west, +/obj/machinery/vending/wardrobe/engi_wardrobe, +/turf/open/floor/iron, +/area/station/engineering/main) "nkl" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -56939,6 +56921,19 @@ "sSB" = ( /turf/open/floor/catwalk_floor, /area/station/engineering/break_room) +"sSF" = ( +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/effect/landmark/start/virologist, +/turf/open/floor/iron/white, +/area/station/medical/virology) "sSK" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -60129,6 +60124,18 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor/iron_dark, /area/station/cargo/bitrunning/den) +"tQd" = ( +/obj/effect/gibspawner/human, +/obj/structure/table/optable{ + desc = "A cold, hard place for your final rest."; + name = "Morgue Slab" + }, +/mob/living/carbon/human/species/monkey/humand_legged{ + name = "Charles"; + real_name = "Charles" + }, +/turf/open/floor/iron/white/diagonal, +/area/station/maintenance/department/science/xenobiology) "tQx" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/fueltank, @@ -67782,6 +67789,16 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron/cafeteria, /area/station/service/cafeteria) +"vVd" = ( +/obj/structure/cable, +/obj/machinery/power/smes/full, +/obj/machinery/camera/directional/north{ + c_tag = "AI Chamber - SMES"; + network = list("aicore") + }, +/obj/machinery/flasher/directional/north, +/turf/open/floor/circuit/red, +/area/station/ai_monitored/turret_protected/ai) "vVo" = ( /obj/machinery/light/cold/directional/south, /obj/structure/table/reinforced, @@ -68883,17 +68900,6 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) -"wlW" = ( -/obj/structure/table/greyscale, -/obj/item/lightreplacer{ - pixel_y = 7 - }, -/obj/item/lightreplacer{ - pixel_y = 2; - pixel_x = -2 - }, -/turf/open/floor/iron/grimy, -/area/station/engineering/main) "wmd" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer2{ @@ -68968,6 +68974,10 @@ }, /turf/open/floor/iron/white, /area/station/security/medical) +"wmT" = ( +/obj/effect/landmark/start/virologist, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/virology) "wmV" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -74884,22 +74894,6 @@ }, /turf/open/floor/plating, /area/station/service/abandoned_gambling_den/gaming) -"xMU" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/table/greyscale, -/obj/item/folder/yellow{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/clothing/glasses/meson, -/obj/item/grenade/chem_grenade/smart_metal_foam{ - pixel_x = -8; - pixel_y = 14 - }, -/turf/open/floor/iron/grimy, -/area/station/engineering/main) "xMY" = ( /turf/closed/wall/r_wall, /area/station/command/teleporter) @@ -75496,6 +75490,12 @@ /obj/effect/landmark/start/paramedic, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"xTL" = ( +/obj/structure/cable, +/obj/machinery/power/smes/full, +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/iron/smooth, +/area/station/ai_monitored/turret_protected/aisat/equipment) "xTM" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 6 @@ -91992,7 +91992,7 @@ dgV sHH rQi rPV -boT +nki uOk nmH sHO @@ -92257,7 +92257,7 @@ dgm wIu oHO sDo -wlW +fhX lsd jJu kya @@ -92768,11 +92768,11 @@ rmM btV lMl ayR -xMU +erJ vDg euP all -lWK +eWf eIx kWg bNq @@ -103045,7 +103045,7 @@ aJq yjV fpY uTA -jBA +vVd xTV dua gnA @@ -104086,7 +104086,7 @@ wct hJp wct gOm -kiQ +xTL eFe eYk xvT @@ -106247,7 +106247,7 @@ tRc tRc tRc tRc -hGt +kNk dHT sSQ sSQ @@ -107022,7 +107022,7 @@ bUv cSk gLb nlS -mIa +jMq gpM sSQ hrF @@ -108560,12 +108560,12 @@ jrk gIF wYA bpS -jLi +wmT nYk vVP xAA hgf -agb +sSF uGj wgL oiA @@ -113421,7 +113421,7 @@ dDB blb dDB ldq -lwl +tQd vXn ldq ldq diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index d97755766cb..3d1f3a212d7 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -1144,14 +1144,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) -"anU" = ( -/obj/structure/sign/warning/secure_area/directional/south, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 10 - }, -/obj/item/kirbyplants/organic/plant10, -/turf/open/floor/iron/white, -/area/station/science/research) "anV" = ( /obj/effect/landmark/start/hangover/closet, /obj/structure/closet/firecloset, @@ -1415,20 +1407,6 @@ /obj/item/pillow/random, /turf/open/floor/wood, /area/station/commons/dorms) -"aqU" = ( -/obj/machinery/light/directional/west, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/bot/left, -/obj/structure/sign/nanotrasen{ - pixel_x = -32 - }, -/obj/machinery/modular_computer/preset/cargochat/science{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/science/research) "aqW" = ( /obj/structure/table/reinforced, /obj/machinery/newscaster/directional/north, @@ -2379,18 +2357,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/chapel/funeral) -"aCA" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/structure/table, -/obj/machinery/fax{ - fax_name = "Research Division"; - name = "Research Division Fax Machine"; - pixel_x = 1 - }, -/turf/open/floor/iron, -/area/station/science/research) "aCJ" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -2570,6 +2536,14 @@ /obj/structure/grille/broken, /turf/open/space, /area/space/nearstation) +"aFp" = ( +/obj/structure/sign/warning/secure_area/directional/south, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 10 + }, +/obj/item/kirbyplants/organic/plant10, +/turf/open/floor/iron/white, +/area/station/science/research) "aFv" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2914,14 +2888,6 @@ /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"aJj" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/machinery/recharge_station, -/turf/open/floor/iron, -/area/station/science/research) "aJu" = ( /obj/structure/cable, /obj/machinery/power/smes/engineering, @@ -3773,6 +3739,15 @@ }, /turf/open/space/basic, /area/space/nearstation) +"aUZ" = ( +/obj/machinery/airalarm/directional/north, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Service Hallway"; + name = "Service Fax Machine" + }, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "aVo" = ( /obj/machinery/computer/security/hos{ dir = 1 @@ -6501,9 +6476,6 @@ }, /turf/open/floor/plating, /area/station/security/prison) -"bDx" = ( -/turf/open/floor/iron, -/area/station/security/office) "bDy" = ( /obj/machinery/camera/directional/north{ c_tag = "Chapel - Confessional"; @@ -7066,13 +7038,6 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron, /area/station/engineering/atmos/project) -"bJi" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/service) "bJs" = ( /obj/structure/table/reinforced, /obj/item/stack/sheet/iron{ @@ -8840,16 +8805,6 @@ "cfu" = ( /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai_upload) -"cfx" = ( -/obj/structure/plaque/static_plaque/golden{ - pixel_y = -32 - }, -/obj/structure/reagent_dispensers/water_cooler, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/office) "cfy" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -8988,6 +8943,13 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron, /area/station/security/checkpoint/engineering) +"chv" = ( +/obj/structure/cable, +/obj/machinery/power/smes/full, +/obj/effect/turf_decal/bot, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) "chF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -9329,6 +9291,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible, /turf/open/floor/iron/dark/corner, /area/station/maintenance/disposal/incinerator) +"clB" = ( +/obj/structure/table/glass, +/obj/machinery/computer/records/medical/laptop, +/obj/item/toy/figure/virologist, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/virology) "clE" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ @@ -10586,12 +10558,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/chapel/storage) -"cBB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/service) "cBC" = ( /obj/structure/table/reinforced, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ @@ -11264,16 +11230,6 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/exit/departure_lounge) -"cJQ" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/medical/storage) "cJX" = ( /obj/structure/table/reinforced, /obj/machinery/status_display/evac/directional/west, @@ -12168,13 +12124,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/central) -"cVD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/service) "cVN" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -17175,6 +17124,17 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) +"ekF" = ( +/obj/structure/sign/poster/official/random/directional/south, +/obj/machinery/light/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "ekM" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -18240,6 +18200,15 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"eyl" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/trimline/purple/filled/corner{ + dir = 8 + }, +/obj/machinery/airalarm/directional/south, +/obj/machinery/photocopier, +/turf/open/floor/iron/white, +/area/station/science/research) "eyr" = ( /obj/item/kirbyplants/random, /obj/machinery/power/apc/auto_name/directional/north, @@ -18981,28 +18950,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/abandoned_gambling_den/gaming) -"eIu" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/preopen{ - id = "hopblast"; - name = "HoP Blast Door" - }, -/obj/machinery/door/window/brigdoor/left/directional/east{ - name = "Access Desk"; - req_access = list("hop") - }, -/obj/machinery/door/window/right/directional/west{ - name = "Access Queue" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/hop) "eIy" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -20757,6 +20704,13 @@ }, /turf/open/floor/wood/large, /area/station/service/theater) +"fes" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/office) "fez" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/siding/wood/corner, @@ -22781,6 +22735,18 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/service/abandoned_gambling_den) +"fEV" = ( +/obj/structure/sign/poster/official/moth_epi/directional/west, +/obj/effect/turf_decal/bot, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/medical/storage) "fFb" = ( /obj/structure/table, /obj/effect/spawner/random/entertainment/drugs{ @@ -24068,6 +24034,13 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"fWB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/service) "fWH" = ( /obj/effect/turf_decal/trimline/blue/filled/corner, /turf/open/floor/iron/white, @@ -24546,6 +24519,14 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) +"gch" = ( +/obj/structure/table, +/obj/item/clipboard, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "gci" = ( /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/window/preopen{ @@ -26257,6 +26238,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/hop) +"guZ" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/photobooth/security, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) "gvf" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/lattice, @@ -27861,18 +27848,6 @@ /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron, /area/station/security/prison) -"gPH" = ( -/obj/structure/sign/poster/official/moth_epi/directional/west, -/obj/effect/turf_decal/bot, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/medical/storage) "gPO" = ( /obj/structure/table/reinforced, /obj/item/flashlight/lamp/green, @@ -29294,11 +29269,6 @@ /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/medical/pharmacy) -"hjH" = ( -/obj/item/radio/intercom/directional/north, -/obj/machinery/photocopier, -/turf/open/floor/iron/checker, -/area/station/hallway/secondary/service) "hjJ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -29398,14 +29368,6 @@ dir = 1 }, /area/station/science/ordnance/storage) -"hkZ" = ( -/obj/structure/sign/warning/secure_area/directional/south, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 6 - }, -/obj/item/kirbyplants/organic/plant10, -/turf/open/floor/iron/white, -/area/station/science/research) "hlj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad, @@ -30815,6 +30777,16 @@ /obj/effect/mapping_helpers/airlock/access/all/service/kitchen, /turf/open/floor/iron/freezer, /area/station/service/kitchen/coldroom) +"hFQ" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/medical/storage) "hFS" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -31546,6 +31518,18 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/security) +"hPH" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/effect/landmark/start/virologist, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/full, +/turf/open/floor/iron/large, +/area/station/medical/virology) "hPJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 8 @@ -31696,15 +31680,6 @@ /obj/effect/turf_decal/tile/dark_blue/fourcorners, /turf/open/floor/iron, /area/station/commons/dorms/laundry) -"hRU" = ( -/obj/effect/turf_decal/bot, -/obj/structure/extinguisher_cabinet/directional/south, -/obj/machinery/light/small/directional/south, -/obj/machinery/modular_computer/preset/cargochat/service{ - dir = 1 - }, -/turf/open/floor/iron/checker, -/area/station/hallway/secondary/service) "hRV" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -32081,6 +32056,28 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/engineering/atmos/hfr_room) +"hWA" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "hopblast"; + name = "HoP Blast Door" + }, +/obj/machinery/door/window/brigdoor/left/directional/east{ + name = "Access Desk"; + req_access = list("hop") + }, +/obj/machinery/door/window/right/directional/west{ + name = "Access Queue" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/hop) "hWF" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32231,16 +32228,6 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"hYh" = ( -/obj/machinery/newscaster/directional/east, -/obj/machinery/airalarm/directional/south, -/obj/structure/tank_holder/extinguisher, -/obj/machinery/camera/directional/south{ - c_tag = "Library - Art Gallery"; - name = "library camera" - }, -/turf/open/floor/wood/tile, -/area/station/service/library/artgallery) "hYn" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -35456,15 +35443,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/engineering/atmos) -"iOp" = ( -/obj/machinery/light_switch/directional/north, -/obj/structure/cable, -/obj/effect/turf_decal/loading_area{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/textured, -/area/station/medical/storage) "iOu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -36996,18 +36974,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"jgG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/firealarm/directional/north, -/obj/machinery/camera/directional/north{ - c_tag = "Service - Service Hall"; - dir = 9; - name = "service camera" - }, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/service) "jgN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -41333,6 +41299,15 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"kix" = ( +/obj/effect/turf_decal/bot, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/light/small/directional/south, +/obj/machinery/modular_computer/preset/cargochat/service{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "kiz" = ( /obj/structure/sign/poster/random/directional/east, /obj/structure/table, @@ -41914,6 +41889,16 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) +"kqI" = ( +/obj/structure/plaque/static_plaque/golden{ + pixel_y = -32 + }, +/obj/structure/reagent_dispensers/water_cooler, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/office) "kqJ" = ( /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ dir = 1 @@ -43511,6 +43496,13 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) +"kNB" = ( +/obj/structure/table/wood, +/obj/item/papercutter, +/obj/item/paper/fluff/ids_for_dummies, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "kNC" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -44615,6 +44607,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/department/eva/abandoned) +"lcl" = ( +/obj/machinery/light_switch/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/textured, +/area/station/medical/storage) "lcm" = ( /turf/open/floor/wood, /area/station/security/detectives_office/private_investigators_office) @@ -46459,20 +46460,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/service/theater) -"lAe" = ( -/obj/machinery/light/directional/south, -/obj/machinery/camera/directional/south{ - c_tag = "Security - Office Aft" - }, -/obj/machinery/computer/security/telescreen/entertainment/directional/south, -/obj/machinery/modular_computer/preset/cargochat/security{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/security/office) "lAg" = ( /obj/structure/table/wood, /obj/item/folder/red, @@ -48436,6 +48423,42 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"lZC" = ( +/obj/structure/table/wood, +/obj/machinery/computer/records/medical/laptop, +/obj/machinery/light_switch/directional/west{ + pixel_x = -38; + pixel_y = 8 + }, +/obj/machinery/button/flasher{ + id = "hopflash"; + pixel_x = -38; + pixel_y = -7; + req_access = list("kitchen") + }, +/obj/machinery/button/ticket_machine{ + pixel_y = 22; + pixel_x = -6 + }, +/obj/machinery/button/door/directional/west{ + id = "hopblast"; + name = "Lockdown Blast Doors"; + pixel_y = 6; + req_access = list("hop") + }, +/obj/machinery/button/door/directional/west{ + id = "hopline"; + name = "Queue Shutters Control"; + pixel_y = -6; + req_access = list("hop") + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/button/photobooth{ + pixel_y = 22; + pixel_x = 6 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) "lZF" = ( /obj/machinery/power/shieldwallgen/xenobiologyaccess, /obj/structure/cable, @@ -48451,6 +48474,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/textured_large, /area/station/science/xenobiology) +"lZV" = ( +/obj/structure/chair/office/light, +/obj/effect/landmark/start/virologist, +/obj/effect/turf_decal/trimline/green/filled/warning, +/turf/open/floor/iron/white, +/area/station/medical/virology) "lZX" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, @@ -49251,42 +49280,6 @@ "mlE" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/command/storage/eva) -"mlM" = ( -/obj/structure/table/wood, -/obj/machinery/computer/records/medical/laptop, -/obj/machinery/light_switch/directional/west{ - pixel_x = -38; - pixel_y = 8 - }, -/obj/machinery/button/flasher{ - id = "hopflash"; - pixel_x = -38; - pixel_y = -7; - req_access = list("kitchen") - }, -/obj/machinery/button/ticket_machine{ - pixel_y = 22; - pixel_x = -6 - }, -/obj/machinery/button/door/directional/west{ - id = "hopblast"; - name = "Lockdown Blast Doors"; - pixel_y = 6; - req_access = list("hop") - }, -/obj/machinery/button/door/directional/west{ - id = "hopline"; - name = "Queue Shutters Control"; - pixel_y = -6; - req_access = list("hop") - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/button/photobooth{ - pixel_y = 22; - pixel_x = 6 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hop) "mlW" = ( /obj/structure/sign/nanotrasen{ pixel_y = 32 @@ -49700,6 +49693,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"msL" = ( +/obj/machinery/newscaster/directional/east, +/obj/machinery/airalarm/directional/south, +/obj/structure/tank_holder/extinguisher, +/obj/machinery/camera/directional/south{ + c_tag = "Library - Art Gallery"; + name = "library camera" + }, +/turf/open/floor/wood/tile, +/area/station/service/library/artgallery) "msR" = ( /obj/effect/turf_decal/tile/red/opposingcorners{ dir = 1 @@ -49789,6 +49792,23 @@ /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) +"mtD" = ( +/obj/machinery/requests_console/directional/north{ + department = "Medbay"; + name = "Medbay Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/structure/cable, +/obj/effect/turf_decal/bot, +/obj/machinery/camera/directional/north{ + c_tag = "Medbay - Storage"; + name = "medbay camera"; + network = list("ss13","medbay") + }, +/obj/machinery/modular_computer/preset/cargochat/medical, +/obj/effect/turf_decal/trimline/brown/filled/end, +/turf/open/floor/iron, +/area/station/medical/storage) "mtO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/yellow{ @@ -51035,14 +51055,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/hallway/secondary/construction) -"mIg" = ( -/obj/structure/chair/office/light, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 10 - }, -/obj/effect/landmark/start/virologist, -/turf/open/floor/iron/white, -/area/station/medical/virology) "mIs" = ( /turf/closed/wall, /area/station/command/gateway) @@ -51748,6 +51760,18 @@ }, /turf/open/floor/iron, /area/station/service/abandoned_gambling_den/gaming) +"mRl" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Research Division"; + name = "Research Division Fax Machine"; + pixel_x = 1 + }, +/turf/open/floor/iron, +/area/station/science/research) "mRs" = ( /obj/structure/cable, /obj/effect/landmark/start/depsec/science, @@ -52028,12 +52052,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/locker) -"mVX" = ( -/obj/machinery/power/smes/full, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark/telecomms, -/area/station/tcommsat/server) "mVY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -54518,6 +54536,20 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/service/hydroponics) +"nFf" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/door/window/left/directional/east{ + name = "Medical Delivery"; + req_access = list("medical") + }, +/turf/open/floor/iron/textured, +/area/station/medical/storage) "nFr" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -58034,13 +58066,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"oBa" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron, -/area/station/engineering/storage_shared) "oBd" = ( /obj/machinery/newscaster/directional/east, /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -58184,16 +58209,6 @@ }, /turf/open/floor/iron/dark/textured_half, /area/station/service/janitor) -"oDw" = ( -/obj/structure/table/glass, -/obj/machinery/computer/records/medical/laptop, -/obj/item/toy/figure/virologist, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/station/medical/virology) "oDx" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security{ @@ -58717,6 +58732,21 @@ }, /turf/open/floor/wood, /area/station/service/electronic_marketing_den) +"oLD" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Science - Central Access"; + dir = 9; + name = "science camera"; + network = list("ss13","rd") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/trimline/purple/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/research) "oLL" = ( /obj/structure/cable, /obj/effect/turf_decal/delivery, @@ -59051,21 +59081,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/lobby) -"oPF" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Science - Central Access"; - dir = 9; - name = "science camera"; - network = list("ss13","rd") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/radio/intercom/directional/north, -/obj/effect/turf_decal/trimline/purple/filled/corner{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "oPL" = ( /obj/machinery/door/window/right/directional/east{ name = "Danger: Conveyor Access"; @@ -59159,6 +59174,20 @@ /obj/machinery/light/small/dim/directional/north, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"oRf" = ( +/obj/machinery/light/directional/south, +/obj/machinery/camera/directional/south{ + c_tag = "Security - Office Aft" + }, +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/obj/machinery/modular_computer/preset/cargochat/security{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) "oRh" = ( /obj/machinery/status_display/evac/directional/east, /obj/structure/chair{ @@ -59182,11 +59211,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/station/commons/fitness/recreation) -"oRq" = ( -/obj/structure/cable, -/mob/living/basic/slime, -/turf/open/floor/circuit/green, -/area/station/science/xenobiology) "oRs" = ( /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, @@ -59452,23 +59476,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/abandoned_gambling_den) -"oUf" = ( -/obj/machinery/requests_console/directional/north{ - department = "Medbay"; - name = "Medbay Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/structure/cable, -/obj/effect/turf_decal/bot, -/obj/machinery/camera/directional/north{ - c_tag = "Medbay - Storage"; - name = "medbay camera"; - network = list("ss13","medbay") - }, -/obj/machinery/modular_computer/preset/cargochat/medical, -/obj/effect/turf_decal/trimline/brown/filled/end, -/turf/open/floor/iron, -/area/station/medical/storage) "oUh" = ( /obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ dir = 1 @@ -59670,15 +59677,6 @@ dir = 8 }, /area/station/engineering/atmos/project) -"oXX" = ( -/obj/machinery/disposal/bin, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/checker, -/area/station/hallway/secondary/service) "oYe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -59814,13 +59812,6 @@ }, /turf/open/floor/wood, /area/station/security/detectives_office/private_investigators_office) -"paD" = ( -/obj/structure/table/wood, -/obj/item/papercutter, -/obj/item/paper/fluff/ids_for_dummies, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) "paQ" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /turf/open/floor/iron/white, @@ -61082,6 +61073,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/security/detectives_office/private_investigators_office) +"pqo" = ( +/obj/machinery/flasher/directional/east{ + id = "hopflash"; + pixel_x = 0; + pixel_y = 26 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/photobooth, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central/fore) "pqp" = ( /obj/structure/sign/warning/secure_area/directional/north, /obj/structure/table, @@ -62130,6 +62131,14 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/iron, /area/station/engineering/atmos) +"pDb" = ( +/obj/structure/chair/office/light, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/effect/landmark/start/virologist, +/turf/open/floor/iron/white, +/area/station/medical/virology) "pDf" = ( /obj/machinery/computer/camera_advanced/xenobio{ dir = 1 @@ -63115,16 +63124,6 @@ /obj/structure/barricade/wooden, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"pOu" = ( -/obj/machinery/power/smes/full, -/obj/machinery/status_display/ai/directional/north, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plating, -/area/station/ai_monitored/turret_protected/aisat_interior) "pOz" = ( /obj/structure/cable, /obj/machinery/modular_computer/preset/id{ @@ -63339,6 +63338,15 @@ }, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"pQo" = ( +/obj/machinery/modular_computer/preset/cargochat/engineering{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/end{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "pQx" = ( /obj/structure/lattice, /obj/structure/window/reinforced/spawner/directional/north, @@ -63904,6 +63912,18 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"pWB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/firealarm/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Service - Service Hall"; + dir = 9; + name = "service camera" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/service) "pWG" = ( /obj/structure/table/wood, /obj/item/radio/intercom/directional/west, @@ -65072,6 +65092,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/green, /area/station/service/library) +"qlY" = ( +/obj/machinery/power/smes/full, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/telecomms, +/area/station/tcommsat/server) "qmd" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 8 @@ -65539,6 +65565,13 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"qsv" = ( +/obj/effect/turf_decal/bot, +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "qsw" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, @@ -65986,12 +66019,6 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"qyK" = ( -/obj/machinery/light/small/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/photobooth/security, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "qyX" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -67033,16 +67060,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"qLa" = ( -/obj/machinery/flasher/directional/east{ - id = "hopflash"; - pixel_x = 0; - pixel_y = 26 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/photobooth, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/central/fore) "qLg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -67591,6 +67608,12 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/grimy, /area/station/service/library) +"qSC" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/service) "qSG" = ( /obj/machinery/portable_atmospherics/canister/anesthetic_mix, /obj/machinery/light/small/blacklight/directional/north, @@ -67714,15 +67737,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"qUL" = ( -/obj/machinery/modular_computer/preset/cargochat/engineering{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/filled/end{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/storage_shared) "qUM" = ( /obj/structure/sign/nanotrasen, /turf/closed/wall/r_wall, @@ -68509,6 +68523,16 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/engineering/main) +"rgH" = ( +/obj/machinery/power/smes/full, +/obj/machinery/status_display/ai/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat_interior) "rgK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -68862,6 +68886,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/detectives_office) +"rky" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/holopad, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "rkC" = ( /obj/structure/chair/office{ dir = 8 @@ -69268,15 +69298,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/port) -"roh" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/trimline/purple/filled/corner{ - dir = 8 - }, -/obj/machinery/airalarm/directional/south, -/obj/machinery/photocopier, -/turf/open/floor/iron/white, -/area/station/science/research) "rol" = ( /obj/structure/chair/sofa/bench{ dir = 8 @@ -70698,18 +70719,6 @@ /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/main) -"rIO" = ( -/obj/structure/chair/office/light{ - dir = 8 - }, -/obj/effect/landmark/start/virologist, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/full, -/turf/open/floor/iron/large, -/area/station/medical/virology) "rIP" = ( /obj/structure/lattice/catwalk, /obj/structure/sign/warning/secure_area/directional/east, @@ -72406,16 +72415,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"sbZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/status_display/evac/directional/north, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/service) "sca" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -72437,6 +72436,20 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/fore) +"scp" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/bot/left, +/obj/structure/sign/nanotrasen{ + pixel_x = -32 + }, +/obj/machinery/modular_computer/preset/cargochat/science{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/research) "scs" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -72451,15 +72464,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) -"scJ" = ( -/obj/machinery/airalarm/directional/north, -/obj/structure/table, -/obj/machinery/fax{ - fax_name = "Service Hallway"; - name = "Service Fax Machine" - }, -/turf/open/floor/iron/checker, -/area/station/hallway/secondary/service) "scR" = ( /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/white, @@ -72766,14 +72770,6 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"sgG" = ( -/obj/structure/table, -/obj/item/clipboard, -/obj/item/stack/package_wrap, -/obj/item/hand_labeler, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/checker, -/area/station/hallway/secondary/service) "sgI" = ( /obj/docking_port/stationary/escape_pod{ dir = 4 @@ -74667,13 +74663,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/ai_upload) -"sGp" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron, -/area/station/security/office) "sGx" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -75579,6 +75568,11 @@ "sRd" = ( /turf/closed/wall/r_wall, /area/station/security/evidence) +"sRs" = ( +/obj/item/radio/intercom/directional/north, +/obj/machinery/photocopier, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "sRt" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance, @@ -76129,12 +76123,6 @@ }, /turf/open/floor/iron, /area/station/science/lab) -"sYe" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/service) "sYf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -76513,6 +76501,19 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/station/security/execution/transfer) +"tdm" = ( +/obj/machinery/power/smes/full, +/obj/structure/sign/warning/electric_shock/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "AI Chamber - Fore"; + name = "motion-sensitive ai camera"; + network = list("aichamber") + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai) "tdt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -77297,33 +77298,6 @@ /obj/machinery/light/small/dim/directional/north, /turf/open/floor/iron/dark, /area/station/maintenance/department/science) -"tpV" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 1 - }, -/obj/machinery/door/window/left/directional/east{ - name = "Medical Delivery"; - req_access = list("medical") - }, -/turf/open/floor/iron/textured, -/area/station/medical/storage) -"tpX" = ( -/obj/machinery/power/smes/full, -/obj/structure/sign/warning/electric_shock/directional/north, -/obj/machinery/camera/directional/north{ - c_tag = "AI Chamber - Fore"; - name = "motion-sensitive ai camera"; - network = list("aichamber") - }, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai) "tpZ" = ( /turf/closed/wall, /area/station/maintenance/starboard/fore) @@ -78607,6 +78581,12 @@ /obj/structure/sign/poster/official/random/directional/west, /turf/open/floor/wood, /area/station/maintenance/port/fore) +"tFu" = ( +/obj/structure/cable, +/obj/machinery/firealarm/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "tFG" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -80201,6 +80181,14 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"tYN" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/recharge_station, +/turf/open/floor/iron, +/area/station/science/research) "tYP" = ( /obj/structure/chair/office/light, /obj/structure/cable, @@ -80366,6 +80354,12 @@ }, /turf/open/floor/iron, /area/station/medical/abandoned) +"ubJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/service) "ubK" = ( /obj/machinery/computer/operating, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -83002,12 +82996,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/secondary/exit) -"uJl" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/holopad, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/checker, -/area/station/hallway/secondary/service) "uJm" = ( /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, @@ -83323,6 +83311,15 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"uMT" = ( +/obj/machinery/disposal/bin, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "uMV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -84272,13 +84269,6 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"uZc" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/security/office) "uZe" = ( /obj/machinery/door/window/brigdoor/left/directional/south{ name = "Coroner's Office"; @@ -85106,13 +85096,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"vke" = ( -/obj/structure/cable, -/obj/machinery/power/smes/full, -/obj/effect/turf_decal/bot, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron, -/area/station/engineering/gravity_generator) "vkg" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -85207,6 +85190,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/large, /area/station/service/barber) +"vlS" = ( +/obj/structure/cable, +/mob/living/basic/slime, +/turf/open/floor/circuit/green, +/area/station/science/xenobiology) "vlY" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ @@ -86959,6 +86947,9 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"vHq" = ( +/turf/open/floor/iron, +/area/station/security/office) "vHu" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -88645,13 +88636,6 @@ /obj/item/flashlight/lamp, /turf/open/floor/wood, /area/station/hallway/secondary/service) -"wgz" = ( -/obj/effect/turf_decal/bot, -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen, -/turf/open/floor/iron/checker, -/area/station/hallway/secondary/service) "wgC" = ( /obj/machinery/door/poddoor/shutters/radiation/preopen{ id = "engsm"; @@ -88999,17 +88983,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"wkV" = ( -/obj/structure/sign/poster/official/random/directional/south, -/obj/machinery/light/directional/south, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/engineering/storage_shared) "wlc" = ( /obj/structure/table/reinforced, /obj/item/gun/energy/laser/carbine/practice{ @@ -90941,6 +90914,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/auxlab/firing_range) +"wGm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "wGs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -91438,12 +91418,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"wOz" = ( -/obj/structure/chair/office/light, -/obj/effect/landmark/start/virologist, -/obj/effect/turf_decal/trimline/green/filled/warning, -/turf/open/floor/iron/white, -/area/station/medical/virology) "wOP" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 @@ -91631,12 +91605,6 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/captain) -"wRJ" = ( -/obj/structure/cable, -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/engineering/storage_shared) "wRL" = ( /obj/effect/spawner/random/structure/crate, /obj/machinery/light/small/broken/directional/west, @@ -92877,6 +92845,16 @@ /obj/effect/turf_decal/trimline/neutral/warning, /turf/open/floor/iron/dark/textured_half, /area/station/medical/morgue) +"xiu" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/status_display/evac/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/service) "xiB" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -93088,6 +93066,13 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark, /area/station/hallway/primary/central/fore) +"xlf" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/service) "xls" = ( /obj/structure/table/reinforced, /obj/item/storage/toolbox/mechanical, @@ -93522,6 +93507,14 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) +"xrS" = ( +/obj/structure/sign/warning/secure_area/directional/south, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 6 + }, +/obj/item/kirbyplants/organic/plant10, +/turf/open/floor/iron/white, +/area/station/science/research) "xsb" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/stripes/line{ @@ -95800,6 +95793,13 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"xUs" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/security/office) "xUv" = ( /obj/machinery/firealarm/directional/west, /obj/structure/cable, @@ -103565,7 +103565,7 @@ btH btH btH bPC -pOu +rgH bTq jYp vgi @@ -105352,7 +105352,7 @@ alK qPm btH btH -tpX +tdm kXJ bEl xMy @@ -117181,7 +117181,7 @@ xqR qzc kUx kTV -vke +chv dQl oIE fFu @@ -118512,7 +118512,7 @@ pWL jjm rUl rTW -oRq +vlS rTW oVW oUe @@ -120054,7 +120054,7 @@ kSA jjm nkj rTW -oRq +vlS rTW oVW fmi @@ -120517,7 +120517,7 @@ fXF jgZ mrd rDL -qUL +pQo uCa wkj bqP @@ -120774,7 +120774,7 @@ fXF suH ikV gIk -wkV +ekF leE bfq iFn @@ -120815,7 +120815,7 @@ uKY gcr mQO rTW -oRq +vlS rTW iWX csO @@ -121031,7 +121031,7 @@ nmi xvf oQJ xJJ -oBa +wGm uCa aTz ygM @@ -121544,7 +121544,7 @@ wiZ fXF xkz hwe -wRJ +tFu vpV uCa gQk @@ -126730,7 +126730,7 @@ nIa hSf ffb cMn -hkZ +xrS sIX sIX cLR @@ -128272,15 +128272,15 @@ txc pZM ffb dqP -anU +aFp sIX sIX xbJ sIX sIX -aCA -aqU -aJj +mRl +scp +tYN dNN qMB wtS @@ -129304,7 +129304,7 @@ ikZ oRh oHq wNV -roh +eyl dNN uMV sEF @@ -129563,7 +129563,7 @@ dNN dNN dNN dNN -oPF +oLD dCx aJT fDF @@ -131407,7 +131407,7 @@ tgT rZl wjV jpN -mIg +pDb rJG gqm qYo @@ -131910,8 +131910,8 @@ bMV wjP aaa uUx -oDw -rIO +clB +hPH qJA gKl ecC @@ -131921,7 +131921,7 @@ gqm jyT wjV sFR -wOz +lZV fLV gqm qYo @@ -132094,7 +132094,7 @@ fxs lAg kPM pRS -qLa +pqo nLS xld uqZ @@ -132352,7 +132352,7 @@ rgW vze pRS pRS -eIu +hWA iaL pRS iaL @@ -132608,7 +132608,7 @@ sEm dEA nxd pRS -mlM +lZC eGs ykB jpe @@ -133078,7 +133078,7 @@ sid sBG sLz vRB -sgG +gch xMe kVP bSp @@ -133334,8 +133334,8 @@ cnL kfa pPI kVP -sbZ -oXX +xiu +uMT jVP kVP pET @@ -133591,8 +133591,8 @@ vdZ qPp pXt kVP -cVD -uJl +fWB +rky iXO kVP pgN @@ -133848,8 +133848,8 @@ vBt tyK kVP kVP -jgG -wgz +pWB +qsv gMB kVP kVP @@ -133893,7 +133893,7 @@ wmp rgW mGw pRS -paD +kNB lAv nAz jce @@ -134105,11 +134105,11 @@ kVP kVP kVP dUH -cBB -bJi +ubJ +xlf giz kVr -hRU +kix kVP sGS qOT @@ -135134,7 +135134,7 @@ mqV kVP giz giz -sYe +qSC lJJ maV ptC @@ -135391,7 +135391,7 @@ kVP kVP vat kVP -hjH +sRs hUh kVP cAV @@ -135648,7 +135648,7 @@ pOD tWU sSH kVP -scJ +aUZ qPX kVP aVE @@ -136510,9 +136510,9 @@ umA veM veM ako -tpV -cJQ -gPH +nFf +hFQ +fEV uQF ibh cYk @@ -136767,7 +136767,7 @@ oCo fiU jRJ ako -iOp +lcl dNc dNc dNc @@ -137024,7 +137024,7 @@ euF oCo sJG ako -oUf +mtD rjO oOI oOI @@ -137495,7 +137495,7 @@ ilI ilI ilI hup -mVX +qlY cMD ilI ilI @@ -144471,7 +144471,7 @@ lsJ ffP gBi tqy -hYh +msL qMf oci bqS @@ -149040,7 +149040,7 @@ nzR gKp gDP rTG -sGp +xUs ozu dql pWH @@ -149554,8 +149554,8 @@ ieg eIl ieg ieg -uZc -bDx +fes +vHq dql eBE gIV @@ -149800,7 +149800,7 @@ ouc qWZ iCo krO -qyK +guZ lET gBA xtf @@ -149812,7 +149812,7 @@ bdx lpI iIb tXW -cfx +kqI vgK wdC lTt @@ -150069,7 +150069,7 @@ sKp tXJ bkN gCV -lAe +oRf vgK ljX tLx diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index e66eb438644..de038813256 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -1853,6 +1853,16 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/white, /area/station/science/robotics/lab) +"aEK" = ( +/obj/machinery/atmospherics/components/binary/pump/off, +/obj/machinery/airlock_sensor/incinerator_ordmix{ + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/ordnance) "aEM" = ( /obj/structure/sign/departments/cargo, /turf/closed/wall/r_wall, @@ -4336,6 +4346,10 @@ }, /turf/open/floor/iron/dark, /area/station/service/hydroponics) +"bqX" = ( +/obj/machinery/air_sensor/ordnance_burn_chamber, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance) "bqY" = ( /obj/structure/closet, /obj/effect/spawner/random/maintenance/two, @@ -6204,6 +6218,14 @@ /obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"bPA" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/effect/landmark/start/virologist, +/obj/structure/chair/stool/directional/east, +/turf/open/floor/iron/dark, +/area/station/medical/virology) "bPE" = ( /obj/structure/table, /obj/item/radio/intercom/directional/east, @@ -8226,6 +8248,10 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/wood, /area/station/commons/vacant_room/office) +"cuB" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance) "cuJ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -9893,13 +9919,6 @@ initial_gas_mix = "ICEMOON_ATMOS" }, /area/icemoon/underground/explored) -"cSm" = ( -/obj/machinery/mineral/processing_unit/gulag{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/mine/laborcamp) "cSu" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -12647,12 +12666,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, /turf/open/floor/iron/dark, /area/station/medical/virology) -"dJk" = ( -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/science/ordnance) "dJx" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -14910,6 +14923,10 @@ "evb" = ( /turf/open/floor/iron, /area/station/service/janitor) +"evc" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance) "evk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -16606,14 +16623,16 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"eYz" = ( +/obj/machinery/mineral/processing_unit/gulag{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/mine/laborcamp) "eYC" = ( /turf/open/floor/iron/smooth, /area/mine/laborcamp/security) -"eYH" = ( -/obj/machinery/power/smes/full, -/obj/structure/cable, -/turf/open/floor/circuit, -/area/station/ai_monitored/turret_protected/ai) "eYL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall, @@ -17645,6 +17664,11 @@ }, /turf/open/floor/carpet, /area/station/service/theater) +"fqM" = ( +/obj/machinery/power/smes/full, +/obj/structure/cable, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai) "fqQ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -18366,6 +18390,10 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/medical/medbay/lobby) +"fCS" = ( +/obj/machinery/door/poddoor/incinerator_ordmix, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance) "fCW" = ( /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/dark/textured, @@ -19319,10 +19347,6 @@ /obj/structure/sign/warning/electric_shock/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/central) -"fSG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/closed/wall/r_wall, -/area/station/science/ordnance) "fTb" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20969,10 +20993,6 @@ }, /turf/open/floor/iron, /area/station/security/prison/visit) -"grY" = ( -/obj/structure/gulag_vent/ice, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "gsk" = ( /obj/structure/reflector/single/anchored{ dir = 5 @@ -22771,10 +22791,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"gWZ" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "gXe" = ( /obj/effect/turf_decal/siding/white{ dir = 4 @@ -24054,13 +24070,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"hrZ" = ( -/obj/structure/chair/office/light{ - dir = 4 - }, -/obj/effect/landmark/start/virologist, -/turf/open/floor/iron/white, -/area/station/medical/virology) "hsh" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, @@ -25146,16 +25155,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/service/janitor) -"hKj" = ( -/obj/machinery/atmospherics/components/binary/pump/off, -/obj/machinery/airlock_sensor/incinerator_ordmix{ - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/science/ordnance) "hKr" = ( /obj/structure/table/glass, /obj/item/book/manual/wiki/infections{ @@ -26040,10 +26039,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"iao" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, -/turf/closed/wall/r_wall, -/area/station/science/ordnance) "iar" = ( /obj/structure/cable, /obj/machinery/door/poddoor/preopen{ @@ -26927,10 +26922,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"inb" = ( -/obj/machinery/door/poddoor/incinerator_ordmix, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "inh" = ( /obj/structure/stairs/west, /obj/structure/railing, @@ -27488,6 +27479,9 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"iwq" = ( +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance) "iwx" = ( /obj/machinery/door/airlock/maintenance{ name = "Xenobiology Maintenance" @@ -27661,15 +27655,6 @@ /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"izc" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/science/ordnance) "izn" = ( /obj/effect/spawner/random/decoration/generic, /turf/open/floor/plating, @@ -27903,6 +27888,10 @@ dir = 4 }, /area/station/science/explab) +"iCe" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/turf/closed/wall/r_wall, +/area/station/science/ordnance) "iCg" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -32830,9 +32819,6 @@ dir = 4 }, /area/station/maintenance/port/fore) -"keV" = ( -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "keX" = ( /obj/structure/table, /obj/item/stack/cable_coil{ @@ -36520,6 +36506,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/port/fore) +"lgP" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/ordnance) "lgW" = ( /obj/machinery/meter/monitored/distro_loop, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible, @@ -41332,14 +41327,6 @@ /obj/structure/cable, /turf/open/floor/wood/parquet, /area/station/service/bar/atrium) -"mIC" = ( -/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior{ - name = "Burn Chamber Exterior Airlock" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "mIE" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -42191,10 +42178,6 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"mYd" = ( -/obj/machinery/air_sensor/ordnance_burn_chamber, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "mYh" = ( /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) @@ -44390,10 +44373,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"nBV" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "nCa" = ( /obj/structure/rack, /obj/item/pickaxe, @@ -45211,14 +45190,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/mine/mechbay) -"nNB" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/obj/effect/landmark/start/virologist, -/obj/structure/chair/stool/directional/east, -/turf/open/floor/iron/dark, -/area/station/medical/virology) "nNM" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/abandoned, @@ -46008,6 +45979,10 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"ocd" = ( +/obj/machinery/igniter/incinerator_ordmix, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance) "ocf" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -47731,23 +47706,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) -"oCs" = ( -/obj/structure/table, -/obj/item/toy/figure/virologist{ - pixel_x = -8; - pixel_y = 7 - }, -/obj/item/radio/headset/headset_med{ - pixel_x = -3; - pixel_y = -2 - }, -/obj/item/book/manual/wiki/infections{ - pixel_x = 10; - pixel_y = 2 - }, -/obj/effect/turf_decal/tile/green/full, -/turf/open/floor/iron/dark/smooth_large, -/area/station/medical/virology) "oCv" = ( /obj/item/chair/plastic{ pixel_y = 10 @@ -56730,6 +56688,14 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining, /turf/open/floor/iron/dark/textured_half, /area/mine/mechbay) +"rmG" = ( +/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior{ + name = "Burn Chamber Exterior Airlock" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance) "rmM" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -56873,6 +56839,10 @@ /obj/machinery/newscaster/directional/south, /turf/open/floor/iron, /area/station/science/explab) +"roW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/closed/wall/r_wall, +/area/station/science/ordnance) "roX" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -57449,6 +57419,12 @@ /obj/item/kirbyplants/random, /turf/open/floor/wood, /area/station/hallway/secondary/service) +"ryX" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/ordnance) "rza" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60232,6 +60208,17 @@ dir = 8 }, /area/station/service/chapel) +"sqH" = ( +/obj/machinery/door/airlock/research/glass/incinerator/ordmix_interior{ + name = "Burn Chamber Interior Airlock" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/airlock_controller/incinerator_ordmix{ + pixel_x = 24 + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/engine, +/area/station/science/ordnance) "sqN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60385,6 +60372,10 @@ /obj/structure/sign/warning/secure_area, /turf/closed/wall/r_wall, /area/station/engineering/storage/tech) +"ssu" = ( +/obj/structure/gulag_vent/ice, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "ssv" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/thinplating_new/corner, @@ -61126,10 +61117,6 @@ /obj/structure/cable/multilayer/multiz, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"sDA" = ( -/obj/machinery/igniter/incinerator_ordmix, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "sDQ" = ( /obj/item/radio/intercom/prison/directional/north, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -63973,6 +63960,13 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/commons/storage/mining) +"tAr" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/landmark/start/virologist, +/turf/open/floor/iron/white, +/area/station/medical/virology) "tAx" = ( /obj/effect/turf_decal/trimline/blue/filled/warning, /obj/structure/disposalpipe/segment, @@ -66822,6 +66816,23 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"uvz" = ( +/obj/structure/table, +/obj/item/toy/figure/virologist{ + pixel_x = -8; + pixel_y = 7 + }, +/obj/item/radio/headset/headset_med{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/item/book/manual/wiki/infections{ + pixel_x = 10; + pixel_y = 2 + }, +/obj/effect/turf_decal/tile/green/full, +/turf/open/floor/iron/dark/smooth_large, +/area/station/medical/virology) "uvM" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle, /turf/open/floor/plating, @@ -73904,10 +73915,6 @@ "wHc" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/rd) -"wHd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/turf/closed/wall/r_wall, -/area/station/science/ordnance) "wHe" = ( /obj/structure/cable, /turf/open/floor/iron/dark/textured, @@ -74039,6 +74046,10 @@ /obj/effect/landmark/start/depsec/medical, /turf/open/floor/iron/dark/smooth_large, /area/station/security/checkpoint/medical) +"wKh" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/turf/closed/wall/r_wall, +/area/station/science/ordnance) "wKm" = ( /obj/effect/turf_decal/tile/neutral/diagonal_edge, /obj/structure/disposalpipe/segment{ @@ -74374,17 +74385,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"wPC" = ( -/obj/machinery/door/airlock/research/glass/incinerator/ordmix_interior{ - name = "Burn Chamber Interior Airlock" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/airlock_controller/incinerator_ordmix{ - pixel_x = 24 - }, -/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, -/turf/open/floor/engine, -/area/station/science/ordnance) "wPD" = ( /obj/machinery/door/airlock/security/glass{ name = "Evidence Storage" @@ -116641,7 +116641,7 @@ dhq dhq iDt iDt -grY +ssu iDt dLN rbT @@ -116905,7 +116905,7 @@ rbT lLN vRO ggV -cSm +eYz tGP tGP iRp @@ -183834,7 +183834,7 @@ cDb vEJ wGX oQY -hrZ +tAr wsF jUB jUB @@ -184605,7 +184605,7 @@ uCe xKe dRz pwn -oCs +uvz aru rqY tAg @@ -184863,7 +184863,7 @@ lzX dRz jUB cAM -nNB +bPA qkB vqH xDb @@ -193606,8 +193606,8 @@ uIf uIf uIf uIf -fSG -fSG +roW +roW bId gcy jJG @@ -193859,12 +193859,12 @@ thA thA rcY iDt -inb -keV -gWZ -wHd -izc -wHd +fCS +iwq +cuB +iCe +lgP +iCe vcH gnq xEF @@ -194116,12 +194116,12 @@ thA thA rcY iDt -inb -sDA -mYd -mIC -dJk -wPC +fCS +ocd +bqX +rmG +ryX +sqH qSk sbd rEh @@ -194373,12 +194373,12 @@ thA thA rcY iDt -inb -keV -nBV -iao -hKj -iao +fCS +iwq +evc +wKh +aEK +wKh odf sbd jaY @@ -248686,7 +248686,7 @@ mlp lEg cvh uBi -eYH +fqM jIZ oFx iHp diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 2d414269001..d86c0c5d24d 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -945,8 +945,6 @@ /area/station/command/heads_quarters/hos) "atf" = ( /obj/structure/table/glass, -/obj/item/clothing/gloves/latex, -/obj/item/surgical_drapes, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -4592,6 +4590,14 @@ /obj/machinery/light/floor, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"bEv" = ( +/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior{ + name = "Burn Chamber Exterior Airlock" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance) "bEA" = ( /obj/structure/cable, /obj/machinery/camera/directional/south{ @@ -5043,12 +5049,6 @@ /area/station/security/execution/education) "bMS" = ( /obj/structure/table/glass, -/obj/item/scalpel{ - pixel_y = 12 - }, -/obj/item/circular_saw, -/obj/item/blood_filter, -/obj/item/bonesetter, /obj/machinery/button/door/directional/south{ id = "main_surgery"; name = "privacy shutters control" @@ -6019,6 +6019,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"cgP" = ( +/obj/machinery/air_sensor/ordnance_burn_chamber, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance) "cha" = ( /obj/machinery/door/airlock/research/glass{ name = "Ordnance Lab" @@ -7640,6 +7644,12 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/command/heads_quarters/cmo) +"cOT" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input{ + dir = 1 + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance) "cOX" = ( /obj/structure/sign/warning/radiation/rad_area/directional/north, /obj/effect/turf_decal/stripes/line{ @@ -8844,10 +8854,6 @@ /obj/effect/turf_decal/bot_white, /turf/open/floor/iron, /area/station/cargo/storage) -"dke" = ( -/obj/machinery/air_sensor/ordnance_burn_chamber, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "dkx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, @@ -9484,12 +9490,10 @@ /area/station/hallway/secondary/exit/departure_lounge) "dyq" = ( /obj/structure/table/glass, -/obj/item/retractor, -/obj/item/hemostat, -/obj/item/cautery, /obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/status_display/evac/directional/west, /obj/machinery/digital_clock/directional/south, +/obj/item/surgery_tray/full, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) "dyr" = ( @@ -9705,6 +9709,14 @@ }, /turf/open/floor/iron, /area/station/engineering/gravity_generator) +"dEF" = ( +/obj/machinery/atmospherics/components/binary/pump/on, +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/ordnance) "dEH" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -10810,6 +10822,9 @@ }, /turf/open/floor/iron/dark, /area/station/security/execution/education) +"dXU" = ( +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance) "dYa" = ( /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron, @@ -13278,6 +13293,10 @@ /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, /area/station/medical/cryo) +"eRn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/closed/wall/r_wall, +/area/station/science/ordnance) "eRR" = ( /obj/structure/table, /obj/item/screwdriver{ @@ -14227,8 +14246,6 @@ /area/station/medical/medbay/central) "fiK" = ( /obj/structure/table/glass, -/obj/item/clothing/gloves/latex, -/obj/item/surgical_drapes, /obj/machinery/airalarm/directional/south, /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, @@ -14672,11 +14689,9 @@ /area/station/ai_monitored/aisat/exterior) "fpg" = ( /obj/structure/table/glass, -/obj/item/retractor, -/obj/item/hemostat, -/obj/item/cautery, /obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/status_display/evac/directional/west, +/obj/item/surgery_tray/full, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) "fpj" = ( @@ -14720,9 +14735,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/disposal) -"fpM" = ( -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "fqB" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/cable, @@ -15524,6 +15536,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/heads_quarters/qm) +"fIn" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/effect/landmark/start/virologist, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/virology) "fIo" = ( /obj/effect/turf_decal/bot_white, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -16727,6 +16747,18 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"gil" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1 + }, +/obj/machinery/airlock_sensor/incinerator_ordmix{ + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/ordnance) "gip" = ( /obj/structure/table/wood, /obj/machinery/fax{ @@ -20018,10 +20050,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/chapel) -"hsY" = ( -/obj/machinery/igniter/incinerator_ordmix, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "hsZ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/wood, @@ -20097,12 +20125,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) -"htN" = ( -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/science/ordnance) "htO" = ( /obj/structure/chair/office{ dir = 1 @@ -24264,18 +24286,6 @@ "iOr" = ( /turf/closed/wall/r_wall, /area/station/security/prison/garden) -"iOt" = ( -/obj/structure/table/glass, -/obj/machinery/reagentgrinder{ - pixel_y = 8 - }, -/obj/item/toy/figure/virologist{ - pixel_x = -8 - }, -/obj/effect/turf_decal/tile/green/half/contrasted, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/white, -/area/station/medical/virology) "iOD" = ( /obj/machinery/atmospherics/components/binary/tank_compressor{ dir = 8 @@ -25985,14 +25995,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/iron, /area/station/cargo/warehouse) -"jrJ" = ( -/obj/machinery/atmospherics/components/binary/pump/on, -/obj/machinery/light/small/directional/east, -/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/science/ordnance) "jrL" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -28457,6 +28459,10 @@ /obj/effect/turf_decal/tile/green/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/virology) +"kgC" = ( +/obj/machinery/door/poddoor/incinerator_ordmix, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance) "kgV" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -39126,6 +39132,12 @@ /obj/machinery/bookbinder, /turf/open/floor/wood, /area/station/service/library) +"nZL" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/ordnance) "nZQ" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -39464,6 +39476,12 @@ /obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, /turf/open/floor/iron, /area/station/service/hydroponics) +"oet" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance) "oew" = ( /turf/open/floor/iron, /area/station/commons/fitness/recreation) @@ -41350,14 +41368,6 @@ /obj/structure/marker_beacon/olive, /turf/open/space/basic, /area/space/nearstation) -"oPY" = ( -/obj/structure/chair/office/light{ - dir = 8 - }, -/obj/effect/landmark/start/virologist, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/medical/virology) "oPZ" = ( /obj/structure/grille, /turf/open/floor/plating, @@ -44763,12 +44773,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"qaW" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "qbr" = ( /obj/structure/bed/medical{ dir = 4 @@ -48563,6 +48567,10 @@ }, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) +"rtj" = ( +/obj/machinery/igniter/incinerator_ordmix, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance) "rtD" = ( /obj/effect/turf_decal/tile/purple, /obj/machinery/light/directional/east, @@ -49818,6 +49826,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/garden) +"rOS" = ( +/obj/structure/cable, +/obj/structure/chair/office/light, +/obj/effect/landmark/start/virologist, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/virology) "rOY" = ( /obj/structure/mirror/directional/east, /obj/machinery/shower/directional/west, @@ -50751,6 +50769,17 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating/airless, /area/space/nearstation) +"sft" = ( +/obj/machinery/power/smes/full, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/flasher/directional/north{ + id = "AI"; + pixel_x = -22 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai) "sfu" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/orange/hidden, /turf/open/floor/iron/stairs/left{ @@ -51700,16 +51729,6 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/fore) -"syT" = ( -/obj/structure/cable, -/obj/structure/chair/office/light, -/obj/effect/landmark/start/virologist, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/medical/virology) "syV" = ( /obj/effect/turf_decal/arrows/white{ color = "#0000FF"; @@ -53434,10 +53453,6 @@ /obj/structure/bookcase/random/nonfiction, /turf/open/floor/wood, /area/station/service/library) -"tcd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/closed/wall/r_wall, -/area/station/science/ordnance) "tck" = ( /obj/structure/extinguisher_cabinet/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -54101,12 +54116,6 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"tnR" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input{ - dir = 1 - }, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "tot" = ( /obj/structure/table/wood, /obj/item/paper_bin{ @@ -55501,12 +55510,6 @@ /area/station/medical/virology) "tOT" = ( /obj/structure/table/glass, -/obj/item/scalpel{ - pixel_y = 12 - }, -/obj/item/circular_saw, -/obj/item/blood_filter, -/obj/item/bonesetter, /obj/machinery/button/door/directional/north{ id = "main_surgery"; name = "privacy shutters control" @@ -55897,17 +55900,6 @@ /obj/structure/table/wood, /turf/open/floor/carpet, /area/station/service/chapel/funeral) -"tVC" = ( -/obj/machinery/power/smes/full, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/flasher/directional/north{ - id = "AI"; - pixel_x = -22 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai) "tVG" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /obj/machinery/firealarm/directional/north, @@ -58665,6 +58657,18 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port) +"uTy" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder{ + pixel_y = 8 + }, +/obj/item/toy/figure/virologist{ + pixel_x = -8 + }, +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/virology) "uTF" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -61184,18 +61188,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"vJs" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1 - }, -/obj/machinery/airlock_sensor/incinerator_ordmix{ - pixel_x = -24 - }, -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/science/ordnance) "vJy" = ( /obj/structure/rack, /obj/item/stack/sheet/cardboard, @@ -61218,14 +61210,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"vJN" = ( -/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior{ - name = "Burn Chamber Exterior Airlock" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "vJX" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -61426,10 +61410,6 @@ }, /turf/open/space, /area/space/nearstation) -"vOe" = ( -/obj/machinery/door/poddoor/incinerator_ordmix, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "vOh" = ( /obj/effect/turf_decal/stripes/end, /turf/open/floor/plating/airless, @@ -82761,8 +82741,8 @@ xjH pIU dno uKy -oPY -iOt +fIn +uTy xjH nzQ vol @@ -83539,7 +83519,7 @@ pWX eYE hcR gqV -syT +rOS vUH rUE suP @@ -99736,7 +99716,7 @@ fhi uEo fiS gyQ -tcd +eRn gyQ gyQ gyQ @@ -99993,11 +99973,11 @@ fhi xEU iqx xYZ -vJs +gil xYZ -qaW -fpM -vOe +oet +dXU +kgC lMJ uGg nFa @@ -100250,11 +100230,11 @@ fhi fhi twy nJA -htN -vJN -dke -hsY -vOe +nZL +bEv +cgP +rtj +kgC lMJ uGg nFa @@ -100507,11 +100487,11 @@ jvo aHH iYE dTN -jrJ +dEF dTN -tnR -fpM -vOe +cOT +dXU +kgC lMJ uGg wpn @@ -123304,7 +123284,7 @@ qyc jZC pan mbS -tVC +sft mCL aWO aYz diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index 6a1d703aea4..7cf30212586 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -125,6 +125,14 @@ }, /turf/open/floor/iron/checker, /area/mine/laborcamp) +"aQ" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Mining Station Maintenance" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/plating, +/area/mine/maintenance/service) "aV" = ( /obj/structure/marker_beacon/teal, /obj/effect/turf_decal/sand/plating/volcanic, @@ -870,10 +878,6 @@ }, /turf/open/floor/plating/lavaland_atmos, /area/lavaland/surface/outdoors) -"fP" = ( -/obj/structure/gulag_vent, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) "fQ" = ( /turf/open/genturf, /area/lavaland/surface/outdoors/unexplored/danger) @@ -2834,12 +2838,6 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/iron/white, /area/mine/laborcamp/production) -"ps" = ( -/obj/structure/cable, -/obj/machinery/power/smes/full, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/mine/maintenance/service) "pu" = ( /obj/item/chair/stool{ pixel_x = -2; @@ -3416,15 +3414,6 @@ dir = 4 }, /area/mine/cafeteria) -"tg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/airlock/maintenance{ - name = "Mining Station Maintenance" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/plating, -/area/mine/maintenance/service) "ti" = ( /obj/structure/table, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -3670,14 +3659,6 @@ /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white/smooth_corner, /area/mine/medical) -"vc" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Mining Station Maintenance" - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/turf/open/floor/plating, -/area/mine/maintenance/service) "vd" = ( /obj/structure/railing/corner{ dir = 1 @@ -4107,16 +4088,6 @@ /obj/effect/turf_decal/sand/plating/volcanic, /turf/open/floor/plating/lavaland_atmos, /area/mine/maintenance/service/disposals) -"xI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/maintenance{ - name = "Mining Station Maintenance" - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms, -/turf/open/floor/plating, -/area/mine/maintenance/service/comms) "xJ" = ( /obj/machinery/vending/coffee, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -4164,6 +4135,10 @@ dir = 1 }, /area/mine/storage/public) +"xX" = ( +/obj/structure/gulag_vent, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "yc" = ( /obj/docking_port/stationary{ dir = 2; @@ -4490,6 +4465,14 @@ /obj/structure/lattice/catwalk, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"Af" = ( +/obj/machinery/mineral/processing_unit/gulag{ + dir = 1; + input_dir = 8; + output_dir = 4 + }, +/turf/open/floor/plating, +/area/mine/laborcamp/production) "Ai" = ( /obj/structure/stone_tile/cracked{ dir = 1 @@ -4957,11 +4940,6 @@ /obj/effect/turf_decal/sand/plating/volcanic, /turf/open/floor/plating/lavaland_atmos, /area/lavaland/surface/outdoors) -"Ee" = ( -/obj/machinery/power/smes/full, -/obj/structure/cable, -/turf/open/floor/plating, -/area/mine/maintenance/labor) "Eg" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/disposalpipe/segment, @@ -5083,6 +5061,15 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/plating, /area/mine/maintenance/service) +"EV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/maintenance{ + name = "Mining Station Maintenance" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/turf/open/floor/plating, +/area/mine/maintenance/service) "EX" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -5118,6 +5105,16 @@ "Ff" = ( /turf/open/floor/glass/reinforced, /area/mine/lounge) +"Fk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/maintenance{ + name = "Mining Station Maintenance" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms, +/turf/open/floor/plating, +/area/mine/maintenance/service/comms) "Fn" = ( /obj/structure/stone_tile/cracked{ dir = 4 @@ -6022,12 +6019,24 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron, /area/mine/lounge) +"KK" = ( +/obj/machinery/power/smes/full, +/obj/structure/cable, +/turf/open/floor/plating, +/area/mine/maintenance/labor) "KL" = ( /obj/effect/turf_decal/tile/bar/opposingcorners{ dir = 1 }, /turf/open/floor/iron/checker, /area/mine/cafeteria) +"KT" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Mining Station Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/turf/open/floor/plating, +/area/mine/maintenance/service) "KV" = ( /obj/structure/table, /obj/machinery/light/directional/east, @@ -6253,14 +6262,6 @@ }, /turf/open/floor/plating/lavaland_atmos, /area/lavaland/surface/outdoors) -"LT" = ( -/obj/machinery/mineral/processing_unit/gulag{ - dir = 1; - input_dir = 8; - output_dir = 4 - }, -/turf/open/floor/plating, -/area/mine/laborcamp/production) "LY" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -7476,13 +7477,6 @@ }, /turf/open/floor/iron/dark/smooth_edge, /area/mine/laborcamp/security) -"TV" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Mining Station Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, -/turf/open/floor/plating, -/area/mine/maintenance/service) "TW" = ( /obj/machinery/door/airlock/maintenance{ name = "Mining Station Storage" @@ -8043,6 +8037,12 @@ dir = 4 }, /area/mine/production) +"Xk" = ( +/obj/structure/cable, +/obj/machinery/power/smes/full, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/mine/maintenance/service) "Xp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -22573,7 +22573,7 @@ uU uU uU pU -fP +xX pU ff Gf @@ -24377,7 +24377,7 @@ Hd Nb NR Kv -LT +Af ff gm mN @@ -28238,7 +28238,7 @@ Zt Zt Zt Zt -Ee +KK ve RD RD @@ -37975,7 +37975,7 @@ ni rZ ni ON -TV +KT xD xD xD @@ -38485,12 +38485,12 @@ Ue AA gB ON -ps +Xk gq ER -vc +aQ YR -xI +Fk DF Kn xD @@ -39514,7 +39514,7 @@ ON ON ON ON -tg +EV ON ON ON diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm index 2e62e13527d..e87b973338c 100644 --- a/_maps/map_files/NorthStar/north_star.dmm +++ b/_maps/map_files/NorthStar/north_star.dmm @@ -800,16 +800,6 @@ /obj/structure/table, /turf/open/floor/iron/dark, /area/station/commons/storage/primary) -"ajz" = ( -/obj/structure/railing/corner, -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/red/filled/corner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron/dark/textured, -/area/station/commons/fitness) "ajB" = ( /obj/effect/spawner/random/trash/mopbucket, /obj/effect/spawner/random/trash/soap, @@ -7955,6 +7945,12 @@ /obj/structure/sign/poster/official/cleanliness/directional/east, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/secondary/entry) +"bWZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark/textured, +/area/station/commons/fitness) "bXd" = ( /obj/effect/turf_decal/trimline/purple/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -12179,14 +12175,6 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/service) -"daa" = ( -/obj/machinery/camera/motion/directional/north{ - c_tag = "Minisat North" - }, -/obj/machinery/power/smes/full, -/obj/structure/cable, -/turf/open/floor/circuit, -/area/station/ai_monitored/turret_protected/aisat/service) "dab" = ( /obj/effect/spawner/random/trash/garbage{ spawn_scatter_radius = 1 @@ -23327,6 +23315,14 @@ }, /turf/open/floor/pod/light, /area/station/maintenance/floor3/starboard/fore) +"gbO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/landmark/start/virologist, +/turf/open/floor/iron/white, +/area/station/medical/virology) "gbR" = ( /obj/structure/flora/bush/sparsegrass/style_random, /obj/structure/flora/bush/sunny/style_random, @@ -24752,12 +24748,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plastic, /area/station/security/prison/shower) -"gvV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron/dark/textured, -/area/station/commons/fitness) "gvX" = ( /obj/structure/sign/poster/official/random/directional/east, /turf/open/floor/iron/dark/side{ @@ -27877,6 +27867,12 @@ /obj/item/airlock_painter/decal/tile, /turf/open/floor/iron/dark, /area/station/commons/storage/primary) +"hmg" = ( +/obj/machinery/firealarm/directional/west, +/obj/machinery/power/smes/full, +/obj/structure/cable, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/aisat_interior) "hmn" = ( /obj/effect/turf_decal/siding/thinplating_new{ dir = 4 @@ -33619,6 +33615,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/pod/light, /area/station/maintenance/floor3/starboard) +"iKW" = ( +/obj/machinery/camera/motion/directional/north{ + c_tag = "Minisat North" + }, +/obj/machinery/power/smes/full, +/obj/structure/cable, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/aisat/service) "iLy" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -44192,6 +44196,13 @@ }, /turf/open/floor/carpet/blue, /area/station/command/meeting_room) +"ltH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/structure/sign/poster/contraband/hacking_guide/directional/north, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron/dark/textured, +/area/station/commons/fitness) "ltI" = ( /obj/effect/spawner/random/trash/graffiti{ pixel_y = -32 @@ -48598,13 +48609,6 @@ }, /turf/open/floor/plating, /area/station/medical/abandoned) -"mxS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/obj/structure/sign/poster/contraband/hacking_guide/directional/north, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron/dark/textured, -/area/station/commons/fitness) "mxT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61919,11 +61923,6 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/white, /area/station/science/lobby) -"pUB" = ( -/obj/machinery/power/smes/full, -/obj/structure/cable, -/turf/open/floor/circuit, -/area/station/ai_monitored/turret_protected/aisat/service) "pUC" = ( /obj/effect/spawner/random/trash/graffiti, /turf/open/floor/pod/light, @@ -63807,6 +63806,16 @@ }, /turf/open/floor/pod/light, /area/station/maintenance/floor4/port/fore) +"qtA" = ( +/obj/structure/railing/corner, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/commons/fitness) "qtH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/filingcabinet/chestdrawer{ @@ -69135,6 +69144,11 @@ /obj/item/pen, /turf/open/floor/iron/dark, /area/station/security/interrogation) +"rOa" = ( +/obj/machinery/power/smes/full, +/obj/structure/cable, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/aisat/service) "rOb" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -70604,6 +70618,31 @@ dir = 1 }, /area/station/science/genetics) +"sjj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/button/door/directional/west{ + id = "viro-inner"; + name = "Inner Virology Lockdown"; + pixel_y = -8 + }, +/obj/machinery/button/door/directional/west{ + id = "viro-outer"; + name = "Outer Virology Lockdown"; + pixel_y = 8 + }, +/obj/machinery/button/door/directional/west{ + id = "viro-iso"; + name = "Isolation Bolts"; + normaldoorcontrol = 1; + pixel_x = -36; + specialfunctions = 4 + }, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/landmark/start/virologist, +/turf/open/floor/iron/white, +/area/station/medical/virology) "sjs" = ( /obj/effect/mapping_helpers/airlock/access/any/engineering/ce, /obj/machinery/door/airlock/engineering{ @@ -72945,31 +72984,6 @@ }, /turf/open/floor/pod/dark, /area/station/maintenance/floor3/port/fore) -"sPp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/button/door/directional/west{ - id = "viro-inner"; - name = "Inner Virology Lockdown"; - pixel_y = -8 - }, -/obj/machinery/button/door/directional/west{ - id = "viro-outer"; - name = "Outer Virology Lockdown"; - pixel_y = 8 - }, -/obj/machinery/button/door/directional/west{ - id = "viro-iso"; - name = "Isolation Bolts"; - normaldoorcontrol = 1; - pixel_x = -36; - specialfunctions = 4 - }, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/landmark/start/virologist, -/turf/open/floor/iron/white, -/area/station/medical/virology) "sPs" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -76630,14 +76644,6 @@ }, /turf/open/floor/pod/dark, /area/station/maintenance/floor3/port/aft) -"tKr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/landmark/start/virologist, -/turf/open/floor/iron/white, -/area/station/medical/virology) "tKs" = ( /obj/structure/curtain, /obj/structure/fans/tiny{ @@ -79797,12 +79803,6 @@ }, /turf/open/floor/iron/corner, /area/station/maintenance/solars/starboard/fore) -"uDR" = ( -/obj/machinery/firealarm/directional/west, -/obj/machinery/power/smes/full, -/obj/structure/cable, -/turf/open/floor/circuit, -/area/station/ai_monitored/turret_protected/aisat_interior) "uDZ" = ( /obj/machinery/light/directional/north, /obj/machinery/airalarm/directional/north, @@ -195562,7 +195562,7 @@ mqc mRQ dVV xNy -sPp +sjj mcI rPC sJn @@ -196076,7 +196076,7 @@ iOA utl doh gJz -tKr +gbO hwQ piz aWO @@ -196590,7 +196590,7 @@ iOA dfU pZm wJy -tKr +gbO dVV bLm yhv @@ -258010,8 +258010,8 @@ qrd mcU xCX nWe -mxS -ajz +ltH +qtA lGo lNX lNX @@ -259038,7 +259038,7 @@ qrd oeQ xgb nWe -gvV +bWZ hwr oWt wJH @@ -335641,7 +335641,7 @@ aFj aFj sOy rZC -uDR +hmg knY sOy vyR @@ -336147,7 +336147,7 @@ oyh oyh aFj aFj -pUB +rOa kZZ kum kum @@ -336918,7 +336918,7 @@ dkh aFj aFj aFj -daa +iKW kZZ tOV knH diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index 456cf46196e..a06d87aceff 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -3403,6 +3403,16 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron/grimy, /area/station/ai_monitored/turret_protected/aisat/foyer) +"aus" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/structure/bed{ + dir = 4 + }, +/obj/effect/landmark/start/virologist, +/turf/open/floor/iron/dark, +/area/station/medical/virology) "auz" = ( /turf/closed/wall, /area/station/commons/vacant_room) @@ -28959,6 +28969,14 @@ /obj/structure/sign/warning/electric_shock/directional/north, /turf/open/floor/plating, /area/station/science/xenobiology) +"jqM" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/chair/stool/directional/east, +/obj/effect/landmark/start/virologist, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/virology) "jqR" = ( /obj/structure/table, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -33445,16 +33463,6 @@ "kOE" = ( /turf/closed/wall, /area/station/security/detectives_office) -"kOL" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/obj/structure/bed{ - dir = 4 - }, -/obj/effect/landmark/start/virologist, -/turf/open/floor/iron/dark, -/area/station/medical/virology) "kPf" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -33966,13 +33974,6 @@ }, /turf/open/space/openspace, /area/station/solars/port) -"kXq" = ( -/obj/structure/cable/multilayer/multiz, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/ai_monitored/turret_protected/ai) "kXr" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -34727,11 +34728,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/construction/engineering) -"llW" = ( -/obj/machinery/power/smes/full, -/obj/structure/cable, -/turf/open/floor/circuit, -/area/station/ai_monitored/turret_protected/ai) "lml" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos/pumproom) @@ -42893,6 +42889,11 @@ "oca" = ( /turf/closed/wall, /area/station/construction/mining/aux_base) +"ocl" = ( +/obj/machinery/power/smes/full, +/obj/structure/cable, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai) "ocn" = ( /obj/structure/table/wood, /obj/machinery/reagentgrinder, @@ -65311,6 +65312,13 @@ }, /turf/open/floor/plating, /area/station/construction/mining/aux_base) +"vTD" = ( +/obj/structure/cable/multilayer/multiz, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/ai) "vTE" = ( /obj/machinery/camera{ dir = 9; @@ -67094,14 +67102,6 @@ }, /turf/open/floor/iron/freezer, /area/station/medical/coldroom) -"wDt" = ( -/obj/effect/landmark/event_spawn, -/obj/structure/chair/stool/directional/east, -/obj/effect/landmark/start/virologist, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/medical/virology) "wDv" = ( /obj/structure/rack, /obj/item/controller{ @@ -172639,7 +172639,7 @@ bWk svF xrG kow -wDt +jqM jqY jqY jqY @@ -173147,7 +173147,7 @@ whz aaa aaa ugt -kOL +aus vrJ aPS tMb @@ -185801,7 +185801,7 @@ jLx ffe mgi pIQ -llW +ocl xZx rSB dVM @@ -186314,7 +186314,7 @@ mYB njC aoh iUO -kXq +vTD lxi njC mEb diff --git a/_maps/shuttles/pirate_medieval.dmm b/_maps/shuttles/pirate_medieval.dmm new file mode 100644 index 00000000000..03441b8a652 --- /dev/null +++ b/_maps/shuttles/pirate_medieval.dmm @@ -0,0 +1,535 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"b" = ( +/obj/structure/table/wood, +/obj/item/stack/sheet/mineral/wood/fifty{ + pixel_y = 4 + }, +/turf/open/floor/stone, +/area/shuttle/pirate) +"c" = ( +/obj/structure/fake_stairs/wood/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 + }, +/turf/open/floor/stone, +/area/shuttle/pirate) +"d" = ( +/obj/structure/fake_stairs/wood/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 + }, +/obj/structure/mineral_door/gold, +/turf/open/floor/stone, +/area/shuttle/pirate) +"e" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/botanical_waste, +/obj/effect/spawner/random/trash/garbage, +/obj/effect/mob_spawn/ghost_role/human/pirate/medieval, +/turf/open/floor/plating, +/area/shuttle/pirate) +"f" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/shuttle/pirate) +"g" = ( +/obj/structure/fans/tiny, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/mineral_door/iron, +/turf/open/floor/plating, +/area/shuttle/pirate) +"h" = ( +/obj/structure/table/wood, +/obj/item/spear/military{ + pixel_y = 8; + pixel_x = -7 + }, +/obj/item/spear/military{ + pixel_y = 1; + pixel_x = -6 + }, +/obj/item/spear/military{ + pixel_y = -2; + pixel_x = 1 + }, +/turf/open/floor/stone, +/area/shuttle/pirate) +"j" = ( +/obj/item/flashlight/lantern{ + light_on = 1 + }, +/turf/open/floor/stone, +/area/shuttle/pirate) +"k" = ( +/obj/structure/table/wood, +/obj/item/restraints/legcuffs/bola/tactical, +/obj/item/restraints/legcuffs/bola/tactical, +/obj/item/restraints/legcuffs/bola/tactical, +/obj/item/restraints/legcuffs/bola, +/obj/item/restraints/legcuffs/bola, +/obj/item/restraints/legcuffs/bola, +/turf/open/floor/stone, +/area/shuttle/pirate) +"l" = ( +/obj/structure/fans/tiny, +/obj/structure/mineral_door/iron, +/turf/open/floor/stone, +/area/shuttle/pirate) +"m" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/arrows{ + dir = 8 + }, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/spawner/random/trash/botanical_waste, +/obj/effect/mob_spawn/ghost_role/human/pirate/medieval, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plating, +/area/shuttle/pirate) +"n" = ( +/obj/effect/decal/cleanable/vomit/old, +/turf/open/floor/stone, +/area/shuttle/pirate) +"o" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/arrows{ + dir = 4 + }, +/obj/effect/spawner/random/trash/mess, +/obj/effect/spawner/random/trash/garbage, +/obj/effect/mob_spawn/ghost_role/human/pirate/medieval, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/plating, +/area/shuttle/pirate) +"p" = ( +/turf/closed/wall/mineral/wood, +/area/shuttle/pirate) +"q" = ( +/obj/effect/mob_spawn/ghost_role/human/pirate/medieval/warlord, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 + }, +/turf/open/floor/stone, +/area/shuttle/pirate) +"r" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/garbage, +/obj/effect/mob_spawn/ghost_role/human/pirate/medieval, +/turf/open/floor/plating, +/area/shuttle/pirate) +"s" = ( +/obj/structure/fans/tiny, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/docking_port/mobile/pirate{ + launch_status = 0; + movement_force = list("KNOCKDOWN"=0,"THROW"=0); + name = "Pirate Ship"; + port_direction = 2 + }, +/obj/docking_port/stationary{ + dwidth = 11; + height = 16; + shuttle_id = "pirate_home"; + name = "Deep Space"; + width = 17 + }, +/obj/structure/mineral_door/iron, +/turf/open/floor/plating, +/area/shuttle/pirate) +"u" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/blood/gibs/limb, +/obj/effect/decal/cleanable/blood/gibs/body, +/obj/item/food/meat/slab/human/mutant/zombie, +/obj/item/kitchen/fork, +/turf/open/floor/stone, +/area/shuttle/pirate) +"v" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/shuttle/pirate) +"w" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 + }, +/turf/open/floor/stone, +/area/shuttle/pirate) +"x" = ( +/obj/structure/fake_stairs/wood/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 + }, +/obj/structure/mineral_door/gold, +/turf/open/floor/stone, +/area/shuttle/pirate) +"y" = ( +/obj/machinery/shuttle_scrambler, +/turf/open/floor/stone, +/area/shuttle/pirate) +"z" = ( +/obj/structure/fans/tiny, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/mineral_door/iron, +/turf/open/floor/plating, +/area/shuttle/pirate) +"A" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/reagent_containers/cup/glass/bottle/vodka, +/turf/open/floor/plating, +/area/shuttle/pirate) +"C" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/stone, +/area/shuttle/pirate) +"D" = ( +/obj/machinery/piratepad, +/turf/open/floor/stone, +/area/shuttle/pirate) +"E" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/stone, +/area/shuttle/pirate) +"F" = ( +/turf/open/floor/stone, +/area/shuttle/pirate) +"G" = ( +/obj/machinery/computer/piratepad_control, +/turf/open/floor/stone, +/area/shuttle/pirate) +"H" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/wood/wings, +/turf/open/floor/stone, +/area/shuttle/pirate) +"I" = ( +/obj/structure/fake_stairs/wood/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 + }, +/turf/open/floor/stone, +/area/shuttle/pirate) +"J" = ( +/obj/effect/decal/cleanable/blood/gibs/old, +/obj/item/food/burger/human, +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/bottle/rum{ + pixel_y = 15; + pixel_x = -4 + }, +/obj/item/reagent_containers/cup/glass/bottle/rum{ + pixel_y = 8; + pixel_x = 8 + }, +/turf/open/floor/stone, +/area/shuttle/pirate) +"K" = ( +/obj/structure/table/wood, +/obj/item/stack/medical/poultice{ + pixel_y = 6; + pixel_x = -3 + }, +/obj/item/stack/medical/poultice{ + pixel_y = -3; + pixel_x = 5 + }, +/obj/item/storage/medkit/fire, +/turf/open/floor/stone, +/area/shuttle/pirate) +"L" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/stone, +/area/shuttle/pirate) +"M" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/spawner/random/trash/graffiti, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/shuttle/pirate) +"N" = ( +/obj/machinery/computer/shuttle/pirate/drop_pod, +/turf/open/floor/stone, +/area/shuttle/pirate) +"O" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/fermenting_barrel/thermite, +/obj/item/reagent_containers/cup/beaker/large, +/obj/item/reagent_containers/cup/beaker/large, +/obj/item/reagent_containers/cup/beaker/large, +/turf/open/floor/stone, +/area/shuttle/pirate) +"P" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/stone, +/area/shuttle/pirate) +"Q" = ( +/obj/structure/closet/cabinet, +/obj/item/claymore, +/obj/item/shield/kite, +/obj/item/shield/kite, +/obj/item/shield/kite, +/turf/open/floor/stone, +/area/shuttle/pirate) +"R" = ( +/obj/machinery/atmospherics/components/tank/air{ + dir = 1 + }, +/turf/open/floor/stone, +/area/shuttle/pirate) +"S" = ( +/obj/structure/frame/computer{ + anchored = 1 + }, +/obj/item/assault_pod/medieval, +/turf/open/floor/stone, +/area/shuttle/pirate) +"T" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 + }, +/turf/open/floor/stone, +/area/shuttle/pirate) +"U" = ( +/obj/machinery/loot_locator, +/turf/open/floor/stone, +/area/shuttle/pirate) +"V" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/plating, +/area/shuttle/pirate) +"W" = ( +/obj/structure/table/wood, +/obj/item/radio/intercom{ + pixel_y = 5 + }, +/turf/open/floor/stone, +/area/shuttle/pirate) +"X" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 + }, +/obj/structure/table/wood, +/obj/item/bodypart/head/skeleton{ + pixel_x = -6 + }, +/obj/item/bodypart/head/skeleton{ + pixel_y = -2; + pixel_x = 5 + }, +/obj/item/bodypart/head/skeleton{ + pixel_x = 1; + pixel_y = 8 + }, +/turf/open/floor/stone, +/area/shuttle/pirate) +"Y" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/stone, +/area/shuttle/pirate) +"Z" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/flashlight/lantern{ + light_on = 1 + }, +/turf/open/floor/stone, +/area/shuttle/pirate) + +(1,1,1) = {" +a +a +p +p +l +p +p +p +a +"} +(2,1,1) = {" +a +a +g +f +o +r +A +s +a +"} +(3,1,1) = {" +a +a +a +a +I +a +a +a +a +"} +(4,1,1) = {" +p +p +p +p +x +p +E +p +a +"} +(5,1,1) = {" +a +E +R +X +T +C +Q +p +p +"} +(6,1,1) = {" +p +p +W +F +T +j +Y +h +E +"} +(7,1,1) = {" +a +E +N +Y +T +Y +F +k +p +"} +(8,1,1) = {" +V +V +S +P +q +L +F +F +l +"} +(9,1,1) = {" +a +E +y +F +w +n +H +b +p +"} +(10,1,1) = {" +p +p +U +F +w +Z +u +K +E +"} +(11,1,1) = {" +a +E +G +D +T +O +J +p +p +"} +(12,1,1) = {" +p +p +p +p +d +p +E +p +a +"} +(13,1,1) = {" +a +a +a +a +c +a +a +a +a +"} +(14,1,1) = {" +a +a +z +M +m +e +v +z +a +"} +(15,1,1) = {" +a +a +p +p +l +p +p +p +a +"} diff --git a/code/__DEFINES/ai/ai.dm b/code/__DEFINES/ai/ai.dm index 24272a08d71..b8323c1c4e8 100644 --- a/code/__DEFINES/ai/ai.dm +++ b/code/__DEFINES/ai/ai.dm @@ -26,6 +26,16 @@ ///Flags for ai_behavior new() #define AI_CONTROLLER_INCOMPATIBLE (1<<0) +//Return flags for ai_behavior/perform() +///Update this behavior's cooldown +#define AI_BEHAVIOR_DELAY (1<<0) +///Finish the behavior successfully +#define AI_BEHAVIOR_SUCCEEDED (1<<1) +///Finish the behavior unsuccessfully +#define AI_BEHAVIOR_FAILED (1<<2) + +#define AI_BEHAVIOR_INSTANT (NONE) + ///Does this task require movement from the AI before it can be performed? #define AI_BEHAVIOR_REQUIRE_MOVEMENT (1<<0) ///Does this require the current_movement_target to be adjacent and in reach? diff --git a/code/__DEFINES/dcs/signals/signals_reagent.dm b/code/__DEFINES/dcs/signals/signals_reagent.dm index 38d2ae92d9d..08993ad56de 100644 --- a/code/__DEFINES/dcs/signals/signals_reagent.dm +++ b/code/__DEFINES/dcs/signals/signals_reagent.dm @@ -19,8 +19,8 @@ ///from base of [/datum/reagent/proc/expose_atom]: (/turf, reac_volume) #define COMSIG_REAGENT_EXPOSE_TURF "reagent_expose_turf" -///from base of [/datum/controller/subsystem/materials/proc/InitializeMaterial]: (/datum/material) -#define COMSIG_MATERIALS_INIT_MAT "SSmaterials_init_mat" +///from base of [/datum/system/materials/proc/InitializeMaterial]: (/datum/material) +#define COMSIG_MATERIALS_INIT_MAT "DSmaterials_init_mat" ///from base of [/datum/component/multiple_lives/proc/respawn]: (mob/respawned_mob, gibbed, lives_left) #define COMSIG_ON_MULTIPLE_LIVES_RESPAWN "on_multiple_lives_respawn" diff --git a/code/__DEFINES/devices.dm b/code/__DEFINES/devices.dm index 8f98f040dbc..afd41570b5b 100644 --- a/code/__DEFINES/devices.dm +++ b/code/__DEFINES/devices.dm @@ -8,8 +8,8 @@ #define INSPECTOR_PRINT_SOUND_MODE_FAFAFOGGY 4 #define BANANIUM_CLOWN_INSPECTOR_PRINT_SOUND_MODE_LAST 4 #define CLOWN_INSPECTOR_PRINT_SOUND_MODE_LAST 4 -#define INSPECTOR_ENERGY_USAGE_HONK (15 KILO JOULES) -#define INSPECTOR_ENERGY_USAGE_NORMAL (5 KILO JOULES) +#define INSPECTOR_ENERGY_USAGE_HONK (0.015 * STANDARD_CELL_CHARGE) +#define INSPECTOR_ENERGY_USAGE_NORMAL (0.005 * STANDARD_CELL_CHARGE) #define INSPECTOR_TIME_MODE_SLOW 1 #define INSPECTOR_TIME_MODE_FAST 2 #define INSPECTOR_TIME_MODE_HONK 3 diff --git a/code/__DEFINES/lights.dm b/code/__DEFINES/lights.dm index 8830f919472..48d210fe031 100644 --- a/code/__DEFINES/lights.dm +++ b/code/__DEFINES/lights.dm @@ -1,5 +1,5 @@ ///How much power emergency lights will consume per tick -#define LIGHT_EMERGENCY_POWER_USE (0.1 KILO WATTS) +#define LIGHT_EMERGENCY_POWER_USE (0.0001 * STANDARD_CELL_RATE) // status values shared between lighting fixtures and items #define LIGHT_OK 0 #define LIGHT_EMPTY 1 diff --git a/code/__DEFINES/melee.dm b/code/__DEFINES/melee.dm index 9bef3e32d0d..7544b0176dc 100644 --- a/code/__DEFINES/melee.dm +++ b/code/__DEFINES/melee.dm @@ -1,6 +1,7 @@ //Martial arts defines #define MARTIALART_BOXING "boxing" +#define MARTIALART_EVIL_BOXING "evil boxing" #define MARTIALART_CQC "CQC" #define MARTIALART_KRAVMAGA "krav maga" #define MARTIALART_MUSHPUNCH "mushroom punch" diff --git a/code/__DEFINES/power.dm b/code/__DEFINES/power.dm index 0eda3669a71..b9752eac351 100644 --- a/code/__DEFINES/power.dm +++ b/code/__DEFINES/power.dm @@ -19,8 +19,12 @@ ///The joule is the standard unit of energy for this codebase. You can use this with other defines to clarify that it will not be multiplied by time. #define JOULES * JOULE -///The amount of energy, in joules, a standard powercell has. -#define STANDARD_CELL_CHARGE (1 MEGA JOULES) // 1 MJ. +///The capacity of a standard power cell +#define STANDARD_CELL_VALUE (1 MEGA) + ///The amount of energy, in joules, a standard powercell has. + #define STANDARD_CELL_CHARGE (STANDARD_CELL_VALUE JOULES) // 1 MJ. + ///The amount of power, in watts, a standard powercell can give. + #define STANDARD_CELL_RATE (STANDARD_CELL_VALUE WATTS) // 1 MW. GLOBAL_VAR_INIT(CHARGELEVEL, 0.01) // Cap for how fast cells charge, as a percentage per second (.01 means cellcharge is capped to 1% per second) diff --git a/code/__DEFINES/pronouns.dm b/code/__DEFINES/pronouns.dm new file mode 100644 index 00000000000..c0515426e35 --- /dev/null +++ b/code/__DEFINES/pronouns.dm @@ -0,0 +1,40 @@ +/// she, he, they, it "%PRONOUN_they" = "p_they" +/// She, He, They, It "%PRONOUN_They" = "p_They" +/// her, his, their, its "%PRONOUN_their" = "p_their" +/// Her, His, Their, Its "%PRONOUN_Their" = "p_Their" +/// hers, his, theirs, its "%PRONOUN_theirs" = "p_theirs" +/// Hers, His, Theirs, Its "%PRONOUN_Theirs" = "p_Theirs" +/// her, him, them, it "%PRONOUN_them" = "p_them" +/// Her, Him, Them, It "%PRONOUN_Them" = "p_Them" +/// has, have "%PRONOUN_have" = "p_have" +/// is, are "%PRONOUN_are" = "p_are" +/// was, were "%PRONOUN_were" = "p_were" +/// does, do "%PRONOUN_do" = "p_do" +/// she has, he has, they have, it has "%PRONOUN_theyve" = "p_theyve" +/// She has, He has, They have, It has "%PRONOUN_Theyve" = "p_Theyve" +/// she is, he is, they are, it is "%PRONOUN_theyre" = "p_theyre" +/// She is, He is, They are, It is "%PRONOUN_Theyre" = "p_Theyre" +/// s, null (she looks, they look) "%PRONOUN_s" = "p_s" +/// es, null (she goes, they go) "%PRONOUN_es" = "p_es" + +/// A list for all the pronoun procs, if you need to iterate or search through it or something. +#define ALL_PRONOUNS list( \ + "%PRONOUN_they" = TYPE_PROC_REF(/datum, p_they), \ + "%PRONOUN_They" = TYPE_PROC_REF(/datum, p_They), \ + "%PRONOUN_their" = TYPE_PROC_REF(/datum, p_their), \ + "%PRONOUN_Their" = TYPE_PROC_REF(/datum, p_Their), \ + "%PRONOUN_theirs" = TYPE_PROC_REF(/datum, p_theirs), \ + "%PRONOUN_Theirs" = TYPE_PROC_REF(/datum, p_Theirs), \ + "%PRONOUN_them" = TYPE_PROC_REF(/datum, p_them), \ + "%PRONOUN_Them" = TYPE_PROC_REF(/datum, p_Them), \ + "%PRONOUN_have" = TYPE_PROC_REF(/datum, p_have), \ + "%PRONOUN_are" = TYPE_PROC_REF(/datum, p_are), \ + "%PRONOUN_were" = TYPE_PROC_REF(/datum, p_were), \ + "%PRONOUN_do" = TYPE_PROC_REF(/datum, p_do), \ + "%PRONOUN_theyve" = TYPE_PROC_REF(/datum, p_theyve), \ + "%PRONOUN_Theyve" = TYPE_PROC_REF(/datum, p_Theyve), \ + "%PRONOUN_theyre" = TYPE_PROC_REF(/datum, p_theyre), \ + "%PRONOUN_Theyre" = TYPE_PROC_REF(/datum, p_Theyre), \ + "%PRONOUN_s" = TYPE_PROC_REF(/datum, p_s), \ + "%PRONOUN_es" = TYPE_PROC_REF(/datum, p_es) \ +) diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index a24a929391f..3f84955fe98 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -2,7 +2,7 @@ #define CHANNEL_LOBBYMUSIC 1024 #define CHANNEL_ADMIN 1023 #define CHANNEL_VOX 1022 -#define CHANNEL_JUKEBOX 1011 // SKYRAT EDIT - JUKEBOX - ORIGINAL: #define CHANNEL_JUKEBOX 1021 +#define CHANNEL_JUKEBOX 1021 #define CHANNEL_HEARTBEAT 1020 //sound channel for heartbeats #define CHANNEL_BOSS_MUSIC 1019 #define CHANNEL_AMBIENCE 1018 @@ -10,6 +10,11 @@ #define CHANNEL_TRAITOR 1016 #define CHANNEL_CHARGED_SPELL 1015 #define CHANNEL_ELEVATOR 1014 +//THIS SHOULD ALWAYS BE THE LOWEST ONE! +//KEEP IT UPDATED +#define CHANNEL_HIGHEST_AVAILABLE 1013 + +#define MAX_INSTRUMENT_CHANNELS (128 * 6) // SKYRAT EDIT START - JUKEBOX #define CHANNEL_JUKEBOX_START 1006 @@ -28,13 +33,6 @@ ///The default exponent of sound falloff #define SOUND_FALLOFF_EXPONENT 6 -//THIS SHOULD ALWAYS BE THE LOWEST ONE! -//KEEP IT UPDATED - -#define CHANNEL_HIGHEST_AVAILABLE 1005 //SKYRAT EDIT CHANGE - JUKEBOX > ORIGINAL VALUE 1015 - -#define MAX_INSTRUMENT_CHANNELS (128 * 6) - #define SOUND_MINIMUM_PRESSURE 10 #define INTERACTION_SOUND_RANGE_MODIFIER -3 diff --git a/code/__DEFINES/tools.dm b/code/__DEFINES/tools.dm index 99230559f7e..132ae196239 100644 --- a/code/__DEFINES/tools.dm +++ b/code/__DEFINES/tools.dm @@ -2,7 +2,7 @@ #define TOOL_CROWBAR "crowbar" #define TOOL_MULTITOOL "multitool" #define TOOL_SCREWDRIVER "screwdriver" -#define TOOL_WIRECUTTER "wirecutter" +#define TOOL_WIRECUTTER "cutters" #define TOOL_WRENCH "wrench" #define TOOL_WELDER "welder" #define TOOL_ANALYZER "analyzer" diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 6a83f33083a..f2cb9069fb6 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -520,6 +520,15 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Prevents you from twohanding weapons. #define TRAIT_NO_TWOHANDING "no_twohanding" +/// Improves boxing damage against boxers and athletics experience gain +#define TRAIT_STRENGTH "strength" + +/// Increases the duration of having exercised +#define TRAIT_STIMMED "stimmed" + +/// Indicates that the target is able to be boxed at a boxer's full power. +#define TRAIT_BOXING_READY "boxing_ready" + /// Halves the time of tying a tie. #define TRAIT_FAST_TYING "fast_tying" diff --git a/code/__DEFINES/traits/sources.dm b/code/__DEFINES/traits/sources.dm index 56bcbf3c90d..278510bd23f 100644 --- a/code/__DEFINES/traits/sources.dm +++ b/code/__DEFINES/traits/sources.dm @@ -137,6 +137,7 @@ #define LOCKED_HELMET_TRAIT "locked-helmet" #define NINJA_SUIT_TRAIT "ninja-suit" #define SLEEPING_CARP_TRAIT "sleeping_carp" +#define BOXING_TRAIT "boxing" #define TIMESTOP_TRAIT "timestop" #define LIFECANDLE_TRAIT "lifecandle" #define VENTCRAWLING_TRAIT "ventcrawling" diff --git a/code/__HELPERS/construction.dm b/code/__HELPERS/construction.dm index f7b0ece13f8..cf38f690c26 100644 --- a/code/__HELPERS/construction.dm +++ b/code/__HELPERS/construction.dm @@ -2,7 +2,7 @@ #define OPTIMAL_COST(cost)(max(1, round(cost))) /// Wrapper for fetching material references. Exists exclusively so that people don't need to wrap everything in a list every time. -#define GET_MATERIAL_REF(arguments...) SSmaterials._GetMaterialRef(list(##arguments)) +#define GET_MATERIAL_REF(arguments...) DSmaterials._GetMaterialRef(list(##arguments)) // Wrapper to convert material name into its source name #define MATERIAL_SOURCE(mat) "[mat.name]_material" diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index d16b91ee4c8..30626bc0a55 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -165,8 +165,8 @@ GLOB.crafting_recipes += recipe var/list/material_stack_recipes = list( - SSmaterials.base_stack_recipes, - SSmaterials.rigid_stack_recipes, + DSmaterials.base_stack_recipes, + DSmaterials.rigid_stack_recipes, ) for(var/list/recipe_list in material_stack_recipes) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 1b93f024285..a6b23e08b49 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -251,23 +251,23 @@ GLOBAL_LIST_EMPTY(species_list) * * Checks that `user` does not move, change hands, get stunned, etc. for the * given `delay`. Returns `TRUE` on success or `FALSE` on failure. - * + * * @param {mob} user - The mob performing the action. - * + * * @param {number} delay - The time in deciseconds. Use the SECONDS define for readability. `1 SECONDS` is 10 deciseconds. - * + * * @param {atom} target - The target of the action. This is where the progressbar will display. - * + * * @param {flag} timed_action_flags - Flags to control the behavior of the timed action. - * + * * @param {boolean} progress - Whether to display a progress bar / cogbar. - * + * * @param {datum/callback} extra_checks - Additional checks to perform before the action is executed. - * + * * @param {string} interaction_key - The assoc key under which the do_after is capped, with max_interact_count being the cap. Interaction key will default to target if not set. - * + * * @param {number} max_interact_count - The maximum amount of interactions allowed. - * + * * @param {boolean} hidden - By default, any action 1 second or longer shows a cog over the user while it is in progress. If hidden is set to TRUE, the cog will not be shown. */ /proc/do_after(mob/user, delay, atom/target, timed_action_flags = NONE, progress = TRUE, datum/callback/extra_checks, interaction_key, max_interact_count = 1, hidden = FALSE) @@ -288,7 +288,7 @@ GLOBAL_LIST_EMPTY(species_list) var/atom/target_loc = target?.loc var/drifting = FALSE - if(SSmove_manager.processing_on(user, SSspacedrift)) + if(DSmove_manager.processing_on(user, SSspacedrift)) drifting = TRUE var/holding = user.get_active_held_item() @@ -317,7 +317,7 @@ GLOBAL_LIST_EMPTY(species_list) if(!QDELETED(progbar)) progbar.update(world.time - starttime) - if(drifting && !SSmove_manager.processing_on(user, SSspacedrift)) + if(drifting && !DSmove_manager.processing_on(user, SSspacedrift)) drifting = FALSE user_loc = user.loc @@ -337,7 +337,7 @@ GLOBAL_LIST_EMPTY(species_list) if(!QDELETED(progbar)) progbar.end_progress() - + cog?.remove() if(interaction_key) diff --git a/code/__HELPERS/priority_announce.dm b/code/__HELPERS/priority_announce.dm index d675b252796..380a8707fbe 100644 --- a/code/__HELPERS/priority_announce.dm +++ b/code/__HELPERS/priority_announce.dm @@ -107,7 +107,7 @@ message.title = title message.content = text - SScommunications.send_message(message) + DScommunications.send_message(message) /** * Sends a minor annoucement to players. diff --git a/code/__HELPERS/pronouns.dm b/code/__HELPERS/pronouns.dm index df84c1cdcf4..fe2357d6ce4 100644 --- a/code/__HELPERS/pronouns.dm +++ b/code/__HELPERS/pronouns.dm @@ -1,5 +1,8 @@ +#define GET_TARGET_PRONOUN(target, pronoun, gender) call(target, ALL_PRONOUNS[pronoun])(gender) + //pronoun procs, for getting pronouns without using the text macros that only work in certain positions //datums don't have gender, but most of their subtypes do! + /datum/proc/p_they(temp_gender) return "it" @@ -69,6 +72,26 @@ else return "s" +/// A proc to replace pronouns in a string with the appropriate pronouns for a target atom. +/// Uses associative list access from a __DEFINE list, since associative access is slightly +/// faster +/datum/proc/REPLACE_PRONOUNS(target_string, atom/targeted_atom, targeted_gender = null) + /// If someone specifies targeted_gender we choose that, + /// otherwise we go off the gender of our object + var/gender + if(targeted_gender) + if(!istext(targeted_gender) || !(targeted_gender in list(MALE, FEMALE, PLURAL, NEUTER))) + stack_trace("REPLACE_PRONOUNS called with improper parameters.") + return + gender = targeted_gender + else + gender = targeted_atom.gender + var/regex/pronoun_regex = regex("%PRONOUN(_(they|They|their|Their|theirs|Theirs|them|Them|have|are|were|do|theyve|Theyve|theyre|Theyre|s|es))") + while(pronoun_regex.Find(target_string)) + target_string = pronoun_regex.Replace(target_string, GET_TARGET_PRONOUN(targeted_atom, pronoun_regex.match, gender)) + return target_string + + //like clients, which do have gender. /client/p_they(temp_gender) if(!temp_gender) diff --git a/code/__HELPERS/view.dm b/code/__HELPERS/view.dm index dc25dcc0249..30e8bc8f9f9 100644 --- a/code/__HELPERS/view.dm +++ b/code/__HELPERS/view.dm @@ -20,8 +20,23 @@ view_info[2] *= world.icon_size return view_info -/proc/in_view_range(mob/user, atom/A) - var/list/view_range = getviewsize(user.client.view) - var/turf/source = get_turf(user) - var/turf/target = get_turf(A) - return ISINRANGE(target.x, source.x - view_range[1], source.x + view_range[1]) && ISINRANGE(target.y, source.y - view_range[1], source.y + view_range[1]) +/** +* Frustrated with bugs in can_see(), this instead uses viewers for a much more effective approach. +* ### Things to note: +* - Src/source must be a mob. `viewers()` returns mobs. +* - Adjacent objects are always considered visible. +*/ + +/// The default tile-distance between two atoms for one to consider the other as visible. +#define DEFAULT_SIGHT_DISTANCE 7 + +/// Basic check to see if the src object can see the target object. +#define CAN_I_SEE(target) ((src in viewers(DEFAULT_SIGHT_DISTANCE, target)) || in_range(target, src)) + + +/// Checks the visibility between two other objects. +#define CAN_THEY_SEE(target, source) ((source in viewers(DEFAULT_SIGHT_DISTANCE, target)) || in_range(target, source)) + + +/// Further checks distance between source and target. +#define CAN_SEE_RANGED(target, source, dist) ((source in viewers(dist, target)) || in_range(target, source)) diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index e0f07ab2835..d298d24e3a0 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -343,6 +343,19 @@ DEFINE_BITFIELD(vis_flags, list( "VIS_UNDERLAY" = VIS_UNDERLAY, )) +// I am so sorry. Required because vis_flags is both undefinable and unreadable on mutable_appearance +// But we need to display them anyway. See /mutable_appearance/appearance_mirror +DEFINE_BITFIELD(_vis_flags, list( + "VIS_HIDE" = VIS_HIDE, + "VIS_INHERIT_DIR" = VIS_INHERIT_DIR, + "VIS_INHERIT_ICON" = VIS_INHERIT_ICON, + "VIS_INHERIT_ICON_STATE" = VIS_INHERIT_ICON_STATE, + "VIS_INHERIT_ID" = VIS_INHERIT_ID, + "VIS_INHERIT_LAYER" = VIS_INHERIT_LAYER, + "VIS_INHERIT_PLANE" = VIS_INHERIT_PLANE, + "VIS_UNDERLAY" = VIS_UNDERLAY, +)) + DEFINE_BITFIELD(zap_flags, list( "ZAP_ALLOW_DUPLICATES" = ZAP_ALLOW_DUPLICATES, "ZAP_MACHINE_EXPLOSIVE" = ZAP_MACHINE_EXPLOSIVE, diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index f67ed4f6d07..9e3c2ed7ee0 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -498,6 +498,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_XRAY_VISION" = TRAIT_XRAY_VISION, "TRAIT_DISCO_DANCER" = TRAIT_DISCO_DANCER, "TRAIT_MAFIAINITIATE" = TRAIT_MAFIAINITIATE, + "TRAIT_STRENGTH" = TRAIT_STRENGTH, + "TRAIT_STIMMED" = TRAIT_STIMMED, + "TRAIT_BOXING_READY" = TRAIT_BOXING_READY, ), /obj/item = list( "TRAIT_APC_SHOCKING" = TRAIT_APC_SHOCKING, diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 0a6e54a46e0..ae5cc36b8ad 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -55,7 +55,7 @@ ShiftClickOn(A) return if(LAZYACCESS(modifiers, ALT_CLICK)) // alt and alt-gr (rightalt) - A.ai_click_alt(src) + ai_base_click_alt(A) return if(LAZYACCESS(modifiers, CTRL_CLICK)) CtrlClickOn(A) @@ -121,6 +121,24 @@ target.AICtrlClick(src) +/// Reimplementation of base_click_alt for AI +/mob/living/silicon/ai/proc/ai_base_click_alt(atom/target) + // If for some reason we can't alt click + if(SEND_SIGNAL(src, COMSIG_MOB_ALTCLICKON, target) & COMSIG_MOB_CANCEL_CLICKON) + return + + if(!isturf(target) && can_perform_action(target, (target.interaction_flags_click | SILENT_ADJACENCY))) + // Signal intercept + if(SEND_SIGNAL(target, COMSIG_CLICK_ALT, src) & CLICK_ACTION_ANY) + return + + // AI alt click interaction succeeds + if(target.ai_click_alt(src) & CLICK_ACTION_ANY) + return + + client.loot_panel.open(get_turf(target)) + + /* The following criminally helpful code is just the previous code cleaned up; I have no idea why it was in atoms.dm instead of respective files. @@ -132,6 +150,7 @@ return /atom/proc/ai_click_alt(mob/living/silicon/ai/user) + SHOULD_CALL_PARENT(FALSE) return /atom/proc/AIShiftClick(mob/living/silicon/ai/user) @@ -149,12 +168,13 @@ /obj/machinery/door/airlock/ai_click_alt(mob/living/silicon/ai/user) if(obj_flags & EMAGGED) - return + return NONE if(!secondsElectrified) shock_perm(user) else shock_restore(user) + return CLICK_ACTION_SUCCESS /obj/machinery/door/airlock/AIShiftClick(mob/living/silicon/ai/user) // Opens and closes doors! if(obj_flags & EMAGGED) @@ -218,10 +238,10 @@ /// Toggle APC equipment settings /obj/machinery/power/apc/ai_click_alt(mob/living/silicon/ai/user) if(!can_use(user, loud = TRUE)) - return + return NONE if(!is_operational || failure_timer) - return + return CLICK_ACTION_BLOCKING equipment = equipment ? APC_CHANNEL_OFF : APC_CHANNEL_ON if (user) @@ -231,6 +251,7 @@ user.log_message("turned [enabled_or_disabled] the [src] equipment settings", LOG_GAME) update_appearance() update() + return CLICK_ACTION_SUCCESS /obj/machinery/power/apc/attack_ai_secondary(mob/living/silicon/user, list/modifiers) if(!can_use(user, loud = TRUE)) @@ -242,8 +263,9 @@ /* AI Turrets */ /obj/machinery/turretid/ai_click_alt(mob/living/silicon/ai/user) //toggles lethal on turrets if(ailock) - return + return CLICK_ACTION_BLOCKING toggle_lethal(user) + return CLICK_ACTION_SUCCESS /obj/machinery/turretid/AICtrlClick(mob/living/silicon/ai/user) //turns off/on Turrets if(ailock) @@ -256,6 +278,7 @@ balloon_alert(user, "disrupted all active calls") add_hiddenprint(user) hangup_all_calls() + return CLICK_ACTION_SUCCESS // // Override TurfAdjacent for AltClicking diff --git a/code/_onclick/click_alt.dm b/code/_onclick/click_alt.dm index 16c8e843995..11419a60816 100644 --- a/code/_onclick/click_alt.dm +++ b/code/_onclick/click_alt.dm @@ -6,32 +6,36 @@ /mob/proc/base_click_alt(atom/target) SHOULD_NOT_OVERRIDE(TRUE) - var/turf/tile = isturf(target) ? target : get_turf(target) - - if(isobserver(src) || isrevenant(src)) - open_lootpanel(tile) + // Check if they've hooked in to prevent src from alt clicking anything + if(SEND_SIGNAL(src, COMSIG_MOB_ALTCLICKON, target) & COMSIG_MOB_CANCEL_CLICKON) return + // Is it visible (and we're not wearing it (our clothes are invisible))? + if(!(src in viewers(7, target)) && !CanReach(target)) + return + + var/turf/tile = get_turf(target) + + // Ghosties just see loot + if(isobserver(src) || isrevenant(src)) + client.loot_panel.open(tile) + return + + // Turfs don't have a click_alt currently, so this saves some time. if(!isturf(target) && can_perform_action(target, (target.interaction_flags_click | SILENT_ADJACENCY))) + // If it has a signal handler that returns a click action, done. if(SEND_SIGNAL(target, COMSIG_CLICK_ALT, src) & CLICK_ACTION_ANY) return + // If it has a custom click_alt that returns success/block, done. if(target.click_alt(src) & CLICK_ACTION_ANY) return - open_lootpanel(tile) - - -/// Helper for opening the lootpanel -/mob/proc/open_lootpanel(turf/target) + // No alt clicking to view turf from beneath if(HAS_TRAIT(src, TRAIT_MOVE_VENTCRAWLING)) return - var/datum/lootpanel/panel = client?.loot_panel - if(isnull(panel)) - return - - panel.open(target) + client.loot_panel.open(tile) /** diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index a1ca5ebf85a..d5ba848fc8d 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -387,7 +387,7 @@ glasses.add_mob_blood(src) update_worn_glasses() - if(!attacking_item.get_sharpness() && !HAS_TRAIT(src, TRAIT_HEAD_INJURY_BLOCKED)) + if(!attacking_item.get_sharpness() && !HAS_TRAIT(src, TRAIT_HEAD_INJURY_BLOCKED) && attacking_item.damtype == BRUTE) if(prob(damage_done)) adjustOrganLoss(ORGAN_SLOT_BRAIN, 20) if(stat == CONSCIOUS) @@ -417,7 +417,7 @@ w_uniform.add_mob_blood(src) update_worn_undersuit() - if(stat == CONSCIOUS && !attacking_item.get_sharpness() && !HAS_TRAIT(src, TRAIT_BRAWLING_KNOCKDOWN_BLOCKED)) + if(stat == CONSCIOUS && !attacking_item.get_sharpness() && !HAS_TRAIT(src, TRAIT_BRAWLING_KNOCKDOWN_BLOCKED) && attacking_item.damtype == BRUTE) if(prob(damage_done)) visible_message( span_danger("[src] is knocked down!"), diff --git a/code/controllers/master.dm b/code/controllers/master.dm index d7996890f98..5686de234bf 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -138,7 +138,7 @@ GLOBAL_REAL(Master, /datum/controller/master) ss.Shutdown() log_world("Shutdown complete") -ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "View the current states of the Subsystem Controllers.", ADMIN_CATEGORY_SERVER) +ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "View the current states of the Subsystem Controllers.", ADMIN_CATEGORY_DEBUG) Master.ui_interact(user.mob) /datum/controller/master/ui_status(mob/user, datum/ui_state/state) diff --git a/code/controllers/subsystem/dynamic/dynamic.dm b/code/controllers/subsystem/dynamic/dynamic.dm index 29451ea10ed..736b55d7c99 100644 --- a/code/controllers/subsystem/dynamic/dynamic.dm +++ b/code/controllers/subsystem/dynamic/dynamic.dm @@ -317,7 +317,7 @@ SUBSYSTEM_DEF(dynamic) SSticker.news_report = SSshuttle.emergency?.is_hijacked() ? SHUTTLE_HIJACK : STATION_EVACUATED /datum/controller/subsystem/dynamic/proc/send_intercept() - if(SScommunications.block_command_report) //If we don't want the report to be printed just yet, we put it off until it's ready + if(DScommunications.block_command_report) //If we don't want the report to be printed just yet, we put it off until it's ready addtimer(CALLBACK(src, PROC_REF(send_intercept)), 10 SECONDS) return @@ -349,10 +349,10 @@ SUBSYSTEM_DEF(dynamic) if(trait_list_strings.len > 0) . += "
Identified shift divergencies:
" + trait_list_strings.Join() - if(length(SScommunications.command_report_footnotes)) + if(length(DScommunications.command_report_footnotes)) var/footnote_pile = "" - for(var/datum/command_footnote/footnote in SScommunications.command_report_footnotes) + for(var/datum/command_footnote/footnote in DScommunications.command_report_footnotes) footnote_pile += "[footnote.message]
" footnote_pile += "[footnote.signature]
" footnote_pile += "
" diff --git a/code/controllers/subsystem/movement/cliff_falling.dm b/code/controllers/subsystem/movement/cliff_falling.dm index 80e2f236eb7..65089f0ea1b 100644 --- a/code/controllers/subsystem/movement/cliff_falling.dm +++ b/code/controllers/subsystem/movement/cliff_falling.dm @@ -10,7 +10,7 @@ MOVEMENT_SUBSYSTEM_DEF(cliff_falling) /datum/controller/subsystem/movement/cliff_falling/proc/start_falling(atom/movable/faller, turf/open/cliff/cliff) // Make them move - var/mover = SSmove_manager.move(moving = faller, direction = cliff.fall_direction, delay = cliff.fall_speed, subsystem = src, priority = MOVEMENT_ABOVE_SPACE_PRIORITY, flags = MOVEMENT_LOOP_OUTSIDE_CONTROL | MOVEMENT_LOOP_NO_DIR_UPDATE) + var/mover = DSmove_manager.move(moving = faller, direction = cliff.fall_direction, delay = cliff.fall_speed, subsystem = src, priority = MOVEMENT_ABOVE_SPACE_PRIORITY, flags = MOVEMENT_LOOP_OUTSIDE_CONTROL | MOVEMENT_LOOP_NO_DIR_UPDATE) cliff_grinders[faller] = mover diff --git a/code/controllers/subsystem/movement/movement_types.dm b/code/controllers/subsystem/movement/movement_types.dm index ebb12c84e4b..3567e881b14 100644 --- a/code/controllers/subsystem/movement/movement_types.dm +++ b/code/controllers/subsystem/movement/movement_types.dm @@ -162,7 +162,7 @@ status &= ~MOVELOOP_STATUS_PAUSED ///Removes the atom from some movement subsystem. Defaults to SSmovement -/datum/controller/subsystem/move_manager/proc/stop_looping(atom/movable/moving, datum/controller/subsystem/movement/subsystem = SSmovement) +/datum/system/move_manager/proc/stop_looping(atom/movable/moving, datum/controller/subsystem/movement/subsystem = SSmovement) var/datum/movement_packet/our_info = moving.move_packet if(!our_info) return FALSE @@ -183,7 +183,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/controller/subsystem/move_manager/proc/move(moving, direction, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/system/move_manager/proc/move(moving, direction, delay, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/move, priority, flags, extra_info, delay, timeout, direction) ///Replacement for walk() @@ -224,7 +224,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/controller/subsystem/move_manager/proc/force_move_dir(moving, direction, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/system/move_manager/proc/force_move_dir(moving, direction, delay, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/move/force, priority, flags, extra_info, delay, timeout, direction) /datum/move_loop/move/force @@ -281,7 +281,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/controller/subsystem/move_manager/proc/force_move(moving, chasing, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/system/move_manager/proc/force_move(moving, chasing, delay, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/has_target/force_move, priority, flags, extra_info, delay, timeout, chasing) ///Used for force-move loops @@ -315,7 +315,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/controller/subsystem/move_manager/proc/jps_move(moving, +/datum/system/move_manager/proc/jps_move(moving, chasing, delay, timeout, @@ -493,7 +493,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/controller/subsystem/move_manager/proc/move_to(moving, chasing, min_dist, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/system/move_manager/proc/move_to(moving, chasing, min_dist, delay, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/has_target/dist_bound/move_to, priority, flags, extra_info, delay, timeout, chasing, min_dist) ///Wrapper around walk_to() @@ -527,7 +527,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/controller/subsystem/move_manager/proc/move_away(moving, chasing, max_dist, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/system/move_manager/proc/move_away(moving, chasing, max_dist, delay, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/has_target/dist_bound/move_away, priority, flags, extra_info, delay, timeout, chasing, max_dist) ///Wrapper around walk_away() @@ -562,7 +562,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/controller/subsystem/move_manager/proc/move_towards(moving, chasing, delay, home, timeout, subsystem, priority, flags, datum/extra_info) +/datum/system/move_manager/proc/move_towards(moving, chasing, delay, home, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/has_target/move_towards, priority, flags, extra_info, delay, timeout, chasing, home) /** @@ -581,7 +581,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/controller/subsystem/move_manager/proc/home_onto(moving, chasing, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/system/move_manager/proc/home_onto(moving, chasing, delay, timeout, subsystem, priority, flags, datum/extra_info) return move_towards(moving, chasing, delay, TRUE, timeout, subsystem, priority, flags, extra_info) ///Used as a alternative to walk_towards @@ -717,7 +717,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/controller/subsystem/move_manager/proc/move_towards_legacy(moving, chasing, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/system/move_manager/proc/move_towards_legacy(moving, chasing, delay, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/has_target/move_towards_budget, priority, flags, extra_info, delay, timeout, chasing) ///The actual implementation of walk_towards() @@ -743,7 +743,7 @@ * priority - Defines how different move loops override each other. Lower numbers beat higher numbers, equal defaults to what currently exists. Defaults to MOVEMENT_DEFAULT_PRIORITY * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm */ -/datum/controller/subsystem/move_manager/proc/freeze(moving, halted_turf, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/system/move_manager/proc/freeze(moving, halted_turf, delay, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/freeze, priority, flags, extra_info, delay, timeout, halted_turf) /// As close as you can get to a "do-nothing" move loop, the pure intention of this is to absolutely resist all and any automated movement until the move loop times out. @@ -767,7 +767,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/controller/subsystem/move_manager/proc/move_rand(moving, directions, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/system/move_manager/proc/move_rand(moving, directions, delay, timeout, subsystem, priority, flags, datum/extra_info) if(!directions) directions = GLOB.alldirs return add_to_loop(moving, subsystem, /datum/move_loop/move_rand, priority, flags, extra_info, delay, timeout, directions) @@ -819,7 +819,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/controller/subsystem/move_manager/proc/move_to_rand(moving, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/system/move_manager/proc/move_to_rand(moving, delay, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/move_to_rand, priority, flags, extra_info, delay, timeout) ///Wrapper around step_rand @@ -845,7 +845,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/controller/subsystem/move_manager/proc/move_disposals(moving, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/system/move_manager/proc/move_disposals(moving, delay, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/disposal_holder, priority, flags, extra_info, delay, timeout) /// Disposal holders need to move through a chain of pipes diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm index 7b1394ada16..a35798ce627 100644 --- a/code/controllers/subsystem/statpanel.dm +++ b/code/controllers/subsystem/statpanel.dm @@ -190,6 +190,7 @@ SUBSYSTEM_DEF(statpanels) list("World Time:", "[world.time]"), list("Globals:", GLOB.stat_entry(), text_ref(GLOB)), list("[config]:", config.stat_entry(), text_ref(config)), + list("Datasystem Manager:", "Edit", text_ref(SysMgr)), list("Byond:", "(FPS:[world.fps]) (TickCount:[world.time/world.tick_lag]) (TickDrift:[round(Master.tickdrift,1)]([round((Master.tickdrift/(world.time/world.tick_lag))*100,0.1)]%)) (Internal Tick Usage: [round(MAPTICK_LAST_INTERNAL_TICK_USAGE,0.1)]%)"), list("Master Controller:", Master.stat_entry(), text_ref(Master)), list("Failsafe Controller:", Failsafe.stat_entry(), text_ref(Failsafe)), diff --git a/code/datums/actions/mobs/charge.dm b/code/datums/actions/mobs/charge.dm index 3cca055a541..07c6330c71a 100644 --- a/code/datums/actions/mobs/charge.dm +++ b/code/datums/actions/mobs/charge.dm @@ -44,7 +44,7 @@ if(charger in charging) // Stop any existing charging, this'll clean things up properly - SSmove_manager.stop_looping(charger) + DSmove_manager.stop_looping(charger) charging += charger actively_moving = FALSE @@ -60,7 +60,7 @@ var/time_to_hit = min(get_dist(charger, target), charge_distance) * charge_speed - var/datum/move_loop/new_loop = SSmove_manager.home_onto(charger, target, delay = charge_speed, timeout = time_to_hit, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/new_loop = DSmove_manager.home_onto(charger, target, delay = charge_speed, timeout = time_to_hit, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) if(!new_loop) return RegisterSignal(new_loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(pre_move), override = TRUE) @@ -96,7 +96,7 @@ /datum/action/cooldown/mob_cooldown/charge/update_status_on_signal(mob/source, new_stat, old_stat) . = ..() if(new_stat == DEAD) - SSmove_manager.stop_looping(source) //This will cause the loop to qdel, triggering an end to our charging + DSmove_manager.stop_looping(source) //This will cause the loop to qdel, triggering an end to our charging /datum/action/cooldown/mob_cooldown/charge/proc/do_charge_indicator(atom/charger, atom/charge_target) var/turf/target_turf = get_turf(charge_target) diff --git a/code/datums/actions/mobs/charge_apc.dm b/code/datums/actions/mobs/charge_apc.dm index 47436beab76..8086ba72207 100644 --- a/code/datums/actions/mobs/charge_apc.dm +++ b/code/datums/actions/mobs/charge_apc.dm @@ -1,5 +1,5 @@ ///how much charge are we giving off to an APC? -#define CHARGE_AMOUNT (80 KILO JOULES) +#define CHARGE_AMOUNT (0.08 * STANDARD_CELL_CHARGE) /datum/action/cooldown/mob_cooldown/charge_apc name = "Charge APCs" diff --git a/code/datums/ai/_ai_behavior.dm b/code/datums/ai/_ai_behavior.dm index 233b57b1577..eb8f7370dc2 100644 --- a/code/datums/ai/_ai_behavior.dm +++ b/code/datums/ai/_ai_behavior.dm @@ -19,8 +19,8 @@ return TRUE ///Called by the AI controller when this action is performed +///Returns a set of flags defined in [code/__DEFINES/ai/ai.dm] /datum/ai_behavior/proc/perform(seconds_per_tick, datum/ai_controller/controller, ...) - controller.behavior_cooldowns[src] = world.time + get_cooldown(controller) return ///Called when the action is finished. This needs the same args as perform besides the default ones diff --git a/code/datums/ai/_ai_controller.dm b/code/datums/ai/_ai_controller.dm index 806009398ee..c5717ceb044 100644 --- a/code/datums/ai/_ai_controller.dm +++ b/code/datums/ai/_ai_controller.dm @@ -279,7 +279,7 @@ multiple modular subtrees with behaviors /datum/ai_controller/process(seconds_per_tick) if(!able_to_run()) - SSmove_manager.stop_looping(pawn) //stop moving + DSmove_manager.stop_looping(pawn) //stop moving return //this should remove them from processing in the future through event-based stuff. if(!LAZYLEN(current_behaviors) && idle_behavior) @@ -359,14 +359,12 @@ multiple modular subtrees with behaviors break SEND_SIGNAL(src, COMSIG_AI_CONTROLLER_PICKED_BEHAVIORS, current_behaviors, planned_behaviors) - for(var/datum/ai_behavior/current_behavior as anything in current_behaviors) - if(LAZYACCESS(planned_behaviors, current_behavior)) - continue + for(var/datum/ai_behavior/forgotten_behavior as anything in current_behaviors - planned_behaviors) var/list/arguments = list(src, FALSE) var/list/stored_arguments = behavior_args[type] if(stored_arguments) arguments += stored_arguments - current_behavior.finish_action(arglist(arguments)) + forgotten_behavior.finish_action(arglist(arguments)) ///This proc handles changing ai status, and starts/stops processing if required. /datum/ai_controller/proc/set_ai_status(new_ai_status) @@ -381,10 +379,7 @@ multiple modular subtrees with behaviors switch(ai_status) if(AI_STATUS_ON) START_PROCESSING(SSai_behaviors, src) - if(AI_STATUS_OFF) - STOP_PROCESSING(SSai_behaviors, src) - CancelActions() - if(AI_STATUS_IDLE) + if(AI_STATUS_OFF, AI_STATUS_IDLE) STOP_PROCESSING(SSai_behaviors, src) CancelActions() @@ -392,7 +387,7 @@ multiple modular subtrees with behaviors paused_until = world.time + time /datum/ai_controller/proc/modify_cooldown(datum/ai_behavior/behavior, new_cooldown) - behavior_cooldowns[behavior.type] = new_cooldown + behavior_cooldowns[behavior] = new_cooldown ///Call this to add a behavior to the stack. /datum/ai_controller/proc/queue_behavior(behavior_type, ...) @@ -422,13 +417,23 @@ multiple modular subtrees with behaviors var/list/stored_arguments = behavior_args[behavior.type] if(stored_arguments) arguments += stored_arguments - behavior.perform(arglist(arguments)) + + var/process_flags = behavior.perform(arglist(arguments)) + if(process_flags & AI_BEHAVIOR_DELAY) + behavior_cooldowns[behavior] = world.time + behavior.get_cooldown(src) + if(process_flags & AI_BEHAVIOR_FAILED) + arguments[1] = src + arguments[2] = FALSE + behavior.finish_action(arglist(arguments)) + else if (process_flags & AI_BEHAVIOR_SUCCEEDED) + arguments[1] = src + arguments[2] = TRUE + behavior.finish_action(arglist(arguments)) /datum/ai_controller/proc/CancelActions() if(!LAZYLEN(current_behaviors)) return - for(var/i in current_behaviors) - var/datum/ai_behavior/current_behavior = i + for(var/datum/ai_behavior/current_behavior as anything in current_behaviors) var/list/arguments = list(src, FALSE) var/list/stored_arguments = behavior_args[current_behavior.type] if(stored_arguments) diff --git a/code/datums/ai/_item_behaviors.dm b/code/datums/ai/_item_behaviors.dm index 6cfb539f7a0..c9f3441fdd6 100644 --- a/code/datums/ai/_item_behaviors.dm +++ b/code/datums/ai/_item_behaviors.dm @@ -2,14 +2,14 @@ /datum/ai_behavior/item_escape_grasp /datum/ai_behavior/item_escape_grasp/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/obj/item/item_pawn = controller.pawn var/mob/item_holder = item_pawn.loc if(!istype(item_holder)) - finish_action(controller, FALSE) //We're no longer being held. abort abort!! + //We're no longer being held. abort abort!! + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED item_pawn.visible_message(span_warning("[item_pawn] slips out of the hands of [item_holder]!")) item_holder.dropItemToGround(item_pawn, TRUE) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED ///This behavior is for obj/items, it is used to move closer to a target and throw themselves towards them. @@ -30,7 +30,6 @@ set_movement_target(controller, target) /datum/ai_behavior/item_move_close_and_attack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, throw_count_key) - . = ..() var/obj/item/item_pawn = controller.pawn var/atom/throw_target = controller.blackboard[target_key] @@ -39,7 +38,8 @@ playsound(item_pawn.loc, attack_sound, 100, TRUE) controller.add_blackboard_key(throw_count_key, 1) if(controller.blackboard[throw_count_key] >= max_attempts) - finish_action(controller, TRUE, target_key, throw_count_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY /datum/ai_behavior/item_move_close_and_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, throw_count_key) . = ..() diff --git a/code/datums/ai/babies/babies_behaviors.dm b/code/datums/ai/babies/babies_behaviors.dm index 8cc03d72f6b..ad57d309a2c 100644 --- a/code/datums/ai/babies/babies_behaviors.dm +++ b/code/datums/ai/babies/babies_behaviors.dm @@ -8,7 +8,6 @@ var/max_children = 3 /datum/ai_behavior/find_partner/perform(seconds_per_tick, datum/ai_controller/controller, target_key, partner_types_key, child_types_key) - . = ..() max_children = controller.blackboard[BB_MAX_CHILDREN] || max_children var/mob/pawn_mob = controller.pawn var/list/partner_types = controller.blackboard[partner_types_key] @@ -18,12 +17,10 @@ var/children = 0 for(var/mob/living/other in oview(range, pawn_mob)) if(!pawn_mob.faction_check_atom(other)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(children >= max_children) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(other.stat != CONSCIOUS) //Check if it's conscious FIRST. continue @@ -40,10 +37,9 @@ if(other.gender != living_pawn.gender && !(other.flags_1 & HOLOGRAM_1)) //Better safe than sorry ;_; controller.set_blackboard_key(target_key, other) - finish_action(controller, TRUE) - - finish_action(controller, FALSE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /** * Reproduce. @@ -59,15 +55,13 @@ set_movement_target(controller, target) /datum/ai_behavior/make_babies/perform(seconds_per_tick, datum/ai_controller/controller, target_key, child_types_key) - . = ..() var/mob/target = controller.blackboard[target_key] if(QDELETED(target) || target.stat != CONSCIOUS) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/basic/living_pawn = controller.pawn living_pawn.set_combat_mode(FALSE) living_pawn.melee_attack(target) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/make_babies/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm index 144de535d5a..883c157a96b 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm @@ -21,17 +21,15 @@ if (isliving(controller.pawn)) var/mob/living/pawn = controller.pawn if (world.time < pawn.next_move) - return + return AI_BEHAVIOR_INSTANT - . = ..() var/mob/living/basic/basic_mob = controller.pawn //targeting strategy will kill the action if not real anymore var/atom/target = controller.blackboard[target_key] var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) if(!targeting_strategy.can_attack(basic_mob, target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/hiding_target = targeting_strategy.find_hidden_mobs(basic_mob, target) //If this is valid, theyre hidden in something! @@ -43,7 +41,8 @@ basic_mob.melee_attack(target) if(terminate_after_action) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY /datum/ai_behavior/basic_melee_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) . = ..() @@ -82,22 +81,21 @@ var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) if(!targeting_strategy.can_attack(basic_mob, target, chase_range)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED var/atom/hiding_target = targeting_strategy.find_hidden_mobs(basic_mob, target) //If this is valid, theyre hidden in something! var/atom/final_target = hiding_target ? hiding_target : target if(!can_see(basic_mob, final_target, required_distance)) - return + return AI_BEHAVIOR_INSTANT if(avoid_friendly_fire && check_friendly_in_path(basic_mob, target, targeting_strategy)) adjust_position(basic_mob, target) - return ..() + return AI_BEHAVIOR_DELAY controller.set_blackboard_key(hiding_location_key, hiding_target) basic_mob.RangedAttack(final_target) - return ..() //only start the cooldown when the shot is shot + return AI_BEHAVIOR_DELAY //only start the cooldown when the shot is shot /datum/ai_behavior/basic_ranged_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) . = ..() diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/befriend_target.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/befriend_target.dm index e1fd8bed640..865b028e156 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/befriend_target.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/befriend_target.dm @@ -2,19 +2,17 @@ /datum/ai_behavior/befriend_target /datum/ai_behavior/befriend_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key, befriend_message) - . = ..() var/mob/living/living_pawn = controller.pawn var/mob/living/living_target = controller.blackboard[target_key] if(QDELETED(living_target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED living_pawn.befriend(living_target) var/befriend_text = controller.blackboard[befriend_message] if(befriend_text) to_chat(living_target, span_nicegreen("[living_pawn] [befriend_text]")) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/befriend_target/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/climb_tree.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/climb_tree.dm index c8c18072a4a..5046baa7e0f 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/climb_tree.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/climb_tree.dm @@ -22,13 +22,12 @@ set_movement_target(controller, target) /datum/ai_behavior/climb_tree/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/obj/structure/flora/target_tree = controller.blackboard[target_key] var/mob/living/basic/living_pawn = controller.pawn if(QDELETED(living_pawn)) // pawn can be null at this point return SEND_SIGNAL(living_pawn, COMSIG_LIVING_CLIMB_TREE, target_tree) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/climb_tree/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/find_parent.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/find_parent.dm index 9e4ccef4936..07b4845f027 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/find_parent.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/find_parent.dm @@ -3,16 +3,13 @@ var/look_range = 7 /datum/ai_behavior/find_mom/perform(seconds_per_tick, datum/ai_controller/controller, mom_key, ignore_mom_key, found_mom) - . = ..() - var/mob/living_pawn = controller.pawn var/list/mom_types = controller.blackboard[mom_key] var/list/all_moms = list() var/list/ignore_types = controller.blackboard[ignore_mom_key] if(!length(mom_types)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED for(var/mob/mother in oview(look_range, living_pawn)) if(!is_type_in_list(mother, mom_types)) @@ -23,6 +20,5 @@ if(length(all_moms)) controller.set_blackboard_key(found_mom, pick(all_moms)) - finish_action(controller, TRUE) - return - finish_action(controller, FALSE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/pick_up_item.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/pick_up_item.dm index e81c9f95751..1b65eaa507c 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/pick_up_item.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/pick_up_item.dm @@ -11,16 +11,13 @@ return isitem(target) && isturf(target.loc) && !target.anchored /datum/ai_behavior/pick_up_item/perform(seconds_per_tick, datum/ai_controller/controller, target_key, storage_key) - . = ..() var/obj/item/target = controller.blackboard[target_key] if(QDELETED(target) || !isturf(target.loc)) // Someone picked it up or it got deleted - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(!controller.pawn.Adjacent(target)) // It teleported - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED pickup_item(controller, target, storage_key) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/pick_up_item/finish_action(datum/ai_controller/controller, success, target_key, storage_key) . = ..() diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/pull_target.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/pull_target.dm index 9bfc3f85d24..900b122dcb3 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/pull_target.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/pull_target.dm @@ -9,15 +9,12 @@ set_movement_target(controller, target) /datum/ai_behavior/pull_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - var/atom/movable/target = controller.blackboard[target_key] if(QDELETED(target) || target.anchored || target.pulledby) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/our_mob = controller.pawn our_mob.start_pulling(target) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/pull_target/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm index 172a31d4793..f23707e72b8 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm @@ -18,18 +18,16 @@ return ..() /datum/ai_behavior/run_away_from_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key, hiding_location_key) - . = ..() if (controller.blackboard[BB_BASIC_MOB_STOP_FLEEING]) - return + return AI_BEHAVIOR_DELAY var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key] if (QDELETED(target) || !can_see(controller.pawn, target, run_distance)) - finish_action(controller, succeeded = TRUE, target_key = target_key, hiding_location_key = hiding_location_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED if (get_dist(controller.pawn, controller.current_movement_target) > required_distance) - return // Still heading over + return AI_BEHAVIOR_DELAY // Still heading over if (plot_path_away_from(controller, target)) - return - finish_action(controller, succeeded = FALSE, target_key = target_key, hiding_location_key = hiding_location_key) + return AI_BEHAVIOR_DELAY + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /datum/ai_behavior/run_away_from_target/proc/plot_path_away_from(datum/ai_controller/controller, atom/target) var/turf/target_destination = get_turf(controller.pawn) @@ -71,7 +69,7 @@ /datum/ai_behavior/run_away_from_target/run_and_shoot/perform(seconds_per_tick, datum/ai_controller/controller, target_key, hiding_location_key) var/atom/target = controller.blackboard[target_key] if(QDELETED(target)) - finish_action(controller, succeeded = FALSE, target_key = target_key, hiding_location_key = hiding_location_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/living_pawn = controller.pawn living_pawn.RangedAttack(target) return ..() diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/set_travel_destination.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/set_travel_destination.dm index 207df442457..6bf6dbb7fdb 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/set_travel_destination.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/set_travel_destination.dm @@ -1,13 +1,10 @@ /datum/ai_behavior/set_travel_destination /datum/ai_behavior/set_travel_destination/perform(seconds_per_tick, datum/ai_controller/controller, target_key, location_key) - . = ..() var/atom/target = controller.blackboard[target_key] if(QDELETED(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(location_key, target) - - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/step_towards_turf.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/step_towards_turf.dm index f941b2eb95d..7cb3a7b9f14 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/step_towards_turf.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/step_towards_turf.dm @@ -47,8 +47,7 @@ // We actually only wanted the movement so if we've arrived we're done /datum/ai_behavior/step_towards_turf/perform(seconds_per_tick, datum/ai_controller/controller, area_key, turf_key) - . = ..() - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /** * # Step towards turf in area diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/stop_and_stare.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/stop_and_stare.dm index df066ac0418..4ce1f877b18 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/stop_and_stare.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/stop_and_stare.dm @@ -11,10 +11,9 @@ return cooldown_for.blackboard[BB_STATIONARY_COOLDOWN] /datum/ai_behavior/stop_and_stare/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/atom/movable/target = controller.blackboard[target_key] if(!ismovable(target) || !isturf(target.loc)) // just to make sure that nothing funky happened between setup and perform - return + return AI_BEHAVIOR_DELAY var/mob/pawn_mob = controller.pawn var/turf/pawn_turf = get_turf(pawn_mob) @@ -25,3 +24,4 @@ if(controller.blackboard[BB_STATIONARY_MOVE_TO_TARGET]) addtimer(CALLBACK(src, PROC_REF(set_movement_target), controller, target, initial(controller.ai_movement)), (controller.blackboard[BB_STATIONARY_SECONDS] + 1 SECONDS)) + return AI_BEHAVIOR_DELAY diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeted_mob_ability.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeted_mob_ability.dm index ba167b34f29..2d2ad013aa2 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeted_mob_ability.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeted_mob_ability.dm @@ -8,12 +8,13 @@ var/datum/action/cooldown/ability = get_ability_to_use(controller, ability_key) var/mob/living/target = controller.blackboard[target_key] if(QDELETED(ability) || QDELETED(target)) - finish_action(controller, FALSE, ability_key, target_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED var/mob/pawn = controller.pawn pawn.face_atom(target) var/result = ability.Trigger(target = target) - finish_action(controller, result, ability_key, target_key) + if(result) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED /datum/ai_behavior/targeted_mob_ability/finish_action(datum/ai_controller/controller, succeeded, ability_key, target_key) . = ..() diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm index b54bfe82f90..f0ee4bb9bba 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm @@ -26,8 +26,7 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/ var/atom/current_target = controller.blackboard[target_key] if (targeting_strategy.can_attack(living_mob, current_target, vision_range)) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/aggro_range = controller.blackboard[aggro_range_key] || vision_range @@ -45,8 +44,7 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/ if(!potential_targets.len) failed_to_find_anyone(controller, target_key, targeting_strategy_key, hiding_location_key) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/list/filtered_targets = list() @@ -57,8 +55,7 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/ if(!filtered_targets.len) failed_to_find_anyone(controller, target_key, targeting_strategy_key, hiding_location_key) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/atom/target = pick_final_target(controller, filtered_targets) controller.set_blackboard_key(target_key, target) @@ -68,7 +65,7 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/ if(potential_hiding_location) //If they're hiding inside of something, we need to know so we can go for that instead initially. controller.set_blackboard_key(hiding_location_key, potential_hiding_location) - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/find_potential_targets/proc/failed_to_find_anyone(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) var/aggro_range = controller.blackboard[aggro_range_key] || vision_range @@ -149,7 +146,7 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/ var/datum/proximity_monitor/field = controller.blackboard[BB_FIND_TARGETS_FIELD(type)] qdel(field) // autoclears so it's fine controller.CancelActions() // On retarget cancel any further queued actions so that they will setup again with new target - controller.modify_cooldown(controller, get_cooldown(controller)) + controller.modify_cooldown(src, get_cooldown(controller)) /// Returns the desired final target from the filtered list of targets /datum/ai_behavior/find_potential_targets/proc/pick_final_target(datum/ai_controller/controller, list/filtered_targets) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/tipped_reaction.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/tipped_reaction.dm index 643bb9ced5a..c734d961b5e 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/tipped_reaction.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/tipped_reaction.dm @@ -3,8 +3,6 @@ /datum/ai_behavior/tipped_reaction /datum/ai_behavior/tipped_reaction/perform(seconds_per_tick, datum/ai_controller/controller, tipper_key, reacting_key) - . = ..() - var/mob/living/carbon/tipper = controller.blackboard[tipper_key] // visible part of the visible message @@ -28,7 +26,7 @@ seen_message = "[controller.pawn] seems resigned to its fate." self_message = "You resign yourself to your fate." controller.pawn.visible_message(span_notice("[seen_message]"), span_notice("[self_message]")) - finish_action(controller, TRUE, tipper_key, reacting_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/tipped_reaction/finish_action(datum/ai_controller/controller, succeeded, tipper_key, reacting_key) . = ..() diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/travel_towards.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/travel_towards.dm index 6eb7c36dadd..808fe6b8873 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/travel_towards.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/travel_towards.dm @@ -19,8 +19,7 @@ set_movement_target(controller, target, new_movement_type) /datum/ai_behavior/travel_towards/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/travel_towards/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() @@ -48,5 +47,4 @@ set_movement_target(controller, target_atom) /datum/ai_behavior/travel_towards_atom/perform(seconds_per_tick, datum/ai_controller/controller, atom/target_atom) - . = ..() - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/unbuckle_mob.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/unbuckle_mob.dm index 655b335d3b6..34e651f8e52 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/unbuckle_mob.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/unbuckle_mob.dm @@ -1,14 +1,11 @@ /datum/ai_behavior/unbuckle_mob /datum/ai_behavior/unbuckle_mob/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() - var/mob/living/living_pawn = controller.pawn var/atom/movable/buckled_to = living_pawn.buckled if(isnull(buckled_to)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED buckled_to.unbuckle_mob(living_pawn) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm index 889b474ad03..aca89d83281 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm @@ -17,26 +17,23 @@ return istype(target) && isliving(controller.pawn) // only mobs can vent crawl in the current framework /datum/ai_behavior/crawl_through_vents/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/obj/machinery/atmospherics/components/unary/vent_pump/entry_vent = controller.blackboard[target_key] || controller.blackboard[BB_ENTRY_VENT_TARGET] var/mob/living/cached_pawn = controller.pawn if(HAS_TRAIT(cached_pawn, TRAIT_MOVE_VENTCRAWLING) || !controller.blackboard[BB_CURRENTLY_TARGETING_VENT] || !is_vent_valid(entry_vent)) - return + return AI_BEHAVIOR_DELAY if(!cached_pawn.can_enter_vent(entry_vent, provide_feedback = FALSE)) // we're an AI we scoff at feedback - finish_action(controller, FALSE, target_key) // "never enter a hole you can't get out of" - return + // "never enter a hole you can't get out of" + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/vent_we_exit_out_of = calculate_exit_vent(controller, target_key) if(isnull(vent_we_exit_out_of)) // don't get into the vents if we can't get out of them, that's SILLY. - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(BB_CURRENTLY_TARGETING_VENT, FALSE) // must be done here because we have a do_after sleep in handle_ventcrawl unfortunately and double dipping could lead to erroneous suicide pill calls. cached_pawn.handle_ventcrawl(entry_vent) if(!HAS_TRAIT(cached_pawn, TRAIT_MOVE_VENTCRAWLING)) //something failed and we ARE NOT IN THE VENT even though the earlier check said we were good to go! odd. - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(BB_EXIT_VENT_TARGET, vent_we_exit_out_of) @@ -50,7 +47,8 @@ var/upper_vent_time_limit = controller.blackboard[BB_UPPER_VENT_TIME_LIMIT] // the most amount of time we spend in the vents addtimer(CALLBACK(src, PROC_REF(exit_the_vents), controller), rand(lower_vent_time_limit, upper_vent_time_limit)) - controller.set_blackboard_key(BB_GIVE_UP_ON_VENT_PATHING_TIMER_ID, addtimer(CALLBACK(src, PROC_REF(suicide_pill), controller), controller.blackboard[BB_TIME_TO_GIVE_UP_ON_VENT_PATHING], TIMER_STOPPABLE)) + controller.set_blackboard_key(BB_GIVE_UP_ON_VENT_PATHING_TIMER_ID, addtimer(CALLBACK(src, PROC_REF(delayed_suicide_pill), controller, target_key), controller.blackboard[BB_TIME_TO_GIVE_UP_ON_VENT_PATHING], TIMER_STOPPABLE)) + return AI_BEHAVIOR_DELAY /// Figure out an exit vent that we should head towards. If we don't have one, default to the entry vent. If they're all kaput, we die. /datum/ai_behavior/crawl_through_vents/proc/calculate_exit_vent(datum/ai_controller/controller, target_key) @@ -83,8 +81,8 @@ var/mob/living/living_pawn = controller.pawn if(!HAS_TRAIT(living_pawn, TRAIT_MOVE_VENTCRAWLING) && isturf(get_turf(living_pawn))) // we're out of the vents, so no need to do an exit - finish_action(controller, TRUE, target_key) // assume that we got yeeted out somehow and call this so we can halt the suicide pill timer. - return + // assume that we got yeeted out somehow and return this so we can halt the suicide pill timer. + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED living_pawn.forceMove(exit_vent) if(!living_pawn.can_enter_vent(exit_vent, provide_feedback = FALSE)) @@ -92,8 +90,7 @@ emergency_vent = calculate_exit_vent(controller) if(isnull(emergency_vent)) // it's joever. we cooked too hard. - suicide_pill(controller, target_key) - return + return suicide_pill(controller) | AI_BEHAVIOR_DELAY controller.set_blackboard_key(BB_EXIT_VENT_TARGET, emergency_vent) // assign and go again addtimer(CALLBACK(src, PROC_REF(exit_the_vents), controller), (rand(controller.blackboard[BB_LOWER_VENT_TIME_LIMIT], controller.blackboard[BB_UPPER_VENT_TIME_LIMIT]) / 2)) // we're in danger mode, so scurry out at half the time it would normally take. @@ -102,32 +99,34 @@ living_pawn.handle_ventcrawl(exit_vent) if(HAS_TRAIT(living_pawn, TRAIT_MOVE_VENTCRAWLING)) // how'd we fail? what the fuck stack_trace("We failed to exit the vents, even though we should have been fine? This is very weird.") - suicide_pill() // all of the prior checks say we should have definitely made it through, but we didn't. dammit. - return + return suicide_pill(controller) | AI_BEHAVIOR_DELAY // all of the prior checks say we should have definitely made it through, but we didn't. dammit. - finish_action(controller, TRUE, target_key) // we did it! we went into the vents and out of the vents. poggers. + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED // we did it! we went into the vents and out of the vents. poggers. /// Incredibly stripped down version of the overarching `can_enter_vent` proc on `/mob, just meant for rapid rechecking of a vent. Will be TRUE if not blocked, FALSE otherwise. /datum/ai_behavior/crawl_through_vents/proc/is_vent_valid(obj/machinery/atmospherics/components/unary/vent_pump/checkable) return !QDELETED(checkable) && !checkable.welded +/// Wraps a delayed defeat, so we gotta handle the return value properly ya feel? +/datum/ai_behavior/crawl_through_vents/proc/delayed_suicide_pill(datum/ai_controller/controller, target_key) + if(suicide_pill(controller) & AI_BEHAVIOR_FAILED) + finish_action(controller, FALSE, target_key) + /// Aw fuck, we may have been bested somehow. Regardless of what we do, we can't exit through a vent! Let's end our misery and prevent useless endless calculations. -/datum/ai_behavior/crawl_through_vents/proc/suicide_pill(datum/ai_controller/controller, target_key) +/datum/ai_behavior/crawl_through_vents/proc/suicide_pill(datum/ai_controller/controller) var/mob/living/living_pawn = controller.pawn if(istype(living_pawn)) - finish_action(controller, FALSE, target_key) - if(isnull(living_pawn.client)) // only call death if we don't have a client because maybe their natural intelligence can pick up where our AI calculations have failed living_pawn.death(TRUE) // call gibbed as true because we are never coming back it is so fucking joever - return + return AI_BEHAVIOR_FAILED if(QDELETED(living_pawn)) // we got deleted by some other means, just presume the action is a wash and get outta here - return + return NONE qdel(living_pawn) // failover, we really should've been caught in the istype() but lets just bow out of existing at this point - + return NONE /datum/ai_behavior/crawl_through_vents/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/write_on_paper.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/write_on_paper.dm index f5dba58416d..51826676e9e 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/write_on_paper.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/write_on_paper.dm @@ -1,7 +1,6 @@ /datum/ai_behavior/write_on_paper /datum/ai_behavior/write_on_paper/perform(seconds_per_tick, datum/ai_controller/controller, found_paper, list_of_writings) - . = ..() var/mob/living/wizard = controller.pawn var/list/writing_list = controller.blackboard[list_of_writings] var/obj/item/paper/target = controller.blackboard[found_paper] @@ -9,7 +8,7 @@ target.add_raw_text(pick(writing_list)) target.update_appearance() wizard.dropItemToGround(target) - finish_action(controller, TRUE, found_paper) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/write_on_paper/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/datums/ai/basic_mobs/basic_subtrees/attack_adjacent_target.dm b/code/datums/ai/basic_mobs/basic_subtrees/attack_adjacent_target.dm index 41169004354..8effc7a0fa7 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/attack_adjacent_target.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/attack_adjacent_target.dm @@ -27,7 +27,6 @@ /datum/ai_behavior/basic_melee_attack/opportunistic/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) var/atom/movable/atom_pawn = controller.pawn if(!atom_pawn.CanReach(controller.blackboard[target_key])) - finish_action(controller, TRUE, target_key) // Don't clear target - return FALSE + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED . = ..() - finish_action(controller, TRUE, target_key) // Try doing something else + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm b/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm index 7059bec93fe..bc8efdeb4ff 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm @@ -27,13 +27,11 @@ var/can_attack_dense_objects = FALSE /datum/ai_behavior/attack_obstructions/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/mob/living/basic/basic_mob = controller.pawn var/atom/target = controller.blackboard[target_key] if (QDELETED(target)) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/turf/next_step = get_step_towards(basic_mob, target) var/dir_to_next_step = get_dir(basic_mob, next_step) @@ -48,8 +46,8 @@ for (var/direction in dirs_to_move) if (attack_in_direction(controller, basic_mob, direction)) - return - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/attack_obstructions/proc/attack_in_direction(datum/ai_controller/controller, mob/living/basic/basic_mob, direction) var/turf/next_step = get_step(basic_mob, direction) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/call_reinforcements.dm b/code/datums/ai/basic_mobs/basic_subtrees/call_reinforcements.dm index 59ff88b4879..44d7cb4fe48 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/call_reinforcements.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/call_reinforcements.dm @@ -36,8 +36,6 @@ var/reinforcements_range = 15 /datum/ai_behavior/call_reinforcements/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() - var/mob/pawn_mob = controller.pawn for(var/mob/other_mob in oview(reinforcements_range, pawn_mob)) if(pawn_mob.faction_check_atom(other_mob) && !isnull(other_mob.ai_controller)) @@ -46,5 +44,6 @@ other_mob.ai_controller.set_blackboard_key(BB_BASIC_MOB_REINFORCEMENT_TARGET, pawn_mob) controller.set_blackboard_key(BB_BASIC_MOB_REINFORCEMENTS_COOLDOWN, world.time + REINFORCEMENTS_COOLDOWN) + return AI_BEHAVIOR_DELAY #undef REINFORCEMENTS_COOLDOWN diff --git a/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm b/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm index 4d5319bca86..a4fc49facc0 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm @@ -14,29 +14,25 @@ action_cooldown = 1 SECONDS /datum/ai_behavior/capricious_retaliate/perform(seconds_per_tick, datum/ai_controller/controller, targeting_strategy_key, ignore_faction) - . = ..() var/atom/pawn = controller.pawn if (controller.blackboard_key_exists(BB_BASIC_MOB_RETALIATE_LIST)) var/deaggro_chance = controller.blackboard[BB_RANDOM_DEAGGRO_CHANCE] || 10 if (!SPT_PROB(deaggro_chance, seconds_per_tick)) - finish_action(controller, TRUE, ignore_faction) // "true" here means "don't clear our ignoring factions status" - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED pawn.visible_message(span_notice("[pawn] calms down.")) // We can blackboard key this if anyone else actually wants to customise it controller.clear_blackboard_key(BB_BASIC_MOB_RETALIATE_LIST) - finish_action(controller, FALSE, ignore_faction) controller.CancelActions() // Otherwise they will try and get one last kick in - return + return AI_BEHAVIOR_DELAY var/aggro_chance = controller.blackboard[BB_RANDOM_AGGRO_CHANCE] || 0.5 if (!SPT_PROB(aggro_chance, seconds_per_tick)) - finish_action(controller, FALSE, ignore_faction) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/aggro_range = controller.blackboard[BB_AGGRO_RANGE] || 9 var/list/potential_targets = hearers(aggro_range, get_turf(pawn)) - pawn if (!length(potential_targets)) - failed_targeting(controller, pawn, ignore_faction) - return + failed_targeting(pawn) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/datum/targeting_strategy/target_helper = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) @@ -49,16 +45,15 @@ final_target = test_target if (isnull(final_target)) - failed_targeting(controller, pawn, ignore_faction) - return + failed_targeting(pawn) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.insert_blackboard_key_lazylist(BB_BASIC_MOB_RETALIATE_LIST, final_target) pawn.visible_message(span_warning("[pawn] glares grumpily at [final_target]!")) - finish_action(controller, TRUE, ignore_faction) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /// Called if we try but fail to target something -/datum/ai_behavior/capricious_retaliate/proc/failed_targeting(datum/ai_controller/controller, atom/pawn, ignore_faction) - finish_action(controller, FALSE, ignore_faction) +/datum/ai_behavior/capricious_retaliate/proc/failed_targeting(atom/pawn) pawn.visible_message(span_notice("[pawn] grumbles.")) // We're pissed off but with no outlet to vent our frustration upon /datum/ai_behavior/capricious_retaliate/finish_action(datum/ai_controller/controller, succeeded, ignore_faction) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/maintain_distance.dm b/code/datums/ai/basic_mobs/basic_subtrees/maintain_distance.dm index 2a85e9e902b..549abbc75ec 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/maintain_distance.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/maintain_distance.dm @@ -60,8 +60,7 @@ return FALSE /datum/ai_behavior/step_away/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/step_away/finish_action(datum/ai_controller/controller, succeeded) . = ..() @@ -83,8 +82,8 @@ /datum/ai_behavior/pursue_to_range/perform(seconds_per_tick, datum/ai_controller/controller, target_key, range) var/atom/current_target = controller.blackboard[target_key] if (!QDELETED(current_target) && get_dist(controller.pawn, current_target) > range) - return - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_INSTANT + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED ///instead of taking a single step, we cover the entire distance /datum/ai_behavior/cover_minimum_distance @@ -112,5 +111,4 @@ set_movement_target(controller, target = chosen_turf) /datum/ai_behavior/cover_minimum_distance/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm b/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm index 3c03702b699..dc3f6ddcf90 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm @@ -21,19 +21,16 @@ set_movement_target(controller, target) /datum/ai_behavior/mine_wall/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/mob/living/basic/living_pawn = controller.pawn var/turf/closed/mineral/target = controller.blackboard[target_key] var/is_gibtonite_turf = istype(target, /turf/closed/mineral/gibtonite) if(QDELETED(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED living_pawn.melee_attack(target) if(is_gibtonite_turf) living_pawn.manual_emote("sighs...") //accept whats about to happen to us - finish_action(controller, TRUE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/mine_wall/finish_action(datum/ai_controller/controller, success, target_key) . = ..() @@ -42,17 +39,15 @@ /datum/ai_behavior/find_mineral_wall /datum/ai_behavior/find_mineral_wall/perform(seconds_per_tick, datum/ai_controller/controller, found_wall_key) - . = ..() var/mob/living_pawn = controller.pawn for(var/turf/closed/mineral/potential_wall in oview(9, living_pawn)) if(!check_if_mineable(controller, potential_wall)) //check if its surrounded by walls continue controller.set_blackboard_key(found_wall_key, potential_wall) //closest wall first! - finish_action(controller, TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED - finish_action(controller, FALSE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /datum/ai_behavior/find_mineral_wall/proc/check_if_mineable(datum/ai_controller/controller, turf/target_wall) var/mob/living/source = controller.pawn diff --git a/code/datums/ai/basic_mobs/basic_subtrees/move_to_cardinal.dm b/code/datums/ai/basic_mobs/basic_subtrees/move_to_cardinal.dm index c98878e0fd7..bcf5c829025 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/move_to_cardinal.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/move_to_cardinal.dm @@ -51,19 +51,17 @@ /datum/ai_behavior/move_to_cardinal/perform(seconds_per_tick, datum/ai_controller/controller, target_key) var/atom/target = controller.blackboard[target_key] if (QDELETED(target)) - finish_action(controller = controller, succeeded = FALSE, target_key = target_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED if (!(get_dir(controller.pawn, target) in GLOB.cardinals)) target_nearest_cardinal(controller, target) - return + return AI_BEHAVIOR_INSTANT var/distance_to_target = get_dist(controller.pawn, target) if (distance_to_target < minimum_distance) target_nearest_cardinal(controller, target) - return + return AI_BEHAVIOR_INSTANT if (distance_to_target > maximum_distance) - return - finish_action(controller = controller, succeeded = TRUE, target_key = target_key) - return + return AI_BEHAVIOR_INSTANT + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/move_to_cardinal/finish_action(datum/ai_controller/controller, succeeded, target_key) if (!succeeded) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm b/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm index 95a125eea5c..3640a2052b5 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm @@ -26,16 +26,13 @@ return !QDELETED(target) /datum/ai_behavior/ranged_skirmish/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key, max_range, min_range) - . = ..() var/atom/target = controller.blackboard[target_key] if (QDELETED(target)) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) if(!targeting_strategy.can_attack(controller.pawn, target)) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/hiding_target = targeting_strategy.find_hidden_mobs(controller.pawn, target) controller.set_blackboard_key(hiding_location_key, hiding_target) @@ -44,9 +41,8 @@ var/distance = get_dist(controller.pawn, target) if (distance > max_range || distance < min_range) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/basic/gunman = controller.pawn gunman.RangedAttack(target) - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/basic_subtrees/run_emote.dm b/code/datums/ai/basic_mobs/basic_subtrees/run_emote.dm index 6f2f5cdc203..c0c0da96584 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/run_emote.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/run_emote.dm @@ -15,8 +15,7 @@ /datum/ai_behavior/run_emote/perform(seconds_per_tick, datum/ai_controller/controller, emote_key) var/mob/living/living_pawn = controller.pawn if (!isliving(living_pawn)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED var/list/emote_list = controller.blackboard[emote_key] var/emote @@ -26,8 +25,7 @@ emote = emote_list if(isnull(emote)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED living_pawn.emote(emote) - finish_action(controller, TRUE) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/basic_subtrees/sleep_with_no_target.dm b/code/datums/ai/basic_mobs/basic_subtrees/sleep_with_no_target.dm index 93499cf673c..5d9841a5247 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/sleep_with_no_target.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/sleep_with_no_target.dm @@ -16,7 +16,9 @@ /datum/ai_behavior/sleep_after_targetless_time/perform(seconds_per_tick, datum/ai_controller/controller, target_key) var/atom/target = controller.blackboard[target_key] - finish_action(controller, succeeded = QDELETED(target), seconds_per_tick = seconds_per_tick) + if(QDELETED(target)) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED /datum/ai_behavior/sleep_after_targetless_time/finish_action(datum/ai_controller/controller, succeeded, seconds_per_tick) . = ..() diff --git a/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm b/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm index 55ec7387613..d327b1047cf 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm @@ -39,6 +39,7 @@ var/mob/living/living_mob = controller.pawn var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) if(!targeting_strategy) + . = AI_BEHAVIOR_DELAY CRASH("No target datum was supplied in the blackboard for [controller.pawn]") var/list/shitlist = controller.blackboard[shitlist_key] @@ -48,8 +49,7 @@ controller.set_blackboard_key(BB_TEMPORARILY_IGNORE_FACTION, TRUE) if (!QDELETED(existing_target) && (locate(existing_target) in shitlist) && targeting_strategy.can_attack(living_mob, existing_target, vision_range)) - finish_action(controller, succeeded = TRUE, check_faction = check_faction) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED var/list/enemies_list = list() for(var/mob/living/potential_target as anything in shitlist) @@ -59,8 +59,7 @@ if(!length(enemies_list)) controller.clear_blackboard_key(target_key) - finish_action(controller, succeeded = FALSE, check_faction = check_faction) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/atom/new_target = pick_final_target(controller, enemies_list) controller.set_blackboard_key(target_key, new_target) @@ -70,7 +69,7 @@ if(potential_hiding_location) //If they're hiding inside of something, we need to know so we can go for that instead initially. controller.set_blackboard_key(hiding_location_key, potential_hiding_location) - finish_action(controller, succeeded = TRUE, check_faction = check_faction) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /// Returns the desired final target from the filtered list of enemies /datum/ai_behavior/target_from_retaliate_list/proc/pick_final_target(datum/ai_controller/controller, list/enemies_list) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/teleport_away_from_target.dm b/code/datums/ai/basic_mobs/basic_subtrees/teleport_away_from_target.dm index dadba992e9f..25f0e4a4249 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/teleport_away_from_target.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/teleport_away_from_target.dm @@ -34,7 +34,7 @@ /datum/ai_behavior/find_furthest_turf_from_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key, set_key, range) var/mob/living/living_target = controller.blackboard[target_key] if(QDELETED(living_target)) - return + return AI_BEHAVIOR_INSTANT var/distance = 0 var/turf/chosen_turf @@ -49,8 +49,7 @@ break //we have already found the max distance if(isnull(chosen_turf)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED controller.set_blackboard_key(set_key, chosen_turf) - finish_action(controller, TRUE) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm b/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm index a59a901d57d..4c794a73d8a 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm @@ -27,7 +27,7 @@ /datum/ai_behavior/use_mob_ability/perform(seconds_per_tick, datum/ai_controller/controller, ability_key) var/datum/action/using_action = controller.blackboard[ability_key] if (QDELETED(using_action)) - finish_action(controller, FALSE, ability_key) - return - var/result = using_action.Trigger() - finish_action(controller, result, ability_key) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED + if(using_action.Trigger()) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED diff --git a/code/datums/ai/basic_mobs/pet_commands/fetch.dm b/code/datums/ai/basic_mobs/pet_commands/fetch.dm index a9147eaf681..87606fa0c65 100644 --- a/code/datums/ai/basic_mobs/pet_commands/fetch.dm +++ b/code/datums/ai/basic_mobs/pet_commands/fetch.dm @@ -14,19 +14,15 @@ set_movement_target(controller, fetch_thing) /datum/ai_behavior/fetch_seek/perform(seconds_per_tick, datum/ai_controller/controller, target_key, delivery_key) - . = ..() var/obj/item/fetch_thing = controller.blackboard[target_key] // It stopped existing if (QDELETED(fetch_thing)) - finish_action(controller, FALSE, target_key, delivery_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED // We can't pick this up if (fetch_thing.anchored) - finish_action(controller, FALSE, target_key, delivery_key) - return - - finish_action(controller, TRUE, target_key, delivery_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/fetch_seek/finish_action(datum/ai_controller/controller, success, target_key, delivery_key) . = ..() @@ -53,14 +49,13 @@ set_movement_target(controller, return_target) /datum/ai_behavior/deliver_fetched_item/perform(seconds_per_tick, datum/ai_controller/controller, delivery_key, storage_key) - . = ..() var/mob/living/return_target = controller.blackboard[delivery_key] if(QDELETED(return_target)) - finish_action(controller, FALSE, delivery_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - deliver_item(controller, return_target, storage_key) - finish_action(controller, TRUE, delivery_key) + if(!deliver_item(controller, return_target, storage_key)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/deliver_fetched_item/finish_action(datum/ai_controller/controller, success, delivery_key) . = ..() @@ -68,13 +63,13 @@ controller.clear_blackboard_key(BB_ACTIVE_PET_COMMAND) /// Actually deliver the fetched item to the target, if we still have it +/// Returns TRUE if we succeeded, FALSE if we failed /datum/ai_behavior/deliver_fetched_item/proc/deliver_item(datum/ai_controller/controller, return_target, storage_key) var/mob/pawn = controller.pawn var/obj/item/carried_item = controller.blackboard[storage_key] if(QDELETED(carried_item) || carried_item.loc != pawn) pawn.visible_message(span_notice("[pawn] looks around as if [pawn.p_they()] [pawn.p_have()] lost something.")) - finish_action(controller, FALSE) - return + return FALSE pawn.visible_message(span_notice("[pawn] delivers [carried_item] to [return_target].")) carried_item.forceMove(get_turf(return_target)) @@ -99,26 +94,26 @@ set_movement_target(controller, snack) /datum/ai_behavior/eat_fetched_snack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, delivery_key) - . = ..() var/obj/item/snack = controller.blackboard[target_key] var/is_living_loc = isliving(snack.loc) if(QDELETED(snack) || (!isturf(snack.loc) && !is_living_loc)) - finish_action(controller, FALSE) // Where did it go? - return + // Where did it go? + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/basic/basic_pawn = controller.pawn if(is_living_loc) if(SPT_PROB(10, seconds_per_tick)) basic_pawn.manual_emote("Stares at [snack.loc]'s [snack.name] intently.") - return + return AI_BEHAVIOR_DELAY if(!basic_pawn.Adjacent(snack)) - return + return AI_BEHAVIOR_DELAY basic_pawn.melee_attack(snack) // snack attack! if(QDELETED(snack)) // we ate it! - finish_action(controller, TRUE, target_key, delivery_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY /datum/ai_behavior/eat_fetched_snack/finish_action(datum/ai_controller/controller, succeeded, target_key, delivery_key) . = ..() @@ -143,7 +138,6 @@ return /datum/ai_behavior/forget_failed_fetches/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() COOLDOWN_START(src, reset_ignore_cooldown, cooldown_duration) controller.clear_blackboard_key(BB_FETCH_IGNORE_LIST) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/pet_commands/pet_follow_friend.dm b/code/datums/ai/basic_mobs/pet_commands/pet_follow_friend.dm index 397021818aa..38a6939c901 100644 --- a/code/datums/ai/basic_mobs/pet_commands/pet_follow_friend.dm +++ b/code/datums/ai/basic_mobs/pet_commands/pet_follow_friend.dm @@ -10,8 +10,7 @@ set_movement_target(controller, target) /datum/ai_behavior/pet_follow_friend/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/atom/target = controller.blackboard[target_key] if (QDELETED(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + return AI_BEHAVIOR_DELAY diff --git a/code/datums/ai/basic_mobs/pet_commands/pet_use_targeted_ability.dm b/code/datums/ai/basic_mobs/pet_commands/pet_use_targeted_ability.dm index c7153b0c12f..3c8c06b0099 100644 --- a/code/datums/ai/basic_mobs/pet_commands/pet_use_targeted_ability.dm +++ b/code/datums/ai/basic_mobs/pet_commands/pet_use_targeted_ability.dm @@ -13,11 +13,11 @@ var/datum/action/cooldown/mob_cooldown/ability = controller.blackboard[ability_key] var/mob/living/target = controller.blackboard[target_key] if (QDELETED(ability) || QDELETED(target)) - finish_action(controller, FALSE, ability_key, target_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED var/mob/pawn = controller.pawn if(QDELETED(pawn) || ability.InterceptClickOn(pawn, null, target)) - finish_action(controller, TRUE, ability_key, target_key) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_INSTANT /datum/ai_behavior/pet_use_ability/finish_action(datum/ai_controller/controller, succeeded, ability_key, target_key) . = ..() diff --git a/code/datums/ai/basic_mobs/pet_commands/play_dead.dm b/code/datums/ai/basic_mobs/pet_commands/play_dead.dm index c4b99cf6f42..5a7a0943026 100644 --- a/code/datums/ai/basic_mobs/pet_commands/play_dead.dm +++ b/code/datums/ai/basic_mobs/pet_commands/play_dead.dm @@ -11,9 +11,9 @@ basic_pawn.look_dead() /datum/ai_behavior/play_dead/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() if(SPT_PROB(10, seconds_per_tick)) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY /datum/ai_behavior/play_dead/finish_action(datum/ai_controller/controller, succeeded) . = ..() diff --git a/code/datums/ai/dog/dog_behaviors.dm b/code/datums/ai/dog/dog_behaviors.dm index eed116330fb..00a2f789e12 100644 --- a/code/datums/ai/dog/dog_behaviors.dm +++ b/code/datums/ai/dog/dog_behaviors.dm @@ -11,23 +11,21 @@ controller.behavior_cooldowns[src] = world.time + get_cooldown(controller) var/mob/living/living_pawn = controller.pawn if(!(isturf(living_pawn.loc) || HAS_TRAIT(living_pawn, TRAIT_AI_BAGATTACK))) // Void puppies can attack from inside bags - finish_action(controller, FALSE, target_key, targeting_strategy_key, hiding_location_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED // Unfortunately going to repeat this check in parent call but what can you do var/atom/target = controller.blackboard[target_key] var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) if (!targeting_strategy.can_attack(living_pawn, target)) - finish_action(controller, FALSE, target_key, targeting_strategy_key, hiding_location_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED if (!living_pawn.Adjacent(target)) growl_at(living_pawn, target, seconds_per_tick) - return + return AI_BEHAVIOR_INSTANT if(!controller.blackboard[BB_DOG_HARASS_HARM]) paw_harmlessly(living_pawn, target, seconds_per_tick) - return + return AI_BEHAVIOR_INSTANT // Give Ian some teeth var/old_melee_lower = living_pawn.melee_damage_lower @@ -39,6 +37,7 @@ living_pawn.melee_damage_lower = old_melee_lower living_pawn.melee_damage_upper = old_melee_upper + return AI_BEHAVIOR_DELAY /// Swat at someone we don't like but won't hurt /datum/ai_behavior/basic_melee_attack/dog/proc/paw_harmlessly(mob/living/living_pawn, atom/target, seconds_per_tick) diff --git a/code/datums/ai/dog/dog_subtrees.dm b/code/datums/ai/dog/dog_subtrees.dm index 62f63da54bd..74c075adad3 100644 --- a/code/datums/ai/dog/dog_subtrees.dm +++ b/code/datums/ai/dog/dog_subtrees.dm @@ -35,5 +35,4 @@ controller.clear_blackboard_key(target_key) /datum/ai_behavior/find_hated_dog_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/generic/find_and_set.dm b/code/datums/ai/generic/find_and_set.dm index fbddc33075c..41f256c9ba7 100644 --- a/code/datums/ai/generic/find_and_set.dm +++ b/code/datums/ai/generic/find_and_set.dm @@ -7,19 +7,15 @@ action_cooldown = 2 SECONDS /datum/ai_behavior/find_and_set/perform(seconds_per_tick, datum/ai_controller/controller, set_key, locate_path, search_range) - . = ..() if (controller.blackboard_key_exists(set_key)) - finish_action(controller, TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED if(QDELETED(controller.pawn)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED var/find_this_thing = search_tactic(controller, locate_path, search_range) if(isnull(find_this_thing)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(set_key, find_this_thing) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/find_and_set/proc/search_tactic(datum/ai_controller/controller, locate_path, search_range) return locate(locate_path) in oview(search_range, controller.pawn) diff --git a/code/datums/ai/generic/generic_behaviors.dm b/code/datums/ai/generic/generic_behaviors.dm index b70375ef393..1c0e1f65adf 100644 --- a/code/datums/ai/generic/generic_behaviors.dm +++ b/code/datums/ai/generic/generic_behaviors.dm @@ -1,28 +1,25 @@ /datum/ai_behavior/resist/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/mob/living/living_pawn = controller.pawn living_pawn.ai_controller.set_blackboard_key(BB_RESISTING, TRUE) living_pawn.execute_resist() - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/battle_screech ///List of possible screeches the behavior has var/list/screeches /datum/ai_behavior/battle_screech/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/mob/living/living_pawn = controller.pawn INVOKE_ASYNC(living_pawn, TYPE_PROC_REF(/mob, emote), pick(screeches)) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED ///Moves to target then finishes /datum/ai_behavior/move_to_target behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT /datum/ai_behavior/move_to_target/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/break_spine @@ -42,12 +39,10 @@ var/mob/living/big_guy = controller.pawn //he was molded by the darkness if(QDELETED(batman) || get_dist(batman, big_guy) >= give_up_distance) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED if(batman.stat != CONSCIOUS) - finish_action(controller, TRUE, target_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED big_guy.start_pulling(batman) big_guy.face_atom(batman) @@ -63,7 +58,7 @@ else batman.adjustBruteLoss(150) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/break_spine/finish_action(datum/ai_controller/controller, succeeded, target_key) if(succeeded) @@ -80,14 +75,12 @@ /datum/ai_behavior/use_in_hand/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/mob/living/pawn = controller.pawn var/obj/item/held = pawn.get_active_held_item() if(!held) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED pawn.activate_hand() - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /// Use the currently held item, or unarmed, on a weakref to an object in the world /datum/ai_behavior/use_on_object @@ -102,13 +95,11 @@ set_movement_target(controller, target) /datum/ai_behavior/use_on_object/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/mob/living/pawn = controller.pawn var/obj/item/held_item = pawn.get_item_by_slot(pawn.get_active_hand()) var/atom/target = controller.blackboard[target_key] if(QDELETED(target)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED pawn.set_combat_mode(FALSE) if(held_item) @@ -116,7 +107,7 @@ else pawn.UnarmedAttack(target, TRUE) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/give behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH @@ -127,37 +118,34 @@ set_movement_target(controller, controller.blackboard[target_key]) /datum/ai_behavior/give/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/mob/living/pawn = controller.pawn var/obj/item/held_item = pawn.get_active_held_item() var/atom/target = controller.blackboard[target_key] if(!held_item) //if held_item is null, we pretend that action was succesful - finish_action(controller, TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED if(!target || !isliving(target)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/living_target = target - - if(!try_to_give_item(controller, living_target, held_item)) - return + var/perform_flags = try_to_give_item(controller, living_target, held_item) + if(perform_flags & AI_BEHAVIOR_FAILED) + return perform_flags controller.PauseAi(1.5 SECONDS) living_target.visible_message( span_info("[pawn] starts trying to give [held_item] to [living_target]!"), span_warning("[pawn] tries to give you [held_item]!") ) if(!do_after(pawn, 1 SECONDS, living_target)) - return + return AI_BEHAVIOR_DELAY | perform_flags - try_to_give_item(controller, living_target, held_item, actually_give = TRUE) + perform_flags |= try_to_give_item(controller, living_target, held_item, actually_give = TRUE) + return AI_BEHAVIOR_DELAY | perform_flags /datum/ai_behavior/give/proc/try_to_give_item(datum/ai_controller/controller, mob/living/target, obj/item/held_item, actually_give) if(QDELETED(held_item) || QDELETED(target)) - finish_action(controller, FALSE) - return FALSE + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/has_left_pocket = target.can_equip(held_item, ITEM_SLOT_LPOCKET) var/has_right_pocket = target.can_equip(held_item, ITEM_SLOT_RPOCKET) @@ -169,17 +157,16 @@ break if(!has_left_pocket && !has_right_pocket && !has_valid_hand) - finish_action(controller, FALSE) - return FALSE + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(!actually_give) - return TRUE + return AI_BEHAVIOR_DELAY if(!has_valid_hand || prob(50)) target.equip_to_slot_if_possible(held_item, (!has_left_pocket ? ITEM_SLOT_RPOCKET : (prob(50) ? ITEM_SLOT_LPOCKET : ITEM_SLOT_RPOCKET))) else target.put_in_hands(held_item) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/consume @@ -191,21 +178,20 @@ set_movement_target(controller, controller.blackboard[target_key]) /datum/ai_behavior/consume/perform(seconds_per_tick, datum/ai_controller/controller, target_key, hunger_timer_key) - . = ..() var/mob/living/living_pawn = controller.pawn var/obj/item/target = controller.blackboard[target_key] if(QDELETED(target)) - return + return AI_BEHAVIOR_DELAY if(!(target in living_pawn.held_items)) if(!living_pawn.get_empty_held_indexes() || !living_pawn.put_in_hands(target)) - finish_action(controller, FALSE, target, hunger_timer_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED target.melee_attack_chain(living_pawn, living_pawn) if(QDELETED(target) || prob(10)) // Even if we don't finish it all we can randomly decide to be done - finish_action(controller, TRUE, null, hunger_timer_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY /datum/ai_behavior/consume/finish_action(datum/ai_controller/controller, succeeded, target_key, hunger_timer_key) . = ..() @@ -218,36 +204,34 @@ /datum/ai_behavior/drop_item /datum/ai_behavior/drop_item/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/mob/living/living_pawn = controller.pawn var/obj/item/best_held = GetBestWeapon(controller, null, living_pawn.held_items) for(var/obj/item/held as anything in living_pawn.held_items) if(!held || held == best_held) continue living_pawn.dropItemToGround(held) + return AI_BEHAVIOR_DELAY /// This behavior involves attacking a target. /datum/ai_behavior/attack behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM | AI_BEHAVIOR_REQUIRE_REACH /datum/ai_behavior/attack/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/mob/living/living_pawn = controller.pawn if(!istype(living_pawn) || !isturf(living_pawn.loc)) - return + return AI_BEHAVIOR_DELAY var/atom/movable/attack_target = controller.blackboard[BB_ATTACK_TARGET] if(!attack_target || !can_see(living_pawn, attack_target, length = controller.blackboard[BB_VISION_RANGE])) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/living_target = attack_target if(istype(living_target) && (living_target.stat == DEAD)) - finish_action(controller, TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED set_movement_target(controller, living_target) attack(controller, living_target) + return AI_BEHAVIOR_DELAY /datum/ai_behavior/attack/finish_action(datum/ai_controller/controller, succeeded) . = ..() @@ -265,22 +249,20 @@ behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM /datum/ai_behavior/follow/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/mob/living/living_pawn = controller.pawn if(!istype(living_pawn) || !isturf(living_pawn.loc)) - return + return AI_BEHAVIOR_DELAY var/atom/movable/follow_target = controller.blackboard[BB_FOLLOW_TARGET] if(!follow_target || get_dist(living_pawn, follow_target) > controller.blackboard[BB_VISION_RANGE]) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/living_target = follow_target if(istype(living_target) && (living_target.stat == DEAD)) - finish_action(controller, TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED set_movement_target(controller, living_target) + return AI_BEHAVIOR_DELAY /datum/ai_behavior/follow/finish_action(datum/ai_controller/controller, succeeded) . = ..() @@ -291,11 +273,11 @@ /datum/ai_behavior/perform_emote/perform(seconds_per_tick, datum/ai_controller/controller, emote, speech_sound) var/mob/living/living_pawn = controller.pawn if(!istype(living_pawn)) - return + return AI_BEHAVIOR_INSTANT living_pawn.manual_emote(emote) if(speech_sound) // Only audible emotes will pass in a sound playsound(living_pawn, speech_sound, 80, vary = TRUE) - finish_action(controller, TRUE) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/perform_speech @@ -304,29 +286,26 @@ var/mob/living/living_pawn = controller.pawn if(!istype(living_pawn)) - return + return AI_BEHAVIOR_INSTANT living_pawn.say(speech, forced = "AI Controller") if(speech_sound) playsound(living_pawn, speech_sound, 80, vary = TRUE) - finish_action(controller, TRUE) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/perform_speech_radio /datum/ai_behavior/perform_speech_radio/perform(seconds_per_tick, datum/ai_controller/controller, speech, obj/item/radio/speech_radio, list/try_channels = list(RADIO_CHANNEL_COMMON)) var/mob/living/living_pawn = controller.pawn if(!istype(living_pawn) || !istype(speech_radio) || QDELETED(speech_radio) || !length(try_channels)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED speech_radio.talk_into(living_pawn, speech, pick(try_channels)) - finish_action(controller, TRUE) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED //song behaviors /datum/ai_behavior/setup_instrument /datum/ai_behavior/setup_instrument/perform(seconds_per_tick, datum/ai_controller/controller, song_instrument_key, song_lines_key) - . = ..() - var/obj/item/instrument/song_instrument = controller.blackboard[song_instrument_key] var/datum/song/song = song_instrument.song var/song_lines = controller.blackboard[song_lines_key] @@ -336,24 +315,20 @@ song.ParseSong(new_song = song_lines) song.repeat = 10 song.volume = song.max_volume - 10 - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/play_instrument /datum/ai_behavior/play_instrument/perform(seconds_per_tick, datum/ai_controller/controller, song_instrument_key) - . = ..() - var/obj/item/instrument/song_instrument = controller.blackboard[song_instrument_key] var/datum/song/song = song_instrument.song song.start_playing(controller.pawn) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/find_nearby /datum/ai_behavior/find_nearby/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - var/list/possible_targets = list() for(var/atom/thing in view(2, controller.pawn)) if(!thing.mouse_opacity) @@ -366,6 +341,6 @@ continue possible_targets += thing if(!possible_targets.len) - finish_action(controller, FALSE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(target_key, pick(possible_targets)) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/hunting_behavior/hunting_behaviors.dm b/code/datums/ai/hunting_behavior/hunting_behaviors.dm index 07fc84997a6..609138c1132 100644 --- a/code/datums/ai/hunting_behavior/hunting_behaviors.dm +++ b/code/datums/ai/hunting_behavior/hunting_behaviors.dm @@ -52,18 +52,14 @@ /datum/ai_behavior/find_hunt_target /datum/ai_behavior/find_hunt_target/perform(seconds_per_tick, datum/ai_controller/controller, hunting_target_key, types_to_hunt, hunt_range) - . = ..() - var/mob/living/living_mob = controller.pawn for(var/atom/possible_dinner as anything in typecache_filter_list(range(hunt_range, living_mob), types_to_hunt)) if(!valid_dinner(living_mob, possible_dinner, hunt_range, controller, seconds_per_tick)) continue controller.set_blackboard_key(hunting_target_key, possible_dinner) - finish_action(controller, TRUE, hunting_target_key) - return - - finish_action(controller, FALSE, hunting_target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /datum/ai_behavior/find_hunt_target/proc/valid_dinner(mob/living/source, atom/dinner, radius, datum/ai_controller/controller, seconds_per_tick) if(isliving(dinner)) @@ -90,15 +86,13 @@ set_movement_target(controller, hunt_target) /datum/ai_behavior/hunt_target/perform(seconds_per_tick, datum/ai_controller/controller, hunting_target_key, hunting_cooldown_key) - . = ..() var/mob/living/hunter = controller.pawn var/atom/hunted = controller.blackboard[hunting_target_key] if(QDELETED(hunted)) - finish_action(controller, FALSE, hunting_target_key) - else - target_caught(hunter, hunted) - finish_action(controller, TRUE, hunting_target_key, hunting_cooldown_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + target_caught(hunter, hunted) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/hunt_target/proc/target_caught(mob/living/hunter, atom/hunted) if(isliving(hunted)) // Are we hunting a living mob? @@ -153,7 +147,7 @@ /datum/ai_behavior/hunt_target/use_ability_on_target/perform(seconds_per_tick, datum/ai_controller/controller, hunting_target_key, hunting_cooldown_key) var/datum/action/cooldown/ability = controller.blackboard[ability_key] if(!ability?.IsAvailable()) - finish_action(controller, FALSE, hunting_target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED return ..() /datum/ai_behavior/hunt_target/use_ability_on_target/target_caught(mob/living/hunter, atom/hunted) diff --git a/code/datums/ai/monkey/monkey_behaviors.dm b/code/datums/ai/monkey/monkey_behaviors.dm index d16110cd702..10a23acdabe 100644 --- a/code/datums/ai/monkey/monkey_behaviors.dm +++ b/code/datums/ai/monkey/monkey_behaviors.dm @@ -12,55 +12,51 @@ controller.clear_blackboard_key(BB_MONKEY_PICKUPTARGET) +/// Equips an item on the monkey +/// Returns TRUE if it works out, FALSE otherwise /datum/ai_behavior/monkey_equip/proc/equip_item(datum/ai_controller/controller) var/mob/living/living_pawn = controller.pawn var/obj/item/target = controller.blackboard[BB_MONKEY_PICKUPTARGET] var/best_force = controller.blackboard[BB_MONKEY_BEST_FORCE_FOUND] - if(!isturf(living_pawn.loc)) - finish_action(controller, FALSE) - return + return FALSE if(!target) - finish_action(controller, FALSE) - return + return FALSE if(target.anchored) //Can't pick it up, so stop trying. - finish_action(controller, FALSE) - return + return FALSE // Strong weapon else if(target.force > best_force) living_pawn.drop_all_held_items() living_pawn.put_in_hands(target) controller.set_blackboard_key(BB_MONKEY_BEST_FORCE_FOUND, target.force) - finish_action(controller, TRUE) - return + return TRUE else if(target.slot_flags) //Clothing == top priority living_pawn.dropItemToGround(target, TRUE) living_pawn.update_icons() if(!living_pawn.equip_to_appropriate_slot(target)) - finish_action(controller, FALSE) - return //Already wearing something, in the future this should probably replace the current item but the code didn't actually do that, and I dont want to support it right now. - finish_action(controller, TRUE) - return + return FALSE //Already wearing something, in the future this should probably replace the current item but the code didn't actually do that, and I dont want to support it right now. + return TRUE // EVERYTHING ELSE else if(living_pawn.get_empty_held_indexes()) living_pawn.put_in_hands(target) - finish_action(controller, TRUE) - return + return TRUE - finish_action(controller, FALSE) + return FALSE /datum/ai_behavior/monkey_equip/ground required_distance = 0 /datum/ai_behavior/monkey_equip/ground/perform(seconds_per_tick, datum/ai_controller/controller) . = ..() - equip_item(controller) + if(equip_item(controller)) + return . | AI_BEHAVIOR_SUCCEEDED + return . | AI_BEHAVIOR_FAILED /datum/ai_behavior/monkey_equip/pickpocket @@ -110,13 +106,10 @@ /datum/ai_behavior/monkey_flee /datum/ai_behavior/monkey_flee/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() - var/mob/living/living_pawn = controller.pawn - if(living_pawn.health >= MONKEY_FLEE_HEALTH) - finish_action(controller, TRUE) //we're back in bussiness - return + if(living_pawn.health >= MONKEY_FLEE_HEALTH) //we're back in bussiness + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED var/mob/living/target = null @@ -127,9 +120,9 @@ break if(target) - SSmove_manager.move_away(living_pawn, target, max_dist=MONKEY_ENEMY_VISION, delay=5) - else - finish_action(controller, TRUE) + DSmove_manager.move_away(living_pawn, target, max_dist=MONKEY_ENEMY_VISION, delay=5) + return AI_BEHAVIOR_DELAY + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/monkey_attack_mob behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM //performs to increase frustration @@ -139,29 +132,28 @@ set_movement_target(controller, controller.blackboard[target_key]) /datum/ai_behavior/monkey_attack_mob/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - var/mob/living/target = controller.blackboard[target_key] var/mob/living/living_pawn = controller.pawn - if(!target || target.stat != CONSCIOUS) - finish_action(controller, TRUE) //Target == owned - return + if(!target || target.stat != CONSCIOUS) //Target == owned + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED - if(isturf(target.loc) && !IS_DEAD_OR_INCAP(living_pawn)) // Check if they're a valid target - // check if target has a weapon - var/obj/item/W - for(var/obj/item/I in target.held_items) - if(!(I.item_flags & ABSTRACT)) - W = I - break - - // if the target has a weapon, chance to disarm them - if(W && SPT_PROB(MONKEY_ATTACK_DISARM_PROB, seconds_per_tick)) - monkey_attack(controller, target, seconds_per_tick, TRUE) - else - monkey_attack(controller, target, seconds_per_tick, FALSE) + if(!isturf(target.loc) || IS_DEAD_OR_INCAP(living_pawn)) // Check if they're a valid target + return AI_BEHAVIOR_DELAY + // check if target has a weapon + var/obj/item/W + for(var/obj/item/I in target.held_items) + if(!(I.item_flags & ABSTRACT)) + W = I + break + // if the target has a weapon, chance to disarm them + var/perform_flags = NONE + if(W && SPT_PROB(MONKEY_ATTACK_DISARM_PROB, seconds_per_tick)) + perform_flags = monkey_attack(controller, target, seconds_per_tick, TRUE) + else + perform_flags = monkey_attack(controller, target, seconds_per_tick, FALSE) + return AI_BEHAVIOR_DELAY | perform_flags /datum/ai_behavior/monkey_attack_mob/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() @@ -169,14 +161,14 @@ controller.clear_blackboard_key(target_key) if(QDELETED(living_pawn)) // pawn can be null at this point return - SSmove_manager.stop_looping(living_pawn) + DSmove_manager.stop_looping(living_pawn) /// attack using a held weapon otherwise bite the enemy, then if we are angry there is a chance we might calm down a little /datum/ai_behavior/monkey_attack_mob/proc/monkey_attack(datum/ai_controller/controller, mob/living/target, seconds_per_tick, disarm) var/mob/living/living_pawn = controller.pawn if(living_pawn.next_move > world.time) - return + return NONE living_pawn.changeNext_move(CLICK_CD_MELEE) //We play fair @@ -215,7 +207,7 @@ // no de-aggro if(controller.blackboard[BB_MONKEY_AGGRESSIVE]) - return + return NONE // we've queued up a monkey attack on a mob which isn't already an enemy, so give them 1 threat to start // note they might immediately reduce threat and drop from the list. @@ -238,7 +230,8 @@ if(controller.blackboard[BB_MONKEY_ENEMIES][target] <= 0) controller.remove_thing_from_blackboard_key(BB_MONKEY_ENEMIES, target) if(controller.blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET] == target) - finish_action(controller, TRUE) + return AI_BEHAVIOR_SUCCEEDED + return NONE /datum/ai_behavior/disposal_mob behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM //performs to increase frustration @@ -254,10 +247,8 @@ controller.clear_blackboard_key(disposal_target_key) //No target disposal /datum/ai_behavior/disposal_mob/perform(seconds_per_tick, datum/ai_controller/controller, attack_target_key, disposal_target_key) - . = ..() - if(controller.blackboard[BB_MONKEY_DISPOSING]) //We are disposing, don't do ANYTHING!!!! - return + return AI_BEHAVIOR_DELAY var/mob/living/target = controller.blackboard[attack_target_key] var/mob/living/living_pawn = controller.pawn @@ -265,25 +256,24 @@ set_movement_target(controller, target) if(!target) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(target.pulledby != living_pawn && !HAS_AI_CONTROLLER_TYPE(target.pulledby, /datum/ai_controller/monkey)) //Dont steal from my fellow monkeys. if(living_pawn.Adjacent(target) && isturf(target.loc)) target.grabbedby(living_pawn) - return //Do the rest next turn + return AI_BEHAVIOR_DELAY //Do the rest next turn var/obj/machinery/disposal/disposal = controller.blackboard[disposal_target_key] set_movement_target(controller, disposal) if(!disposal) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(living_pawn.Adjacent(disposal)) INVOKE_ASYNC(src, PROC_REF(try_disposal_mob), controller, attack_target_key, disposal_target_key) //put him in! - else //This means we might be getting pissed! - return + return AI_BEHAVIOR_DELAY + //This means we might be getting pissed! + return AI_BEHAVIOR_DELAY /datum/ai_behavior/disposal_mob/proc/try_disposal_mob(datum/ai_controller/controller, attack_target_key, disposal_target_key) var/mob/living/living_pawn = controller.pawn @@ -298,8 +288,6 @@ /datum/ai_behavior/recruit_monkeys/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() - controller.set_blackboard_key(BB_MONKEY_RECRUIT_COOLDOWN, world.time + MONKEY_RECRUIT_COOLDOWN) var/mob/living/living_pawn = controller.pawn @@ -313,7 +301,7 @@ // Other monkeys now also hate the guy we're currently targeting nearby_monkey.ai_controller.add_blackboard_key_assoc(BB_MONKEY_ENEMIES, controller.blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET], MONKEY_RECRUIT_HATED_AMOUNT) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/monkey_set_combat_target/perform(seconds_per_tick, datum/ai_controller/controller, set_key, enemies_key) var/list/enemies = controller.blackboard[enemies_key] @@ -330,8 +318,7 @@ valids[possible_enemy] = CEILING(100 / (get_dist(controller.pawn, possible_enemy) || 1), 1) if(!length(valids)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED controller.set_blackboard_key(set_key, pick_weight(valids)) - finish_action(controller, TRUE) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/monkey/monkey_controller.dm b/code/datums/ai/monkey/monkey_controller.dm index 215f0a96302..693427ba4bd 100644 --- a/code/datums/ai/monkey/monkey_controller.dm +++ b/code/datums/ai/monkey/monkey_controller.dm @@ -45,7 +45,7 @@ have ways of interacting with a specific mob and control it. /datum/ai_controller/monkey/New(atom/new_pawn) var/static/list/control_examine = list( - ORGAN_SLOT_EYES = span_monkey("eyes have a primal look in them."), + ORGAN_SLOT_EYES = span_monkey("%PRONOUN_They stare%PRONOUN_s around with wild, primal eyes."), ) AddElement(/datum/element/ai_control_examine, control_examine) return ..() diff --git a/code/datums/ai/movement/_ai_movement.dm b/code/datums/ai/movement/_ai_movement.dm index 3f455b2acd0..a0a75bb227c 100644 --- a/code/datums/ai/movement/_ai_movement.dm +++ b/code/datums/ai/movement/_ai_movement.dm @@ -17,7 +17,7 @@ moving_controllers -= controller // We got deleted as we finished an action if(!QDELETED(controller.pawn)) - SSmove_manager.stop_looping(controller.pawn, SSai_movement) + DSmove_manager.stop_looping(controller.pawn, SSai_movement) /datum/ai_movement/proc/increment_pathing_failures(datum/ai_controller/controller) controller.consecutive_pathing_attempts++ diff --git a/code/datums/ai/movement/ai_movement_basic_avoidance.dm b/code/datums/ai/movement/ai_movement_basic_avoidance.dm index 6b48f1b5e9e..bcfe6833a8d 100644 --- a/code/datums/ai/movement/ai_movement_basic_avoidance.dm +++ b/code/datums/ai/movement/ai_movement_basic_avoidance.dm @@ -9,7 +9,7 @@ var/atom/movable/moving = controller.pawn var/min_dist = controller.blackboard[BB_CURRENT_MIN_MOVE_DISTANCE] var/delay = controller.movement_delay - var/datum/move_loop/loop = SSmove_manager.move_to(moving, current_movement_target, min_dist, delay, flags = move_flags, subsystem = SSai_movement, extra_info = controller) + var/datum/move_loop/loop = DSmove_manager.move_to(moving, current_movement_target, min_dist, delay, flags = move_flags, subsystem = SSai_movement, extra_info = controller) RegisterSignal(loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(pre_move)) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(post_move)) diff --git a/code/datums/ai/movement/ai_movement_complete_stop.dm b/code/datums/ai/movement/ai_movement_complete_stop.dm index dcae93f1ba0..31309256a67 100644 --- a/code/datums/ai/movement/ai_movement_complete_stop.dm +++ b/code/datums/ai/movement/ai_movement_complete_stop.dm @@ -8,8 +8,8 @@ var/stopping_time = controller.blackboard[BB_STATIONARY_SECONDS] var/delay_time = (stopping_time * 0.5) // no real reason to fire any more often than this really // assume that the current_movement_target is our location - var/datum/move_loop/loop = SSmove_manager.freeze(moving, current_movement_target, delay = delay_time, timeout = stopping_time, subsystem = SSai_movement, extra_info = controller) + var/datum/move_loop/loop = DSmove_manager.freeze(moving, current_movement_target, delay = delay_time, timeout = stopping_time, subsystem = SSai_movement, extra_info = controller) RegisterSignal(loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(pre_move)) /datum/ai_movement/complete_stop/allowed_to_move(datum/move_loop/source) - return FALSE + return FALSE diff --git a/code/datums/ai/movement/ai_movement_dumb.dm b/code/datums/ai/movement/ai_movement_dumb.dm index 06ac4bdd10c..a64a7539eec 100644 --- a/code/datums/ai/movement/ai_movement_dumb.dm +++ b/code/datums/ai/movement/ai_movement_dumb.dm @@ -7,7 +7,7 @@ . = ..() var/atom/movable/moving = controller.pawn var/delay = controller.movement_delay - var/datum/move_loop/loop = SSmove_manager.move_towards_legacy(moving, current_movement_target, delay, subsystem = SSai_movement, extra_info = controller) + var/datum/move_loop/loop = DSmove_manager.move_towards_legacy(moving, current_movement_target, delay, subsystem = SSai_movement, extra_info = controller) RegisterSignal(loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(pre_move)) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(post_move)) diff --git a/code/datums/ai/movement/ai_movement_jps.dm b/code/datums/ai/movement/ai_movement_jps.dm index 825feefabfa..ac16b0aaa23 100644 --- a/code/datums/ai/movement/ai_movement_jps.dm +++ b/code/datums/ai/movement/ai_movement_jps.dm @@ -12,7 +12,7 @@ var/atom/movable/moving = controller.pawn var/delay = controller.movement_delay - var/datum/move_loop/has_target/jps/loop = SSmove_manager.jps_move(moving, + var/datum/move_loop/has_target/jps/loop = DSmove_manager.jps_move(moving, current_movement_target, delay, repath_delay = 0.5 SECONDS, diff --git a/code/datums/ai/objects/mod.dm b/code/datums/ai/objects/mod.dm index 67d8121a4e1..edad77aa4c4 100644 --- a/code/datums/ai/objects/mod.dm +++ b/code/datums/ai/objects/mod.dm @@ -34,12 +34,11 @@ behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT|AI_BEHAVIOR_MOVE_AND_PERFORM /datum/ai_behavior/mod_attach/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() if(!controller.pawn.Adjacent(controller.blackboard[BB_MOD_TARGET])) - return + return AI_BEHAVIOR_DELAY var/obj/item/implant/mod/implant = controller.blackboard[BB_MOD_IMPLANT] implant.module.attach(controller.blackboard[BB_MOD_TARGET]) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/mod_attach/finish_action(datum/ai_controller/controller, succeeded) . = ..() diff --git a/code/datums/ai/objects/vending_machines/vending_machine_behaviors.dm b/code/datums/ai/objects/vending_machines/vending_machine_behaviors.dm index b4e5609531c..d6310bfc9f3 100644 --- a/code/datums/ai/objects/vending_machines/vending_machine_behaviors.dm +++ b/code/datums/ai/objects/vending_machines/vending_machine_behaviors.dm @@ -10,15 +10,15 @@ set_movement_target(controller, controller.blackboard[target_key]) /datum/ai_behavior/vendor_crush/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() if(controller.blackboard[BB_VENDING_BUSY_TILTING]) - return + return AI_BEHAVIOR_DELAY controller.ai_movement.stop_moving_towards(controller) controller.set_blackboard_key(BB_VENDING_BUSY_TILTING, TRUE) var/turf/target_turf = get_turf(controller.blackboard[BB_VENDING_CURRENT_TARGET]) new /obj/effect/temp_visual/telegraphing/vending_machine_tilt(target_turf) addtimer(CALLBACK(src, PROC_REF(tiltonmob), controller, target_turf), time_to_tilt) + return AI_BEHAVIOR_DELAY /datum/ai_behavior/vendor_crush/proc/tiltonmob(datum/ai_controller/controller, turf/target_turf) var/obj/machinery/vending/vendor_pawn = controller.pawn @@ -40,10 +40,9 @@ var/succes_tilt_cooldown = 5 SECONDS /datum/ai_behavior/vendor_rise_up/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/obj/machinery/vending/vendor_pawn = controller.pawn vendor_pawn.visible_message(span_warning("[vendor_pawn] untilts itself!")) if(controller.blackboard[BB_VENDING_LAST_HIT_SUCCESFUL]) controller.set_blackboard_key(BB_VENDING_TILT_COOLDOWN, world.time + succes_tilt_cooldown) vendor_pawn.untilt() - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/robot_customer/robot_customer_behaviors.dm b/code/datums/ai/robot_customer/robot_customer_behaviors.dm index 35fd26d76f6..7aa0f34f520 100644 --- a/code/datums/ai/robot_customer/robot_customer_behaviors.dm +++ b/code/datums/ai/robot_customer/robot_customer_behaviors.dm @@ -2,7 +2,6 @@ action_cooldown = 8 SECONDS /datum/ai_behavior/find_seat/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/mob/living/basic/robot_customer/customer_pawn = controller.pawn var/datum/customer_data/customer_data = controller.blackboard[BB_CUSTOMER_CUSTOMERINFO] var/datum/venue/attending_venue = controller.blackboard[BB_CUSTOMER_ATTENDING_VENUE] @@ -28,22 +27,20 @@ customer_pawn.say(pick(customer_data.found_seat_lines)) controller.set_blackboard_key(BB_CUSTOMER_MY_SEAT, found_seat) attending_venue.linked_seats[found_seat] = customer_pawn - finish_action(controller, TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED // SPT_PROB 1.5 is about a 60% chance that the tourist will have vocalised at least once every minute. if(!controller.blackboard[BB_CUSTOMER_SAID_CANT_FIND_SEAT_LINE] || SPT_PROB(1.5, seconds_per_tick)) customer_pawn.say(pick(customer_data.cant_find_seat_lines)) controller.set_blackboard_key(BB_CUSTOMER_SAID_CANT_FIND_SEAT_LINE, TRUE) - finish_action(controller, FALSE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /datum/ai_behavior/order_food behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT required_distance = 0 /datum/ai_behavior/order_food/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/mob/living/basic/robot_customer/customer_pawn = controller.pawn var/datum/customer_data/customer_data = controller.blackboard[BB_CUSTOMER_CUSTOMERINFO] var/obj/structure/holosign/robot_seat/seat_marker = controller.blackboard[BB_CUSTOMER_MY_SEAT] @@ -55,23 +52,19 @@ var/datum/venue/attending_venue = controller.blackboard[BB_CUSTOMER_ATTENDING_VENUE] controller.set_blackboard_key(BB_CUSTOMER_CURRENT_ORDER, attending_venue.order_food(customer_pawn, customer_data)) - - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/wait_for_food behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM required_distance = 0 /datum/ai_behavior/wait_for_food/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() if(controller.blackboard[BB_CUSTOMER_EATING]) - finish_action(controller, TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED controller.add_blackboard_key(BB_CUSTOMER_PATIENCE, seconds_per_tick * -1 SECONDS) // Convert seconds_per_tick to a SECONDS equivalent. if(controller.blackboard[BB_CUSTOMER_PATIENCE] < 0 || controller.blackboard[BB_CUSTOMER_LEAVING]) // Check if we're leaving because sometthing mightve forced us to - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED // SPT_PROB 1.5 is about a 40% chance that the tourist will have vocalised at least once every minute. if(SPT_PROB(0.85, seconds_per_tick)) @@ -95,6 +88,7 @@ customer.eat_order(I, attending_venue) break + return AI_BEHAVIOR_DELAY /datum/ai_behavior/wait_for_food/finish_action(datum/ai_controller/controller, succeeded) . = ..() @@ -121,6 +115,5 @@ set_movement_target(controller, attending_venue.restaurant_portal) /datum/ai_behavior/leave_venue/perform(seconds_per_tick, datum/ai_controller/controller, venue_key) - . = ..() qdel(controller.pawn) //save the world, my final message, goodbye. - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/brain_damage/special.dm b/code/datums/brain_damage/special.dm index 5b8666413e3..1bf011e0fab 100644 --- a/code/datums/brain_damage/special.dm +++ b/code/datums/brain_damage/special.dm @@ -491,6 +491,7 @@ owner.ai_controller = new /datum/ai_controller/monkey(owner) owner.ai_controller.continue_processing_when_client = TRUE + owner.ai_controller.can_idle = FALSE owner.ai_controller.set_ai_status(AI_STATUS_OFF) /datum/brain_trauma/special/primal_instincts/on_lose(silent) @@ -514,7 +515,7 @@ owner.grant_language(/datum/language/monkey, UNDERSTOOD_LANGUAGE, TRAUMA_TRAIT) owner.ai_controller.set_blackboard_key(BB_MONKEY_AGGRESSIVE, prob(75)) if(owner.ai_controller.ai_status == AI_STATUS_OFF) - owner.ai_controller.set_ai_status(AI_STATUS_IDLE) + owner.ai_controller.set_ai_status(AI_STATUS_ON) owner.log_message("became controlled by monkey instincts ([owner.ai_controller.blackboard[BB_MONKEY_AGGRESSIVE] ? "aggressive" : "docile"])", LOG_ATTACK, color = "orange") to_chat(owner, span_warning("You feel the urge to act on your primal instincts...")) // extend original timer if we roll the effect while it's already ongoing diff --git a/code/datums/components/conveyor_movement.dm b/code/datums/components/conveyor_movement.dm index d8affca3649..61a0066ff4a 100644 --- a/code/datums/components/conveyor_movement.dm +++ b/code/datums/components/conveyor_movement.dm @@ -15,7 +15,7 @@ if(!start_delay) start_delay = speed var/atom/movable/moving_parent = parent - var/datum/move_loop/loop = SSmove_manager.move(moving_parent, direction, delay = start_delay, subsystem = SSconveyors, flags=MOVEMENT_LOOP_IGNORE_PRIORITY|MOVEMENT_LOOP_OUTSIDE_CONTROL) + var/datum/move_loop/loop = DSmove_manager.move(moving_parent, direction, delay = start_delay, subsystem = SSconveyors, flags=MOVEMENT_LOOP_IGNORE_PRIORITY|MOVEMENT_LOOP_OUTSIDE_CONTROL) RegisterSignal(loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(should_move)) RegisterSignal(loop, COMSIG_QDELETING, PROC_REF(loop_ended)) diff --git a/code/datums/components/crafting/_recipes.dm b/code/datums/components/crafting/_recipes.dm index 4254804974e..09121339d30 100644 --- a/code/datums/components/crafting/_recipes.dm +++ b/code/datums/components/crafting/_recipes.dm @@ -41,6 +41,8 @@ var/result_amount /// Whether we should delete the contents of the crafted storage item (Only works with storage items, used for ammo boxes, donut boxes, internals boxes, etc) var/delete_contents = TRUE + /// Allows you to craft so that you don't have to click the craft button many times. + var/mass_craftable = FALSE /datum/crafting_recipe/New() if(!name && result) diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm index a6a905ccdb4..6fc560a293f 100644 --- a/code/datums/components/crafting/crafting.dm +++ b/code/datums/components/crafting/crafting.dm @@ -458,28 +458,39 @@ return data +/datum/component/personal_crafting/proc/make_action(datum/crafting_recipe/recipe, mob/user) + var/atom/movable/result = construct_item(user, recipe) + if(istext(result)) //We failed to make an item and got a fail message + to_chat(user, span_warning("Construction failed[result]")) + return FALSE + if(ismob(user) && isitem(result)) //In case the user is actually possessing a non mob like a machine + user.put_in_hands(result) + else if(!istype(result, /obj/effect/spawner)) + result.forceMove(user.drop_location()) + to_chat(user, span_notice("[recipe.name] crafted.")) + user.investigate_log("crafted [recipe]", INVESTIGATE_CRAFTING) + recipe.on_craft_completion(user, result) + return TRUE + + /datum/component/personal_crafting/ui_act(action, params) . = ..() if(.) return switch(action) - if("make") + if("make", "make_mass") var/mob/user = usr var/datum/crafting_recipe/crafting_recipe = locate(params["recipe"]) in (mode ? GLOB.cooking_recipes : GLOB.crafting_recipes) busy = TRUE ui_interact(user) - var/atom/movable/result = construct_item(user, crafting_recipe) - if(!istext(result)) //We made an item and didn't get a fail message - if(ismob(user) && isitem(result)) //In case the user is actually possessing a non mob like a machine - user.put_in_hands(result) - else - if(!istype(result, /obj/effect/spawner)) - result.forceMove(user.drop_location()) - to_chat(user, span_notice("[crafting_recipe.name] crafted.")) - user.investigate_log("crafted [crafting_recipe]", INVESTIGATE_CRAFTING) - crafting_recipe.on_craft_completion(user, result) + if(action == "make_mass") + var/crafted_items = 0 + while(make_action(crafting_recipe, user)) + crafted_items++ + if(crafted_items) + to_chat(user, span_notice("You made [crafted_items] item\s.")) else - to_chat(user, span_warning("Construction failed[result]")) + make_action(crafting_recipe, user) busy = FALSE if("toggle_recipes") display_craftable_only = !display_craftable_only @@ -549,6 +560,7 @@ // Crafting if(recipe.non_craftable) data["non_craftable"] = recipe.non_craftable + data["mass_craftable"] = recipe.mass_craftable if(recipe.steps) data["steps"] = recipe.steps diff --git a/code/datums/components/crafting/entertainment.dm b/code/datums/components/crafting/entertainment.dm index dae810c220a..84b2ef163bb 100644 --- a/code/datums/components/crafting/entertainment.dm +++ b/code/datums/components/crafting/entertainment.dm @@ -112,6 +112,7 @@ /obj/item/spear/explosive, /obj/item/spear/bonespear, /obj/item/spear/bamboospear, + /obj/item/spear/military, ) result = /obj/structure/headpike category = CAT_ENTERTAINMENT @@ -144,6 +145,20 @@ result = /obj/structure/headpike/bamboo category = CAT_ENTERTAINMENT +/datum/crafting_recipe/headpikemilitary + name = "Spike Head (Military)" + time = 6.5 SECONDS + reqs = list( + /obj/item/spear/military = 1, + /obj/item/bodypart/head = 1, + ) + parts = list( + /obj/item/bodypart/head = 1, + /obj/item/spear/military = 1, + ) + result = /obj/structure/headpike/military + category = CAT_ENTERTAINMENT + /datum/crafting_recipe/guillotine name = "Guillotine" result = /obj/structure/guillotine diff --git a/code/datums/components/drift.dm b/code/datums/components/drift.dm index 6b91a83534f..f8ad46e3ec3 100644 --- a/code/datums/components/drift.dm +++ b/code/datums/components/drift.dm @@ -23,7 +23,7 @@ if(instant) flags |= MOVEMENT_LOOP_START_FAST var/atom/movable/movable_parent = parent - drifting_loop = SSmove_manager.move(moving = parent, direction = direction, delay = movable_parent.inertia_move_delay, subsystem = SSspacedrift, priority = MOVEMENT_SPACE_PRIORITY, flags = flags) + drifting_loop = DSmove_manager.move(moving = parent, direction = direction, delay = movable_parent.inertia_move_delay, subsystem = SSspacedrift, priority = MOVEMENT_SPACE_PRIORITY, flags = flags) if(!drifting_loop) //Really want to qdel here but can't return COMPONENT_INCOMPATIBLE diff --git a/code/datums/components/explodable.dm b/code/datums/components/explodable.dm index 956d562bfb6..439b1563521 100644 --- a/code/datums/components/explodable.dm +++ b/code/datums/components/explodable.dm @@ -122,13 +122,7 @@ if(!istype(wearer)) return FALSE - // Maybe switch this over if we have a get_all_clothing or similar proc for carbon mobs. - // get_all_worn_items is a lie, they include pockets. - var/list/worn_items = list() - worn_items += list(wearer.head, wearer.wear_mask, wearer.gloves, wearer.shoes, wearer.glasses, wearer.ears) - if(ishuman(wearer)) - var/mob/living/carbon/human/human_wearer = wearer - worn_items += list(human_wearer.wear_suit, human_wearer.w_uniform) + var/list/worn_items = wearer.get_equipped_items() if(!(item in worn_items)) return FALSE diff --git a/code/datums/components/force_move.dm b/code/datums/components/force_move.dm index b8c36818621..6c1c1e38e5f 100644 --- a/code/datums/components/force_move.dm +++ b/code/datums/components/force_move.dm @@ -9,7 +9,7 @@ var/mob/mob_parent = parent var/dist = get_dist(mob_parent, target) - var/datum/move_loop/loop = SSmove_manager.move_towards(mob_parent, target, delay = 1, timeout = dist) + var/datum/move_loop/loop = DSmove_manager.move_towards(mob_parent, target, delay = 1, timeout = dist) RegisterSignal(mob_parent, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE, PROC_REF(stop_move)) RegisterSignal(mob_parent, COMSIG_ATOM_PRE_PRESSURE_PUSH, PROC_REF(stop_pressure)) if(spin) diff --git a/code/datums/components/fullauto.dm b/code/datums/components/fullauto.dm index 33b713e8a57..1faa04ceacc 100644 --- a/code/datums/components/fullauto.dm +++ b/code/datums/components/fullauto.dm @@ -249,7 +249,7 @@ if(get_dist(shooter, target) <= 0) target = get_step(shooter, shooter.dir) //Shoot in the direction faced if the mouse is on the same tile as we are. target_loc = target - else if(!in_view_range(shooter, target)) + else if(!CAN_THEY_SEE(target, shooter)) stop_autofiring() //Elvis has left the building. return FALSE shooter.face_atom(target) diff --git a/code/datums/components/material/remote_materials.dm b/code/datums/components/material/remote_materials.dm index 568b018e58b..695a02bcb96 100644 --- a/code/datums/components/material/remote_materials.dm +++ b/code/datums/components/material/remote_materials.dm @@ -86,7 +86,7 @@ handles linking back and forth. mat_container = parent.AddComponent( \ /datum/component/material_container, \ - SSmaterials.materials_by_category[MAT_CATEGORY_SILO], \ + DSmaterials.materials_by_category[MAT_CATEGORY_SILO], \ local_size, \ mat_container_flags, \ container_signals = mat_container_signals, \ diff --git a/code/datums/components/plumbing/splitter.dm b/code/datums/components/plumbing/splitter.dm index 4dd68a9e578..5ade1dfebc3 100644 --- a/code/datums/components/plumbing/splitter.dm +++ b/code/datums/components/plumbing/splitter.dm @@ -43,5 +43,6 @@ if(EAST) if(amount >= S.transfer_side) amount = S.transfer_side + S.use_energy(S.active_power_usage) return ..() diff --git a/code/datums/components/ranged_mob_full_auto.dm b/code/datums/components/ranged_mob_full_auto.dm index a33b705d548..ff3bfcfe60f 100644 --- a/code/datums/components/ranged_mob_full_auto.dm +++ b/code/datums/components/ranged_mob_full_auto.dm @@ -56,7 +56,7 @@ if (get_dist(living_parent, target) <= 0) set_target(get_step(living_parent, living_parent.dir)) // Shoot in the direction faced if the mouse is on the same tile as we are. target_loc = target - else if (!in_view_range(living_parent, target)) + else if (!CAN_THEY_SEE(target, living_parent)) stop_firing() return FALSE // Can't see shit diff --git a/code/datums/components/shuttle_cling.dm b/code/datums/components/shuttle_cling.dm index 6702b9d601d..724060c9cbe 100644 --- a/code/datums/components/shuttle_cling.dm +++ b/code/datums/components/shuttle_cling.dm @@ -51,7 +51,7 @@ update_state(parent) //otherwise we'll get moved 1 tile before we can correct ourselves, which isnt super bad but just looks jank /datum/component/shuttle_cling/proc/initialize_loop() - hyperloop = SSmove_manager.move(moving = parent, direction = direction, delay = not_clinging_move_delay, subsystem = SShyperspace_drift, priority = MOVEMENT_ABOVE_SPACE_PRIORITY, flags = MOVEMENT_LOOP_NO_DIR_UPDATE|MOVEMENT_LOOP_OUTSIDE_CONTROL) + hyperloop = DSmove_manager.move(moving = parent, direction = direction, delay = not_clinging_move_delay, subsystem = SShyperspace_drift, priority = MOVEMENT_ABOVE_SPACE_PRIORITY, flags = MOVEMENT_LOOP_NO_DIR_UPDATE|MOVEMENT_LOOP_OUTSIDE_CONTROL) update_state() /datum/component/shuttle_cling/proc/clear_loop() diff --git a/code/datums/components/surgery_initiator.dm b/code/datums/components/surgery_initiator.dm index 24bde4b4672..c609d7216e0 100644 --- a/code/datums/components/surgery_initiator.dm +++ b/code/datums/components/surgery_initiator.dm @@ -135,8 +135,11 @@ required_tool_type = TOOL_SCREWDRIVER if(iscyborg(user)) - close_tool = locate(/obj/item/cautery) in user.held_items - if(!close_tool) + var/has_cautery = FALSE + for(var/obj/item/borg/cyborg_omnitool/medical/omnitool in user.held_items) + if(omnitool.tool_behaviour == TOOL_CAUTERY) + has_cautery = TRUE + if(!has_cautery) patient.balloon_alert(user, "need a cautery in an inactive slot to stop the surgery!") return else if(!close_tool || close_tool.tool_behaviour != required_tool_type) diff --git a/code/datums/elements/ai_control_examine.dm b/code/datums/elements/ai_control_examine.dm index b470ac44b49..279fc80dc81 100644 --- a/code/datums/elements/ai_control_examine.dm +++ b/code/datums/elements/ai_control_examine.dm @@ -46,7 +46,7 @@ if(noticable_organ_examines[possibly_noticable.slot]) make_organ_noticable(possibly_noticable.slot, possibly_noticable) -/datum/element/ai_control_examine/proc/make_organ_noticable(organ_slot, obj/item/organ/noticable_organ) +/datum/element/ai_control_examine/proc/make_organ_noticable(organ_slot, obj/item/organ/noticable_organ, mob/living/carbon/human/human_pawn) var/examine_text = noticable_organ_examines[organ_slot] var/body_zone = organ_slot != ORGAN_SLOT_BRAIN ? noticable_organ.zone : null noticable_organ.AddElement(/datum/element/noticable_organ/ai_control, examine_text, body_zone) diff --git a/code/datums/elements/noticable_organ.dm b/code/datums/elements/noticable_organ.dm index 1a6a895e535..a6247d18bb5 100644 --- a/code/datums/elements/noticable_organ.dm +++ b/code/datums/elements/noticable_organ.dm @@ -6,15 +6,13 @@ /datum/element/noticable_organ element_flags = ELEMENT_BESPOKE argument_hash_start_idx = 2 - /// whether we wrap the examine text in a notice span. - var/add_span = TRUE - /// "[they]|[their] [desc here]", shows on examining someone with an infused organ. - /// Uses a possessive pronoun (His/Her/Their) if a body zone is given, or a singular pronoun (He/She/They) otherwise. + + ///Shows on examining someone with an infused organ. var/infused_desc - /// Which body zone has to be exposed. If none is set, this is always noticable, and the description pronoun becomes singular instead of possesive. + /// Which body zone has to be exposed. If none is set, this is always noticable. var/body_zone -/datum/element/noticable_organ/Attach(datum/target, infused_desc, body_zone) +/datum/element/noticable_organ/Attach(obj/item/organ/target, infused_desc, body_zone) . = ..() if(!isorgan(target)) @@ -23,8 +21,10 @@ src.infused_desc = infused_desc src.body_zone = body_zone - RegisterSignal(target, COMSIG_ORGAN_IMPLANTED, PROC_REF(on_implanted)) + RegisterSignal(target, COMSIG_ORGAN_IMPLANTED, PROC_REF(enable_description)) RegisterSignal(target, COMSIG_ORGAN_REMOVED, PROC_REF(on_removed)) + if(target.owner) + enable_description(target, target.owner) /datum/element/noticable_organ/Detach(obj/item/organ/target) UnregisterSignal(target, list(COMSIG_ORGAN_IMPLANTED, COMSIG_ORGAN_REMOVED)) @@ -38,7 +38,7 @@ return FALSE return TRUE -/datum/element/noticable_organ/proc/on_implanted(obj/item/organ/target, mob/living/carbon/receiver) +/datum/element/noticable_organ/proc/enable_description(obj/item/organ/target, mob/living/carbon/receiver) SIGNAL_HANDLER RegisterSignal(receiver, COMSIG_ATOM_EXAMINE, PROC_REF(on_receiver_examine)) @@ -53,16 +53,17 @@ if(!should_show_text(examined)) return - var/examine_text = replacetext(replacetext("[body_zone ? examined.p_Their() : examined.p_They()] [infused_desc]", "%PRONOUN_ES", examined.p_es()), "%PRONOUN_S", examined.p_s()) - if(add_span) - examine_text = span_notice(examine_text) + + var/examine_text = REPLACE_PRONOUNS(infused_desc, examined) + + examine_list += examine_text /** * Subtype of noticable organs for AI control, that will make a few more ai status checks before forking over the examine. */ /datum/element/noticable_organ/ai_control - add_span = FALSE + /datum/element/noticable_organ/ai_control/should_show_text(mob/living/carbon/examined) . = ..() diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index ec111fb3cf0..8e20dfbef9c 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -1,87 +1,271 @@ +#define LEFT_RIGHT_COMBO "DH" +#define RIGHT_LEFT_COMBO "HD" +#define LEFT_LEFT_COMBO "HH" +#define RIGHT_RIGHT_COMBO "DD" + /datum/martial_art/boxing name = "Boxing" id = MARTIALART_BOXING pacifist_style = TRUE + ///Boolean on whether we are sportsmanlike in our tussling; TRUE means we have restrictions + var/honorable_boxer = TRUE + /// List of traits applied to users of this martial art. + var/list/boxing_traits = list(TRAIT_BOXING_READY) + /// Balloon alert cooldown for warning our boxer to alternate their blows to get more damage + COOLDOWN_DECLARE(warning_cooldown) /datum/martial_art/boxing/teach(mob/living/new_holder, make_temporary) if(!ishuman(new_holder)) return FALSE + new_holder.add_traits(boxing_traits, BOXING_TRAIT) + RegisterSignal(new_holder, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(check_block)) return ..() -/datum/martial_art/boxing/disarm_act(mob/living/carbon/human/attacker, mob/living/defender) - attacker.balloon_alert(attacker, "can't disarm while boxing!") - return MARTIAL_ATTACK_FAIL +/datum/martial_art/boxing/on_remove(mob/living/remove_from) + remove_from.remove_traits(boxing_traits, BOXING_TRAIT) + UnregisterSignal(remove_from, list(COMSIG_LIVING_CHECK_BLOCK)) + return ..() -/datum/martial_art/boxing/grab_act(mob/living/carbon/human/attacker, mob/living/defender) - attacker.balloon_alert(attacker, "can't grab while boxing!") - return MARTIAL_ATTACK_FAIL +///Unlike most instances of this proc, this is actually called in _proc/tussle() +///Returns a multiplier on our skill damage bonus. +/datum/martial_art/boxing/proc/check_streak(mob/living/attacker, mob/living/defender) + var/combo_multiplier = 1 + + if(findtext(streak, LEFT_LEFT_COMBO) || findtext(streak, RIGHT_RIGHT_COMBO)) + reset_streak() + if(COOLDOWN_FINISHED(src, warning_cooldown)) + COOLDOWN_START(src, warning_cooldown, 2 SECONDS) + attacker.balloon_alert(attacker, "weak combo, alternate your hits!") + return combo_multiplier * 0.5 + + if(findtext(streak, LEFT_RIGHT_COMBO) || findtext(streak, RIGHT_LEFT_COMBO)) + reset_streak() + return combo_multiplier * 1.5 + + return combo_multiplier + +/datum/martial_art/boxing/disarm_act(mob/living/attacker, mob/living/defender) + if(honor_check(defender)) + add_to_streak("D", defender) + tussle(attacker, defender, "right hook", "right hooked") + return MARTIAL_ATTACK_SUCCESS + +/datum/martial_art/boxing/grab_act(mob/living/attacker, mob/living/defender) + if(honorable_boxer) + attacker.balloon_alert(attacker, "no grabbing while boxing!") + return MARTIAL_ATTACK_FAIL + return MARTIAL_ATTACK_INVALID //UNLESS YOU'RE EVIL + +/datum/martial_art/boxing/harm_act(mob/living/attacker, mob/living/defender) + if(honor_check(defender)) + add_to_streak("H", defender) + tussle(attacker, defender, "left hook", "left hooked") + return MARTIAL_ATTACK_SUCCESS + +// Our only boxing move, which occurs on literally all attacks; the tussle. However, quite a lot morphs the results of this proc. Combos, unlike most martial arts attacks, are checked in this proc rather than our standard unarmed procs +/datum/martial_art/boxing/proc/tussle(mob/living/attacker, mob/living/defender, atk_verb = "blind jab", atk_verbed = "blind jabbed") + + if(honorable_boxer) //Being a good sport, you never hit someone on the ground or already knocked down. It shows you're the better person. + if(defender.body_position == LYING_DOWN && defender.getStaminaLoss() >= 100 || defender.IsUnconscious()) //If they're in stamcrit or unconscious, don't bloody punch them + attacker.balloon_alert(attacker, "unsportsmanlike behaviour!") + return FALSE -/datum/martial_art/boxing/harm_act(mob/living/carbon/human/attacker, mob/living/defender) var/obj/item/bodypart/arm/active_arm = attacker.get_active_hand() + + //The values between which damage is rolled for punches + var/lower_force = active_arm.unarmed_damage_low + var/upper_force = active_arm.unarmed_damage_high + + //Determines knockout potential and armor penetration (if that matters) + var/base_unarmed_effectiveness = active_arm.unarmed_effectiveness + + //Determines attack sound based on attacker arm + var/attack_sound = active_arm.unarmed_attack_sound + + // Out athletics skill is added as a damage bonus + var/athletics_skill = attacker.mind?.get_skill_level(/datum/skill/athletics) + + // If true, grants experience for punching; we only gain experience if we punch another boxer. + var/grant_experience = FALSE + + // What type of damage does our kind of boxing do? Defaults to STAMINA, unless you're performing EVIL BOXING + var/damage_type = honorable_boxer ? STAMINA : attacker.get_attack_type() + attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) - var/damage = rand(5, 8) + active_arm.unarmed_damage_low - var/atk_verb = pick("left hook", "right hook", "straight punch") - if(damage <= 0) - playsound(defender, active_arm.unarmed_miss_sound, 25, TRUE, -1) - defender.visible_message( - span_warning("[attacker]'s [atk_verb] misses [defender]!"), - span_danger("You avoid [attacker]'s [atk_verb]!"), - span_hear("You hear a swoosh!"), - COMBAT_MESSAGE_RANGE, - attacker, - ) - to_chat(attacker, span_warning("Your [atk_verb] misses [defender]!")) - log_combat(attacker, defender, "attempted to hit", atk_verb) - return MARTIAL_ATTACK_FAIL + //Determines damage dealt on a punch. Against a boxing defender, we apply our skill bonus. + var/damage = rand(lower_force, upper_force) - if(defender.check_block(attacker, damage, "[attacker]'s [atk_verb]", UNARMED_ATTACK)) - return MARTIAL_ATTACK_FAIL + if(honor_check(defender)) + var/strength_bonus = HAS_TRAIT(attacker, TRAIT_STRENGTH) ? 2 : 0 //Investing into genetic strength improvements makes you a better boxer + damage += round(athletics_skill * check_streak(attacker, defender) + strength_bonus) + grant_experience = TRUE + + var/current_atk_verb = atk_verb + var/current_atk_verbed = atk_verbed + + if(is_detective_job(attacker.mind?.assigned_role)) //In short: discombobulate + current_atk_verb = "discombobulate" + current_atk_verbed = "discombulated" + + // Similar to a normal punch, should we have a value of 0 for our lower force, we simply miss outright. + if(!lower_force) + playsound(defender.loc, active_arm.unarmed_miss_sound, 25, TRUE, -1) + defender.visible_message(span_warning("[attacker]'s [current_atk_verb] misses [defender]!"), \ + span_danger("You avoid [attacker]'s [current_atk_verb]!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, attacker) + to_chat(attacker, span_warning("Your [current_atk_verb] misses [defender]!")) + log_combat(attacker, defender, "attempted to hit", current_atk_verb) + return FALSE + + if(defender.check_block(attacker, damage, "[attacker]'s [current_atk_verb]", UNARMED_ATTACK)) + return FALSE var/obj/item/bodypart/affecting = defender.get_bodypart(defender.get_random_valid_zone(attacker.zone_selected)) - var/armor_block = defender.run_armor_check(affecting, MELEE) + var/armor_block = defender.run_armor_check(affecting, MELEE, armour_penetration = base_unarmed_effectiveness) + + playsound(defender, attack_sound, 25, TRUE, -1) - playsound(defender, active_arm.unarmed_attack_sound, 25, TRUE, -1) defender.visible_message( - span_danger("[attacker] [atk_verb]ed [defender]!"), - span_userdanger("You're [atk_verb]ed by [attacker]!"), + span_danger("[attacker] [current_atk_verbed] [defender]!"), + span_userdanger("You're [current_atk_verbed] by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacker, ) - to_chat(attacker, span_danger("You [atk_verb]ed [defender]!")) - defender.apply_damage(damage, STAMINA, affecting, armor_block) + + to_chat(attacker, span_danger("You [current_atk_verbed] [defender]!")) + + defender.apply_damage(damage, damage_type, affecting, armor_block) + log_combat(attacker, defender, "punched (boxing) ") - if(defender.getStaminaLoss() > 50 && istype(defender.mind?.martial_art, /datum/martial_art/boxing)) - var/knockout_prob = defender.getStaminaLoss() + rand(-15, 15) - if(defender.stat != DEAD && prob(knockout_prob)) - defender.visible_message( - span_danger("[attacker] knocks [defender] out with a haymaker!"), - span_userdanger("You're knocked unconscious by [attacker]!"), - span_hear("You hear a sickening sound of flesh hitting flesh!"), - COMBAT_MESSAGE_RANGE, - attacker, - ) - to_chat(attacker, span_danger("You knock [defender] out with a haymaker!")) - defender.apply_effect(20 SECONDS, EFFECT_KNOCKDOWN, armor_block) - defender.SetSleeping(10 SECONDS) - log_combat(attacker, defender, "knocked out (boxing) ") - return MARTIAL_ATTACK_SUCCESS + + if(grant_experience) + skill_experience_adjustment(attacker, (damage/lower_force)) + + if(defender.stat == DEAD || !honor_check(defender)) //early returning here so we don't worry about knockout probs + return TRUE + + //Determine our attackers athletics level as a knockout probability bonus + var/attacker_athletics_skill = (attacker.mind?.get_skill_modifier(/datum/skill/athletics, SKILL_RANDS_MODIFIER) + base_unarmed_effectiveness) + + // Defender boxing skill and armor block are used as a defense here. This has already factored in base_unarmed_effectiveness from the attacker + var/defender_athletics_skill = clamp(defender.mind?.get_skill_modifier(/datum/skill/athletics, SKILL_RANDS_MODIFIER), 0, 100) + + //Determine our final probability, using a clamp to stop any prob() weirdness. + var/final_knockout_probability = clamp(round(attacker_athletics_skill - defender_athletics_skill), 0 , 100) + + if(!prob(final_knockout_probability)) + return TRUE + + if(defender.get_timed_status_effect_duration(/datum/status_effect/staggered)) + defender.visible_message( + span_danger("[attacker] knocks [defender] out with a haymaker!"), + span_userdanger("You're knocked unconscious by [attacker]!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + COMBAT_MESSAGE_RANGE, + attacker, + ) + to_chat(attacker, span_danger("You knock [defender] out with a haymaker!")) + defender.apply_effect(20 SECONDS, EFFECT_KNOCKDOWN, armor_block) + defender.SetSleeping(10 SECONDS) + log_combat(attacker, defender, "knocked out (boxing) ") + else + defender.visible_message( + span_danger("[attacker] staggers [defender] with a haymaker!"), + span_userdanger("You're nearly knocked off your feet by [attacker]!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + COMBAT_MESSAGE_RANGE, + attacker, + ) + defender.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH, 10 SECONDS) + to_chat(attacker, span_danger("You stagger [defender] with a haymaker!")) + log_combat(attacker, defender, "staggered (boxing) ") + + playsound(defender, 'sound/effects/coin2.ogg', 40, TRUE) + new /obj/effect/temp_visual/crit(get_turf(defender)) + skill_experience_adjustment(attacker, (damage/lower_force)) //double experience for a successful crit + + return TRUE + +/// Returns whether whoever is checked by this proc is complying with the rules of boxing. The boxer cannot block non-boxers, and cannot apply their scariest moves against non-boxers. +/datum/martial_art/boxing/proc/honor_check(mob/living/possible_boxer) + if(!honorable_boxer) + return TRUE //You scoundrel!! + + if(!HAS_TRAIT(possible_boxer, TRAIT_BOXING_READY)) + return FALSE + + return TRUE + +/// Handles our instances of experience gain while boxing. It also applies the exercised status effect. +/datum/martial_art/boxing/proc/skill_experience_adjustment(mob/living/boxer, experience_value) + //Boxing in heavier gravity gives you more experience + var/gravity_modifier = boxer.has_gravity() > STANDARD_GRAVITY ? 1 : 0.5 + + //You gotta sleep before you get any experience! + boxer.mind?.adjust_experience(/datum/skill/athletics, experience_value * gravity_modifier) + boxer.apply_status_effect(/datum/status_effect/exercised) + +/// Handles our blocking signals, similar to hit_reaction() on items. Only blocks while the boxer is in throw mode. +/datum/martial_art/boxing/proc/check_block(mob/living/boxer, atom/movable/hitby, damage, attack_text, attack_type, ...) + SIGNAL_HANDLER + + if(!can_use(boxer) || !boxer.throw_mode || boxer.incapacitated(IGNORE_GRAB)) + return NONE + + if(attack_type != UNARMED_ATTACK) + return NONE + + //Determines unarmed defense against boxers using our current active arm. + var/obj/item/bodypart/arm/active_arm = boxer.get_active_hand() + var/base_unarmed_effectiveness = active_arm.unarmed_effectiveness + + // Out athletics skill is added to our block potential + var/athletics_skill_rands = boxer.mind?.get_skill_modifier(/datum/skill/athletics, SKILL_RANDS_MODIFIER) + + var/block_chance = base_unarmed_effectiveness + athletics_skill_rands + + var/block_text = pick("block", "evade") + + if(!prob(block_chance)) + return NONE + + var/mob/living/attacker = GET_ASSAILANT(hitby) + + if(!honor_check(attacker)) + return NONE + + if(istype(attacker) && boxer.Adjacent(attacker)) + attacker.apply_damage(10, STAMINA) + boxer.apply_damage(5, STAMINA) + + boxer.visible_message( + span_danger("[boxer] [block_text]s [attack_text]!"), + span_userdanger("You [block_text] [attack_text]!"), + ) + if(block_text == "evade") + playsound(boxer.loc, active_arm.unarmed_miss_sound, 25, TRUE, -1) + + skill_experience_adjustment(boxer, 1) //just getting hit a bunch doesn't net you much experience + + return SUCCESSFUL_BLOCK /datum/martial_art/boxing/can_use(mob/living/martial_artist) if(!ishuman(martial_artist)) return FALSE return ..() -/obj/item/clothing/gloves/boxing +/// Evil Boxing; for sick, evil scoundrels. Has no honor, making it more lethal (therefore unable to be used by pacifists). +/// Grants Strength and Stimmed to speed up any experience gain. -/obj/item/clothing/gloves/boxing/Initialize(mapload) - . = ..() - var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/extendohand_l, /datum/crafting_recipe/extendohand_r) +/datum/martial_art/boxing/evil + name = "Evil Boxing" + id = MARTIALART_EVIL_BOXING + pacifist_style = FALSE + honorable_boxer = FALSE + boxing_traits = list(TRAIT_BOXING_READY, TRAIT_STRENGTH, TRAIT_STIMMED) - AddComponent( - /datum/component/slapcrafting,\ - slapcraft_recipes = slapcraft_recipe_list,\ - ) - - AddComponent(/datum/component/martial_art_giver, /datum/martial_art/boxing) +#undef LEFT_RIGHT_COMBO +#undef RIGHT_LEFT_COMBO +#undef LEFT_LEFT_COMBO +#undef RIGHT_RIGHT_COMBO diff --git a/code/datums/materials/_material.dm b/code/datums/materials/_material.dm index da5a15b8d31..9d6b8674728 100644 --- a/code/datums/materials/_material.dm +++ b/code/datums/materials/_material.dm @@ -10,7 +10,7 @@ Simple datum which is instanced once per type and is used for every object of sa var/name = "material" /// A short description of the material. Not used anywhere, yet... var/desc = "its..stuff." - /// What the material is indexed by in the SSmaterials.materials list. Defaults to the type of the material. + /// What the material is indexed by in the DSmaterials.materials list. Defaults to the type of the material. var/id ///Base color of the material, is used for greyscale. Item isn't changed in color if this is null. @@ -23,7 +23,7 @@ Simple datum which is instanced once per type and is used for every object of sa ///Starlight color of the material ///This is the color of light it'll emit if its turf is transparent and over space. Defaults to COLOR_STARLIGHT if not set var/starlight_color - ///Bitflags that influence how SSmaterials handles this material. + ///Bitflags that influence how DSmaterials handles this material. var/init_flags = MATERIAL_INIT_MAPLOAD ///Materials "Traits". its a map of key = category | Value = Bool. Used to define what it can be used for var/list/categories = list() diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index 6d3768704fb..b7b781c1819 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -279,15 +279,42 @@ desc = "The user's muscles slightly expand." quality = POSITIVE text_gain_indication = "You feel strong." + instability = 5 difficulty = 16 +/datum/mutation/human/strong/on_acquiring(mob/living/carbon/human/owner) + . = ..() + if(.) + return + ADD_TRAIT(owner, TRAIT_STRENGTH, GENETIC_MUTATION) + +/datum/mutation/human/strong/on_losing(mob/living/carbon/human/owner) + . = ..() + if(.) + return + REMOVE_TRAIT(owner, TRAIT_STRENGTH, GENETIC_MUTATION) + + /datum/mutation/human/stimmed name = "Stimmed" desc = "The user's chemical balance is more robust." quality = POSITIVE text_gain_indication = "You feel stimmed." + instability = 5 difficulty = 16 +/datum/mutation/human/stimmed/on_acquiring(mob/living/carbon/human/owner) + . = ..() + if(.) + return + ADD_TRAIT(owner, TRAIT_STIMMED, GENETIC_MUTATION) + +/datum/mutation/human/stimmed/on_losing(mob/living/carbon/human/owner) + . = ..() + if(.) + return + REMOVE_TRAIT(owner, TRAIT_STIMMED, GENETIC_MUTATION) + /datum/mutation/human/insulated name = "Insulated" desc = "The affected person does not conduct electricity." diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm index 8c8642a81ea..311725d9cc6 100644 --- a/code/datums/mutations/hulk.dm +++ b/code/datums/mutations/hulk.dm @@ -278,4 +278,22 @@ TRAIT_STUNIMMUNE, ) // no chunk +/datum/mutation/human/hulk/superhuman + health_req = 0 + instability = 0 + /// List of traits to add/remove when someone gets this mutation. + mutation_traits = list( + TRAIT_CHUNKYFINGERS, + TRAIT_HULK, + TRAIT_IGNOREDAMAGESLOWDOWN, + TRAIT_NOSOFTCRIT, + TRAIT_NOHARDCRIT, + TRAIT_PUSHIMMUNE, + TRAIT_STUNIMMUNE, + TRAIT_ANALGESIA, + ) // fight till your last breath + +/datum/mutation/human/hulk/superhuman/on_life(seconds_per_tick, times_fired) + return + #undef HULK_TAILTHROW_STEPS diff --git a/code/datums/proximity_monitor/fields/timestop.dm b/code/datums/proximity_monitor/fields/timestop.dm index a3e22483c7a..91e13c79142 100644 --- a/code/datums/proximity_monitor/fields/timestop.dm +++ b/code/datums/proximity_monitor/fields/timestop.dm @@ -214,7 +214,7 @@ frozen_mobs += victim victim.Stun(20, ignore_canstun = TRUE) victim.add_traits(list(TRAIT_MUTE, TRAIT_EMOTEMUTE), TIMESTOP_TRAIT) - SSmove_manager.stop_looping(victim) //stops them mid pathing even if they're stunimmune //This is really dumb + DSmove_manager.stop_looping(victim) //stops them mid pathing even if they're stunimmune //This is really dumb if(isanimal(victim)) var/mob/living/simple_animal/animal_victim = victim animal_victim.toggle_ai(AI_OFF) diff --git a/code/datums/shuttles/pirate.dm b/code/datums/shuttles/pirate.dm index c6f94b5684b..99f866d23fc 100644 --- a/code/datums/shuttles/pirate.dm +++ b/code/datums/shuttles/pirate.dm @@ -29,3 +29,7 @@ /datum/map_template/shuttle/pirate/geode suffix = "geode" name = "pirate ship (Lustrous Geode)" + +/datum/map_template/shuttle/pirate/medieval + suffix = "medieval" + name = "pirate ship (Siege Pod)" diff --git a/code/datums/skills/athletics.dm b/code/datums/skills/athletics.dm new file mode 100644 index 00000000000..2ef336e5ba9 --- /dev/null +++ b/code/datums/skills/athletics.dm @@ -0,0 +1,27 @@ +/datum/skill/athletics + name = "Athletics" + title = "Athlete" + desc = "Twinkle twinkle little star, hit the gym and lift the bar." + // The skill value modifier effects the max duration that is possible for /datum/status_effect/exercised; The rands modifier determines block probability and crit probability while boxing against boxers + modifiers = list( + SKILL_VALUE_MODIFIER = list( + 1 MINUTES, + 1.5 MINUTES, + 2 MINUTES, + 2.5 MINUTES, + 3 MINUTES, + 3.5 MINUTES, + 5 MINUTES + ), + SKILL_RANDS_MODIFIER = list( + 0, + 5, + 10, + 15, + 20, + 30, + 50 + ) + ) + + skill_item_path = /obj/item/clothing/gloves/boxing/golden diff --git a/code/datums/skills/fitness.dm b/code/datums/skills/fitness.dm deleted file mode 100644 index 945b21710c2..00000000000 --- a/code/datums/skills/fitness.dm +++ /dev/null @@ -1,25 +0,0 @@ -/datum/skill/fitness - name = "Fitness" - title = "Powerlifter" - desc = "Twinkle twinkle little star, hit the gym and lift the bar." - /// The skill value modifier effects the max duration that is possible for /datum/status_effect/exercised - modifiers = list(SKILL_VALUE_MODIFIER = list(1 MINUTES, 1.5 MINUTES, 2 MINUTES, 2.5 MINUTES, 3 MINUTES, 3.5 MINUTES, 5 MINUTES)) - /// How much bigger your mob becomes per level (these effects don't stack together) - var/static/size_boost = list(0, 1/16, 1/8, 3/16, 2/8, 3/8, 4/8) - // skill_item_path - your mob sprite gets bigger to showoff so we don't get a special item - -/* SKYRAT EDIT REMOVAL START - NO SIZE INCREASE -/datum/skill/fitness/level_gained(datum/mind/mind, new_level, old_level, silent) - . = ..() - var/old_gym_size = RESIZE_DEFAULT_SIZE + size_boost[old_level] - var/new_gym_size = RESIZE_DEFAULT_SIZE + size_boost[new_level] - - mind.current.update_transform(new_gym_size / old_gym_size) - -/datum/skill/fitness/level_lost(datum/mind/mind, new_level, old_level, silent) - . = ..() - var/old_gym_size = RESIZE_DEFAULT_SIZE + size_boost[old_level] - var/new_gym_size = RESIZE_DEFAULT_SIZE + size_boost[new_level] - - mind.current.update_transform(new_gym_size / old_gym_size) -SKYRAT EDIT REMOVAL END */ diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 39d5c3a3754..7c9a4e1cc1a 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -195,6 +195,9 @@ if(HAS_TRAIT(new_owner, TRAIT_HULK)) modifier += 0.5 + if(HAS_TRAIT(new_owner, TRAIT_STIMMED)) // Naturally produces stimulants to help get you PUMPED + modifier += 1 + if(HAS_TRAIT(new_owner, TRAIT_FAT)) // less xp until you get into shape modifier -= 0.5 @@ -209,10 +212,10 @@ if(new_owner.reagents.has_reagent(workout_reagent)) food_boost += supplementary_reagents_bonus[workout_reagent] - var/skill_level_boost = (new_owner.mind.get_skill_level(/datum/skill/fitness) - 1) * 2 SECONDS + var/skill_level_boost = (new_owner.mind.get_skill_level(/datum/skill/athletics) - 1) * 2 SECONDS bonus_time = (bonus_time + food_boost + skill_level_boost) * modifier - var/exhaustion_limit = new_owner.mind.get_skill_modifier(/datum/skill/fitness, SKILL_VALUE_MODIFIER) + world.time + var/exhaustion_limit = new_owner.mind.get_skill_modifier(/datum/skill/athletics, SKILL_VALUE_MODIFIER) + world.time if(duration + bonus_time >= exhaustion_limit) duration = exhaustion_limit to_chat(new_owner, span_userdanger("Your muscles are exhausted! Might be a good idea to sleep...")) @@ -228,10 +231,10 @@ /datum/status_effect/exercised/refresh(mob/living/new_owner, bonus_time) duration += workout_duration(new_owner, bonus_time) new_owner.clear_mood_event("exercise") // we need to reset the old mood event in case our fitness skill changes - new_owner.add_mood_event("exercise", /datum/mood_event/exercise, new_owner.mind.get_skill_level(/datum/skill/fitness)) + new_owner.add_mood_event("exercise", /datum/mood_event/exercise, new_owner.mind.get_skill_level(/datum/skill/athletics)) /datum/status_effect/exercised/on_apply() - owner.add_mood_event("exercise", /datum/mood_event/exercise, owner.mind.get_skill_level(/datum/skill/fitness)) + owner.add_mood_event("exercise", /datum/mood_event/exercise, owner.mind.get_skill_level(/datum/skill/athletics)) return ..() /datum/status_effect/exercised/on_remove() diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm index 362a9eee23b..feabf36312b 100644 --- a/code/datums/status_effects/debuffs/debuffs.dm +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -224,7 +224,7 @@ var/datum/status_effect/exercised/exercised = carbon_owner.has_status_effect(/datum/status_effect/exercised) if(exercised && carbon_owner.mind) // the better you sleep, the more xp you gain - carbon_owner.mind.adjust_experience(/datum/skill/fitness, seconds_between_ticks * sleep_quality * SLEEP_QUALITY_WORKOUT_MULTIPLER) + carbon_owner.mind.adjust_experience(/datum/skill/athletics, seconds_between_ticks * sleep_quality * SLEEP_QUALITY_WORKOUT_MULTIPLER) carbon_owner.adjust_timed_status_effect(-1 * seconds_between_ticks * sleep_quality * SLEEP_QUALITY_WORKOUT_MULTIPLER, /datum/status_effect/exercised) if(prob(2)) to_chat(carbon_owner, span_notice("You feel your fitness improving!")) diff --git a/code/datums/systems/_system.dm b/code/datums/systems/_system.dm new file mode 100644 index 00000000000..fe3271048ab --- /dev/null +++ b/code/datums/systems/_system.dm @@ -0,0 +1,16 @@ +#define NEW_DS_GLOBAL(varname) if(varname != src){if(istype(varname)){qdel(varname);}varname = src;} + +#define DATASYSTEM_DEF(X) GLOBAL_REAL(DS##X, /datum/system/##X);\ +/datum/system/##X/New(){\ + NEW_DS_GLOBAL(DS##X);\ +}\ +/datum/system/##X + + +/** + * Global systems which are distinct from subsystems in that they do not process by the MC. + * Data systems or "DS" are used to store round information and procs to interface with that data, if needed. + */ +/datum/system + /// Name of the system + var/name = "Datum System" diff --git a/code/controllers/subsystem/battle_royale.dm b/code/datums/systems/ds/battle_royale.dm similarity index 96% rename from code/controllers/subsystem/battle_royale.dm rename to code/datums/systems/ds/battle_royale.dm index 139a5aa8b49..1cdc7358a56 100644 --- a/code/controllers/subsystem/battle_royale.dm +++ b/code/datums/systems/ds/battle_royale.dm @@ -7,7 +7,7 @@ GLOBAL_LIST_INIT(battle_royale_regions, list( ), "Research Division" = list( /area/station/command/heads_quarters/rd, - /area/station/security/checkpoint/science, + /area/station/security/checkpoint/science, /area/station/science, ), "Engineering Bay" = list( @@ -24,14 +24,13 @@ GLOBAL_LIST_INIT(battle_royale_regions, list( )) /// Basically just exists to hold references to datums so that they don't GC -SUBSYSTEM_DEF(battle_royale) +DATASYSTEM_DEF(battle_royale) name = "Battle Royale" - flags = SS_NO_INIT | SS_NO_FIRE /// List of battle royale datums currently running var/list/active_battles /// Start a new battle royale using a passed list of implants -/datum/controller/subsystem/battle_royale/proc/start_battle(list/competitors) +/datum/system/battle_royale/proc/start_battle(list/competitors) var/datum/battle_royale_controller/controller = new() if (!controller.start(competitors)) return FALSE @@ -42,7 +41,7 @@ SUBSYSTEM_DEF(battle_royale) return TRUE /// Drop reference when it kills itself -/datum/controller/subsystem/battle_royale/proc/battle_ended(datum/source) +/datum/system/battle_royale/proc/battle_ended(datum/source) SIGNAL_HANDLER LAZYREMOVE(active_battles, source) if (!LAZYLEN(active_battles)) @@ -52,7 +51,7 @@ SUBSYSTEM_DEF(battle_royale) /// Datum which controls the conflict /datum/battle_royale_controller /// Where is our battle taking place? - var/chosen_area + var/chosen_area /// Is the battle currently in progress? var/battle_running = TRUE /// Should we let everyone know that someone has died? diff --git a/code/controllers/subsystem/communications.dm b/code/datums/systems/ds/communications.dm similarity index 87% rename from code/controllers/subsystem/communications.dm rename to code/datums/systems/ds/communications.dm index 3ad52bbf150..7c9cee61509 100644 --- a/code/controllers/subsystem/communications.dm +++ b/code/datums/systems/ds/communications.dm @@ -2,9 +2,8 @@ #define COMMUNICATION_COOLDOWN_AI (30 SECONDS) #define COMMUNICATION_COOLDOWN_MEETING (5 MINUTES) -SUBSYSTEM_DEF(communications) +DATASYSTEM_DEF(communications) name = "Communications" - flags = SS_NO_INIT | SS_NO_FIRE COOLDOWN_DECLARE(silicon_message_cooldown) COOLDOWN_DECLARE(nonsilicon_message_cooldown) @@ -21,7 +20,7 @@ SUBSYSTEM_DEF(communications) /// The location where the special xenomorph egg was planted var/area/captivity_area -/datum/controller/subsystem/communications/proc/can_announce(mob/living/user, is_silicon) +/datum/system/communications/proc/can_announce(mob/living/user, is_silicon) if(is_silicon && COOLDOWN_FINISHED(src, silicon_message_cooldown)) return TRUE else if(!is_silicon && COOLDOWN_FINISHED(src, nonsilicon_message_cooldown)) @@ -29,7 +28,7 @@ SUBSYSTEM_DEF(communications) else return FALSE -/datum/controller/subsystem/communications/proc/make_announcement(mob/living/user, is_silicon, input, syndicate, list/players) +/datum/system/communications/proc/make_announcement(mob/living/user, is_silicon, input, syndicate, list/players) if(!can_announce(user, is_silicon)) return FALSE if(is_silicon) @@ -45,7 +44,7 @@ SUBSYSTEM_DEF(communications) user.log_talk(input, LOG_SAY, tag="priority announcement") message_admins("[ADMIN_LOOKUPFLW(user)] has made a priority announcement.") -/datum/controller/subsystem/communications/proc/send_message(datum/comm_message/sending,print = TRUE,unique = FALSE) +/datum/system/communications/proc/send_message(datum/comm_message/sending,print = TRUE,unique = FALSE) for(var/obj/machinery/computer/communications/C in GLOB.shuttle_caller_list) if(!(C.machine_stat & (BROKEN|NOPOWER)) && is_station_level(C.z)) if(unique) diff --git a/code/controllers/subsystem/materials.dm b/code/datums/systems/ds/materials.dm similarity index 92% rename from code/controllers/subsystem/materials.dm rename to code/datums/systems/ds/materials.dm index 25efd8695dc..527c1a3d642 100644 --- a/code/controllers/subsystem/materials.dm +++ b/code/datums/systems/ds/materials.dm @@ -1,13 +1,12 @@ /*! How material datums work -Materials are now instanced datums, with an associative list of them being kept in SSmaterials. We only instance the materials once and then re-use these instances for everything. +Materials are now instanced datums, with an associative list of them being kept in DSmaterials. We only instance the materials once and then re-use these instances for everything. These materials call on_applied() on whatever item they are applied to, common effects are adding components, changing color and changing description. This allows us to differentiate items based on the material they are made out of.area */ -SUBSYSTEM_DEF(materials) +DATASYSTEM_DEF(materials) name = "Materials" - flags = SS_NO_FIRE | SS_NO_INIT ///Dictionary of material.id || material ref var/list/materials ///Dictionary of type || list of material refs @@ -37,7 +36,7 @@ SUBSYSTEM_DEF(materials) var/list/datum/dimension_theme/dimensional_themes ///Ran on initialize, populated the materials and materials_by_category dictionaries with their appropiate vars (See these variables for more info) -/datum/controller/subsystem/materials/proc/InitializeMaterials() +/datum/system/materials/proc/InitializeMaterials() materials = list() materials_by_type = list() materialids_by_type = list() @@ -58,7 +57,7 @@ SUBSYSTEM_DEF(materials) * - [arguments][/list]: The arguments to use to create the material datum * - The first element is the type of material to initialize. */ -/datum/controller/subsystem/materials/proc/InitializeMaterial(list/arguments) +/datum/system/materials/proc/InitializeMaterial(list/arguments) var/datum/material/mat_type = arguments[1] if(initial(mat_type.init_flags) & MATERIAL_INIT_BESPOKE) arguments[1] = GetIdFromArguments(arguments) @@ -90,13 +89,13 @@ SUBSYSTEM_DEF(materials) * - If the material type is bespoke a text ID is generated from the arguments list and used to load a material datum from the cache. * - The following elements are used to generate bespoke IDs */ -/datum/controller/subsystem/materials/proc/_GetMaterialRef(list/arguments) +/datum/system/materials/proc/_GetMaterialRef(list/arguments) if(!materials) InitializeMaterials() var/datum/material/key = arguments[1] if(istype(key)) - return key // We are assuming here that the only thing allowed to create material datums is [/datum/controller/subsystem/materials/proc/InitializeMaterial] + return key // We are assuming here that the only thing allowed to create material datums is [/datum/system/materials/proc/InitializeMaterial] if(istext(key)) // Handle text id . = materials[key] @@ -124,7 +123,7 @@ SUBSYSTEM_DEF(materials) * Named arguments can appear in any order and we need them to appear after ordered arguments * We assume that no one will pass in a named argument with a value of null **/ -/datum/controller/subsystem/materials/proc/GetIdFromArguments(list/arguments) +/datum/system/materials/proc/GetIdFromArguments(list/arguments) var/datum/material/mattype = arguments[1] var/list/fullid = list("[initial(mattype.id) || mattype]") var/list/named_arguments = list() @@ -150,7 +149,7 @@ SUBSYSTEM_DEF(materials) /// Returns a list to be used as an object's custom_materials. Lists will be cached and re-used based on the parameters. -/datum/controller/subsystem/materials/proc/FindOrCreateMaterialCombo(list/materials_declaration, multiplier) +/datum/system/materials/proc/FindOrCreateMaterialCombo(list/materials_declaration, multiplier) if(!LAZYLEN(materials_declaration)) return null // If we get a null we pass it right back, we don't want to generate stack traces just because something is clearing out its materials list. diff --git a/code/controllers/subsystem/movement/move_handler.dm b/code/datums/systems/ds/move_handler.dm similarity index 91% rename from code/controllers/subsystem/movement/move_handler.dm rename to code/datums/systems/ds/move_handler.dm index fcc5c1c6504..dc3458627ef 100644 --- a/code/controllers/subsystem/movement/move_handler.dm +++ b/code/datums/systems/ds/move_handler.dm @@ -17,16 +17,14 @@ * * You can find the logic for this control in this file * - * Specifics of how different loops operate can be found in the movement_types.dm file, alongside the [add to loop][/datum/controller/subsystem/move_manager/proc/add_to_loop] helper procs that use them + * Specifics of how different loops operate can be found in the movement_types.dm file, alongside the [add to loop][/datum/system/move_manager/proc/add_to_loop] helper procs that use them * **/ -SUBSYSTEM_DEF(move_manager) +DATASYSTEM_DEF(move_manager) name = "Movement Handler" - flags = SS_NO_INIT | SS_NO_FIRE - runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME ///Adds a movable thing to a movement subsystem. Returns TRUE if it all worked, FALSE if it failed somehow -/datum/controller/subsystem/move_manager/proc/add_to_loop(atom/movable/thing_to_add, datum/controller/subsystem/movement/subsystem = SSmovement, datum/move_loop/loop_type, priority = MOVEMENT_DEFAULT_PRIORITY, flags, datum/extra_info) +/datum/system/move_manager/proc/add_to_loop(atom/movable/thing_to_add, datum/controller/subsystem/movement/subsystem = SSmovement, datum/move_loop/loop_type, priority = MOVEMENT_DEFAULT_PRIORITY, flags, datum/extra_info) var/datum/movement_packet/our_data = thing_to_add.move_packet if(!our_data) our_data = new(thing_to_add) @@ -35,7 +33,7 @@ SUBSYSTEM_DEF(move_manager) return our_data.add_loop(arglist(arguments)) ///Returns the subsystem's loop if we're processing on it, null otherwise -/datum/controller/subsystem/move_manager/proc/processing_on(atom/movable/packet_owner, datum/controller/subsystem/movement/subsystem) +/datum/system/move_manager/proc/processing_on(atom/movable/packet_owner, datum/controller/subsystem/movement/subsystem) var/datum/movement_packet/packet = packet_owner.move_packet if(!packet) return diff --git a/code/datums/systems/manager.dm b/code/datums/systems/manager.dm new file mode 100644 index 00000000000..0d5fdb8b839 --- /dev/null +++ b/code/datums/systems/manager.dm @@ -0,0 +1,14 @@ +// See initialization order in /code/game/world.dm +GLOBAL_REAL(SysMgr, /datum/system_manager) + + +/** + * Initializes all data systems and keeps track of them. + */ +/datum/system_manager + /// List of managed data systems, post initialization. + var/list/datum/system/managed = list() + + +/datum/system_manager/New() + init_subtypes(/datum/system, managed) diff --git a/code/game/atom/atom_materials.dm b/code/game/atom/atom_materials.dm index 345a8486dd6..deb27140257 100644 --- a/code/game/atom/atom_materials.dm +++ b/code/game/atom/atom_materials.dm @@ -23,7 +23,7 @@ var/datum/material/custom_material = GET_MATERIAL_REF(current_material) custom_material.on_applied(src, OPTIMAL_COST(materials[current_material] * multiplier * material_modifier), material_flags) - custom_materials = SSmaterials.FindOrCreateMaterialCombo(materials, multiplier) + custom_materials = DSmaterials.FindOrCreateMaterialCombo(materials, multiplier) /** * Returns the material composition of the atom. diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 1bdcba84967..02dfa624d35 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -4,8 +4,8 @@ icon = 'icons/obj/machines/lathes.dmi' icon_state = "autolathe" density = TRUE - //Energy cost per full stack of sheets worth of materials used. Material insertion is 40% of this. - active_power_usage = 25 * BASE_MACHINE_ACTIVE_CONSUMPTION + ///Energy cost per full stack of sheets worth of materials used. Material insertion is 40% of this. + active_power_usage = 0.025 * STANDARD_CELL_RATE circuit = /obj/item/circuitboard/machine/autolathe layer = BELOW_OBJ_LAYER processing_flags = NONE @@ -32,7 +32,7 @@ /obj/machinery/autolathe/Initialize(mapload) materials = AddComponent( \ /datum/component/material_container, \ - SSmaterials.materials_by_category[MAT_CATEGORY_ITEM_MATERIAL], \ + DSmaterials.materials_by_category[MAT_CATEGORY_ITEM_MATERIAL], \ 0, \ MATCONTAINER_EXAMINE, \ container_signals = list(COMSIG_MATCONTAINER_ITEM_CONSUMED = TYPE_PROC_REF(/obj/machinery/autolathe, AfterMaterialInsert)) \ @@ -252,7 +252,7 @@ var/amount_needed = design.materials[material] if(istext(material)) // category var/list/choices = list() - for(var/datum/material/valid_candidate as anything in SSmaterials.materials_by_category[material]) + for(var/datum/material/valid_candidate as anything in DSmaterials.materials_by_category[material]) if(materials.get_material_amount(valid_candidate) < amount_needed) continue choices[valid_candidate.name] = valid_candidate diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index ae3ae36e51b..c2c1fcaa025 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -7,7 +7,7 @@ circuit = /obj/item/circuitboard/machine/cell_charger pass_flags = PASSTABLE var/obj/item/stock_parts/cell/charging = null - var/charge_rate = 250 KILO WATTS + var/charge_rate = 0.25 * STANDARD_CELL_RATE /* OVERWRITTEN IN modular_skyrat\modules\aesthetics\cells\cell.dm /obj/machinery/cell_charger/update_overlays() @@ -133,7 +133,7 @@ /obj/machinery/cell_charger/RefreshParts() . = ..() - charge_rate = 250 KILO WATTS + charge_rate = 0.25 * STANDARD_CELL_RATE for(var/datum/stock_part/capacitor/capacitor in component_parts) charge_rate *= capacitor.tier @@ -147,7 +147,8 @@ if(!main_draw) return - use_energy(main_draw * 0.01) //use a small bit for the charger itself, but power usage scales up with the part tier + //use a small bit for the charger itself, but power usage scales up with the part tier + use_energy(main_draw * 0.01) charge_cell(main_draw, charging, grid_only = TRUE) update_appearance() diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index 1868bc3c38c..f5695dd6284 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -53,17 +53,15 @@ actions += new move_down_action(src) /obj/machinery/computer/camera_advanced/Destroy() - if(!QDELETED(current_user)) - unset_machine(current_user) - if(eyeobj) - QDEL_NULL(eyeobj) + unset_machine() + QDEL_NULL(eyeobj) QDEL_LIST(actions) current_user = null return ..() /obj/machinery/computer/camera_advanced/process() if(!can_use(current_user) || (issilicon(current_user) && !current_user.has_unlimited_silicon_privilege)) - unset_machine(current_user) + unset_machine() return PROCESS_KILL /obj/machinery/computer/camera_advanced/connect_to_shuttle(mapload, obj/docking_port/mobile/port, obj/docking_port/stationary/dock) @@ -124,12 +122,12 @@ /obj/machinery/computer/camera_advanced/on_set_is_operational(old_value) if(!is_operational) - unset_machine(current_user) + unset_machine() -/obj/machinery/computer/camera_advanced/proc/unset_machine(mob/M) - if(M == current_user) - remove_eye_control(M) - end_processing() +/obj/machinery/computer/camera_advanced/proc/unset_machine() + if(!QDELETED(current_user)) + remove_eye_control(current_user) + end_processing() /obj/machinery/computer/camera_advanced/proc/can_use(mob/living/user) return can_interact(user) @@ -147,7 +145,7 @@ return if(isnull(user.client)) return - if(current_user) + if(!QDELETED(current_user)) to_chat(user, span_warning("The console is already in use!")) return var/mob/living/L = user @@ -179,7 +177,7 @@ give_eye_control(L) eyeobj.setLoc(camera_location) else - unset_machine(user) + unset_machine() else give_eye_control(L) eyeobj.setLoc(eyeobj.loc) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index caa3452626e..c71d80ccfba 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -335,7 +335,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) if (!message) return - SScommunications.soft_filtering = FALSE + DScommunications.soft_filtering = FALSE var/list/hard_filter_result = is_ic_filtered(message) if(hard_filter_result) tgui_alert(usr, "Your message contains: (\"[hard_filter_result[CHAT_FILTER_INDEX_WORD]]\"), which is not allowed on this server.") @@ -347,7 +347,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) return message_admins("[ADMIN_LOOKUPFLW(usr)] has passed the soft filter for \"[soft_filter_result[CHAT_FILTER_INDEX_WORD]]\". They may be using a disallowed term for a cross-station message. Increasing delay time to reject.\n\n Message: \"[html_encode(message)]\"") log_admin_private("[key_name(usr)] has passed the soft filter for \"[soft_filter_result[CHAT_FILTER_INDEX_WORD]]\". They may be using a disallowed term for a cross-station message. Increasing delay time to reject.\n\n Message: \"[message]\"") - SScommunications.soft_filtering = TRUE + DScommunications.soft_filtering = TRUE playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) @@ -358,13 +358,13 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) GLOB.admins, span_adminnotice( \ "CROSS-SECTOR MESSAGE (OUTGOING): [ADMIN_LOOKUPFLW(usr)] is about to send \ - the following message to [destination] (will autoapprove in [SScommunications.soft_filtering ? DisplayTimeText(EXTENDED_CROSS_SECTOR_CANCEL_TIME) : DisplayTimeText(CROSS_SECTOR_CANCEL_TIME)]): \ + the following message to [destination] (will autoapprove in [DScommunications.soft_filtering ? DisplayTimeText(EXTENDED_CROSS_SECTOR_CANCEL_TIME) : DisplayTimeText(CROSS_SECTOR_CANCEL_TIME)]): \ REJECT
\ [html_encode(message)]" \ ) ) - send_cross_comms_message_timer = addtimer(CALLBACK(src, PROC_REF(send_cross_comms_message), usr, destination, message), SScommunications.soft_filtering ? EXTENDED_CROSS_SECTOR_CANCEL_TIME : CROSS_SECTOR_CANCEL_TIME, TIMER_STOPPABLE) + send_cross_comms_message_timer = addtimer(CALLBACK(src, PROC_REF(send_cross_comms_message), usr, destination, message), DScommunications.soft_filtering ? EXTENDED_CROSS_SECTOR_CANCEL_TIME : CROSS_SECTOR_CANCEL_TIME, TIMER_STOPPABLE) COOLDOWN_START(src, important_action_cooldown, IMPORTANT_ACTION_COOLDOWN) if ("setState") @@ -445,7 +445,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) state = STATE_MAIN playsound(src, 'sound/machines/terminal_on.ogg', 50, FALSE) imprint_gps(gps_tag = "Encrypted Communications Channel") - + if ("toggleEmergencyAccess") if(emergency_access_cooldown(usr)) //if were in cooldown, dont allow the following code return @@ -552,7 +552,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) var/network_name = CONFIG_GET(string/cross_comms_network) if(network_name) payload["network"] = network_name - if(SScommunications.soft_filtering) + if(DScommunications.soft_filtering) payload["is_filtered"] = TRUE var/name_to_send = "[CONFIG_GET(string/cross_comms_name)]([station_name()])" //SKYRAT EDIT ADDITION @@ -562,7 +562,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) usr.log_talk(message, LOG_SAY, tag = "message to the other server") message_admins("[ADMIN_LOOKUPFLW(usr)] has sent a message to the other server\[s].") deadchat_broadcast(" has sent an outgoing message to the other station(s).", "[usr.real_name]", usr, message_type = DEADCHAT_ANNOUNCEMENT) - SScommunications.soft_filtering = FALSE // set it to false at the end of the proc to ensure that everything prior reads as intended + DScommunications.soft_filtering = FALSE // set it to false at the end of the proc to ensure that everything prior reads as intended /obj/machinery/computer/communications/ui_data(mob/user) var/list/data = list( @@ -727,7 +727,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) return deltimer(send_cross_comms_message_timer) - SScommunications.soft_filtering = FALSE + DScommunications.soft_filtering = FALSE send_cross_comms_message_timer = null log_admin("[key_name(usr)] has cancelled the outgoing cross-comms message.") @@ -800,7 +800,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) /obj/machinery/computer/communications/proc/make_announcement(mob/living/user) var/is_ai = HAS_SILICON_ACCESS(user) - if(!SScommunications.can_announce(user, is_ai)) + if(!DScommunications.can_announce(user, is_ai)) to_chat(user, span_alert("Intercomms recharging. Please stand by.")) return var/input = tgui_input_text(user, "Message to announce to the station crew", "Announcement") @@ -821,7 +821,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) ) var/list/players = get_communication_players() - SScommunications.make_announcement(user, is_ai, input, syndicate || (obj_flags & EMAGGED), players) + DScommunications.make_announcement(user, is_ai, input, syndicate || (obj_flags & EMAGGED), players) deadchat_broadcast(" made a priority announcement from [span_name("[get_area_name(usr, TRUE)]")].", span_name("[user.real_name]"), user, message_type=DEADCHAT_ANNOUNCEMENT) /obj/machinery/computer/communications/proc/get_communication_players() diff --git a/code/game/machinery/computer/orders/order_items/mining/order_mining.dm b/code/game/machinery/computer/orders/order_items/mining/order_mining.dm index 0882c9ce99a..13f350f1da1 100644 --- a/code/game/machinery/computer/orders/order_items/mining/order_mining.dm +++ b/code/game/machinery/computer/orders/order_items/mining/order_mining.dm @@ -107,6 +107,10 @@ item_path = /obj/item/radio/weather_monitor cost_per_order = 320 +/datum/orderable_item/mining/ventpointer + item_path = /obj/item/pinpointer/vent + cost_per_order = 1150 + /datum/orderable_item/mining/boulder_processing item_path = /obj/item/boulder_beacon desc = "A Bouldertech brand all-in-one boulder processing beacon. Each use will teleport in a component of a full boulder processing assembly line. Good for when you need to process additional boulders." diff --git a/code/game/machinery/dna_infuser/dna_infuser.dm b/code/game/machinery/dna_infuser/dna_infuser.dm index 6c239089f5d..7b5fcb501a0 100644 --- a/code/game/machinery/dna_infuser/dna_infuser.dm +++ b/code/game/machinery/dna_infuser/dna_infuser.dm @@ -64,8 +64,7 @@ balloon_alert(user, "not while it's on!") return if(occupant && infusing_from) - // Abort infusion if the occupant is invalid. - if(!is_valid_occupant(occupant, user)) + if(!occupant.can_infuse(user)) playsound(src, 'sound/machines/scanbuzz.ogg', 35, vary = TRUE) return balloon_alert(user, "starting DNA infusion...") @@ -77,92 +76,45 @@ var/mob/living/carbon/human/human_occupant = occupant infusing = TRUE visible_message(span_notice("[src] hums to life, beginning the infusion process!")) + + infusing_into = infusing_from.get_infusion_entry() var/fail_title = "" - var/fail_reason = "" - // Replace infusing_into with a [/datum/infuser_entry] - for(var/datum/infuser_entry/entry as anything in GLOB.infuser_entries) - if(entry.tier == DNA_MUTANT_UNOBTAINABLE) - continue - if(is_type_in_list(infusing_from, entry.input_obj_or_mob)) - if(entry.tier > max_tier_allowed) - fail_title = "Overcomplexity" - fail_reason = "DNA too complicated to infuse. The machine needs to infuse simpler DNA first." - infusing_into = entry - break - if(!infusing_into) - //no valid recipe, so you get a fly mutation - if(!fail_reason) - fail_title = "Unknown DNA" - fail_reason = "Unknown DNA. Consult the \"DNA infusion book\"." - infusing_into = GLOB.infuser_entries[1] + var/fail_explanation = "" + if(istype(infusing_into, /datum/infuser_entry/fly)) + fail_title = "Unknown DNA" + fail_explanation = "Unknown DNA. Consult the \"DNA infusion book\"." + if(infusing_into.tier > max_tier_allowed) + infusing_into = GLOB.infuser_entries[/datum/infuser_entry/fly] + fail_title = "Overcomplexity" + fail_explanation = "DNA too complicated to infuse. The machine needs to infuse simpler DNA first." playsound(src, 'sound/machines/blender.ogg', 50, vary = TRUE) to_chat(human_occupant, span_danger("Little needles repeatedly prick you!")) human_occupant.take_overall_damage(10) human_occupant.add_mob_memory(/datum/memory/dna_infusion, protagonist = human_occupant, deuteragonist = infusing_from, mutantlike = infusing_into.infusion_desc) Shake(duration = INFUSING_TIME) addtimer(CALLBACK(human_occupant, TYPE_PROC_REF(/mob, emote), "scream"), INFUSING_TIME - 1 SECONDS) - addtimer(CALLBACK(src, PROC_REF(end_infuse), fail_reason, fail_title), INFUSING_TIME) + addtimer(CALLBACK(src, PROC_REF(end_infuse), fail_explanation, fail_title), INFUSING_TIME) update_appearance() -/obj/machinery/dna_infuser/proc/end_infuse(fail_reason, fail_title) - if(infuse_organ(occupant)) +/obj/machinery/dna_infuser/proc/end_infuse(fail_explanation, fail_title) + var/mob/living/carbon/human/human_occupant = occupant + if(human_occupant.infuse_organ(infusing_into)) + check_tier_progression(src) to_chat(occupant, span_danger("You feel yourself becoming more... [infusing_into.infusion_desc]?")) infusing = FALSE infusing_into = null QDEL_NULL(infusing_from) playsound(src, 'sound/machines/microwave/microwave-end.ogg', 100, vary = FALSE) - if(fail_reason) + if(fail_explanation) playsound(src, 'sound/machines/printer.ogg', 100, TRUE) visible_message(span_notice("[src] prints an error report.")) var/obj/item/paper/printed_paper = new /obj/item/paper(loc) printed_paper.name = "error report - '[fail_title]'" - printed_paper.add_raw_text(fail_reason) + printed_paper.add_raw_text(fail_explanation) printed_paper.update_appearance() toggle_open() update_appearance() -/// Attempt to replace/add-to the occupant's organs with "mutated" equivalents. -/// Returns TRUE on success, FALSE on failure. -/// Requires the target mob to have an existing organic organ to "mutate". -// TODO: In the future, this should have more logic: -// - Replace non-mutant organs before mutant ones. -/obj/machinery/dna_infuser/proc/infuse_organ(mob/living/carbon/human/target) - if(!ishuman(target)) - return FALSE - var/obj/item/organ/new_organ = pick_organ(target) - if(!new_organ) - return FALSE - // Valid organ successfully picked. - new_organ = new new_organ() - new_organ.replace_into(target) - check_tier_progression(target) - return TRUE - -/// Picks a random mutated organ from the infuser entry which is also compatible with the target mob. -/// Tries to return a typepath of a valid mutant organ if all of the following criteria are true: -/// 1. Target must have a pre-existing organ in the same organ slot as the new organ; -/// - or the new organ must be external. -/// 2. Target's pre-existing organ must be organic / not robotic. -/// 3. Target must not have the same/identical organ. -/obj/machinery/dna_infuser/proc/pick_organ(mob/living/carbon/human/target) - if(!infusing_into) - return FALSE - var/list/obj/item/organ/potential_new_organs = infusing_into.output_organs.Copy() - // Remove organ typepaths from the list if they're incompatible with target. - for(var/obj/item/organ/new_organ as anything in infusing_into.output_organs) - var/obj/item/organ/old_organ = target.get_organ_slot(initial(new_organ.slot)) - if(old_organ) - if((old_organ.type != new_organ) && !IS_ROBOTIC_ORGAN(old_organ)) - continue // Old organ can be mutated! - else if(ispath(new_organ, /obj/item/organ/external)) - continue // External organ can be grown! - // Internal organ is either missing, or is non-organic. - potential_new_organs -= new_organ - // Pick a random organ from the filtered list. - if(length(potential_new_organs)) - return pick(potential_new_organs) - return FALSE - /// checks to see if the machine should progress a new tier. /obj/machinery/dna_infuser/proc/check_tier_progression(mob/living/carbon/human/target) if( @@ -254,19 +206,6 @@ infusing_from = target infusing_from.forceMove(src) -/// Verify that the occupant/target is organic, and has mutable DNA. -/obj/machinery/dna_infuser/proc/is_valid_occupant(mob/living/carbon/human/human_target, mob/user) - // Invalid: DNA is too damaged to mutate anymore / has TRAIT_BADDNA. - if(HAS_TRAIT(human_target, TRAIT_BADDNA)) - balloon_alert(user, "dna is corrupted!") - return FALSE - // Invalid: Occupant isn't Human, isn't organic, lacks DNA / has TRAIT_GENELESS. - if(!ishuman(human_target) || !human_target.can_mutate()) - balloon_alert(user, "dna is missing!") - return FALSE - // Valid: Occupant is an organic Human who has undamaged and mutable DNA. - return TRUE - /// Verify that the given infusion source/mob is a dead creature. /obj/machinery/dna_infuser/proc/is_valid_infusion(atom/movable/target, mob/user) if(user.stat != CONSCIOUS || HAS_TRAIT(user, TRAIT_UI_BLOCKED) || !Adjacent(user) || !user.Adjacent(target) || !ISADVANCEDTOOLUSER(user)) @@ -291,10 +230,10 @@ /obj/machinery/dna_infuser/click_alt(mob/user) if(infusing) balloon_alert(user, "not while it's on!") - return CLICK_ACTION_BLOCKING + return if(!infusing_from) balloon_alert(user, "no sample to eject!") - return CLICK_ACTION_BLOCKING + return balloon_alert(user, "ejected sample") infusing_from.forceMove(get_turf(src)) infusing_from = null diff --git a/code/game/machinery/dna_infuser/dna_infusion.dm b/code/game/machinery/dna_infuser/dna_infusion.dm new file mode 100644 index 00000000000..c902240404c --- /dev/null +++ b/code/game/machinery/dna_infuser/dna_infusion.dm @@ -0,0 +1,75 @@ + +///returns a boolean whether a machine occupant can be infused +/atom/movable/proc/can_infuse(mob/feedback_target) + if(feedback_target) + balloon_alert(feedback_target, "no dna!") + return FALSE + +/mob/living/can_infuse(mob/feedback_target) + if(feedback_target) + balloon_alert(feedback_target, "dna too simple!") + return FALSE + +/mob/living/carbon/human/can_infuse(mob/feedback_target) + // Checked by can_mutate but explicit feedback for this issue is good + if(HAS_TRAIT(src, TRAIT_BADDNA)) + if(feedback_target) + balloon_alert(feedback_target, "dna is corrupted!") + return FALSE + if(!can_mutate()) + if(feedback_target) + balloon_alert(feedback_target, "dna is missing!") + return FALSE + return TRUE + +///returns /datum/infuser_entry that matches an item being used for infusion, returns a fly mutation on failure +/atom/movable/proc/get_infusion_entry() as /datum/infuser_entry + var/datum/infuser_entry/found + for(var/datum/infuser_entry/entry as anything in flatten_list(GLOB.infuser_entries)) + if(entry.tier == DNA_MUTANT_UNOBTAINABLE) + continue + if(is_type_in_list(src, entry.input_obj_or_mob)) + found = entry + break + if(!found) + found = GLOB.infuser_entries[/datum/infuser_entry/fly] + return found + +/// Attempt to replace/add-to the occupant's organs with "mutated" equivalents. +/// Returns TRUE on success, FALSE on failure. +/// Requires the target mob to have an existing organic organ to "mutate". +// TODO: In the future, this should have more logic: +// - Replace non-mutant organs before mutant ones. +/mob/living/carbon/human/proc/infuse_organ(datum/infuser_entry/entry) + var/obj/item/organ/new_organ = pick_infusion_organ(entry) + if(!new_organ) + return FALSE + // Valid organ successfully picked. + new_organ = new new_organ() + new_organ.replace_into(src) + return TRUE + +/// Picks a random mutated organ from the given infuser entry which is also compatible with this human. +/// Tries to return a typepath of a valid mutant organ if all of the following criteria are true: +/// 1. Target must have a pre-existing organ in the same organ slot as the new organ; +/// - or the new organ must be external. +/// 2. Target's pre-existing organ must be organic / not robotic. +/// 3. Target must not have the same/identical organ. +/mob/living/carbon/human/proc/pick_infusion_organ(datum/infuser_entry/entry) + if(!entry) + return FALSE + var/list/obj/item/organ/potential_new_organs = entry.output_organs.Copy() + // Remove organ typepaths from the list if they're incompatible with target. + for(var/obj/item/organ/new_organ as anything in entry.output_organs) + var/obj/item/organ/old_organ = get_organ_slot(initial(new_organ.slot)) + if(old_organ) + if((old_organ.type != new_organ) && !IS_ROBOTIC_ORGAN(old_organ)) + continue // Old organ can be mutated! + else if(ispath(new_organ, /obj/item/organ/external)) + continue // External organ can be grown! + // Internal organ is either missing, or is non-organic. + potential_new_organs -= new_organ + // Pick a random organ from the filtered list. + if(length(potential_new_organs)) + return pick(potential_new_organs) + return FALSE diff --git a/code/game/machinery/dna_infuser/infuser_book.dm b/code/game/machinery/dna_infuser/infuser_book.dm index 75632178cca..416ed038d64 100644 --- a/code/game/machinery/dna_infuser/infuser_book.dm +++ b/code/game/machinery/dna_infuser/infuser_book.dm @@ -29,7 +29,7 @@ var/list/data = list() // Collect all info from each intry. var/list/entry_data = list() - for(var/datum/infuser_entry/entry as anything in GLOB.infuser_entries) + for(var/datum/infuser_entry/entry as anything in flatten_list(GLOB.infuser_entries)) if(entry.tier == DNA_MUTANT_UNOBTAINABLE) continue var/list/individual_entry_data = list() diff --git a/code/game/machinery/dna_infuser/infuser_entry.dm b/code/game/machinery/dna_infuser/infuser_entry.dm index dfcdfbbe08a..8b0bcfb3f79 100644 --- a/code/game/machinery/dna_infuser/infuser_entry.dm +++ b/code/game/machinery/dna_infuser/infuser_entry.dm @@ -4,17 +4,10 @@ GLOBAL_LIST_INIT(infuser_entries, prepare_infuser_entries()) /// Global proc that sets up each [/datum/infuser_entry] sub-type as singleton instances in a list, and returns it. /proc/prepare_infuser_entries() var/list/entries = list() - // Regardless of names, we want the fly/failed mutant case to show first. - var/prepended for(var/datum/infuser_entry/entry_type as anything in subtypesof(/datum/infuser_entry)) var/datum/infuser_entry/entry = new entry_type() - if(entry.type == /datum/infuser_entry/fly) - prepended = entry - continue - entries += entry - var/list/sorted = sort_names(entries) - sorted.Insert(1, prepended) - return sorted + entries[entry_type] = entry + return entries /datum/infuser_entry //-- Vars for DNA Infusion Book --// diff --git a/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm b/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm index afbb8404060..f44de87e92e 100644 --- a/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm @@ -27,7 +27,7 @@ /obj/item/organ/internal/lungs/carp/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "neck has odd gills.", BODY_ZONE_HEAD) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their neck has odd gills.", BODY_ZONE_HEAD) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/carp) ADD_TRAIT(src, TRAIT_SPACEBREATHING, REF(src)) @@ -45,7 +45,7 @@ /obj/item/organ/internal/tongue/carp/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "teeth are big and sharp.", BODY_ZONE_PRECISE_MOUTH) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their teeth are big and sharp.", BODY_ZONE_PRECISE_MOUTH) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/carp) /obj/item/organ/internal/tongue/carp/on_mob_insert(mob/living/carbon/tongue_owner, special, movement_flags) @@ -113,7 +113,7 @@ /obj/item/organ/internal/brain/carp/Initialize(mapload) . = ..() AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/carp) - AddElement(/datum/element/noticable_organ, "seem%PRONOUN_S unable to stay still.") + AddElement(/datum/element/noticable_organ, "%PRONOUN_They seem%PRONOUN_S unable to stay still.") /obj/item/organ/internal/brain/carp/on_mob_insert(mob/living/carbon/brain_owner) . = ..() @@ -151,7 +151,7 @@ /obj/item/organ/internal/heart/carp/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "skin has small patches of scales growing on it.", BODY_ZONE_CHEST) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their skin has small patches of scales growing on it.", BODY_ZONE_CHEST) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/carp) #undef CARP_ORGAN_COLOR diff --git a/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm b/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm index f9ccf16812b..ac3dae39b70 100644 --- a/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm @@ -31,7 +31,7 @@ /obj/item/organ/internal/eyes/night_vision/goliath/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "eyes are blood red and stone-like.", BODY_ZONE_PRECISE_EYES) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their eyes are blood red and stone-like.", BODY_ZONE_PRECISE_EYES) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/goliath) ///goliath lungs! You can breathe lavaland air mix but can't breath pure O2 from a tank anymore. @@ -46,7 +46,7 @@ /obj/item/organ/internal/lungs/lavaland/goliath/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "back is covered in small tendrils.", BODY_ZONE_CHEST) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their back is covered in small tendrils.", BODY_ZONE_CHEST) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/goliath) ///goliath brain. you can't use gloves but one of your arms becomes a tendril hammer that can be used to mine! @@ -63,7 +63,7 @@ /obj/item/organ/internal/brain/goliath/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "arm is just a mass of plate and tendrils.", BODY_ZONE_CHEST) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their arm is just a mass of plate and tendrils.", BODY_ZONE_CHEST) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/goliath) /obj/item/organ/internal/brain/goliath/on_mob_insert(mob/living/carbon/brain_owner) @@ -170,7 +170,7 @@ /obj/item/organ/internal/heart/goliath/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "skin has visible hard plates growing from within.", BODY_ZONE_CHEST) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their skin has visible hard plates growing from within.", BODY_ZONE_CHEST) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/goliath) AddElement(/datum/element/update_icon_blocker) diff --git a/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm b/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm index 96e41a57789..a36ebc1d3c3 100644 --- a/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm @@ -31,7 +31,7 @@ Fluoride Stare: After someone says 5 words, blah blah blah... /obj/item/organ/internal/heart/gondola/Initialize(mapload) . = ..() AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/gondola) - AddElement(/datum/element/noticable_organ, "radiate%PRONOUN_S an aura of serenity.") + AddElement(/datum/element/noticable_organ, "%PRONOUN_They radiate%PRONOUN_S an aura of serenity.") /obj/item/organ/internal/heart/gondola/Insert(mob/living/carbon/receiver, special, movement_flags) . = ..() @@ -60,7 +60,7 @@ Fluoride Stare: After someone says 5 words, blah blah blah... /obj/item/organ/internal/tongue/gondola/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "mouth is permanently affixed into a relaxed smile.", BODY_ZONE_PRECISE_MOUTH) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their mouth is permanently affixed into a relaxed smile.", BODY_ZONE_PRECISE_MOUTH) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/gondola) /obj/item/organ/internal/tongue/gondola/Insert(mob/living/carbon/tongue_owner, special, movement_flags) @@ -83,8 +83,8 @@ Fluoride Stare: After someone says 5 words, blah blah blah... /obj/item/organ/internal/liver/gondola/Initialize(mapload) . = ..() AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/gondola) - AddElement(/datum/element/noticable_organ, "left arm has small needles breaching the skin all over it.", BODY_ZONE_L_ARM) - AddElement(/datum/element/noticable_organ, "right arm has small needles breaching the skin all over it.", BODY_ZONE_R_ARM) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their left arm has small needles breaching the skin all over it.", BODY_ZONE_L_ARM) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their right arm has small needles breaching the skin all over it.", BODY_ZONE_R_ARM) /obj/item/organ/internal/liver/gondola/Insert(mob/living/carbon/liver_owner, special, movement_flags) . = ..() diff --git a/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm b/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm index f19f3d725c7..56b147ffbee 100644 --- a/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm @@ -29,7 +29,7 @@ /obj/item/organ/internal/eyes/night_vision/rat/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "eyes have deep, shifty black pupils, surrounded by a sickening yellow sclera.", BODY_ZONE_PRECISE_EYES) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their eyes have deep, shifty black pupils, surrounded by a sickening yellow sclera.", BODY_ZONE_PRECISE_EYES) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/rat) ///increases hunger, disgust recovers quicker, expands what is defined as "food" @@ -47,7 +47,7 @@ /obj/item/organ/internal/stomach/rat/Initialize(mapload) . = ..() AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/rat) - AddElement(/datum/element/noticable_organ, "mouth is drooling excessively.", BODY_ZONE_PRECISE_MOUTH) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their mouth is drooling excessively.", BODY_ZONE_PRECISE_MOUTH) /// makes you smaller, walk over tables, and take 1.5x damage /obj/item/organ/internal/heart/rat @@ -61,7 +61,7 @@ /obj/item/organ/internal/heart/rat/Initialize(mapload) . = ..() AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/rat) - AddElement(/datum/element/noticable_organ, "hunch%PRONOUN_ES over unnaturally!") + AddElement(/datum/element/noticable_organ, "%PRONOUN_They hunch%PRONOUN_ES over unnaturally!") /obj/item/organ/internal/heart/rat/on_mob_insert(mob/living/carbon/receiver) . = ..() @@ -98,7 +98,7 @@ /obj/item/organ/internal/tongue/rat/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "teeth are oddly shaped and yellowing.", BODY_ZONE_PRECISE_MOUTH) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their teeth are oddly shaped and yellowing.", BODY_ZONE_PRECISE_MOUTH) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/rat) /obj/item/organ/internal/tongue/rat/modify_speech(datum/source, list/speech_args) diff --git a/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm b/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm index 0644bca0354..11880a50cb2 100644 --- a/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm @@ -63,7 +63,7 @@ /obj/item/organ/internal/heart/roach/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "has hardened, somewhat translucent skin.") + AddElement(/datum/element/noticable_organ, "%PRONOUN_They %PRONOUN_have hardened, somewhat translucent skin.") AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/roach) roach_shell = new() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 437acc60cdf..661e9035f01 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -98,6 +98,7 @@ smoothing_groups = SMOOTH_GROUP_AIRLOCK interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_OPEN + interaction_flags_click = ALLOW_SILICON_REACH blocks_emissive = EMISSIVE_BLOCK_NONE // Custom emissive blocker. We don't want the normal behavior. ///The type of door frame to drop during deconstruction diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index cc084bea23c..13d3b8714be 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -884,7 +884,7 @@ return if(istype(attacking_object, /obj/item/electroadaptive_pseudocircuit)) var/obj/item/electroadaptive_pseudocircuit/raspberrypi = attacking_object - if(!raspberrypi.adapt_circuit(user, circuit_cost = DEFAULT_STEP_TIME * 0.5 KILO JOULES)) + if(!raspberrypi.adapt_circuit(user, circuit_cost = DEFAULT_STEP_TIME * 0.0005 * STANDARD_CELL_CHARGE)) return user.visible_message(span_notice("[user] fabricates a circuit and places it into [src]."), \ span_notice("You adapt a firelock circuit and slot it into the assembly.")) diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 21494d17b99..c89260f7ceb 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -406,7 +406,7 @@ else if(istype(tool, /obj/item/electroadaptive_pseudocircuit)) var/obj/item/electroadaptive_pseudocircuit/pseudoc = tool - if(!pseudoc.adapt_circuit(user, circuit_cost = 15 KILO JOULES)) + if(!pseudoc.adapt_circuit(user, circuit_cost = 0.015 * STANDARD_CELL_CHARGE)) return user.visible_message(span_notice("[user] fabricates a circuit and places it into [src]."), \ span_notice("You adapt a fire alarm circuit and slot it into the assembly.")) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 273538b834b..d2041f80659 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -47,6 +47,7 @@ Possible to do for anyone motivated enough: armor_type = /datum/armor/machinery_holopad circuit = /obj/item/circuitboard/machine/holopad interaction_flags_atom = parent_type::interaction_flags_atom | INTERACT_ATOM_IGNORE_MOBILITY + interaction_flags_click = ALLOW_SILICON_REACH // Blue, dim light light_power = 0.8 light_color = LIGHT_COLOR_BLUE diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 06b1b977847..ffbecf91180 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -910,6 +910,7 @@ DEFINE_BITFIELD(turret_flags, list( density = FALSE req_access = list(ACCESS_AI_UPLOAD) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + interaction_flags_click = ALLOW_SILICON_REACH /// Variable dictating if linked turrets are active and will shoot targets var/enabled = TRUE /// Variable dictating if linked turrets will shoot lethal projectiles diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index d067c3e8cbb..287fef5057d 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -178,7 +178,7 @@ if(!occupant) return - if(!use_energy(active_power_usage * seconds_per_tick)) + if(!use_energy(active_power_usage * seconds_per_tick, force = FALSE)) return SEND_SIGNAL(occupant, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, charge_cell, seconds_per_tick, repairs, sendmats) diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 28aae488866..9df7d584f42 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -21,7 +21,7 @@ /obj/machinery/recycler/Initialize(mapload) materials = AddComponent( /datum/component/material_container, \ - SSmaterials.materials_by_category[MAT_CATEGORY_SILO], \ + DSmaterials.materials_by_category[MAT_CATEGORY_SILO], \ INFINITY, \ MATCONTAINER_NO_INSERT \ ) diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index d95668975f5..a5e301c2168 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -1,3 +1,4 @@ + // SUIT STORAGE UNIT ///////////////// /obj/machinery/suit_storage_unit name = "suit storage unit" @@ -55,9 +56,9 @@ /// How long it takes to break out of the SSU. var/breakout_time = 30 SECONDS /// Power contributed by this machine to charge the mod suits cell without any capacitors - var/base_charge_rate = 200 KILO WATTS + var/base_charge_rate = 0.2 * STANDARD_CELL_RATE /// Final charge rate which is base_charge_rate + contribution by capacitors - var/final_charge_rate = 250 KILO WATTS + var/final_charge_rate = 0.25 * STANDARD_CELL_RATE /// is the card reader installed in this machine var/card_reader_installed = FALSE /// physical reference of the players id card to check for PERSONAL access level @@ -287,7 +288,7 @@ . = ..() for(var/datum/stock_part/capacitor/capacitor in component_parts) - final_charge_rate = base_charge_rate + (capacitor.tier * 50 KILO WATTS) + final_charge_rate = base_charge_rate + (capacitor.tier * 0.05 * STANDARD_CELL_RATE) set_access() diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 693668e9e89..154b03e0f98 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -606,7 +606,7 @@ var/datum/radial_menu_choice/null_choice = new null_choice.name = DIMENSION_CHOICE_RANDOM choosable_dimensions[DIMENSION_CHOICE_RANDOM] = null_choice - for(var/datum/dimension_theme/theme as anything in SSmaterials.dimensional_themes) + for(var/datum/dimension_theme/theme as anything in DSmaterials.dimensional_themes) var/datum/radial_menu_choice/theme_choice = new theme_choice.image = image(initial(theme.icon), initial(theme.icon_state)) theme_choice.name = initial(theme.name) @@ -628,14 +628,14 @@ /obj/item/bombcore/dimensional/detonate() var/list/affected_turfs = circle_range_turfs(src, range_heavy) - var/theme_count = length(SSmaterials.dimensional_themes) + var/theme_count = length(DSmaterials.dimensional_themes) var/num_affected = 0 for(var/turf/affected as anything in affected_turfs) var/datum/dimension_theme/theme_to_use if(isnull(chosen_theme)) - theme_to_use = SSmaterials.dimensional_themes[SSmaterials.dimensional_themes[rand(1, theme_count)]] + theme_to_use = DSmaterials.dimensional_themes[DSmaterials.dimensional_themes[rand(1, theme_count)]] else - theme_to_use = SSmaterials.dimensional_themes[chosen_theme] + theme_to_use = DSmaterials.dimensional_themes[chosen_theme] if(!theme_to_use.can_convert(affected)) continue num_affected++ diff --git a/code/game/objects/effects/anomalies/anomalies_dimensional.dm b/code/game/objects/effects/anomalies/anomalies_dimensional.dm index 026c5974d5f..a4ebfc21f1a 100644 --- a/code/game/objects/effects/anomalies/anomalies_dimensional.dm +++ b/code/game/objects/effects/anomalies/anomalies_dimensional.dm @@ -51,7 +51,7 @@ /obj/effect/anomaly/dimensional/proc/prepare_area(new_theme_path) if (!new_theme_path) new_theme_path = pick(subtypesof(/datum/dimension_theme)) - theme = SSmaterials.dimensional_themes[new_theme_path] + theme = DSmaterials.dimensional_themes[new_theme_path] apply_theme_icon() target_turfs = list() diff --git a/code/game/objects/effects/decals/cleanable/aliens.dm b/code/game/objects/effects/decals/cleanable/aliens.dm index 4f4b2543792..fb87f788036 100644 --- a/code/game/objects/effects/decals/cleanable/aliens.dm +++ b/code/game/objects/effects/decals/cleanable/aliens.dm @@ -47,7 +47,7 @@ break return - var/datum/move_loop/loop = SSmove_manager.move(src, direction, delay = delay, timeout = range * delay, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/loop = DSmove_manager.move(src, direction, delay = delay, timeout = range * delay, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(spread_movement_effects)) /obj/effect/decal/cleanable/xenoblood/xgibs/proc/spread_movement_effects(datum/move_loop/has_target/source) diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index ccb05b082b3..7812ba789b5 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -163,7 +163,7 @@ break return - var/datum/move_loop/loop = SSmove_manager.move_to(src, get_step(src, direction), delay = delay, timeout = range * delay, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/loop = DSmove_manager.move_to(src, get_step(src, direction), delay = delay, timeout = range * delay, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(spread_movement_effects)) /obj/effect/decal/cleanable/blood/gibs/proc/spread_movement_effects(datum/move_loop/has_target/source) @@ -376,7 +376,7 @@ GLOBAL_LIST_EMPTY(bloody_footprints_cache) /// Set the splatter up to fly through the air until it rounds out of steam or hits something /obj/effect/decal/cleanable/blood/hitsplatter/proc/fly_towards(turf/target_turf, range) var/delay = 2 - var/datum/move_loop/loop = SSmove_manager.move_towards(src, target_turf, delay, timeout = delay * range, priority = MOVEMENT_ABOVE_SPACE_PRIORITY, flags = MOVEMENT_LOOP_START_FAST) + var/datum/move_loop/loop = DSmove_manager.move_towards(src, target_turf, delay, timeout = delay * range, priority = MOVEMENT_ABOVE_SPACE_PRIORITY, flags = MOVEMENT_LOOP_START_FAST) RegisterSignal(loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(pre_move)) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(post_move)) RegisterSignal(loop, COMSIG_QDELETING, PROC_REF(loop_done)) diff --git a/code/game/objects/effects/decals/cleanable/robots.dm b/code/game/objects/effects/decals/cleanable/robots.dm index d248b5e691d..77034850a0b 100644 --- a/code/game/objects/effects/decals/cleanable/robots.dm +++ b/code/game/objects/effects/decals/cleanable/robots.dm @@ -32,7 +32,7 @@ break return - var/datum/move_loop/loop = SSmove_manager.move(src, direction, delay = delay, timeout = range * delay, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/loop = DSmove_manager.move(src, direction, delay = delay, timeout = range * delay, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(spread_movement_effects)) /obj/effect/decal/cleanable/robot_debris/proc/spread_movement_effects(datum/move_loop/has_target/source) diff --git a/code/game/objects/effects/effect_system/effect_system.dm b/code/game/objects/effects/effect_system/effect_system.dm index 9d2d13f9925..9e5418a94f4 100644 --- a/code/game/objects/effects/effect_system/effect_system.dm +++ b/code/game/objects/effects/effect_system/effect_system.dm @@ -67,7 +67,7 @@ would spawn and follow the beaker, even if it is carried or thrown. var/step_amt = pick(1,2,3) var/step_delay = 5 - var/datum/move_loop/loop = SSmove_manager.move(effect, direction, step_delay, timeout = step_delay * step_amt, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/loop = DSmove_manager.move(effect, direction, step_delay, timeout = step_delay * step_amt, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) RegisterSignal(loop, COMSIG_QDELETING, PROC_REF(decrement_total_effect)) /datum/effect_system/proc/decrement_total_effect(datum/source) diff --git a/code/game/objects/effects/effect_system/effects_explosion.dm b/code/game/objects/effects/effect_system/effects_explosion.dm index 32be64c9353..9153d4151b3 100644 --- a/code/game/objects/effects/effect_system/effects_explosion.dm +++ b/code/game/objects/effects/effect_system/effects_explosion.dm @@ -11,7 +11,7 @@ /obj/effect/particle_effect/expl_particles/LateInitialize() var/step_amt = pick(25;1,50;2,100;3,200;4) - var/datum/move_loop/loop = SSmove_manager.move(src, pick(GLOB.alldirs), 1, timeout = step_amt, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/loop = DSmove_manager.move(src, pick(GLOB.alldirs), 1, timeout = step_amt, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) RegisterSignal(loop, COMSIG_QDELETING, PROC_REF(end_particle)) /obj/effect/particle_effect/expl_particles/proc/end_particle(datum/source) diff --git a/code/game/objects/effects/effect_system/effects_water.dm b/code/game/objects/effects/effect_system/effects_water.dm index 2edca60a320..6444cf3d0ee 100644 --- a/code/game/objects/effects/effect_system/effects_water.dm +++ b/code/game/objects/effects/effect_system/effects_water.dm @@ -38,7 +38,7 @@ /// Starts the effect moving at a target with a delay in deciseconds, and a lifetime in moves /// Returns the created loop /obj/effect/particle_effect/water/extinguisher/proc/move_at(atom/target, delay, lifetime) - var/datum/move_loop/loop = SSmove_manager.move_towards_legacy(src, target, delay, timeout = delay * lifetime, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/loop = DSmove_manager.move_towards_legacy(src, target, delay, timeout = delay * lifetime, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(post_forcemove)) RegisterSignal(loop, COMSIG_QDELETING, PROC_REF(movement_stopped)) return loop @@ -63,7 +63,7 @@ // Stomach acid doesn't use legacy because it's not "targeted", and we instead want the circular sorta look /obj/effect/particle_effect/water/extinguisher/stomach_acid/move_at(atom/target, delay, lifetime) - var/datum/move_loop/loop = SSmove_manager.move_towards(src, target, delay, timeout = delay * lifetime, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/loop = DSmove_manager.move_towards(src, target, delay, timeout = delay * lifetime, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(post_forcemove)) RegisterSignal(loop, COMSIG_QDELETING, PROC_REF(movement_stopped)) return loop diff --git a/code/game/objects/effects/spawners/xeno_egg_delivery.dm b/code/game/objects/effects/spawners/xeno_egg_delivery.dm index b09a37f14b1..e87b27e0913 100644 --- a/code/game/objects/effects/spawners/xeno_egg_delivery.dm +++ b/code/game/objects/effects/spawners/xeno_egg_delivery.dm @@ -25,5 +25,5 @@ /obj/structure/alien/egg/delivery/Initialize(mapload) . = ..() - SScommunications.xenomorph_egg_delivered = TRUE - SScommunications.captivity_area = get_area(src) + DScommunications.xenomorph_egg_delivered = TRUE + DScommunications.captivity_area = get_area(src) diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index ecfa560bfe6..874104c9202 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -70,7 +70,7 @@ ADD_TRAIT(AM, TRAIT_IMMOBILIZED, REF(src)) affecting[AM] = AM.dir - var/datum/move_loop/loop = SSmove_manager.move(AM, direction, speed, tiles ? tiles * speed : INFINITY) + var/datum/move_loop/loop = DSmove_manager.move(AM, direction, speed, tiles ? tiles * speed : INFINITY) RegisterSignal(loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(pre_move)) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(post_move)) RegisterSignal(loop, COMSIG_QDELETING, PROC_REF(set_to_normal)) diff --git a/code/game/objects/effects/temporary_visuals/effect_trail.dm b/code/game/objects/effects/temporary_visuals/effect_trail.dm index 028e5141653..2fd7d41d22c 100644 --- a/code/game/objects/effects/temporary_visuals/effect_trail.dm +++ b/code/game/objects/effects/temporary_visuals/effect_trail.dm @@ -29,7 +29,7 @@ AddElement(/datum/element/floor_loving) AddComponent(/datum/component/spawner, spawn_types = list(spawned_effect), max_spawned = max_spawned, spawn_time = spawn_interval) src.target = target - movement = SSmove_manager.move_towards(src, chasing = target, delay = move_speed, home = homing, timeout = duration, flags = MOVEMENT_LOOP_START_FAST) + movement = DSmove_manager.move_towards(src, chasing = target, delay = move_speed, home = homing, timeout = duration, flags = MOVEMENT_LOOP_START_FAST) RegisterSignal(target, COMSIG_QDELETING, PROC_REF(on_target_invalid)) if (isliving(target)) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index b6241828e86..bd70bf2f475 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -923,7 +923,7 @@ if(flags & ITEM_SLOT_EYES) owner.update_worn_glasses() if(flags & ITEM_SLOT_EARS) - owner.update_inv_ears() + owner.update_worn_ears() if(flags & ITEM_SLOT_MASK) owner.update_worn_mask() if(flags & ITEM_SLOT_HEAD) diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 4cb077808a8..556d0d47646 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -759,7 +759,7 @@ pre_noise = TRUE post_noise = FALSE - interaction_flags_click = NEED_DEXTERITY|NEED_HANDS + interaction_flags_click = NEED_DEXTERITY|NEED_HANDS|ALLOW_RESTING /obj/item/toy/crayon/spraycan/Initialize(mapload) . = ..() diff --git a/code/game/objects/items/credit_holochip.dm b/code/game/objects/items/credit_holochip.dm index c9b6fe4a134..7a57782dd39 100644 --- a/code/game/objects/items/credit_holochip.dm +++ b/code/game/objects/items/credit_holochip.dm @@ -7,7 +7,7 @@ throwforce = 0 force = 0 w_class = WEIGHT_CLASS_TINY - interaction_flags_click = NEED_DEXTERITY|FORBID_TELEKINESIS_REACH + interaction_flags_click = NEED_DEXTERITY|FORBID_TELEKINESIS_REACH|ALLOW_RESTING /// Amount on money on the card var/credits = 0 diff --git a/code/game/objects/items/devices/battle_royale.dm b/code/game/objects/items/devices/battle_royale.dm index b4ea15c6de7..4a47b164f43 100644 --- a/code/game/objects/items/devices/battle_royale.dm +++ b/code/game/objects/items/devices/battle_royale.dm @@ -78,7 +78,7 @@ balloon_alert(user, "[required_contestants - contestant_count] contestants needed!") return - SSbattle_royale.start_battle(implanted_implants) + DSbattle_royale.start_battle(implanted_implants) for (var/obj/implanter as anything in linked_implanters) do_sparks(3, cardinal_only = FALSE, source = implanter) diff --git a/code/game/objects/items/devices/desynchronizer.dm b/code/game/objects/items/devices/desynchronizer.dm index b7b693b999f..e43e0a656af 100644 --- a/code/game/objects/items/devices/desynchronizer.dm +++ b/code/game/objects/items/devices/desynchronizer.dm @@ -9,7 +9,7 @@ lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' custom_materials = list(/datum/material/iron= SMALL_MATERIAL_AMOUNT * 2.5, /datum/material/glass= SMALL_MATERIAL_AMOUNT * 5) - interaction_flags_click = NEED_DEXTERITY + interaction_flags_click = NEED_DEXTERITY|ALLOW_RESTING /// Max time this can be set var/max_duration = 300 SECONDS /// Currently set time diff --git a/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm b/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm index de14a9e123f..d5d2e6c4d14 100644 --- a/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm +++ b/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm @@ -1,3 +1,6 @@ +#define MIN_ENERGY_COST (0.01 * STANDARD_CELL_CHARGE) +#define MAX_ENERGY_COST (0.5 * STANDARD_CELL_CHARGE) + //Used by engineering cyborgs in place of generic circuits. /obj/item/electroadaptive_pseudocircuit name = "electroadaptive pseudocircuit" @@ -32,12 +35,12 @@ if(!R.cell) to_chat(R, span_warning("You need a power cell installed for that.")) return - if(!R.cell.use(circuit_cost)) - to_chat(R, span_warning("You don't have the energy for that (you need [display_energy(circuit_cost)].)")) - return if(recharging) to_chat(R, span_warning("[src] needs some time to recharge first.")) return + if(!R.cell.use(circuit_cost)) + to_chat(R, span_warning("You don't have the energy for that (you need [display_energy(circuit_cost)].)")) + return if(!circuits) to_chat(R, span_warning("You need more material. Use [src] on existing simple circuits to break them down.")) return @@ -46,8 +49,10 @@ circuits-- maptext = MAPTEXT(circuits) icon_state = "[initial(icon_state)]_recharging" - var/recharge_time = min(600, circuit_cost * 5) //40W of cost for one fabrication = 20 seconds of recharge time; this is to prevent spamming - addtimer(CALLBACK(src, PROC_REF(recharge)), recharge_time) + var/recharge_time = (circuit_cost - MIN_ENERGY_COST) / (MAX_ENERGY_COST - MIN_ENERGY_COST) + recharge_time = clamp(recharge_time, 0, 1) + recharge_time = (5 SECONDS) + (55 SECONDS) * recharge_time //anywhere between 5 seconds to 1 minute + addtimer(CALLBACK(src, PROC_REF(recharge)), ROUND_UP(recharge_time)) return TRUE //The actual circuit magic itself is done on a per-object basis /obj/item/electroadaptive_pseudocircuit/afterattack(atom/target, mob/living/user, proximity) @@ -68,3 +73,6 @@ playsound(src, 'sound/machines/chime.ogg', 25, TRUE) recharging = FALSE icon_state = initial(icon_state) + +#undef MIN_ENERGY_COST +#undef MAX_ENERGY_COST diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 66a8f29ed1d..ebd7729b4c5 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -152,7 +152,7 @@ name = "electronic multitool" desc = "Optimised version of a regular multitool. Streamlines processes handled by its internal microchip." icon = 'icons/obj/items_cyborg.dmi' - icon_state = "multitool_cyborg" + icon_state = "toolkit_engiborg_multitool" toolspeed = 0.5 #undef PROXIMITY_NEAR diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 1b000ea2f91..1925737143e 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -171,7 +171,7 @@ if(istype(terminal.master, /obj/machinery/power/apc)) var/obj/machinery/power/apc/apc = terminal.master if(apc.operating && apc.cell) - drained += 0.001 * apc.cell.use(50 KILO JOULES, force = TRUE) + drained += 0.001 * apc.cell.use(0.05 * STANDARD_CELL_CHARGE, force = TRUE) internal_heat += drained /obj/item/powersink/process() diff --git a/code/game/objects/items/devices/quantum_keycard.dm b/code/game/objects/items/devices/quantum_keycard.dm index 34b83a62092..ccaef00cfc6 100644 --- a/code/game/objects/items/devices/quantum_keycard.dm +++ b/code/game/objects/items/devices/quantum_keycard.dm @@ -10,7 +10,7 @@ righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' w_class = WEIGHT_CLASS_TINY obj_flags = UNIQUE_RENAME - interaction_flags_click = NEED_DEXTERITY + interaction_flags_click = NEED_DEXTERITY|ALLOW_RESTING /// The linked quantum pad var/obj/machinery/quantumpad/qpad diff --git a/code/game/objects/items/devices/scanners/gas_analyzer.dm b/code/game/objects/items/devices/scanners/gas_analyzer.dm index 0898c73aa2e..44975ae417b 100644 --- a/code/game/objects/items/devices/scanners/gas_analyzer.dm +++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm @@ -17,7 +17,7 @@ tool_behaviour = TOOL_ANALYZER custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT * 0.3, /datum/material/glass=SMALL_MATERIAL_AMOUNT * 0.2) grind_results = list(/datum/reagent/mercury = 5, /datum/reagent/iron = 5, /datum/reagent/silicon = 5) - interaction_flags_click = NEED_LITERACY|NEED_LIGHT + interaction_flags_click = NEED_LITERACY|NEED_LIGHT|ALLOW_RESTING /// Boolean whether this has a CD var/cooldown = FALSE /// The time in deciseconds diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 1a264cf3924..f52f97aeeb5 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -20,7 +20,7 @@ throw_speed = 3 throw_range = 7 custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT *2) - interaction_flags_click = NEED_LITERACY|NEED_LIGHT + interaction_flags_click = NEED_LITERACY|NEED_LIGHT|ALLOW_RESTING /// Verbose/condensed var/mode = SCANNER_VERBOSE /// HEALTH/WOUND diff --git a/code/game/objects/items/devices/swapper.dm b/code/game/objects/items/devices/swapper.dm index 6db67049174..96f378c6e32 100644 --- a/code/game/objects/items/devices/swapper.dm +++ b/code/game/objects/items/devices/swapper.dm @@ -8,7 +8,7 @@ item_flags = NOBLUDGEON lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - interaction_flags_click = NEED_DEXTERITY + interaction_flags_click = NEED_DEXTERITY|ALLOW_RESTING /// Cooldown for usage var/cooldown = 30 SECONDS /// Next available time diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm index c78242255a6..0132cc0f0d8 100644 --- a/code/game/objects/items/extinguisher.dm +++ b/code/game/objects/items/extinguisher.dm @@ -258,7 +258,7 @@ //Chair movement loop /obj/item/extinguisher/proc/move_chair(obj/buckled_object, movementdirection) - var/datum/move_loop/loop = SSmove_manager.move(buckled_object, movementdirection, 1, timeout = 9, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/loop = DSmove_manager.move(buckled_object, movementdirection, 1, timeout = 9, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) //This means the chair slowing down is dependant on the extinguisher existing, which is weird //Couldn't figure out a better way though RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(manage_chair_speed)) diff --git a/code/game/objects/items/fireaxe.dm b/code/game/objects/items/fireaxe.dm index 901e506194e..2859b4d3b2c 100644 --- a/code/game/objects/items/fireaxe.dm +++ b/code/game/objects/items/fireaxe.dm @@ -86,3 +86,13 @@ tool_behaviour = TOOL_CROWBAR toolspeed = 1 usesound = 'sound/items/crowbar.ogg' + +//boarding axe +/obj/item/fireaxe/boardingaxe + icon_state = "boarding_axe0" + base_icon_state = "boarding_axe" + name = "boarding axe" + desc = "A hulking cleaver that feels like a burden just looking at it. Seems excellent at halving obstacles like windows, airlocks, barricades and people." + force_unwielded = 5 + force_wielded = 30 + demolition_mod = 3 diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm index d2f4b0cfc71..be89193ba7e 100644 --- a/code/game/objects/items/flamethrower.dm +++ b/code/game/objects/items/flamethrower.dm @@ -20,7 +20,7 @@ light_range = 2 light_power = 2 light_on = FALSE - interaction_flags_click = NEED_DEXTERITY|NEED_HANDS + interaction_flags_click = NEED_DEXTERITY|NEED_HANDS|ALLOW_RESTING var/status = FALSE var/lit = FALSE //on or off var/operating = FALSE//cooldown diff --git a/code/game/objects/items/implants/implantpad.dm b/code/game/objects/items/implants/implantpad.dm index 0d0391126c9..dffd7aa77a4 100644 --- a/code/game/objects/items/implants/implantpad.dm +++ b/code/game/objects/items/implants/implantpad.dm @@ -10,7 +10,7 @@ throw_speed = 3 throw_range = 5 w_class = WEIGHT_CLASS_SMALL - interaction_flags_click = FORBID_TELEKINESIS_REACH + interaction_flags_click = FORBID_TELEKINESIS_REACH|ALLOW_RESTING ///The implant case currently inserted into the pad. var/obj/item/implantcase/inserted_case diff --git a/code/game/objects/items/inspector.dm b/code/game/objects/items/inspector.dm index f96c1beb573..ab5db9b65ce 100644 --- a/code/game/objects/items/inspector.dm +++ b/code/game/objects/items/inspector.dm @@ -1,3 +1,6 @@ +///Energy used to say an error message. +#define ENERGY_TO_SPEAK (0.001 * STANDARD_CELL_CHARGE) + /** * # N-spect scanner * @@ -28,8 +31,6 @@ var/cell_cover_open = FALSE ///Energy used per print. var/energy_per_print = INSPECTOR_ENERGY_USAGE_NORMAL - ///Energy used to say an error message. - var/energy_to_speak = 1 KILO JOULES /obj/item/inspector/Initialize(mapload) . = ..() @@ -112,7 +113,7 @@ to_chat(user, "\The [src] doesn't seem to be on... Perhaps it ran out of power?") return if(!cell.use(energy_per_print)) - if(cell.use(energy_to_speak)) + if(cell.use(ENERGY_TO_SPEAK)) say("ERROR! POWER CELL CHARGE LEVEL TOO LOW TO PRINT REPORT!") return @@ -258,7 +259,7 @@ /obj/item/inspector/clown/bananium/proc/check_settings_legality() if(print_sound_mode == INSPECTOR_PRINT_SOUND_MODE_NORMAL && time_mode == INSPECTOR_TIME_MODE_HONK) - if(cell.use(energy_to_speak)) + if(cell.use(ENERGY_TO_SPEAK)) say("Setting combination forbidden by Geneva convention revision CCXXIII selected, reverting to defaults") time_mode = INSPECTOR_TIME_MODE_SLOW print_sound_mode = INSPECTOR_PRINT_SOUND_MODE_NORMAL @@ -296,7 +297,7 @@ if(time_mode != INSPECTOR_TIME_MODE_HONK) return ..() if(paper_charges == 0) - if(cell.use(energy_to_speak)) + if(cell.use(ENERGY_TO_SPEAK)) say("ERROR! OUT OF PAPER! MAXIMUM PRINTING SPEED UNAVAIBLE! SWITCH TO A SLOWER SPEED TO OR PROVIDE PAPER!") else to_chat(user, "\The [src] doesn't seem to be on... Perhaps it ran out of power?") @@ -372,7 +373,7 @@ */ /obj/item/paper/fake_report/water grind_results = list(/datum/reagent/water = 5) - interaction_flags_click = NEED_DEXTERITY|NEED_HANDS + interaction_flags_click = NEED_DEXTERITY|NEED_HANDS|ALLOW_RESTING /obj/item/paper/fake_report/water/click_alt(mob/living/user) var/datum/action/innate/origami/origami_action = locate() in user.actions @@ -383,5 +384,6 @@ target.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) to_chat(user, span_notice("As you try to fold [src] into the shape of a plane, it disintegrates into water!")) qdel(src) - return CLICK_ACTION_SUCCESS + +#undef ENERGY_TO_SPEAK diff --git a/code/game/objects/items/machine_wand.dm b/code/game/objects/items/machine_wand.dm index c1dd0bf382d..7ce94b9ad40 100644 --- a/code/game/objects/items/machine_wand.dm +++ b/code/game/objects/items/machine_wand.dm @@ -150,7 +150,7 @@ CRASH("a moving bug has been created but isn't moving towards anything!") src.controller = controller src.thing_moving_towards = thing_moving_towards - var/datum/move_loop/loop = SSmove_manager.home_onto(src, thing_moving_towards, delay = 5, flags = MOVEMENT_LOOP_NO_DIR_UPDATE) + var/datum/move_loop/loop = DSmove_manager.home_onto(src, thing_moving_towards, delay = 5, flags = MOVEMENT_LOOP_NO_DIR_UPDATE) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(reached_destination_check)) RegisterSignal(thing_moving_towards, COMSIG_QDELETING, PROC_REF(on_machine_del)) diff --git a/code/game/objects/items/maintenance_loot.dm b/code/game/objects/items/maintenance_loot.dm index 52ed1880081..f6d7fd1c329 100644 --- a/code/game/objects/items/maintenance_loot.dm +++ b/code/game/objects/items/maintenance_loot.dm @@ -30,7 +30,7 @@ icon_state = "lead_battery" throwforce = 10 maxcharge = STANDARD_CELL_CHARGE * 20 //decent max charge - chargerate = STANDARD_CELL_CHARGE * 0.7 //charging is about 30% less efficient than lithium batteries. + chargerate = STANDARD_CELL_RATE * 0.7 //charging is about 30% less efficient than lithium batteries. charge_light_type = null connector_type = "leadacid" rating = 2 //Kind of a mid-tier battery diff --git a/code/game/objects/items/rcd/RCD.dm b/code/game/objects/items/rcd/RCD.dm index 91b51053b0e..88daf279c59 100644 --- a/code/game/objects/items/rcd/RCD.dm +++ b/code/game/objects/items/rcd/RCD.dm @@ -428,7 +428,7 @@ desc = "A device used to rapidly build walls and floors." banned_upgrades = RCD_UPGRADE_SILO_LINK /// enery usage - var/energyfactor = 72 KILO JOULES + var/energyfactor = 0.072 * STANDARD_CELL_CHARGE /obj/item/construction/rcd/borg/get_matter(mob/user) if(!iscyborg(user)) @@ -470,7 +470,7 @@ desc = "A reverse-engineered RCD with black market upgrades that allow this device to deconstruct reinforced walls. Property of Donk Co." icon_state = "ircd" inhand_icon_state = "ircd" - energyfactor = 66 KILO JOULES + energyfactor = 0.066 * STANDARD_CELL_CHARGE canRturf = TRUE /obj/item/construction/rcd/loaded @@ -522,7 +522,7 @@ upgrade = RCD_ALL_UPGRADES & ~RCD_UPGRADE_SILO_LINK ///How much charge is used up for each matter unit. -#define MASS_TO_ENERGY (16 KILO JOULES) +#define MASS_TO_ENERGY (0.016 * STANDARD_CELL_CHARGE) /obj/item/construction/rcd/exosuit name = "mounted RCD" diff --git a/code/game/objects/items/robot/items/food.dm b/code/game/objects/items/robot/items/food.dm index 1878b0c1e00..40166a6a8fb 100644 --- a/code/game/objects/items/robot/items/food.dm +++ b/code/game/objects/items/robot/items/food.dm @@ -121,7 +121,7 @@ check_amount() if(iscyborg(user)) var/mob/living/silicon/robot/robot_user = user - if(!robot_user.cell.use(12 KILO JOULES)) + if(!robot_user.cell.use(0.012 * STANDARD_CELL_CHARGE)) to_chat(user, span_warning("Not enough power.")) return AFTERATTACK_PROCESSED_ITEM switch(mode) diff --git a/code/game/objects/items/robot/items/hypo.dm b/code/game/objects/items/robot/items/hypo.dm index 847807ee9f4..b685d5405f1 100644 --- a/code/game/objects/items/robot/items/hypo.dm +++ b/code/game/objects/items/robot/items/hypo.dm @@ -109,7 +109,7 @@ */ var/max_volume_per_reagent = 30 /// Cell cost for charging a reagent - var/charge_cost = 50 KILO JOULES + var/charge_cost = 0.05 * STANDARD_CELL_CHARGE /// Counts up to the next time we charge var/charge_timer = 0 /// Time it takes for shots to recharge (in seconds) @@ -310,7 +310,7 @@ SKYRAT EDIT REMOVAL END */ Also metabolizes potassium iodide for radiation poisoning, inacusiate for ear damage and morphine for offense." icon_state = "borghypo_s" tgui_theme = "syndicate" - charge_cost = 20 KILO JOULES + charge_cost = 0.02 * STANDARD_CELL_CHARGE recharge_time = 2 default_reagent_types = BASE_SYNDICATE_REAGENTS bypass_protection = TRUE @@ -323,7 +323,7 @@ SKYRAT EDIT REMOVAL END */ icon_state = "shaker" possible_transfer_amounts = list(5,10,20,1) // Lots of reagents all regenerating at once, so the charge cost is lower. They also regenerate faster. - charge_cost = 20 KILO JOULES + charge_cost = 0.02 * STANDARD_CELL_CHARGE recharge_time = 3 dispensed_temperature = WATER_MATTERSTATE_CHANGE_TEMP //Water stays wet, ice stays ice default_reagent_types = BASE_SERVICE_REAGENTS @@ -395,7 +395,7 @@ SKYRAT EDIT REMOVAL END */ icon_state = "flour" possible_transfer_amounts = list(5,10,20,1) // Lots of reagents all regenerating at once, so the charge cost is lower. They also regenerate faster. - charge_cost = 40 KILO JOULES //Costs double the power of the borgshaker due to synthesizing solids + charge_cost = 0.04 * STANDARD_CELL_CHARGE //Costs double the power of the borgshaker due to synthesizing solids recharge_time = 6 //Double the recharge time too, for the same reason. dispensed_temperature = WATER_MATTERSTATE_CHANGE_TEMP default_reagent_types = EXPANDED_SERVICE_REAGENTS diff --git a/code/game/objects/items/robot/items/tools.dm b/code/game/objects/items/robot/items/tools.dm index 538fd1b7ca1..49c3197ae1e 100644 --- a/code/game/objects/items/robot/items/tools.dm +++ b/code/game/objects/items/robot/items/tools.dm @@ -1,5 +1,7 @@ #define PKBORG_DAMPEN_CYCLE_DELAY (2 SECONDS) -#define POWER_RECHARGE_CYBORG_DRAIN_MULTIPLIER (0.4 KILO WATTS) +#define POWER_RECHARGE_CYBORG_DRAIN_MULTIPLIER (0.0004 * STANDARD_CELL_RATE) +#define NO_TOOL "deactivated" +#define TOOL_DRAPES "surgical_drapes" /obj/item/cautery/prt //it's a subtype of cauteries so that it inherits the cautery sprites and behavior and stuff, because I'm too lazy to make sprites for this thing name = "plating repair tool" @@ -174,5 +176,214 @@ projectile.speed *= (1 / projectile_speed_coefficient) projectile.cut_overlay(projectile_effect) +//bare minimum omni-toolset for modularity +/obj/item/borg/cyborg_omnitool + name = "cyborg omni-toolset" + desc = "You shouldn't see this in-game normally." + icon = 'icons/mob/silicon/robot_items.dmi' + icon_state = "toolkit_medborg" + ///our tools + var/list/radial_menu_options = list() + ///object we are referencing to for force, sharpness and sound + var/obj/item/reference + //is the toolset upgraded or not + var/upgraded = FALSE + ///how much faster should the toolspeed be? + var/upgraded_toolspeed = 0.7 + +/obj/item/borg/cyborg_omnitool/get_all_tool_behaviours() + return list(TOOL_SCALPEL, TOOL_HEMOSTAT) + +/obj/item/borg/cyborg_omnitool/Initialize(mapload) + . = ..() + AddComponent(/datum/component/butchering, \ + speed = 8 SECONDS, \ + effectiveness = 100, \ + disabled = TRUE, \ + ) + radial_menu_options = list( + NO_TOOL = image(icon = 'icons/mob/silicon/robot_items.dmi', icon_state = initial(icon_state)), + TOOL_SCALPEL = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_SCALPEL]"), + TOOL_HEMOSTAT = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_HEMOSTAT]"), + ) + +/obj/item/borg/cyborg_omnitool/attack_self(mob/user) + var/new_tool_behaviour = show_radial_menu(user, src, radial_menu_options, require_near = TRUE, tooltips = TRUE) + + if(isnull(new_tool_behaviour) || new_tool_behaviour == tool_behaviour) + return + if(new_tool_behaviour == NO_TOOL) + tool_behaviour = null + else + tool_behaviour = new_tool_behaviour + + reference_item_for_parameters() + update_tool_parameters(reference) + update_appearance(UPDATE_ICON_STATE) + playsound(src, 'sound/items/change_jaws.ogg', 50, TRUE) + +/// Used to get reference item for the tools +/obj/item/borg/cyborg_omnitool/proc/reference_item_for_parameters() + SHOULD_CALL_PARENT(FALSE) + switch(tool_behaviour) + if(TOOL_SCALPEL) + reference = /obj/item/scalpel + if(TOOL_HEMOSTAT) + reference = /obj/item/hemostat + +/// Used to update sounds and tool parameters during switching +/obj/item/borg/cyborg_omnitool/proc/update_tool_parameters(/obj/item/reference) + if(isnull(reference)) + sharpness = NONE + force = initial(force) + hitsound = initial(hitsound) + usesound = initial(usesound) + else + force = initial(reference.force) + sharpness = initial(reference.sharpness) + hitsound = initial(reference.hitsound) + usesound = initial(reference.usesound) + +/obj/item/borg/cyborg_omnitool/update_icon_state() + icon_state = initial(icon_state) + + if (tool_behaviour) + icon_state += "_[sanitize_css_class_name(tool_behaviour)]" + + if(tool_behaviour) + inhand_icon_state = initial(inhand_icon_state) + "_deactivated" + else + inhand_icon_state = initial(inhand_icon_state) + + return ..() + +/** + * proc that's used when cyborg is upgraded with an omnitool upgrade board + * + * adds name and desc changes. also changes tools to default configuration to indicate it's been sucessfully upgraded + * changes the toolspeed to the upgraded_toolspeed variable + */ +/obj/item/borg/cyborg_omnitool/proc/upgrade_omnitool() + name = "advanced [name]" + desc += "\nIt seems that this one has been upgraded to perform tasks faster." + toolspeed = upgraded_toolspeed + upgraded = TRUE + tool_behaviour = null + reference_item_for_parameters() + update_tool_parameters(reference) + update_appearance(UPDATE_ICON_STATE) + playsound(src, 'sound/items/change_jaws.ogg', 50, TRUE) + +/** + * proc that's used when a cyborg with an upgraded omnitool is downgraded + * + * reverts all name and desc changes to it's initial variables. also changes tools to default configuration to indicate it's been downgraded + * changes the toolspeed to default variable + */ +/obj/item/borg/cyborg_omnitool/proc/downgrade_omnitool() + name = initial(name) + desc = initial(desc) + toolspeed = initial(toolspeed) + upgraded = FALSE + tool_behaviour = null + reference_item_for_parameters() + update_tool_parameters(reference) + update_appearance(UPDATE_ICON_STATE) + playsound(src, 'sound/items/change_jaws.ogg', 50, TRUE) + +/obj/item/borg/cyborg_omnitool/medical + name = "surgical omni-toolset" + desc = "A set of surgical tools used by cyborgs to operate on various surgical operations." + item_flags = SURGICAL_TOOL + +/obj/item/borg/cyborg_omnitool/medical/get_all_tool_behaviours() + return list(TOOL_SCALPEL, TOOL_HEMOSTAT, TOOL_RETRACTOR, TOOL_SAW, TOOL_DRILL, TOOL_CAUTERY, TOOL_BONESET) + +/obj/item/borg/cyborg_omnitool/medical/Initialize(mapload) + . = ..() + AddComponent(/datum/component/butchering, \ + speed = 8 SECONDS, \ + effectiveness = 100, \ + disabled = TRUE, \ + ) + radial_menu_options = list( + TOOL_SCALPEL = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_SCALPEL]"), + TOOL_HEMOSTAT = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_HEMOSTAT]"), + TOOL_RETRACTOR = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_RETRACTOR]"), + TOOL_SAW = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_SAW]"), + TOOL_DRILL = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_DRILL]"), + TOOL_CAUTERY = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_CAUTERY]"), + TOOL_BONESET = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_BONESET]"), + TOOL_DRAPES = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_DRAPES]"), + ) + +/obj/item/borg/cyborg_omnitool/medical/reference_item_for_parameters() + var/datum/component/butchering/butchering = src.GetComponent(/datum/component/butchering) + butchering.butchering_enabled = (tool_behaviour == TOOL_SCALPEL || tool_behaviour == TOOL_SAW) + RemoveElement(/datum/element/eyestab) + qdel(GetComponent(/datum/component/surgery_initiator)) + item_flags = SURGICAL_TOOL + switch(tool_behaviour) + if(TOOL_SCALPEL) + reference = /obj/item/scalpel + AddElement(/datum/element/eyestab) + if(TOOL_DRILL) + reference = /obj/item/surgicaldrill + AddElement(/datum/element/eyestab) + if(TOOL_HEMOSTAT) + reference = /obj/item/hemostat + if(TOOL_RETRACTOR) + reference = /obj/item/retractor + if(TOOL_CAUTERY) + reference = /obj/item/cautery + if(TOOL_SAW) + reference = /obj/item/circular_saw + if(TOOL_BONESET) + reference = /obj/item/bonesetter + if(TOOL_DRAPES) + reference = /obj/item/surgical_drapes + AddComponent(/datum/component/surgery_initiator) + item_flags = null + +//Toolset for engineering cyborgs, this is all of the tools except for the welding tool. since it's quite hard to implement (read:can't be arsed to) +/obj/item/borg/cyborg_omnitool/engineering + name = "engineering omni-toolset" + desc = "A set of engineering tools used by cyborgs to conduct various engineering tasks." + icon = 'icons/obj/items_cyborg.dmi' + icon_state = "toolkit_engiborg" + item_flags = null + toolspeed = 0.5 + upgraded_toolspeed = 0.3 + +/obj/item/borg/cyborg_omnitool/engineering/get_all_tool_behaviours() + return list(TOOL_SCREWDRIVER, TOOL_CROWBAR, TOOL_WRENCH, TOOL_WIRECUTTER, TOOL_MULTITOOL) + +/obj/item/borg/cyborg_omnitool/engineering/Initialize(mapload) + . = ..() + radial_menu_options = list( + TOOL_SCREWDRIVER = image(icon = 'icons/obj/tools.dmi', icon_state = "[TOOL_SCREWDRIVER]_map"), + TOOL_CROWBAR = image(icon = 'icons/obj/tools.dmi', icon_state = "[TOOL_CROWBAR]"), + TOOL_WRENCH = image(icon = 'icons/obj/tools.dmi', icon_state = "[TOOL_WRENCH]"), + TOOL_WIRECUTTER = image(icon = 'icons/obj/tools.dmi', icon_state = "[TOOL_WIRECUTTER]_map"), + TOOL_MULTITOOL = image(icon = 'icons/obj/devices/tool.dmi', icon_state = "[TOOL_MULTITOOL]"), + ) + +/obj/item/borg/cyborg_omnitool/engineering/reference_item_for_parameters() + RemoveElement(/datum/element/eyestab) + switch(tool_behaviour) + if(TOOL_SCREWDRIVER) + reference = /obj/item/crowbar + AddElement(/datum/element/eyestab) + if(TOOL_CROWBAR) + reference = /obj/item/surgicaldrill + if(TOOL_WRENCH) + reference = /obj/item/wrench + if(TOOL_WIRECUTTER) + reference = /obj/item/wirecutters + if(TOOL_MULTITOOL) + reference = /obj/item/multitool + #undef PKBORG_DAMPEN_CYCLE_DELAY #undef POWER_RECHARGE_CYBORG_DRAIN_MULTIPLIER +#undef NO_TOOL +#undef TOOL_DRAPES diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 885a97a9329..666ae97105f 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -298,7 +298,7 @@ /// Minimum time between repairs in seconds var/repair_cooldown = 4 var/on = FALSE - var/energy_cost = 10 KILO JOULES + var/energy_cost = 0.01 * STANDARD_CELL_CHARGE var/datum/action/toggle_action /obj/item/borg/upgrade/selfrepair/action(mob/living/silicon/robot/R, user = usr) @@ -366,16 +366,16 @@ if(cyborg.health < cyborg.maxHealth) if(cyborg.health < 0) repair_amount = -2.5 - energy_cost = 30 KILO JOULES + energy_cost = 0.03 * STANDARD_CELL_CHARGE else repair_amount = -1 - energy_cost = 10 KILO JOULES + energy_cost = 0.01 * STANDARD_CELL_CHARGE cyborg.adjustBruteLoss(repair_amount) cyborg.adjustFireLoss(repair_amount) cyborg.updatehealth() cyborg.cell.use(energy_cost) else - cyborg.cell.use(5 KILO JOULES) + cyborg.cell.use(0.005 * STANDARD_CELL_CHARGE) next_repair = world.time + repair_cooldown * 10 // Multiply by 10 since world.time is in deciseconds if(TIMER_COOLDOWN_FINISHED(src, COOLDOWN_BORG_SELF_REPAIR)) @@ -444,6 +444,60 @@ for(var/obj/item/reagent_containers/borghypo/H in R.model.modules) H.bypass_protection = initial(H.bypass_protection) +/obj/item/borg/upgrade/surgery_omnitool + name = "cyborg surgical omni-tool upgrade" + desc = "An upgrade to the Medical model, upgrading the built-in \ + surgical omnitool, to be on par with advanced surgical tools" + icon_state = "cyborg_upgrade3" + require_model = TRUE + model_type = list(/obj/item/robot_model/medical, /obj/item/robot_model/syndicate_medical) + model_flags = BORG_MODEL_MEDICAL + +/obj/item/borg/upgrade/surgery_omnitool/action(mob/living/silicon/robot/cyborg, user = usr) + . = ..() + if(!.) + return FALSE + for(var/obj/item/borg/cyborg_omnitool/medical/omnitool_upgrade in cyborg.model.modules) + if(omnitool_upgrade.upgraded) + to_chat(user, span_warning("This unit is already equipped with an omnitool upgrade!")) + return FALSE + for(var/obj/item/borg/cyborg_omnitool/medical/omnitool in cyborg.model.modules) + omnitool.upgrade_omnitool() + +/obj/item/borg/upgrade/surgery_omnitool/deactivate(mob/living/silicon/robot/cyborg, user = usr) + . = ..() + if(!.) + return FALSE + for(var/obj/item/borg/cyborg_omnitool/omnitool in cyborg.model.modules) + omnitool.downgrade_omnitool() + +/obj/item/borg/upgrade/engineering_omnitool + name = "cyborg engineering omni-tool upgrade" + desc = "An upgrade to the Engineering model, upgrading the built-in \ + engineering omnitool, to be on par with advanced engineering tools" + icon_state = "cyborg_upgrade3" + require_model = TRUE + model_type = list(/obj/item/robot_model/engineering, /obj/item/robot_model/saboteur) + model_flags = BORG_MODEL_ENGINEERING + +/obj/item/borg/upgrade/engineering_omnitool/action(mob/living/silicon/robot/cyborg, user = usr) + . = ..() + if(!.) + return FALSE + for(var/obj/item/borg/cyborg_omnitool/engineering/omnitool_upgrade in cyborg.model.modules) + if(omnitool_upgrade.upgraded) + to_chat(user, span_warning("This unit is already equipped with an omnitool upgrade!")) + return FALSE + for(var/obj/item/borg/cyborg_omnitool/engineering/omnitool in cyborg.model.modules) + omnitool.upgrade_omnitool() + +/obj/item/borg/upgrade/engineering_omnitool/deactivate(mob/living/silicon/robot/cyborg, user = usr) + . = ..() + if(!.) + return FALSE + for(var/obj/item/borg/cyborg_omnitool/omnitool in cyborg.model.modules) + omnitool.downgrade_omnitool() + /obj/item/borg/upgrade/defib name = "medical cyborg defibrillator" desc = "An upgrade to the Medical model, installing a built-in \ diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 66dd5a34b6a..2cc41b5d9f2 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -99,6 +99,15 @@ max_integrity = 55 w_class = WEIGHT_CLASS_NORMAL +/obj/item/shield/kite + name = "kite shield" + desc = "Protect your internal organs with this almond shaped shield." + icon_state = "kite" + inhand_icon_state = "kite" + custom_materials = list(/datum/material/wood = SHEET_MATERIAL_AMOUNT * 15) + shield_break_sound = 'sound/effects/grillehit.ogg' + max_integrity = 60 + /obj/item/shield/roman name = "\improper Roman shield" desc = "Bears an inscription on the inside: \"Romanes venio domus\"." diff --git a/code/game/objects/items/spear.dm b/code/game/objects/items/spear.dm index 401ffd46934..f4c0b58a11b 100644 --- a/code/game/objects/items/spear.dm +++ b/code/game/objects/items/spear.dm @@ -216,6 +216,31 @@ M.Copy_Parent(user, 100, user.health/2.5, 12, 30) M.GiveTarget(L) +//MILITARY +/obj/item/spear/military + icon_state = "military_spear0" + base_icon_state = "military_spear0" + icon_prefix = "military_spear" + name = "military Javelin" + desc = "A stick with a seemingly blunt spearhead on its end. Looks like it might break bones easily." + attack_verb_continuous = list("attacks", "pokes", "jabs") + attack_verb_simple = list("attack", "poke", "jab") + throwforce = 30 + demolition_mod = 1 + wound_bonus = 5 + bare_wound_bonus = 25 + throw_range = 9 + throw_speed = 5 + sharpness = NONE // we break bones instead of cutting flesh + +/obj/item/spear/military/add_headpike_component() + var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/headpikemilitary) + + AddComponent( + /datum/component/slapcrafting,\ + slapcraft_recipes = slapcraft_recipe_list,\ + ) + /* * Bone Spear */ diff --git a/code/game/objects/items/stacks/golem_food/golem_status_effects.dm b/code/game/objects/items/stacks/golem_food/golem_status_effects.dm index c55a39c20f7..bf2c628ab97 100644 --- a/code/game/objects/items/stacks/golem_food/golem_status_effects.dm +++ b/code/game/objects/items/stacks/golem_food/golem_status_effects.dm @@ -160,6 +160,11 @@ owner.remove_traits(list(TRAIT_ANTIMAGIC, TRAIT_HOLY), TRAIT_STATUS_EFFECT(id)) return ..() +/// What do we multiply our damage by to convert it into power? +#define ENERGY_PER_DAMAGE (0.005 * STANDARD_CELL_CHARGE) +/// Multiplier to apply to burn damage, not 0 so that we can reverse it more easily +#define BURN_MULTIPLIER 0.05 + /// Heat immunity, turns heat damage into local power /datum/status_effect/golem/plasma overlay_state_prefix = "plasma" @@ -167,10 +172,6 @@ applied_fluff = "Plasma cooling rods sprout from your body. You can take the heat!" alert_icon_state = "sheet-plasma" alert_desc = "You are protected from high pressure and can convert heat damage into power." - /// What do we multiply our damage by to convert it into power? - var/energy_per_damage = 5 KILO JOULES - /// Multiplier to apply to burn damage, not 0 so that we can reverse it more easily - var/burn_multiplier = 0.05 /datum/status_effect/golem/plasma/on_apply() . = ..() @@ -179,14 +180,14 @@ owner.add_traits(list(TRAIT_RESISTHIGHPRESSURE, TRAIT_RESISTHEAT, TRAIT_ASHSTORM_IMMUNE), TRAIT_STATUS_EFFECT(id)) RegisterSignal(owner, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(on_burned)) var/mob/living/carbon/human/human_owner = owner - human_owner.physiology.burn_mod *= burn_multiplier + human_owner.physiology.burn_mod *= BURN_MULTIPLIER return TRUE /datum/status_effect/golem/plasma/on_remove() owner.remove_traits(list(TRAIT_RESISTHIGHPRESSURE, TRAIT_RESISTHEAT, TRAIT_ASHSTORM_IMMUNE), TRAIT_STATUS_EFFECT(id)) UnregisterSignal(owner, COMSIG_MOB_APPLY_DAMAGE) var/mob/living/carbon/human/human_owner = owner - human_owner.physiology.burn_mod /= burn_multiplier + human_owner.physiology.burn_mod /= BURN_MULTIPLIER return ..() /// When we take fire damage (or... technically also cold damage, we don't differentiate), zap a nearby APC @@ -195,7 +196,6 @@ if(damagetype != BURN) return - var/power = damage * energy_per_damage var/obj/machinery/power/energy_accumulator/ground = get_closest_atom(/obj/machinery/power/energy_accumulator, view(4, owner), owner) if (ground) zap_effect(ground) @@ -206,7 +206,10 @@ if (!our_apc) return zap_effect(our_apc) - our_apc.cell?.give(power) + our_apc.cell?.give(damage * ENERGY_PER_DAMAGE) + +#undef ENERGY_PER_DAMAGE +#undef BURN_MULTIPLIER /// Shoot a beam at the target atom /datum/status_effect/golem/plasma/proc/zap_effect(atom/target) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 18a95cd77d3..83235796a45 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -110,9 +110,9 @@ for(var/category in what_are_we_made_of.categories) switch(category) if(MAT_CATEGORY_BASE_RECIPES) - recipes |= SSmaterials.base_stack_recipes.Copy() + recipes |= DSmaterials.base_stack_recipes.Copy() if(MAT_CATEGORY_RIGID) - recipes |= SSmaterials.rigid_stack_recipes.Copy() + recipes |= DSmaterials.rigid_stack_recipes.Copy() update_weight() update_appearance() @@ -131,7 +131,7 @@ * - multiplier: The amount to multiply the mats per unit by. Defaults to 1. */ /obj/item/stack/proc/set_mats_per_unit(list/mats, multiplier=1) - mats_per_unit = SSmaterials.FindOrCreateMaterialCombo(mats, multiplier) + mats_per_unit = DSmaterials.FindOrCreateMaterialCombo(mats, multiplier) update_custom_materials() /** Updates the custom materials list of this stack. diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index cc548be16d2..dd4fb325858 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -406,7 +406,7 @@ /obj/item/storage/bag/tray/proc/do_scatter(obj/item/tray_item) var/delay = rand(2,4) - var/datum/move_loop/loop = SSmove_manager.move_rand(tray_item, list(NORTH,SOUTH,EAST,WEST), delay, timeout = rand(1, 2) * delay, flags = MOVEMENT_LOOP_START_FAST) + var/datum/move_loop/loop = DSmove_manager.move_rand(tray_item, list(NORTH,SOUTH,EAST,WEST), delay, timeout = rand(1, 2) * delay, flags = MOVEMENT_LOOP_START_FAST) //This does mean scattering is tied to the tray. Not sure how better to handle it RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(change_speed)) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index ebfa73aa2f9..a2c553fbea1 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -839,7 +839,7 @@ inhand_icon_state = "sheath" worn_icon_state = "sheath" w_class = WEIGHT_CLASS_BULKY - interaction_flags_click = NEED_DEXTERITY|NEED_HANDS + interaction_flags_click = parent_type::interaction_flags_click | NEED_DEXTERITY | NEED_HANDS /obj/item/storage/belt/sabre/Initialize(mapload) . = ..() diff --git a/code/game/objects/items/storage/storage.dm b/code/game/objects/items/storage/storage.dm index 8631d62e79e..75ca06ff0ff 100644 --- a/code/game/objects/items/storage/storage.dm +++ b/code/game/objects/items/storage/storage.dm @@ -2,6 +2,7 @@ name = "storage" icon = 'icons/obj/storage/storage.dmi' w_class = WEIGHT_CLASS_NORMAL + interaction_flags_click = ALLOW_RESTING|FORBID_TELEKINESIS_REACH var/rummage_if_nodrop = TRUE /// Should we preload the contents of this type? /// BE CAREFUL, THERE'S SOME REALLY NASTY SHIT IN THIS TYPEPATH diff --git a/code/game/objects/items/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm index b21deb35581..70c0ea0822a 100644 --- a/code/game/objects/items/tanks/tank_types.dm +++ b/code/game/objects/items/tanks/tank_types.dm @@ -8,7 +8,7 @@ * Generic */ /obj/item/tank/internals - interaction_flags_click = FORBID_TELEKINESIS_REACH|NEED_HANDS + interaction_flags_click = FORBID_TELEKINESIS_REACH|NEED_HANDS|ALLOW_RESTING /// Allows carbon to toggle internals via AltClick of the equipped tank. diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index 9950b8e9c93..5cef642634a 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -309,7 +309,7 @@ user.log_message("used Resin Launcher", LOG_GAME) playsound(src,'sound/items/syringeproj.ogg',40,TRUE) var/delay = 2 - var/datum/move_loop/loop = SSmove_manager.move_towards(resin, target, delay, timeout = delay * 5, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/loop = DSmove_manager.move_towards(resin, target, delay, timeout = delay * 5, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(resin_stop_check)) RegisterSignal(loop, COMSIG_QDELETING, PROC_REF(resin_landed)) return diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm index 56d7344f31b..9bb61e847b7 100644 --- a/code/game/objects/items/tools/crowbar.dm +++ b/code/game/objects/items/tools/crowbar.dm @@ -189,7 +189,7 @@ name = "hydraulic crowbar" desc = "A hydraulic prying tool, simple but powerful." icon = 'icons/obj/items_cyborg.dmi' - icon_state = "crowbar_cyborg" + icon_state = "toolkit_engiborg_crowbar" worn_icon_state = "crowbar" usesound = 'sound/items/jaws_pry.ogg' force = 10 diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index cbdc79e0420..02765122a13 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -148,7 +148,7 @@ name = "automated screwdriver" desc = "A powerful automated screwdriver, designed to be both precise and quick." icon = 'icons/obj/items_cyborg.dmi' - icon_state = "screwdriver_cyborg" + icon_state = "toolkit_engiborg_screwdriver" hitsound = 'sound/items/drill_hit.ogg' usesound = 'sound/items/drill_use.ogg' toolspeed = 0.5 diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm index dad9763bd3d..e7e4dbe699a 100644 --- a/code/game/objects/items/tools/wirecutters.dm +++ b/code/game/objects/items/tools/wirecutters.dm @@ -77,7 +77,7 @@ name = "powered wirecutters" desc = "Cuts wires with the power of ELECTRICITY. Faster than normal wirecutters." icon = 'icons/obj/items_cyborg.dmi' - icon_state = "wirecutters_cyborg" + icon_state = "toolkit_engiborg_cutters" worn_icon_state = "cutters" toolspeed = 0.5 random_color = FALSE diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm index c4326cf3de8..8fbb681acfc 100644 --- a/code/game/objects/items/tools/wrench.dm +++ b/code/game/objects/items/tools/wrench.dm @@ -87,7 +87,7 @@ name = "hydraulic wrench" desc = "An advanced robotic wrench, powered by internal hydraulics. Twice as fast as the handheld version." icon = 'icons/obj/items_cyborg.dmi' - icon_state = "wrench_cyborg" + icon_state = "toolkit_engiborg_wrench" toolspeed = 0.5 /obj/item/wrench/combat diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 2aa649844e5..f7717da19e7 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -175,6 +175,18 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 block_chance = 10 resistance_flags = NONE +//bootleg claymore +/obj/item/claymore/shortsword + name = "shortsword" + desc = "A mercenary's sword, chipped and worn from battles long gone. You could say it is a swordsman's shortsword short sword." + icon_state = "shortsword" + inhand_icon_state = "shortsword" + worn_icon_state = "shortsword" + slot_flags = ITEM_SLOT_BELT + force = 20 + demolition_mod = 0.75 + block_chance = 30 + /obj/item/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS desc = "THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!\nActivate it in your hand to point to the nearest victim." obj_flags = CONDUCTS_ELECTRICITY diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 8b4fef65293..ba2a8685b8b 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -20,7 +20,7 @@ LINEN BINS w_class = WEIGHT_CLASS_TINY resistance_flags = FLAMMABLE dying_key = DYE_REGISTRY_BEDSHEET - interaction_flags_click = NEED_DEXTERITY + interaction_flags_click = NEED_DEXTERITY|ALLOW_RESTING dog_fashion = /datum/dog_fashion/head/ghost /// Custom nouns to act as the subject of dreams diff --git a/code/game/objects/structures/gym/punching_bag.dm b/code/game/objects/structures/gym/punching_bag.dm index f441887f2c1..ef0db16e953 100644 --- a/code/game/objects/structures/gym/punching_bag.dm +++ b/code/game/objects/structures/gym/punching_bag.dm @@ -57,9 +57,12 @@ stamina_exhaustion = 2 if (is_heavy_gravity) stamina_exhaustion *= 1.5 + + if(HAS_TRAIT(user, TRAIT_STRENGTH)) //The strong get reductions to stamina damage taken while exercising + stamina_exhaustion *= 0.5 user.adjustStaminaLoss(stamina_exhaustion) - user.mind?.adjust_experience(/datum/skill/fitness, is_heavy_gravity ? 0.2 : 0.1) + user.mind?.adjust_experience(/datum/skill/athletics, is_heavy_gravity ? 0.2 : 0.1) user.apply_status_effect(/datum/status_effect/exercised) /obj/structure/punching_bag/wrench_act_secondary(mob/living/user, obj/item/tool) diff --git a/code/game/objects/structures/gym/weight_machine.dm b/code/game/objects/structures/gym/weight_machine.dm index d3614ee6815..3c531f04889 100644 --- a/code/game/objects/structures/gym/weight_machine.dm +++ b/code/game/objects/structures/gym/weight_machine.dm @@ -109,7 +109,7 @@ if(do_after(user, 8 SECONDS, src) && user.has_gravity()) // with enough dedication, even clowns can overcome their handicaps - var/clumsy_chance = 30 - (user.mind.get_skill_level(/datum/skill/fitness) * 5) + var/clumsy_chance = 30 - (user.mind.get_skill_level(/datum/skill/athletics) * 5) if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(clumsy_chance)) playsound(src, 'sound/effects/bang.ogg', 50, TRUE) to_chat(user, span_warning("Your hand slips, causing the [name] to smash you!")) @@ -135,7 +135,7 @@ if(iscarbon(user)) var/gravity_modifier = user.has_gravity() > STANDARD_GRAVITY ? 2 : 1 // remember the real xp gain is from sleeping after working out - user.mind.adjust_experience(/datum/skill/fitness, WORKOUT_XP * gravity_modifier) + user.mind.adjust_experience(/datum/skill/athletics, WORKOUT_XP * gravity_modifier) user.apply_status_effect(/datum/status_effect/exercised, EXERCISE_STATUS_DURATION) end_workout() @@ -168,9 +168,13 @@ return TRUE // No weight? I could do this all day var/gravity_modifier = affected_gravity > STANDARD_GRAVITY ? 0.75 : 1 // the amount of workouts you can do before you hit stamcrit - var/workout_reps = total_workout_reps[user.mind.get_skill_level(/datum/skill/fitness)] * gravity_modifier + var/workout_reps = total_workout_reps[user.mind.get_skill_level(/datum/skill/athletics)] * gravity_modifier // total stamina drain of 1 workout calculated based on the workout length var/stamina_exhaustion = FLOOR(user.maxHealth / workout_reps / WORKOUT_LENGTH, 0.1) + + if(HAS_TRAIT(user, TRAIT_STRENGTH)) //The strong get reductions to stamina damage taken while exercising + stamina_exhaustion *= 0.5 + user.adjustStaminaLoss(stamina_exhaustion * seconds_per_tick) return TRUE diff --git a/code/game/objects/structures/headpike.dm b/code/game/objects/structures/headpike.dm index 0c29d92d53b..b4cffdb654d 100644 --- a/code/game/objects/structures/headpike.dm +++ b/code/game/objects/structures/headpike.dm @@ -17,6 +17,10 @@ icon_state = "headpike-bamboo" speartype = /obj/item/spear/bamboospear +/obj/structure/headpike/military //for military spears + icon_state = "headpike-military" + speartype = /obj/item/spear/military + /obj/structure/headpike/Initialize(mapload) . = ..() if(mapload) diff --git a/code/game/objects/structures/lavaland/gulag_vent.dm b/code/game/objects/structures/lavaland/gulag_vent.dm index aa13a1621d8..b564908cdc6 100644 --- a/code/game/objects/structures/lavaland/gulag_vent.dm +++ b/code/game/objects/structures/lavaland/gulag_vent.dm @@ -34,9 +34,10 @@ occupied = FALSE if (!succeeded) return - living_user.mind?.adjust_experience(/datum/skill/fitness, 10) + var/stamina_damage_to_inflict = HAS_TRAIT(user, TRAIT_STRENGTH) ? 60 : 120 //Decreases the amount of stamina damage inflicted by half if you're STRONG + living_user.mind?.adjust_experience(/datum/skill/athletics, 10) living_user.apply_status_effect(/datum/status_effect/exercised) new spawned_boulder(get_turf(living_user)) living_user.visible_message(span_notice("[living_user] hauls a boulder out of [src].")) - living_user.apply_damage(120, STAMINA) + living_user.apply_damage(stamina_damage_to_inflict, STAMINA) playsound(src, 'sound/weapons/genhit.ogg', vol = 50, vary = TRUE) diff --git a/code/game/objects/structures/lavaland/ore_vent.dm b/code/game/objects/structures/lavaland/ore_vent.dm index 70ab15427b7..a6ab8a58d70 100644 --- a/code/game/objects/structures/lavaland/ore_vent.dm +++ b/code/game/objects/structures/lavaland/ore_vent.dm @@ -270,6 +270,7 @@ balloon_alert_to_viewers("vent tapped!") icon_state = icon_state_tapped update_appearance(UPDATE_ICON_STATE) + qdel(GetComponent(/datum/component/gps)) else visible_message(span_danger("\the [src] creaks and groans as the mining attempt fails, and the vent closes back up.")) icon_state = initial(icon_state) @@ -308,6 +309,7 @@ discovered = TRUE generate_description(user) balloon_alert_to_viewers("vent scanned!") + AddComponent(/datum/component/gps, name) return if(DOING_INTERACTION_WITH_TARGET(user, src)) @@ -321,6 +323,7 @@ discovered = TRUE balloon_alert(user, "vent scanned!") generate_description(user) + AddComponent(/datum/component/gps, name) var/obj/item/card/id/user_id_card = user.get_idcard(TRUE) if(isnull(user_id_card)) return diff --git a/code/game/objects/structures/mystery_box.dm b/code/game/objects/structures/mystery_box.dm index 1843ef99761..ab8a25f04c6 100644 --- a/code/game/objects/structures/mystery_box.dm +++ b/code/game/objects/structures/mystery_box.dm @@ -67,6 +67,32 @@ GLOBAL_LIST_INIT(mystery_box_extended, list( /obj/item/circular_saw, )) +GLOBAL_LIST_INIT(mystery_magic, list( + /obj/item/gun/magic/wand/arcane_barrage, + /obj/item/gun/magic/wand/arcane_barrage/blood, + /obj/item/gun/magic/wand/fireball, + /obj/item/gun/magic/wand/resurrection, + /obj/item/gun/magic/wand/death, + /obj/item/gun/magic/wand/polymorph, + /obj/item/gun/magic/wand/teleport, + /obj/item/gun/magic/wand/door, + /obj/item/gun/magic/wand/nothing, + /obj/item/storage/belt/wands/full, + /obj/item/gun/magic/staff/healing, + /obj/item/gun/magic/staff/change, + /obj/item/gun/magic/staff/animate, + /obj/item/gun/magic/staff/chaos, + /obj/item/gun/magic/staff/door, + /obj/item/gun/magic/staff/honk, + /obj/item/gun/magic/staff/spellblade, + /obj/item/gun/magic/staff/locker, + /obj/item/gun/magic/staff/flying, + /obj/item/gun/magic/staff/babel, + /obj/item/singularityhammer, + /obj/item/mod/control/pre_equipped/enchanted, + /obj/item/runic_vendor_scepter, +)) + /obj/structure/mystery_box name = "mystery box" @@ -207,6 +233,12 @@ GLOBAL_LIST_INIT(mystery_box_extended, list( /obj/structure/mystery_box/tdome/generate_valid_types() valid_types = GLOB.mystery_box_guns + GLOB.mystery_box_extended +/obj/structure/mystery_box/wands + desc = "A wooden crate that seems equally magical and mysterious, capable of granting the user all kinds of different magical items." + +/obj/structure/mystery_box/wands/generate_valid_types() + valid_types = GLOB.mystery_magic + /// This represents the item that comes out of the box and is constantly changing before the box finishes deciding. Can probably be just an /atom or /movable. /obj/mystery_box_item diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm index b1168302f68..48848df0fd5 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -94,7 +94,7 @@ moving = TRUE current_tube = tube - var/datum/move_loop/engine = SSmove_manager.force_move_dir(src, dir, 0, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/engine = DSmove_manager.force_move_dir(src, dir, 0, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) RegisterSignal(engine, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(before_pipe_transfer)) RegisterSignal(engine, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(after_pipe_transfer)) RegisterSignal(engine, COMSIG_QDELETING, PROC_REF(engine_finish)) diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm index 8165b35a256..02c714c25ff 100644 --- a/code/game/turfs/open/lava.dm +++ b/code/game/turfs/open/lava.dm @@ -40,6 +40,8 @@ var/mask_state = "lava-lightmask" /// The type for the preset fishing spot of this type of turf. var/fish_source_type = /datum/fish_source/lavaland + /// The color we use for our immersion overlay + var/immerse_overlay_color = "#a15e1b" /turf/open/lava/Initialize(mapload) . = ..() @@ -48,7 +50,7 @@ refresh_light() if(!smoothing_flags) update_appearance() - + AddElement(/datum/element/immerse, icon, icon_state, "immerse", immerse_overlay_color) /turf/open/lava/Destroy() for(var/mob/living/leaving_mob in contents) @@ -337,6 +339,7 @@ smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_FLOOR_LAVA canSmoothWith = SMOOTH_GROUP_FLOOR_LAVA underfloor_accessibility = 2 //This avoids strangeness when routing pipes / wires along catwalks over lava + immerse_overlay_color = "#F98511" /turf/open/lava/smooth/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS @@ -360,6 +363,7 @@ immunity_trait = TRAIT_SNOWSTORM_IMMUNE immunity_resistance_flags = FREEZE_PROOF lava_temperature = 100 + immerse_overlay_color = "#CD4C9F" /turf/open/lava/plasma/examine(mob/user) . = ..() diff --git a/code/game/world.dm b/code/game/world.dm index 53f3a0fe95d..a7391f2ab15 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -17,6 +17,7 @@ GLOBAL_VAR(restart_counter) * - world.init_byond_tracy() * - (Start native profiling) * - world.init_debugger() + * - SysMgr (all data systems) * - Master => * - config *unloaded * - (all subsystems) PreInit() @@ -84,6 +85,9 @@ GLOBAL_VAR(restart_counter) // Create the logger logger = new + // Initialize all the data systems + SysMgr = new + // THAT'S IT, WE'RE DONE, THE. FUCKING. END. Master = new diff --git a/code/modules/admin/verbs/adminevents.dm b/code/modules/admin/verbs/adminevents.dm index 32e49cf2e73..fe62bb97d81 100644 --- a/code/modules/admin/verbs/adminevents.dm +++ b/code/modules/admin/verbs/adminevents.dm @@ -253,11 +253,11 @@ ADMIN_VERB(run_weather, R_FUN, "Run Weather", "Triggers specific weather on the ADMIN_VERB(command_report_footnote, R_ADMIN, "Command Report Footnote", "Adds a footnote to the roundstart command report.", ADMIN_CATEGORY_EVENTS) var/datum/command_footnote/command_report_footnote = new /datum/command_footnote() - SScommunications.block_command_report += 1 //Add a blocking condition to the counter until the inputs are done. + DScommunications.block_command_report += 1 //Add a blocking condition to the counter until the inputs are done. command_report_footnote.message = tgui_input_text(user, "This message will be attached to the bottom of the roundstart threat report. Be sure to delay the roundstart report if you need extra time.", "P.S.") if(!command_report_footnote.message) - SScommunications.block_command_report -= 1 + DScommunications.block_command_report -= 1 qdel(command_report_footnote) return @@ -266,8 +266,8 @@ ADMIN_VERB(command_report_footnote, R_ADMIN, "Command Report Footnote", "Adds a if(!command_report_footnote.signature) command_report_footnote.signature = "Classified" - SScommunications.command_report_footnotes += command_report_footnote - SScommunications.block_command_report-- + DScommunications.command_report_footnotes += command_report_footnote + DScommunications.block_command_report-- message_admins("[user] has added a footnote to the command report: [command_report_footnote.message], signed [command_report_footnote.signature]") @@ -276,5 +276,5 @@ ADMIN_VERB(command_report_footnote, R_ADMIN, "Command Report Footnote", "Adds a var/signature ADMIN_VERB(delay_command_report, R_FUN, "Delay Command Report", "Prevents the roundstart command report from being sent; or forces it to send it delayed.", ADMIN_CATEGORY_EVENTS) - SScommunications.block_command_report = !SScommunications.block_command_report - message_admins("[key_name_admin(user)] has [(SScommunications.block_command_report ? "delayed" : "sent")] the roundstart command report.") + DScommunications.block_command_report = !DScommunications.block_command_report + message_admins("[key_name_admin(user)] has [(DScommunications.block_command_report ? "delayed" : "sent")] the roundstart command report.") diff --git a/code/modules/admin/view_variables/debug_variable_appearance.dm b/code/modules/admin/view_variables/debug_variable_appearance.dm new file mode 100644 index 00000000000..9e92eba4605 --- /dev/null +++ b/code/modules/admin/view_variables/debug_variable_appearance.dm @@ -0,0 +1,101 @@ +/// Shows a header name on top when you investigate an appearance/image +/image/vv_get_header() + . = list() + var/icon_name = "[icon || "null"]
" + . += replacetext(icon_name, "icons/obj", "") // shortens the name. We know the path already. + if(icon) + . += icon_state ? "\"[icon_state]\"" : "(icon_state = null)" + +/// Makes nice short vv names for images +/image/debug_variable_value(name, level, datum/owner, sanitize, display_flags) + var/display_name = "[type]" + if("[src]" != "[type]") // If we have a name var, let's use it. + display_name = "[src] [type]" + + var/display_value + var/list/icon_file_name = splittext("[icon]", "/") + if(length(icon_file_name)) + display_value = icon_file_name[length(icon_file_name)] + else + display_value = "null" + + if(icon_state) + display_value = "[display_value]:[icon_state]" + + var/display_ref = get_vv_link_ref() + return "[display_name] ([display_value]) [display_ref]" + +/// Returns the ref string to use when displaying this image in the vv menu of something else +/image/proc/get_vv_link_ref() + return REF(src) + +// It is endlessly annoying to display /appearance directly for stupid byond reasons, so we copy everything we care about into a holder datum +// That we can override procs on and store other vars on and such. +/mutable_appearance/appearance_mirror + // So people can see where it came from + var/appearance_ref + // vis flags can't be displayed by mutable appearances cause it don't make sense as overlays, but appearances do carry them + // can't use the name either for byond reasons + var/_vis_flags + +// all alone at the end of the universe +GLOBAL_DATUM_INIT(pluto, /atom/movable, new /atom/movable(null)) + +// arg is actually an appearance, typed as mutable_appearance as closest mirror +/mutable_appearance/appearance_mirror/New(mutable_appearance/appearance_father) + . = ..() // /mutable_appearance/New() copies over all the appearance vars MAs care about by default + // We copy over our appearance onto an atom. This is done so we can read vars carried by but not accessible on appearances + GLOB.pluto.appearance = appearance_father + _vis_flags = GLOB.pluto.vis_flags + appearance_ref = REF(appearance_father) + +// This means if the appearance loses refs before a click it's gone, but that's consistent to other datums so it's fine +// Need to ref the APPEARANCE because we just free on our own, which sorta fucks this operation up you know? +/mutable_appearance/appearance_mirror/get_vv_link_ref() + return appearance_ref + +/mutable_appearance/appearance_mirror/can_vv_get(var_name) + var/static/datum/beloved = new() + if(beloved.vars.Find(var_name)) // If datums have it, get out + return FALSE + // If it is one of the two args on /image, yeet (I am sorry) + if(var_name == NAMEOF(src, realized_overlays)) + return FALSE + if(var_name == NAMEOF(src, realized_underlays)) + return FALSE + // Filtering out the stuff I know we don't care about + if(var_name == NAMEOF(src, x)) + return FALSE + if(var_name == NAMEOF(src, y)) + return FALSE + if(var_name == NAMEOF(src, z)) + return FALSE + // Could make an argument for these but I think they will just confuse people, so yeeet +#ifndef SPACEMAN_DMM // Spaceman doesn't believe in contents on appearances, sorry lads + if(var_name == NAMEOF(src, contents)) + return FALSE +#endif + if(var_name == NAMEOF(src, loc)) + return FALSE + if(var_name == NAMEOF(src, vis_contents)) + return FALSE + return ..() + +/mutable_appearance/appearance_mirror/vv_get_var(var_name) + // No editing for you + var/value = vars[var_name] + return "
  • (READ ONLY) [var_name] = [_debug_variable_value(var_name, value, 0, src, sanitize = TRUE, display_flags = NONE)]
  • " + +/mutable_appearance/appearance_mirror/vv_get_dropdown() + SHOULD_CALL_PARENT(FALSE) + + . = list() + VV_DROPDOWN_OPTION("", "---") + VV_DROPDOWN_OPTION(VV_HK_CALLPROC, "Call Proc") + VV_DROPDOWN_OPTION(VV_HK_MARK, "Mark Object") + VV_DROPDOWN_OPTION(VV_HK_TAG, "Tag Datum") + VV_DROPDOWN_OPTION(VV_HK_DELETE, "Delete") + VV_DROPDOWN_OPTION(VV_HK_EXPOSE, "Show VV To Player") + +/proc/get_vv_appearance(mutable_appearance/appearance) // actually appearance yadeeyada + return new /mutable_appearance/appearance_mirror(appearance) diff --git a/code/modules/admin/view_variables/debug_variables.dm b/code/modules/admin/view_variables/debug_variables.dm index 8aea000a1a6..a4035acd014 100644 --- a/code/modules/admin/view_variables/debug_variables.dm +++ b/code/modules/admin/view_variables/debug_variables.dm @@ -30,6 +30,9 @@ // This is split into a seperate proc mostly to make errors that happen not break things too much /proc/_debug_variable_value(name, value, level, datum/owner, sanitize, display_flags) + if(isappearance(value)) + value = get_vv_appearance(value) + . = "DISPLAY_ERROR: ([value] [REF(value)])" // Make sure this line can never runtime if(isnull(value)) @@ -49,10 +52,6 @@ return "/icon ([value])" #endif - if(isappearance(value)) - var/image/actually_an_appearance = value - return "/appearance ([actually_an_appearance.icon])" - if(isfilter(value)) var/datum/filter_value = value return "/filter ([filter_value.type] [REF(filter_value)])" diff --git a/code/modules/admin/view_variables/view_variables.dm b/code/modules/admin/view_variables/view_variables.dm index b139ec9d488..37bf0911c60 100644 --- a/code/modules/admin/view_variables/view_variables.dm +++ b/code/modules/admin/view_variables/view_variables.dm @@ -1,7 +1,10 @@ +#define ICON_STATE_CHECKED 1 /// this dmi is checked. We don't check this one anymore. +#define ICON_STATE_NULL 2 /// this dmi has null-named icon_state, allowing it to show a sprite on vv editor. + ADMIN_VERB_AND_CONTEXT_MENU(debug_variables, R_NONE, "View Variables", "View the variables of a datum.", ADMIN_CATEGORY_DEBUG, datum/thing in world) user.debug_variables(thing) - // This is kept as a seperate proc because admins are able to show VV to non-admins + /client/proc/debug_variables(datum/thing in world) set category = "Debug" set name = "View Variables" @@ -18,6 +21,8 @@ ADMIN_VERB_AND_CONTEXT_MENU(debug_variables, R_NONE, "View Variables", "View the var/datum/asset/asset_cache_datum = get_asset_datum(/datum/asset/simple/vv) asset_cache_datum.send(usr) + if(isappearance(thing)) + thing = get_vv_appearance(thing) // this is /mutable_appearance/our_bs_subtype var/islist = islist(thing) || (!isdatum(thing) && hascall(thing, "Cut")) // Some special lists dont count as lists, but can be detected by if they have list procs if(!islist && !isdatum(thing)) return @@ -27,7 +32,7 @@ ADMIN_VERB_AND_CONTEXT_MENU(debug_variables, R_NONE, "View Variables", "View the var/icon/sprite var/hash - var/type = islist? /list : thing.type + var/type = islist ? /list : thing.type var/no_icon = FALSE if(isatom(thing)) @@ -36,8 +41,25 @@ ADMIN_VERB_AND_CONTEXT_MENU(debug_variables, R_NONE, "View Variables", "View the no_icon = TRUE else if(isimage(thing)) + // icon_state=null shows first image even if dmi has no icon_state for null name. + // This list remembers which dmi has null icon_state, to determine if icon_state=null should display a sprite + // (NOTE: icon_state="" is correct, but saying null is obvious) + var/static/list/dmi_nullstate_checklist = list() var/image/image_object = thing - sprite = icon(image_object.icon, image_object.icon_state) + var/icon_filename_text = "[image_object.icon]" // "icon(null)" type can exist. textifying filters it. + if(icon_filename_text) + if(image_object.icon_state) + sprite = icon(image_object.icon, image_object.icon_state) + + else // it means: icon_state="" + if(!dmi_nullstate_checklist[icon_filename_text]) + dmi_nullstate_checklist[icon_filename_text] = ICON_STATE_CHECKED + if("" in icon_states(image_object.icon)) + // this dmi has nullstate. We'll allow "icon_state=null" to show image. + dmi_nullstate_checklist[icon_filename_text] = ICON_STATE_NULL + + if(dmi_nullstate_checklist[icon_filename_text] == ICON_STATE_NULL) + sprite = icon(image_object.icon, image_object.icon_state) var/sprite_text if(sprite) @@ -285,3 +307,6 @@ datumrefresh=[refid];[HrefToken()]'>Refresh /client/proc/vv_update_display(datum/thing, span, content) src << output("[span]:[content]", "variables[REF(thing)].browser:replace_span") + +#undef ICON_STATE_CHECKED +#undef ICON_STATE_NULL diff --git a/code/modules/antagonists/malf_ai/malf_ai_modules.dm b/code/modules/antagonists/malf_ai/malf_ai_modules.dm index 099ed86044e..073d905646d 100644 --- a/code/modules/antagonists/malf_ai/malf_ai_modules.dm +++ b/code/modules/antagonists/malf_ai/malf_ai_modules.dm @@ -945,6 +945,8 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module)) var/prev_verbs /// Saved span state, used to restore after a voice change var/prev_span + /// The list of available voices + var/static/list/voice_options = list("normal", SPAN_ROBOT, SPAN_YELL, SPAN_CLOWN) /obj/machinery/ai_voicechanger/Initialize(mapload) . = ..() @@ -972,11 +974,12 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module)) /obj/machinery/ai_voicechanger/ui_data(mob/user) var/list/data = list() - data["voices"] = list("normal", SPAN_ROBOT, SPAN_YELL, SPAN_CLOWN) //manually adding this since i dont see other option + data["voices"] = voice_options data["loud"] = loudvoice data["on"] = changing_voice data["say_verb"] = say_verb data["name"] = say_name + data["selected"] = say_span || owner.speech_span return data /obj/machinery/ai_voicechanger/ui_act(action, params) @@ -1010,9 +1013,23 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module)) if(changing_voice) owner.radio.use_command = loudvoice if("look") - say_span = params["look"] + var/selection = params["look"] + if(isnull(selection)) + return FALSE + + var/found = FALSE + for(var/option in voice_options) + if(option == selection) + found = TRUE + break + if(!found) + stack_trace("User attempted to select an unavailable voice option") + return FALSE + + say_span = selection if(changing_voice) owner.speech_span = say_span + to_chat(usr, span_notice("Voice set to [selection].")) if("verb") say_verb = params["verb"] if(changing_voice) diff --git a/code/modules/antagonists/ninja/ninjaDrainAct.dm b/code/modules/antagonists/ninja/ninjaDrainAct.dm index c50df819e0d..403da2327a2 100644 --- a/code/modules/antagonists/ninja/ninjaDrainAct.dm +++ b/code/modules/antagonists/ninja/ninjaDrainAct.dm @@ -1,3 +1,8 @@ +/// Minimum amount of energy we can drain in a single drain action +#define NINJA_MIN_DRAIN (0.2 * STANDARD_CELL_CHARGE) +/// Maximum amount of energy we can drain in a single drain action +#define NINJA_MAX_DRAIN (0.4 * STANDARD_CELL_CHARGE) + /** * Atom level proc for space ninja's glove interactions. * @@ -26,7 +31,7 @@ var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread() spark_system.set_up(5, 0, loc) while(cell.charge> 0 && !maxcapacity) - drain = rand(hacking_module.mindrain, hacking_module.maxdrain) + drain = rand(NINJA_MIN_DRAIN, NINJA_MAX_DRAIN) if(cell.charge < drain) drain = cell.charge if(hacking_module.mod.get_charge() + drain > hacking_module.mod.get_max_charge()) @@ -62,7 +67,7 @@ var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread() spark_system.set_up(5, 0, loc) while(charge > 0 && !maxcapacity) - drain = rand(hacking_module.mindrain, hacking_module.maxdrain) + drain = rand(NINJA_MIN_DRAIN, NINJA_MAX_DRAIN) if(charge < drain) drain = charge if(hacking_module.mod.get_charge() + drain > hacking_module.mod.get_max_charge()) @@ -228,7 +233,7 @@ var/drain_total = 0 var/datum/powernet/wire_powernet = powernet while(!maxcapacity && src) - drain = (round((rand(hacking_module.mindrain, hacking_module.maxdrain))/2)) + drain = (round((rand(NINJA_MIN_DRAIN, NINJA_MAX_DRAIN))/2)) var/drained = 0 if(wire_powernet && do_after(ninja, 1 SECONDS, target = src, hidden = TRUE)) drained = min(drain, delayed_surplus()) @@ -264,7 +269,7 @@ var/drain_total = 0 if(get_charge()) while(cell.charge > 0 && !maxcapacity) - drain = rand(hacking_module.mindrain, hacking_module.maxdrain) + drain = rand(NINJA_MIN_DRAIN, NINJA_MAX_DRAIN) if(cell.charge < drain) drain = cell.charge if(hacking_module.mod.get_charge() + drain > hacking_module.mod.get_max_charge()) @@ -477,3 +482,6 @@ //FIRELOCKS// /obj/machinery/door/firedoor/ninjadrain_act(mob/living/carbon/human/ninja, obj/item/mod/module/hacker/hacking_module) crack_open() + +#undef NINJA_MIN_DRAIN +#undef NINJA_MAX_DRAIN diff --git a/code/modules/antagonists/nukeop/equipment/borgchameleon.dm b/code/modules/antagonists/nukeop/equipment/borgchameleon.dm index a2a072f02e2..9b536066843 100644 --- a/code/modules/antagonists/nukeop/equipment/borgchameleon.dm +++ b/code/modules/antagonists/nukeop/equipment/borgchameleon.dm @@ -1,5 +1,5 @@ -#define ACTIVATION_COST (300 KILO JOULES) -#define ACTIVATION_UP_KEEP (25 KILO WATTS) +#define ACTIVATION_COST (0.3 * STANDARD_CELL_CHARGE) +#define ACTIVATION_UP_KEEP (0.025 * STANDARD_CELL_RATE) /obj/item/borg_chameleon name = "cyborg chameleon projector" diff --git a/code/modules/antagonists/pirate/pirate_event.dm b/code/modules/antagonists/pirate/pirate_event.dm index e4a14182d0e..40cf038a214 100644 --- a/code/modules/antagonists/pirate/pirate_event.dm +++ b/code/modules/antagonists/pirate/pirate_event.dm @@ -42,7 +42,7 @@ priority_announce("Incoming subspace communication. Secure channel opened at all communication consoles.", "Incoming Message", SSstation.announcer.get_rand_report_sound()) threat.answer_callback = CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(pirates_answered), threat, chosen_gang, payoff, world.time) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(spawn_pirates), threat, chosen_gang), RESPONSE_MAX_TIME) - SScommunications.send_message(threat, unique = TRUE) + DScommunications.send_message(threat, unique = TRUE) /proc/pirates_answered(datum/comm_message/threat, datum/pirate_gang/chosen_gang, payoff, initial_send_time) if(world.time > initial_send_time + RESPONSE_MAX_TIME) diff --git a/code/modules/antagonists/pirate/pirate_gangs.dm b/code/modules/antagonists/pirate/pirate_gangs.dm index d3bc0968a12..cb2f5fc1428 100644 --- a/code/modules/antagonists/pirate/pirate_gangs.dm +++ b/code/modules/antagonists/pirate/pirate_gangs.dm @@ -206,3 +206,25 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) response_too_late = "You were not ready then, and now that time has passed. We can only go forward, never back." response_not_enough = "You have insulted us, but there shall be no feud, only swift justice!" announcement_color = "purple" + +//medieval militia, from OUTER SPACE! +/datum/pirate_gang/medieval + name = "Medieval Warmongers" + + is_heavy_threat = TRUE + ship_template_id = "medieval" + ship_name_pool = "medieval_names" + + threat_title = "HOMAGE PAYMENT REQUEST" + threat_content = "SALUTATIONS, THIS IS %SHIPNAME AND WE ARE COLLECTING MONEY \ + FROM THE VASSALS IN OUR TERRITORY, YOU JUST SO HAPPEN TO BE IN IT TOO!! NORMALLY \ + WE SLAUGHTER WEAKLINGS LIKE YOU FOR TRESPASING ON OUR LAND, BUT WE ARE WILLING \ + TO WELCOME YOU INTO OUR SPACE IF YOU PAY %PAYOFF AS HOMAGE TO OUR LAW. BE WISE ON YOUR CHOICE!! \ + (send message. send message. why message not sent?)." + arrival_announcement = "I FIGURED OUT HOW TO FLY MY SHIP, WE WILL BE DOCKING NEXT TO YOU IN A MINUTE!!" + possible_answers = list("Please don't hurt me.","You are dumb, go larp somewhere else.") + + response_received = "THIS WILL SUFFICE, REMEMBER WHO OWNS YOU!!" + response_rejected = "FOOLISH DECISION, I'LL MAKE AN EXAMPLE OUT OF YOUR CARCASS!! (does anyone remember how to pilot our ship?)" + response_too_late = "YOU ARE ALREADY UNDER SIEGE YOU BUFFON, ARE YOU BRAINSICK OR IGNORANT?!!" + response_not_enough = "DO THINK OF ME AS A JESTER? YOU ARE DEAD MEAT!! (i forgot how to fly the ship, tarnation.)" diff --git a/code/modules/antagonists/pirate/pirate_outfits.dm b/code/modules/antagonists/pirate/pirate_outfits.dm index 4c73cac107f..15a3d4fe2dc 100644 --- a/code/modules/antagonists/pirate/pirate_outfits.dm +++ b/code/modules/antagonists/pirate/pirate_outfits.dm @@ -148,3 +148,34 @@ glasses = null suit = /obj/item/clothing/suit/jacket/oversized head = /obj/item/clothing/head/costume/crown + +/datum/outfit/pirate/medieval + name = "Medieval Warmonger" + + id = null + glasses = null + uniform = /obj/item/clothing/under/costume/gamberson/military + suit = /obj/item/clothing/suit/armor/vest/military + suit_store = /obj/item/spear/military + back = /obj/item/storage/backpack/satchel/leather + gloves = /obj/item/clothing/gloves/color/brown + head = /obj/item/clothing/head/helmet/military + mask = /obj/item/clothing/mask/balaclava + shoes = /obj/item/clothing/shoes/workboots + belt = /obj/item/claymore/shortsword + l_pocket = /obj/item/flashlight/flare/torch + +/datum/outfit/pirate/medieval/warlord + name = "Medieval Warlord" + + neck = /obj/item/bedsheet/pirate + suit = /obj/item/clothing/suit/armor/riot/knight/warlord + suit_store = null + back = /obj/item/fireaxe/boardingaxe + gloves = /obj/item/clothing/gloves/combat + head = /obj/item/clothing/head/helmet/knight/warlord + mask = /obj/item/clothing/mask/breath + shoes = /obj/item/clothing/shoes/bronze + belt = /obj/item/gun/magic/hook + l_pocket = /obj/item/tank/internals/emergency_oxygen + r_pocket = /obj/item/flashlight/lantern diff --git a/code/modules/antagonists/pirate/pirate_roles.dm b/code/modules/antagonists/pirate/pirate_roles.dm index 64baa724db1..78a3d3fd12a 100644 --- a/code/modules/antagonists/pirate/pirate_roles.dm +++ b/code/modules/antagonists/pirate/pirate_roles.dm @@ -191,3 +191,33 @@ /obj/effect/mob_spawn/ghost_role/human/pirate/lustrous/gunner rank = "Coruscant" + +/obj/effect/mob_spawn/ghost_role/human/pirate/medieval + name = "\improper Improvised sleeper" + desc = "A body bag poked with holes, currently being used as a sleeping bag. Someone seems to be sleeping inside of it." + density = FALSE + you_are_text = "You were a nobody before, until you were given a sword and the opportunity to rise up in ranks. If you put some effort, you can make it big!" + flavour_text = "Raiding some cretins while engaging in bloodsport and violence? what a deal. Stay together and pillage everything!" + icon = 'icons/obj/medical/bodybag.dmi' + icon_state = "bodybag" + fluff_spawn = null + prompt_name = "a medieval warmonger" + outfit = /datum/outfit/pirate/medieval + rank = "Footsoldier" + +/obj/effect/mob_spawn/ghost_role/human/pirate/medieval/special(mob/living/carbon/spawned_mob) + . = ..() + if(rank == "Footsoldier") + ADD_TRAIT(spawned_mob, TRAIT_NOGUNS, INNATE_TRAIT) + spawned_mob.AddComponent(/datum/component/unbreakable) + var/datum/action/cooldown/mob_cooldown/dash/dodge = new(spawned_mob) + dodge.Grant(spawned_mob) + +/obj/effect/mob_spawn/ghost_role/human/pirate/medieval/warlord + rank = "Warlord" + outfit = /datum/outfit/pirate/medieval/warlord + +/obj/effect/mob_spawn/ghost_role/human/pirate/medieval/warlord/special(mob/living/carbon/spawned_mob) + . = ..() + spawned_mob.dna.add_mutation(/datum/mutation/human/hulk/superhuman) + spawned_mob.dna.add_mutation(/datum/mutation/human/gigantism) diff --git a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm index 04ebab73cbd..eaa1de48b58 100644 --- a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm +++ b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm @@ -96,6 +96,9 @@ light_color = COLOR_SOFT_RED possible_destinations = "pirate_away;pirate_home;pirate_custom" +/obj/machinery/computer/shuttle/pirate/drop_pod + possible_destinations = "null" + /obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/pirate name = "pirate shuttle navigation computer" desc = "Used to designate a precise transit location for the pirate shuttle." diff --git a/code/modules/antagonists/space_dragon/carp_rift.dm b/code/modules/antagonists/space_dragon/carp_rift.dm index e003bf76e4d..8a74d4b63da 100644 --- a/code/modules/antagonists/space_dragon/carp_rift.dm +++ b/code/modules/antagonists/space_dragon/carp_rift.dm @@ -160,7 +160,7 @@ newcarp.faction = dragon.owner.current.faction.Copy() if(SPT_PROB(1.5, seconds_per_tick)) var/rand_dir = pick(GLOB.cardinals) - SSmove_manager.move_to(src, get_step(src, rand_dir), 1) + DSmove_manager.move_to(src, get_step(src, rand_dir), 1) return // Increase time trackers and check for any updated states. diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index 44d00f3c170..222fcb39d16 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -362,7 +362,7 @@ qdel(src) return RegisterSignal(src, COMSIG_MOVABLE_CROSS_OVER, PROC_REF(check_teleport)) - SSmove_manager.move_towards(src, get_turf(whistle.whistler)) + DSmove_manager.move_towards(src, get_turf(whistle.whistler)) /// Check if anything the tornado crosses is the creator. /obj/effect/temp_visual/teleporting_tornado/proc/check_teleport(datum/source, atom/movable/crossed) diff --git a/code/modules/antagonists/xeno/xeno.dm b/code/modules/antagonists/xeno/xeno.dm index 115e40ca595..d2e0bddd0dd 100644 --- a/code/modules/antagonists/xeno/xeno.dm +++ b/code/modules/antagonists/xeno/xeno.dm @@ -87,7 +87,7 @@ explanation_text = "Escape from captivity." /datum/objective/escape_captivity/check_completion() - if(!istype(get_area(owner), SScommunications.captivity_area)) + if(!istype(get_area(owner), DScommunications.captivity_area)) return TRUE /datum/objective/advance_hive @@ -146,7 +146,7 @@ if(!captive_alien || captive_alien.stat == DEAD) return CAPTIVE_XENO_DEAD - if(istype(get_area(captive_alien), SScommunications.captivity_area)) + if(istype(get_area(captive_alien), DScommunications.captivity_area)) return CAPTIVE_XENO_FAIL return CAPTIVE_XENO_PASS @@ -155,7 +155,7 @@ /mob/living/carbon/alien/mind_initialize() ..() if(!mind.has_antag_datum(/datum/antagonist/xeno)) - if(SScommunications.xenomorph_egg_delivered && istype(get_area(src), SScommunications.captivity_area)) + if(DScommunications.xenomorph_egg_delivered && istype(get_area(src), DScommunications.captivity_area)) mind.add_antag_datum(/datum/antagonist/xeno/captive) else mind.add_antag_datum(/datum/antagonist/xeno) diff --git a/code/modules/asset_cache/assets/tgui.dm b/code/modules/asset_cache/assets/tgui.dm index 9c79925602c..4b31d93e037 100644 --- a/code/modules/asset_cache/assets/tgui.dm +++ b/code/modules/asset_cache/assets/tgui.dm @@ -1,3 +1,23 @@ +// If you use a file(...) object, instead of caching the asset it will be loaded from disk every time it's requested. +// This is useful for development, but not recommended for production. +// And if TGS is defined, we're being run in a production environment. + +#ifdef TGS +/datum/asset/simple/tgui + keep_local_name = FALSE + assets = list( + "tgui.bundle.js" = "tgui/public/tgui.bundle.js", + "tgui.bundle.css" = "tgui/public/tgui.bundle.css", + ) + +/datum/asset/simple/tgui_panel + keep_local_name = FALSE + assets = list( + "tgui-panel.bundle.js" = "tgui/public/tgui-panel.bundle.js", + "tgui-panel.bundle.css" = "tgui/public/tgui-panel.bundle.css", + ) + +#else /datum/asset/simple/tgui keep_local_name = TRUE assets = list( @@ -11,3 +31,5 @@ "tgui-panel.bundle.js" = file("tgui/public/tgui-panel.bundle.js"), "tgui-panel.bundle.css" = file("tgui/public/tgui-panel.bundle.css"), ) + +#endif diff --git a/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm b/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm index bb45d1f8c1f..f7eaf5788c9 100644 --- a/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm +++ b/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm @@ -140,7 +140,7 @@ if(istype(W, /obj/item/electroadaptive_pseudocircuit)) var/obj/item/electroadaptive_pseudocircuit/P = W - if(!P.adapt_circuit(user, circuit_cost = 25 KILO JOULES)) + if(!P.adapt_circuit(user, circuit_cost = 0.025 * STANDARD_CELL_CHARGE)) return user.visible_message(span_notice("[user] fabricates a circuit and places it into [src]."), \ span_notice("You adapt an air alarm circuit and slot it into the assembly.")) diff --git a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm index 56ee3c6039d..2da9ac752b5 100644 --- a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm +++ b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm @@ -127,7 +127,7 @@ if(anchored) use_energy(power_to_use) else - cell.use(power_to_use KILO JOULES) + cell.use(power_to_use) /obj/machinery/electrolyzer/proc/call_reactions(datum/gas_mixture/env) for(var/reaction in GLOB.electrolyzer_reactions) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm b/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm index dc1c2d6282f..157cbae9af0 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm @@ -5,14 +5,12 @@ var/obj/machinery/atmospherics/components/unary/gas_connector /datum/gas_machine_connector/New(location, obj/machinery/connecting_machine = null, direction = SOUTH, gas_volume) - gas_connector = new(location) - connected_machine = connecting_machine if(!connected_machine) - QDEL_NULL(gas_connector) qdel(src) return + gas_connector = new(location) gas_connector.dir = connected_machine.dir gas_connector.airs[1].volume = gas_volume @@ -41,7 +39,8 @@ RegisterSignal(connected_machine, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(pre_move_connected_machine)) RegisterSignal(connected_machine, COMSIG_MOVABLE_MOVED, PROC_REF(moved_connected_machine)) RegisterSignal(connected_machine, COMSIG_MACHINERY_DEFAULT_ROTATE_WRENCH, PROC_REF(wrenched_connected_machine)) - RegisterSignal(connected_machine, COMSIG_QDELETING, PROC_REF(deconstruct_connected_machine)) + RegisterSignal(connected_machine, COMSIG_OBJ_DECONSTRUCT, PROC_REF(deconstruct_connected_machine)) + RegisterSignal(connected_machine, COMSIG_QDELETING, PROC_REF(destroy_connected_machine)) /** * Unregister the signals previously registered @@ -51,7 +50,8 @@ COMSIG_MOVABLE_MOVED, COMSIG_MOVABLE_PRE_MOVE, COMSIG_MACHINERY_DEFAULT_ROTATE_WRENCH, - COMSIG_QDELETING, + COMSIG_OBJ_DECONSTRUCT, + COMSIG_QDELETING )) /** @@ -82,12 +82,18 @@ */ /datum/gas_machine_connector/proc/deconstruct_connected_machine() SIGNAL_HANDLER + relocate_airs() + +/** + * Called when the machine has been destroyed + */ +/datum/gas_machine_connector/proc/destroy_connected_machine() + SIGNAL_HANDLER + disconnect_connector() SSair.stop_processing_machine(connected_machine) unregister_from_machine() - connected_machine = null - QDEL_NULL(gas_connector) qdel(src) /** diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index 574daa2af3a..40258db903f 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -35,7 +35,12 @@ AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE) //if changing this, change the subtypes RemoveElements too, because thats how bespoke works /obj/machinery/atmospherics/pipe/on_deconstruction(disassembled) - releaseAirToTurf() + //we delete the parent here so it initializes air_temporary for us. See /datum/pipeline/Destroy() which calls temporarily_store_air() + QDEL_NULL(parent) + + if(air_temporary) + var/turf/T = loc + T.assume_air(air_temporary) return ..() @@ -61,11 +66,6 @@ replace_pipenet(parent, new /datum/pipeline) return list(parent) -/obj/machinery/atmospherics/pipe/proc/releaseAirToTurf() - if(air_temporary) - var/turf/T = loc - T.assume_air(air_temporary) - /obj/machinery/atmospherics/pipe/return_air() if(air_temporary) return air_temporary diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 75152798bba..6d4a8ad714a 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -483,7 +483,7 @@ var/energy_consumed = energy_factor * 250 * seconds_per_tick if(powered(AREA_USAGE_EQUIP, ignore_use_power = TRUE)) use_energy(energy_consumed, channel = AREA_USAGE_EQUIP) - else if(!internal_cell?.use(energy_consumed * 0.025 KILO JOULES)) + else if(!internal_cell?.use(energy_consumed * 0.025)) shielding_powered = FALSE SSair.start_processing_machine(src) investigate_log("shielding turned off due to power loss") diff --git a/code/modules/cards/deck/deck.dm b/code/modules/cards/deck/deck.dm index 54f8a5feba6..ccce3560249 100644 --- a/code/modules/cards/deck/deck.dm +++ b/code/modules/cards/deck/deck.dm @@ -11,7 +11,7 @@ hitsound = null attack_verb_continuous = list("attacks") attack_verb_simple = list("attack") - interaction_flags_click = NEED_DEXTERITY|FORBID_TELEKINESIS_REACH + interaction_flags_click = NEED_DEXTERITY|FORBID_TELEKINESIS_REACH|ALLOW_RESTING /// The amount of time it takes to shuffle var/shuffle_time = DECK_SHUFFLE_TIME /// Deck shuffling cooldown. diff --git a/code/modules/cards/singlecard.dm b/code/modules/cards/singlecard.dm index e03c5800346..0c228fbbb17 100644 --- a/code/modules/cards/singlecard.dm +++ b/code/modules/cards/singlecard.dm @@ -14,7 +14,7 @@ throw_range = 7 attack_verb_continuous = list("attacks") attack_verb_simple = list("attack") - interaction_flags_click = NEED_DEXTERITY|FORBID_TELEKINESIS_REACH + interaction_flags_click = NEED_DEXTERITY|FORBID_TELEKINESIS_REACH|ALLOW_RESTING /// Artistic style of the deck var/deckstyle = "nanotrasen" /// If the cards in the deck have different icon states (blank and CAS decks do not) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 4473f8663b2..4e0a38b2186 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -8,11 +8,11 @@ ///What level of bright light protection item has. var/flash_protect = FLASH_PROTECTION_NONE var/tint = 0 //Sets the item's level of visual impairment tint, normally set to the same as flash_protect - var/up = 0 //but separated to allow items to protect but not impair vision, like space helmets - var/visor_flags = 0 //flags that are added/removed when an item is adjusted up/down - var/visor_flags_inv = 0 //same as visor_flags, but for flags_inv - var/visor_flags_cover = 0 //same as above, but for flags_cover - ///What to toggle when toggled with weldingvisortoggle() + var/up = FALSE //but separated to allow items to protect but not impair vision, like space helmets + var/visor_flags = NONE //flags that are added/removed when an item is adjusted up/down + var/visor_flags_inv = NONE //same as visor_flags, but for flags_inv + var/visor_flags_cover = NONE //same as above, but for flags_cover + ///What to toggle when toggled with adjust_visor() var/visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT | VISOR_VISIONFLAGS | VISOR_INVISVIEW var/clothing_flags = NONE @@ -233,7 +233,9 @@ UnregisterSignal(user, COMSIG_MOVABLE_MOVED) for(var/trait in clothing_traits) REMOVE_CLOTHING_TRAIT(user, trait) - + if(iscarbon(user) && tint) + var/mob/living/carbon/carbon_user = user + carbon_user.update_tint() if(LAZYLEN(user_vars_remembered)) for(var/variable in user_vars_remembered) if(variable in user.vars) @@ -250,6 +252,9 @@ RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(bristle), override = TRUE) for(var/trait in clothing_traits) ADD_CLOTHING_TRAIT(user, trait) + if(iscarbon(user) && tint) + var/mob/living/carbon/carbon_user = user + carbon_user.update_tint() if (LAZYLEN(user_vars_to_edit)) for(var/variable in user_vars_to_edit) if(variable in user.vars) @@ -465,18 +470,30 @@ BLIND // can't see anything female_clothing_icon = fcopy_rsc(female_clothing_icon) GLOB.female_clothing_icons[index] = female_clothing_icon -/obj/item/clothing/proc/weldingvisortoggle(mob/user) //proc to toggle welding visors on helmets, masks, goggles, etc. +/// Proc that adjusts the clothing item, used by things like breathing masks, welding helmets, welding goggles etc. +/obj/item/clothing/proc/adjust_visor(mob/living/user) if(!can_use(user)) return FALSE visor_toggling() - to_chat(user, span_notice("You adjust \the [src] [up ? "up" : "down"].")) + to_chat(user, span_notice("You adjust [src] [up ? "up" : "down"].")) - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.head_update(src, forced = 1) update_item_action_buttons() + + if(user.is_holding(src)) + user.update_held_items() + return TRUE + if(up) + user.update_obscured_slots(visor_flags_inv) + user.update_clothing(slot_flags) + if(!iscarbon(user)) + return TRUE + var/mob/living/carbon/carbon_user = user + if(visor_vars_to_toggle & VISOR_TINT) + carbon_user.update_tint() + if((visor_flags & (MASKINTERNALS|HEADINTERNALS)) && carbon_user.invalid_internals()) + carbon_user.cutoff_internals() return TRUE /obj/item/clothing/proc/visor_toggling() //handles all the actual toggling of flags @@ -484,31 +501,17 @@ BLIND // can't see anything SEND_SIGNAL(src, COMSIG_CLOTHING_VISOR_TOGGLE, up) clothing_flags ^= visor_flags flags_inv ^= visor_flags_inv - flags_cover ^= initial(flags_cover) - icon_state = "[initial(icon_state)][up ? "up" : ""]" - if(visor_vars_to_toggle & VISOR_FLASHPROTECT) - flash_protect ^= initial(flash_protect) - if(visor_vars_to_toggle & VISOR_TINT) - tint ^= initial(tint) - -/obj/item/clothing/head/helmet/space/plasmaman/visor_toggling() //handles all the actual toggling of flags - up = !up - SEND_SIGNAL(src, COMSIG_CLOTHING_VISOR_TOGGLE, up) - clothing_flags ^= visor_flags - flags_inv ^= visor_flags_inv - icon_state = "[initial(icon_state)]" + flags_cover ^= visor_flags_cover if(visor_vars_to_toggle & VISOR_FLASHPROTECT) flash_protect ^= initial(flash_protect) if(visor_vars_to_toggle & VISOR_TINT) tint ^= initial(tint) + update_appearance() //most of the time the sprite changes /obj/item/clothing/proc/can_use(mob/user) - if(user && ismob(user)) - if(!user.incapacitated()) - return 1 - return 0 + return istype(user) && !user.incapacitated() -/obj/item/clothing/proc/_spawn_shreds() +/obj/item/clothing/proc/spawn_shreds() new /obj/effect/decal/cleanable/shreds(get_turf(src), name) /obj/item/clothing/atom_destruction(damage_flag) @@ -516,7 +519,7 @@ BLIND // can't see anything return ..() if(damage_flag == BOMB) //so the shred survives potential turf change from the explosion. - addtimer(CALLBACK(src, PROC_REF(_spawn_shreds)), 0.1 SECONDS) + addtimer(CALLBACK(src, PROC_REF(spawn_shreds)), 0.1 SECONDS) deconstruct(FALSE) if(damage_flag == CONSUME) //This allows for moths to fully consume clothing, rather than damaging it like other sources like brute var/turf/current_position = get_turf(src) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index c44d5be4ef8..98bb6f56fc6 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -37,20 +37,17 @@ . += span_notice("Alt-click to toggle [p_their()] colors.") /obj/item/clothing/glasses/visor_toggling() - ..() + . = ..() + alternate_worn_layer = up ? ABOVE_BODY_FRONT_HEAD_LAYER : initial(alternate_worn_layer) // SKYRAT EDIT CHANGE - ORIGINAL : alternate_worn_layer = up ? ABOVE_BODY_FRONT_HEAD_LAYER : null if(visor_vars_to_toggle & VISOR_VISIONFLAGS) vision_flags ^= initial(vision_flags) if(visor_vars_to_toggle & VISOR_INVISVIEW) invis_view ^= initial(invis_view) -/obj/item/clothing/glasses/weldingvisortoggle(mob/user) +/obj/item/clothing/glasses/adjust_visor(mob/living/user) . = ..() - alternate_worn_layer = up ? ABOVE_BODY_FRONT_HEAD_LAYER : initial(alternate_worn_layer) // SKYRAT EDIT - ORIGINAL : alternate_worn_layer = up ? ABOVE_BODY_FRONT_HEAD_LAYER : null - if(. && user) + if(. && !user.is_holding(src) && (visor_vars_to_toggle & (VISOR_VISIONFLAGS|VISOR_INVISVIEW))) user.update_sight() - if(iscarbon(user)) - var/mob/living/carbon/carbon_user = user - carbon_user.head_update(src, forced = TRUE) //called when thermal glasses are emped. /obj/item/clothing/glasses/proc/thermal_overload() @@ -452,7 +449,11 @@ alternate_worn_layer = ABOVE_BODY_FRONT_HEAD_LAYER // SKYRAT EDIT - Just so it works until I make the change upstream /obj/item/clothing/glasses/welding/attack_self(mob/user) - weldingvisortoggle(user) + adjust_visor(user) + +/obj/item/clothing/glasses/welding/update_icon_state() + . = ..() + icon_state = "[initial(icon_state)][up ? "up" : ""]" /obj/item/clothing/glasses/welding/up/Initialize(mapload) . = ..() diff --git a/code/modules/clothing/gloves/boxing.dm b/code/modules/clothing/gloves/boxing.dm index deed90b1696..03b1cbb5bf7 100644 --- a/code/modules/clothing/gloves/boxing.dm +++ b/code/modules/clothing/gloves/boxing.dm @@ -6,6 +6,25 @@ equip_delay_other = 60 species_exception = list(/datum/species/golem) // now you too can be a golem boxing champion clothing_traits = list(TRAIT_CHUNKYFINGERS) + /// Determines the version of boxing (or any martial art for that matter) that the boxing gloves gives + var/style_to_give = /datum/martial_art/boxing + +/obj/item/clothing/gloves/boxing/Initialize(mapload) + . = ..() + var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/extendohand_l, /datum/crafting_recipe/extendohand_r) + + AddComponent( + /datum/component/slapcrafting,\ + slapcraft_recipes = slapcraft_recipe_list,\ + ) + + AddComponent(/datum/component/martial_art_giver, style_to_give) + +/obj/item/clothing/gloves/boxing/evil + name = "evil boxing gloves" + desc = "These strange gloves radiate an unsually evil aura." + greyscale_colors = "#21211f" + style_to_give = /datum/martial_art/boxing/evil /obj/item/clothing/gloves/boxing/green icon_state = "boxinggreen" @@ -18,3 +37,16 @@ /obj/item/clothing/gloves/boxing/yellow icon_state = "boxingyellow" greyscale_colors = "#d2a800" + +/obj/item/clothing/gloves/boxing/golden + name = "golden gloves" + desc = "The reigning champ of the station!" + icon_state = "boxinggold" + custom_materials = list(/datum/material/gold = SHEET_MATERIAL_AMOUNT*1) //LITERALLY GOLD + material_flags = MATERIAL_EFFECTS | MATERIAL_AFFECT_STATISTICS + equip_delay_other = 120 + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE + +/obj/item/clothing/gloves/boxing/golden/Initialize(mapload) + . = ..() + AddElement(/datum/element/skill_reward, /datum/skill/athletics) diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index c5b25166c09..4d9ec24e335 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -129,32 +129,21 @@ visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF ///Icon state of the welding visor. var/visor_state = "weldvisor" - var/visor_sprite_path //SKYRAT EDIT --- Lets the visor not smush the snout - -/obj/item/clothing/head/utility/hardhat/welding/Initialize(mapload) - . = ..() - update_appearance() /obj/item/clothing/head/utility/hardhat/welding/attack_self_secondary(mob/user, modifiers) - toggle_welding_screen(user) + adjust_visor(user) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/item/clothing/head/utility/hardhat/welding/ui_action_click(mob/user, actiontype) if(istype(actiontype, /datum/action/item_action/toggle_welding_screen)) - toggle_welding_screen(user) + adjust_visor(user) return - return ..() -/obj/item/clothing/head/utility/hardhat/welding/proc/toggle_welding_screen(mob/living/user) - if(weldingvisortoggle(user)) - playsound(src, 'sound/mecha/mechmove03.ogg', 50, TRUE) //Visors don't just come from nothing - var/mob/living/carbon/carbon_user = user //SKYRAT EDIT --- Lets the visor not smush the snout - if(carbon_user.dna.species.mutant_bodyparts["snout"]) - visor_sprite_path = 'modular_skyrat/master_files/icons/mob/clothing/head_muzzled.dmi' - else - visor_sprite_path = 'icons/mob/clothing/head/utility.dmi' //END SKYRAT EDIT - update_appearance() +/obj/item/clothing/head/utility/hardhat/welding/adjust_visor(mob/living/user) + . = ..() + if(.) + playsound(src, 'sound/mecha/mechmove03.ogg', 50, TRUE) /obj/item/clothing/head/utility/hardhat/welding/worn_overlays(mutable_appearance/standing, isinhands) . = ..() @@ -162,9 +151,7 @@ return if(!up) - // SKYRAT EDIT: ORIGINAL - . += mutable_appearance('icons/mob/clothing/head/utility.dmi', visor_state) - // SKYRAT EDIT: WELDING MUZZLES - . += mutable_appearance(visor_sprite_path, visor_state) + . += mutable_appearance(visor_sprite_path, visor_state) //SKYRAT EDIT CHANGE - WELDING MUZZLES - ORIGINAL: . += mutable_appearance('icons/mob/clothing/head/utility.dmi', visor_state) /obj/item/clothing/head/utility/hardhat/welding/update_overlays() . = ..() @@ -207,7 +194,8 @@ min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF visor_flags_cover = NONE - flags_inv = HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + flags_inv = HIDEEARS|HIDEHAIR|HIDEFACE|HIDEFACIALHAIR|HIDESNOUT + transparent_protection = HIDEMASK|HIDEEYES visor_flags_inv = NONE visor_state = "weldvisor_atmos" diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 236d94c39fa..0122cda3978 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -142,6 +142,7 @@ /obj/item/clothing/head/helmet/toggleable + visor_vars_to_toggle = NONE dog_fashion = null ///chat message when the visor is toggled down. var/toggle_message @@ -149,26 +150,11 @@ var/alt_toggle_message /obj/item/clothing/head/helmet/toggleable/attack_self(mob/user) + adjust_visor(user) + +/obj/item/clothing/head/helmet/toggleable/update_icon_state() . = ..() - if(.) - return - if(user.incapacitated() || !try_toggle()) - return - up = !up - flags_1 ^= visor_flags - flags_inv ^= visor_flags_inv - flags_cover ^= visor_flags_cover icon_state = "[initial(icon_state)][up ? "up" : ""]" - to_chat(user, span_notice("[up ? alt_toggle_message : toggle_message] \the [src].")) - - user.update_worn_head() - if(iscarbon(user)) - var/mob/living/carbon/carbon_user = user - carbon_user.head_update(src, forced = TRUE) - -///Attempt to toggle the visor. Returns true if it does the thing. -/obj/item/clothing/head/helmet/toggleable/proc/try_toggle() - return TRUE /obj/item/clothing/head/helmet/toggleable/riot name = "riot helmet" @@ -223,11 +209,18 @@ ///Looping sound datum for the siren helmet var/datum/looping_sound/siren/weewooloop -/obj/item/clothing/head/helmet/toggleable/justice/try_toggle() +/obj/item/clothing/head/helmet/toggleable/justice/adjust_visor(mob/living/user) if(!COOLDOWN_FINISHED(src, visor_toggle_cooldown)) return FALSE COOLDOWN_START(src, visor_toggle_cooldown, 2 SECONDS) - return TRUE + return ..() + +/obj/item/clothing/head/helmet/toggleable/justice/visor_toggling() + . = ..() + if(up) + weewooloop.start() + else + weewooloop.stop() /obj/item/clothing/head/helmet/toggleable/justice/Initialize(mapload) . = ..() @@ -237,13 +230,6 @@ QDEL_NULL(weewooloop) return ..() -/obj/item/clothing/head/helmet/toggleable/justice/attack_self(mob/user) - . = ..() - if(up) - weewooloop.start() - else - weewooloop.stop() - /obj/item/clothing/head/helmet/toggleable/justice/escape name = "alarm helmet" desc = "WEEEEOOO. WEEEEEOOO. STOP THAT MONKEY. WEEEOOOO." @@ -538,3 +524,48 @@ fire = 65 acid = 40 wound = 15 + +/obj/item/clothing/head/helmet/military + name = "Crude Helmet" + desc = "A cheaply made kettle helmet with an added faceplate to protect your eyes and mouth." + icon_state = "military" + inhand_icon_state = "knight_helmet" + flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + strip_delay = 80 + dog_fashion = null + armor_type = /datum/armor/helmet_military + +/datum/armor/helmet_military + melee = 45 + bullet = 25 + laser = 25 + energy = 25 + bomb = 25 + fire = 10 + acid = 50 + wound = 20 + +/obj/item/clothing/head/helmet/military/Initialize(mapload) + . = ..() + AddComponent(/datum/component/clothing_fov_visor, FOV_90_DEGREES) + +/obj/item/clothing/head/helmet/knight/warlord + name = "golden barbute helmet" + desc = "There is no man behind the helmet, only a terrible thought." + icon_state = "warlord" + inhand_icon_state = null + armor_type = /datum/armor/helmet_warlord + flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEMASK|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + slowdown = 0.2 + +/datum/armor/helmet_warlord + melee = 70 + bullet = 60 + laser = 70 + energy = 70 + bomb = 40 + fire = 50 + acid = 50 + wound = 30 diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index b300ff99179..4f5d377ddac 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -173,7 +173,7 @@ armor_type = /datum/armor/fedora_det_hat icon_state = "detective" inhand_icon_state = "det_hat" - interaction_flags_click = NEED_DEXTERITY|NEED_HANDS + interaction_flags_click = NEED_DEXTERITY|NEED_HANDS|ALLOW_RESTING /// Cooldown for retrieving precious candy corn on alt click var/candy_cooldown = 0 dog_fashion = /datum/dog_fashion/head/detective @@ -222,7 +222,7 @@ icon_state = "detective" inhand_icon_state = "det_hat" dog_fashion = /datum/dog_fashion/head/detective - interaction_flags_click = FORBID_TELEKINESIS_REACH + interaction_flags_click = FORBID_TELEKINESIS_REACH|ALLOW_RESTING ///prefix our phrases must begin with var/prefix = "go go gadget" ///an assoc list of phrase = item (like gun = revolver) diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 92517d4a7dd..3003e9a76ee 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -5,7 +5,7 @@ worn_icon = 'icons/mob/clothing/head/hats.dmi' icon_state = "cargosoft" inhand_icon_state = "greyscale_softcap" //todo wip - interaction_flags_click = NEED_DEXTERITY + interaction_flags_click = NEED_DEXTERITY|ALLOW_RESTING /// For setting icon archetype var/soft_type = "cargo" /// If there is a suffix to append diff --git a/code/modules/clothing/head/welding.dm b/code/modules/clothing/head/welding.dm index bccb1d4524d..cb785447174 100644 --- a/code/modules/clothing/head/welding.dm +++ b/code/modules/clothing/head/welding.dm @@ -14,6 +14,7 @@ actions_types = list(/datum/action/item_action/toggle) visor_flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDESNOUT visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT resistance_flags = FIRE_PROOF clothing_flags = SNUG_FIT | STACKABLE_HELMET_EXEMPT @@ -23,9 +24,9 @@ acid = 60 /obj/item/clothing/head/utility/welding/attack_self(mob/user) - weldingvisortoggle(user) + adjust_visor(user) -/obj/item/clothing/head/utility/welding/visor_toggling() +/obj/item/clothing/head/utility/welding/update_icon_state() . = ..() + icon_state = "[initial(icon_state)][up ? "up" : ""]" inhand_icon_state = "[initial(inhand_icon_state)][up ? "off" : ""]" - diff --git a/code/modules/clothing/masks/_masks.dm b/code/modules/clothing/masks/_masks.dm index 23fc2272229..c1d29d65c86 100644 --- a/code/modules/clothing/masks/_masks.dm +++ b/code/modules/clothing/masks/_masks.dm @@ -7,9 +7,8 @@ slot_flags = ITEM_SLOT_MASK strip_delay = 40 equip_delay_other = 40 + visor_vars_to_toggle = NONE var/modifies_speech = FALSE - ///Whether the mask is pushed out of the food hole or not. - var/mask_adjusted = FALSE var/adjusted_flags = null ///Did we install a filtering cloth? var/has_filter = FALSE @@ -69,33 +68,17 @@ M.update_worn_mask() //Proc that moves gas/breath masks out of the way, disabling them and allowing pill/food consumption -/obj/item/clothing/mask/proc/adjustmask(mob/living/carbon/user) - if(user?.incapacitated()) - return - mask_adjusted = !mask_adjusted - if(!mask_adjusted) - icon_state = initial(icon_state) - clothing_flags |= visor_flags - flags_inv |= visor_flags_inv - flags_cover |= visor_flags_cover - to_chat(user, span_notice("You push \the [src] back into place.")) - slot_flags = initial(slot_flags) - else - icon_state += "_up" - to_chat(user, span_notice("You push \the [src] out of the way.")) - clothing_flags &= ~visor_flags - flags_inv &= ~visor_flags_inv - flags_cover &= ~visor_flags_cover +/obj/item/clothing/mask/visor_toggling(mob/living/user) + . = ..() + if(up) if(adjusted_flags) slot_flags = adjusted_flags - if(!istype(user)) - return - // Update the mob if it's wearing the mask. - if(user.wear_mask == src) - user.wear_mask_update(src, toggle_off = mask_adjusted) - if(loc == user) - // Update action button icon for adjusted mask, if someone is holding it. - user.update_mob_action_buttons() + else + slot_flags = initial(slot_flags) + +/obj/item/clothing/mask/update_icon_state() + . = ..() + icon_state = "[initial(icon_state)][up ? "_up" : ""]" /** * Proc called in lungs.dm to act if wearing a mask with filters, used to reduce the filters durability, return a changed gas mixture depending on the filter status diff --git a/code/modules/clothing/masks/bandana.dm b/code/modules/clothing/masks/bandana.dm index cd4b3980e55..c80ad733543 100644 --- a/code/modules/clothing/masks/bandana.dm +++ b/code/modules/clothing/masks/bandana.dm @@ -22,7 +22,7 @@ /obj/item/clothing/mask/bandana/examine(mob/user) . = ..() - if(mask_adjusted) + if(up) . += "Use in-hand to untie it to wear as a mask!" return if(slot_flags & ITEM_SLOT_NECK) @@ -32,25 +32,25 @@ . += "Alt-click to tie it up to wear on your neck!" /obj/item/clothing/mask/bandana/attack_self(mob/user) + adjust_visor(user) + +/obj/item/clothing/mask/bandana/adjust_visor(mob/living/user) if(slot_flags & ITEM_SLOT_NECK) to_chat(user, span_warning("You must undo [src] in order to push it into a hat!")) - return - //SKYRAT EDIT START: BANDANA HATS FOR MUTANTS + return FALSE + //SKYRAT EDIT ADDITION START: BANDANA HATS FOR MUTANTS if(slot_flags & ITEM_SLOT_HEAD) supports_variations_flags = NONE if(slot_flags & ITEM_SLOT_MASK) supports_variations_flags = initial(supports_variations_flags) - //SKYRAT EDIT END + //SKYRAT EDIT ADDITION END + return ..() - adjustmask(user) - -/obj/item/clothing/mask/bandana/adjustmask(mob/living/user) +/obj/item/clothing/mask/bandana/visor_toggling() . = ..() - if(mask_adjusted) + if(up) undyeable = TRUE else - inhand_icon_state = initial(inhand_icon_state) - worn_icon_state = initial(worn_icon_state) undyeable = initial(undyeable) /obj/item/clothing/mask/bandana/click_alt(mob/user) @@ -231,14 +231,13 @@ greyscale_config_inhand_left = /datum/greyscale_config/facescarf/inhands_left greyscale_config_inhand_right = /datum/greyscale_config/facescarf/inhands_right flags_1 = IS_PLAYER_COLORABLE_1 - interaction_flags_click = NEED_DEXTERITY + interaction_flags_click = NEED_DEXTERITY|ALLOW_RESTING /obj/item/clothing/mask/facescarf/attack_self(mob/user) - adjustmask(user) - + adjust_visor(user) /obj/item/clothing/mask/facescarf/click_alt(mob/user) - adjustmask(user) + adjust_visor(user) return CLICK_ACTION_SUCCESS diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm index 78ba0764b81..468b1272f86 100644 --- a/code/modules/clothing/masks/boxing.dm +++ b/code/modules/clothing/masks/boxing.dm @@ -10,7 +10,7 @@ actions_types = list(/datum/action/item_action/adjust) /obj/item/clothing/mask/balaclava/attack_self(mob/user) - adjustmask(user) + adjust_visor(user) /obj/item/clothing/mask/floortilebalaclava name = "floortile balaclava" @@ -25,7 +25,7 @@ actions_types = list(/datum/action/item_action/adjust) /obj/item/clothing/mask/floortilebalaclava/attack_self(mob/user) - adjustmask(user) + adjust_visor(user) /obj/item/clothing/mask/luchador name = "Luchador Mask" diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index 0249f0b1321..73f91f7c6b8 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -12,7 +12,7 @@ flags_cover = MASKCOVERSMOUTH visor_flags_cover = MASKCOVERSMOUTH resistance_flags = NONE - interaction_flags_click = NEED_DEXTERITY + interaction_flags_click = NEED_DEXTERITY|ALLOW_RESTING /datum/armor/mask_breath bio = 50 @@ -22,10 +22,10 @@ return OXYLOSS /obj/item/clothing/mask/breath/attack_self(mob/user) - adjustmask(user) + adjust_visor(user) /obj/item/clothing/mask/breath/click_alt(mob/user) - adjustmask(user) + adjust_visor(user) return CLICK_ACTION_SUCCESS /obj/item/clothing/mask/breath/examine(mob/user) diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 5b10f294000..a258eea7775 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -57,11 +57,11 @@ GLOBAL_LIST_INIT(clown_mask_options, list( cig?.equipped(equipee, slot) return ..() -/obj/item/clothing/mask/gas/adjustmask(mob/living/carbon/user) - if(isnull(cig)) - return ..() - balloon_alert(user, "there's a cig in the way!") - +/obj/item/clothing/mask/gas/adjust_visor(mob/living/user) + if(!isnull(cig)) + balloon_alert(user, "cig in the way!") + return FALSE + return ..() /obj/item/clothing/mask/gas/examine(mob/user) . = ..() @@ -219,6 +219,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( flags_cover = MASKCOVERSEYES visor_flags_inv = HIDEEYES visor_flags_cover = MASKCOVERSEYES + visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT resistance_flags = FIRE_PROOF /datum/armor/gas_welding @@ -228,10 +229,16 @@ GLOBAL_LIST_INIT(clown_mask_options, list( acid = 55 /obj/item/clothing/mask/gas/welding/attack_self(mob/user) - if(weldingvisortoggle(user)) + adjust_visor(user) + +/obj/item/clothing/mask/gas/welding/adjust_visor(mob/living/user) + . = ..() + if(.) playsound(src, 'sound/mecha/mechmove03.ogg', 50, TRUE) -/obj/item/clothing/mask/gas/welding/up +/obj/item/clothing/mask/gas/welding/update_icon_state() + . = ..() + icon_state = "[initial(icon_state)][up ? "up" : ""]" /obj/item/clothing/mask/gas/welding/up/Initialize(mapload) . = ..() diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm index 7c351d3ad34..cbfbc166cbc 100644 --- a/code/modules/clothing/masks/hailer.dm +++ b/code/modules/clothing/masks/hailer.dm @@ -124,7 +124,7 @@ GLOBAL_LIST_INIT(hailer_phrases, list( if(istype(action, /datum/action/item_action/halt)) halt() else - adjustmask(user) + adjust_visor(user) /obj/item/clothing/mask/gas/sechailer/attack_self() halt() diff --git a/code/modules/clothing/masks/surgical.dm b/code/modules/clothing/masks/surgical.dm index b754dc43014..4e8390edae7 100644 --- a/code/modules/clothing/masks/surgical.dm +++ b/code/modules/clothing/masks/surgical.dm @@ -15,4 +15,4 @@ bio = 100 /obj/item/clothing/mask/surgical/attack_self(mob/user) - adjustmask(user) + adjust_visor(user) diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index 785ec9e26f9..7c93019cb64 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -1,5 +1,5 @@ /// Charge per tick consumed by the thermal regulator -#define THERMAL_REGULATOR_COST (18 KILO JOULES) +#define THERMAL_REGULATOR_COST (0.018 * STANDARD_CELL_CHARGE) //Note: Everything in modules/clothing/spacesuits should have the entire suit grouped together. // Meaning the the suit is defined directly after the corrisponding helmet. Just like below! @@ -58,7 +58,7 @@ equip_delay_other = 80 resistance_flags = NONE actions_types = list(/datum/action/item_action/toggle_spacesuit) - interaction_flags_click = NEED_DEXTERITY + interaction_flags_click = NEED_DEXTERITY|ALLOW_RESTING /// The default temperature setting var/temperature_setting = BODYTEMP_NORMAL /// If this is a path, this gets created as an object in Initialize. diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index 02a54f194ea..bd20874f88d 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -88,26 +88,25 @@ . += span_notice("There's nothing placed on the helmet.") /obj/item/clothing/head/helmet/space/plasmaman/click_alt(mob/user) - toggle_welding_screen(user) - return CLICK_ACTION_SUCCESS + if(user.can_perform_action(src)) + adjust_visor(user) /obj/item/clothing/head/helmet/space/plasmaman/ui_action_click(mob/user, action) if(istype(action, /datum/action/item_action/toggle_welding_screen)) - toggle_welding_screen(user) + adjust_visor(user) return return ..() -/obj/item/clothing/head/helmet/space/plasmaman/proc/toggle_welding_screen(mob/living/user) - if(weldingvisortoggle(user)) - if(helmet_on) - to_chat(user, span_notice("Your helmet's torch can't pass through your welding visor!")) - helmet_on = FALSE - playsound(src, 'sound/mecha/mechmove03.ogg', 50, TRUE) //Visors don't just come from nothing - update_appearance() - else - playsound(src, 'sound/mecha/mechmove03.ogg', 50, TRUE) //Visors don't just come from nothing - update_appearance() +/obj/item/clothing/head/helmet/space/plasmaman/adjust_visor(mob/living/user) + . = ..() + if(!.) + return + if(helmet_on) + to_chat(user, span_notice("Your helmet's torch can't pass through your welding visor!")) + helmet_on = FALSE + playsound(src, 'sound/mecha/mechmove03.ogg', 50, TRUE) //Visors don't just come from nothing + update_appearance() /obj/item/clothing/head/helmet/space/plasmaman/update_icon_state() . = ..() @@ -116,7 +115,8 @@ /obj/item/clothing/head/helmet/space/plasmaman/update_overlays() . = ..() - . += visor_icon + if(!up) + . += visor_icon /obj/item/clothing/head/helmet/space/plasmaman/attackby(obj/item/hitting_item, mob/living/user) . = ..() diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index dcf6d502834..7367020ea04 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -712,3 +712,48 @@ fire = 40 acid = 50 wound = 30 + +/obj/item/clothing/suit/armor/vest/military + name = "Crude chestplate" + desc = "It may look rough, rusty and battered, but it's also made out of junk and uncomfortable to wear." + icon_state = "military" + inhand_icon_state = "armor" + dog_fashion = null + armor_type = /datum/armor/military + allowed = list( + /obj/item/banner, + /obj/item/claymore/shortsword, + /obj/item/nullrod, + /obj/item/spear, + /obj/item/gun/ballistic/bow + ) + +/datum/armor/military + melee = 45 + bullet = 25 + laser = 25 + energy = 25 + bomb = 25 + fire = 10 + acid = 50 + wound = 20 + +/obj/item/clothing/suit/armor/riot/knight/warlord + name = "golden plate armor" + desc = "This bulky set of armor is coated with a shiny layer of gold. It seems to almost reflect all light sources." + icon_state = "warlord" + inhand_icon_state = null + armor_type = /datum/armor/armor_warlord + w_class = WEIGHT_CLASS_BULKY + clothing_flags = THICKMATERIAL + slowdown = 0.8 + +/datum/armor/armor_warlord + melee = 70 + bullet = 60 + laser = 70 + energy = 70 + bomb = 40 + fire = 50 + acid = 50 + wound = 30 diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm index b09aaa34104..bc9aad4198a 100644 --- a/code/modules/clothing/under/costume.dm +++ b/code/modules/clothing/under/costume.dm @@ -431,3 +431,17 @@ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS|HEAD flags_inv = HIDEGLOVES|HIDESHOES|HIDEEARS|HIDEEYES|HIDEHAIR +/obj/item/clothing/under/costume/gamberson + name = "re-enactor's Gamberson" + desc = "A colorful set of clothes made to look like a medieval gamberson." + icon_state = "gamberson" + inhand_icon_state = null + female_sprite_flags = NO_FEMALE_UNIFORM + can_adjust = FALSE + +/obj/item/clothing/under/costume/gamberson/military + name = "swordsman's Gamberson" + desc = "A padded medieval gamberson. Has enough woolen layers to dull a strike from any small weapon." + armor_type = /datum/armor/clothing_under/rank_security + has_sensor = NO_SENSORS + diff --git a/code/modules/deathmatch/deathmatch_loadouts.dm b/code/modules/deathmatch/deathmatch_loadouts.dm index 341b85fb926..ae5f22975a0 100644 --- a/code/modules/deathmatch/deathmatch_loadouts.dm +++ b/code/modules/deathmatch/deathmatch_loadouts.dm @@ -21,6 +21,9 @@ user.set_species(/datum/species/human) for(var/datum/action/act as anything in granted_spells) var/datum/action/new_ability = new act(user) + if(istype(new_ability, /datum/action/cooldown/spell)) + var/datum/action/cooldown/spell/new_spell = new_ability + new_spell.spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC new_ability.Grant(user) /datum/outfit/deathmatch_loadout/naked @@ -173,6 +176,7 @@ name = "Deathmatch: Druid" display_name = "Druid" desc = "How can plants help you?" + species_override = /datum/species/pod l_hand = /obj/item/gun/ballistic/bow r_hand = /obj/item/ammo_casing/arrow @@ -240,7 +244,6 @@ l_pocket = /obj/item/reagent_containers/hypospray/combat r_pocket = /obj/item/reagent_containers/hypospray/medipen/penthrite l_hand = /obj/item/chainsaw - backpack_contents = list( /obj/item/storage/medkit/tactical, /obj/item/reagent_containers/hypospray/medipen/stimulants, @@ -274,7 +277,6 @@ l_pocket = /obj/item/melee/energy/sword/bananium r_pocket = /obj/item/shield/energy/bananium gloves = /obj/item/clothing/gloves/tackler/rocket - backpack_contents = list( /obj/item/reagent_containers/spray/waterflower = 1, /obj/item/instrument/bikehorn = 1, @@ -377,3 +379,167 @@ shoes = /obj/item/clothing/shoes/cowboy belt = /obj/item/storage/belt/holster/detective/full head = /obj/item/clothing/head/cowboy/brown + +/// wizards + +/datum/outfit/deathmatch_loadout/wizard + name = "Deathmatch: Wizard" + display_name = "Wizard" + desc = "It's wizard time, motherfucker! FIREBALL!!" + + l_hand = /obj/item/staff + uniform = /datum/outfit/wizard::uniform + suit = /datum/outfit/wizard::suit + head = /datum/outfit/wizard::head + shoes = /datum/outfit/wizard::shoes + granted_spells = list( + /datum/action/cooldown/spell/aoe/magic_missile, + /datum/action/cooldown/spell/forcewall, + /datum/action/cooldown/spell/jaunt/ethereal_jaunt, + ) + +/datum/outfit/deathmatch_loadout/wizard/pyro + name = "Deathmatch: Pyromancer" + display_name = "Pyromancer" + desc = "Burninating the station-side! Burninating all the wizards!" + + suit = /obj/item/clothing/suit/wizrobe/red + head = /obj/item/clothing/head/wizard/red + mask = /obj/item/clothing/mask/cigarette + granted_spells = list( + /datum/action/cooldown/spell/pointed/projectile/fireball, + /datum/action/cooldown/spell/smoke, + ) + +/datum/outfit/deathmatch_loadout/wizard/electro + name = "Deathmatch: Electromancer" + display_name = "Electromancer" + desc = "Batons are so last century." + + suit = /obj/item/clothing/suit/wizrobe/magusred + head = /obj/item/clothing/head/wizard/magus + granted_spells = list( + /datum/action/cooldown/spell/pointed/projectile/lightningbolt, + /datum/action/cooldown/spell/charged/beam/tesla, + ) + +/datum/outfit/deathmatch_loadout/wizard/necromancer + name = "Deathmatch: Necromancer" + display_name = "Necromancer" + desc = "I've got a BONE to pick- Yeah, sorry." + + species_override = /datum/species/skeleton + suit = /obj/item/clothing/suit/wizrobe/black + head = /obj/item/clothing/head/wizard/black + granted_spells = list( + /datum/action/cooldown/spell/touch/scream_for_me, + /datum/action/cooldown/spell/teleport/radius_turf/blink, + ) + +/datum/outfit/deathmatch_loadout/wizard/larp + name = "Deathmatch: LARPer" + display_name = "LARPer" + desc = "Lightning bolt! Lightning bolt! Lightning bolt!" + + l_hand = /obj/item/staff/stick + suit = /obj/item/clothing/suit/wizrobe/fake + head = /obj/item/clothing/head/wizard/fake + shoes = /obj/item/clothing/shoes/sandal + granted_spells = list( + /datum/action/cooldown/spell/conjure_item/spellpacket, + /datum/action/cooldown/spell/aoe/repulse/wizard, + ) + +/datum/outfit/deathmatch_loadout/wizard/chuuni + name = "Deathmatch: Chuuni" + display_name = "Chuunibyou" + desc = "Darkness blacker than black and darker than dark, I beseech thee..." + + l_hand = /obj/item/staff/broom + suit = /obj/item/clothing/suit/wizrobe/marisa + head = /obj/item/clothing/head/wizard/marisa + shoes = /obj/item/clothing/shoes/sneakers/marisa + granted_spells = list( + /datum/action/cooldown/spell/chuuni_invocations, + /datum/action/cooldown/spell/pointed/projectile/spell_cards, + ) + +/datum/outfit/deathmatch_loadout/wizard/battle + name = "Deathmatch: Battlemage" + display_name = "Battlemage" + desc = "Have you heard of the High Elves?" + + l_hand = /obj/item/mjollnir + suit = /obj/item/clothing/suit/wizrobe/magusblue + head = /obj/item/clothing/head/wizard/magus + granted_spells = list( + /datum/action/cooldown/spell/summonitem, + ) + +/datum/outfit/deathmatch_loadout/wizard/apprentice + name = "Deathmatch: Apprentice" + display_name = "Apprentice" + desc = "You feel severely under-leveled for this encounter..." + + l_hand = null + granted_spells = list( + /datum/action/cooldown/spell/charge, + ) + +/datum/outfit/deathmatch_loadout/wizard/gunmancer + name = "Deathmatch: Gunmancer" + display_name = "Gunmancer" + desc = "Magic is lame." + + l_hand = /obj/item/gun/ballistic/automatic/pistol/m1911 + suit = /obj/item/clothing/suit/wizrobe/tape + head = /obj/item/clothing/head/wizard/tape + shoes = /obj/item/clothing/shoes/jackboots + granted_spells = list( + /datum/action/cooldown/spell/conjure_item/infinite_guns/gun, + /datum/action/cooldown/spell/aoe/knock, + ) + +/datum/outfit/deathmatch_loadout/wizard/chaos + name = "Deathmatch: Chaos" + display_name = "Chaosmancer" + desc = "Hardcore Random Body ONLY!" + + l_hand = /obj/item/gun/magic/staff/chaos + uniform = /obj/item/clothing/under/color/rainbow + suit = /obj/item/clothing/suit/costume/hawaiian + head = /obj/item/clothing/head/wizard/red + shoes = /obj/item/clothing/shoes/sneakers/marisa + granted_spells = list( + /datum/action/cooldown/spell/rod_form, + /datum/action/cooldown/spell/conjure/the_traps, + ) + +/datum/outfit/deathmatch_loadout/wizard/clown + name = "Deathmatch: Clown" + display_name = "Funnymancer" + desc = "Honk NATH!" + + l_hand = /obj/item/gun/magic/staff/honk + uniform = /obj/item/clothing/under/rank/civilian/clown + suit = /obj/item/clothing/suit/chaplainsuit/clownpriest + head = /obj/item/clothing/head/chaplain/clownmitre + mask = /obj/item/clothing/mask/gas/clown_hat + back = /obj/item/storage/backpack/clown + shoes = /obj/item/clothing/shoes/clown_shoes + granted_spells = null + +/datum/outfit/deathmatch_loadout/wizard/monkey + name = "Deathmatch: Monkey" + display_name = "Monkeymancer" + desc = "Ook eek aaa ooo eee!" + + species_override = /datum/species/monkey + l_hand = /obj/item/food/grown/banana + uniform = null + suit = null + head = /obj/item/clothing/head/wizard + shoes = null + granted_spells = list( + /datum/action/cooldown/spell/conjure/simian, + ) diff --git a/code/modules/deathmatch/deathmatch_mapping.dm b/code/modules/deathmatch/deathmatch_mapping.dm index c3e10279363..95b9f5cf278 100644 --- a/code/modules/deathmatch/deathmatch_mapping.dm +++ b/code/modules/deathmatch/deathmatch_mapping.dm @@ -10,3 +10,6 @@ /obj/effect/landmark/deathmatch_player_spawn name = "Deathmatch Player Spawner" + +/area/deathmatch/teleport //Prevent access to cross-z teleportation in the map itself (no wands of safety/teleportation scrolls). Cordons should prevent same-z teleportations outside of the arena. + area_flags = UNIQUE_AREA | ABDUCTOR_PROOF | EVENT_PROTECTED | QUIET_LOGS diff --git a/code/modules/deathmatch/deathmatch_maps.dm b/code/modules/deathmatch/deathmatch_maps.dm index ebc3328e0ca..1abe92e7053 100644 --- a/code/modules/deathmatch/deathmatch_maps.dm +++ b/code/modules/deathmatch/deathmatch_maps.dm @@ -153,3 +153,25 @@ ) map_name = "backalley" key = "backalley" + +/datum/lazy_template/deathmatch/raginmages + name = "Ragin' Mages" + desc = "Greetings! We're the wizards of the wizard federation!" + max_players = 8 + automatic_gameend_time = 4 MINUTES // ill be surprised if this lasts more than two minutes + allowed_loadouts = list( + /datum/outfit/deathmatch_loadout/wizard, + /datum/outfit/deathmatch_loadout/wizard/pyro, + /datum/outfit/deathmatch_loadout/wizard/electro, + /datum/outfit/deathmatch_loadout/wizard/necromancer, + /datum/outfit/deathmatch_loadout/wizard/larp, + /datum/outfit/deathmatch_loadout/wizard/chuuni, + /datum/outfit/deathmatch_loadout/wizard/battle, + /datum/outfit/deathmatch_loadout/wizard/apprentice, + /datum/outfit/deathmatch_loadout/wizard/gunmancer, + /datum/outfit/deathmatch_loadout/wizard/monkey, + /datum/outfit/deathmatch_loadout/wizard/chaos, + /datum/outfit/deathmatch_loadout/wizard/clown, + ) + map_name = "ragin_mages" + key = "ragin_mages" diff --git a/code/modules/events/immovable_rod/immovable_rod.dm b/code/modules/events/immovable_rod/immovable_rod.dm index a4cc4d4d683..658d2d07bd8 100644 --- a/code/modules/events/immovable_rod/immovable_rod.dm +++ b/code/modules/events/immovable_rod/immovable_rod.dm @@ -45,9 +45,9 @@ RegisterSignal(src, COMSIG_ATOM_ENTERING, PROC_REF(on_entering_atom)) if(special_target) - SSmove_manager.home_onto(src, special_target) + DSmove_manager.home_onto(src, special_target) else - SSmove_manager.move_towards(src, real_destination) + DSmove_manager.move_towards(src, real_destination) /obj/effect/immovablerod/Destroy(force) UnregisterSignal(src, COMSIG_ATOM_ENTERING) @@ -113,7 +113,7 @@ return visible_message(span_danger("[src] phases into reality.")) - SSmove_manager.home_onto(src, special_target) + DSmove_manager.home_onto(src, special_target) if(loc == target_turf) complete_trajectory() @@ -264,7 +264,7 @@ * Stops your rod's automated movement. Sit... Stay... Good rod! */ /obj/effect/immovablerod/proc/sit_stay_good_rod() - SSmove_manager.stop_looping(src) + DSmove_manager.stop_looping(src) /** * Allows your rod to release restraint level zero and go for a walk. @@ -278,7 +278,7 @@ /obj/effect/immovablerod/proc/go_for_a_walk(walkies_location = null) if(walkies_location) special_target = walkies_location - SSmove_manager.home_onto(src, special_target) + DSmove_manager.home_onto(src, special_target) return complete_trajectory() @@ -294,7 +294,7 @@ */ /obj/effect/immovablerod/proc/walk_in_direction(direction) destination_turf = get_edge_target_turf(src, direction) - SSmove_manager.move_towards(src, destination_turf) + DSmove_manager.move_towards(src, destination_turf) /** * Rod will push the tram to a landmark if it hits the tram from the front/back diff --git a/code/modules/events/shuttle_insurance.dm b/code/modules/events/shuttle_insurance.dm index 4fce9c556b8..fed6ad9af9e 100644 --- a/code/modules/events/shuttle_insurance.dm +++ b/code/modules/events/shuttle_insurance.dm @@ -43,7 +43,7 @@ /datum/round_event/shuttle_insurance/start() insurance_message = new("Shuttle Insurance", "Hey, pal, this is the [ship_name]. Can't help but notice you're rocking a wild and crazy shuttle there with NO INSURANCE! Crazy. What if something happened to it, huh?! We've done a quick evaluation on your rates in this sector and we're offering [insurance_evaluation] to cover for your shuttle in case of any disaster.", list("Purchase Insurance.","Reject Offer.")) insurance_message.answer_callback = CALLBACK(src, PROC_REF(answered)) - SScommunications.send_message(insurance_message, unique = TRUE) + DScommunications.send_message(insurance_message, unique = TRUE) /datum/round_event/shuttle_insurance/proc/answered() if(EMERGENCY_AT_LEAST_DOCKED) diff --git a/code/modules/explorer_drone/loot.dm b/code/modules/explorer_drone/loot.dm index 88cd5f38275..72773123968 100644 --- a/code/modules/explorer_drone/loot.dm +++ b/code/modules/explorer_drone/loot.dm @@ -175,7 +175,7 @@ GLOBAL_LIST_INIT(adventure_loot_generator_index,generate_generator_index()) return if(LAZYACCESS(user.do_afters, "firelance")) return - if(!cell.use(200 KILO JOULES)) + if(!cell.use(0.2 * STANDARD_CELL_CHARGE)) to_chat(user,span_warning("[src] battery ran dry!")) return ADD_TRAIT(user, TRAIT_IMMOBILIZED, REF(src)) diff --git a/code/modules/food_and_drinks/machinery/microwave.dm b/code/modules/food_and_drinks/machinery/microwave.dm index 55509886a3a..0f1be89410a 100644 --- a/code/modules/food_and_drinks/machinery/microwave.dm +++ b/code/modules/food_and_drinks/machinery/microwave.dm @@ -15,7 +15,7 @@ #define MAX_MICROWAVE_DIRTINESS 100 /// For the wireless version, and display fluff -#define TIER_1_CELL_CHARGE_RATE (250 KILO JOULES) +#define TIER_1_CELL_CHARGE_RATE (0.25 * STANDARD_CELL_CHARGE) /obj/machinery/microwave name = "microwave oven" diff --git a/code/modules/food_and_drinks/machinery/oven.dm b/code/modules/food_and_drinks/machinery/oven.dm index ef9aac9a410..c997f349241 100644 --- a/code/modules/food_and_drinks/machinery/oven.dm +++ b/code/modules/food_and_drinks/machinery/oven.dm @@ -264,7 +264,7 @@ if(isnull(item.atom_storage)) return NONE - if(length(contents >= max_items)) + if(length(contents) >= max_items) balloon_alert(user, "it's full!") return ITEM_INTERACT_BLOCKING diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm index bada60cd548..f7e72b6a48d 100644 --- a/code/modules/food_and_drinks/recipes/food_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm @@ -1,4 +1,5 @@ /datum/crafting_recipe/food + mass_craftable = TRUE /datum/crafting_recipe/food/on_craft_completion(mob/user, atom/result) SHOULD_CALL_PARENT(TRUE) diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm index a971b2b6a74..676c0cec7bb 100644 --- a/code/modules/hydroponics/fermenting_barrel.dm +++ b/code/modules/hydroponics/fermenting_barrel.dm @@ -163,3 +163,13 @@ /obj/structure/fermenting_barrel/gunpowder/Initialize(mapload) . = ..() reagents.add_reagent(/datum/reagent/gunpowder, 500) + +/// Medieval pirates can have a barrel as a treat +/obj/structure/fermenting_barrel/thermite + name = "thermite barrel" + desc = "A large wooden barrel for holding thermite. Use this to make a big flipping hole on walls." + can_open = FALSE + +/obj/structure/fermenting_barrel/thermite/Initialize(mapload) + . = ..() + reagents.add_reagent(/datum/reagent/thermite, 500) diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index bf52eb315d8..7cff6080f2b 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -589,7 +589,7 @@ var/obj/item/stock_parts/cell/potato/pocell = new /obj/item/stock_parts/cell/potato(user.loc) pocell.icon = our_plant.icon // Just in case the plant icons get spread out in different files eventually, this trait won't cause error sprites (also yay downstreams) pocell.icon_state = our_plant.icon_state - pocell.maxcharge = our_seed.potency * 20 KILO JOULES + pocell.maxcharge = our_seed.potency * 0.02 * STANDARD_CELL_CHARGE // The secret of potato supercells! var/datum/plant_gene/trait/cell_charge/electrical_gene = our_seed.get_gene(/datum/plant_gene/trait/cell_charge) diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index 2055080710e..b31574bec33 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -19,6 +19,12 @@ if(isAdminGhostAI(accessor)) //Access can't stop the abuse return TRUE + //If the mob has the simple_access component with the requried access, we let them in. + var/attempted_access = SEND_SIGNAL(accessor, COMSIG_MOB_TRIED_ACCESS, src) + if(attempted_access & ACCESS_ALLOWED) + return TRUE + if(attempted_access & ACCESS_DISALLOWED) + return FALSE if(HAS_SILICON_ACCESS(accessor)) if(ispAI(accessor)) return FALSE @@ -28,9 +34,6 @@ if(onSyndieBase() && loc != accessor) return FALSE return TRUE //AI can do whatever it wants - //If the mob has the simple_access component with the requried access, we let them in. - else if(SEND_SIGNAL(accessor, COMSIG_MOB_TRIED_ACCESS, src) & ACCESS_ALLOWED) - return TRUE //If the mob is holding a valid ID, we let them in. get_active_held_item() is on the mob level, so no need to copypasta everywhere. else if(check_access(accessor.get_active_held_item()) || check_access(accessor.get_inactive_held_item())) return TRUE diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/biodome_winter.dm b/code/modules/mapfluff/ruins/lavalandruin_code/biodome_winter.dm index 150b4c5e44b..55fe9e77eac 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/biodome_winter.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/biodome_winter.dm @@ -45,5 +45,5 @@ else if(isliving(hit_atom)) var/mob/living/hit_mob = hit_atom - SSmove_manager.stop_looping(hit_mob) //stops them mid pathing even if they're stunimmune + DSmove_manager.stop_looping(hit_mob) //stops them mid pathing even if they're stunimmune hit_mob.apply_status_effect(/datum/status_effect/ice_block_talisman, 3 SECONDS) diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm index 6ce6056b477..8dc9cec326d 100644 --- a/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm @@ -262,7 +262,7 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate) var/static/list/give_turf_traits if(!give_turf_traits) - give_turf_traits = string_list(list(TRAIT_LAVA_STOPPED, TRAIT_CHASM_STOPPED)) + give_turf_traits = string_list(list(TRAIT_LAVA_STOPPED, TRAIT_CHASM_STOPPED, TRAIT_IMMERSE_STOPPED)) AddElement(/datum/element/give_turf_traits, give_turf_traits) /obj/structure/stone_tile/singularity_pull() diff --git a/code/modules/meteors/meteor_types.dm b/code/modules/meteors/meteor_types.dm index 2b37a55aaa4..d7a7dd14002 100644 --- a/code/modules/meteors/meteor_types.dm +++ b/code/modules/meteors/meteor_types.dm @@ -76,7 +76,7 @@ /obj/effect/meteor/proc/chase_target(atom/chasing, delay, home) if(!isatom(chasing)) return - var/datum/move_loop/new_loop = SSmove_manager.move_towards(src, chasing, delay, home, lifetime) + var/datum/move_loop/new_loop = DSmove_manager.move_towards(src, chasing, delay, home, lifetime) if(!new_loop) return diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index 4845b0f9c00..5485ce72f22 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -85,20 +85,20 @@ starting_filter_type = /obj/item/gas_filter/plasmaman /obj/item/clothing/mask/gas/explorer/attack_self(mob/user) - adjustmask(user) + adjust_visor(user) -/obj/item/clothing/mask/gas/explorer/adjustmask(mob/user) +/obj/item/clothing/mask/gas/explorer/visor_toggling() . = ..() // adjusted = out of the way = smaller = can fit in boxes - update_weight_class(mask_adjusted ? WEIGHT_CLASS_SMALL : WEIGHT_CLASS_NORMAL) - inhand_icon_state = mask_adjusted ? "[initial(inhand_icon_state)]_up" : initial(inhand_icon_state) - if(user) - user.update_held_items() + update_weight_class(up ? WEIGHT_CLASS_SMALL : WEIGHT_CLASS_NORMAL) +/obj/item/clothing/mask/gas/explorer/update_icon_state() + . = ..() + inhand_icon_state = "[initial(inhand_icon_state)][up ? "_up" : ""]" /obj/item/clothing/mask/gas/explorer/examine(mob/user) . = ..() - if(mask_adjusted || w_class == WEIGHT_CLASS_SMALL) + if(up || w_class == WEIGHT_CLASS_SMALL) return . += span_notice("You could fit this into a box if you adjusted it.") @@ -107,7 +107,7 @@ /obj/item/clothing/mask/gas/explorer/folded/Initialize(mapload) . = ..() - adjustmask() + visor_toggling() /obj/item/clothing/suit/hooded/cloak icon = 'icons/obj/clothing/suits/armor.dmi' diff --git a/code/modules/mining/equipment/vent_pointer.dm b/code/modules/mining/equipment/vent_pointer.dm new file mode 100644 index 00000000000..4edab185597 --- /dev/null +++ b/code/modules/mining/equipment/vent_pointer.dm @@ -0,0 +1,19 @@ +/obj/item/pinpointer/vent + name = "ventpointer" + desc = "A handheld tracking device. It will locate and point to nearby vents. A bit unreliable though." + icon_state = "pinpointer_vent" + minimum_range = 14 //gotta use them eyes + +/obj/item/pinpointer/vent/scan_for_target() + var/closest_dist = INFINITY + + for(var/obj/structure/ore_vent/vent in SSore_generation.possible_vents) + if(vent.discovered || vent.tapped) + continue + if(vent.z != loc.z) + continue + + var/target_dist = get_dist(src, vent) + if(target_dist < closest_dist) + closest_dist = target_dist + target = vent diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 61318f63b92..2eaa1d95db9 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -152,7 +152,7 @@ materials = AddComponent( \ /datum/component/material_container, \ - SSmaterials.materials_by_category[MAT_CATEGORY_SILO], \ + DSmaterials.materials_by_category[MAT_CATEGORY_SILO], \ INFINITY, \ MATCONTAINER_EXAMINE, \ allowed_items = accepted_type \ diff --git a/code/modules/mining/machine_silo.dm b/code/modules/mining/machine_silo.dm index 97c3a90b78e..5096f00a770 100644 --- a/code/modules/mining/machine_silo.dm +++ b/code/modules/mining/machine_silo.dm @@ -20,7 +20,7 @@ materials = AddComponent( \ /datum/component/material_container, \ - SSmaterials.materials_by_category[MAT_CATEGORY_SILO], \ + DSmaterials.materials_by_category[MAT_CATEGORY_SILO], \ INFINITY, \ MATCONTAINER_EXAMINE, \ container_signals = list( \ diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index f06c16e11de..1eec176a67d 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -429,10 +429,10 @@ var/obscured = NONE var/hidden_slots = NONE - for(var/obj/item/I in get_all_worn_items()) - hidden_slots |= I.flags_inv + for(var/obj/item/equipped_item in get_equipped_items()) + hidden_slots |= equipped_item.flags_inv if(transparent_protection) - hidden_slots |= I.transparent_protection + hidden_slots |= equipped_item.transparent_protection if(hidden_slots & HIDENECK) obscured |= ITEM_SLOT_NECK @@ -504,12 +504,8 @@ if(!I) to_chat(src, span_warning("You are not holding anything to equip!")) return - if (temporarilyRemoveItemFromInventory(I) && !QDELETED(I)) - if(I.equip_to_best_slot(src)) - return - if(put_in_active_hand(I)) - return - I.forceMove(drop_location()) + if(!QDELETED(I)) + I.equip_to_best_slot(src) //used in code for items usable by both carbon and drones, this gives the proper back slot for each mob.(defibrillator, backpack watertank, ...) /mob/proc/getBackSlot() diff --git a/code/modules/mob/living/basic/bots/_bots.dm b/code/modules/mob/living/basic/bots/_bots.dm index ccd4b0d617f..d98369294e0 100644 --- a/code/modules/mob/living/basic/bots/_bots.dm +++ b/code/modules/mob/living/basic/bots/_bots.dm @@ -104,7 +104,7 @@ GLOBAL_LIST_INIT(command_strings, list( AddElement(/datum/element/relay_attackers) RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(handle_loop_movement)) RegisterSignal(src, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(after_attacked)) - RegisterSignal(src, COMSIG_OBJ_ALLOWED, PROC_REF(attempt_access)) + RegisterSignal(src, COMSIG_MOB_TRIED_ACCESS, PROC_REF(attempt_access)) ADD_TRAIT(src, TRAIT_NO_GLIDE, INNATE_TRAIT) GLOB.bots_list += src @@ -757,7 +757,7 @@ GLOBAL_LIST_INIT(command_strings, list( /mob/living/basic/bot/proc/attempt_access(mob/bot, obj/door_attempt) SIGNAL_HANDLER - return (door_attempt.check_access(access_card) ? COMPONENT_OBJ_ALLOW : COMPONENT_OBJ_DISALLOW) + return (door_attempt.check_access(access_card) ? ACCESS_ALLOWED : ACCESS_DISALLOWED) /mob/living/basic/bot/proc/generate_speak_list() return null diff --git a/code/modules/mob/living/basic/bots/bot_ai.dm b/code/modules/mob/living/basic/bots/bot_ai.dm index 16ca5200308..1c30f83b2e6 100644 --- a/code/modules/mob/living/basic/bots/bot_ai.dm +++ b/code/modules/mob/living/basic/bots/bot_ai.dm @@ -91,10 +91,9 @@ behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION /datum/ai_behavior/manage_unreachable_list/perform(seconds_per_tick, datum/ai_controller/controller, list_key) - . = ..() if(!isnull(controller.blackboard[list_key])) controller.clear_blackboard_key(list_key) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/manage_unreachable_list/finish_action(datum/ai_controller/controller, succeeded) . = ..() @@ -123,7 +122,6 @@ /datum/ai_behavior/find_first_beacon_target /datum/ai_behavior/find_first_beacon_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/closest_distance = INFINITY var/mob/living/basic/bot/bot_pawn = controller.pawn var/atom/final_target @@ -138,19 +136,16 @@ final_target = beacon if(isnull(final_target)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(BB_BEACON_TARGET, final_target) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/find_next_beacon_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/mob/living/basic/bot/bot_pawn = controller.pawn var/atom/final_target var/obj/machinery/navbeacon/prev_beacon = controller.blackboard[BB_PREVIOUS_BEACON_TARGET] if(QDELETED(prev_beacon)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED for(var/obj/machinery/navbeacon/beacon as anything in GLOB.navbeacons["[bot_pawn.z]"]) if(beacon.location == prev_beacon.codes[NAVBEACON_PATROL_NEXT]) @@ -159,10 +154,10 @@ if(isnull(final_target)) controller.clear_blackboard_key(BB_PREVIOUS_BEACON_TARGET) - finish_action(controller, FALSE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(BB_BEACON_TARGET, final_target) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/travel_towards/beacon @@ -224,14 +219,11 @@ /datum/ai_behavior/salute_authority /datum/ai_behavior/salute_authority/perform(seconds_per_tick, datum/ai_controller/controller, target_key, salute_keys) - . = ..() if(!controller.blackboard_key_exists(target_key)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/list/salute_list = controller.blackboard[salute_keys] if(!length(salute_list)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/basic/bot/bot_pawn = controller.pawn //special interaction if we are wearing a fedora var/obj/item/our_hat = (locate(/obj/item/clothing/head) in bot_pawn) @@ -239,8 +231,7 @@ salute_list += "tips [our_hat] at " bot_pawn.manual_emote(pick(salute_list) + " [controller.blackboard[target_key]]!") - finish_action(controller, TRUE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/salute_authority/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm b/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm index 537490c8431..a58a97c7274 100644 --- a/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm +++ b/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm @@ -122,16 +122,14 @@ set_movement_target(controller, target) /datum/ai_behavior/execute_clean/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/mob/living/basic/living_pawn = controller.pawn var/atom/target = controller.blackboard[target_key] if(QDELETED(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED living_pawn.UnarmedAttack(target, proximity_flag = TRUE) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/execute_clean/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) . = ..() diff --git a/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm b/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm index d982869595b..2c614e003c8 100644 --- a/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm +++ b/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm @@ -80,11 +80,10 @@ break if(isnull(found_target)) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(target_key, found_target) - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED @@ -112,17 +111,15 @@ var/mob/living/carbon/human/unclean_target = controller.blackboard[target_key] var/mob/living/basic/living_pawn = controller.pawn if(QDELETED(unclean_target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(living_pawn.loc == get_turf(unclean_target)) living_pawn.melee_attack(unclean_target) - finish_action(controller, TRUE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED var/frustration_count = controller.blackboard[BB_WASH_FRUSTRATION] controller.set_blackboard_key(BB_WASH_FRUSTRATION, frustration_count + 1) - finish_action(controller, FALSE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /datum/ai_behavior/wash_target/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm b/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm index 21f9ab29d1b..0a4520ad17b 100644 --- a/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm +++ b/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm @@ -53,7 +53,6 @@ action_cooldown = 2 SECONDS /datum/ai_behavior/find_suitable_patient/perform(seconds_per_tick, datum/ai_controller/basic_controller/bot/controller, target_key, threshold, heal_type, mode_flags, access_flags) - . = ..() search_range = (mode_flags & MEDBOT_STATIONARY_MODE) ? 1 : initial(search_range) var/list/ignore_keys = controller.blackboard[BB_TEMPORARY_IGNORE_LIST] for(var/mob/living/carbon/human/treatable_target in oview(search_range, controller.pawn)) @@ -71,7 +70,10 @@ controller.set_if_can_reach(BB_PATIENT_TARGET, treatable_target, distance = BOT_PATIENT_PATH_LIMIT, bypass_add_to_blacklist = (search_range == 1)) break - finish_action(controller, controller.blackboard_key_exists(BB_PATIENT_TARGET)) + if(controller.blackboard_key_exists(BB_PATIENT_TARGET)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + else + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /datum/ai_behavior/find_suitable_patient/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() @@ -91,21 +93,18 @@ set_movement_target(controller, target) /datum/ai_behavior/tend_to_patient/perform(seconds_per_tick, datum/ai_controller/basic_controller/bot/controller, target_key, threshold, damage_type_healer, access_flags, is_stationary) - . = ..() var/mob/living/carbon/human/patient = controller.blackboard[target_key] if(QDELETED(patient) || patient.stat == DEAD) - finish_action(controller, FALSE, target_key, is_stationary) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(check_if_healed(patient, threshold, damage_type_healer, access_flags)) - finish_action(controller, TRUE, target_key, is_stationary, healed_target = TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED var/mob/living/basic/bot/bot_pawn = controller.pawn if(patient.stat >= HARD_CRIT && prob(5)) var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[BB_ANNOUNCE_ABILITY] announcement?.announce(pick(controller.blackboard[BB_NEAR_DEATH_SPEECH])) bot_pawn.melee_attack(patient) - finish_action(controller, TRUE, target_key, is_stationary) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED // only clear the target if they get healed /datum/ai_behavior/tend_to_patient/finish_action(datum/ai_controller/controller, succeeded, target_key, is_stationary, healed_target = FALSE) @@ -171,11 +170,10 @@ speech_to_pick_from += MEDIBOT_VOICED_CHICKEN if(!length(speech_to_pick_from)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED announcement.announce(pick(speech_to_pick_from)) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_planning_subtree/find_and_hunt_target/patients_in_crit target_key = BB_PATIENT_IN_CRIT @@ -202,18 +200,15 @@ behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION /datum/ai_behavior/announce_patient/perform(seconds_per_tick, datum/ai_controller/basic_controller/bot/controller, target_key) - . = ..() var/mob/living/living_target = controller.blackboard[target_key] if(QDELETED(living_target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[BB_ANNOUNCE_ABILITY] if(QDELETED(announcement)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/text_to_announce = "Medical emergency! [living_target] is in critical condition at [get_area(living_target)]!" announcement.announce(text_to_announce, controller.blackboard[BB_RADIO_CHANNEL]) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/announce_patient/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/modules/mob/living/basic/drone/drone_tools.dm b/code/modules/mob/living/basic/drone/drone_tools.dm index 2350ec9cafb..1fa3aa7884b 100644 --- a/code/modules/mob/living/basic/drone/drone_tools.dm +++ b/code/modules/mob/living/basic/drone/drone_tools.dm @@ -48,7 +48,7 @@ name = "built-in crowbar" desc = "A crowbar built into your chassis." icon = 'icons/obj/items_cyborg.dmi' - icon_state = "crowbar_cyborg" + icon_state = "toolkit_engiborg_crowbar" inhand_icon_state = "crowbar" item_flags = NO_MAT_REDEMPTION @@ -56,7 +56,7 @@ name = "built-in screwdriver" desc = "A screwdriver built into your chassis." icon = 'icons/obj/items_cyborg.dmi' - icon_state = "screwdriver_cyborg" + icon_state = "toolkit_engiborg_screwdriver" inhand_icon_state = "screwdriver" item_flags = NO_MAT_REDEMPTION random_color = FALSE @@ -75,7 +75,7 @@ name = "built-in wrench" desc = "A wrench built into your chassis." icon = 'icons/obj/items_cyborg.dmi' - icon_state = "wrench_cyborg" + icon_state = "toolkit_engiborg_wrench" inhand_icon_state = "wrench" item_flags = NO_MAT_REDEMPTION @@ -90,7 +90,7 @@ name = "built-in wirecutters" desc = "Wirecutters built into your chassis." icon = 'icons/obj/items_cyborg.dmi' - icon_state = "wirecutters_cyborg" + icon_state = "toolkit_engiborg_cutters" inhand_icon_state = "cutters" item_flags = NO_MAT_REDEMPTION random_color = FALSE @@ -99,6 +99,6 @@ name = "built-in multitool" desc = "A multitool built into your chassis." icon = 'icons/obj/items_cyborg.dmi' - icon_state = "multitool_cyborg" + icon_state = "toolkit_engiborg_multitool" item_flags = NO_MAT_REDEMPTION toolspeed = 0.5 diff --git a/code/modules/mob/living/basic/drone/visuals_icons.dm b/code/modules/mob/living/basic/drone/visuals_icons.dm index ec01d7d2d78..7a2122022f8 100644 --- a/code/modules/mob/living/basic/drone/visuals_icons.dm +++ b/code/modules/mob/living/basic/drone/visuals_icons.dm @@ -27,7 +27,7 @@ client.screen += internal_storage -/mob/living/basic/drone/update_worn_head() +/mob/living/basic/drone/update_worn_head(update_obscured = TRUE) remove_overlay(DRONE_HEAD_LAYER) if(head) @@ -44,7 +44,7 @@ apply_overlay(DRONE_HEAD_LAYER) -/mob/living/basic/drone/update_worn_mask() +/mob/living/basic/drone/update_worn_mask(update_obscured = TRUE) update_worn_head() /mob/living/basic/drone/regenerate_icons() diff --git a/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm b/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm index 0c48a945381..b4d73ad5927 100644 --- a/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm +++ b/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm @@ -25,7 +25,6 @@ set_movement_target(controller, target) /datum/ai_behavior/enter_exit_hive/perform(seconds_per_tick, datum/ai_controller/controller, target_key, attack_key) - . = ..() var/obj/structure/beebox/current_home = controller.blackboard[target_key] var/mob/living/bee_pawn = controller.pawn var/atom/attack_target = controller.blackboard[attack_key] @@ -35,7 +34,7 @@ var/datum/callback/callback = CALLBACK(bee_pawn, TYPE_PROC_REF(/mob/living/basic/bee, handle_habitation), current_home) callback.Invoke() - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/inhabit_hive behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH @@ -48,17 +47,15 @@ set_movement_target(controller, target) /datum/ai_behavior/inhabit_hive/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/obj/structure/beebox/potential_home = controller.blackboard[target_key] var/mob/living/bee_pawn = controller.pawn if(!potential_home.habitable(bee_pawn)) //the house become full before we get to it - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/datum/callback/callback = CALLBACK(bee_pawn, TYPE_PROC_REF(/mob/living/basic/bee, handle_habitation), potential_home) callback.Invoke() - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/inhabit_hive/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() @@ -158,19 +155,18 @@ set_movement_target(controller, target) /datum/ai_behavior/swirl_around_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/atom/target = controller.blackboard[target_key] var/mob/living/living_pawn = controller.pawn if(QDELETED(target)) - finish_action(controller, TRUE) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED if(get_dist(target, living_pawn) > 1) set_movement_target(controller, target) - return + return AI_BEHAVIOR_DELAY if(!SPT_PROB(swirl_chance, seconds_per_tick)) - return + return AI_BEHAVIOR_DELAY var/list/possible_turfs = list() @@ -180,10 +176,11 @@ possible_turfs += possible_turf if(!length(possible_turfs)) - return + return AI_BEHAVIOR_DELAY if(isnull(controller.movement_target_source) || controller.movement_target_source == type) set_movement_target(controller, pick(possible_turfs)) + return AI_BEHAVIOR_DELAY /datum/pet_command/beehive diff --git a/code/modules/mob/living/basic/festivus_pole.dm b/code/modules/mob/living/basic/festivus_pole.dm index 90eca4b272d..838674c0811 100644 --- a/code/modules/mob/living/basic/festivus_pole.dm +++ b/code/modules/mob/living/basic/festivus_pole.dm @@ -1,3 +1,6 @@ +///how much charge we give off to cells around us when rubbed +#define FESTIVUS_RECHARGE_VALUE (0.075 * STANDARD_CELL_CHARGE) + /mob/living/basic/festivus name = "festivus pole" desc = "Serenity now... SERENITY NOW!" @@ -37,10 +40,6 @@ ai_controller = /datum/ai_controller/basic_controller/festivus_pole - ///how much charge we give off to cells around us when rubbed - var/recharge_value = 75 KILO JOULES - - /mob/living/basic/festivus/Initialize(mapload) . = ..() AddComponent(/datum/component/seethrough_mob) @@ -71,16 +70,16 @@ for(var/atom/affected in range(2, get_turf(src))) if(istype(affected, /obj/item/stock_parts/cell)) var/obj/item/stock_parts/cell/cell = affected - cell.give(recharge_value) + cell.give(FESTIVUS_RECHARGE_VALUE) cell.update_appearance() if(istype(affected, /mob/living/silicon/robot)) var/mob/living/silicon/robot/robot = affected if(robot.cell) - robot.cell.give(recharge_value) + robot.cell.give(FESTIVUS_RECHARGE_VALUE) if(istype(affected, /obj/machinery/power/apc)) var/obj/machinery/power/apc/apc_target = affected if(apc_target.cell) - apc_target.cell.give(recharge_value) + apc_target.cell.give(FESTIVUS_RECHARGE_VALUE) /datum/ai_planning_subtree/find_and_hunt_target/look_for_apcs hunting_behavior = /datum/ai_behavior/hunt_target/apcs @@ -118,3 +117,5 @@ return FALSE return can_see(source, dinner, radius) + +#undef FESTIVUS_RECHARGE_VALUE diff --git a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm index 20bcd8a69a1..8a900b0308a 100644 --- a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm +++ b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm @@ -48,13 +48,11 @@ /datum/ai_behavior/find_valid_teleport_location /datum/ai_behavior/find_valid_teleport_location/perform(seconds_per_tick, datum/ai_controller/controller, hunting_target_key, types_to_hunt, hunt_range) - . = ..() var/mob/living/target = controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] var/list/possible_turfs = list() if(QDELETED(target)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED for(var/turf/open/potential_turf in oview(hunt_range, target)) //we check for turfs around the target if(potential_turf.is_blocked_turf()) @@ -64,11 +62,10 @@ possible_turfs += potential_turf if(!length(possible_turfs)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(hunting_target_key, pick(possible_turfs)) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/hunt_target/use_ability_on_target/demon_teleport hunt_cooldown = 2 SECONDS diff --git a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm index 725dcc09b5e..53d7e7191ef 100644 --- a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm +++ b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm @@ -38,8 +38,7 @@ /datum/ai_behavior/hunt_target/unarmed_attack_target/dragon_cannibalise/perform(seconds_per_tick, datum/ai_controller/controller, target_key, attack_key) var/mob/living/target = controller.blackboard[target_key] if(QDELETED(target) || target.stat != DEAD || target.pulledby) //we were too slow - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED return ..() /datum/ai_behavior/cannibalize/finish_action(datum/ai_controller/controller, succeeded, target_key) @@ -67,17 +66,14 @@ set_movement_target(controller, target) /datum/ai_behavior/sculpt_statue/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - var/atom/target = controller.blackboard[target_key] var/mob/living/basic/living_pawn = controller.pawn if(QDELETED(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED living_pawn.melee_attack(target) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/sculpt_statue/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() @@ -123,8 +119,6 @@ /datum/ai_behavior/set_target_tree /datum/ai_behavior/set_target_tree/perform(seconds_per_tick, datum/ai_controller/controller, tree_key) - . = ..() - var/mob/living_pawn = controller.pawn var/list/possible_trees = list() @@ -134,11 +128,10 @@ possible_trees += possible_tree if(!length(possible_trees)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(tree_key, pick(possible_trees)) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/targeted_mob_ability/and_clear_target/burn_trees behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION diff --git a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm index 0012aff294d..98025373b41 100644 --- a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm +++ b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm @@ -43,6 +43,5 @@ /datum/ai_behavior/targeted_mob_ability/brimbeam/perform(seconds_per_tick, datum/ai_controller/controller, ability_key, target_key) var/mob/living/target = controller.blackboard[target_key] if (QDELETED(target) || !(get_dir(controller.pawn, target) in GLOB.cardinals) || get_dist(controller.pawn, target) > max_target_distance) - finish_action(controller, succeeded = FALSE, ability_key = ability_key, target_key = target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED return ..() diff --git a/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm b/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm index 76c230520df..86ba1e00320 100644 --- a/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm +++ b/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm @@ -36,8 +36,7 @@ if (ismecha(target) || (isliving(target) && !target.has_status_effect(/datum/status_effect/incapacitating/stun/goliath_tentacled))) var/datum/action/cooldown/using_action = controller.blackboard[BB_GOLIATH_TENTACLES] if (using_action?.IsAvailable()) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED return ..() /datum/ai_planning_subtree/targeted_mob_ability/goliath_tentacles @@ -67,20 +66,18 @@ var/scan_range = 3 /datum/ai_behavior/goliath_find_diggable_turf/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/turf/target_turf = controller.blackboard[target_key] if (is_valid_turf(target_turf)) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/pawn = controller.pawn var/list/nearby_turfs = RANGE_TURFS(scan_range, pawn) var/turf/check_turf = pick(nearby_turfs) // This isn't an efficient search algorithm but we don't need it to be if (!is_valid_turf(check_turf)) - finish_action(controller, succeeded = FALSE) // Otherwise they won't perform idle wanderin - return + // Otherwise they won't perform idle wanderin + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(target_key, check_turf) - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /// Return true if this is a turf we can dig /datum/ai_behavior/goliath_find_diggable_turf/proc/is_valid_turf(turf/check_turf) @@ -112,13 +109,12 @@ set_movement_target(controller, target_turf) /datum/ai_behavior/goliath_dig/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/turf/target_turf = controller.blackboard[target_key] var/mob/living/basic/basic_mob = controller.pawn if(!basic_mob.CanReach(target_turf)) - return + return AI_BEHAVIOR_DELAY basic_mob.melee_attack(target_turf) - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/goliath_dig/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm index be45879c64b..352f1b46b17 100644 --- a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm @@ -44,12 +44,9 @@ continue living_pawn.befriend(potential_friend) to_chat(potential_friend, span_nicegreen("[living_pawn] looks at you with endearing eyes!")) - finish_action(controller, TRUE) - return - - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /datum/ai_controller/basic_controller/gutlunch/gutlunch_baby diff --git a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm index b80d5d6b9f7..c8e294f3e06 100644 --- a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm +++ b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm @@ -47,8 +47,8 @@ if (!is_vulnerable) controller.set_blackboard_key(BB_BASIC_MOB_STOP_FLEEING, FALSE) if (!controller.blackboard[BB_BASIC_MOB_STOP_FLEEING]) - finish_action(controller = controller, succeeded = TRUE, target_key = target_key) // We don't want to clear our target - return + // We don't want to clear our target + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED return ..() /datum/ai_planning_subtree/flee_target/lobster @@ -72,8 +72,7 @@ if (!HAS_TRAIT(target, trait)) continue controller.set_blackboard_key(BB_BASIC_MOB_STOP_FLEEING, TRUE) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED var/mob/living/us = controller.pawn if (us.pulling == target) @@ -132,14 +131,12 @@ set_movement_target(controller, current_target) /datum/ai_behavior/grab_fingers/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - var/atom/current_target = controller.blackboard[target_key] if (QDELETED(current_target)) - return + return AI_BEHAVIOR_DELAY var/mob/living/living_pawn = controller.pawn living_pawn.start_pulling(current_target) - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /// How far we'll try to go before eating an arm #define FLEE_TO_RANGE 9 @@ -159,14 +156,18 @@ if (QDELETED(current_target)) set_movement_target(controller, get_turf(controller.pawn)) return - target_step_away(controller, current_target, target_key) + var/perform_flags = target_step_away(controller, current_target, target_key) + if (perform_flags & AI_BEHAVIOR_SUCCEEDED) + finish_action(controller, TRUE, target_key) + else if(perform_flags & AI_BEHAVIOR_FAILED) + finish_action(controller, FALSE, target_key) /// Find the next step to take away from the current target /datum/ai_behavior/hoard_fingers/proc/target_step_away(datum/ai_controller/controller, atom/current_target, target_key) var/turf/next_step = get_step_away(controller.pawn, current_target) if (!isnull(next_step) && !next_step.is_blocked_turf(exclude_mobs = TRUE)) set_movement_target(controller, next_step) - return + return NONE var/list/all_dirs = GLOB.alldirs.Copy() all_dirs -= get_dir(controller.pawn, next_step) all_dirs -= get_dir(controller.pawn, current_target) @@ -175,37 +176,37 @@ next_step = get_step(controller.pawn, dir) if (!isnull(next_step) && !next_step.is_blocked_turf(exclude_mobs = TRUE)) set_movement_target(controller, next_step) - return - finish_action(controller, succeeded = FALSE, target_key = target_key) - return + return NONE + return AI_BEHAVIOR_FAILED /datum/ai_behavior/hoard_fingers/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/current_patience = controller.blackboard[patience_key] + 1 if (current_patience >= MAX_LOBSTROSITY_PATIENCE) - eat_fingers(controller, target_key) - return + if(eat_fingers(controller, target_key)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(patience_key, current_patience) var/mob/living/living_pawn = controller.pawn if (isnull(living_pawn.pulling)) - finish_action(controller, succeeded = FALSE, target_key = target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/atom/current_target = controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] if (QDELETED(current_target) || !can_see(controller.pawn, current_target, FLEE_TO_RANGE)) - eat_fingers(controller, target_key) - return - target_step_away(controller, current_target, target_key) + if(eat_fingers(controller, target_key)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + if(target_step_away(controller, current_target, target_key)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /// Finally consume those delicious digits /datum/ai_behavior/hoard_fingers/proc/eat_fingers(datum/ai_controller/controller, target_key) var/mob/living/basic/living_pawn = controller.pawn var/atom/fingers = controller.blackboard[target_key] if (QDELETED(fingers) || living_pawn.pulling != fingers) - finish_action(controller, succeeded = FALSE, target_key = target_key) - return + return AI_BEHAVIOR_FAILED living_pawn.melee_attack(fingers) - finish_action(controller, succeeded = TRUE, target_key = target_key) + return AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/hoard_fingers/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm b/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm index 50416693061..eeefc7a8b5c 100644 --- a/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm +++ b/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm @@ -117,15 +117,13 @@ GLOBAL_LIST_INIT(mook_commands, list( /datum/ai_behavior/find_village /datum/ai_behavior/find_village/perform(seconds_per_tick, datum/ai_controller/controller, village_key) - . = ..() var/obj/effect/landmark/home_marker = locate(/obj/effect/landmark/mook_village) in GLOB.landmarks_list if(isnull(home_marker)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(village_key, home_marker) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED ///explore the lands away from the village to look for ore /datum/ai_planning_subtree/wander_away_from_village @@ -190,8 +188,7 @@ GLOBAL_LIST_INIT(mook_commands, list( return return_turf /datum/ai_behavior/wander/perform(seconds_per_tick, datum/ai_controller/controller, target_key, hiding_location_key) - . = ..() - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_planning_subtree/mine_walls/mook find_wall_behavior = /datum/ai_behavior/find_mineral_wall/mook @@ -367,23 +364,20 @@ GLOBAL_LIST_INIT(mook_commands, list( action_cooldown = 5 SECONDS /datum/ai_behavior/issue_commands/perform(seconds_per_tick, datum/ai_controller/controller, target_key, command_path) - . = ..() var/mob/living/basic/living_pawn = controller.pawn var/atom/target = controller.blackboard[target_key] if(isnull(target)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/datum/pet_command/to_command = locate(command_path) in GLOB.mook_commands if(isnull(to_command)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/issue_command = pick(to_command.speech_commands) living_pawn.say(issue_command, forced = "controller") living_pawn._pointed(target) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED ///find an ore, only pick it up when a mook brings it close to us diff --git a/code/modules/mob/living/basic/minebots/minebot_ai.dm b/code/modules/mob/living/basic/minebots/minebot_ai.dm index 059048f761a..959049f957d 100644 --- a/code/modules/mob/living/basic/minebots/minebot_ai.dm +++ b/code/modules/mob/living/basic/minebots/minebot_ai.dm @@ -86,15 +86,13 @@ set_movement_target(controller, target) /datum/ai_behavior/repair_drone/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/atom/target = controller.blackboard[target_key] if(QDELETED(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/living_pawn = controller.pawn living_pawn.say("REPAIRING [target]!") living_pawn.UnarmedAttack(target) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/repair_drone/finish_action(datum/ai_controller/controller, success, target_key) . = ..() @@ -119,20 +117,17 @@ action_cooldown = 2 MINUTES /datum/ai_behavior/send_sos_message/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/mob/living/carbon/target = controller.blackboard[target_key] var/mob/living/living_pawn = controller.pawn if(QDELETED(target) || is_station_level(target.z)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/turf/target_turf = get_turf(target) var/obj/item/implant/radio/radio_implant = locate(/obj/item/implant/radio) in living_pawn.contents if(!radio_implant) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/message = "ALERT, [target] in need of help at coordinates: [target_turf.x], [target_turf.y], [target_turf.z]!" radio_implant.radio.talk_into(living_pawn, message, RADIO_CHANNEL_SUPPLY) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/send_sos_message/finish_action(datum/ai_controller/controller, success, target_key) . = ..() @@ -182,11 +177,10 @@ minimum_distance = controller.blackboard[BB_MINIMUM_SHOOTING_DISTANCE] ? controller.blackboard[BB_MINIMUM_SHOOTING_DISTANCE] : initial(minimum_distance) var/atom/target = controller.blackboard[target_key] if(QDELETED(target)) - finish_action(controller, target_key, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/living_pawn = controller.pawn if(get_dist(living_pawn, target) <= minimum_distance) - finish_action(controller, target_key, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED ///mine walls if we are on automated mining mode /datum/ai_planning_subtree/minebot_mining/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) @@ -220,24 +214,20 @@ set_movement_target(controller, target) /datum/ai_behavior/minebot_mine_turf/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/mob/living/basic/living_pawn = controller.pawn var/turf/target = controller.blackboard[target_key] if(QDELETED(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(check_obstacles_in_path(controller, target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(!living_pawn.combat_mode) living_pawn.set_combat_mode(TRUE) living_pawn.RangedAttack(target) - finish_action(controller, TRUE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/minebot_mine_turf/proc/check_obstacles_in_path(datum/ai_controller/controller, turf/target) var/mob/living/source = controller.pawn diff --git a/code/modules/mob/living/basic/pets/cat/cat_ai.dm b/code/modules/mob/living/basic/pets/cat/cat_ai.dm index 7eff8582355..d6589d29b40 100644 --- a/code/modules/mob/living/basic/pets/cat/cat_ai.dm +++ b/code/modules/mob/living/basic/pets/cat/cat_ai.dm @@ -60,15 +60,13 @@ set_movement_target(controller, target) /datum/ai_behavior/enter_cat_home/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/obj/structure/cat_house/home = controller.blackboard[target_key] var/mob/living/basic/living_pawn = controller.pawn if(living_pawn == home.resident_cat || isnull(home.resident_cat)) living_pawn.melee_attack(home) - finish_action(controller, TRUE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED - finish_action(controller, FALSE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /datum/ai_behavior/enter_cat_home/finish_action(datum/ai_controller/controller, success, target_key) . = ..() @@ -133,8 +131,7 @@ var/mob/living/target = controller.blackboard[target_key] if(QDELETED(target)) - finish_action(controller, TRUE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED var/mob/living/living_pawn = controller.pawn var/list/threaten_list = controller.blackboard[cries_key] @@ -149,7 +146,7 @@ loser_controller.set_blackboard_key(BB_BASIC_MOB_FLEE_TARGET, target) target.ai_controller.clear_blackboard_key(BB_TRESSPASSER_TARGET) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/territorial_struggle/finish_action(datum/ai_controller/controller, success, target_key) . = ..() @@ -191,19 +188,16 @@ set_movement_target(controller, target) /datum/ai_behavior/play_with_mouse/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/mob/living/basic/mouse/target = controller.blackboard[target_key] if(QDELETED(target)) - finish_action(controller, TRUE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED consume_chance = istype(target, /mob/living/basic/mouse/brown/tom) ? 5 : initial(consume_chance) if(prob(consume_chance)) target.splat() - finish_action(controller, TRUE, target_key) - return - finish_action(controller, FALSE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /datum/ai_behavior/play_with_mouse/finish_action(datum/ai_controller/controller, success, target_key) . = ..() @@ -272,22 +266,19 @@ set_movement_target(controller, target) /datum/ai_behavior/deliver_food_to_kitten/perform(seconds_per_tick, datum/ai_controller/controller, target_key, food_key) - . = ..() var/mob/living/target = controller.blackboard[target_key] if(QDELETED(target)) - finish_action(controller, FALSE, target_key, food_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/living_pawn = controller.pawn var/atom/movable/food = controller.blackboard[food_key] if(isnull(food) || !(food in living_pawn)) - finish_action(controller, FALSE, target_key, food_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED food.forceMove(get_turf(living_pawn)) - finish_action(controller, TRUE, target_key, food_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/deliver_food_to_kitten/finish_action(datum/ai_controller/controller, success, target_key, food_key) . = ..() diff --git a/code/modules/mob/living/basic/pets/cat/kitten_ai.dm b/code/modules/mob/living/basic/pets/cat/kitten_ai.dm index 15630c07838..b694235a39e 100644 --- a/code/modules/mob/living/basic/pets/cat/kitten_ai.dm +++ b/code/modules/mob/living/basic/pets/cat/kitten_ai.dm @@ -30,16 +30,15 @@ action_cooldown = 5 SECONDS /datum/ai_behavior/beacon_for_food/perform(seconds_per_tick, datum/ai_controller/controller, target_key, meows_key) - . = ..() var/atom/target = controller.blackboard[target_key] if(QDELETED(target)) - finish_action(controller, FALSE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/living_pawn = controller.pawn var/list/meowing_list = controller.blackboard[meows_key] if(length(meowing_list)) living_pawn.say(pick(meowing_list), forced = "ai_controller") living_pawn._pointed(target) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/beacon_for_food/finish_action(datum/ai_controller/controller, success, target_key) . = ..() diff --git a/code/modules/mob/living/basic/pets/orbie/orbie_ai.dm b/code/modules/mob/living/basic/pets/orbie/orbie_ai.dm index 854a0209464..92f433bd08a 100644 --- a/code/modules/mob/living/basic/pets/orbie/orbie_ai.dm +++ b/code/modules/mob/living/basic/pets/orbie/orbie_ai.dm @@ -65,18 +65,16 @@ set_movement_target(controller, target) /datum/ai_behavior/interact_with_playmate/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/mob/living/basic/living_pawn = controller.pawn var/atom/target = controller.blackboard[target_key] if(QDELETED(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED living_pawn.manual_emote("plays with [target]!") living_pawn.spin(spintime = 4, speed = 1) living_pawn.ClickOn(target) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/interact_with_playmate/finish_action(datum/ai_controller/controller, success, target_key) . = ..() @@ -92,16 +90,14 @@ controller.queue_behavior(/datum/ai_behavior/relay_pda_message, BB_LAST_RECIEVED_MESSAGE) /datum/ai_behavior/relay_pda_message/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/mob/living/basic/living_pawn = controller.pawn var/text_to_say = controller.blackboard[target_key] if(isnull(text_to_say)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED living_pawn.say(text_to_say, forced = "AI controller") living_pawn.spin(spintime = 4, speed = 1) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/relay_pda_message/finish_action(datum/ai_controller/controller, success, target_key) . = ..() diff --git a/code/modules/mob/living/basic/pets/parrot/parrot_ai/parrot_perching.dm b/code/modules/mob/living/basic/pets/parrot/parrot_ai/parrot_perching.dm index ccc3ef92f6e..b5b34e30cad 100644 --- a/code/modules/mob/living/basic/pets/parrot/parrot_ai/parrot_perching.dm +++ b/code/modules/mob/living/basic/pets/parrot/parrot_ai/parrot_perching.dm @@ -47,25 +47,21 @@ set_movement_target(controller, target) /datum/ai_behavior/perch_on_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/atom/target = controller.blackboard[target_key] if(QDELETED(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/basic/parrot/living_pawn = controller.pawn if(!ishuman(target)) living_pawn.start_perching(target) - finish_action(controller, TRUE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED if(!check_human_conditions(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED living_pawn.start_perching(target) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/perch_on_target/proc/check_human_conditions(mob/living/living_human) if(living_human.stat == DEAD || LAZYLEN(living_human.buckled_mobs) >= living_human.max_buckled_mobs) diff --git a/code/modules/mob/living/basic/pets/parrot/parrot_ai/parroting_action.dm b/code/modules/mob/living/basic/pets/parrot/parrot_ai/parroting_action.dm index d1488a60b3b..493d67cbca8 100644 --- a/code/modules/mob/living/basic/pets/parrot/parrot_ai/parroting_action.dm +++ b/code/modules/mob/living/basic/pets/parrot/parrot_ai/parroting_action.dm @@ -45,6 +45,6 @@ speaking_pawn.say(modified_speech, forced = "AI Controller") if(speech_sound) playsound(speaking_pawn, speech_sound, 80, vary = TRUE) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED #undef HAS_CHANNEL_PREFIX diff --git a/code/modules/mob/living/basic/pets/pet_cult/pet_cult_ai.dm b/code/modules/mob/living/basic/pets/pet_cult/pet_cult_ai.dm index dc778b5816f..fb106809918 100644 --- a/code/modules/mob/living/basic/pets/pet_cult/pet_cult_ai.dm +++ b/code/modules/mob/living/basic/pets/pet_cult/pet_cult_ai.dm @@ -100,25 +100,21 @@ set_movement_target(controller, target) /datum/ai_behavior/activate_rune/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/atom/target = controller.blackboard[target_key] if(QDELETED(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/datum/team/cult/cult_team = controller.blackboard[BB_CULT_TEAM] var/mob/living/revive_mob = locate(/mob/living) in get_turf(target) if(isnull(revive_mob) || revive_mob.stat != DEAD || !(revive_mob.mind in cult_team.members)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/basic/living_pawn = controller.pawn living_pawn.melee_attack(target) - finish_action(controller, TRUE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/activate_rune/finish_action(datum/ai_controller/controller, success, target_key) . = ..() @@ -211,12 +207,10 @@ set_movement_target(controller, target) /datum/ai_behavior/drag_target_to_rune/perform(seconds_per_tick, datum/ai_controller/controller, target_key, cultist_key) - . = ..() var/mob/living/our_pawn = controller.pawn var/atom/cultist_target = controller.blackboard[cultist_key] if(isnull(cultist_target)) - finish_action(controller, FALSE, target_key, cultist_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/list/possible_dirs = GLOB.alldirs.Copy() possible_dirs -= get_dir(our_pawn, cultist_target) for(var/direction in possible_dirs) @@ -225,7 +219,7 @@ possible_dirs -= direction step(our_pawn, pick(possible_dirs)) our_pawn.stop_pulling() - finish_action(controller, TRUE, target_key, cultist_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/drag_target_to_rune/finish_action(datum/ai_controller/controller, success, target_key, cultist_key) diff --git a/code/modules/mob/living/basic/ruin_defender/flesh.dm b/code/modules/mob/living/basic/ruin_defender/flesh.dm index a6087f08589..6f46e690700 100644 --- a/code/modules/mob/living/basic/ruin_defender/flesh.dm +++ b/code/modules/mob/living/basic/ruin_defender/flesh.dm @@ -178,6 +178,6 @@ /mob/living/basic/living_limb_flesh/proc/wake_up(atom/limb) visible_message(span_warning("[src] begins flailing around!")) Shake(6, 6, 0.5 SECONDS) - ai_controller.set_ai_status(AI_STATUS_IDLE) + ai_controller.set_ai_status(AI_STATUS_ON) forceMove(limb.drop_location()) qdel(limb) diff --git a/code/modules/mob/living/basic/slime/ai/behaviours.dm b/code/modules/mob/living/basic/slime/ai/behaviours.dm index 0db592099bb..e573bd57354 100644 --- a/code/modules/mob/living/basic/slime/ai/behaviours.dm +++ b/code/modules/mob/living/basic/slime/ai/behaviours.dm @@ -1,10 +1,9 @@ /datum/ai_behavior/perform_change_slime_face /datum/ai_behavior/perform_change_slime_face/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/mob/living/basic/slime/slime_pawn = controller.pawn if(!istype(slime_pawn)) - return + return AI_BEHAVIOR_DELAY var/current_mood = slime_pawn.current_mood @@ -23,7 +22,7 @@ slime_pawn.current_mood = new_mood slime_pawn.regenerate_icons() - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/find_hunt_target/find_slime_food diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp.dm b/code/modules/mob/living/basic/space_fauna/carp/carp.dm index cf905de5dbf..ee2073987da 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp.dm @@ -134,6 +134,8 @@ /// Gives the carp a list of weakrefs of destinations to try and travel between when it has nothing better to do /mob/living/basic/carp/proc/migrate_to(list/datum/weakref/migration_points) + ai_controller.can_idle = FALSE + ai_controller.set_ai_status(AI_STATUS_ON) // We need htem to actually walk to the station var/list/actual_points = list() for(var/datum/weakref/point_ref as anything in migration_points) var/turf/point_resolved = point_ref.resolve() diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp_ai_actions.dm b/code/modules/mob/living/basic/space_fauna/carp/carp_ai_actions.dm index 9e767bab3af..71017bd2207 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp_ai_actions.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp_ai_actions.dm @@ -21,8 +21,7 @@ if (QDELETED(using_action)) return ..() if (!controller.blackboard[BB_MAGICARP_SPELL_SPECIAL_TARGETING] && using_action.IsAvailable()) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED return ..() /** diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp_ai_migration.dm b/code/modules/mob/living/basic/space_fauna/carp/carp_ai_migration.dm index 27fdb25ee22..9458877af7f 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp_ai_migration.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp_ai_migration.dm @@ -47,10 +47,8 @@ blackboard_points -= migration_point if(get_dist(controller.pawn, migration_point) > CARP_DESTINATION_SEARCH_RANGE) controller.set_blackboard_key(target_key, migration_point) - finish_action(controller, succeeded = TRUE) - return - - finish_action(controller, succeeded = FALSE) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED #undef CARP_DESTINATION_SEARCH_RANGE #undef CARP_PORTAL_SEARCH_RANGE diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp_ai_rift_actions.dm b/code/modules/mob/living/basic/space_fauna/carp/carp_ai_rift_actions.dm index fc6997896b0..84b96ae3ce4 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp_ai_rift_actions.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp_ai_rift_actions.dm @@ -52,21 +52,19 @@ return controller.blackboard[ability_key] && controller.blackboard[target_key] /datum/ai_behavior/make_carp_rift/perform(seconds_per_tick, datum/ai_controller/controller, ability_key, target_key) - . = ..() var/datum/action/cooldown/mob_cooldown/lesser_carp_rift/ability = controller.blackboard[ability_key] var/atom/target = controller.blackboard[target_key] if (!validate_target(controller, target, ability)) - finish_action(controller, FALSE, ability_key, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/turf/target_destination = find_target_turf(controller, target, ability) if (!target_destination) - finish_action(controller, FALSE, ability_key, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - var/result = ability.InterceptClickOn(controller.pawn, null, target_destination) - finish_action(controller, result, ability_key, target_key) + if(ability.InterceptClickOn(controller.pawn, null, target_destination)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /// Return true if your target is valid for the action /datum/ai_behavior/make_carp_rift/proc/validate_target(datum/ai_controller/controller, atom/target, datum/action/cooldown/mob_cooldown/lesser_carp_rift/ability) diff --git a/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_behavior.dm b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_behavior.dm index 57ea39c94dd..f50fca8c559 100644 --- a/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_behavior.dm +++ b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_behavior.dm @@ -1,14 +1,11 @@ /datum/ai_behavior/find_the_blind /datum/ai_behavior/find_the_blind/perform(seconds_per_tick, datum/ai_controller/controller, blind_key, threshold_key) - . = ..() - var/mob/living_pawn = controller.pawn var/list/blind_list = list() var/eye_damage_threshold = controller.blackboard[threshold_key] if(!eye_damage_threshold) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED for(var/mob/living/carbon/blind in oview(9, living_pawn)) var/obj/item/organ/internal/eyes/eyes = blind.get_organ_slot(ORGAN_SLOT_EYES) if(isnull(eyes)) @@ -18,11 +15,10 @@ blind_list += blind if(!length(blind_list)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(blind_key, pick(blind_list)) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/heal_eye_damage behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH @@ -35,19 +31,16 @@ set_movement_target(controller, target) /datum/ai_behavior/heal_eye_damage/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - var/mob/living/carbon/target = controller.blackboard[target_key] var/mob/living/living_pawn = controller.pawn if(QDELETED(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/obj/item/organ/internal/eyes/eyes = target.get_organ_slot(ORGAN_SLOT_EYES) var/datum/callback/callback = CALLBACK(living_pawn, TYPE_PROC_REF(/mob/living/basic/eyeball, heal_eye_damage), target, eyes) callback.Invoke() - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/heal_eye_damage/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() @@ -77,17 +70,18 @@ var/mob/living/target = controller.blackboard[target_key] if(QDELETED(ability) || QDELETED(target)) - finish_action(controller, FALSE, ability_key, target_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED var/direction_to_compare = get_dir(target, controller.pawn) var/target_direction = target.dir if(direction_to_compare != target_direction) - finish_action(controller, FALSE, ability_key, target_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED var/result = ability.InterceptClickOn(controller.pawn, null, target) - finish_action(controller, result, ability_key, target_key) + if(result == TRUE) + return AI_BEHAVIOR_INSTANT + else + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED /datum/ai_behavior/hunt_target/unarmed_attack_target/carrot hunt_cooldown = 2 SECONDS diff --git a/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_behavior.dm b/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_behavior.dm index 28cffa4ed8e..7db7a8913fa 100644 --- a/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_behavior.dm +++ b/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_behavior.dm @@ -30,19 +30,16 @@ /datum/ai_behavior/relay_message/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - var/mob/living/target = controller.blackboard[target_key] var/mob/living/living_pawn = controller.pawn if(QDELETED(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/message_relayed = "" for(var/i in 1 to length_of_message) message_relayed += prob(50) ? "1" : "0" living_pawn.say(message_relayed, forced = "AI Controller") - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/relay_message/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_subtrees.dm b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_subtrees.dm index 8682c8028e3..20f6ce4baf0 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_subtrees.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_subtrees.dm @@ -13,19 +13,17 @@ var/scan_range = 3 /datum/ai_behavior/find_unwebbed_turf/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/mob/living/spider = controller.pawn var/atom/current_target = controller.blackboard[target_key] if (current_target && !(locate(/obj/structure/spider/stickyweb) in current_target)) - finish_action(controller, succeeded = FALSE) // Already got a target - return + // Already got a target + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.clear_blackboard_key(target_key) var/turf/our_turf = get_turf(spider) if (is_valid_web_turf(our_turf, spider)) controller.set_blackboard_key(target_key, our_turf) - finish_action(controller, succeeded = TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED var/list/turfs_by_range = list() for (var/i in 1 to scan_range) @@ -41,11 +39,10 @@ final_turfs = turfs_by_range[turf_list] break if (!length(final_turfs)) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(target_key, pick(final_turfs)) - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/find_unwebbed_turf/proc/is_valid_web_turf(turf/target_turf, mob/living/spider) if (locate(/obj/structure/spider/stickyweb) in target_turf) @@ -82,9 +79,10 @@ return ..() /datum/ai_behavior/spin_web/perform(seconds_per_tick, datum/ai_controller/controller, action_key, target_key) - . = ..() var/datum/action/cooldown/web_action = controller.blackboard[action_key] - finish_action(controller, succeeded = web_action?.Trigger(), action_key = action_key, target_key = target_key) + if(web_action?.Trigger()) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /datum/ai_behavior/spin_web/finish_action(datum/ai_controller/controller, succeeded, action_key, target_key) controller.clear_blackboard_key(target_key) diff --git a/code/modules/mob/living/basic/space_fauna/statue/mannequin.dm b/code/modules/mob/living/basic/space_fauna/statue/mannequin.dm index 7b6bf6c8399..9710421b408 100644 --- a/code/modules/mob/living/basic/space_fauna/statue/mannequin.dm +++ b/code/modules/mob/living/basic/space_fauna/statue/mannequin.dm @@ -57,14 +57,13 @@ return ismovable(target) && isturf(target.loc) && ismob(controller.pawn) /datum/ai_behavior/face_target_or_face_initial/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/atom/movable/target = controller.blackboard[target_key] var/mob/living/we = controller.pawn if(isnull(target) || get_dist(we, target) > 8) we.dir = controller.blackboard[BB_STARTING_DIRECTION] - finish_action(controller, TRUE) - else - we.face_atom(target) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + we.face_atom(target) + return AI_BEHAVIOR_DELAY /mob/living/basic/statue/mannequin/suspicious name = "mannequin?" diff --git a/code/modules/mob/living/basic/trader/trader_ai.dm b/code/modules/mob/living/basic/trader/trader_ai.dm index 5f447ab3229..d79a12a2d29 100644 --- a/code/modules/mob/living/basic/trader/trader_ai.dm +++ b/code/modules/mob/living/basic/trader/trader_ai.dm @@ -61,19 +61,15 @@ return !QDELETED(target) /datum/ai_behavior/setup_shop/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - //We lost track of our costumer or our ability, abort if(!controller.blackboard_key_exists(target_key) || !controller.blackboard_key_exists(BB_SETUP_SHOP)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/datum/action/setup_shop/shop = controller.blackboard[BB_SETUP_SHOP] shop.Trigger() controller.clear_blackboard_key(BB_FIRST_CUSTOMER) - - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/idle_behavior/idle_random_walk/not_while_on_target/trader target_key = BB_SHOP_SPOT diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 94a3d70372b..933e6cb86d6 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -116,18 +116,32 @@ Des: Removes all infected images from the alien. span_alertalien("[src] begins to twist and contort!"), span_noticealien("You begin to evolve!"), ) + new_xeno.setDir(dir) - if(numba && unique_name) - new_xeno.numba = numba - new_xeno.set_name() - if(!alien_name_regex.Find(name)) - new_xeno.name = name - new_xeno.real_name = real_name + new_xeno.change_name(name, real_name, numba) + if(mind) mind.name = new_xeno.real_name mind.transfer_to(new_xeno) + qdel(src) +/// Changes the name of the xeno we are evolving into in order to keep the same numerical identifier the old xeno had. +/mob/living/carbon/alien/proc/change_name(old_name, old_real_name, old_number) + if(!alien_name_regex.Find(old_name)) // check to make sure there's no admins doing funny stuff with naming these aliens + name = old_name + real_name = old_real_name + return + + if(!unique_name) + return + + if(old_number != 0) + numba = old_number + name = initial(name) // prevent chicanery like two different numerical identifiers tied to the same mob + + set_name() + /mob/living/carbon/alien/can_hold_items(obj/item/I) return (I && (I.item_flags & XENOMORPH_HOLDABLE || ISADVANCEDTOOLUSER(src)) && ..()) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index f32e67116b2..9490ea741f0 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -658,12 +658,8 @@ */ /mob/living/carbon/proc/update_tint() var/tint = 0 - if(isclothing(head)) - tint += head.tint - if(isclothing(wear_mask)) - tint += wear_mask.tint - if(isclothing(glasses)) - tint += glasses.tint + for(var/obj/item/clothing/worn_item in get_equipped_items()) + tint += worn_item.tint var/obj/item/organ/internal/eyes/eyes = get_organ_slot(ORGAN_SLOT_EYES) if(eyes) @@ -1260,35 +1256,35 @@ update_worn_back(0) . = TRUE - if(head?.wash(clean_types)) - update_worn_head() - . = TRUE - // Check and wash stuff that can be covered var/obscured = check_obscured_slots() + if(!(obscured & ITEM_SLOT_HEAD) && head?.wash(clean_types)) + update_worn_head() + . = TRUE + // If the eyes are covered by anything but glasses, that thing will be covering any potential glasses as well. - if(glasses && is_eyes_covered(ITEM_SLOT_MASK|ITEM_SLOT_HEAD) && glasses.wash(clean_types)) + if(is_eyes_covered(ITEM_SLOT_MASK|ITEM_SLOT_HEAD) && glasses?.wash(clean_types)) update_worn_glasses() . = TRUE - if(wear_mask && !(obscured & ITEM_SLOT_MASK) && wear_mask.wash(clean_types)) + if(!(obscured & ITEM_SLOT_MASK) && wear_mask?.wash(clean_types)) update_worn_mask() . = TRUE - if(ears && !(obscured & ITEM_SLOT_EARS) && ears.wash(clean_types)) - update_inv_ears() + if(!(obscured & ITEM_SLOT_EARS) && ears?.wash(clean_types)) + update_worn_ears() . = TRUE - if(wear_neck && !(obscured & ITEM_SLOT_NECK) && wear_neck.wash(clean_types)) + if(!(obscured & ITEM_SLOT_NECK) && wear_neck?.wash(clean_types)) update_worn_neck() . = TRUE - if(shoes && !(obscured & ITEM_SLOT_FEET) && shoes.wash(clean_types)) + if(!(obscured & ITEM_SLOT_FEET) && shoes?.wash(clean_types)) update_worn_shoes() . = TRUE - if(gloves && !(obscured & ITEM_SLOT_GLOVES) && gloves.wash(clean_types)) + if(!(obscured & ITEM_SLOT_GLOVES) && gloves?.wash(clean_types)) update_worn_gloves() . = TRUE diff --git a/code/modules/mob/living/carbon/carbon_update_icons.dm b/code/modules/mob/living/carbon/carbon_update_icons.dm index 2a17403a83e..c5862a95e12 100644 --- a/code/modules/mob/living/carbon/carbon_update_icons.dm +++ b/code/modules/mob/living/carbon/carbon_update_icons.dm @@ -1,38 +1,7 @@ -/mob/living/carbon/human/update_clothing(slot_flags) - if(slot_flags & ITEM_SLOT_BACK) - update_worn_back() - if(slot_flags & ITEM_SLOT_MASK) - update_worn_mask() - if(slot_flags & ITEM_SLOT_NECK) - update_worn_neck() - if(slot_flags & ITEM_SLOT_HANDCUFFED) - update_worn_handcuffs() - if(slot_flags & ITEM_SLOT_LEGCUFFED) - update_worn_legcuffs() - if(slot_flags & ITEM_SLOT_BELT) - update_worn_belt() - if(slot_flags & ITEM_SLOT_ID) - update_worn_id() - if(slot_flags & ITEM_SLOT_EARS) - update_inv_ears() - if(slot_flags & ITEM_SLOT_EYES) - update_worn_glasses() - if(slot_flags & ITEM_SLOT_GLOVES) - update_worn_gloves() - if(slot_flags & ITEM_SLOT_HEAD) - update_worn_head() - if(slot_flags & ITEM_SLOT_FEET) - update_worn_shoes() - if(slot_flags & ITEM_SLOT_OCLOTHING) - update_worn_oversuit() - if(slot_flags & ITEM_SLOT_ICLOTHING) - update_worn_undersuit() - if(slot_flags & ITEM_SLOT_SUITSTORE) - update_suit_storage() - if(slot_flags & (ITEM_SLOT_LPOCKET|ITEM_SLOT_RPOCKET)) - update_pockets() - if(slot_flags & ITEM_SLOT_HANDS) - update_held_items() +/mob/living/carbon/update_obscured_slots(obscured_flags) + ..() + if(obscured_flags & (HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT|HIDEMUTWINGS)) + update_body() /// Updates features and clothing attached to a specific limb with limb-specific offsets /mob/living/carbon/proc/update_features(feature_key) @@ -46,7 +15,7 @@ if(OFFSET_GLASSES) update_worn_glasses() if(OFFSET_EARS) - update_inv_ears() + update_worn_ears() if(OFFSET_SHOES) update_worn_shoes() if(OFFSET_S_STORE) @@ -357,7 +326,7 @@ //SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular) /* -/mob/living/carbon/update_worn_mask() +/mob/living/carbon/update_worn_mask(update_obscured = TRUE) remove_overlay(FACEMASK_LAYER) if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated @@ -368,13 +337,15 @@ inv.update_appearance() if(wear_mask) + if(update_obscured) + update_obscured_slots(wear_mask.flags_inv) if(!(check_obscured_slots() & ITEM_SLOT_MASK)) overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/clothing/mask.dmi') update_hud_wear_mask(wear_mask) apply_overlay(FACEMASK_LAYER) -/mob/living/carbon/update_worn_neck() +/mob/living/carbon/update_worn_neck(update_obscured = TRUE) remove_overlay(NECK_LAYER) if(client && hud_used?.inv_slots[TOBITSHIFT(ITEM_SLOT_NECK) + 1]) @@ -382,6 +353,8 @@ inv.update_appearance() if(wear_neck) + if(update_obscured) + update_obscured_slots(wear_neck.flags_inv) if(!(check_obscured_slots() & ITEM_SLOT_NECK)) overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = 'icons/mob/clothing/neck.dmi') update_hud_neck(wear_neck) @@ -392,7 +365,7 @@ //SKYRAT EDIT REMOVAL BEGIN - TESHARI CLOTHES (moved to modular) /* -/mob/living/carbon/update_worn_back() +/mob/living/carbon/update_worn_back(update_obscured = TRUE) remove_overlay(BACK_LAYER) if(client && hud_used?.inv_slots[TOBITSHIFT(ITEM_SLOT_BACK) + 1]) @@ -400,6 +373,8 @@ inv.update_appearance() if(back) + if(update_obscured) + update_obscured_slots(back.flags_inv) overlays_standing[BACK_LAYER] = back.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = 'icons/mob/clothing/back.dmi') update_hud_back(back) @@ -407,10 +382,12 @@ */ //SKYRAT EDIT REMOVAL END -/mob/living/carbon/update_worn_legcuffs() +/mob/living/carbon/update_worn_legcuffs(update_obscured = TRUE) remove_overlay(LEGCUFF_LAYER) clear_alert("legcuffed") if(legcuffed) + if(update_obscured) + update_obscured_slots(legcuffed.flags_inv) overlays_standing[LEGCUFF_LAYER] = mutable_appearance('icons/mob/simple/mob.dmi', "legcuff1", -LEGCUFF_LAYER) apply_overlay(LEGCUFF_LAYER) throw_alert("legcuffed", /atom/movable/screen/alert/restrained/legcuffed, new_master = src.legcuffed) @@ -418,7 +395,7 @@ //SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular) /* -/mob/living/carbon/update_worn_head() +/mob/living/carbon/update_worn_head(update_obscured = TRUE) remove_overlay(HEAD_LAYER) if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated @@ -429,7 +406,10 @@ inv.update_appearance() if(head) - overlays_standing[HEAD_LAYER] = head.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/clothing/head/default.dmi') + if(update_obscured) + update_obscured_slots(head.flags_inv) + if(!(check_obscured_slots() & ITEM_SLOT_HEAD)) + overlays_standing[HEAD_LAYER] = head.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/clothing/head/default.dmi') update_hud_head(head) apply_overlay(HEAD_LAYER) @@ -437,9 +417,11 @@ //SKYRAT EDIT REMOVAL END -/mob/living/carbon/update_worn_handcuffs() +/mob/living/carbon/update_worn_handcuffs(update_obscured = TRUE) remove_overlay(HANDCUFF_LAYER) if(handcuffed && !(handcuffed.item_flags & ABSTRACT)) //SKYRAT EDIT ADDED !(handcuffed.item_flags & ABSTRACT) + if(update_obscured) + update_obscured_slots(handcuffed.flags_inv) var/mutable_appearance/handcuff_overlay = mutable_appearance('icons/mob/simple/mob.dmi', "handcuff1", -HANDCUFF_LAYER) if(handcuffed.blocks_emissive != EMISSIVE_BLOCK_NONE) handcuff_overlay.overlays += emissive_blocker(handcuff_overlay.icon, handcuff_overlay.icon_state, src, alpha = handcuff_overlay.alpha) diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index da43817f849..f549fe654fa 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -431,7 +431,7 @@ GLOBAL_LIST_EMPTY(features_by_species) replacement.Insert(organ_holder, special=TRUE, movement_flags = DELETE_IF_REPLACED) /datum/species/proc/worn_items_fit_body_check(mob/living/carbon/wearer) - for(var/obj/item/equipped_item in wearer.get_all_worn_items()) + for(var/obj/item/equipped_item in wearer.get_equipped_items(include_pockets = TRUE)) var/equipped_item_slot = wearer.get_slot_by_item(equipped_item) if(!equipped_item.mob_can_equip(wearer, equipped_item_slot, bypass_equip_delay_self = TRUE, ignore_equipped = TRUE)) wearer.dropItemToGround(equipped_item, force = TRUE) diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm index 44fe6d1a1c0..193200c1e3a 100644 --- a/code/modules/mob/living/carbon/human/dummy.dm +++ b/code/modules/mob/living/carbon/human/dummy.dm @@ -41,7 +41,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) //Instead of just deleting our equipment, we save what we can and reinsert it into SSwardrobe's store //Hopefully this makes preference reloading not the worst thing ever /mob/living/carbon/human/dummy/delete_equipment() - var/list/items_to_check = get_all_worn_items() + held_items + var/list/items_to_check = get_equipped_items(include_pockets = TRUE) + held_items var/list/to_nuke = list() //List of items queued for deletion, can't qdel them before iterating their contents in case they hold something ///Travel to the bottom of the contents chain, expanding it out for(var/i = 1; i <= length(items_to_check); i++) //Needs to be a c style loop since it can expand @@ -68,6 +68,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) qdel(delete) /mob/living/carbon/human/dummy/has_equipped(obj/item/item, slot, initial = FALSE) + item.item_flags |= IN_INVENTORY return item.visual_equipped(src, slot, initial) /mob/living/carbon/human/dummy/proc/wipe_state() diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index c6940f1d763..8b2496b045a 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -362,7 +362,7 @@ if(CONSCIOUS) if(HAS_TRAIT(src, TRAIT_DUMB)) msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n" - if(get_organ_by_type(/obj/item/organ/internal/brain)) + if(get_organ_by_type(/obj/item/organ/internal/brain) && isnull(ai_controller)) if(!key) msg += "[span_deadsay("[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely.")]\n" else if(!client) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 767c09bfa68..4febca81d67 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -88,11 +88,6 @@ /mob/living/carbon/human/Topic(href, href_list) - if(href_list["item"]) //canUseTopic check for this is handled by mob/Topic() - var/slot = text2num(href_list["item"]) - if(check_obscured_slots(TRUE) & slot) - to_chat(usr, span_warning("You can't reach that! Something is covering it.")) - return ///////HUDs/////// if(href_list["hud"]) @@ -620,7 +615,7 @@ // Check and wash stuff that can be covered var/obscured = check_obscured_slots() - if(w_uniform && !(obscured & ITEM_SLOT_ICLOTHING) && w_uniform.wash(clean_types)) + if(!(obscured & ITEM_SLOT_ICLOTHING) && w_uniform?.wash(clean_types)) update_worn_undersuit() . = TRUE @@ -959,7 +954,7 @@ var/carrydelay = 5 SECONDS //if you have latex you are faster at grabbing var/skills_space - var/fitness_level = mind.get_skill_level(/datum/skill/fitness) - 1 + var/fitness_level = mind.get_skill_level(/datum/skill/athletics) - 1 if(HAS_TRAIT(src, TRAIT_QUICKER_CARRY)) carrydelay -= 2 SECONDS else if(HAS_TRAIT(src, TRAIT_QUICK_CARRY)) diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index d18c0c800f6..c8912cb72a5 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -75,15 +75,15 @@ return "Unknown" //Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when Fluacided or when updating a human's name variable -/mob/living/carbon/human/proc/get_face_name(if_no_face="Unknown") +/mob/living/carbon/human/proc/get_face_name(if_no_face = "Unknown") if(HAS_TRAIT(src, TRAIT_UNKNOWN)) return if_no_face //We're Unknown, no face information for you - if( wear_mask && (wear_mask.flags_inv&HIDEFACE) ) //Wearing a mask which hides our face, use id-name if possible + for(var/obj/item/worn_item in get_equipped_items()) + if(!(worn_item.flags_inv & HIDEFACE)) + continue return if_no_face - if( head && (head.flags_inv&HIDEFACE) ) - return if_no_face //Likewise for hats - var/obj/item/bodypart/O = get_bodypart(BODY_ZONE_HEAD) - if( !O || (HAS_TRAIT(src, TRAIT_DISFIGURED)) || (O.brutestate+O.burnstate)>2 || !real_name || HAS_TRAIT(src, TRAIT_INVISIBLE_MAN)) //disfigured. use id-name if possible + var/obj/item/bodypart/head = get_bodypart(BODY_ZONE_HEAD) + if(isnull(head) || (HAS_TRAIT(src, TRAIT_DISFIGURED)) || (head.brutestate + head.burnstate) > 2 || !real_name || HAS_TRAIT(src, TRAIT_INVISIBLE_MAN)) //disfigured. use id-name if possible return if_no_face return real_name diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm index bfb22804ddf..6f1c3f02ddf 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -54,7 +54,7 @@ There are several things that need to be remembered: update_worn_id() update_worn_glasses() update_worn_gloves() - update_inv_ears() + update_worn_ears() update_worn_shoes() update_suit_storage() update_worn_mask() @@ -70,10 +70,19 @@ There are several things that need to be remembered: //damage overlays update_damage_overlays() +/mob/living/carbon/human/update_obscured_slots(obscured_flags) + ..() + if(obscured_flags & HIDEFACE) + sec_hud_set_security_status() + // SKYRAT EDIT ADDITION START - ERP Overlays + if(obscured_flags & HIDESEXTOY) + update_inv_lewd() + // SKYRAT EDIT ADDITION END + /* --------------------------------------- */ //vvvvvv UPDATE_INV PROCS vvvvvv -/mob/living/carbon/human/update_worn_undersuit() +/mob/living/carbon/human/update_worn_undersuit(update_obscured = TRUE) remove_overlay(UNIFORM_LAYER) if(client && hud_used) @@ -84,6 +93,9 @@ There are several things that need to be remembered: var/obj/item/clothing/under/uniform = w_uniform update_hud_uniform(uniform) + if(update_obscured) + update_obscured_slots(uniform.flags_inv) + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_ICLOTHING) return @@ -153,7 +165,7 @@ There are several things that need to be remembered: update_mutant_bodyparts() -/mob/living/carbon/human/update_worn_id() +/mob/living/carbon/human/update_worn_id(update_obscured = TRUE) remove_overlay(ID_LAYER) if(client && hud_used) @@ -165,6 +177,10 @@ There are several things that need to be remembered: if(wear_id) var/obj/item/worn_item = wear_id update_hud_id(worn_item) + + if(update_obscured) + update_obscured_slots(worn_item.flags_inv) + var/icon_file = 'icons/mob/clothing/id.dmi' id_overlay = wear_id.build_worn_icon(default_layer = ID_LAYER, default_icon_file = icon_file) @@ -179,7 +195,7 @@ There are several things that need to be remembered: apply_overlay(ID_LAYER) -/mob/living/carbon/human/update_worn_gloves() +/mob/living/carbon/human/update_worn_gloves(update_obscured = TRUE) remove_overlay(GLOVES_LAYER) if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_GLOVES) + 1]) @@ -202,6 +218,9 @@ There are several things that need to be remembered: var/obj/item/worn_item = gloves update_hud_gloves(worn_item) + if(update_obscured) + update_obscured_slots(worn_item.flags_inv) + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_GLOVES) return @@ -230,7 +249,7 @@ There are several things that need to be remembered: apply_overlay(GLOVES_LAYER) -/mob/living/carbon/human/update_worn_glasses() +/mob/living/carbon/human/update_worn_glasses(update_obscured = TRUE) remove_overlay(GLASSES_LAYER) var/obj/item/bodypart/head/my_head = get_bodypart(BODY_ZONE_HEAD) @@ -245,6 +264,9 @@ There are several things that need to be remembered: var/obj/item/worn_item = glasses update_hud_glasses(worn_item) + if(update_obscured) + update_obscured_slots(worn_item.flags_inv) + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_EYES) return @@ -269,7 +291,7 @@ There are several things that need to be remembered: apply_overlay(GLASSES_LAYER) -/mob/living/carbon/human/update_inv_ears() +/mob/living/carbon/human/update_worn_ears(update_obscured = TRUE) remove_overlay(EARS_LAYER) var/obj/item/bodypart/head/my_head = get_bodypart(BODY_ZONE_HEAD) @@ -284,6 +306,9 @@ There are several things that need to be remembered: var/obj/item/worn_item = ears update_hud_ears(worn_item) + if(update_obscured) + update_obscured_slots(worn_item.flags_inv) + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_EARS) return @@ -307,7 +332,7 @@ There are several things that need to be remembered: overlays_standing[EARS_LAYER] = ears_overlay apply_overlay(EARS_LAYER) -/mob/living/carbon/human/update_worn_neck() +/mob/living/carbon/human/update_worn_neck(update_obscured = TRUE) remove_overlay(NECK_LAYER) if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_NECK) + 1]) @@ -318,6 +343,9 @@ There are several things that need to be remembered: var/obj/item/worn_item = wear_neck update_hud_neck(wear_neck) + if(update_obscured) + update_obscured_slots(worn_item.flags_inv) + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_NECK) return @@ -349,7 +377,7 @@ There are several things that need to be remembered: apply_overlay(NECK_LAYER) -/mob/living/carbon/human/update_worn_shoes() +/mob/living/carbon/human/update_worn_shoes(update_obscured = TRUE) remove_overlay(SHOES_LAYER) if(num_legs < 2) @@ -363,6 +391,9 @@ There are several things that need to be remembered: var/obj/item/worn_item = shoes update_hud_shoes(worn_item) + if(update_obscured) + update_obscured_slots(worn_item.flags_inv) + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_FEET) return @@ -407,7 +438,7 @@ There are several things that need to be remembered: update_body_parts() -/mob/living/carbon/human/update_suit_storage() +/mob/living/carbon/human/update_suit_storage(update_obscured = TRUE) remove_overlay(SUIT_STORE_LAYER) if(client && hud_used) @@ -418,6 +449,9 @@ There are several things that need to be remembered: var/obj/item/worn_item = s_store update_hud_s_store(worn_item) + if(update_obscured) + update_obscured_slots(worn_item.flags_inv) + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_SUITSTORE) return @@ -427,7 +461,7 @@ There are several things that need to be remembered: overlays_standing[SUIT_STORE_LAYER] = s_store_overlay apply_overlay(SUIT_STORE_LAYER) -/mob/living/carbon/human/update_worn_head() +/mob/living/carbon/human/update_worn_head(update_obscured = TRUE) remove_overlay(HEAD_LAYER) if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BACK) + 1]) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_HEAD) + 1] @@ -437,6 +471,9 @@ There are several things that need to be remembered: var/obj/item/worn_item = head update_hud_head(worn_item) + if(update_obscured) + update_obscured_slots(worn_item.flags_inv) + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_HEAD) return @@ -465,10 +502,9 @@ There are several things that need to be remembered: // SKYRAT EDIT END overlays_standing[HEAD_LAYER] = head_overlay - update_mutant_bodyparts() apply_overlay(HEAD_LAYER) -/mob/living/carbon/human/update_worn_belt() +/mob/living/carbon/human/update_worn_belt(update_obscured = TRUE) remove_overlay(BELT_LAYER) if(client && hud_used) @@ -479,6 +515,9 @@ There are several things that need to be remembered: var/obj/item/worn_item = belt update_hud_belt(worn_item) + if(update_obscured) + update_obscured_slots(worn_item.flags_inv) + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_BELT) return @@ -504,7 +543,7 @@ There are several things that need to be remembered: apply_overlay(BELT_LAYER) -/mob/living/carbon/human/update_worn_oversuit() +/mob/living/carbon/human/update_worn_oversuit(update_obscured = TRUE) remove_overlay(SUIT_LAYER) if(client && hud_used) @@ -514,6 +553,10 @@ There are several things that need to be remembered: if(wear_suit) var/obj/item/worn_item = wear_suit update_hud_wear_suit(worn_item) + + if(update_obscured) + update_obscured_slots(worn_item.flags_inv) + var/icon_file = DEFAULT_SUIT_FILE // SKYRAT EDIT ADDITION @@ -573,7 +616,7 @@ There are several things that need to be remembered: client.screen += r_store update_observer_view(r_store) -/mob/living/carbon/human/update_worn_mask() +/mob/living/carbon/human/update_worn_mask(update_obscured = TRUE) remove_overlay(FACEMASK_LAYER) var/obj/item/bodypart/head/my_head = get_bodypart(BODY_ZONE_HEAD) @@ -588,6 +631,9 @@ There are several things that need to be remembered: var/obj/item/worn_item = wear_mask update_hud_wear_mask(worn_item) + if(update_obscured) + update_obscured_slots(worn_item.flags_inv) + if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_MASK) return @@ -618,7 +664,7 @@ There are several things that need to be remembered: apply_overlay(FACEMASK_LAYER) update_mutant_bodyparts() //e.g. upgate needed because mask now hides lizard snout -/mob/living/carbon/human/update_worn_back() +/mob/living/carbon/human/update_worn_back(update_obscured = TRUE) remove_overlay(BACK_LAYER) if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BACK) + 1]) @@ -629,6 +675,10 @@ There are several things that need to be remembered: var/obj/item/worn_item = back var/mutable_appearance/back_overlay update_hud_back(worn_item) + + if(update_obscured) + update_obscured_slots(worn_item.flags_inv) + var/icon_file = 'icons/mob/clothing/back.dmi' // SKYRAT EDIT ADDITION diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 6cafa38164e..f0dadf5f818 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -69,9 +69,6 @@ return ..() -/mob/living/carbon/human/get_all_worn_items() - . = get_head_slots() | get_body_slots() - /mob/living/carbon/human/proc/get_body_slots() return list( back, @@ -136,15 +133,13 @@ if(ears) return ears = equipping - update_inv_ears() + update_worn_ears() if(ITEM_SLOT_EYES) if(glasses) return glasses = equipping if(glasses.glass_colour_type) update_glasses_color(glasses, 1) - if(glasses.tint) - update_tint() if(glasses.vision_flags || glasses.invis_override || glasses.invis_view || !isnull(glasses.lighting_cutoff)) update_sight() update_worn_glasses() @@ -171,8 +166,6 @@ wear_suit = equipping - if(equipping.flags_inv & HIDEJUMPSUIT) - update_worn_undersuit() if(wear_suit.breakouttime) //when equipping a straightjacket ADD_TRAIT(src, TRAIT_RESTRAINED, SUIT_TRAIT) stop_pulling() //can't pull if restrained @@ -216,6 +209,7 @@ . = ..() //See mob.dm for an explanation on this and some rage about people copypasting instead of calling ..() like they should. if(!. || !I) return + var/not_handled = FALSE //if we actually unequipped an item, this is because we dont want to run this proc twice, once for carbons and once for humans if(I == wear_suit) if(s_store && invdrop) dropItemToGround(s_store, TRUE) //It makes no sense for your suit storage to stay on you if you drop your suit. @@ -225,14 +219,6 @@ update_mob_action_buttons() //certain action buttons may be usable again. wear_suit = null if(!QDELETED(src)) //no need to update we're getting deleted anyway - if(I.flags_inv & HIDEJUMPSUIT) - update_worn_undersuit() - - // SKYRAT EDIT ADDITION START - ERP Overlays - if(I.flags_inv & HIDESEXTOY) - update_inv_lewd() - // SKYRAT EDIT ADDITION END - update_worn_oversuit() else if(I == w_uniform) w_uniform = null @@ -263,8 +249,6 @@ var/obj/item/clothing/glasses/G = I if(G.glass_colour_type) update_glasses_color(G, 0) - if(G.tint) - update_tint() if(G.vision_flags || G.invis_override || G.invis_view || !isnull(G.lighting_cutoff)) update_sight() if(!QDELETED(src)) @@ -272,7 +256,7 @@ else if(I == ears) ears = null if(!QDELETED(src)) - update_inv_ears() + update_worn_ears() else if(I == shoes) shoes = null if(!QDELETED(src)) @@ -298,13 +282,19 @@ s_store = null if(!QDELETED(src)) update_suit_storage() - - update_equipment_speed_mods() + else + not_handled = TRUE // Send a signal for when we unequip an item that used to cover our feet/shoes. Used for bloody feet if((I.body_parts_covered & FEET) || (I.flags_inv | I.transparent_protection) & HIDESHOES) SEND_SIGNAL(src, COMSIG_CARBON_UNEQUIP_SHOECOVER, I, force, newloc, no_move, invdrop, silent) + if(not_handled) + return + + update_equipment_speed_mods() + update_obscured_slots(I.flags_inv) + /mob/living/carbon/human/toggle_internals(obj/item/tank, is_external = FALSE) // Just close the tank if it's the one the mob already has open. var/obj/item/existing_tank = is_external ? external : internal @@ -316,8 +306,8 @@ // Use mask in absence of tube. if(isclothing(wear_mask) && ((wear_mask.visor_flags & MASKINTERNALS) || (wear_mask.clothing_flags & MASKINTERNALS))) // Adjust dishevelled breathing mask back onto face. - if (wear_mask.mask_adjusted) - wear_mask.adjustmask(src) + if (wear_mask.up) + wear_mask.adjust_visor(src) return toggle_open_internals(tank, is_external) // Use helmet in absence of tube or valid mask. if(can_breathe_helmet()) @@ -337,30 +327,6 @@ /mob/living/carbon/human/toggle_externals(obj/item/tank) return toggle_internals(tank, TRUE) -/mob/living/carbon/human/wear_mask_update(obj/item/I, toggle_off = 1) - if((I.flags_inv & (HIDEHAIR|HIDEFACIALHAIR)) || (initial(I.flags_inv) & (HIDEHAIR|HIDEFACIALHAIR))) - update_body_parts() - // Close internal air tank if mask was the only breathing apparatus. - if(invalid_internals()) - cutoff_internals() - if(I.flags_inv & HIDEEYES) - update_worn_glasses() - sec_hud_set_security_status() - ..() - -/mob/living/carbon/human/head_update(obj/item/I, forced) - if((I.flags_inv & (HIDEHAIR|HIDEFACIALHAIR)) || forced) - update_body_parts() - // Close internal air tank if helmet was the only breathing apparatus. - if (invalid_internals()) - cutoff_internals() - if(I.flags_inv & HIDEEYES || forced) - update_worn_glasses() - if(I.flags_inv & HIDEEARS || forced) - update_body() - sec_hud_set_security_status() - ..() - /mob/living/carbon/human/proc/equipOutfit(outfit, visualsOnly = FALSE) var/datum/outfit/O = null @@ -394,10 +360,10 @@ //delete all equipment without dropping anything /mob/living/carbon/human/proc/delete_equipment() - for(var/slot in get_all_worn_items())//order matters, dependant slots go first + for(var/slot in get_equipped_items(include_pockets = TRUE))//order matters, dependant slots go first qdel(slot) - for(var/obj/item/I in held_items) - qdel(I) + for(var/obj/item/held_item in held_items) + qdel(held_item) /// take the most recent item out of a slot or place held item in a slot diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index e0a24d0ab51..45ca4487184 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -39,16 +39,6 @@ return ..() -/mob/living/carbon/proc/get_all_worn_items() - return list( - back, - wear_mask, - wear_neck, - head, - handcuffed, - legcuffed, - ) - /// Returns items which are currently visible on the mob /mob/living/carbon/proc/get_visible_items() var/static/list/visible_slots = list( @@ -126,13 +116,13 @@ if(wear_mask) return wear_mask = equipping - wear_mask_update(equipping, toggle_off = 0) + update_worn_mask() if(ITEM_SLOT_HEAD) if(head) return head = equipping SEND_SIGNAL(src, COMSIG_CARBON_EQUIP_HAT, equipping) - head_update(equipping) + update_worn_head() if(ITEM_SLOT_NECK) if(wear_neck) return @@ -162,7 +152,7 @@ return not_handled /mob/living/carbon/get_equipped_speed_mod_items() - return ..() + get_all_worn_items() + return ..() + get_equipped_items() /// This proc is called after an item has been successfully handled and equipped to a slot. /mob/living/carbon/proc/has_equipped(obj/item/item, slot, initial = FALSE) @@ -173,11 +163,12 @@ if(!. || !I) //We don't want to set anything to null if the parent returned 0. return + var/not_handled = FALSE //if we actually unequipped an item, this is because we dont want to run this proc twice, once for carbons and once for humans if(I == head) head = null SEND_SIGNAL(src, COMSIG_CARBON_UNEQUIP_HAT, I, force, newloc, no_move, invdrop, silent) if(!QDELETED(src)) - head_update(I) + update_worn_head() else if(I == back) back = null if(!QDELETED(src)) @@ -185,8 +176,8 @@ else if(I == wear_mask) wear_mask = null if(!QDELETED(src)) - wear_mask_update(I, toggle_off = 1) - if(I == wear_neck) + update_worn_mask() + else if(I == wear_neck) wear_neck = null if(!QDELETED(src)) update_worn_neck(I) @@ -200,6 +191,8 @@ legcuffed = null if(!QDELETED(src)) update_worn_legcuffs() + else + not_handled = TRUE // Not an else-if because we're probably equipped in another slot if(I == internal && (QDELETED(src) || QDELETED(I) || I.loc != src)) @@ -207,7 +200,11 @@ if(!QDELETED(src)) update_mob_action_buttons(UPDATE_BUTTON_STATUS) + if(not_handled) + return + update_equipment_speed_mods() + update_obscured_slots(I.flags_inv) /// Returns TRUE if an air tank compatible helmet is equipped. /mob/living/carbon/proc/can_breathe_helmet() @@ -357,27 +354,6 @@ // Carbons can't open their own externals tanks. return FALSE -/// Handle stuff to update when a mob equips/unequips a mask. -/mob/living/proc/wear_mask_update(obj/item/I, toggle_off = 1) - update_worn_mask() - -/mob/living/carbon/wear_mask_update(obj/item/I, toggle_off = 1) - var/obj/item/clothing/C = I - if(istype(C) && (C.tint || initial(C.tint))) - update_tint() - update_worn_mask() - -/// Handle stuff to update when a mob equips/unequips a headgear. -/mob/living/carbon/proc/head_update(obj/item/I, forced) - if(isclothing(I)) - var/obj/item/clothing/C = I - if(C.tint || initial(C.tint)) - update_tint() - update_sight() - if(I.flags_inv & HIDEMASK || forced) - update_worn_mask() - update_worn_head() - /mob/living/carbon/proc/get_holding_bodypart_of_item(obj/item/I) var/index = get_held_index_of_item(I) return index && hand_bodyparts[index] @@ -475,7 +451,7 @@ SHOULD_NOT_OVERRIDE(TRUE) var/covered_flags = NONE - var/list/all_worn_items = get_all_worn_items() + var/list/all_worn_items = get_equipped_items() for(var/obj/item/worn_item in all_worn_items) covered_flags |= worn_item.body_parts_covered @@ -486,7 +462,7 @@ SHOULD_NOT_OVERRIDE(TRUE) var/covered_flags = NONE - var/list/all_worn_items = get_all_worn_items() + var/list/all_worn_items = get_equipped_items() for(var/obj/item/worn_item in all_worn_items) covered_flags |= worn_item.body_parts_covered diff --git a/code/modules/mob/living/init_signals.dm b/code/modules/mob/living/init_signals.dm index b8f1e60a612..2c390c540ce 100644 --- a/code/modules/mob/living/init_signals.dm +++ b/code/modules/mob/living/init_signals.dm @@ -98,7 +98,7 @@ SIGNAL_HANDLER mobility_flags &= ~MOBILITY_MOVE if(living_flags & MOVES_ON_ITS_OWN) - SSmove_manager.stop_looping(src) //stop mid walk //This is also really dumb + DSmove_manager.stop_looping(src) //stop mid walk //This is also really dumb /// Called when [TRAIT_IMMOBILIZED] is removed from the mob. /mob/living/proc/on_immobilized_trait_loss(datum/source) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index e37981d038a..cdbbd31abf5 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -697,7 +697,9 @@ /mob/living/proc/get_up(instant = FALSE) set waitfor = FALSE - var/get_up_speed = GET_UP_FAST //SKYRAT EDIT CHANGE : if(!instant && !do_after(src, 1 SECONDS, src, timed_action_flags = (IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE|IGNORE_HELD_ITEM), extra_checks = CALLBACK(src, TYPE_PROC_REF(/mob/living, rest_checks_callback)), interaction_key = DOAFTER_SOURCE_GETTING_UP)) + // if(!instant && !do_after(src, 1 SECONDS, src, timed_action_flags = (IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE|IGNORE_HELD_ITEM), extra_checks = CALLBACK(src, TYPE_PROC_REF(/mob/living, rest_checks_callback)), interaction_key = DOAFTER_SOURCE_GETTING_UP, hidden = TRUE)) // SKYRAT EDIT REMOVAL + // SKYRAT EDIT ADDITION START + var/get_up_speed = GET_UP_FAST var/stam = getStaminaLoss() switch(FLOOR(stam,1)) if(STAMINA_THRESHOLD_MEDIUM_GET_UP to STAMINA_THRESHOLD_SLOW_GET_UP) @@ -706,20 +708,21 @@ get_up_speed = GET_UP_SLOW if(!instant) if(get_up_speed == GET_UP_SLOW) //Slow getups are easily noticable - visible_message(span_notice("[src] weakily attempts to stand up."), span_notice("You weakily attempt to stand up.")) - if(!do_after(src, get_up_speed SECONDS, src, timed_action_flags = (IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE|IGNORE_HELD_ITEM), extra_checks = CALLBACK(src, /mob/living/proc/rest_checks_callback), interaction_key = DOAFTER_SOURCE_GETTING_UP)) + visible_message(span_notice("[src] weakly attempts to stand up."), span_notice("You weakly attempt to stand up.")) + if(!do_after(src, 1 SECONDS, src, timed_action_flags = (IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE|IGNORE_HELD_ITEM), extra_checks = CALLBACK(src, TYPE_PROC_REF(/mob/living, rest_checks_callback)), interaction_key = DOAFTER_SOURCE_GETTING_UP, hidden = TRUE)) if(!body_position == STANDING_UP) visible_message(span_warning("[src] fails to stand up."), span_warning("You fail to stand up.")) return else - if(!do_after(src, get_up_speed SECONDS, src, timed_action_flags = (IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE|IGNORE_HELD_ITEM), extra_checks = CALLBACK(src, /mob/living/proc/rest_checks_callback), interaction_key = DOAFTER_SOURCE_GETTING_UP)) + if(!do_after(src, 1 SECONDS, src, timed_action_flags = (IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE|IGNORE_HELD_ITEM), extra_checks = CALLBACK(src, TYPE_PROC_REF(/mob/living, rest_checks_callback)), interaction_key = DOAFTER_SOURCE_GETTING_UP, hidden = TRUE)) return if(pulledby && pulledby.grab_state) - to_chat(src, span_warning("You fail to stand up, you're restrained!")) //SKYRAT EDIT ADDITION END + to_chat(src, span_warning("You fail to stand up, you're restrained!")) + // NOVA EDIT ADDITION END return if(resting || body_position == STANDING_UP || HAS_TRAIT(src, TRAIT_FLOORED)) return - to_chat(src, span_notice("You stand up.")) //SKYRAT EDIT ADDITION + to_chat(src, span_notice("You stand up.")) // SKYRAT EDIT ADDITION set_body_position(STANDING_UP) set_lying_angle(0) @@ -1396,7 +1399,8 @@ if(!Adjacent(target) && (target.loc != src) && !recursive_loc_check(src, target)) if(HAS_SILICON_ACCESS(src) && !ispAI(src)) if(!(action_bitflags & ALLOW_SILICON_REACH)) // silicons can ignore range checks (except pAIs) - to_chat(src, span_warning("You are too far away!")) + if(!(action_bitflags & SILENT_ADJACENCY)) + to_chat(src, span_warning("You are too far away!")) return FALSE else // just a normal carbon mob if((action_bitflags & FORBID_TELEKINESIS_REACH)) @@ -1888,7 +1892,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) user.put_in_hands(holder) /mob/living/proc/set_name() - if(!numba) + if(numba == 0) numba = rand(1, 1000) name = "[name] ([numba])" real_name = name diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 52e4f9304be..7e13fb2375d 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -421,7 +421,7 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( var/mob/living/carbon/human/human_speaker = src if(istype(human_speaker.wear_mask, /obj/item/clothing/mask)) var/obj/item/clothing/mask/worn_mask = human_speaker.wear_mask - if(!worn_mask.mask_adjusted) + if(!worn_mask.up) if(worn_mask.voice_override) voice_to_use = worn_mask.voice_override if(worn_mask.voice_filter) diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 2a9631339fc..0f1cbfa65a5 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -18,7 +18,7 @@ /mob/living/silicon/robot/proc/use_energy(seconds_per_tick, times_fired) if(cell?.charge) - if(cell.charge <= (10 KILO JOULES)) + if(cell.charge <= 0.01 * STANDARD_CELL_CHARGE) drop_all_held_items() var/energy_consumption = max(lamp_power_consumption * lamp_enabled * lamp_intensity * seconds_per_tick, BORG_MINIMUM_POWER_CONSUMPTION * seconds_per_tick) //Lamp will use a max of 5 * [BORG_LAMP_POWER_CONSUMPTION], depending on brightness of lamp. If lamp is off, borg systems consume [BORG_MINIMUM_POWER_CONSUMPTION], or the rest of the cell if it's lower than that. cell.use(energy_consumption, force = TRUE) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 9272e63e7ff..799d603996d 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -234,7 +234,7 @@ if(!ionpulse_on) return - if(!cell.use(10 KILO JOULES)) + if(!cell.use(0.01 * STANDARD_CELL_CHARGE)) toggle_ionpulse() return return TRUE diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index a737de7f99e..54d3377dd38 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -386,9 +386,11 @@ /obj/item/pipe_dispenser, /obj/item/extinguisher, /obj/item/weldingtool/largetank/cyborg, - /obj/item/screwdriver/cyborg/power, // Skyrat Removal/Edit - Combines Screwdriver and Wrench into one - /obj/item/crowbar/cyborg/power, // Skyrat Removal/Edit - Combines Crowbar and Wirecutters into one - /obj/item/multitool/cyborg, + /obj/item/screwdriver/cyborg/power, // Skyrat ADDITION - Combines Screwdriver and Wrench into one + /obj/item/crowbar/cyborg/power, // Skyrat ADDITION - Combines Crowbar and Wirecutters into one + /obj/item/multitool/cyborg, //Skyrat ADDITION - Adds multitool for easier access + /obj/item/borg/cyborg_omnitool/engineering, + ///obj/item/borg/cyborg_omnitool/engineering, //Skyrat REMOVAL /obj/item/t_scanner, /obj/item/analyzer, /obj/item/holosign_creator/atmos, // Skyrat Edit - Adds Holofans to engineering borgos @@ -681,14 +683,8 @@ /obj/item/borg/apparatus/beaker, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, - /obj/item/surgical_drapes, - /obj/item/retractor, - /obj/item/hemostat, - /obj/item/cautery, - /obj/item/surgicaldrill, - /obj/item/scalpel, - /obj/item/circular_saw, - /obj/item/bonesetter, + /obj/item/borg/cyborg_omnitool/medical, + /obj/item/borg/cyborg_omnitool/medical, /obj/item/blood_filter, /obj/item/extinguisher/mini, /obj/item/emergency_bed/silicon, @@ -889,15 +885,10 @@ /obj/item/reagent_containers/borghypo/syndicate, /obj/item/shockpaddles/syndicate/cyborg, /obj/item/healthanalyzer, - /obj/item/surgical_drapes, - /obj/item/retractor, - /obj/item/hemostat, - /obj/item/cautery, - /obj/item/surgicaldrill, - /obj/item/scalpel, - /obj/item/melee/energy/sword/cyborg/saw, - /obj/item/bonesetter, + /obj/item/borg/cyborg_omnitool/medical, + /obj/item/borg/cyborg_omnitool/medical, /obj/item/blood_filter, + /obj/item/melee/energy/sword/cyborg/saw, /obj/item/emergency_bed/silicon, /obj/item/crowbar/cyborg, /obj/item/extinguisher/mini, @@ -922,12 +913,9 @@ /obj/item/restraints/handcuffs/cable/zipties, /obj/item/extinguisher, /obj/item/weldingtool/largetank/cyborg, - /obj/item/screwdriver/nuke, - /obj/item/wrench/cyborg, - /obj/item/crowbar/cyborg, - /obj/item/wirecutters/cyborg, /obj/item/analyzer, - /obj/item/multitool/cyborg, + /obj/item/borg/cyborg_omnitool/engineering, + /obj/item/borg/cyborg_omnitool/engineering, /obj/item/stack/sheet/iron, /obj/item/stack/sheet/glass, /obj/item/borg/apparatus/sheet_manipulator, diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index fb201faeeee..4fbd1b55234 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -306,7 +306,7 @@ ///Gives you a link-driven interface for deciding what laws the statelaws() proc will share with the crew. /mob/living/silicon/proc/checklaws() laws_sanity_check() - var/list = "Which laws do you want to include when stating them for the crew?

    " + var/list = "Which laws do you want to include when stating them for the crew?

    " var/law_display = "Yes" if (laws.zeroth) diff --git a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm index a0c9a964fb3..6d85b9c1867 100644 --- a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm +++ b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm @@ -71,7 +71,7 @@ switch(mode) if(BOT_IDLE) // idle update_appearance() - SSmove_manager.stop_looping(src) + DSmove_manager.stop_looping(src) look_for_perp() // see if any criminals are in range if(!mode && bot_mode_flags & BOT_MODE_AUTOPATROL) // still idle, and set to patrol mode = BOT_START_PATROL // switch to patrol mode @@ -80,7 +80,7 @@ playsound(src,'sound/effects/beepskyspinsabre.ogg',100,TRUE,-1) // general beepsky doesn't give up so easily, jedi scum if(frustration >= 20) - SSmove_manager.stop_looping(src) + DSmove_manager.stop_looping(src) back_to_idle() return if(target) // make sure target exists @@ -91,7 +91,7 @@ return else // not next to perp var/turf/olddist = get_dist(src, target) - SSmove_manager.move_to(src, target, 1, 4) + DSmove_manager.move_to(src, target, 1, 4) if((get_dist(src, target)) >= (olddist)) frustration++ else diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index ec204dbc82b..944a00af9b6 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -204,6 +204,7 @@ pa_system = new(src, automated_announcements = automated_announcements) pa_system.Grant(src) + RegisterSignal(src, COMSIG_MOB_TRIED_ACCESS, PROC_REF(attempt_access)) /mob/living/simple_animal/bot/Destroy() GLOB.bots_list -= src @@ -951,13 +952,13 @@ Pass a positive integer as an argument to override a bot's default speed. calc_summon_path() tries = 0 -/mob/living/simple_animal/bot/Bump(atom/A) //Leave no door unopened! - . = ..() - if((istype(A, /obj/machinery/door/airlock) || istype(A, /obj/machinery/door/window)) && (!isnull(access_card))) - var/obj/machinery/door/D = A - if(D.check_access(access_card)) - D.open() - frustration = 0 +/mob/living/simple_animal/bot/proc/attempt_access(mob/bot, obj/door_attempt) + SIGNAL_HANDLER + + if(door_attempt.check_access(access_card)) + frustration = 0 + return ACCESS_ALLOWED + return ACCESS_DISALLOWED /mob/living/simple_animal/bot/ui_data(mob/user) var/list/data = list() diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 45c9802a8f3..8c933e8f83a 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -164,7 +164,7 @@ target = null oldtarget_name = null set_anchored(FALSE) - SSmove_manager.stop_looping(src) + DSmove_manager.stop_looping(src) last_found = world.time /mob/living/simple_animal/bot/secbot/proc/on_saboteur(datum/source, disrupt_duration) @@ -389,7 +389,7 @@ switch(mode) if(BOT_IDLE) // idle - SSmove_manager.stop_looping(src) + DSmove_manager.stop_looping(src) look_for_perp() // see if any criminals are in range if((mode == BOT_IDLE) && bot_mode_flags & BOT_MODE_AUTOPATROL) // didn't start hunting during look_for_perp, and set to patrol mode = BOT_START_PATROL // switch to patrol mode @@ -397,7 +397,7 @@ if(BOT_HUNT) // hunting for perp // if can't reach perp for long enough, go idle if(frustration >= 8) - SSmove_manager.stop_looping(src) + DSmove_manager.stop_looping(src) back_to_idle() return @@ -415,7 +415,7 @@ // not next to perp var/turf/olddist = get_dist(src, target) - SSmove_manager.move_to(src, target, 1, 4) + DSmove_manager.move_to(src, target, 1, 4) if((get_dist(src, target)) >= (olddist)) frustration++ else diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 3ff8f04fb92..86fc82d77e0 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -104,7 +104,7 @@ /mob/living/simple_animal/hostile/Life(seconds_per_tick = SSMOBS_DT, times_fired) . = ..() if(!.) //dead - SSmove_manager.stop_looping(src) + DSmove_manager.stop_looping(src) /mob/living/simple_animal/hostile/handle_automated_action() if(AIStatus == AI_OFF || QDELETED(src)) @@ -339,11 +339,11 @@ if(!target.Adjacent(target_from) && ranged_cooldown <= world.time) //But make sure they're not in range for a melee attack and our range attack is off cooldown OpenFire(target) if(!Process_Spacemove(0)) //Drifting - SSmove_manager.stop_looping(src) + DSmove_manager.stop_looping(src) return 1 if(retreat_distance != null) //If we have a retreat distance, check if we need to run from our target if(target_distance <= retreat_distance) //If target's closer than our retreat distance, run - SSmove_manager.move_away(src, target, retreat_distance, move_to_delay, flags = MOVEMENT_LOOP_IGNORE_GLIDE) + DSmove_manager.move_away(src, target, retreat_distance, move_to_delay, flags = MOVEMENT_LOOP_IGNORE_GLIDE) else Goto(target,move_to_delay,minimum_distance) //Otherwise, get to our minimum distance so we chase them else @@ -378,7 +378,7 @@ approaching_target = TRUE else approaching_target = FALSE - SSmove_manager.move_to(src, target, minimum_distance, delay, flags = MOVEMENT_LOOP_IGNORE_GLIDE) + DSmove_manager.move_to(src, target, minimum_distance, delay, flags = MOVEMENT_LOOP_IGNORE_GLIDE) return TRUE /mob/living/simple_animal/hostile/adjustHealth(amount, updating_health = TRUE, forced = FALSE) @@ -418,7 +418,7 @@ GiveTarget(null) approaching_target = FALSE in_melee = FALSE - SSmove_manager.stop_looping(src) + DSmove_manager.stop_looping(src) LoseAggro() SEND_SIGNAL(src, COMSIG_HOSTILE_MOB_LOST_TARGET) // SKYRAT EDIT ADDITION diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 40f7f3abd0d..414cf97eab2 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -330,7 +330,7 @@ . = ..() if(!.) return FALSE - + for(var/atom/thing as anything in range(1, src)) if(isturf(thing)) new /obj/effect/decal/cleanable/confetti(thing) @@ -340,7 +340,7 @@ continue var/mob/living/carbon/human/new_clown = thing - + if(new_clown.stat != DEAD) continue @@ -349,12 +349,12 @@ var/clown_ref = REF(new_clown) if(clown_ref in clowned_mob_refs) //one clowning per person continue - + for(var/obj/item/to_strip in new_clown.get_equipped_items()) new_clown.dropItemToGround(to_strip) new_clown.dress_up_as_job(SSjob.GetJobType(/datum/job/clown)) clowned_mob_refs += clown_ref - + return TRUE /// Transforms the area to look like a new one @@ -370,7 +370,7 @@ /obj/machinery/anomalous_crystal/theme_warp/Initialize(mapload) . = ..() - terrain_theme = SSmaterials.dimensional_themes[pick(subtypesof(/datum/dimension_theme))] + terrain_theme = DSmaterials.dimensional_themes[pick(subtypesof(/datum/dimension_theme))] observer_desc = "This crystal changes the area around it to match the theme of \"[terrain_theme.name]\"." /obj/machinery/anomalous_crystal/theme_warp/ActivationReaction(mob/user, method) @@ -423,18 +423,18 @@ if(!ishuman(thing)) continue - + var/mob/living/carbon/human/to_revive = thing - + if(to_revive.stat != DEAD) continue - + to_revive.set_species(/datum/species/shadow, TRUE) to_revive.revive(ADMIN_HEAL_ALL, force_grab_ghost = TRUE) //Free revives, but significantly limits your options for reviving except via the crystal //except JK who cares about BADDNA anymore. this even heals suicides. ADD_TRAIT(to_revive, TRAIT_BADDNA, MAGIC_TRAIT) - + return TRUE /obj/machinery/anomalous_crystal/helpers //Lets ghost spawn as helpful creatures that can only heal people slightly. Incredibly fragile and they can't converse with humans diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm index 3a838ac58cd..b2555309f8a 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm @@ -45,7 +45,7 @@ /mob/living/simple_animal/hostile/asteroid/curseblob/proc/move_loop(move_target, delay) if(our_loop) return - our_loop = SSmove_manager.force_move(src, move_target, delay, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + our_loop = DSmove_manager.force_move(src, move_target, delay, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) if(!our_loop) return RegisterSignal(move_target, COMSIG_MOB_STATCHANGE, PROC_REF(stat_change)) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 47d3ddcf20f..4cfe68b2b96 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -539,7 +539,7 @@ /mob/living/simple_animal/proc/Goto(target, delay, minimum_distance) if(prevent_goto_movement) return FALSE - SSmove_manager.move_to(src, target, minimum_distance, delay) + DSmove_manager.move_to(src, target, minimum_distance, delay) return TRUE //Makes this mob hunt the prey, be it living or an object. Will kill living creatures, and delete objects. diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index ceff6e95658..35ef05ec40f 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -315,7 +315,7 @@ if(rebound.last_pushoff == world.time) continue if(continuous_move && !pass_allowed) - var/datum/move_loop/move/rebound_engine = SSmove_manager.processing_on(rebound, SSspacedrift) + var/datum/move_loop/move/rebound_engine = DSmove_manager.processing_on(rebound, SSspacedrift) // If you're moving toward it and you're both going the same direction, stop if(moving_direction == get_dir(src, pushover) && rebound_engine && moving_direction == rebound_engine.direction) continue @@ -545,7 +545,7 @@ to_chat(src, span_warning("You are not Superman.")) return balloon_alert(src, "moving up...") - if(!do_after(src, 1 SECONDS)) + if(!do_after(src, 1 SECONDS, hidden = TRUE)) return if(zMove(UP, z_move_flags = ZMOVE_FLIGHT_FLAGS|ZMOVE_FEEDBACK|ventcrawling_flag)) to_chat(src, span_notice("You move upwards.")) @@ -571,7 +571,7 @@ var/ventcrawling_flag = HAS_TRAIT(src, TRAIT_MOVE_VENTCRAWLING) ? ZMOVE_VENTCRAWLING : 0 balloon_alert(src, "moving down...") - if(!do_after(src, 1 SECONDS)) + if(!do_after(src, 1 SECONDS, hidden = TRUE)) return if(zMove(DOWN, z_move_flags = ZMOVE_FLIGHT_FLAGS|ZMOVE_FEEDBACK|ventcrawling_flag)) to_chat(src, span_notice("You move down.")) diff --git a/code/modules/mob/mob_update_icons.dm b/code/modules/mob/mob_update_icons.dm index b8b84f8782a..a355a385d9f 100644 --- a/code/modules/mob/mob_update_icons.dm +++ b/code/modules/mob/mob_update_icons.dm @@ -7,21 +7,75 @@ ///Updates every item slot passed into it. /mob/proc/update_clothing(slot_flags) - return + if(slot_flags & ITEM_SLOT_BACK) + update_worn_back() + if(slot_flags & ITEM_SLOT_MASK) + update_worn_mask() + if(slot_flags & ITEM_SLOT_NECK) + update_worn_neck() + if(slot_flags & ITEM_SLOT_HANDCUFFED) + update_worn_handcuffs() + if(slot_flags & ITEM_SLOT_LEGCUFFED) + update_worn_legcuffs() + if(slot_flags & ITEM_SLOT_BELT) + update_worn_belt() + if(slot_flags & ITEM_SLOT_ID) + update_worn_id() + if(slot_flags & ITEM_SLOT_EARS) + update_worn_ears() + if(slot_flags & ITEM_SLOT_EYES) + update_worn_glasses() + if(slot_flags & ITEM_SLOT_GLOVES) + update_worn_gloves() + if(slot_flags & ITEM_SLOT_HEAD) + update_worn_head() + if(slot_flags & ITEM_SLOT_FEET) + update_worn_shoes() + if(slot_flags & ITEM_SLOT_OCLOTHING) + update_worn_oversuit() + if(slot_flags & ITEM_SLOT_ICLOTHING) + update_worn_undersuit() + if(slot_flags & ITEM_SLOT_SUITSTORE) + update_suit_storage() + if(slot_flags & (ITEM_SLOT_LPOCKET|ITEM_SLOT_RPOCKET)) + update_pockets() + if(slot_flags & ITEM_SLOT_HANDS) + update_held_items() + +///Updates item slots obscured by this item (or using an override of flags to check) +/mob/proc/update_obscured_slots(obscured_flags) + if(obscured_flags & HIDEGLOVES) + update_worn_gloves(update_obscured = FALSE) + if(obscured_flags & HIDESUITSTORAGE) + update_suit_storage(update_obscured = FALSE) + if(obscured_flags & HIDEJUMPSUIT) + update_worn_undersuit(update_obscured = FALSE) + if(obscured_flags & HIDESHOES) + update_worn_shoes(update_obscured = FALSE) + if(obscured_flags & HIDEMASK) + update_worn_mask(update_obscured = FALSE) + if(obscured_flags & HIDEEARS) + update_worn_ears(update_obscured = FALSE) + if(obscured_flags & HIDEEYES) + update_worn_glasses(update_obscured = FALSE) + if(obscured_flags & HIDENECK) + update_worn_neck(update_obscured = FALSE) + if(obscured_flags & HIDEHEADGEAR) + update_worn_head(update_obscured = FALSE) /mob/proc/update_icons() return ///Updates the handcuff overlay & HUD element. -/mob/proc/update_worn_handcuffs() +/mob/proc/update_worn_handcuffs(update_obscured = FALSE) return ///Updates the legcuff overlay & HUD element. -/mob/proc/update_worn_legcuffs() +/mob/proc/update_worn_legcuffs(update_obscured = FALSE) return ///Updates the back overlay & HUD element. -/mob/proc/update_worn_back() +/mob/proc/update_worn_back(update_obscured = FALSE) return ///Updates the held items overlay(s) & HUD element. @@ -30,27 +84,27 @@ SEND_SIGNAL(src, COMSIG_MOB_UPDATE_HELD_ITEMS) ///Updates the mask overlay & HUD element. -/mob/proc/update_worn_mask() +/mob/proc/update_worn_mask(update_obscured = FALSE) return ///Updates the neck overlay & HUD element. -/mob/proc/update_worn_neck() +/mob/proc/update_worn_neck(update_obscured = FALSE) return ///Updates the oversuit overlay & HUD element. -/mob/proc/update_worn_oversuit() +/mob/proc/update_worn_oversuit(update_obscured = FALSE) return ///Updates the undersuit/uniform overlay & HUD element. -/mob/proc/update_worn_undersuit() +/mob/proc/update_worn_undersuit(update_obscured = FALSE) return ///Updates the belt overlay & HUD element. -/mob/proc/update_worn_belt() +/mob/proc/update_worn_belt(update_obscured = FALSE) return ///Updates the on-head overlay & HUD element. -/mob/proc/update_worn_head() +/mob/proc/update_worn_head(update_obscured = FALSE) return ///Updates every part of a carbon's body. Including parts, mutant parts, lips, underwear, and socks. @@ -61,29 +115,29 @@ return ///Updates the glasses overlay & HUD element. -/mob/proc/update_worn_glasses() +/mob/proc/update_worn_glasses(update_obscured = FALSE) return ///Updates the id overlay & HUD element. -/mob/proc/update_worn_id() +/mob/proc/update_worn_id(update_obscured = FALSE) return ///Updates the shoes overlay & HUD element. -/mob/proc/update_worn_shoes() +/mob/proc/update_worn_shoes(update_obscured = FALSE) return ///Updates the glasses overlay & HUD element. -/mob/proc/update_worn_gloves() +/mob/proc/update_worn_gloves(update_obscured = FALSE) return -///Updates the handcuff overlay & HUD element. -/mob/proc/update_suit_storage() +///Updates the suit storage overlay & HUD element. +/mob/proc/update_suit_storage(update_obscured = FALSE) return -///Updates the handcuff overlay & HUD element. +///Updates the pocket overlay & HUD element. /mob/proc/update_pockets() return -///Updates the handcuff overlay & HUD element. -/mob/proc/update_inv_ears() +///Updates the headset overlay & HUD element. +/mob/proc/update_worn_ears(update_obscured = FALSE) return diff --git a/code/modules/mod/mod_activation.dm b/code/modules/mod/mod_activation.dm index 7d698aa5a75..303d556843e 100644 --- a/code/modules/mod/mod_activation.dm +++ b/code/modules/mod/mod_activation.dm @@ -169,23 +169,23 @@ if (ai_assistant) to_chat(ai_assistant, span_notice("MODsuit [active ? "shutting down" : "starting up"].")) - if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)))) + if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)), hidden = TRUE)) to_chat(wearer, span_notice("[boots] [active ? "relax their grip on your legs" : "seal around your feet"].")) playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) seal_part(boots, seal = !active) - if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)))) + if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)), hidden = TRUE)) to_chat(wearer, span_notice("[gauntlets] [active ? "become loose around your fingers" : "tighten around your fingers and wrists"].")) playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) seal_part(gauntlets, seal = !active) - if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)))) + if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)), hidden = TRUE)) to_chat(wearer, span_notice("[chestplate] [active ? "releases your chest" : "cinches tightly against your chest"].")) playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) seal_part(chestplate, seal = !active) - if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)))) + if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)), hidden = TRUE)) to_chat(wearer, span_notice("[helmet] hisses [active ? "open" : "closed"].")) playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) seal_part(helmet, seal = !active) - if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)))) + if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)), hidden = TRUE)) to_chat(wearer, span_notice("Systems [active ? "shut down. Parts unsealed. Goodbye" : "started up. Parts sealed. Welcome"], [wearer].")) if(ai_assistant) to_chat(ai_assistant, span_notice("SYSTEMS [active ? "DEACTIVATED. GOODBYE" : "ACTIVATED. WELCOME"]: \"[ai_assistant]\"")) @@ -218,21 +218,10 @@ part.heat_protection = NONE part.cold_protection = NONE part.alternate_worn_layer = mod_parts[part] - if(part == boots) - wearer.update_worn_shoes() - if(part == gauntlets) - wearer.update_worn_gloves() - if(part == chestplate) - wearer.update_worn_oversuit() - wearer.update_worn_undersuit() - if(part == helmet) - wearer.update_worn_head() - wearer.update_worn_mask() - wearer.update_worn_glasses() - wearer.update_body_parts() - // Close internal air tank if MOD helmet is unsealed and was the only breathing apparatus. - if (!seal && wearer?.invalid_internals()) - wearer.cutoff_internals() + wearer.update_clothing(part.slot_flags) + wearer.update_obscured_slots(part.visor_flags_inv) + if((part.clothing_flags & (MASKINTERNALS|HEADINTERNALS)) && wearer.invalid_internals()) + wearer.cutoff_internals() /// Finishes the suit's activation /obj/item/mod/control/proc/finish_activation(on) diff --git a/code/modules/mod/mod_link.dm b/code/modules/mod/mod_link.dm index c3d5040c815..eab60af15df 100644 --- a/code/modules/mod/mod_link.dm +++ b/code/modules/mod/mod_link.dm @@ -203,7 +203,7 @@ /obj/item/clothing/neck/link_scryer/process(seconds_per_tick) if(!mod_link.link_call) return - cell.use(20 KILO WATTS * seconds_per_tick, force = TRUE) + cell.use(0.02 * STANDARD_CELL_RATE * seconds_per_tick, force = TRUE) /obj/item/clothing/neck/link_scryer/attackby(obj/item/attacked_by, mob/user, params) . = ..() diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index 2aec3e361c4..adbcc2064f8 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -834,7 +834,7 @@ . = ..() if(!length(accepted_mats)) - accepted_mats = SSmaterials.materials_by_category[MAT_CATEGORY_SILO] + accepted_mats = DSmaterials.materials_by_category[MAT_CATEGORY_SILO] container = AddComponent( \ /datum/component/material_container, \ diff --git a/code/modules/mod/modules/modules_medical.dm b/code/modules/mod/modules/modules_medical.dm index 6068b18fe10..0e04de51c86 100644 --- a/code/modules/mod/modules/modules_medical.dm +++ b/code/modules/mod/modules/modules_medical.dm @@ -328,7 +328,7 @@ balloon_alert(mod.wearer, "interrupted!") return var/target_zones = body_zone2cover_flags(mod.wearer.zone_selected) - for(var/obj/item/clothing as anything in carbon_target.get_all_worn_items()) + for(var/obj/item/clothing as anything in carbon_target.get_equipped_items()) if(!clothing) continue var/shared_flags = target_zones & clothing.body_parts_covered diff --git a/code/modules/mod/modules/modules_ninja.dm b/code/modules/mod/modules/modules_ninja.dm index 868b4a79500..d52a5e1fb4c 100644 --- a/code/modules/mod/modules/modules_ninja.dm +++ b/code/modules/mod/modules/modules_ninja.dm @@ -133,10 +133,6 @@ icon_state = "hacker" removable = FALSE incompatible_modules = list(/obj/item/mod/module/hacker) - /// Minimum amount of energy we can drain in a single drain action - var/mindrain = 200 KILO JOULES - /// Maximum amount of energy we can drain in a single drain action - var/maxdrain = 400 KILO JOULES /// Whether or not the communication console hack was used to summon another antagonist. var/communication_console_hack_success = FALSE /// How many times the module has been used to force open doors. diff --git a/code/modules/modular_computers/file_system/programs/techweb.dm b/code/modules/modular_computers/file_system/programs/techweb.dm index a72eef1bc9a..2103e0d4a22 100644 --- a/code/modules/modular_computers/file_system/programs/techweb.dm +++ b/code/modules/modular_computers/file_system/programs/techweb.dm @@ -218,7 +218,7 @@ logname = "[id_card_of_human_user.registered_name]" stored_research.research_logs += list(list( "node_name" = tech_node.display_name, - "node_cost" = price["General Research"], + "node_cost" = price[TECHWEB_POINT_TYPE_GENERIC], "node_researcher" = logname, "node_research_location" = "[get_area(computer)] ([user.x],[user.y],[user.z])", )) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index e1bddd6feff..605e88f1e48 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -30,7 +30,7 @@ grind_results = list(/datum/reagent/cellulose = 3) color = COLOR_WHITE item_flags = SKIP_FANTASY_ON_SPAWN - interaction_flags_click = NEED_DEXTERITY|NEED_HANDS + interaction_flags_click = NEED_DEXTERITY|NEED_HANDS|ALLOW_RESTING /// Lazylist of raw, unsanitised, unparsed text inputs that have been made to the paper. var/list/datum/paper_input/raw_text_inputs diff --git a/code/modules/plumbing/plumbers/_plumb_machinery.dm b/code/modules/plumbing/plumbers/_plumb_machinery.dm index 8baf59508b8..e3f9486bee9 100644 --- a/code/modules/plumbing/plumbers/_plumb_machinery.dm +++ b/code/modules/plumbing/plumbers/_plumb_machinery.dm @@ -8,7 +8,8 @@ icon = 'icons/obj/pipes_n_cables/hydrochem/plumbers.dmi' icon_state = "pump" density = TRUE - idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 7.5 + processing_flags = START_PROCESSING_MANUALLY + active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 2.75 resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF ///Plumbing machinery is always gonna need reagents, so we might aswell put it here var/buffer = 50 @@ -26,11 +27,17 @@ . = ..() . += span_notice("The maximum volume display reads: [reagents.maximum_volume] units.") - /obj/machinery/plumbing/wrench_act(mob/living/user, obj/item/tool) - . = ..() - default_unfasten_wrench(user, tool) - return ITEM_INTERACT_SUCCESS + if(user.combat_mode) + return NONE + + . = ITEM_INTERACT_BLOCKING + if(default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN) + if(anchored) + begin_processing() + else + end_processing() + return ITEM_INTERACT_SUCCESS /obj/machinery/plumbing/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) user.balloon_alert_to_viewers("furiously plunging...") diff --git a/code/modules/plumbing/plumbers/acclimator.dm b/code/modules/plumbing/plumbers/acclimator.dm index 79b525d3504..014ff849901 100644 --- a/code/modules/plumbing/plumbers/acclimator.dm +++ b/code/modules/plumbing/plumbers/acclimator.dm @@ -14,7 +14,6 @@ icon_state = "acclimator" base_icon_state = "acclimator" buffer = 200 - active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 2 ///towards wich temperature do we build? var/target_temperature = 300 @@ -32,7 +31,7 @@ AddComponent(/datum/component/plumbing/acclimator, bolt, layer) /obj/machinery/plumbing/acclimator/process(seconds_per_tick) - if(machine_stat & NOPOWER || !enabled || !reagents.total_volume || reagents.chem_temp == target_temperature) + if(!is_operational || !enabled || !reagents.total_volume || reagents.chem_temp == target_temperature) if(acclimate_state != NEUTRAL) acclimate_state = NEUTRAL update_appearance() diff --git a/code/modules/plumbing/plumbers/bottler.dm b/code/modules/plumbing/plumbers/bottler.dm index 1acbed37a74..5f63a3070bd 100644 --- a/code/modules/plumbing/plumbers/bottler.dm +++ b/code/modules/plumbing/plumbers/bottler.dm @@ -4,10 +4,8 @@ icon_state = "bottler" layer = ABOVE_ALL_MOB_LAYER plane = ABOVE_GAME_PLANE - reagent_flags = TRANSPARENT | DRAINABLE buffer = 100 - active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 2 ///how much do we fill var/wanted_amount = 10 @@ -71,7 +69,7 @@ to_chat(user, span_notice(" The [src] will now fill for [wanted_amount]u.")) /obj/machinery/plumbing/bottler/process(seconds_per_tick) - if(machine_stat & NOPOWER) + if(!is_operational) return // Sanity check the result locations and stop processing if they don't exist if(goodspot == null || badspot == null || inputspot == null) diff --git a/code/modules/plumbing/plumbers/destroyer.dm b/code/modules/plumbing/plumbers/destroyer.dm index 5f81e24eaf2..503b3e76223 100644 --- a/code/modules/plumbing/plumbers/destroyer.dm +++ b/code/modules/plumbing/plumbers/destroyer.dm @@ -3,7 +3,6 @@ desc = "Breaks down chemicals and annihilates them." icon_state = "disposal" pass_flags_self = PASSMACHINE | LETPASSTHROW // Small - active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 2 ///we remove 5 reagents per second var/disposal_rate = 5 @@ -13,7 +12,7 @@ AddComponent(/datum/component/plumbing/simple_demand, bolt, layer) /obj/machinery/plumbing/disposer/process(seconds_per_tick) - if(machine_stat & NOPOWER) + if(!is_operational) return if(reagents.total_volume) if(icon_state != initial(icon_state) + "_working") //threw it here instead of update icon since it only has two states diff --git a/code/modules/plumbing/plumbers/fermenter.dm b/code/modules/plumbing/plumbers/fermenter.dm index 8800029779d..ac421bce740 100644 --- a/code/modules/plumbing/plumbers/fermenter.dm +++ b/code/modules/plumbing/plumbers/fermenter.dm @@ -6,7 +6,6 @@ plane = ABOVE_GAME_PLANE reagent_flags = TRANSPARENT | DRAINABLE buffer = 400 - active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 2 ///input dir var/eat_dir = SOUTH @@ -36,7 +35,7 @@ /// uses fermentation proc similar to fermentation barrels /obj/machinery/plumbing/fermenter/proc/ferment(atom/AM) - if(machine_stat & NOPOWER) + if(!is_operational) return if(reagents.holder_full()) return diff --git a/code/modules/plumbing/plumbers/grinder_chemical.dm b/code/modules/plumbing/plumbers/grinder_chemical.dm index ae356fef089..f75ec94f21c 100644 --- a/code/modules/plumbing/plumbers/grinder_chemical.dm +++ b/code/modules/plumbing/plumbers/grinder_chemical.dm @@ -4,10 +4,8 @@ icon_state = "grinder_chemical" layer = ABOVE_ALL_MOB_LAYER plane = ABOVE_GAME_PLANE - reagent_flags = TRANSPARENT | DRAINABLE buffer = 400 - active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 2 /obj/machinery/plumbing/grinder_chemical/Initialize(mapload, bolt, layer) . = ..() @@ -47,7 +45,7 @@ * * [AM][atom] - the atom to grind or juice */ /obj/machinery/plumbing/grinder_chemical/proc/grind(atom/AM) - if(machine_stat & NOPOWER) + if(!is_operational) return if(reagents.holder_full()) return @@ -56,11 +54,10 @@ var/obj/item/I = AM var/result - if(I.grind_results || I.juice_typepath) + if(I.grind_results) + result = I.grind(reagents, usr) + else + result = I.juice(reagents, usr) + if(result) use_energy(active_power_usage) - if(I.grind_results) - result = I.grind(reagents, usr) - else if (I.juice_typepath) - result = I.juice(reagents, usr) - if(result) - qdel(I) + qdel(I) diff --git a/code/modules/plumbing/plumbers/iv_drip.dm b/code/modules/plumbing/plumbers/iv_drip.dm index f9a5ae47598..6e258555384 100644 --- a/code/modules/plumbing/plumbers/iv_drip.dm +++ b/code/modules/plumbing/plumbers/iv_drip.dm @@ -6,6 +6,7 @@ base_icon_state = "plumb" density = TRUE use_internal_storage = TRUE + processing_flags = START_PROCESSING_MANUALLY /obj/machinery/iv_drip/plumbing/Initialize(mapload, bolt, layer) . = ..() @@ -29,10 +30,14 @@ reagents.expose(get_turf(src), TOUCH) //splash on the floor reagents.clear_reagents() - /obj/machinery/iv_drip/plumbing/wrench_act(mob/living/user, obj/item/tool) - if(default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN) - return ITEM_INTERACT_SUCCESS + if(user.combat_mode) + return NONE -/obj/machinery/iv_drip/plumbing/on_deconstruction(disassembled) - qdel(src) + . = ITEM_INTERACT_BLOCKING + if(default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN) + if(anchored) + begin_processing() + else + end_processing() + return ITEM_INTERACT_SUCCESS diff --git a/code/modules/plumbing/plumbers/pill_press.dm b/code/modules/plumbing/plumbers/pill_press.dm index 5761474a959..dad5ad943b1 100644 --- a/code/modules/plumbing/plumbers/pill_press.dm +++ b/code/modules/plumbing/plumbers/pill_press.dm @@ -10,7 +10,6 @@ name = "chemical press" desc = "A press that makes pills, patches and bottles." icon_state = "pill_press" - active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 2 /// current operating product (pills or patches) var/product = "pill" @@ -80,7 +79,7 @@ return container /obj/machinery/plumbing/pill_press/process(seconds_per_tick) - if(machine_stat & NOPOWER) + if(!is_operational) return //shift & check to account for floating point inaccuracies diff --git a/code/modules/plumbing/plumbers/reaction_chamber.dm b/code/modules/plumbing/plumbers/reaction_chamber.dm index 9bdac2f98b2..59fcfaf7caf 100644 --- a/code/modules/plumbing/plumbers/reaction_chamber.dm +++ b/code/modules/plumbing/plumbers/reaction_chamber.dm @@ -9,7 +9,6 @@ icon_state = "reaction_chamber" buffer = 200 reagent_flags = TRANSPARENT | NO_REACT - active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 2 /** * list of set reagents that the reaction_chamber allows in, and must all be present before mixing is enabled. @@ -49,23 +48,18 @@ return NONE /obj/machinery/plumbing/reaction_chamber/process(seconds_per_tick) - //half the power for getting reagents in - var/power_usage = active_power_usage * 0.5 + if(!is_operational || !reagents.total_volume) + return if(!emptying || reagents.is_reacting) //adjust temperature of final solution - var/temp_diff = target_temperature - reagents.chem_temp - if(abs(temp_diff) > 0.01) //if we are not close enough keep going - reagents.adjust_thermal_energy(temp_diff * HEATER_COEFFICIENT * seconds_per_tick * SPECIFIC_HEAT_DEFAULT * reagents.total_volume) //keep constant with chem heater + var/energy = (target_temperature - reagents.chem_temp) * HEATER_COEFFICIENT * seconds_per_tick * reagents.heat_capacity() + reagents.adjust_thermal_energy(energy) + use_energy(active_power_usage + abs(ROUND_UP(energy) / 120)) //do other stuff with final solution handle_reagents(seconds_per_tick) - //full power for doing reactions - power_usage *= 2 - - use_energy(power_usage * seconds_per_tick) - ///For subtypes that want to do additional reagent handling /obj/machinery/plumbing/reaction_chamber/proc/handle_reagents(seconds_per_tick) return diff --git a/code/modules/plumbing/plumbers/splitters.dm b/code/modules/plumbing/plumbers/splitters.dm index de279227009..b87a07d694c 100644 --- a/code/modules/plumbing/plumbers/splitters.dm +++ b/code/modules/plumbing/plumbers/splitters.dm @@ -3,7 +3,6 @@ name = "chemical splitter" desc = "A chemical splitter for smart chemical factorization. Waits till a set of conditions is met and then stops all input and splits the buffer evenly or other in two ducts." icon_state = "splitter" - active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 2 buffer = 100 density = FALSE diff --git a/code/modules/plumbing/plumbers/synthesizer.dm b/code/modules/plumbing/plumbers/synthesizer.dm index d7a5d83a251..0399ad85f3c 100644 --- a/code/modules/plumbing/plumbers/synthesizer.dm +++ b/code/modules/plumbing/plumbers/synthesizer.dm @@ -4,7 +4,6 @@ desc = "Produces a single chemical at a given volume. Must be plumbed. Most effective when working in unison with other chemical synthesizers, heaters and filters." icon_state = "synthesizer" icon = 'icons/obj/pipes_n_cables/hydrochem/plumbers.dmi' - active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 2 ///Amount we produce for every process. Ideally keep under 5 since thats currently the standard duct capacity var/amount = 1 @@ -49,7 +48,7 @@ dispensable_reagents = default_reagents /obj/machinery/plumbing/synthesizer/process(seconds_per_tick) - if(machine_stat & NOPOWER || !reagent_id || !amount) + if(!is_operational || !reagent_id || !amount) return //otherwise we get leftovers, and we need this to be precise @@ -57,7 +56,7 @@ return reagents.add_reagent(reagent_id, amount) - use_energy(active_power_usage) + use_energy(active_power_usage * seconds_per_tick) /obj/machinery/plumbing/synthesizer/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/plumbing/plumbers/teleporter.dm b/code/modules/plumbing/plumbers/teleporter.dm index e1aa26532dc..df79220d15a 100644 --- a/code/modules/plumbing/plumbers/teleporter.dm +++ b/code/modules/plumbing/plumbers/teleporter.dm @@ -77,7 +77,7 @@ return TRUE /obj/machinery/plumbing/receiver/process(seconds_per_tick) - if(machine_stat & NOPOWER || panel_open) + if(!is_operational || panel_open) return if(senders.len) diff --git a/code/modules/plumbing/plumbers/vatgrower.dm b/code/modules/plumbing/plumbers/vatgrower.dm index ab2a732c9c5..7327a648dad 100644 --- a/code/modules/plumbing/plumbers/vatgrower.dm +++ b/code/modules/plumbing/plumbers/vatgrower.dm @@ -27,7 +27,7 @@ return NONE ///When we process, we make use of our reagents to try and feed the samples we have. -/obj/machinery/plumbing/growing_vat/process() +/obj/machinery/plumbing/growing_vat/process(seconds_per_tick) if(!is_operational) return if(!biological_sample) @@ -37,6 +37,7 @@ return playsound(loc, 'sound/effects/slosh.ogg', 25, TRUE) audible_message(pick(list(span_notice("[src] grumbles!"), span_notice("[src] makes a splashing noise!"), span_notice("[src] sloshes!")))) + use_energy(active_power_usage * seconds_per_tick) ///Handles the petri dish depositing into the vat. /obj/machinery/plumbing/growing_vat/attacked_by(obj/item/I, mob/living/user) diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm index 3dd2df590e1..3e09ff89205 100644 --- a/code/modules/power/apc/apc_main.dm +++ b/code/modules/power/apc/apc_main.dm @@ -17,6 +17,7 @@ damage_deflection = 10 resistance_flags = FIRE_PROOF interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON + interaction_flags_click = ALLOW_SILICON_REACH processing_flags = START_PROCESSING_MANUALLY ///Range of the light emitted when on @@ -636,7 +637,7 @@ /obj/machinery/power/apc/proc/overload_lighting() if(!operating || shorted) return - if(cell && cell.use(20 KILO JOULES)) + if(cell && cell.use(0.02 * STANDARD_CELL_CHARGE)) INVOKE_ASYNC(src, PROC_REF(break_lights)) /obj/machinery/power/apc/proc/break_lights() diff --git a/code/modules/power/apc/apc_tool_act.dm b/code/modules/power/apc/apc_tool_act.dm index 6a8835cd5b7..0116205fdd4 100644 --- a/code/modules/power/apc/apc_tool_act.dm +++ b/code/modules/power/apc/apc_tool_act.dm @@ -168,7 +168,7 @@ if(machine_stat & BROKEN) balloon_alert(user, "frame is too damaged!") return ITEM_INTERACT_BLOCKING - if(!pseudocircuit.adapt_circuit(user, circuit_cost = 50 KILO JOULES)) + if(!pseudocircuit.adapt_circuit(user, circuit_cost = 0.05 * STANDARD_CELL_CHARGE)) return ITEM_INTERACT_BLOCKING user.visible_message( span_notice("[user] fabricates a circuit and places it into [src]."), @@ -182,7 +182,7 @@ if(machine_stat & MAINT) balloon_alert(user, "no board for a cell!") return ITEM_INTERACT_BLOCKING - if(!pseudocircuit.adapt_circuit(user, circuit_cost = 500 KILO JOULES)) + if(!pseudocircuit.adapt_circuit(user, circuit_cost = 0.5 * STANDARD_CELL_CHARGE)) return ITEM_INTERACT_BLOCKING var/obj/item/stock_parts/cell/crap/empty/bad_cell = new(src) bad_cell.forceMove(src) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 00b332e6608..59f1775f4e3 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -31,7 +31,7 @@ ///If the power cell was damaged by an explosion, chance for it to become corrupted and function the same as rigged. var/corrupted = FALSE ///How much power is given per second in a recharger. - var/chargerate = STANDARD_CELL_CHARGE * 0.05 + var/chargerate = STANDARD_CELL_RATE * 0.05 ///If true, the cell will state it's maximum charge in it's description var/ratingdesc = TRUE ///If it's a grown that acts as a battery, add a wire overlay to it. @@ -334,7 +334,7 @@ desc = "A power cell with a slightly higher capacity than normal!" maxcharge = STANDARD_CELL_CHARGE * 2.5 custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*0.5) - chargerate = STANDARD_CELL_CHARGE * 0.5 + chargerate = STANDARD_CELL_RATE * 0.5 /obj/item/stock_parts/cell/upgraded/plus name = "upgraded power cell+" @@ -360,7 +360,7 @@ /obj/item/stock_parts/cell/pulse //200 pulse shots name = "pulse rifle power cell" maxcharge = STANDARD_CELL_CHARGE * 40 - chargerate = STANDARD_CELL_CHARGE * 0.75 + chargerate = STANDARD_CELL_RATE * 0.75 /obj/item/stock_parts/cell/pulse/carbine //25 pulse shots name = "pulse carbine power cell" @@ -375,14 +375,14 @@ icon_state = "bscell" maxcharge = STANDARD_CELL_CHARGE * 10 custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*0.6) - chargerate = STANDARD_CELL_CHARGE + chargerate = STANDARD_CELL_RATE /obj/item/stock_parts/cell/high name = "high-capacity power cell" icon_state = "hcell" maxcharge = STANDARD_CELL_CHARGE * 10 custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*0.6) - chargerate = STANDARD_CELL_CHARGE * 0.75 + chargerate = STANDARD_CELL_RATE * 0.75 /obj/item/stock_parts/cell/high/empty empty = TRUE @@ -392,7 +392,7 @@ icon_state = "scell" maxcharge = STANDARD_CELL_CHARGE * 20 custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT * 3) - chargerate = STANDARD_CELL_CHARGE + chargerate = STANDARD_CELL_RATE /obj/item/stock_parts/cell/super/empty empty = TRUE @@ -402,7 +402,7 @@ icon_state = "hpcell" maxcharge = STANDARD_CELL_CHARGE * 30 custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT * 4) - chargerate = STANDARD_CELL_CHARGE * 1.5 + chargerate = STANDARD_CELL_RATE * 1.5 /obj/item/stock_parts/cell/hyper/empty empty = TRUE @@ -413,7 +413,7 @@ icon_state = "bscell" maxcharge = STANDARD_CELL_CHARGE * 40 custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*6) - chargerate = STANDARD_CELL_CHARGE * 2 + chargerate = STANDARD_CELL_RATE * 2 /obj/item/stock_parts/cell/bluespace/empty empty = TRUE @@ -486,7 +486,7 @@ name = "beam rifle capacitor" desc = "A high powered capacitor that can provide huge amounts of energy in an instant." maxcharge = STANDARD_CELL_CHARGE * 50 - chargerate = STANDARD_CELL_CHARGE * 2.5 //Extremely energy intensive + chargerate = STANDARD_CELL_RATE * 2.5 //Extremely energy intensive /obj/item/stock_parts/cell/beam_rifle/corrupt() return diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 15135bee1a5..ec2139ad5d0 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -43,7 +43,7 @@ /obj/item/ammo_box/Initialize(mapload) . = ..() - custom_materials = SSmaterials.FindOrCreateMaterialCombo(custom_materials, 0.1) + custom_materials = DSmaterials.FindOrCreateMaterialCombo(custom_materials, 0.1) if(!start_empty) top_off(starting=TRUE) update_icon_state() diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index c584359b8ce..7481443bade 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -85,7 +85,7 @@ w_class = WEIGHT_CLASS_HUGE semi_auto = TRUE accepted_magazine_type = /obj/item/ammo_box/magazine/internal/shot/tube - interaction_flags_click = NEED_DEXTERITY|NEED_HANDS + interaction_flags_click = NEED_DEXTERITY|NEED_HANDS|ALLOW_RESTING /// If defined, the secondary tube is this type, if you want different shell loads var/alt_mag_type /// If TRUE, we're drawing from the alternate_magazine diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 523f41af752..b9c8b7de41f 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -78,6 +78,9 @@ ammo_type = list(/obj/item/ammo_casing/energy/mindflayer) ammo_x_offset = 2 +/// amount of charge used up to start action (multiplied by amount) and per progress_flash_divisor ticks of welding +#define PLASMA_CUTTER_CHARGE_WELD (0.025 * STANDARD_CELL_CHARGE) + /obj/item/gun/energy/plasmacutter name = "plasma cutter" desc = "A mining tool capable of expelling concentrated plasma bursts. You could use it to cut limbs off xenos! Or, you know, mine stuff." @@ -91,13 +94,10 @@ sharpness = SHARP_EDGED can_charge = FALSE gun_flags = NOT_A_REAL_GUN - heat = 3800 usesound = list('sound/items/welder.ogg', 'sound/items/welder2.ogg') tool_behaviour = TOOL_WELDER toolspeed = 0.7 //plasmacutters can be used as welders, and are faster than standard welders - /// amount of charge used up to start action (multiplied by amount) and per progress_flash_divisor ticks of welding - var/charge_weld = 25 KILO JOULES /obj/item/gun/energy/plasmacutter/Initialize(mapload) AddElement(/datum/element/update_icon_blocker) @@ -126,7 +126,7 @@ balloon_alert(user, "already fully charged!") return I.use(1) - cell.give(500 KILO JOULES * charge_multiplier) + cell.give(0.5 * STANDARD_CELL_CHARGE * charge_multiplier) balloon_alert(user, "cell recharged") else ..() @@ -148,14 +148,14 @@ // Amount cannot be used if drain is made continuous, e.g. amount = 5, charge_weld = 25 // Then it'll drain 125 at first and 25 periodically, but fail if charge dips below 125 even though it still can finish action // Alternately it'll need to drain amount*charge_weld every period, which is either obscene or makes it free for other uses - if(amount ? cell.charge < charge_weld * amount : cell.charge < charge_weld) + if(amount ? cell.charge < PLASMA_CUTTER_CHARGE_WELD * amount : cell.charge < PLASMA_CUTTER_CHARGE_WELD) balloon_alert(user, "not enough charge!") return FALSE return TRUE /obj/item/gun/energy/plasmacutter/use(used) - return (!QDELETED(cell) && cell.use(used ? used * charge_weld : charge_weld)) + return (!QDELETED(cell) && cell.use(used ? used * PLASMA_CUTTER_CHARGE_WELD : PLASMA_CUTTER_CHARGE_WELD)) /obj/item/gun/energy/plasmacutter/use_tool(atom/target, mob/living/user, delay, amount=1, volume=0, datum/callback/extra_checks) @@ -169,6 +169,8 @@ else . = ..(amount=1) +#undef PLASMA_CUTTER_CHARGE_WELD + /obj/item/gun/energy/plasmacutter/adv name = "advanced plasma cutter" icon_state = "adv_plasmacutter" @@ -407,7 +409,7 @@ COOLDOWN_START(src, coin_regen_cd, coin_regen_rate) /obj/item/gun/energy/marksman_revolver/afterattack_secondary(atom/target, mob/living/user, params) - if(!can_see(user, get_turf(target), length = 9)) + if(!CAN_THEY_SEE(target, user)) return ..() if(max_coins && coin_count <= 0) diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index 76b2dbf7f96..3cf5b752400 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -31,8 +31,12 @@ QDEL_NULL(beaker) return ..() -/obj/machinery/chem_heater/on_deconstruction(disassembled) - beaker?.forceMove(drop_location()) +/obj/machinery/chem_heater/Exited(atom/movable/gone, direction) + . = ..() + if(gone == beaker) + UnregisterSignal(beaker.reagents, COMSIG_REAGENTS_REACTION_STEP) + beaker = null + update_appearance() /obj/machinery/chem_heater/add_context(atom/source, list/context, obj/item/held_item, mob/user) if(isnull(held_item) || (held_item.item_flags & ABSTRACT) || (held_item.flags_1 & HOLOGRAM_1)) @@ -58,7 +62,6 @@ return NONE - /obj/machinery/chem_heater/examine(mob/user) . = ..() if(in_range(user, src) || isobserver(user)) @@ -80,25 +83,17 @@ icon_state = "[base_icon_state][beaker ? 1 : 0]b" return ..() -/obj/machinery/chem_heater/Exited(atom/movable/gone, direction) - . = ..() - if(gone == beaker) - UnregisterSignal(beaker.reagents, COMSIG_REAGENTS_REACTION_STEP) - beaker = null - update_appearance() - /obj/machinery/chem_heater/RefreshParts() . = ..() heater_coefficient = 0.1 for(var/datum/stock_part/micro_laser/micro_laser in component_parts) heater_coefficient *= micro_laser.tier - /obj/machinery/chem_heater/item_interaction(mob/living/user, obj/item/held_item, list/modifiers) - if((held_item.item_flags & ABSTRACT) || (held_item.flags_1 & HOLOGRAM_1)) + if(user.combat_mode || (held_item.item_flags & ABSTRACT) || (held_item.flags_1 & HOLOGRAM_1) || !user.can_perform_action(src, ALLOW_SILICON_REACH | FORBID_TELEKINESIS_REACH)) return NONE - if(QDELETED(beaker)) + if(!QDELETED(beaker)) if(istype(held_item, /obj/item/reagent_containers/dropper) || istype(held_item, /obj/item/reagent_containers/syringe)) var/obj/item/reagent_containers/injector = held_item injector.afterattack(beaker, user, proximity_flag = TRUE) @@ -113,16 +108,25 @@ return NONE /obj/machinery/chem_heater/wrench_act(mob/living/user, obj/item/tool) + if(user.combat_mode) + return NONE + . = ITEM_INTERACT_BLOCKING if(default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN) return ITEM_INTERACT_SUCCESS /obj/machinery/chem_heater/screwdriver_act(mob/living/user, obj/item/tool) + if(user.combat_mode) + return NONE + . = ITEM_INTERACT_BLOCKING if(default_deconstruction_screwdriver(user, "mixer0b", "[base_icon_state][beaker ? 1 : 0]b", tool)) return ITEM_INTERACT_SUCCESS /obj/machinery/chem_heater/crowbar_act(mob/living/user, obj/item/tool) + if(user.combat_mode) + return NONE + . = ITEM_INTERACT_BLOCKING if(default_deconstruction_crowbar(tool)) return ITEM_INTERACT_SUCCESS @@ -174,12 +178,13 @@ PRIVATE_PROC(TRUE) //must be on and beaker must have something inside to heat - if(!on || (machine_stat & NOPOWER) || QDELETED(beaker) || !beaker.reagents.total_volume) + if(!on || !is_operational || QDELETED(beaker) || !beaker.reagents.total_volume) return FALSE //heat the beaker and use some power. we want to use only a small amount of power since this proc gets called frequently - beaker.reagents.adjust_thermal_energy((target_temperature - beaker.reagents.chem_temp) * heater_coefficient * seconds_per_tick * SPECIFIC_HEAT_DEFAULT * beaker.reagents.total_volume) - use_energy(active_power_usage * seconds_per_tick * 0.3) + var/energy = (target_temperature - beaker.reagents.chem_temp) * heater_coefficient * seconds_per_tick * beaker.reagents.heat_capacity() + beaker.reagents.adjust_thermal_energy(energy) + use_energy(active_power_usage + abs(ROUND_UP(energy) / 120)) return TRUE /obj/machinery/chem_heater/proc/on_reaction_step(datum/reagents/holder, num_reactions, seconds_per_tick) diff --git a/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm b/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm index ca75736db03..e11910a13af 100644 --- a/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm +++ b/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm @@ -241,11 +241,11 @@ lower_mass_range = calculate_mass(smallest = TRUE) upper_mass_range = calculate_mass(smallest = FALSE) estimate_time() - else //replace output beaker if(!QDELETED(beaker2)) try_put_in_hand(beaker2, user) beaker2 = new_beaker + log.Cut() update_appearance() @@ -258,8 +258,8 @@ return for(var/datum/reagent/reagent as anything in beaker1.reagents.reagent_list) - //we don't bother about impure chems - if(istype(reagent, /datum/reagent/inverse) || (reagent.inverse_chem_val > reagent.purity && reagent.inverse_chem)) + //we don't deal chems that are so impure that they are about to become inverted + if(reagent.inverse_chem_val > reagent.purity && reagent.inverse_chem) continue //out of our selected range if(reagent.mass < lower_mass_range || reagent.mass > upper_mass_range) @@ -300,10 +300,7 @@ var/purity = target.purity var/is_inverse = FALSE - if(istype(reagent, /datum/reagent/inverse)) - log = "Too impure to use" //we don't bother about impure chems - is_inverse = TRUE - else if(reagent.inverse_chem_val > reagent.purity && reagent.inverse_chem) + if(reagent.inverse_chem_val > reagent.purity && reagent.inverse_chem) purity = target.get_inverse_purity() target = GLOB.chemical_reagents_list[reagent.inverse_chem] log = "Too impure to use" //we don't bother about impure chems @@ -352,13 +349,9 @@ /obj/machinery/chem_mass_spec/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) . = ..() - if(.) + if(. || processing_reagents) return - if(processing_reagents) - balloon_alert(ui.user, "still processing") - return ..() - switch(action) if("activate") if(QDELETED(beaker1)) @@ -454,10 +447,7 @@ if(!processing_reagents) return PROCESS_KILL - if(!is_operational || panel_open || !anchored || (machine_stat & (BROKEN | NOPOWER))) - return - - if(!use_energy(active_power_usage * seconds_per_tick)) + if(!is_operational || panel_open || !anchored) return progress_time += seconds_per_tick @@ -467,8 +457,8 @@ log.Cut() for(var/datum/reagent/reagent as anything in beaker1.reagents.reagent_list) - //we don't bother about impure chems - if(istype(reagent, /datum/reagent/inverse) || (reagent.inverse_chem_val > reagent.purity && reagent.inverse_chem)) + //we don't deal chems that are so impure that they are about to become inverted + if(reagent.inverse_chem_val > reagent.purity && reagent.inverse_chem) continue //out of our selected range if(reagent.mass < lower_mass_range || reagent.mass > upper_mass_range) @@ -489,3 +479,5 @@ estimate_time() update_appearance() return PROCESS_KILL + + use_energy(active_power_usage * seconds_per_tick) diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index c87a6196835..9bb645254e8 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -945,7 +945,7 @@ optimal_ph_min = 3 optimal_ph_max = 12 required_temp = 50 - reaction_flags = NONE //SKYRAT CHANGE, REACTION_INSTANT TO NONE + reaction_flags = REAGENT_SPLITRETAINVOL //SKYRAT EDIT CHANGE - ORIGINAL: reaction_flags = REACTION_INSTANT | REAGENT_SPLITRETAINVOL reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE /datum/chemical_reaction/ant_slurry // We're basically gluing ants together with synthflesh & maint sludge to make a bigger ant. diff --git a/code/modules/reagents/reagent_containers/misc.dm b/code/modules/reagents/reagent_containers/misc.dm index fa8d8cd3628..f631e8e28a0 100644 --- a/code/modules/reagents/reagent_containers/misc.dm +++ b/code/modules/reagents/reagent_containers/misc.dm @@ -32,7 +32,7 @@ if(on && (!cell || cell.charge <= 0)) //Check if we ran out of power change_power_status(FALSE) return FALSE - cell.use(5 KILO WATTS * seconds_per_tick) //Basic cell goes for like 200 seconds, bluespace for 8000 + cell.use(0.005 * STANDARD_CELL_RATE * seconds_per_tick) //Basic cell goes for like 200 seconds, bluespace for 8000 if(!reagents.total_volume) return FALSE var/max_temp = min(500 + (500 * (0.2 * cell.rating)), 1000) // 373 to 1000 diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 350f51492cf..e35a71e5d9b 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -100,7 +100,7 @@ reagent_puff.end_life() return - var/datum/move_loop/our_loop = SSmove_manager.move_towards_legacy(reagent_puff, target, wait_step, timeout = range * wait_step, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/our_loop = DSmove_manager.move_towards_legacy(reagent_puff, target, wait_step, timeout = range * wait_step, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) reagent_puff.RegisterSignal(our_loop, COMSIG_QDELETING, TYPE_PROC_REF(/obj/effect/decal/chempuff, loop_ended)) reagent_puff.RegisterSignal(our_loop, COMSIG_MOVELOOP_POSTPROCESS, TYPE_PROC_REF(/obj/effect/decal/chempuff, check_move)) diff --git a/code/modules/recycling/conveyor.dm b/code/modules/recycling/conveyor.dm index 3c04bd924ec..6d5b270cd71 100644 --- a/code/modules/recycling/conveyor.dm +++ b/code/modules/recycling/conveyor.dm @@ -241,7 +241,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) /obj/machinery/conveyor/proc/conveyable_enter(datum/source, atom/convayable) SIGNAL_HANDLER if(operating == CONVEYOR_OFF) - SSmove_manager.stop_looping(convayable, SSconveyors) + DSmove_manager.stop_looping(convayable, SSconveyors) return start_conveying(convayable) @@ -249,12 +249,12 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) SIGNAL_HANDLER var/has_conveyor = neighbors["[direction]"] if(convayable.z != z || !has_conveyor || !isturf(convayable.loc)) //If you've entered something on us, stop moving - SSmove_manager.stop_looping(convayable, SSconveyors) + DSmove_manager.stop_looping(convayable, SSconveyors) /obj/machinery/conveyor/proc/start_conveying(atom/movable/moving) if(QDELETED(moving)) return - var/datum/move_loop/move/moving_loop = SSmove_manager.processing_on(moving, SSconveyors) + var/datum/move_loop/move/moving_loop = DSmove_manager.processing_on(moving, SSconveyors) if(moving_loop) moving_loop.direction = movedir moving_loop.delay = speed * 1 SECONDS @@ -268,7 +268,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) /obj/machinery/conveyor/proc/stop_conveying(atom/movable/thing) if(!ismovable(thing)) return - SSmove_manager.stop_looping(thing, SSconveyors) + DSmove_manager.stop_looping(thing, SSconveyors) // attack with item, place item on conveyor /obj/machinery/conveyor/attackby(obj/item/attacking_item, mob/living/user, params) diff --git a/code/modules/recycling/disposal/holder.dm b/code/modules/recycling/disposal/holder.dm index fff78f74bef..ecc33c240bf 100644 --- a/code/modules/recycling/disposal/holder.dm +++ b/code/modules/recycling/disposal/holder.dm @@ -78,7 +78,7 @@ /// Starts the movement process, persists while the holder is moving through pipes /obj/structure/disposalholder/proc/start_moving() var/delay = world.tick_lag - var/datum/move_loop/our_loop = SSmove_manager.move_disposals(src, delay = delay, timeout = delay * count) + var/datum/move_loop/our_loop = DSmove_manager.move_disposals(src, delay = delay, timeout = delay * count) if(our_loop) RegisterSignal(our_loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(pre_move)) RegisterSignal(our_loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(try_expel)) diff --git a/code/modules/religion/religion_sects.dm b/code/modules/religion/religion_sects.dm index 16cd82c5650..5d5d3909ec7 100644 --- a/code/modules/religion/religion_sects.dm +++ b/code/modules/religion/religion_sects.dm @@ -200,11 +200,11 @@ if(!istype(power_cell)) return - if(power_cell.charge < 0.3 * STANDARD_CELL_CHARGE) + if(power_cell.charge() < 0.3 * STANDARD_CELL_CHARGE) to_chat(chap, span_notice("[GLOB.deity] does not accept pity amounts of power.")) return - adjust_favor(round(power_cell.charge/300), chap) + adjust_favor(round(power_cell.charge() / (0.3 * STANDARD_CELL_CHARGE)), chap) to_chat(chap, span_notice("You offer [power_cell]'s power to [GLOB.deity], pleasing them.")) qdel(power_cell) return TRUE diff --git a/code/modules/religion/rites.dm b/code/modules/religion/rites.dm index d907191c33d..af02fa72117 100644 --- a/code/modules/religion/rites.dm +++ b/code/modules/religion/rites.dm @@ -391,7 +391,7 @@ /datum/religion_rites/ceremonial_weapon/perform_rite(mob/living/user, atom/religious_tool) for(var/obj/item/stack/sheet/could_blade in get_turf(religious_tool)) - if(!(GET_MATERIAL_REF(could_blade.material_type) in SSmaterials.materials_by_category[MAT_CATEGORY_ITEM_MATERIAL])) + if(!(GET_MATERIAL_REF(could_blade.material_type) in DSmaterials.materials_by_category[MAT_CATEGORY_ITEM_MATERIAL])) continue if(could_blade.amount < 5) continue diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 4532ec0d43d..987cbe77184 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -1411,6 +1411,36 @@ RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL ) +/datum/design/borg_upgrade_surgicalomnitool + name = "Advanced Surgical Omnitool Upgrade" + id = "borg_upgrade_surgicalomnitool" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/surgery_omnitool + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, + /datum/material/titanium=SHEET_MATERIAL_AMOUNT*3, + /datum/material/silver=SHEET_MATERIAL_AMOUNT*2, + ) + construction_time = 4 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL + ) + +/datum/design/borg_upgrade_engineeringomnitool + name = "Advanced Engineering Omnitool Upgrade" + id = "borg_upgrade_engineeringomnitool" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/engineering_omnitool + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, + /datum/material/titanium=SHEET_MATERIAL_AMOUNT*3, + /datum/material/gold=SHEET_MATERIAL_AMOUNT*2, + ) + construction_time = 4 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ENGINEERING, + ) + /datum/design/borg_upgrade_trashofholding name = "Trash Bag of Holding" id = "borg_upgrade_trashofholding" diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm index c7a7b320345..48afd76f624 100644 --- a/code/modules/research/machinery/_production.dm +++ b/code/modules/research/machinery/_production.dm @@ -1,8 +1,8 @@ /obj/machinery/rnd/production name = "technology fabricator" desc = "Makes researched and prototype items with materials and energy." - // Energy cost per full stack of materials spent. Material insertion is 40% of this. - active_power_usage = 50 * BASE_MACHINE_ACTIVE_CONSUMPTION + /// Energy cost per full stack of materials spent. Material insertion is 40% of this. + active_power_usage = 0.05 * STANDARD_CELL_RATE /// The efficiency coefficient. Material costs and print times are multiplied by this number; var/efficiency_coeff = 1 @@ -22,10 +22,6 @@ var/drop_direction = 0 /obj/machinery/rnd/production/Initialize(mapload) - . = ..() - - cached_designs = list() - materials = AddComponent( /datum/component/remote_materials, \ mapload, \ @@ -34,6 +30,10 @@ ) \ ) + . = ..() + + cached_designs = list() + RegisterSignal(src, COMSIG_SILO_ITEM_CONSUMED, TYPE_PROC_REF(/obj/machinery/rnd/production, silo_material_insert)) AddComponent( @@ -182,11 +182,10 @@ /obj/machinery/rnd/production/RefreshParts() . = ..() - if(materials) - var/total_storage = 0 - for(var/datum/stock_part/matter_bin/bin in component_parts) - total_storage += bin.tier * 37.5 * SHEET_MATERIAL_AMOUNT - materials.set_local_size(total_storage) + var/total_storage = 0 + for(var/datum/stock_part/matter_bin/bin in component_parts) + total_storage += bin.tier * 37.5 * SHEET_MATERIAL_AMOUNT + materials.set_local_size(total_storage) efficiency_coeff = compute_efficiency() diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 04d0c30d9e0..8e13c63f792 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -129,7 +129,7 @@ Nothing else in the console has ID requirements. logname = "[ID.registered_name]" stored_research.research_logs += list(list( "node_name" = TN.display_name, - "node_cost" = price["General Research"], + "node_cost" = price[TECHWEB_POINT_TYPE_GENERIC], "node_researcher" = logname, "node_research_location" = "[get_area(src)] ([src.x],[src.y],[src.z])", )) diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 7d64e1878b8..8cadca9e134 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -1022,6 +1022,7 @@ "borg_upgrade_rped", "borg_upgrade_hypermod", "borg_upgrade_inducer", + "borg_upgrade_engineeringomnitool", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) @@ -1037,6 +1038,7 @@ "borg_upgrade_piercinghypospray", "borg_upgrade_pinpointer", "borg_upgrade_surgicalprocessor", + "borg_upgrade_surgicalomnitool", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) diff --git a/code/modules/shuttle/assault_pod.dm b/code/modules/shuttle/assault_pod.dm index b628d7c5d84..d9a21cf5e23 100644 --- a/code/modules/shuttle/assault_pod.dm +++ b/code/modules/shuttle/assault_pod.dm @@ -28,6 +28,7 @@ var/width = 7 var/height = 7 var/lz_dir = 1 + var/lzname = "assault_pod" /obj/item/assault_pod/attack_self(mob/living/user) @@ -45,8 +46,8 @@ return var/turf/T = pick(turfs) var/obj/docking_port/stationary/landing_zone = new /obj/docking_port/stationary(T) - landing_zone.shuttle_id = "assault_pod([REF(src)])" - landing_zone.port_destinations = "assault_pod([REF(src)])" + landing_zone.shuttle_id = "[lzname]([REF(src)])" + landing_zone.port_destinations = "[lzname]([REF(src)])" landing_zone.name = "Landing Zone" landing_zone.dwidth = dwidth landing_zone.dheight = dheight @@ -61,3 +62,23 @@ to_chat(user, span_notice("Landing zone set.")) qdel(src) + +/obj/item/assault_pod/medieval //for the medieval pirates + name = "Shuttle placement designator" + icon = 'icons/obj/scrolls.dmi' + icon_state = "blueprints" + inhand_icon_state = null + desc = "A map of the station used to select where you want to land your shuttle." + shuttle_id = "pirate" + dwidth = 1 + dheight = 1 + width = 15 + height = 9 + lzname = "pirate" + +/obj/item/assault_pod/medieval/Initialize(mapload) + . = ..() + var/counter = length(SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/shuttle/pirate)) + if(counter != 1) + shuttle_id = "[shuttle_id]_[counter]" + lzname = "[lzname] [counter]" diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index a55bee71eb3..67f7a1b3588 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -6,8 +6,8 @@ //NORTH default dir /obj/docking_port invisibility = INVISIBILITY_ABSTRACT - icon = 'icons/obj/devices/tracker.dmi' - icon_state = "pinonfar" + icon = 'icons/effects/docking_ports.dmi' + icon_state = "static" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF anchored = TRUE @@ -436,7 +436,7 @@ /obj/docking_port/mobile name = "shuttle" - icon_state = "pinonclose" + icon_state = "mobile" area_type = SHUTTLE_DEFAULT_SHUTTLE_AREA_TYPE diff --git a/code/modules/surgery/bodyparts/head_hair_and_lips.dm b/code/modules/surgery/bodyparts/head_hair_and_lips.dm index fbe219ba01f..bfe70f0f574 100644 --- a/code/modules/surgery/bodyparts/head_hair_and_lips.dm +++ b/code/modules/surgery/bodyparts/head_hair_and_lips.dm @@ -9,25 +9,10 @@ hair_hidden = FALSE facial_hair_hidden = FALSE if(human_head_owner) - if(human_head_owner.head) - var/obj/item/hat = human_head_owner.head - if(hat.flags_inv & HIDEHAIR) + for(var/obj/item/worn_item in human_head_owner.get_equipped_items()) + if(worn_item.flags_inv & HIDEHAIR) hair_hidden = TRUE - if(hat.flags_inv & HIDEFACIALHAIR) - facial_hair_hidden = TRUE - - if(human_head_owner.wear_mask) - var/obj/item/mask = human_head_owner.wear_mask - if(mask.flags_inv & HIDEHAIR) - hair_hidden = TRUE - if(mask.flags_inv & HIDEFACIALHAIR) - facial_hair_hidden = TRUE - - if(human_head_owner.w_uniform) - var/obj/item/item_uniform = human_head_owner.w_uniform - if(item_uniform.flags_inv & HIDEHAIR) - hair_hidden = TRUE - if(item_uniform.flags_inv & HIDEFACIALHAIR) + if(worn_item.flags_inv & HIDEFACIALHAIR) facial_hair_hidden = TRUE //invisibility and husk stuff if(HAS_TRAIT(human_head_owner, TRAIT_INVISIBLE_MAN) || HAS_TRAIT(human_head_owner, TRAIT_HUSK)) diff --git a/code/modules/surgery/bone_mending.dm b/code/modules/surgery/bone_mending.dm index 87fc3db0af2..ae4ef6e4330 100644 --- a/code/modules/surgery/bone_mending.dm +++ b/code/modules/surgery/bone_mending.dm @@ -48,7 +48,7 @@ /datum/surgery_step/repair_bone_hairline name = "repair hairline fracture (bonesetter/bone gel/tape)" implements = list( - /obj/item/bonesetter = 100, + TOOL_BONESET = 100, /obj/item/stack/medical/bone_gel = 100, /obj/item/stack/sticky_tape/surgical = 100, /obj/item/stack/sticky_tape/super = 50, @@ -98,7 +98,7 @@ /datum/surgery_step/reset_compound_fracture name = "reset bone (bonesetter)" implements = list( - /obj/item/bonesetter = 100, + TOOL_BONESET = 100, /obj/item/stack/sticky_tape/surgical = 60, /obj/item/stack/sticky_tape/super = 40, /obj/item/stack/sticky_tape = 20) diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index c2c23e9adad..2199e426440 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -114,6 +114,9 @@ fail_prob = min(max(0, modded_time - (time * SURGERY_SLOWDOWN_CAP_MULTIPLIER)),99)//if modded_time > time * modifier, then fail_prob = modded_time - time*modifier. starts at 0, caps at 99 modded_time = min(modded_time, time * SURGERY_SLOWDOWN_CAP_MULTIPLIER)//also if that, then cap modded_time at time*modifier + if(iscyborg(user))//any immunities to surgery slowdown should go in this check. + modded_time = time * tool.toolspeed + var/was_sleeping = (target.stat != DEAD && target.IsSleeping()) // Skyrat Edit Addition - reward for doing surgery on calm patients, and for using surgery rooms(ie. surgerying alone) @@ -129,10 +132,6 @@ modded_time *= SURGERY_SPEEDUP_AREA to_chat(user, span_notice("You are able to work faster due to the quiet environment!")) // Skyrat Edit End - // Skyrat Edit: Cyborgs are no longer immune to surgery speedups. - //if(iscyborg(user))//any immunities to surgery slowdown should go in this check. - //modded_time = time - // Skyrat Edit End if(do_after(user, modded_time, target = target, interaction_key = user.has_status_effect(/datum/status_effect/hippocratic_oath) ? target : DOAFTER_SOURCE_SURGERY)) //If we have the hippocratic oath, we can perform one surgery on each target, otherwise we can only do one surgery in total. diff --git a/code/modules/tgui_input/list.dm b/code/modules/tgui_input/list.dm index 174f16fc7b5..22c6d48edfc 100644 --- a/code/modules/tgui_input/list.dm +++ b/code/modules/tgui_input/list.dm @@ -111,7 +111,7 @@ /datum/tgui_list_input/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "ListInputModal") + ui = new(user, src, "ListInputWindow") ui.open() /datum/tgui_list_input/ui_close(mob/user) diff --git a/code/modules/unit_tests/lootpanel.dm b/code/modules/unit_tests/lootpanel.dm index c0bec13288c..1903c22d546 100644 --- a/code/modules/unit_tests/lootpanel.dm +++ b/code/modules/unit_tests/lootpanel.dm @@ -21,7 +21,7 @@ TEST_ASSERT_EQUAL(length(panel.contents), 1, "Contents should update on searchobj deleted") TEST_ASSERT_EQUAL(length(panel.to_image), 1, "to_image should update on searchobj deleted") - var/obj/item/storage/toolbox/new_box = allocate(/obj/item/storage/toolbox, one_over) + allocate(/obj/item/storage/toolbox, one_over) TEST_ASSERT_EQUAL(length(panel.contents), 1, "Contents shouldn't update, we're dumb") TEST_ASSERT_EQUAL(length(panel.to_image), 1, "to_image shouldn't update, we're dumb") @@ -32,3 +32,4 @@ TEST_ASSERT_EQUAL(length(panel.contents), 2, "Panel shouldnt dupe searchables if reopened") mock_client.mob = null + diff --git a/code/modules/unit_tests/organ_set_bonus.dm b/code/modules/unit_tests/organ_set_bonus.dm index b1a314ccda7..8e2c65270f7 100644 --- a/code/modules/unit_tests/organ_set_bonus.dm +++ b/code/modules/unit_tests/organ_set_bonus.dm @@ -22,7 +22,7 @@ /datum/infuser_entry/fly, )) // Fetch the globally instantiated DNA Infuser entries. - for(var/datum/infuser_entry/infuser_entry as anything in GLOB.infuser_entries) + for(var/datum/infuser_entry/infuser_entry as anything in flatten_list(GLOB.infuser_entries)) var/output_organs = infuser_entry.output_organs var/mob/living/carbon/human/lab_rat = allocate(/mob/living/carbon/human/consistent) lab_rat.dna.mutant_bodyparts["moth_antennae"] = list(MUTANT_INDEX_NAME = "Plain", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF"), MUTANT_INDEX_EMISSIVE_LIST = list(FALSE)) // SKYRAT EDIT - Customization diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_obsessed.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_obsessed.png index c8aaa0a7120aefe05b7c0d3d5dc774262fbf9eab..2c100632d347739b33c494ecbd525b7443db3b65 100644 GIT binary patch delta 3706 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 Y0eV*wWa?mfC;$Ke07*qoM6N<$f-f=zQvd(} delta 3525 zcmV;$4Lb7h9lRWnnSTw9Nkld2n0DeaAl!7Xc990p2$$UXXR#j%A6GBgIGU zQg#%(w$&uf$fGcJ+*VaGZpWTF6W6KJQSwI;ALCAKnrWw#$)w{(JtRu9Tv?W5N7iXt zlqgUXL6L$;f&fSn0CD5>56KT$n3U-Z6{yYo%wXoX^WC?*z<-aw-|pMD06|4XMMXtL zMMXtLMMXtLMMXtLMMXtLMMXtLMMXtLMdkk^Qnm;1dFbzYNuF=rmaTvFf8xDqvOR!5 zbW{gq8Px$<=7!FbnK{4t&h_)Y_S}JY75he>57Y?AGO7cz%ncWs>1pTlq?~J!o{r$g zN=a%2WEs@~S${@#K$g*EdjOH14}_)W*x-<2M=uA3x;ZP_6k8tZ5j3fOMP|FH>k5nK z>@#OYTUO@-H3G7X>VPbxIv~qreLej4;Gi%E)adn!UGEza>KgKM=iP4l{4r#!5www5 zOtJ4?v`C!;{*X}}kY%!-f-*_piWuH-zo4b3C!@_KXn$d!PbjCSnc9Q91WnzFP*G4F zkY!W{WSJW#7tY2{4<8nmsO?o%^S-v*@p^?&wjeg?5v>??=f-Lunm@ia}%iy0UgVEDq&2SY=Hy}&WxU}snNxp@yP12qCZ zgIFxK@uQDEWcBSUX|=DRx%pP2(Wy3|&E*Pj$A8v#FR<(CYjU~p?e`QIl8vd=Ibu9Udd3W=(qO`m}o*{nWtLY{2z^^zb z+<$+%_c)D>O=z^U?Zj%3F(AtZ0O}iVMyD^JZQb3Nj5@p9Jz*aoAAjn#fBMnE$Derm zOS6qrU4~wpjlI3cX=-Xjdo=<+L6&6_i8$_&^9=SLVbbjawDk54;B

    >Po1nY~kix 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 literal 0 HcmV?d00001 diff --git a/icons/effects/vent_overlays.dmi b/icons/effects/vent_overlays.dmi index 54ac3d7a819bb01d19e11503e6a8339128453732..375117f4c79f78fdc7bef6b8806b32f6a5e08435 100644 GIT binary patch delta 768 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

    !jxh{a;!q?dVR5+h3 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⋘CuhnXW?O7a))O!%^;s?C_%9>nwx~@qO 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 literal 111486 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

    3%mn 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 diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi index 65ec3828d4276cb435903a491436c7af2a23a8fe..b0e74178ce1cfd7479389504e51c36f40d46d4d3 100644 GIT binary patch literal 47462 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 >R#f0xx%p#7T1N9f|Q;M$Dg%~WJ;bOaK9sroN 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 bTFL*AA4uwYNI@T3Q+`%g(NQi_vI_Zc;yCQ* diff --git a/icons/mob/clothing/belt_mirror.dmi b/icons/mob/clothing/belt_mirror.dmi index 4f7f64db8c67bb8076bab29fedbd06de8522f9da..37658b154dbcb9de2075135233b619c82575b6db 100644 GIT binary patch literal 91954 zcmdSBby$?m+c3N!2!bFXqO^oa3lh>ONXpV(QX*Xfk_(EYfOLn_-5pCP-3`mq-Ceuv zz8BuV`+1)~zT^1*`QGDszd5`vC-#~-XXc!?kdu{C1%a@9f#*H$ zU7#j%mtz_Px;y2euKh{M+}YI0(&3Y(y&VYjIVC$u(RuC_VZhLN>1I;>c@|Qzk=)2N zC9&67jI}XdG@lNSgjfYDFl%oA>ddpOu^7z0at0Q3WYTy*hl%wXG%u zE1h)9`o-0AxI1KS@g>PnIAD6YY0gMJ1B6n_%)@YO@=as5`UWC4gs-B~^TwEbnNeOE@v;jI&43^?Kf~F+*55dO+igy5|-Nw5-qy$01Q+dD@Zl*|mn4 z;m?NtalWX$mnw^+n-%IC$^6P)=a_svL8`A~*Xz}Z_U?383HLGtigs4V(qDa&gZZ&qBid%anO{x9~3!1bkb?BxdR+tM57Mbm4RMAb&N>82#QcLNz~r5QNu9yN|MjkLt58V-csQP8EXe=ConWW#aabcJV$d93jpeL( zH?FRaDm74}!Mo7i5zda^l6+DberHd>ExGT37VOW0)~Rw1&SLBCt4~1|>b}CA=JPH( zG@x&>vmmNGPW&H|bNXzmd)_|{M#N+vq#H)-AgDa{@eI9zd<**sD9b3_bYR0%6VDC*~QWvNy zzZm#At#zEGYLya*@w`pmq_;bBp%=OEUi@9FviWz}{5U~+CY!>@WJ1aUGlJL4!;Iwv zcG=hsX$8>)v8n6(H(h2)lCe00)|3!W`is-bpak~rR&c>d^ZH21v*_HS)#T+@8X00X z=}`&A(-(>86u}13*8OPF6nTHFqCV#%T=E1OMnc7()SnA5V=-ekf>~;Xs`+QFR&yA0 zs!g`de6?tw zw9^{j$E`$-|EuzNf>yinH4cao)aNns}MNF?J(d4M|=sCxw#3l7De4 zJjjCG`4~9rR|N~YV|hW0Git|3m<5-^Vojm`gS$KYrJB0T*Or$3J&XW<`usO$O={%2 z@+E2oiaxozK+hVioSk30sKDl#Y$=f5^WgR!Vga$3fuTB+*1r` zH|h>kT9GB)V{-0@&{%$fuil|VvbGUXW0Jj<8d6Ux^K-ZIw_l`d!-ooJupgVNmdar-Qd|GZB93|Dl zLlyj#$*79Zz3DmqytY#xEc{xm{*25C3bSNZ}(y0YOu&SDF@)MKx%E4-vk)y-!w@N!u*?Y5X7YWrz)P|f4GXMeEHXn zyxRi+oJhJ~m~_yEQlt;z=@;&2hxF+~8+C{#Qcowgv=h)PjIQ_dzneTsPY7#+@<7jh zao+QDh5M;p%6U=@J<@*8qMQ zRx)-v_n--h#1EHj4spNWT&H&5`g}uPGMkNeGC=z5U0vRfg##`t+l=8)V$;W@xTd?i zeZed5bE7p1LoU5~S)TqF+E8P55m;ghc#7H;mw07@S`wYR0D%rUsY}uA8jZ>rKS&*h zW0T`Gzq}GWEjy8G?OAz`lj|?mmNFf!=YG}lz+!Xw=hyv5i$sP(cRR5A8wI!za3A%s z`OKLqpHm45lyvY?>zpdc^hp2b=Uce}OUX{LM=&5rZ)P=IW?0 zi2i1L`~EMgdi#l2)H{El2DI6>vH+uZMBVcRfb^wrD3>FJbAX2ZyP&mimyx9Zuai*5 zs;1=C_HgJ52R9%<@5O1*^N;dRjO5+!fPC8#EFZE+i0ipOeEHc(4mwO4=?HjE9626i zmakf!L_+Lt*{iN3MvK$gUT`z?a?-?{BZKZU(&+ug%EG-Bs;!eDJi7Qp#7(b4b#o0A zoJX*63G}zkgLF;2+!2Ep2L%NUZH&1>$5mj~h#mh~-!TzkyLQifmL65~wRBWc6qO1N zdg;R%YGL-=&~aNkf?8OU!=Pb&Y$(jME4eXCnI(E1hALf5%IYX~!99(Rpu?Iq7GFDy+rkuDgDj^Xv(_7?6nhy!pn zU=!bDw`8yS#^udk-_dNj@6`F!y=uwCD`a=LMuBGZc-8&-iY3}lwV4|4HNrJojINX% zm$kWeVUmhP6kK6GDGd0CbBFPpF)(Rir(O#hOu4hzg;rE7oq~sJx{9Gvc_#g?AdvGh z9+}ZkwQ3*#5c&dV^V5y$xz%3NyRq>&Ayt@O^~v_^9+%bd4`RWHudgMg^Bi!Vw(;F1 zc=A(BNj3bw-|i+`*|CLJ?e=JsuBfG9aa!ye9;2Ap{PXmv<^0(-HC3Qs*tarVSbefG zA@ODQx|!F!AhKqcMa3fZh}<%DG)~lf>pWFxvd6+zVYdbyO&g6?iW=ITgopE&!-^Il zxnb362hl>GkB(?J^LHE~CoTlW;NYL%%&~uzkY^bdr^W*-YO-nhR?oI$*o|&;V)p5H zLqUmpsiA>k(u=pvyv88~hRqFLX%FYmzgXW^4^EamGYDANuOs>hz#VsS<{lO0O$muC z6?YrtdYwL$3)U>&&Yxv2)SRdx>HG`$i?rE6<@yuE@#ZRe(@wInH?`O(a{G6AiRL*v z%PkY`{?z<5a)ZNA-ZOR6Eyv z^0JBE+zqhd5+8ycE|%TjXj8Ph~xU=pmfhKBeUi&LZ3ME zJ2tB?RDlPd=^~b=dZe2gm1fG(01SIFxxEDjLwzHp2Yqa!O;;Z8jTdOFCQ3HU5hM9= zlfd~)7pstS!`Fp7l*HRQFIAO`9a-w+zsgEaxvVPM*TmznnF1ZpvQjY@gD^kg`->kC zS~2cKleRbPNpyd@e)%#NTxadyF*7@1vr}l`5rW*w7PigD2I1~yv#5pTxx8f9r+(kw zQ*z_BtSx+0#n=efx2?5M!hm_x$xYsTF5VUUk=00MyE_YP_t{{qR_Hrnv|#(=9Lw!} z3<<0q;M^3rS9|cZ=(${7pO^tO>&^6oK}^0!O7)WSX~<$GzL1^Vgh;F9QUs%2k6z8` zxmv&M+HXgIY94;MrEARJqFgJT(W$Q{(ajeu6W8gb!Uefs=s=jtHfnc8a`y|3wJG|i zRsOPvxeyTUU!KsqRs^*X_?rb){SS*L&*{bvw7%8D2d{H1XGd@0^zD`cVSzXoFAxO6 z+tXyOWC5g}w-QuJ002I{{{nAVlX2kI1sl|ImISpr^%d-TAPzJW<=-;IZ_6=6L5Da% z`S~kMI#3W@+Y&y;?W}#j02B4aT@g?;eYJEe`1rm7R>>FF^!moCLK57832Ie9T}#>f zTzF{rFFx%Tr`OfKlL0Jo-bhE0r!rOz`rScV+$07l7f)=jk7a84=*#Bj$2E&0XXAGu zkfF2Qw#-}U&Vnf``m_1`4 zIn*Q!DmJ1=Eh3;>PSH(c8t~3x{FV4+_Z@!;e&^oLkTI9?kwPsl^WUc$%^o_4#syYm z0^b7l;zxr62CK9$jUrh!3VRTh>2ZQlA1sTNF)Cv)76dk-EpnT@>#B2tx;bj+Of2eyS`*B0h&d?Lf7}H3 z#7)kmC$OU$3-O)~f8)malyoS~@#JQkM(1KhikR4PdiWG+IwsErrndb4gy*$)9k=cl z;n#hLWrgGF0=nNtulbq4OY|e>(cVJrGx?sJn_Tmq!*zNR_rfpo-<(Y?`_f3Rm{Rom z{~kU+=uA$-;KRthfg-j~_bLNK@~u+PNR*mzcE`?CaF8qk2Yi~1bGEbr+;>BMA#wQd zaVUn`LfI+Tv3r-OeY3J?KwozxgT~%$^;<77Zbh}L8z12Pdm~z>@b^gZNh9}b&E?n2r4mn;h_3i18iZ&euauu%q_P%{>UJ|s#s=g1ao57U&};=wF|ie@ zn(_)UP3#O#H)!YMiaBf7^4+T~CbX=ET(1IIKD$O%RDaA!&1CvAZDE0&Mm}e3c2P_$ zPJfs4#C0y()?C9o9hw#*K>EF@78@;mfY!5JjSe)2N0fGR2#7P=bB2%^K?N9n!t?fE z#iE4A73=Wm)k=-vV|Z_5g=6NtVfc8xX34^(=^&K(%08NS-Hp|_FQOm%4U?_ZBuCG! zQ|0yPyY86c4*S^7=&3&B6}@5$JBMCY<8{u?a!>-gtOO)fac#der{BVt1LnyBPZ7pV zITZlQ{o;-Hw2JWO>_}2g>X{iO@bobA5ahJy1pR1I{PST3mB?ph%@TbUdU`gkl9*Oo z*FbT~O(^$^QNDsvAtdETv}@cW;z&lhI5W9ebwN(%wV1uL2XeotA~U1dyVi_yON%SJ3(SbCT8$wo)|Rh&2q0`+#CzThfi^Ic~& z578$c986zeU%UQM}%a$wY5FvWAvQ z2s`3i>~XlK&yBVwq!qMs2l^bEctcJDUEo?K=WC^Uukd*3_b|gjf_Bfr1*L1a07$=g zk>w<8S1rm4SfPjlmi2g+xcbhDF0uYzErF$zvZ931bTLc}=# z?!|sAXWZn2ae|pzN3iSOsQ3^)p@?Vmj^?WTIN zcu;I5%a_kGVQX}hDcKQ_Gur~UKRsxAJ+GhDNO@zJA~gDO%Jqvpa-g){4&w6Xll%J5 zHmj9RijoGUaciea`RU_K$E?BX20h2`O>Cu7QuEeh@pcrO$MXb!n<(NIJ0$ z$*DkF`+qogD?8UHgb(6)vm6apVHGGIj6-qq@l>B&ylYq9p!@!lK2!< zIS>zGp%*QOG7Gt;>FNvpK03REzT15DI*P{@&`nxnALga|beORH^9%QW$PeX}iq$PK z*0~iUB94`Y!e>Ueh*sQ@+&4vl2rTw_57R7ufwzE{VM#CCXUK7OH_$fp>7KrOb@%aJ z%{V4VLMm$rPi=mvlW@)1$P3)|y+TD$Mnuz4RALt<2ATn8+D(}XHp!DeG z;}C1~XQlQy+OXR*d04&g^S;!+fs?;R*3Ep*Lr=SdR@i@!LV_#S_IWY-s$ord0gwPF zT_ zdAe3UoB8CvKj&ldm&mp-pf5kX@ObjArsoL=ZHhOv^G4XJ^?yosbmnJ3d5xSG#5PmpkvnOs7 z)$VEm{y4qC5H4yvh?c43CBha(vo3?_t*{l#|P!$jbW8N^3301s6-q-gaX( z{gV^Aw?>XAj5pe~M^H@@H;_psCwOX1NM~nRWvY(;sakKDeztDtk_}BFOXlP^II)-6 z)Fh%k-^#S(&@sGyC?Y7#<-~7mqzxUv{kI=kBSe4M)$z;UJ_XIFI;NYVy^Emhu>rE; z=}+ZbNf6;TwO_RP&n+kNG~QZ{7yQz9wyI*fVW&h?d3<;kfqw7mZ--4R?44qz4vpe1 zFp_gEHMEfvFCXj5uW{1{AkU6r(yJauUY&#)Hhbg)vW?u3|GPwSNXsO-0qJ}mQ>GD| zVT>l910ZPWN`Jb#PTmaD|0^Z&9i%aeLzAAHu5(TDPXap*K1&q^r+L*^HgTUC%p7Ir zSFk<{DYzm!v5$1+ig+0grN}jWLEhIpQ(DL~;H}$reT{9snx0<#qmX$ossfEj4>AiR zSt9(3n^1xMrgn$CC^F{&&fyx~GxhSWJ`x{wy)dm|DCU(PA*5Dcp`SUZe+uyot57|^ zbael8D$>`v(h+~1*90ro%TC!<61COn`Qe0ZlDk_->4dWVjkFje3*tr(CZHE3Yzo6% zBnKcmlshlcGhgnMn^Eo@U%GW7ad1pLZHp*9P}Vb=3n5n#bs$+Ov)9e46_#kr86l+R zm98@vL%In2OQG>N)(49GQc~B_O0o500YsQOdF~gCS2h|Z;LV&q_)40D}Tp5$!5>0*^K; zynHLgI9tRt#@OViDBV~~@Fv5?^_!jho+9{xJ7S4rBTF+nO7oV)S5@j%SZ)wU7LY@C zwbPyS?ef%TkFVXU>q?r6&=*q$g?RxzQfqlF$|O$2awAPS!og zaZ?tkGdw;tlsHnck!Ll)I+MM02)RRMh3ZqdH*-F5&vLx?noPGJYWNg_)*_y%VOFG= zC^d8UW?L6u24j#CZzcXR^(OEZHOkL^h+CkT2NH~>lB>=B#F75lXTE%xTP4>R(kQ6)@p>M9Jicj>b+s=i zSo=1)nq8cleao!#Eo~d2y&$t@YTT#KeS(5M>vK#9TqIN@JYA3(5X=)RA&xHttvtnq znwUI|zA80VUJJ>^C!=F*6HO*8L*mR-v3aKd?@n!vQi%$|3bVkPu8Viql!AkTR)zKk zw|5u~Tu~QU!5UMTvo*{EQCAV&WD+MELjn|mb&rO3(A=vmTO}=9RtuJ|ljq&{e~GP& zc*oBjPX8{Oz)jJN6F599_-ItnkG#zI?*9B@uR+s@&;E0&jUd`(<#>Q;d+?Z^vZMCq z8S_Q{)HBW~zrOUiFylG9tODdaEz`B#sfnnF`Ixi;Z+iOClW*TT7jQ&#(|pW>Yzs>< z*}%WzTvSFra3u1YN`v8X-km+I70qUWO=_!q8#c8D=g_ZOPuw+>H{-0?pWW`v1FAe- zexaW{nk2Z^2Z^cCFwN~59aDCK>` z7uL;j?d_++9TdeYFQNw+w#ZDcjq+uRp0fpqAE?NY% zG;|k~2MV!W?d0Q^USbmh9tEG=FDD&rd6t<{?l(Kwo;29o?lXE;D~+eFF?lbmYOL2d zkxZZFB`N{fSsNyvk@4D&)(FIHZ3U#w!yxXi>j}n z3pvD#bvaZ|ek!1fs9O>*n(lkmY>Goo`tF@6rYW<0j*ZmPp>80XTy070Jgi^HV;I;8 z>E7R^JivvdGKe44m^HrTHeaVNzUYvkdqmX$Pj8TZ#$*;Oo73Dp&T8+4Dn;in=o@Ld z?#^21P_xw$-UEG%zHdt8m-tO4oN0szS9I*4MI+S z*?aVD|BAea@b?$VT3|;*Ptk>Y-iMd9Ms!5@gz)7l+t}F$F!ZH8_lD_;(G87?i)(ds zYad$Z(KvAKI->r5{s7CQ?I$cCZz{`h*}LX~vl&dSmDhj{BT-oWe8Hl2L8NJ%|TYe&u>>`T=lsmEUP8; z8KuDF3;qP__L`gTe7UR5S+Vp{&BshOl;I9ftie6VY-h8!X&QM(PwXE--C?%-70`HB zd&&b*Pg&{vRC$^Fv6tOw56RH zgl@)pOt5u_8z9WOO1z!6wL`{>H4OWZ;zIUmN2RN3B$s6-2x!crvgqQ7`^oovG7<9m zBarBWq133`2Mw&ah|o|2{-PmX1jJKt?`Xkfu&dKArV{wj3ei1zTY~zCJk9N@i3Sdh z*;vW_nWJ6rQJ`LTUHm%iG!-hoN$NE~Yq0d-bm{28wr$F5lnf=+5JccB zh`B>kE7P z3B*W$jM%GmR+SJ45XS)619(dxzHH_fYPPfAf#;|3)=z`0sTqmw=kQKSpA3nmSH9*? zaUED)VY)A}#Ibm*0X&rXjU(YpuI=cdlZ8)1+IefD1aXG_m)7#x`X4<3^grYr_8&ko zaTUr=KPzgxRWn|Z|992N7ysSClw!GRdt(9w09&6BXq2kkx@pKCbb~V@RKZ(zf1+qo z%8bCBw;yNF0m=;B7i{PyG!v~Y=_X!Aegc?W|6_vv6AH06MPY~aqLaCw8C813;uPZh~{-eI0qfA>p+;5 ziotAzJ=bv@$J!ztYBOZ}s5Ggd3u?6;WNHL@UhoE6g0^LR;}>&tgGTSS(qzn#R536g zpa|Rwah`jn7Wb9?A{Jp&B{!TK)`ghCi+gvc@b_8ljWi!~TNP}>Hw1&-jpHV=o$k4y z5r^4gR(rDtW>?4NJSOAnw$PX{h>w(k(Ha{e-g`kqq$lM`=@1{v`ctj1*EF9%XJyxF z<^%DH>_;gbv<51PW8lY#3t~)9gRvYeU$E&$$|W+Q!33p1ww^pT_`%?lUg%D5-!+8x zo}MJQRzOg6W2dg195Z;7zTzA?#i2VFM=Je}LOg34XVcHtW#?Q9e5iIkwMHV~T3_te zzUXTXfR^<(6qe-?n^ZHQB%I6?ng-eaW#+|6p3p zdT3r$)o2^0c0c?*SUB>=s}XDlJrr3q4-O7)(37BX9qfs4>aWq&WF5!LSg{!FDSE23 z-UNzB7F5^6tFcu|3JTgaY<`s+IK8#PevrF^fAW1XA}jg{$>lTvrwzQ}?If@l>}^VA zaw~z4t*3nA)fnpR78!=sUhM>IGaR1HRxhmKeJe8bb4K*^%p61sHNYfjT+XM6Pt3>Cx_+xfa_H3rQB`MCQ2horut$hEcmjS8^ib)i zCWs*6I^Zci&+ZI9PSuWEKx20Mt!hxS=dQT*iu&DZdqR+z5w1s1)Y}S|okvf&trWD4 zKz9S#;0>Zrp|+}OefYi-v~7iUz>#7RF6kf@nZ!W!@sf>HVLo46Z2Rieu?2W`t;roi zyjgOc-uQ;)R-~JdbLwknby-Kyh{goTRvsskuyCQY?B_Y%q+0olNkq_3v?ijY!ze;z zmo)ESx74a+2Jl?{`AFun`Qn6j-4^q$u~;lMZ=zCSlCU4V-;(+JMw%yBBTxCYRN54r z5cE*zCuW8(%gfN(tme8=A5Lal9+Ffif%Lpe4xI|K$etG75LI*x-(5$~`xP)kJw9Ddz;wJ)yWNR$wumDW?=q|C^^J&D5$q~>uDF=8f|c~ zwuCoS1J?2v7JN#tvD(vHhq&gVIi08WD=OB?W-dk>Xr78BOZV3Muc&i>tMR;_w{?FfH(kC`@qVoI_$XY|waU;2 z@jc2I-|kxMq>1}t!qF;Sg@>y6+uJY-K7ineB#?q!S=4gwKh5Zv7G%~?Oa=?oXq!=M z-~{_H%qE<#@&c?q^(IJGTkB?X+Q)da;gE;Oa&&Ywn!tUoc$V!EN(tBZtg4Uj%*fIOG>h_*|e2+dN&g zt#40XZb?pnw^w6+JPsWRcki31t9$iTEiC1mAOyqnfk`sl{|Nh&E!U9z6*pq>ZJ8%qLr~DLKw7 zz6<=Nf6*Oc>reUm>&XjdfbpjQVPQbX3y7232l<%~SopFQx=NGevH&u2JJ;Di8NlS| z$^MJmI^sRPl?*`tSHx%OxdT{cxV8VYZm#Tsd%a^i0O#%-5Ee+{$I(hxp-QIo zlSnH5I%C>nrxh_^TGN05U(M|S@l%Jz{KkkcL0N{OeI?#|u-Z}*;wK`X%c`uW!2I^} zyWK|wr-E+#`ZDL_V8vv9jlMXJ=&iBb(4cAr)#It1l16Yz)3N;4NM;~I*ObBu)M4q3 z%W60AOuch%kUu0H!1>bi-5G{laB38S=e%!2#l^fQiYc6C$`0O;FHySI7axCpwi62T zA(vWiY886GM;OW&RAOG*@^S1e zFB=Ai;l1W>|ABZAfL8VhF(E_i&1fne5ef9HutU~$TV(Np9=GHD0BWAR^!WZ4UVhtI z*$r;f)rOst%3trat1QPlU!FkVE>m(qE&IZT(^_v2un)!4RZQS?F^;v~*fDs(8ojL{ zk&me7xjH>PCC|Lm%?UN<`Pp|2tIqFFwu@`$RgH!ox8h5HYL0C~=N5Z3Fn$c7^O#7F zuF}Qg$H&#{?N7ZmZN!S`^QV?8oQ(>TazWO^gcRVR2wonOrTG{w<7 zuP?BqDAX*DQlU-}MFW}Rab(2yaNDuBnD=#6ijYfh!9XB9UoBUJ_`B3>Q!9lYwD}DZ zeHBsg*|ln4Go$T>AZqQr0J?2=CyCK(R7DP%&JH1_xtS6#Y__nLU9P8SXQkUn81E}3 z8JhTUTXkxLw%KXAthv(gVi*e=C+gO~7zX5wsJ-iW#M{CWaAk z2gd?90#hx09u*b!srG#`P*Q-^*xJH2NSVR1K+b%kK%-`yEd(fT+O_fDPNv2drrR*o z?0KQdBp>sm(qc%y)(%dER%iiu+xG5ErRp!Kdt30v+7$#xfow9lwrSfJ?9MxTeYdmN z1q_o{d~>$IS{J+x(^3zmD9yu}jgL)6eU4q@%Wb~$bKDW7UdvxvG5_s#fQ%g2lI|A> z%MFN#*E`sHJ~oeRjdR!G*?wAWHZHk6qE(@UZ-aIh7VZr&V1W}zeMv}22y!ozxy7Z6 zmJeoT-6NSYd+a(NpFDX&LPnO|NC2Y}^-wQqKG%hvyU$dZ*Nnez(-x&IFE1xP^V*Kx zS^B#Rx43ZtmjAI@W8WP>3Rx6edTs5N7L}v{A&IQL87RcA=}1}*44#CmMiPNAupg3IM}XG{ncco(clN|_mms$xgQxV7gbdn9%Qy@hr>VX zNcWnxmo^4B0}>^xCij4LlZuDM5|mbwDVn|82<1eEH#&@I46V0fmS_UtAZua!AaY z2=ywW#637P^kqYsk@34U5kZp!{1ROt{u4+NugWmH6F(J$obG4=@k+NRn|f7ffm61RMgu~^t{)!+Dw7|Nr&b4^ zSA!0Z*Rh|AVA5syRz$@YX5QObGh6-uFQ$u#4o+VC*zVCIZ#eiG^gc5o;W3}h^a~}C zeIyLo3mrHJ_71}m+Q^iNpqYCh!noZ>$hxwB5!Se!J_*M=t}8@Y_S7M~JGO~FCNJcE z5tkGf-e5dz?BwVIVM$0}m@#o_F%^i~#IUL9vX0vnG*Yjs{QRKCqLot>lXqVBlMRdK z#;1DVKx<0tiq+=q4vhC^|MDBD9Z;0V?hJAqT^Y|;a{`za+;-X`b^q>o z*vAFU1JLa-v=w7FDU@V_25^#~Uf4BEWGhSg)!*xnC9IY1=7+CqmfNQ^RV`=Jb%s;3 zl{TLz?el~BIP~j=AD>)kKjE_+IU)WmR>N>V#Qref@y5Tfi1X{42A_5fl7&Sz zOdai=IFWP)Dhy>}9y;wpUn>ghtMPcA0886rDo;|o%6w#d;u%`A z_ekcgnf>sT=E+=0JmxeM0^NVKyA%aQ)`x^SSCpF&RI9~SmC|uqcUL{(SwAQ@nF=Wy z%N4}#x7|Q-c_DW2mMiF5O_JK82`8A7-w?bP1?!!dy zwAhNl)|Y{c>3lpWe4yE{*3d z_eyyejq@LBy3rX?@^pedE*a8EmWG=__I^~8qL)F1sv*oJ? zjh#I&*$naCFSK|AVgo=rTOS$a#P#3%l3_&mz0w0rNF(wb&>zgt0wrg-1yHs==KMSa zwfb1o1i&IhGRPDNxomd>@ks{U=P&l<4(+}TBYqa4Sd66Lyc8>2C0?I1-o;y)EH&Z+MCPjO zM|gm|BvjKM*2jslg6BFYmn!69b}--UG{84CtvuiXVExluYzIHHizAsRnS$eeNqINN zzSbKv3BN0HJFf;k-)B?$&SC6^P1Bq6&5dj*%*QYI5t5Uw;%37Y9a#jSmW?5MH&H-YxSZVhbD% zo{o5M(_fiBfXJ+|*in*%L51G2aOER-LuXG3P$#za1!|084tFuVU0`evV|a8;pakHh ze$vi`0UsS3(+GXU!6+)4>W&+gkdW7it;gH2pK`1^?Kg*-%!~#yD#~G{tffFhR&MTv z-7OefTU*U87t4%*EvJMg!eu8*`p{yNHrl0z_9hfiSl``^vo_bNr=mg&OX^n{5zK0- zxls7O zVDrOqQV_4#aKjJ(bai@O}TeyK&eu~5(}(9+PK?a5;6@nXFxQXFPOJYl>dRdGqyGv^y*1TeNmdw6>S z1)|1+2JJ6SUI++&p$#rOHN)`0Y@7QO^Z}jRI<;WeojmmN61jOt0D)`#+U3I2NorH# zjCg~S#jnT7(qWAJ{QSQn-0qL@x?CvR09R+!0huEbkV?9NxJ7!8H~$=#_5m_B-|g{y z2G5KASb(H#+F}1~Xm!*l2Au&XvhI4jFdKqK6`=sJ2T0u=Wd8*B0HOt?ecn37wBNY#3q5p=#P8UK-7(sk zzcoN}8Dsx@yX98wS=14?F!0jbA*zip)qkxU+C3OT_QnSdyjRDMqT}J<#dBZVrzogq z5UfwVgsxi3%q{5J4>q)(PirOY2fM>>ZipmMd^2a*;Dl{SM-S_ZZ`?%OsmFjz@C(koP_-9vlH!>lYv0N{>qT)o*fN`GI}J^;(Yq96WqR;_*%1 z5i<ubb&>I@f0t08B6Hu#%8OR?2RFn?%x4EW8czkY<0lV^1}$0ZKgaBCA2N` z_8W4x<~r$iCUjAbr&yrFqSozndzfejW-YvBw_W(%&G4EE8SCcEaC0;s>SC=uqxJlx zgdeZSNAQt4)I<4ZoHL?8`L&F0+I2j>BqnUAarRl+HFJS8B4y9K384bMsZbKhd4nyw zmbM+&h%*1r_oK~d0BH={8+|cA4uq{m{&rw7j)kzE5}fmK$ByRKffq+X3LXmnr0xK3{LUdGxC zs8{Ui@7vF%J!$aU+rSf8(>s{~J3xdkXuoNV97J4pi2_hdg8WVLbt<1d^$p}k&+~hp z+r%a$Ja>b;#5-OcgxgRr=u$Y*qMJ5T-|TrttffD)EVAp(MTLDUf_M_|OnIKrK82L* zBWv-hoA1)Hhj!m|{jrPO_6N3B>M9oi@G7l?M8uFqpr2 zp(XKN>(Ci-tP}=|hgcywmAo6jL;&5qr0^>1&x10$i8g+rg(D)`Lj}Znfo>aMAe-2v zqykknH3pO$4d?)fxmRXCXhvu6Kgy5;h9V%2Bscur_L8flvZ8{Kjg4(%r%%xHx@hwH ziE&Bkpn0$mBq>42?dm!)cdSF#=mN!18&17H3IF2S0y$&6e;5SFaMez0@-qOTCcQCRv4dnVP!pjD;Eqd!Q$Hh}}eLP-oTbRktFw@}ch#%U$-{9d{)tBxxuhm#?@uaFo zOBfF%a7zN$xOg`*Z*nMIYO#`UHDMvw-H%mv@Yz=$r+NFXpkjcH7dK)*B(}fvAVYhy zha0%lR&$TgooDRjTFL-K`W~SmFr<7O{Os$SH0LKze%aVb+)nZLZz+H~*)6vE1q8`D zLygWpPJyGMqi;vqh1DuaNd*V-ejILn$!3I6haU)j&d)^yTK@7eUC9l9xSJpXtz76k zm?oCIb6VVVK?YGRnDfrnhK zHRs)M8prqCA^dfNIsKtfV7)UpbN+Pg*u73Z%drH^&BJ6ve$NxqeXivwct5@;LbdM9 zR$J$aU9FPBZ8L&!eU)vvnhw7#1%$T#`j`N*KWRUM9OHk&Lx{eOHOf$#K42+8Vy3qH zD5-4CLsk#`Eh!9rn9BgeJY}fS^sh#OX|q;ej1sgr&O@o2>$7YRmw7BYRlow;-j2_O z87aO_8@UhNC?!zKal)?m)DCfJ`J7%8pz{ufbsb;6_=~skwCh955YGFT`DK$_vX`Xq0Q&Zg4AKq5 zcnmrabX@jF?z=(9;CDlU$bd67gx|uiWZgq(*Q-^cyt!v12u*FjE8aGhlg~8M_BN4z ze8I;@_#1)Pm(qbTsfw@3qi^$|d@nsQz{X#Ja|BRbyl0%8;fumwZrLr-8@k^tA0Mkv z4{tbOK9zpm@xvjI#*ZjB!&uo^GQDr)FIBTMO~}b_{Oe5yfwY6Hf$wh9|DpSzv7_+6 z-2>DkfRMUCO3G@ogr(!|gO}~~x7Sr2>~3$?0DOux=Uw_Qk_XR1g1P}sRe!bhL+>d| zfmB>~s@pse?7!gEC=IkevQBpYSFU(C3K&>524?xP*Y;+94ge&HvC#ja$J$`bmYRAW z>>wsbFXl{l1v`Sv~r$qlz5+sNjnVIvOehvsMl(0D9KE#E1 z6?;V`#>Sq!T<|)H^>Ds=ldo|gKT~fmqy2{NmIVUI_r-IKU;ZIz))tAU%05d&Ei0!Nr&a*N@X2n6uUD58`+rOrf0&^WT~Jt9;Om<96x}^3uYXXeZxROAE~*!99*Y$}|IYcF`pAJ6*$v7h z^(%F7O5Kp_>FV#B05K6%YDcgrhD2F^5qqX*?fz3V7dK0}EKHx*)DevP36hJW9`BPn z?xIN1ZJ{9EY?E+%;Y#9Z(IH}@Jny;SBeJ!8a$3I|*HJMok%ck5P*1#Fw>7J3_1ov& zyYHr*p!4OUgA{L96D3XInyJ$8J(qQqP`yCmr~SDZHN?(arTe=yae{+foB5i>(vb@z z)+68lbT0WbI5`)7Q2nXO^hErMzF6iUVWHIYyW*zJfsI_NQYBlux{VRF~NjJ6{ zyxrO{FTlBK$v?h1p9S2wp;DBO1MHI~&Dd=1LnTDMT~Oy&<;-kX%gF7KefquR4}lyF zho7&PgXi6Cz`WBEq_}|AYbJx~22k<@_Z<^pp zbcIvn|2K=Tli0qG)M}2nVRj=2>;^E%uwK4gtjnC5IZhQPv=?k*trI z%L{We<$8{1XPH+&s#b8EIamS!O26l95U@1ak^kXI9@?*f`f7WYvONE%LAWk~)U#r? zGD06$W>$b~rqRGnh8)X-ZQnJe&fdLvCg$l#`I_0lvxA~HW5KO^qmKr(^%vc6@cZyG zj374}fPINFT=D4_Gb;4!$!7#S;kiX|2WTyg7DK3#n?j8+;QJ~W@{J!qM@+a?Tgllz zFn~Orj_e3@sRezWCF3jTF*0%OjdBx<3A8c9J{}1{PwNnNXM2zBMkLaP^4hNykty#b z2Ut*o=L9xQEfzJ$Yqh5K_5>C1A7YXTgXCppe{i*2zPa@i$;rw--(M&4Ye5@n2mmGsLJ?L&+DxeqXNT*#}4nIUoVUVggsde=;5+PRdd@s&#|Zr zD<(^i3tJ1Y78JQ&t(U*AJ}a#F>chNO39OLr34aa{b-U~E+Y&?0!T!%$mG@USta(MY zD9H?Edt%!D7m8!+HH*@>f7AdlsT|Ldx=fWAXaIfyCMMu-7c4J})S~|vZ|@z}RMW+a zh9ZavD5$7ZQ2|k!G(jMsC?dUB=pB^a5h*)}f`AAJ(j|z}r3*+6i1ex;9fAU(NimTU z2-$a{ukZKWbMCo++~=H|CuL`{_sr}yYu5VBDwFj}V7tpLC~h!v7%md#ka3wMvozjb zG|alSD8QZY>snWqSGZSt2x7#pHF9#Wzv%1i+y|Qzm+Tn&kjEHJXzmTCE8tga*NiSs z1+NQOwvkIrNrqt}dvbuGyKYwBoU>U~Cy0!(Own;$ers7*RXGDR8?HOq`fZls9=9Zl zAWxi)!|yB?cYzoH?<(rXH~S&PLZcMwhi#h_Dt|DSpW*VR`oomU z6OdVn=6glThNn5l`ECfEd^IBt3Y?3{CU$w&g~?j)#LH`S`d;<-xa7QY9e^(LAoR#|4CZZa9D2|+ zS~S`G1-veLFU9j=+|U;TBU0qNBMvy7f3U070=j1Q3g+=i)BP6olSj;{L2bW|((Rt6 zx!>gS-EX=T?8Zad_gHTKr>w=}qByMV-)>;!0V*hQey5JnTB_k^vLT_u0mRK?J!?R^ z^YcrY?RjICPc^@m-|iq4l~Sagg`^w@)E}*H zvaq9{t*tBUijlDAc~m8}%TqoJIJAP~y{kt}!0v_oqQ9o%vb}a5Ee21eLd8gOp(JJ0 zepW*`lJT$*yTFcR+lh^}@U4jF>|~$hFI~lEXpiXl4`nZ&K6UE)u{IVc91+^apPv&N z_-$-gX_~jhYT&+JzERHR&+KXqUu`X$ufZQ&nh0=D=y}sB=-Wq1IM$kTH`Mgld!NpF zB=T@9MeE)l$gV7+-e0#r5P*)+I=}LNKt!JJEv{OlnA0l)@*naxGU#P0xPMK@ZnAOz zs=%vtjWaf!b-;Xsnc=BW;+q zi=_1z^feV5`|9w=$Wuf_PAcEEZ?_D5$G6vBKR_7F<{ss~R?>g+u+*`44IjdUgpU>Q-Hgr5D?Y_) zly`%QqwgBNKqq3KI`4E}tI=#0Jx`%L-rxdT;Kom-BhQ*1(Vg2@ktXlHUN?o5cC;@W zRok@e={71~?em_y7;b~Bou86O-snk5?oPr?CPAC=y@<{;5r&8?i6S=jwQ6LAqT$t% za)fk^zG`RRoKsSz!#WF@qZjQVj%W{!Fp!&(b2nK_A0a(_lOUn|HfnV+R=1n_1+i-d zy;8}dSGlGPk(Hf~xs{6d+ zgXqTchquO3BNQ1;aMmJ zp=OtNw<@{DdTD>gm7_kMA!uVab$h8}*P5K(50R+4JF&Puq~NQxEl$J(xOwl=j|DTM zdF>@}Xm@bac#-mYzjo1XklJD}Uc`Ex=zktDeHbMXe8w-6Q|2OUKfL924Dp743qE8u zAdXnyU+!vkm3-$xI^l;Vbr-b4`widV7F0P4%cGEpZe)}&v0x0QaYazwm~1}dAn?jd z@67Us44+Vtk7s1!r*86wlkU&*RAXoI4Sq=~n>}6J8a7mSPSiFPa_r&hcuYDwz6HIU zwKaF59$8#jl@Ws?J4U(77=DG#R*lliEfBhRlrr7lK3!Hq+-RV;VY`9r`w{2V&V!ic zjnPEmoI25(8COT+F%f&nc)A#7kL2LPw9x6ytmOUVwW=XfY{HZ$rkuEO{d5XK_vCbs zX>!-Wcf8ApvMwY?H_~5s4OX^bYjo+xYLWS4IB8Luyoko~Wq&z*ahC2d>zPqn{Jg9G zCQ5-w<3w%qk+jlE^0d~Z*?&Xv+PRx$huwR&9WRn$$5!*Wl)bpZF!mz1N+}n6HeN>E zd6qLAhYRP>JwJGmIJ5#6{!Wx8qE;NboFxY$qVQe|FBo$BM1p<;g1i zS`y{KHAt7$udaL3rS5tM^UxP1gCJz;C^ATDOEJlTI>7arnLd{8f#;ozFm9|9c}H%Z z<&!-;?2YQ-SGwdiSqbiAF)^f+!G;H(vv8sw4d0?I<49HVId22Akj`1i-NzQa>bDg; zNlWy~gASCJc(@vquWHXLSYG%92;CL@ zqm}ekd{HlDXqCZ0Fs?G>W_JB5?;3;6SY^pk@F4@}S7ovVzvEDnJIJpN2sTkRJ^y;> zb@OuXt)6-oAxJKsc|4eCA4V*2ANgGWI8E2`1#b$1-zDsdILy!QLVvWEBZvPN~D0L{-?UY}!;#0WeUs+4A{Jh5G~r^$QE zsRy~b3k@-4G+-CP!mCVq7F!qGyy%@AC%DIUic%!6C+&D;0hZ7iqqQL0S(2algUR^1 zP+jV!CMqy9@=~6!uh-g!)XZkc6*2gXF@YYnY1;bi=7&|=Y!m7^SLzBdN#iqH6f-lE zZTNuTc;n?t%8JwE1&90QMN^UaDQeloB}2z&b?L?kCS;tR2h+3E|X1AMMho9($aFSddC!VMH^GM<~ z5t7bTJ;gHLzdbpRf5_F1CerxK@vwW~LY?-{&Xm0I5AOw%uV}^9ZJZ;NsDFyJ$bWQx zt?+@(%|!7JAN!jQ&53@iNetI)lfPIEhjnB1*6QRn{(#KWbwbIVi$v8}3Xg=GoiDtyD`Fi3Y~@N4y$%DMII?q$bg3iC9y#6Nz zY)>T_?oVE+eRiS(aa;=YAb>n|0P%o!TI0~UBBJ{6l!^G#SnB!f-aF{Tk{`eL29L7X zkrmw`tLs?LUhkmUE_m*HQ}nuMu%=TxW=(cp?jrmq8?SgM2(S@&O3(ITVc|%BGP0)H z%HSbci7XLpB}21Nr+isu7h}T6D|_$xhqT5sCR=43DAiu7_2${COKkgnW<}|D7l|}! z3|9K&DroP$>P}DqEuGKq0efn$Guj9P#V5+D^R=tCzT5bDbLu#!4jx2$$~N06!n_9R z49*oO2N`4h{2JWt)NU^A|Aj#Bfo3>TOBbU#LR-cTbe1*S(+8|KIBCcJuwo?>R>YGQ&Bd&?V@dx=eJ*P6b@<`rD-uG^@ca;N*N5MX> zJD&|^@QIqdM`s;xf7Q4cg@o9)wW)8(V!cJJ$+(yhrI$`z8ZHv+b&14+<~?LMF*O(i zf4#U!Le?|HN4?{wLA#ljl7^WZ9uA!>;FefmnRu^yz98RJ8v2xNz5Z)F+AtMq(d(~d zJ9!cA!x{$zwzeVD>AZqWe@?3|`9i^Qkj(HHNwdQY56>0Hs5XzKAld!(d26nk%GZ4{1XV)iK=y zs;CiQTDNP*dcI$>Bx_3Z5E-;?*X#5oryzAk)Xe#%aoU=c#R6s$=m89z3iQhCi@@6w zsCF}c-=;jbKQn@&BH9&6dpxdAh{OLpS~$_v*H!*Jj(GleIfv3e#VX=$bcg;qUAMcG z>TmJ?*3)A{vrQ$8R7`0o4Ykm7C{c~UwTtq80(@o9B3gTXbj-B)wbZ*c|CrzQe@szQ z@fI|Kyf3$+4s$`0>|Qey{s(mZabppxlODB=C5o@7P?B3s`ZI z4yIgqBYZ>#HB{rWAka&>{3z1!^;;qhf>KRho$En*gsjde>NH&nsRw| zACx;i)Awj`UXFh1ZY1OLyS-ga9-mgO0b+RN-jzW~BjL15RzWGj@PG`fn%!1&+O#L_bO*xp94a- zq|w7a-Wg3kg}oBYV6hIfMpM_|e3=^qi%wKgXdviV3JhUCU8ucDpPlTp zj2C~@{Su+KV0-%Oec2DDpH*Mio@>2xS+V<+9ZtpawUzIJsuTV-%+cYA-ST@SLQvu)_9brJdC zwv_-sX_@_l)AGBzgsrt@>?e#1k{vSMd+rmJ!L9I6#gy7Ge|LuEGNO_H_nep$0voT4 zmoOYDin#NT(KMA+ciCfBKx-=+Mx`rgHy%d2v^`Z${b@3J{b0lUGsU4lY>n+LKVpKY z0!rE1O!iLPR;;}K&XAz(;+Yu&WG`Q4Zk^tS{DG7bn{`tZcH0la1}zs`e; zQfD)Z)C9Iu=PRZR&cXBzHfK>`Yc@g788_@((e+>Ar%UG{vyV6# zr0BhIN>_S2Swye&MJtAl5cpSJ>$Gp>`2jPh&FQ2qs=?OaLMI zoP6)tQ=+lsMyRrGVuk^LWME}>%;uEACF$UgudVg3u(!Rcrbm({eb)=k)@J;X9}t1s z_s#n={0OP&NClX{nyzSfW;ONKzNt}&lf1ijnGbSZo2X_())z@HfoooG z*XA`9xAb0sqa?82EpyGGO{V3o&;6Uk;CKq1-rX(zSVXdZ+e4@G(OZ-au@pg%WWAzb zq*fPz7Ap;BRbk6*ds8=YZOQ+p|9se4xJ%9T<{>ew?Q@-?af^T-dxz;bX99*5z7V<7 zKV~SdeP6BR)~io>w>Q^R{P>u{WRSik>-%%0QxO>QR3&r=GFeHjv*NY=eQ`*JfbkNxOT!1 z!qV#|#EVb=OT^KEVEZAsZ!-Qty=B!0SQ{NqZ%%yP*>ZB(7+yB9--h0O zv`)o@`lnxF)GiD1_H<@;ao>l`9B_%xr-o3LY-9z--dkXe?c;c#_ z2uU+ND7PHnEGhi<^;l|U8|b4)sPG4YjS39Wvfvm0-LzDzJ*)!?2|LhS zT&4m}n?V~r`BVlbTis$S)N|r^@f=*6k&dzKqS80mykg6NA z8rUq!8;vde(~(N4%Vn`sw2{{O@7}*R=mtR}@`e&u4$97RQaz zxsJRMQAkC1CHbFYhKF{2W^&kt+fH0zL-Q>KRujSM~J1@Fqu_v15 z|8#w5_@Ue0wHc8IgePyD0s169X z_X_gEM~nIV7?PHMMk`_9y|or-0z%G86NkNrTPhjeTeTec?D_5EpyQJU|i#rNf~YW%<;X4qX<4djcfYf^Q5A__c^j1_a{H}3c$Ii?Ul2>VUbie zF2|w2$MyMsTdr5Ug4Q>60ozmY>3z($Qx$Q#hqxhKKjbtrbmTm!8F zL-_O_FK=x#-qX97SE5>kO~nvY$4$5sO|j6aMiUF#Naf9>H*KV^*5px3^5=oqLoJc) zk$Aj^Z8ZoYzZCOq6rm>=IG>26@xXA45A^M_P)kWkJ^vxH3v*oy`;WciU)u#+jMLCN z<0|G`w{CT=DuYn08l@DaI)?XGD3?vh5+;8RB+^SF_qX>Jr}2&S_alI)JVvPE0MF>w z1o^+Q0DnsUd5^|$7oGQcXcn0~rQn%8Lf#y|nTkZ{+`2UvpO_d~Yu|gMYRbnrvdg8Q z!7GjG$RSy8(WkbBCe^GU23JG#a6EmmSWTmxZ;E$*6fsOYXDkWY_WEBRias0jd6+)X z>}_n)S6DTP%XJ~&0C&^7S%qz#l(4rmfdFVlG4W>EY~2YedN^9PeBPBgVTwUy_Bp{B zq+l_kvPIr&(Nh~nPi&SA2`*WXzgd%kRZjxK^^vG>#UAynguWtX9FHRS-rNo4fUO2@ zrzj~qG>z~_7!aVFo)`H;DZX_pYRW%kWysimwOT?Ib3KGGgbo1>R=|$%` z6q(C>H2@Ikle%dA;Ez@dp`k>z?8^nJfrsubN`(coKfv)Yfet1k3EHqCg=6N;=m{*x z2=oR0_|eqQGf<+w&*M8qCgH9@gw));y!)F^8+p?nF69Xi z9c@w0s92fOE3_Pb%}Q{6{)ZS6dq`X{H=(bd`DGI1`G-X4MfgcF6t9`VRE&A9kNL?o zK^gK7?r%QKY>tb&nDFHojUa@S?p}uEMh_>@2Ls&u*yB(J?#~MI|Mrfg>fqOLlnG_N z5*;D|&1&%W5&FRnc^8atbC5MN(ClOYLw_P|w2_h_og@rdBmY)be!kHBplbjPhuPXwCK;b@2kAp=RPi*EK0$Ct19WKr z8Tv;;EYzbK1&qsf_nh}qGqMp&Y0$&oeEQ&S^EFa6EK@2Dt-_j4-B{%Qari;3_ZoTwes^6tT zRM6lmi9xnBf+3^j_K~5XbWX&1WFo(bui8iNL={tg<44@IDUyXn{YJLr8t!!ohKGml zS(7K=RA3U{f`O3(8PMg1=!k>wWY-sEzHg*e*binU_6Xo=_D4jX&TNwA9U!o521ry# zq)<}l;oQ8QMnC8`Z99muOjxWj$8nN@w9h$ZFUF|Swm#`b4ovsG zCrL0-Cqv7Cf>D5wHsoY2vSt@@01QwSFiHQm62>`m_7U(qO<+rbL5@6-Ink3&yNP>o zcAc{=X_1iJ-laG@-S@VO3N_pGE;o1od3YIj+#iK%v^=~MHoWwQ1zw}n4T4Lnd|IzW1kI+{GOGBHq!6& z8{ZneN${mT8 z+QXXZ^I)zeJ;aL=>8U(L(`{!RpC0%}?+9=R-v8Ga72B|VMC>1DL}t?eA5MxJufe|8 z;nyOMh3773-22P3waGEaKjyE9Zm?Uf*YXfkt?yc|{|S)w!wUYh<;!JdC#lAcR|&aMdMF+N39cQ9#dok~M$}f%sQ_ zJHv&>Vfp#_kEReoKpxKU@~Z!1=EJ(^&K2WlwZHQ=Qd}y3p8UAA2kAKvlVcBjpB*m_ zTaI{@4sy}g(q;9XpxqUvA#*b`k%zC`s9ow;DnY9E?Lc=Re~=Vagw;}>$0jT-Iq2TL zogFZ#oMwWv`kZ;q3J5-s%&EHMuUyv~U~uP7j@C2Z)roKbM=ZgXAl>GtaOgncZlp;! z@1XTyMqg|X@m^Edzu!95 zK9U#~O;n8}%2-m+#1s85hy%N`5}j;rdAHvvD}D67=KNRyrrZzuk80gGgbNp>r&6nY zMN;nuhUDMiquI=rpMSnjz41UsGcWH_9F)44fYA!!65#Ln?Hb zBES2#GK#~awVJtlWzPK3n+Galgy^E@zeoywSBuT+OPmay@A-+r3jkAr8&yrjFbiZR zYf;a!U2$-5_*C}#^p!%?B z0XUkv6mwcPSWUA(Ud3#q_f9K73_f7*y9rj=8QsU5J=IX1Lb@WLP zn?4@ej#vJkFEf0(8@o!n#YvL{#a+UguUk*6Aps*kj}rJnD_`3%KYIsV>lo}r{(YS5 znCZsJxq$i6Wv)gD>t6q{laATtoHLe@_a$)&r6Mc+L8Vv7w!%wBU!wf&UJ9N&=YI3% zO-^1SyE5W|)i8Y?RPMC!w1{}&PLSC`xYrSq6#K*PE_&oLs{N7>%WSy`QI;Sh3UBqv znse@w2J#*zGI5EY8=mXzOU4)yX>QD+*Thjo8S!(_Iel{SbE@a_eoc4OR8(HaYz2Iq z#%gtAx$(1`E9n9>Egk;k?HvDk|1WZ@$+xbE5FQImIc&mS@`ve|6+T0|nQ_5#(~r4a z?;Cr*HtIAdf0fxQ9;v>NNL&_GfJ-q(A%Nw?ppjSb$NMiSJ@3Yrk-}h-HsH@o%cSuz zeg4CTp9ItV_76&4E}dk2w!AxZg|lv6TTudHHe5Bc;GAN`Ki2CN`TTXO_*HOZjc@B) z*`w>5%x+=`klCV}cr@u3N%tZG-s=`R6jYR*#dn^ggbeZ(%L?@ysPKXmOqy2~D04sj3h{0*|KVcU9 zXrouCd{^4*@oA)iFd^KO=Xj~9W}bu~Jh}Bj2yqLMZ!jy0=A6YA$tmh~$ICV2hv`>! zzq~uK)tzrZV7VbZ;#J4~{G2ykA=u&wQPzi+_#N{gcv|))sTegR@HKnz{z?7H0&vFJ zVgEgwuJ{#)o3E5XGOYW}BcgX?4!qd+y1ClblMZj%0v&PKEgT z^{dukh0gZhSkmR4kFu6UZw15>Xh6f?$)0ci0 zv}*X>)k#Hp=&&u*X#Z<1h(^G?fz;KuI;y|=pYkj%SyWeIHw5y>GW%`wGSs=8KWAxy z1-0ptV(5MeRIJ@c1`^1m~)BVQtL&N|A(ago9(E;!y3@V~|L0?KfP+ zmf*W0ryRzA$hHlOx;s_jckq1tgCEK%Vu~==62aht*zJXL3Uqm zak1~x@-i0}UBzH!s7hu$alGJE?A?2MAWG$2HXi)N3jrWFK%zhX{vIeZL7N~DmuvrC zXY&ibubLPa&MaXhcv*-JDin_U^-__b?@eY3SIHykl$z+B55(Cch@$a4LJ5q(Y7xJL zA!Un(g&^vGJMbw>tSlDtf&1ikL#0Hg@ybt-Y?6rn#G=j#d|xf`v^|w+nX_><>>-9L z7X8|T23^iE#{}{1c^twO=ln`WKM@gCfc*T<+lMTj11-Jo>WYD?m((9|^%2T;!YFW; zf?a`2Lk|n`76-o5-2!}+NAn$Qx%9cvSO&;x@fTzH1qIg*jh}tmbWL#?x%;Dh4?7?N zgH6Ob*TiAOP#B?M&e)==& z4z|IPA#6&}-cA-iaa=GzHHR(+zJmB*GhXR|LmQ?MwnP(&_Swed=#AAv8(hv{%#C>9 z&n!r>OzGLN_3Vl#HIGRrJNUixbv-MA%nDVpvdo^rM4ZT$Megf{zOWB=xQKjle2TyR zRoNvPU|QAm$B8drhUaRzdG|qJ`?GGO5(TUt5lto9HiXE*J`7Z98AYGtvtp4B|BMdXmq42*@l>r#DIGuI`Kh$aL!(q=n!?C!PEWVk> zU(B2KM_lt}%^m14PpWV`6!Ym1n71sJVdKJ^&(vHAdaN5(Ot(y6nNcxNJW6|ye5W^e zjgj>$uToVUgyRvxMGww*BaO-uGE$J_oGa8lYf?ux0>33e#JSp%^Y~*rNiP-lU3eF#^h%4I`L1P%A3@MA9Pj-7QTr8q z0Lu;0yy89^_bQgBSzh#uvz0YjH|;6d7(k9ZirCoLcn-ga`M^T$Bv0J>Z4?|&#(?Nd zdzvS)khDaqR~PcxF5k5n_-)(6ts;CMoscAy6&=hn^GPEy4#}mZ;_XEJ$&zcdUmW7H z`*U;-*3d+?oz4v-hNmmwa`%S3>fFUHRNg`l%hh;a@C|18Uyt$|;A=GVyh`ifTXmRqUPM{7Rxn}DGrB{t(~(=-GO zAn(9C%mk(9O=y&XiXsDW7J?JY#EqFm?=I&>rH^ z;@FR?5hgL6;c}6D#b{Wy zNAMp>!qg@IIyrpw4pnQnh{0Dxe=>}ps=mJqztBuw_dU`8cWv-Cmw9cv!DPSs+iV@F zu0B6T#5d~SXsIlnS)WbyxpwR16VzYfUD!_=Pop}cEyVav!b>OxxrlTf^NEQ<0YM^w zcDCF-h#0_c_4yE`QD^tzT*22#LL$>i*>O#2>W08|n7sz>@&>b^Egr{$8muol;7ndf zht$gnM7=_QjO=f)ymN*X5Hv<0) zjg||M`B6($krC<)A1wfKvL>t544sg~q2D_G{c^^SdVg-cxw5)8$LDYcDY_`4z@m|L zKS1@S%LiEr+FvSKGv-pDNC}i4Q(S%Hr8>$A=OCidoaaN%x)9B5@xb`y#wG-UhEB!U zVE-4{76d?eTIUM^wmoGaVMk1`4RX(QOXPX_otLpCqP#d03mGmvdiZ zwCG=in$r3koYvg?$^CDz))5xx|KLv*yZ^IBG)Eq9DtBqH`z#ej@MdWQIiAW#hpk>{r3Z&djk8YUws^RbXH{8}px zKY!MOYMqBfP&gz76a=NUz`%NabMv($JB&|0{)-F$4NKmf^sBf;ERS>Vw9Ls6-8uID z9itmnD33HJVZyH)dx(Fok1obah?z`*YX4sJ@4@D3LRZUT4p*p*eROjiTEVctI|}qn zpZW4W0m$cK!{y@Jw#i2h4dCY$P)GCv*Ik{Qyuc=%0$*}M@{JVp{+;OmR+vyn%Do(9 zvg3O2Bq>*-{k)T(e%-lVdEfNyO(&L?9Iofi#v<%(TSP|B;rMXk<@EUqVl)8uf1vw| z;q04HQBg*9Cw4cM6XnE!WIK!~sdF68&m0?5(;Z~}FPR0PmfeS8qJY!NEoRhW(kz$MOMxHO%OdNf_LCtYuIKhxHLwE(#&av{4!w zFFM=qEe7L$+myyDXselVSWW^9JHge^+uNHr1VS8_+}5=R4PN^G^t4`2l3+YQPWWc* zgYcWcBCtMu#9KIf&b(g%m8rP@v3q0B?Yk8R!Mt9$xEDv12^WF^Ha7^OtzQNBOzklR zQY#l<<|4R$oPoBJp!Yz?P~3$)!Z@soG#|BD7@-xUEQ2s-oNx8YO)&$1MX87-+`cxy~(`$c-$ zjd<~KMBICn=q-1M>NA#;xkMB$NktYi)G)*|F%qI@)k2bKCuuuFor%kOjEytU$Zvb2 z7llvY*G`?t&L+%T5S+%m+D>R|DUbC&Fa1m0zd~}Zk||5= zy~N-SJC;<%rhzlC8o8^{raVj&J-rx%1RXQ@_~9EQUDkoj&$-%acwC0mcRhiqiuY>2 zH1iYdBF99|`o*ubqdK_J60SzXE=>u!c)L1F0WW}2>>?_^xyiiqm-=*}xo?{>W;K0> z8#*_uJx?-r0A@vR$vz~A8z&aL@gyUnVPyxf^f&G_4@*WXjT2RgUN;7$&ag5XcOdbg zH}A~cV(F_Wu~x0B>@o$2Py4#+T&cup41x$bB9zo8Jui+3;=&d z27Y)>bgEiMxBL__Cq)Su7F*2gJYQ$pvEk_-kXWwhIW?pd=$uE5Mi4>=i zru;V34&-<+wmj((*^sp4*R+K@&w}RFLph~r?}QhWj2W5^d+PV)c3u4P?{ju5p&3kFDJWGReUu-*J5p5N-Hoh z@cok(6!?pnuR|ivvwLY(Oj(Cd;-veTtVop)7 zbT+0wLx8@miVD;rBsjL^e$JU^`H>k#M=J|CZ_Jr{i$OCdx8=V5#A*fBDaKWPFg{k~ zb2|~UUBO;aPiiZ+(!cf<^i>w&r1(&xq-s%*w^Ng+xbKVbYQmSVy-R25=8%>Z zZ)A2c!`~H_JzNk>6dCuB_hA0j;^k%M4tKUHYQ(0rw2*n_Iby*({o&zpR$OsHQE}DT zZgXK%b652w%$VHVz){WnZ`(;!8&at+FgNjw5!sS@U+{N~%0ZgU&O_smGng8=-3NjE zFEhRL&UGiz8jfPh>L}e?s_)?M2b6u3inO)0y<%pRJ);?u#k=%lX2Z}Z;!76Y9OkW+ ze#_&p{&z&Fm|wLd^n&!5o+lK9)xNBz-Ecp#l3qoBNiyo(_}6$jP3uk{sVuF5q%r_^ z1|+kc?&vQad;xzEINE~-^4g0cLp4T<7Kx(3YV+uv=H*+YM8&*&WJ$p86oZhZn*=xBwFk+xv2RMTM499_&d*{2n9jUqANl5K3UU9c{ z2b?1}xpdITh+hSU^j1?3&=mZ+ zcm5CaypUa2_~8$f2P(p+a!UJ?O?>`F9~|-Ill? zahI&aM94|2?qdB2SI874tew^qTBg(a7o1@q%MHqc`Y6cCHE5GR{iD90=sevP9Tg(* zGdsXIu`a$`m5$P0xxiYenkYBdfr+qP5JNrKBBy@Z3`DoQZ-q`dGKIY#HH4_&O(Ee}rZ`RhsslZvlx@yDxGETIxn`=)CN4(@n+ftmPb zEoJjx!uJf>r>PGjoi5?32?rEkX8_M)Eimp}P`vAN3?U`3CPc?}g!}KxHYXXAcG@n; z-ZY=VeUIlM`-GSwso6R2djIS>{nP$D8r<&>oV9m}a@a6DFY9@ppT+3teWpBI)Y|F# zQ}M-}Uo2lY&@=l9*DzY7ww>Tmim0!h^Kjp}ANH+hbY^|lUi+A&=Nr+T@1SQ*9q3oj z)_MzW8S?LYOdQuF@AKGg=wnnQCL-acvT_|6=pvMS0xV|>UC1`#-qQsjm2m=I@gDCP zNE;{n(4}MM8FQ0_%So?K&hH?9UH^PP$MVNEt2p8EvKS%J^9sb%O`78rhxYal)_GXv zpU8SsI-{=Ab6&uTymL6#Nr0C`$E15|1fiD;aN>m7D3^C}K!kD#kN1IkC;JGQ7C(Hs zz)#!{_e*>4o7VwW_H+AuoKTet&q7O$cV1p7ze?XX+OX#NYiSVd1JXkz-0{w%CCG$z z^VDYqz-YPkTexCbZg@r7uhZc3%!e8G-e<)bv)zR^Q_gnrpdW$~Tx-toC$}6PIz^z|#sezgkD*vG zN0=>2YUZ@KwuSl`7b=p8_L;_Hd2*O~B5AH3Nh5; z+r8NF*H()uI_3ku*Ru(W2Fo0^Z_N_~}f{v>UUqe-xt(oZpk z6hzHD&zyNj$Z?Wd%|Q^|(q$vUjqpuAFQ)bR5k1X=!|Q#tmgHo|{! ztsZ(vLT$=eFoHj(4vxVrzPZXKSWh>45d6)jeyLYf$QPfF*ry15?Wt0kqM@JWddGYS z0u{Yqd}4=UgyS5(Ui-(Gs!QH54Kr8LJ6-|YgO||(cm^9b-ga+Wu+U&Q4}5n?J7Fj4Ga%%q zSe-1qckOlu@A~w#c2I}1(u-c=c@B~qCoT7tdD1Nck7^S1f`Lfb=HYyWXYu6M$mXZW zl9s(Y#djJ+{9qpF^fj{=$Gidkh;c!#nHm*gYGJKWLT5eG-839>K?ly<#K~Kdd{{zW zq$-8&sVn7#K!%2f3l$?%z){|9o=9ruB&mV8i3!^xH}+7t-2%tcKds&Aaj2ct%-%A0 zsc??Rj*FEr{}Vezdh_96Czkf)Q~oC1CYq79^}mlCdSVgTr?(KEJaD!*>jXO-)~OE1Ya;SLORv?=u2B; zn7hT$+%(VJwE34(hC^ZAHX$ID7T8ZWhJWRvTd8f1(>mReC(w3K*;Yz0dUay@F`*Lh z#9};jYQokTGw6An27rGc>uj3^38YwELM$$}=>C6F>F+4mBjKv_f z3O9sK|A{>!d0g&T2j)U*HVX6r!uH|B5QA#UG>z&kLGP93fdv^+cK=?*CsW)3{VlK~ zhXjb8JH`zg<3H-YqEf+2AxO?ixPMurdh0PN zl!c`c>@<3+(MYHB-0LJsoy^}@xLWxA_SS9p^(o0mnp72Dec=B}34PHr-JY|Wz5|P1 zc+mwa|>W(WLql%t>Vy~5x9<6)#nndNNHVU4c7kpkg-5>oJ$=dc;PV0RSPwY(-P zWOsFAR8g^FlKa6lmB11%`u%44T2_hz(1|Uw5)ChE#J&2sCtpfA%=X0ZZ6UzeoT&jN3LR<(H+m6M-A*l~3Qe|s-{M4mL*Y);x}*-}MolQ_XpYu{qb+gsm%RxB zjBM~D^=d{Th>bp4dGKAcb(L}R9*E&GFU+5_^JWn0$N}$9-$Pf&CXqWN>H!u-ytC=I?%cHzMmQ zWg$da5K$IRU;*`iarV|xQGMaR@X#rslyoW5h?Ib|pn`x%x6&QbIUtI3hteWlBP}^7 zDJk9E-3&SNZoYMY>%RA&duOdPb861n@$9{y{5&h-!YAQ%Tr37`JU%~BRe0xGr!X#~ zonjuu3jE$?^2-F|*lgW-oZM{E;0Mc*!euBi?H{;i8ZbbbCGUX1{-2Gv!$%1Bl=Q3k%&}qi04tR z`AnnW)mpv?0^}CBYb!tmsz@Z#<8Wy}DAv(kyJwQ+v_bwL zzBLu>C1u4|NFCm={CyPe-AB30#1Qfnj@L?@=k)nN0GM7RewDK9akFFSGC(N zCNPeOE*5&Q^XI2CexvEnRvL(6p>>T2v|J20$)2w6mGT{7@5k2nXbgV$Hr{<0v+?fX z%uSWp8K#OR5Q8b&=QqP=cIL!z)7jwnB-lwG6jicDLZsRTO;@MpF7I-rNU_@DkXjGF z0IC*XfL8_dSP0~&guV*K_xTk!H5wGmiNphHt^92x9rv$4zMs8ad)x3Gfu+yJ!}a6b z*|EL}5b+`w29U}ufDkB>yFBNtroz=W$V3@RVC3<3kHBNx^DJ7&_WZji3MUqdr=0d& z65k{4IOX*oj|&zyi{K8lCALT9!*8oEI2l1V49YlQt{`4U*eo_vO?yYnYaget#ycjj zl4^g=tl_I2xg!dwnsrko5l~3)5kk~6ax+h{faEE1_F+GtIFvl;eOGq@KJ1~#VL9x< zY9SpiWttl`n9h_|m@&TADNnpwA6a>B)=en;N{La=b!(J6J_FCY(N4&ph^UaY7|6K{ z4SC^-N)VAV#E6J=hiKrv6fz){Z5duoh83);+z7fpN$fZyfExdzPIcQtwo#{g`r?Xl zt-R6RP{!$?pc9m!_<8&ers(Q z@Asv`dZ|tt+Vs_M?$v=t^D+3U>aJl2-TcMsoc?k3hWuRDDYW_OdQL{qOME&1^Et*n z3(172osT!`*UgNW=VQy8Z_fkTAq}~z@;mjx@zmNBi2kg~@g2sB)@AKc|2p5vN;2^v zI3Q$f&UsUF<5FvGblmMoZREWBXT`udBC0NQ-x1}|mwPRlpG$UBqjx@TxZm$LIk?4? z=d$$VZZNACdylF?GeqbAv)KW#ne)uMUy%&gVj%A#ocwu(Hf^PT4R~C z+yX#lJQ=JxM{XrxZ>=a!SW>e!{<@dc?;YYF85V4ht=ScL_Qqx9RF#N(5~|R+fy*<}jY~XbA?SVNQN2 zPg!YVe8u$za>~y^0);-xWuCQDYv)F2l0}ol1HTDf3i9sPjnrljlanT{YAG^Frf?ggQ~2MkCL?Fe5NmT(r##7q z!EIZ1I83dRRM#+t#q+5=Ug7=wrQt}CY;qsF>RBe$(CZ4 zk%j}`Y+=kp*QHjQDi4R6=La?trh3$jH|MqE;e%s7oz(*VwzFrFgEZ*pgW}K;n24`l zVLqQ_x#tqmyxOV{U7_gB%0E# zRGEfGhCd~EPbXr)zU^g)5YT}eV?1Yq#>tP|e~#3lv_;=2dDcHufZaP4< zgWs$DQ4x)tO5ermT zy^1O3j~kEkDKNO8O0JLD%SGLG*GFwn`$tQfLmsR`Hxg};sUFOb&J`C@|Ge*;)#TrZ zir%!Fy(!;N`(zAp9UxQnajcGPc%Vej@BUhH&uEmo%FMjv?q@N^3GIQ}0_GG+XB>|{ z_0PV)mLrN>2XX2xp3G1pc)X;hcA)J;zGXxypU&XzKX5Aba`6cJ;1gq^hgx+nNeTC# z0htLlSqZau(2<?4_U# ze|rabgoesJID;I9d|pb71xuHg1<1yJs()a57*=PhCWC~(OmaQ1@|YO=X{b3?6SM?8 ziSe!lHPqFERTR=&ZVRqum6yNXLiiI^%|1TRE!(~7?QKfh>$SN~B3t)4!0C)((#FnR@qVV72C|0TTKf=G?*lI7`U%cm@x0%+Gm8b z2bhN2p0~00JkW`^)#D_2(bO1=SBW#nR^CV*KKjmR zzvYjSiIe4xKi-#?9@h}h9a^=S{!t#idB`h zzBH$nTf)JaH1tTFXTw4xQ4Ro*#sNu|ED3aGnGaJWV}YusCE}|YDO>T$#_W}dBcq5( z?jId~FzDZj9Oe!l%9=Hr26c5QSb!ED2TThEw{9!qW+7JX0T~8Z1QXdfI23&0O-&Ml zNB3XW%=y)?&(wc^U_hP)^3L?~poP^l9$H}JLsSKz_w)c`EdX5}%2(Hav|^;`#s6Hc z(UjtEXqRo~6bJ~yE7$`zk%#-NuRzfUYLC9UYw>V$hS_qB4%TgLZME>+7brZkz+h8R z1p*UYij0MjHK2A@Cd930j{1g5~n6hiX*CF4w|-EA$7 zo4*nRDe&G*vJ@E+fK6)u3kf8~VEJYAY@;{J^`qkN$x^D4XfKnfvobk=dGB4e+R-x* zdRl3LfVGZ7l_&PdXSvpT(-e&K$5nWNlI@R{Q4D0~J==t=$AR=EZ zE&V16-V(c3u|330O@phGgQon?hVN6LqWF|hl<2fy2mjefs?q;eh_e(a zqaDl@rA!r-yTK|de^9fctiyLPp``2aeVui9t%}V)r_f`Tfto!=+OZsl3xpWq))vlF zgV%j-r`N#t;DZG#-im6ON}A7})mnfWayc1#UPHw$PYqVCY$tpB`g3QBSGZWa82*CZ zV$&8@ZW#S+=LPtMwg^%fx%h%Q9{UvtM!+}tAhfmTalDrrC7HJ4!?7y*%&lRJYQvB6rb`Ktt2xXuKVDo4x72C* zaq-l7h^0f{K8%z!XG88ek3D99x=Hu-rY9LDGaHtm%Es&6-;ZCwHjMjsjjT|ULlYjT zZ<#4lI7I7n`uJJ$YSbLk!T}r{9F=oK(!-X6za=5l_3LOj5HJHV{G!LitS!mv0#J}3 zZYk=#!=&-t7-{X1{>jMT8%hLbbg}Y=gCWHJ*V2f_=(;C;Vtn!!cmr*5$<9wIsgkp? zUB%QFW5hoPQE*|moh#vEhYvoXyznQqmlBgf(4D4xFdc~w+LPk(OI7h%PYX^%-Kk(s z9;2|YvPM6Zp!QLFv**MkSe%F%F;qYba+;oF4{ADCOx=h18f4x2D>@9IatMM$#dH@p zi8?hslscy>5&9yqOZ@E#y#boqMSrZVpZ++!URP$8_RNCVs}Fcn+$5=7GL#)QMUo~a zr=Y&q+N~MA!dSl%g7j1*bUK;exfMEy4iO94e}Fo=SwqxjMw^BSI!>-I(?lBs8!z4S z4I5rtq}H~2qFP#k3! zD5vILYh0wJ7wQ|mxPF&pum}vsMzJ|V2!3m#-Zw0r!A&KAUJ3r|BL0T zKk5^U=zfw`xZ3|7i-5L&2u`)=nf`54a4H%K0!5>qMNw>l4Ff_5`R;dYd2p~k@RjzB z5SR8mt@lbo?SX9^AQGp^ z#TK2seeSBDxLAM(DinZka`7A9DlO&rFT;6z^X;Fre|-Vk3_y{WrmAGK48*RCn;|{o zTU_@ht6C0re$^*$UrQnfzIc!7MAulRgC7r66!Z$ZJ>#jbVTQ!n?{{KSpZ+DTKCL=k zUdb+4YGoewf@O#hNy}F(fTzSQSi?3w*rV@w?-_w{HtTS)06!h?nyhFT%&8Po%E#`I=!vKtlt^*-mtnValK3 z3I53v^{&QIwe!Y_!TBsqel zN)O_NQ5+qC5DvP_y_s?7UOSRBMwrdndWcn2Hx+fPwsMu1!7-GlqQ$D5nxBsvT_P)9 z1kUcNX#NvoZe&*myf~5S?^Ql>{z&G8LWUXVZB~3v@p?PNy;iMO2HRdvH?VKf{(xS8 zE9R3<)N<0(O%ENk$nbei0+F z6jfebDbNw`Fv(ZL7-)?fd=B!6_t)-pm%I$8aNBX{n5PUXq#?k#W~#ST+H0>Toqg7; zLX2nG{?&cdi3mNm*-=53H9NU2|`cfNWBw-T4U05kZ1L<)pxKPBuo47 z;Dco36Q{pXL-TDtD8Ik%N##>(xR~^4n`&WzuxXV&DP7j*s}DD>b-rd{PI!QQKm7+t z%L6{@Li%V=mFs<+zUS+o$QBUaD|yB8mrQ>Z2CyF zf9=*WpG+WsJso^4FK~P|01t|JFuAX6G_WpG z?R=$ZRjh9FqPmHa)$s0Cn1Sbu#2Fk1%GijB6LL#8tiHIC(NhVGwo$~d z)ZMSt$TRFGp{Ek>o+Q>ZQEKM;K2&sZsSJ*c6l&}X4#qv0w1F)E548sFc($#(DiY`S z483;*lREw=I68j+lEO<$WnHC!>UP1`KH5A-3#0#N`4-fAprLL;WBLxLD9CIy|2lf9 z53%{8+KcwLK8$7*=ILpD|@Ch@>5Au0PbBLmpj$!x67?L#U5XG&C`_yb~)*^HNmIoPc_{ql# zv@V=WYcz=86}L9hBDs(_nxZmD?t*jJa5&DK#VN>-Q<#~%SEgvmX3^>Lyn&3X2 zRb1@=X0if@#TloocN0Xk&v~pmN*4mhaX|&caB%t@FD~h6A7db^HW$IkY`XeflaGCB zh^4f)?p~f8?L96-!-o#$fPD*p?7T|YmnwoGmGW2Z7k_;ufY^Ujya)TWKn%G`)u`qh zhFRd68d#qlEjirAcjO#*YL|`igZK~6ZHK<(49GW)#6jWV;VH<-ykE3tj7dz?d?>#_ zB4t3Ag*2!aXG^Z*=6qP8S#*+t7ELs~|A3Q|Ku5>y>bDWDEaR4{itM|qhbDxNK2alS z;i;$vq9CbJ_47f)w*-e+kOom(sh{}CgZZ4=hIB#@2#Jr1T&JS~X*8VS8El$+M-UQe zSgWVH)=LNwrEZVGjGirMuIWPfjMq6EScI%71wkgyoqOcx$hZN@4Rl77Q zGj4lNtR)ip6Pfff5h?cf?ZzmFyiu1QUSi9FmKM5nVoS1eEeaMNp(Syc}&f?e> zcldO+qF>`IIyg)&-w|Xqdq+p8 z)!vkRor+v5*B+g>T1`Ej#CCptU8v6$ze?jz-nVWd@=a2I#G}3jNy#(pyCQu{Vp5#L zCaMahBdDkIr6Z}gAGh#fTJQ0{67ancwHB~1eO9ZCN2N(%^?-ob&i9fqd`sX6QO#og(%Q}R%?Xn-9-htUxW^c2;V-R6mw+VcamRG^lmGk zfMq2biTIqf$f;ex47G=P))M$l3!H)I#mvr*B9e%N@^0M)lL!{m>o``W`MbCp`LECb z$P1sT0w&NtMY{Pww zUHR$L5BUksT0W! zqN2K>*PmXj!N0(+y`CTlqKKC>Rx8bWliz=rzJ+l-UhP#k0J3*MK11D07RdyK&4=IQ zAd@zP_8CkCWfoHhYV6*0#k2n^rVPlc7PtIEG%&LkOtnJxTv=K3S4+#sA{=Do5(uTa z+^Lb%)ujd*_B^KKO0jQI-wPMTz3CD8sKk2IqiHn%YvG{c>kL3m;TsO5yG>}WS4bc) z>(Q!Q;=9&8iM+5fdP{jI3t_p06GTLJB9ops+SLaUH2+2Ojya#O-U)qEPU<-DICqHo z!3j+WRK1=90{LVWzk`{E&h~8M)b^eEyJtV{AoJ(69zVAp%*OM-8tMY%O_b8hy6t8{ z=`&-YCM!6{hvl9Z@$Up)1L#AXT zT(o!;nx}#`6+4!H%p3cGu&T~`-v~e(EyZUgdTGE6XQBh?-IdJ_<+tJPLl-qsAaS&s zJ*FfP1Z#o#jXsJ_D=qq z^9-NGTjRDDMwG1l{Aznjmd4$Q+~ehDVeC_*M>X)sJoMC4n{Zx!`!pi+V*>|T6{UwR zEpmv*=-V%`92bRJY3x9Lm&0V za2ny#%-YDe&AT)8N}dZQsE9V?T;z3s2htm7;zFfeO$)7n>D4Eb3@QqAa@Lh2REY4Q zBw;RM5IR2^Kp72Zets*!dWCk>xdP(vKewx|YH}+5#>v@Gy~Hb7;O+Z;SQ@ljMeu5% z<&$$RM^lpW(#NuYZu= z44bmXEHYOMZk-I2{2W$K*R{JSq|mTYv``D?*Rf{gb09Yqi^!@r&`(R35yy3WDKZ6e zFJ4OfYg`a_I^p{pj-v)^dXY9!*GYjo*BRp8Lc5I!!^WVoo<_uM7+CF741#!QTQah< z@8vk+9uF$=Zj7QpJA4D4O71>}b!(_e;Uh^x)2C-k`S~Qz_v!;jV6T0+&1o?c1=iX| z3UN*})26u8_Cp8`k|4etq zmr@-^#g?IFBd#B)zXkfJm;Hr8bW^;PzheqG#`1wunKQm$jV z6thQ%X{faWRI3U(p=WUiXlQ6`4TMAafe@-y z!yxLOW@NWoAk{e3)B0iHz%|g_)sM<=xi9_C!8ih37yTbOViyn;8X=w)gP+bPh zR0&_|Je7>mch3#9zsi?^o{!=@uH8 zxFXvp>KB}!NMa6@qaN_+ED1nB`30*`N2|T{JG$aNV8pwUM@L0P*)zRT<@7goS@?xD zv!~74jVAThS#z9R5O+`%vwU!?FujV}w>M)Dux~#YF$<}pLo(^%n-u6V4gJ0e)R=&w zu%bp+l~CEbY3EXfo$p1lS7VyrK|3odEA!x@acCCjd*Xt8g51M}8j4|GUCcgGpEM)a zDr6$O90>z9wE|X|UKs|ub=okZwhGCuhXaAo`=;6deLp|uJ0(-o?3`6@cJ>#)ySq8x z-H)cYG)@4CMPHTZ3eL1AUW3G*Rn*VBNjkp_6^7T{wYD<)Hpc$O+~6orz#4b>yiMXp zULZ!!l%9Y5>dfD7Ba(VwXQ3AMhy^ot+Y^WEE|CMEY89dR=krTyL6 zrcqg?#4>$li$`!r-0a1pIoI0S+Qctn9VDFxkp{ZQaJ4+;U81*lxvhQY18_(f7#zOL zV#vWT>(7Qp|Tz!pHEJXwl^Mup+Yvw|csTg@r_~!^c68iHV8i zzE3qLbD^}C#M7c|E@MEg6puwf@f?MoZ!1#-&%? z^C$|f3Wb49*bK5W3#LV7W-|7+4~A(90#qh)VC`u07cM@z;%&I|e1@1?zrjN_&gnS! zgjYO~xB{=yp`sK=5c4%LL|>dF6|fjS9(8=H#orZCM@BH+Jmrki&o?BJUlZKldxZ_z zpP$=Vr7(R9i1^N?oLfmaQ?yM(4oV+Q{idng%qy5gM06%8uNFaiQqCJHzC%iy0OFf| z;^XXQ(^a8#KT6I%_eH{!*-$C7zlLYw$(CzJbGMqBn!14PpM;9as^AQ=vLc)L5DOwOEI38vQx?Xld`11I6vC-qlIIkALONW1cAFX9ZrNwetqxn|BA}G zVZcFx#-bho;T29NHoD^LarpZ|6_=ux?&xHWmCR3Pqt*RqD|gWiemWeG9oe}U$cwY7DOz*?})2RW#Mz$il-+gybb6$3hDAT_-2c7^VH^TaHQ(XMO z^aL+wZ%BQWu9Z=D){krBztta@{RGfyvmAm(b5)M&?T3@F8N2hV`_I|+mv+-8-#|(KBj}@qYje_u#QvxcN|1F{a(9m7S~y*dS&fAs+~b9wIgxHg~Xp=mFVB){k3 zGP7)^YnWFp9pM4PjsPBg?R?(Uoja5kJ0gqmJOs&vAFJ`tV)*Du|rLmD+({aPZ z(Ugj!6AKr^;$mUJkV2M>0R6*CAR&)P;5{_PAw-47t^?`N9TTNN*yL4uP9OZpbbJv~0#eW{I2=Ib0(Y-bZqE55Vu zo1v7!vFA5`8(p)r3X4^kL&5gk$KX*#@!#cW2n-hNYAFz$NSai`_aWiVfgyt0Msbu*T=tb9dlsS1ozu zAvpRPSv2xFJ^Oqnul0=21amDU_;|UmE%9X48n;!gd0N0!9UZ$7fgvL!a~Al_qP)*_ z&7G2?q)0=!o)E@3R9J*_8Kr*pu4rj{0LEnUaNz|gs*Q*UXcj@!Thr7y*jbAPp2?9^ zE=H7<)?@V22-g7@eU-rNiRsc;Z8(vG5!NT8FXZMHB% zY1O^?HPk6O2DhDLqe%PRf&w~pn?%bSe zRVO$Iz2?5PCd*@XE8qwEbBuD(ot;jlW&_pFRLpwj;mHO;S}|553DhrBC8{ERe&~BV zcCX0BlhWx-+pf1mT{7SDQ{;uo+N|zlpW^C{z9HY8sT70v_t(W$s@tm^E{CQ(r+mhV zEoM&hYL1rA*UL;keSTyXx-x5$cpuXkl6_n7^V$8Q4-+{aPh3l{Q>rSb_zd!`0bIR6(+=m>(FNY+8(U?^U2k< zpk!6g5UrS7Pc)c*FbuUkrhGi~<~68Q(xT|a+=6#GwHBu*D$J7>?^wuY;>%O4Y6&3wVFn9b<<5W_6-KZfO%q>zJUZM0hrMc3Dpaa# z$f@*&5R0Lw9GbsTMHS6a#25ZE{%lORxx3cv=ZTr^M-T}ATF>u2cu)u7=4bUvqyAA< ziK~6tmTLDYv^}gAAx>^U2bT+6^RtuZ&{2VU>LbrZpT|Lx1Qa}#+gp1#Q^tCd5ygyF z=~H4UGS}NSd72QA+$8uxhR+@O+07XZ&BBByic|FB34M+9W@k%ngG7d=bGMkg^^N*# z-#h2^EluN{mns6p^2z;ba^9Q+Fs6sec}owM&%fVTU+fsj>Sqi$86)3@+ETvd=~1Y< z6XWeSQCaqeoFq{AQ8zJOOKafmu=8>LX0ZFTsF`~I2u74q4Rh`b>3mr2Y`3^0h#(ZK zC(;2;45%n1sy2F4@KTRjCFQ22$!c}myF#ZPx8w$63A)i+4<{->7}c5Q3}wJ3cF zB;l{-h?|%?!3KcNsY4ye@Q9{`!9-)f$kgpG%X?xgxzxW)27P2rz=MBg`a{S6xx!-n zWjMdNMBMS;;?dc{cLT`v*XPi&;ntJCRzFpy5?-X-u)QXM&PHBY&1PQc#0kmm+Az+) z7i@hp#G9D_6qLVQS_>vY6Y1{g%YBA^BX z-tbD}(JO88e+u#93)Mp%rs2V&_Q_uBud)v$w@WSxViWvyyT1w!fv2>#xEkK^`l#j= z1;YYD0oL5%Y?+c4SUfBKDegPf!kJP?^H+tFg|oZ|st8qi-7&ZG9C&c!LO-tS3Nhs7 zfy`6vZzA*ZcBa$6o#Wr{Ab(Z9Q_mupIb=c<{Ny$UBi)GJGSY#$@@`x@xhthGzybwkwNb#TW)*ca`;%G250X@?uvFcyaB%{e+(fKqxDm3$cX?)K_2_1 zCVoX_;mQ8_*5kx90>P_jRm06CbSde_Lto>Jq_uO%!HbiLiZL2jn{^ymyJ@2Dkhepg zKPW3JTU>TT7!fKH)o_9X9}G)A@MEl2abk~vg70lOR$F^}XjMvb?F$q|T?F(ZD=^3QQbKAEXkix^78*duSOpd+l7#~wev zM&YtZ{U#A&fRT$8c6o(+7BV{o(YXU~Vt%Zx1a2Y2(<*5K#nlfTl;T%jdN z(9qWYj7vb^yycYFcDHZ;43eMTJGM{h|1aC(_vU5#liJQef55gJw3U#V7iSuyR^GPb zbDSE{|8sDR&mnk)M@Tqaj0y+{2py4O7PwkTNWFVvWPvZ`64o8yg}4LI<| zcAfgH||28#3va z+GWPB-SaMEPWCc9!_{LZW8qt0Jy#0O-X0^tTDWGnfmAAn0F*0?^j!2eb#vO;o=zK*7iw{)mJ3#EI#s;0^JZ=ZkgU7;{0)DW6RSLouAbyQpHN zo~s%OxCcGhQ%9f~sysTSoZ`oxeCkI3@Mz90N6tR>hsQa!^6YggSyZ5xg(Qgvr&g=< zTtKMK(YHK{bWeH6A1>{8%Q0wwfUcu0`$gQ7RkTc9z=`4#75n#5)s9oFhe_WuH&*M2 zq_4@?Jv>GdTf36}RpGXMaF9m#>1-@(9A)g`g*r0V3hcL`yg9H&X_N;^5kimMR|*_e zFR7!Cs+{tmBKCSwj&h2c`KmUNMRCXYQl`XEb@QO|>dT>jeF3EWz8o+=c#~f`b6hS3NNlv3b}hB6-xs)qtm;&{gX4>neBr^S9|&q740H|kd5Pq!PI>+#73W^tDR7Av zVK&f1HyxG6zbwfxMR-Cn@uUd_iv0FfQHpsIOAh@;qj(eQ04Dc#efx1mcg!G|KEMeH zn1R&nw)M>&$MpSPwx9~>MAcA~-^YchwQ`y7#viGxat*&dYdnoGoQf8|LOWCm8L}Z# zSkjv4h~7~z(I1H3A)7T{aNNq=lWODTpRLT02DNd=d?kV=OU}Rg%;6&pFMGu5Ej=Z~ zj>hJwGt8tEF!i(sQ_qg6nxwx}Rf{0Y^SJ9^`XOL}@tAI^GttY0X&u9NrW3cJx9=d5 zjzW>b1nJ#KN+x6#8*Clr{nK?E#eCM__LJq(NPB^VjfF)vpTT@g{%LzH(g~T?3}%V| zl}@d?4+35hMK~4KC#~~e1>`>(mfKAcM&|kFWM{K&7QEfv|55bZYqRP$EyC*OuaEeU z8zEr5>D_%V$oo9>WfN2*&EHN7s|DA*T?|ao5Ju*7kFWDbcs5D6rL9bdM2KE=H~SjR z=Sv|xhE3RK$p%=Sg*U_%&ui55=0xTEaOI$fzaQ7V^wzQyr~i$daZ_uL76&v+F8%ye zG4Dh;o?A20TljRY9w;b#f#_?k?fMXewMVc#_FTdRuS3(vd%8>qDpb3px&L%|Vsp44 zP}FrZ(`l(4cvNO}OKyqtK+yezREpIaR%-m8;Qk=}*VDpV*kJ=IFCSzH9x4CQKJY`8 zA_UTKEgFMxY&fZ%sPYg4T9WYar5}T9U=XYenDRa1=bxb-V!>c+?7YBE!9i<}cD0{? znskcRY{U6X)AUZ~yu}9_nT2epgFEQG2_Ym0tpv}t>p!?JG9RMrU(1>oxSwLYU7e}E z8F;Vvws8zk{2tuDFSjvW%U|cV6S|}L>1+QMXBi-_qz)5^I`$(YivS$7i~pKBc4W*5 z8eu5zy-9)8UO^wy1h7vA`qxWopnc7|gb3yi6od3iC`*6x@*95UlaxO^_zgch2_b#p z=yXI2DuDy6Wv&|*>A-2DsyN~$#r0u#*6NJANp}W{>jaHpBk&qw4=fVkeTwq(@;|XM zPY9vIcGdHn8Oc}Q*8L5d6HD@c&&KH_MOgv^abJ= zmXl;DkgUD^rjq;fKi`Xe5b554bkfYdJRL8Sefi~4+q=t>4r$1x1Kl=UXdIi6bNW){MllG8wcQlY9YORMizg(72IK@rqr%bnRbUhpMf3$Xc;oh;q-J%~a6vgyVF z*#vAn7y&t38oJSS{Xni2tS3vd^dxCU>JeY=(VwCyPUpPFp@Z-1emxh*>cRJ5vORPG zd{^zor{@pezI~geoFB8(2e3PlSJ!I!>r80+P36n zKT;16Dm8eb!?xs%@~r@`lWq1BD-9|tDw%$Qx1_)44;7)e#cI|ZPl#iH_5FrKpTBrf zHtfs=2uj3tGk%CEdMM9d=RD$j(UZ3sRg*X>pTo)zKlqxX4A$^2dyw^gq^Do5A8=!0 zV{^bF=r~UlGJ_u&HrtqVc=?>Q*g!mMTGn7DM^oln(#xL3w8;FfJLn?hkj9fyy~I>p zcaK4d`g-1U0m{C^Z1BwPzBuqSUNMzPi_?tC%u>wQ1mWVVf@8Dt!#wgA^o>#K<)gog z;tg$XnnDpc0OhCN3hzl)^2`LgTcB1jnTJ4DY#qca= zhw?v`_mFy%gGvP-s(ycm=D(B7#B0ZLng8Y(?o9q4ilN8!GHt>UyEklO6}0H7ZR|y-czwv`qcBn;^WaxymjC%aERLXwu_oVaM#gw;N;kW^R*R*!QtDkzjS`^Q#Wblu-kHv47eb}Rl z+|JIj&aa6cDN_LT!>O=PwuQ=!JceAyqD5F2Y>QA_fmoJ z@7A){CL{4T8XP3ihlj4>uvlGR;E8uU7@INTw3uG$PSPs8t_5Chy)`kTu#CrN)6VN- zFa{zNFFA17w#+-1@8mX0;*2`EO|ZW)6z58Xl4^U`dG{glrLw@pgCib0)^h(JKOUP&c|0DxI2pPU z5qly=19>R1Xjt-zRao4ooR34RG!?MZVQ32r`Dg7k$&m~|rolSdf)NrDJ_R^k17Brv zXrFlOqXcGfYfJR!W+DEv!pGefMC!{-G%?$wdtca_Ubvzt(dM%0TQ9`(ZR28&BYS$=mYFKkNdD2x<8E`0~{Y?(D)6_?3qu zqFIS%UhN-CCT+z+==>J>3|j6pzncSvkz1Y6uhB&1GuOAVeX($MB?xdKxcBSVF9A;N z?y{cvAaO@oiw zBOF}J79jsj2xzRjh&iFhcb^@;ccID9=hr)LJj_u{iWRb-4h9$Z4-N)=Xc9QJlrP5M z$d8-Su%GrdOAB!kf^*olyk`j#iS!x4(?fLzvWnq&>tv9P+v6SzxKE#^Teu8AbXu>O z+rM5dd9I+F-#}BN?I~1u+^!*T91K&fi^ik2yn@`O@+5_zgV$6hlV)3CbllWct$?KEq~5>!Wfx| zN?L_oBx6f~8CK?&H4q&HQXsBe9S0?$c>%X|hB{SQ+Q1g(bA3~eN8YP63a@3ApTK}`lUNadwv^&`tanF`4copRf7q`hAmJsODMtq*73 zp{KUjRtcY`P}NDj+@k_o-~?)PE2X4|GTr;n`uTdBhnjW zx33^_Fqzo2#G>!PspRD3_d&EmHX(5K8SBuyJl#2=oi%fEa#HZ|Y1qXvKR7sG=HXGU zTXQitUo8b`CU1gB9y`wauP)VCk66C}i8&Tf=Vk9Zq>POh$$N#DnH}~}yI&U;3;Y5T z%V{cl8g1a~*Bn;Q-kWT?Q=ItVWF7@}WEEzrWLO|QYsdlVKi)(FwSY$bn zg%w21(AVMr^rleLRokQn-iIrj#Bu;N)9Ksb(zbZaQ#ZR5nD-e5q`N8NHbg+rtaT_R zI5_p8!*0WS${F9wQ>rGy^O+xQT}{Uzv%wgG&8SL36PnJ5j=sgr_`P&vp?|ZVlrV*u zrABT!JWb4ueJr<--U1$TObneH166s}-cjvS(8`&|bPm`%&yG6gT(Y~psMAq;rV zN+;^_upaZ#ZNQJ}8ZIT!HH^GRYm_^!rabd&CD@r1GCDh#w9`H#1!O*Pxur9GrADxv zdOp3=K?|0>tVfPduDioYI{B_Vpg+B_-0O9(SD&ic@GVw8?y!4^$*gm?483#hW%BM6 z;}|g0_6Cznm82XvD!FmCpDcOb;eC7DbwhpQ`7aVBu1*i!Ch=@Y|kg4Z#YjG z#;q+$7Cd@0faOlEk(C4@U_F2@9|Sz`l48c5J`(e1;phn_XY@q=taAv|Zvi|yizZ}8 zX^n$L$L_hv$89^_V59>~vyv#_F30bV^#tHq!t_T)tG}-5PB3t_jUfP(^3~M*DzYbh z&Vj)Ec+sNgl}S&iQ2otgFH@ zeMT;Bru>$wrZ#7o3J-3;Yn3#`D=!6J-C23>V|#?3AE0a*vj?7V?Bi^w-7yKJ7Q6<^mXuB zA)QK>V-nnj44V&kH_8t{`xkxptY$RRjyNm*yq_S`EZTb zn!f0eVEPk$qVzg6$d8(xrE!!Q3#K4Jv&qclTQGwUrBmv{WNv6`AYYENB* z82X)3vkbQSPeEIgC|O}L{m6?~{YtN>3Zzwz4^O%dzG>l0z%(pd_SYz=lt0Fqtweq6 zsi=iOwBEC0OW6bAbge7O8|!p?CX7Htr1Oav*(sXHp!oAAXluF>04qigIWyIhBBnAR zhWolhvJx6~=Wss|IJ!!$6peP64B71$jgeVARhphVdD~mFw{2w)>ZKs=ip}7Q0068- zBLyCM)wXDm;_(=igN`i2GZxAza>(bq{K`jVz&nG(btQ3N%AnFRW>+!{SdDWKtT(f} zyA5SVu?+xi-ihdP3Ot#{Oi*3$H<#^VuTbFoFu>Fk>U3>i-;zwo6#epM;Rewb{V%Tp znhXI!oZn$@e%T0V2B%XP1^bt0QOte*!f3PM&Ppzvn7R)U;!mTzum-*v{XGSTgsN{%cj4SK|nc_?oS>JU z4<<<d@MloGnl@i)#yYuXUMIQg zEImFL)#VN*$H3;u#r4t!xMvnG(UjVZmF9ksQU&gH{z13+u5ywZE`C~K_EkLrPR`%m z_YAjZ>c@(-AYT^#AjP}3zc{cl5laR~e`06_`|H#%pGMp*0-N5pP?uIo)W%%n*A0&B z%X*1${w&t3O~JO~y;-UA!V`niex2TALA4u-MA99hO0XHiD7oHmk3lADP>`$ZBAHtX zi;IiXrCJ8Jsuo_ks+~##avcZP`ci9ykqiCtXI0j|S{Uh%vTy9EC%RJUg{Y|_@^30H z!VH@XH&Cb6ZG5<0v!}o8irx>~@OV0t#Dk%S=6;!Yewm8zKfG@N+*{0M{Re~`W^EO4 z?|o?A^7a#Y7iSpe%uSy22Zw6=rhZ?qyLN}<&FxNNGSFr3;ZP02)YFe<^mC*p?Qg-D>g?)z$BFq`OBStp{%2r9s#g?^ z1P%?6#-}=TPSCHf^>I%YJ~4#)UJ}0n60ibrgy0$i`CrSM)>pR3PXr#iW8j@!_KKFg zyrnTLNosj zOJb2qz^kN)jQ@S19O~@Tqe4yDmYS`I$74_5@fnlHE?GYi7ql6D`Ma;Ly%k>FTKTzV zK=O);FpR!*OQ`A&$)ne0C%YfPWPt|ZF>2Z#?Rw%Ws19SDfb`T;`~l>t{bSeNG`EkG zVC>p(d5n<$iT38uQ6=zID4)0=9dZ*BQ}3@6SSQmqA|-Pz!LNdPEt|0P4E6@hlUdR& z3U>tx%XC)AFkj!I)_kvEb&#J6PINI>X zK+_yz%9ltzvKG4*Lm!e5fmHTMt~@t5H*Uwj>#pDEMXm)ibUnWu8X9U#lpR5X@YZx0 z-4c9cnytAalA{%8%cbwWHOGr62&0wdjF#2cPtBqC&gKR>D)AAA@9$c+ne(-+&oa|X zm-{weZz7Uibti5X_Q0S7NG9WP!K`OU0Zj7anp)#(tnL;VQ0pJBnu}FGVKs6P#?V>>t zY>0{qf`AB$bd@GGCIvom}4)aNbpyrwAgmP<>?q1(bvIYPQ|6mP?|D1*b_BD>1lqOYyp zwNGDj&j*_klB$5`*p^d9T)Q62B6m{ICU5j7-y zuDPVQ%Rp-ZQuT;+4FmI< zKUDQC=D||A^Jo5TZ(G{7{r#VM1}mO6e%W!vj}=L&1`cxqUE{7idh726odTdFiJg~a zyZ)_0IM#POw_=6>xjRRkUZ5y1`iS)eRNvjlNwpWx-^MQv`^g&}nnVnG0P~?Dr}?WN z;Sx|L&jgbHvvkv8rzdsS^oD&Qeq)Z0!)E5iIl=vN7IPGxgLXzpY6VeGGoKQOKeodi z0`Z%~kwb30?xaw**62|0(5}n28@IfNgw`ohoV_t2VqgZxqpPz1Exm(npcH*DB&=2QZGEc@F_ z4e1R<5Bo(^85VNu&YPP1^G|jULOZ=*GnmjqEy&7m|H65pg31;a!mQ>wSb@%Q0tUR7 z!a8Os2|%3qF=ITya23!N0U>Mu7B6+7+XnK_mA6o_2-RO7CCtM^(*)!b2~U{?g{Z~I=@m2%l**<&DGmm zFNzK6@vFi-3W~8_Gm4n`Rr)Q3EG8I}sZ63D2LGn+4zw)tqK&5WAKB21?V3v$le$d! zPcS(|K~HS%3b~{JL95&Uk3-JRT0U;&&iCqS5af<+bJWWcG|!OQ&rEs)y}Ao~qkM;Z ztpc65g(G6-y~3abj*~mZC?cnLlC`a_6rb5H5{&{4;*v z7kL&$jj=Lee6>UaUDmpG@uFwb8FRW!s_gQkY!I6I(#H4i_q6i25R_EezDCh1*>O!H znxD5_@Q*wVJAf&AuaMiLn*lYY%UJ)}j`a=Yk7YIO$&-S9r>K*Kq;c!c=7}0yN!CZ4 zu5tTj1BCl9H;dxPOlyJEw2j}R%bq&Rx1EkOF_%c^3V%6gB z6L$hB1tBEZL;)%mb2FuVqK(7x><`RKVaFmX`bcBBq;g_*8NG(?g(TaNrs4Q(ea*Yp zZz@HY9D*imjCy*mKy&Rb>B3Uk{U)nfu2I2wv5zwa&J)6FZS`i$_%w4rqMI6@YMX}} zn!U4Gofm4~5ERRxk^E!ht0xII z5U@8;Lsens+6Uw8gZx3RgMF?orG%TfCCFzhhoJ>=|D!4ksGs6A`wySu<11gu!MUyz z*>7fLdCEdQ+aP>moEM!dcd9M7lvf{q=O>&)gUWY(ga)a4Jq^Is@Vq0f=aM&$hcVmNcFI-ey!=vDmhtH*_a7! zyb8_aWnFusltqxCsNb~*qk`vpLKe#Jh~d9RzZoAJjFC|m2T|@rqj$gPCHzWYzr`77 z%#c^#c;*%u#UH{0;d6}nq(i)O%oMoT=}!ou`C zZ@2_p0;257w0ZL^Rj3?=0FWImQPrw@8}*9lKRpGu_1{9@Ll38&Ss1jMJ{`Iln6+)J zL`+a#jN$$)cFI?1uNn+ArJurd!gR^$610 zpEKZQXJ@}d+K7=CXj_y1_ASLp2!obz-BsT9cb2 zdQ<-a?BQ1nXJnNukz8L;qzQ!1Sa~iCaXRPMTXquSwmD_h=@$9t=1+}-t+)5+(oiII zGiu)BLQ#+|?S^80$m?!>VpDKNwSUj^@ywC!?^7$4!7M%^ubI{U?13^oralo~mVMW? zzb4h)-Dc3bneXV;hp+t9n!k_|LB_l59sMkRUw#|WDX$Q#2gdmK#Sc|wO?`nyU^yiF)CtYY+PJCns2PFF^+6`==14Eucx;ZrXGDi z-^wUVBOSOZG*}T#w9OC^r?_L?-$S({i*tK<$9Ro(*k(|XB!B(j<#xpSaOnxzhgHUm zI)H|3H*~gtq&v0ON$zpb5RH)HHz67mQ}~TM7P-<-%^H3Q4OPrqvHcA@vHnQMBj ze0}G6+B(+8+}Dd44{)Yl?%SZCchEEfvxr-Mrr(tpo7>LcLYoX-C8{rq|D<*0hrv3C zg{=OA+;_teixIwzj@kDe=BscumYiNVuUkO=7}?(WA?fP0r3L4ht@iP^guZCl#I_zP zs_x@0PVbsR!})>;svM7@~-;RoG&A42>&BzT0H&Gqa9B)p)*8_93z6yj<|8}DUUgxB-#J=vKr;RIs6nB3>$&lmloB>YoZ zI8HyeqXYYy$3As&zPO(rYbKaoMkecYf0aR6HnLGGDQv#n{`+2<*Y8g%gpaL)kJWW$ zEP3aDzmg0d4PW0`nQcnXzXxx(`m79%n2GRl-5@58o=_y-q`hXCagCb=^5P%!WOU0- zN>@Ln!K386;&|_@hdaspElz{^+Sh!!)D*CGDB#Gx16P96FD&4$eSENX$IW==qu`dnH&iDgux~F`$ zndGe=OF2XGCyPz~o&w;3*s+FRIv#HKg2DM6#S6!wL>pUH)0}~ zlT_dCUwJFwWkhSa7oQFkXZn>(9xbonatX(+t)w#@R8uJGmH5bLbs6>EJn_br{t#DD zCJ67Lu-s)=Z&!O`TsDK4OTm4geTQin1jF~jY4vcG-3(0dje8mHWNh-h#qRe_#gX>V zzz~fDhALj&PNR&`QfTb^9eJldzU*gmV-~w#;oZye(jQb42#hV4LNR9M=2@y4QmHl& z--GRoNlBP=hLVurO6@+rhYX}MGY?o;AIeC~;m|IS%MNwr>8>7cK?vv-Lf#8tweYfk zV{lpAB69O+pxH$atsEW1&IHT4vA^$kcx}2?z!Vg;ee4bB0l91KdMCezq?3iNV~cft zv)MvscI8wP0%4#l2Plf4d}`L#{Gpb*RFzEsZf4!ck;toCYF7FFg{I5!i~0VK<>X#X zH@Xf4Ko;5YHV^Bq z#t?P~Qa;-cfCjDxOH41{SMFRQo`nKK`7)`K3q4?yW|7 z{0Ddc6WircM|=GQcoUD2qrr2w;jeH-!_yy+mwEIbytEL6zig2q7M_>Ie- zp4nh^C62~RBW)$A;Bqx*A7y@SNiogz5<{LI< zke4}dLAoVUdVo6}D*pDl)3l%jf=%IwoV+});l#WkpEmduXFnKE8F zU;_zz_ALd4?pReA?*pdS8kRH{TYOq>AK3%U*Dj~S?Rql$T=+9G*_l2@RZp(dOWzw6 zTd46sz@va%c0FRbc~g}%uVBnlh2hHMG9Biwm26H2NMW6C zqV3KA5Om)+vnA!ffBzoa=$og{r&AKZKofBfcqwmx-_rBwUcVVOxZWy%xn%0jc8TM! z&sG}n-DN{0xW&t1XL38W!*Yv=nHiXU?RPjwBq90qNJS^-i&2{_p99Bgr7e0efyu7J zRe!H6l{lXHXq;WVZ&&OGI+wgWwx*qIDX=q{{Kqg8m`^D@8!K zzA9|`=2U^?y|Z-*3!1p8`p``JC~H$r}!&kA*lCu;sKG`ALAK-1sbsa8%Xh!5@L zx%F?ev#GDj^uOHdLrdQOFQ_K|Tbnh>m-D|eQ;;qnWV(8uW!A=x`dEg`VItjAtkNkI z^F4P>x3}!8p-wswv%ssABohz4)0X)l#3mnFmth~dmo0Z{$C;It^-5n!*A<<#zt>6L zh1?ucc%q$h=css_C9rqPPs=Z~${cm7XXj6sCpJEf^V)>d0wqBTWkv?EX`M;cEqg^x z2643>)$J{&6cD^`XV0si zc*cpO*Z_{DzC()*IfqNexeuetrTL9nLl!b zz>_khh`APh6ts#pr%D6+<6fOY-DJ~IdrZx8{b!bE&(vr}c_7H(W^nlBGmyvXeejv!k}^k03EvOf-yU9g;Jcd@WA>rD0LO9DNzT%;;1o5r z(1u0rBx29ad;tDmKdKQH5ZN5o((f$Vz{4u1NO>LEGyGjKYm}>GsCjEFJevw8`TKAs zzvtfm58XCpNAd-(4>EH@LEW)5gqZA6xA4|<vXw!ToMjN?^uT@h ztroX+crxr}*3g62t+B%!H`v%wky{Z{e(Im4_U|3OC@PtN?ZOM-YXL`zQSk=@kkBVG zUVuf#L=|{MzSXLEC*QI2sCeukgi$9~_kwP00C~m_n3QE$iiq9Z;!Xp+wBee5*hVSn4uWLC*RAiq%eR^fovHQ`J z&>sk4t2MsVvC$)#pbm;*d?bFzKk!VhQjrJ@V9z^6?Crl~&wI^!?5ml+ecP5|7!|&K z9=1ACWQQjlm-snIC~^=#DOA_1#vvqWga9&+dWu zMFs}0kqrjl-=@`*vY`Ezk#P8;$sQWX0v_O-c^qt1065l=ufr22hzP4u80bV-Kb7Gp zf7WpCx>&w>-lJh;ddh{PMVF8&<~wKZNEET{E>;|14f(~+XIOyumA>P{tu?eM!ur_w zgXr(5_xI`a}4{~H+?GsJ%{UEpE<4D;Rd&JjnsuxL7VA+r#p^}Dqo$HI#_1wJ3m7D0NfI1ApX;Kx+5D_Lahm) zjx&xdh)hrp=i?e~JA^KVFtW6_HAnHcO6PXo4VDg~cN|B#M~h~Ma+T_z z$u#vDm3;aQ(gixD4F32)=^bgc>Ih4JP=>x$VnwO`*;ct=f;$L5A%u|IgAwA6h=F5A zU@VwkTor6Z2JYQ6IIYzQx`M*R6DyxU3n%VzMx9OM%YKYaU~U+Ym964l z?SnJNLJ7}syKqD_ehbvhXUi+$YFx(4Uu1MH7G3zb3m}Qa=VjS@DUGD(& z0Ay1HMhi*Uq4AWI1<~>7{lP$lO0tO>nez6`1(9276`gOD^+d| z4YIIapzLUC_Aq{W&YV}t)A6+_J*i@n4H>P_pw}4hwG?aM(q*K+e4R#`jJ$2wm;aVO zmm3QAFkOBu%g&vR#FOLT)3#$d7tg2mKHQD+c90Thq~kO2e@+K;bph!wEXBeH)&hBr zCuEuQZ?6+Kj?00m@FF&x2<`mlA@7c5N)=r;rCp?(reh@O%XdhX3eJ?5=F1nXP>x)5pM z6y;N_7hrHEcSGK&_$wwYucQ>kP7PsSlmG{jePr4619yT%uxbhNm5kgYG$wx?B;R$$HZjsZsvm%C9(4(_!G z{dD*hRj;_IL zoci2R7v*F1yW1R$(I#$>7adbWit7WK$`XK{VLGXDodrVTWa^IR4gn+a(;`cT0M;cc zcBDj|Ji|&*=in0?LqrbsF5G1uzI*);x)w#{57;-ft0|?1m&w5P=HYB&GKDmDZU}(i zt8889&W7fjP@=H^4W?Rm7JnGoL=-;r2YOXG=g93$!K`=3_~ru`*;j2}mx8$jN8uEY z!zd~u9{T8`Nuyn*<*LsbuA=AE>34M+{&VyvKG_>9%iJjL3#yxptJU|k`KGqjzP)FE zmttsqi~sP`uH-$B{n?Os5NF%#M;KN2-jYpReDqe_k6)v{4&&|%TT7{3Mn@872i~b~ z9`NZ%jBQ_(7_?{7FfozvlIr!s(m;TZQ9JM{i}~=u^w)LqYBXsJb6<*x5F#%lg9TK{ zk?BdcgKvat;ySEr0_M9s2>W4IXCsuL`|OXkX^j280PKKz55Ki{kwHp&5%K!weiXc% z>VgAI^LmRLIW_kTE=70;JBa2P-XIez`)KB7&xp^Vx2S&i4ZA_FV#UhF&hAI{XD)R_ zOR1%>4?MQ6?up0b=qAP~(gHT1mw=heGOytkqM7L&&kx&oz$G&-@tMV2oXUx62(-=m z=6mD_HvIOcipDvwn_aSQ=3;Kj7ioo7T;Zs8y4&22Fgm1v=Hi!Hpo^fPsqujrv*<^K zV$mKO25PM!g!h?J8jT(Lxb3gUUe03l5UU$juZ$}Xo8F%!j@^Iz(H^W2SA^xLc&qN; z40URbj2zX0TWU8k5Y|_IQtYN)m)d2&a_N%BJt3hThRk4Ts#hfibZU&^1ou;PW$EAd8`0hyCNCG!{9)Gaqp}^|DZfq4uM&Lvnsj9W z(0on?W>2n!#xtu+AL%E&w|}R2zwhkPl+`;hnnH+$N`if*-~|ExjRh1sMkj#+h4iWe z*zq4Pj6<%mUdlfjJxPhVqYbq}{k z?Y<}V=9wwj4PwY3Ta<)T2hFYOcE@p$d?U~7+17h0b*NC2gA?4W?<-*~@Q9yr7kPah zE;T`{0-l_#O2qu9NjJeR^mm<|PwEb?Uc1IgI^fjITONWQDcEF7?bZ~F{|-TRd$KfwDjD7spm&31smVFu6`%n)DzBfMG}%I!`Pu&4mBQ~(>q zC%}zhMwpc}?YscEk~zQ`QY2Wwd={>6fBUmAXb@HeV*qe#(^7w<{8X@lVIayksv#TIE~K=P3*MAy?!e zI2IYgRtn6{u51#JsyI12_u+9^^13Of_keL&LtR}xJE6|+=pd}T7?y?F-Rc9x4e?so zdTWj-Rl9JoBlEt)QkuJ0)yqeO88(5W34!<4h&ya)Jk{08-RqZ1O$OKz)~ zXaRVRBbI0@MJO|xE%F+e_K4X#kry1Cw@1|4g0+Lsu>M8BXD?SxI(~&lhp#7E_UGQO z4&}bjF%kEhb*pVbjr9}xsm}itUz1YPNR(Ar5GT;_J5eQ|CX{oNzL>?~X05O3?OPP}H^{_vkB48%%U|CP$YXO7kx*QnD8ga2{zn{5T;A z8+=@4uJB|tbuS1X#Y%MA0>J`7{R1acuif=RP+;r*KeM&a^FYIjlU7%cIdkTWmWDbS9Nc{w!!)yCT_CR|zfe;W7PzEGGsm!fk-Ow`|s~#vcKgymTQ_hGxJc~oTKYo@= z?~mI-O-m~WSRpp7#tdwu#8pg&<%C2J z-nYN?G&BS#&~~H<3@~J#rQ`V-AWCNiJWpeb`X4wt?aKS&XyDzgl_h2|Fi{M&eGOk~ zl>v5QxVfb2+co@11(f2kIbQ>*Y!cBbzSA__zlw{4{-fYF@&uGBfdI;`&+*m{+1hgH(xvT%Pv5Qg=AUM6Z*R*j*&k|u zQB+jArO+h&OXOsaUP8@l=+@lb%QkKuc`#UUhbq(%OkCqYH?4(3!Ho<>ySkTgJt2tN zr#8<~#{J#!-(e?P`;hOhN&EF6SMf?kLq{3Hw#lXTont9P;6JMc>Z=@1(2M;5*d$_O zFSQ)37FT)qb_3;8Hs~)l2iq&H-qq!ss<4AN$Ai9!M+5?GIj+vF;eQKyZeFy%YKGr&q!$DR zWr#Eute(H>S4OKUp?-SfSI|*|ZZ*VOpGJk*&v|E5Hzgy(FS)fB`DutLqcG?5=k9(u zV<$Xy97i|f-e`~I_xpVg(asJ2BNs>mfnD2$z^!`pdR>9I`llF6vuZF3HYjg1(-`zSBNG@ z9TA23Dz1GH2XBswvYp?keh)DIcgmxn>g_X^HYOT|b;XI7a7rltA8rJlB^W3|<8sz} z>+5@KZC4mdM2O)m<@>cx3*BK6z&DQ45)5+S+W3J@*$T@vM8K;^itSpnK{JsZ2jKy?9Be98>_sWS|>2O+sfKGVP z0mi<&E5pV_2v*Y5m7kZVV_@D|QBg4nLJ9Gav#7WoQt;}V4^)Bbe>w2x_1x%ah+X|G zrSp_yM$WrYOVJHE7zx2|$P;F&BXQHfK>I_XFzvyLzFEA;ovP|;@>oG@E!^qf zCG%gY&e3NA;GqK;e#bvs4fo2>NSf*^+Zn5W;xzC5NaF7jttFEt5U!$eODNPGNy%vm z94gK+i8!n(sZIDHj($+(16|5svjW|*5!)|5FHEF?;g>GMmx$%=$kCII_yd+b+|t5I z)YnYWAMHo9V4S|kbBlc7g0+}-U5ZOg%x`OJ<5JEH?(Ma9AiopKgamzmb$KwG+R&v` zugoWqAX!65e6Q(7p#Kcuuv5&aXCARbdWVPq=AY0j@PFOT$E9O!FPYv zcfm1FZzw1#Dh}l-r)U`%l%%GnirKj2kWoM?UxA5ykuWgxP#hu=2HbTUe!n?8QZiXdo`+9>xw*OhczUC-`SfSE4Lt^F$WJZc^L&3m>ab*8 zqVCN!7wnQt2b22*X3^NQ0qVDbi0}u!FR6R@(?%n4tO~R>_}kFSo9;YLbs<~vz&|cR z%g^e)WN z#0<~HYiwP+D{#_4S0$kA_nbCB!9hxuu)AO{6p+)H!s!PX(`-xHqqJZxAh+Wemx8LQ zh@U+~fx0-3^1|^c>F{FWukOEJhg$#h!dKU+ZycZVr#*UPdhCT_;Z6U2Qci{dG6I}?A2Kq~ zT1>TF0|UB%-EQ3Mj)1^$4%m>(%Uh~23pk3BfG6O9F-0f*Whau61h(wyF?*Ca@jyId zFuvs>q5lRkm=$Ip4f`&*e4zq`GF@0&@+Q0}Q3mTT@Dym_%f5;K_U%z_UY_v5LlQdE z(9{I<0C%9xr=nq|$9eK#qR!#G1Mz8(2{ELs;MJYb`zSOu#=bt3Q5rb+mJX5i_Vx<; z`P@J)E!hC4-}DI5LIb>ePXIgq5Ln}GDS%xRc7FnI@bdP#Y)(Co{p>g|SE^T|2*TQS zH#@)KSWCsT&ASkWukzd?ibcZ(j_<&Wai_$|2X8>_V~)?LEWy3khEc{;82gXl&N>#n zfXWNJ$ksA4m?`3IwjccmbOrRreP5Fy$!-oT`4sh=iaQ1y1)7p`Vr5*bq-lymf2U!AGE$_$@SK16oV8p`*d=F*O=7 zwek;daWtk7k&89sKP$t+@I>MA79F&M`)d&_alKkxXnAQD#j`sl{=; z1rwj6t3(|ZIb719a#!B4k64XhE(Y@#mPWTYZmOS{hJ@y_oWJfML=1l)GG5vM7WCXWIa@ZmWQT1da zi*I#a+Oq&&Yvb>SxPSTrpvB&J@1fmod2D`-1IA+}rVcSyEdUzgL7D3sw|_QQ*~fb> zQN*REZ|6=RbGW z#SZv!i>z<>^}=iQ(tc|bbay4A@HQ9uaeGSQO2_@ydXAOIPs8N4gB#d|d4LDtht(1{ zIzW1`^$3{*pyk3C2SjH{RU>{A39z26?<2ig^mLOhknc)7F67j0=FG7n0R~iYJ5Q%m zuL{9;m#RXV`(dipi)9PwMLBKFh8?{tsyKA&e)zn}gxNR>R~AmIiffWA&f=UZ8ePL9 zaYvfJ4rdW4V`WmEVly^~$<6)X|DOp$9Sede^y3jhIhpK3eEdSwW(KN1P)I~%{7KO= zUOW9@bRte_)C@h-0^)iMkw(whyIhhl5#U?yzIEce?}^{z`00I$8#5T1I`xHrrT6ky z$MK#=b;yDb&c~hM`>1uDM-OzWgaN*YZa9UIpP6t5ve}TL44{^}Z_A|)FR0C^k>mS#?fsGPOu!}c{CUf_Qas6V5!pDgI zl@4o(MfA3Fw~7Q2fUAx+6N32)G)?dGMrxT5GuGk|4Q4_S4C%2u+B66kjZZ#}#bB|F zjXvXG4&>(K?5bSQ@4y2|r)4f2sgk-~Sk+Ba&~42Bys8bgu)ulmUS)USm%@G?TpSz; z7EvILhzH@1B1kJ=7m^c&wnrf=@NDU1>L?OitU$V(DnaEY3`WZ967G-@C&ELd9DsE9_q*X^og?DG@|d~|$;;1Axuujq zukbPoht;!9lWzK3azyKkl<4DUKt$ks{^K0%I~KHs*0X2yLQG%4LV!rHa2-5z_H2zw z$9ZZNDT&|te|Trb0){FNQo{Z|Ir{ICzwwAr^o;qRbpu1;L_8?f0DS^_v-uVq8`}$a zs=FK<95>>j6?g(gg;+qmP0eZ@`Ee!Ck^X}}L2Ura$%hlJDl_bB$FhtBgxulLWx+(t&t*B8G>5j`AmPF)DU}0DVRT z3(F~RQ@tj)Qj7Ve#l_^3l9De#6-I&&3K~E;#)v<@znJ?bkHW8d$83_@AP8%_F>~M1qXBcdXhnw zAk?NwfSsf42NH7b_Z_Pg#d}HPFClG&A)bsfv-R<2V`a4yv5F506>8&0BB7a6mhW9 z=5FL@k~GSg`!5_>6A0L4k1>I z5NUhWb+JUV4Cdq0v(~P$YiOd)_-Y6_)zmbB(N{Af1)mJ7*8|SJ1e0xAOu2F@3cX4K zF5h|Ol!x4P}8C#`n4FpCup;|xr=;5 z_kCu)18-A2dOF>fn06p=Tym)Swx#dIbFnbj^Gj$mtVLVs!$m^xQ{Sy0bc>|!j?`2g zwa9?YEH6Bsf*kY-v50tGs59Kk$Y{79If{$d$~_b(X|gh+$KqfBHGt7)5+C9JZv>Ox zQ_Yp!maEs&PeN_3#O#bXn5$zfJY|6BAm9(M%{6JGrHq-zI2&9@3K>e*t`C9{gNbAi z?S!>cx=Y84Ji3V@7O8Xl^llAvC4T=zI(Z5PB&2g#W?0OjDjAP2cCHvxVFn@dtX76b z1Ii4WxGtaRO2$<;M$*cRbIehy)r*Xll<*K;iKzZ|MIa!=Xbs{@C3eayIgW~YW?H<# zPW~Jcv@M~1e+y6oi;7OhD^U>cFAOr&;e?0|HNSWP;t?rsFUK|ABfkUEdxee0*rgq$ z->f+VCj=8Qhy2hd%qAE4^&um!NpB@U5kzfp25!Jq^bZI;J;zIQsJ6x@!!-r`r<#B1 z+71m5E8n@Sv7^*7?&@06C_4orKdM!H>e&q+uF*?FZXoK`vflF*IZjzObz=Ib4ZIFM}Ry>^uwAKF;P#V}p-Xnns zd$@kKC1tc`jn^bT>9b2T>5W^*4%i67cp?h<=ZgImH2nPhWD?Phc)ZW8Ten1Oebzn> zfCA~JZcV?7^V8PBoy^6ID<$yU^YrvoeEPHmbMv>BMFK!6|3C(5K=B}VEWe{K0|b_j z-TRi48`#b0ZK1Rjey{sl<*!;FHt6ZkIY1h1YIhBf6B={t%{L(*n-6BRJH>wccH`LT z+c3p(UIjif$k*aM_? zuuj_cR5uoYGrs^`5SYD~{|v_=FO|{qFcrfK|AHwJ$RlOOhbj+S01tb}1fDt#*U?Bq zctD*p9f*vLiMd$OL~fa8D-MMs_f#Rpv<3}h4i;zac|bj3_V`Kv!CxH>$&3TQBH=M% zcZp@~#3!}RHHIuXpa81Go?iH1St#&Jw#O?XK`dMObIJJs+rwE&pd>ne-79+-;!k#* zym9dJ|0gZVzp&F^)lEttgV>12R-IdlkW0aqrew{Qej2~&%*3)@GN#VWn-wcJpYLTo zUnj=G;Od=iW7UoPwed;4juASl$p{}6bsVaf8z1@ruR*ja%!g;J7DgafQ{Biy8HHmbQzP?>Jh1V_)<-c zxL^B4>8nPa&4W3&YqlE0&(K6PPN%wR?ENE$m8748x;t8XKMN4b18*aZ64hVMQY1V9q#V!kzd+uut}-NXLPg8CtO!Fiw)H7DS4t-fEz zZ|SY=(gNKjiUrxp5@9CfkUW?2J!GNo_Jx}!;NaExrX)t6_EbzI!vp25zFC=n9aI)O zB;v;?9+{R4cU*~;?xP-^FcMhKQWf(T?S%Nz%>s?jOTm}mAR#BfP$m>!gIc9?t zVNyC+3*A}14X&xte;p(GAK4BqYVA?uB zt+}Z-c@f=RJcX}Rs=pm=h@*P+Nlh01F+JU`UjqAd+6`e#5bgZMA$Bq_@4;m!+m;dG z8BpfrH{TxVix7BG#^V2Ml7ts`Eh#fRvQ*AfeE#vlK3f^M`!Uq?7Y!VMj>X;Lz8sBd zaw)90{rcu)8R})4alU2e1z*7Nd8N+6%*^w^qo7$}sM18<_Sa{HSV8+43Dwmzl!4}` z$J6o2BXW#q_mpDo`n?L(YqTsDb@=Mhr@y}#Q<$zHAjNBHCikw?HN?YR{nG5cIAUQ;K#7dQP3CioHZ)3dv&kNQDa<)=e25nQihigMT(4ed{~M0;jG*PnQUXWJ%?KodsjETG)) zp%6xYSQ$19=-U(tU}kV_n*6oyjfwgRCWfc~yu_zv3As8k%kB$4%R~Zht1wvXCNke7 zp6YAbyE;74uKED%slUH*-d5YHc*fe@ve*__gH%pPb}mp?0eRtWXD;WS>z4JrajcH6 z9+iRKt@H z#H(?uP!Zcvisz1ccQ84LkLkvW_;#yu88+bNbqMhtvPbK$2~QSq?&}V*?Alg@`gqvC zf1O+ErKAzRsH%xw;(8H*T4;yYY}ss3cr>P@il66am@sZ=QBZ%s-$o` zuOy$$l%M^({)u#KA4tU!?-@ZDJ6w8r8aTrm<_v#96JOV$@ zi0cr+L>a^}Nc%mwXj0E`o0kdI8TW;TBjYKsD|}LWGRnWBzy7toVtg&DmZ1~LWK{nC zmvv|jp8tW#-kmiYOgWqq<1XL4faVzE2rz7PQBSm9T5`1E__D_RWj~jaKN=3R{&NC% znE#LD8$(>jx~PBZ#HnqkK=+}chvwkDSUmtOuiUcV`cBzk4AfL~sg;LTK)?O0i`W4y zVO{W-uQ-Y3-760X)U^D{nOux-;`4$KEwm1^wYH582w`!$mC)|B8)Mo7#P##JSD@A6 zMC1;%2)wPAZZch@7W$RzMNmL8i>p^p<1)s19xe$fRXE2)h6XciXh;$lc_UknKxlPE zYnt4g-T(Mv;x!~~!e8iPAc^fP5+{*`HLkN~VBfDWva$YFyz6ks$iGb`6wUzL{vCt@uH2d+#1n z^Sz=Dsi(WTg$#wsMW^BHd8W!Ef(|$IQcbcx$u&L4rAST3Z*S~fiMSz-MH*phY7>2I z$LFrog2(FXhMR=MjWj>b%(`f5LBQd}<1^sHWj{o3GgyC4iHCuqsi^!wYw%PUJLw^O z3nmb!B=i^d&hD@g_vHv%padQp^Z9*k!I9;+|2Qc%HB4GY zEIP8TU!fKf`{YFXBz8kN^V?XT)a`ur2*v!wEs*v3v=^i%ci#1JGY~QXaj`}1ebtej0c5u7)*taQd9x^ z&SPhS4sGWn0ySM9PG9+k66kHFkOONh2;u~L<_ZjXz!NF@- zZbj}j-mbUUkbf6APVK#cUSsy$$OZ-5jmhDFy*|f!z6AVW5d2^oKOoQ7K+K3Ta3bz0 zA|DbqLA0|7b804rc*cOS*%xj`mqZx&%55wnfazoKY?6qa83CL|Aw5XPGTC-f-T2b) zUpwJjBtM*YaqW-)^Lv1L-W`9xs?V||YJ5KQrl9W};#brqD*bAy30xG^2C8V_^7YzE zc1d|l>1`=fGqaO`e6?@;PILE@$Fxs|$|_Cznmw^un^GQq-NeN^14J2&{bg>Vm3lgi z6(;3bivh2@EvlV1RzpDflb(e^UPmVJM;U(-Q(2%4IAPAfNmiWe|kDc za?6>Px{scFGp|y4+RqPaaQrQfK7$~6fqPv)#@X47bivHDn71M2-|xyD{-M~E4$uC# zwsREH-P^l8{qlv5GO_w)hH%1XOyhNk^tpov^n%6|fhJtY-N$zyEEd1`8Nc@05tt}9E(92~5L1uN<3=zJkm z-PCQk<|?>#uFy0taRCDP{c$Z{!mVbM!V@MLyio<)YU5!~Y8ouAbMqUBAl%Q5WQGq^oQ5jTQG z)cNGy(j4#=WNuKiqXDR_>f0ikq>CyCQq-zuHw;4aglv*Z+ zRlyB_(&k=@8Y|xVFr&@cAk$I@893w?jkR7hZxn5e4?Z>sR*^wu<3lYVwns%z^x<4iRaf=v)#n4qLtI8b zvNl@xUg+ouqZ~VMc%QiDI}n-Kut>K+^wxPhP@w{WY|X{ZNdhMjN=rgpzG~QBMJa6u z082j^=H+fe+5a1oi@(_0>BDsZ&Y8((wf-CG|bGoT5q)pa~QK`x{{pt^9J{LlHx z67pAh(DvY88imMzxo`Y?8vFlz+5Q(m)@a{cMkc+U^>=aa5w;uD>G!PEfl%1lafYT19@$wC> ze`q}zfe;L?W!TxHOBGT3@#6=`lq{6@@9duWu4GZw(Xo>6f&Gi@gvwo(HTHLaH&OoY zZ~boz>q4b21?vUuoM66jkGNBuhi6Iw zUKz`-qS9KY-acY2w;@%le}Rh{z2oBH(E{XS+B!P73!6U;e_T**UNaK#Z1?E1 z+0yhC;g#V{PP0=VS7I@k@KG0XHIegVS1t|yg@8$ZwC+zTI^A8371RzJtUrV#jsM$FApXJPB;^0&bN0rZ*UtnhHKYamu{iS9yl~Zb0OGOAux`rZ(v4RWf_Zs&_ zbXUW;%kCA+?1>4}E`3ImD^6(}EY$Y)J{<<(GxLK>bb%ACb!yb|^bQT_?V)|?g7)9u zDE)TIlJKkq`-{hzF#bi~9-qjZbR@6Pku0sk#WhpfpLWS+O3J*KexSc*eqlnI=O3lJ z=unL_dESaI58y7VZ)bN~Eh(>C(zQAvNmxG{$#lYeS`|_mNU6qll+&l`>&_`#A3_>l zV6KHVgWDzW6K!6&JH~)|ZyKXGBSPM}#_f;GrEE)l^X5b~@W=i*L0G!~C&FP*l1A$- zae4jFlPpZ&SVaW!-=8*5p#-+Fo5sN588Ld+!W|7q>Jqnc{I07Fqg1w=$psse&2pweql1O%i>lP(}g?;Rl^Dj?E(6QuVD z7?6(AyR-!99VsF7nzDo6_xtVc*?;!z*_`vryf>LQbLY-2Gxy#R)ZDzDeb&wFl>{s7 zbV;brnYCNYHxTe1VLdDl3?oMhz8j;E;?6!&--T4`Gl@pX`S}PhL~uvYdFnI$EqDf4 zT80F02)HcTw-=_%*sfqY%4gXv0(InLQc`6jEEkZXRt%pB{kxjGTxoTi-^FHM(OPv& znQK+Sd&}D7a)GIRN)KP%y$v+572KUN|4DgP1$twzFL%xL7VZHvHLp?9@fz2B`WErG zt`MPL+xE2uuV$)!PSh|(;40pzLJwDd8wNOq-ti2IClxz)F&0xZ@T_q~y3)O4B_a|5 z&U6c6(hRpM4jL$zN8(bM=nQFwS~idpJ`TYY&76gX!TZ(}NY_=YEITo)XS4Ek7Yr9{y=v8qFgTT*lqs7Yf9DaGEP-{ zUOeuIuETgYOYZj$)6J+I;k^1uNCzaHw<#@^f@$5Ri+`VVe7z)9v68vtlV)}Lg^gWd z+OmJrS!T2&7 zY0oBnn*ioy(0FZlLt&5YbXAQv8tyn&agU4FcNeofZtLG777#%0ME-&uJGS>g5H>&T z=UYwMxQf@5-Q~g?x~y{g;P`ur-cWn3PWjC!w><17csk!pf#P?LG^y8iRgN{F=Wkfz zCeFp^;E$So&D&gd6=Fs=?&}P*>!(1U_l*-}ic=BU=3owBEf;N>PFFiH(J-cyzS)Z; z$`W}!Cx@v&=yybA41MP38Rs3kB?4SPQ`@n-&=f{)52SGw{N82C_4zer7~RVQ>dV(H zAw)7H^?SRNb}u1Y?^Oo+o}Z>&6W?dW)IFSDjz(E)R%r-ner!mi6eAg$zF zWyFhnOSywycdAu&Guq(ag^j_PdkMK(79RXz?wA@MnPvK){5e+UjADbT{J-;TTHfyCpk!y%tKp=kba1KUUZD;@nRxmiJ4~y$ za$>OiO?4J=c?16Hl=j4Z-)$?BrB5H>HWM^lDk!d!zkjUC%LpnFpkiz!UTc>BaxCOr zpcQk=ok2rij)e0;bcc>lxEDKduI88WpSYr3_(J_Iha$|!KUzL_#^DtA@~>Dh>k8*% zwy(X-3^#2;=awmU=vsS>iOFyMOt^6{VSK@OY$*Cc+LbPwD}6B97!*rmeLf+Zu33SzZGZR9?ZQ&2n=H1bADNxE}oOz+-#iudm0)Z*N5o`c_Y}XnjJ*#T`C#8gh zn{Df+Jo-NT={!u$vAnZ3-B1StTj^~#7zx{>bAbh*^)Pbi<3tJO^`z9a+vYFTRn6BY zHVXGw=1!jtets@wtLuyQ*b*mLdQN^hNEI&B>n_KZV$c=)x=qjF9_Vj~y)p61#zQ~6 z`-lS>eAiLJEkxgLJf|vtr@FDar|ER>xmlgZiD$06r61-LyIwFwnLXr4-3vOt2J}U^ z4faJzQ~8ZY&%N1KcZxr(O&9YEQ}g-uBPY!>K6oVY(R6#9YWMi;3rO$4nc+8&8UOgUNxs^XKWfq2dtmmEutpj}g|L zN!&z!QpljnQA@wx>3t-G)r918!;tqADIWX z3&MDO9lBzgKXtHP?1gQ5({13Zm!XICWuKD@YuG=GRWv656=_Cp7HYcET}v$V&7HUq z))O~UShHa6IR32=nSq|HsqD{~Fm2CP)7|KOApr3x^PhHObyJ?5Bs`;jVIrZ|(my(o z>PirhQa@gIEgn4@BND3;Py+L~1Yi=Ui@)KS|9a)_4KbG-y?U>5^!jYwLS!Oh(!lZi zk4cXStv==lt)C2PvlPw$!O4PP1j+M>!}3?a-o_nY|MjTutBFMJ&4p22U-M|f1F+OM z*XZ$)bq5}<3Ffu+>%E*`E_Oy+f@2vJjKZ#b)=j+#D+aAgig$(ExV41+9aQRJi7WlW z@7pX)VLC4i^FSgZ@JNn%ub5Zin~y=l=dfj|_sU5!H0~vYN$cstgz5L_FTl^Sj1j z_&?PR9xvNl=%#BfT79r`%OLR(e8zIj(YNs1H!a?45yd-|YctB)0~GV|PD1aB8^F^R z|B2!*6*lNnhMQ7MX^+8;ODPYY_bx-_ZCq$O)sFeay;_k=ybNOF9Mv|3z)wIbWv7w{ zT8wX4oWZt?8tdy9E$Z;vI}+DSVas1s27WfE;P?t!elolp=C+9QWqdPZXAPmddNpZ( z9o5mdSN(cf+WvF$soUhFiIxypJrV%N4q1Sxh{P$S05}w8sN3^ZW^wK2`{+fn2HK>Z zh1?8k7Rdq@xJk|#VLQ8mP3DV$V^WpjswKKMUEFIc6OaMza>MmgtNXyEhPLbgi5GiSmMiuloeN-VE#U z^!mfuXi$?vU?jEA%+2o0)*r5x`ZC2t;87nuIa4fElgV3!Aw&4b zUfRhA+AxO-h0696aMa@U|Hu#bIRaty+Ka|FHD`-^ibYmdY2M4p`XCLSBXiQDP1&!J zP8;d^n~l<{iarAK`hz=5J)^nG^yyANDN=;(^|eYcP6*|py7k84uQV4WXH0EN){YG* zDeHDvX)c`8SxLljbeQ3bcdKola90hx3xhccAEU zsv8YspI4epQlJSYhC=N3d2k2KV7xf0|8-bNkv#gJviO_I$7y?=CBZ5^*LVd@cZ{5! zVH%^#{0*;^l$C|RPVCJftOf8oclBawjb@h1wd~1fU5ioXyLl+Or+we5R&M(P$BmVA zu8z^MuRi+=3$KJ;w@X5`>@A_Drwc!AAe<}4B`x+7MZsc*3!WaN`bA5PekW+ZU1ncH zyv4G8-pNj)w0rd(ZmFC)ft8wrHwBZIQ%7EFPD)Xm7>SPqhv*=m15sln!9zs&CwfC_ z@0YAbd0BSN!P9$`=lgB!!9B3xI$rzr zB?x8F%ud1~H}KAC%%Wr3DKXu?aIu3=2ftW7;@ovnd`CM}AgHOy_%xDfG~d8enS$3A zD++&=ae_Dw6)-1Q5u&q&93=7&DY{Qj9TYm`R92|5p?nNuMz$!l)}uMpsMB&qFnW3SFoyhKmgDa7@{7o(Out}QK_%7tit2CABeK5qG@b3w)q90?QoaOb{|z(6 z=V1;MbV98?-Z3A-UtH$q#y*1MEmALBfH^IG%>#4r=RJwEKj9V zY$IDk)Va6p@j5t-p=v5-q+tFygKL&myX{&3&JC=Pe(dr8<*U%GWq1&Tt_0>;%XgKD zkAtb!`$)**VSm0_Hdb)hAiu;SP8*KRz0X+UV9egM|3#RKD5_xoMd$zNV%zhKG}gOlPcex`SE89$d6|GfvvFkzih;r;&hmRDFFw4QalH5K_s~{(dU^S2EOSSFz%UFmfw|CsPp&TEGsQn|3km$YAEJvBN{qdrO)Y2lXlZb<)6LG zd>Zy${$08V@jc6iJ5TjX?TWsakzVkp@~1I37I_2)HFqYS%+(%z_h4wJP}8RvT~A zujQ1@G<|{f62eY0P~Gd#{}w27wfx4NLiqb<9V|0Rxhwb)&)~QFqFx!RV+*Q&-?tt~ zZMV|WpyzB{6PHh-=}_lM+=XDm{QWL&AJpx8FwR@j!?gpK{Tdc%5hw18 zf31WwTe$L`#>hu7txj00`Tui=3pf*W7=UoLty$St^m==~tuZy_?;ITDmpb_8`H#llV^2H!k9X&OHVJwyM{)v- z=@e)%Popsqy_#)Eg)G%2^ujZ``!ceEEQ}NWv4S^K?=q=WSy|5$7e3B88LbyL5fM_~ zLD>zLcUZ3-EK-L%;Gfb62dLur-7ieLH2I%|DHly{y3=w`mSnuOY#JP;6+oC0#Ej$r zsfk%{G@aP(xs*#Ck&^mb-51#7MS^atrddqe9o}tFKe5TCIxV`Fb^h1>Ygq2C>hTNu zz0)u41NAnl0?*vCcA$e_4ZYWg=0q6O9!;Z6%eMV6k%srSa?}r?+h>}k0 z=NL{6^Y}eWb10U9W|2zz5XL#rMk*~q|~0Vv{oAEngit0_IS0# z;q(`7u~I2QNJ(()FUK*eh@6!!gB`CI?HQz%M&+rktpY<2If%e^9JM>;%Jf8ok@ zw3Vf8{DV!vnBVLD@H1p2@C!H!0Kar?YS-`W1OFQ%cKVkQ*Hzi(z8#WPrM#XnbHgl> zEFm@H>QnRBvMm+!hsM2k4IN%!&OW|Tw+t6boEAMA`oZ#uWv%#p@q<3V7lwd!M={vm#F;suNQ+$ItcF z>Jpyf`F2};2#dMzm%q_x2p8X;R{Hw{#_Re1c;(b28ReoI)zpLiI=#En`(R2*xlcil zl0eF$vJkw_a_K;X)nBxeG>Ex##=@b@6Aol0uFpxv5BxzhI2DUgE4tYF2m5kw=)PL0 zy^?E-N2JwX7!x7uw!s!}6#JbnjhHH$peNw}2NQHABmjx#HNTh6aOsYzXByX?MoE^f zj++6B%rPSyTx28YZ&%^Up?6`^RlP^14b+WTB|686lIZH`Wozc`M3Hp0&?f+4rqP?kFVoSZ86KhrqJ|lzI$tG z72&k0oq8Pyc2p~zhMA-YtO%;Dhlo%^B|BRud@#vF8fXdk5tyMn0>4mHy#MOJZ7SK{ zAe&JWc*_^{LVP+Mz2z$*z@-<{tIDV!qGM@Pc=0tqF+A+g=qNePtB;lkx9~lM%|hDJnt>F{gZzk2S8A1k7E?)`=uJ}lc9j;+wSpE^VxLP zJlPE!IoWzdhugWe;~8p#JhiR4+lz6iSFH;>;Q12NIl~DGJ?m$%hpRhQWX5U+4paI2 zcfwZ7j{FnFP(k-Kn;lO@$+AN(*Ja(`hYm`+3O3C*Ulz|S4wpLBdPv{gYVUSmL(V<% zOK#FMS;n}%V#-gLVEC=ZOQl6vSw5mQzFyklp^6$XVaftm_>s@gyV+CsNTN9GPru4! zTyyyKQOME9NXZb?*#tZJCVgz~m7m5I0(1*wQ^_G`hF@8P!oeEm*g&$Befr3vf$MOy zI49>xsbTrgVe$EJ(5RWuK1%4*y+H*=VK04!dQeb?;3_R{o_>gc$B3L^!@P6D4Ct`T zou)iK{`u=N4*f;eJp4Ai+~O|=lh?Y!%x->BS-Kjz-T3oatKm|j&UQwy1`B>6>aBmL z0m1F%bi0O2l4lPg5Nz0XtD{31$ zAMfY+1@pz^w6>B;9lXecuZ4Ml1&8Mz{SQ--{&y5lj>1aCarh`W64OCV+P9j&m%x#0 zxFuk}COxIQFIN|T7%8%Tu`z)IeQ!G78&0SO8OMtGM5ZJV@f_)+i0t#wt#9zPV#>d& z{n2x{u~hLJSlbecu}P4qB%J_0t0-hEHw+BfB<4nX;<5;ZNB9M@x9$8YY{kd1E-mJtw^>slL=M-!wnT3Dn@JIPbr0cmsrhFcHA9!xZh~35vyTW|`6FbRW)*!3_A#f z!C?&bIh|?fbP2ZpDS!mhJxIS06%IYDElH|uoV7iJLI2vghUT?<`zrWdV*;kR`?Q0x zu)f{O2I5Qws=jv@##}Ka7yMeZa+ce(gBHWEd#nWSftZb_UNdmrDv$1{`EisNZbnsUAezDDv59}hNA%h+_|#G8s|>rU69n+NAtp#GESvlM)X zfUPXO&`{I8{&0=X$2DG>U{{Q?c*-+#409X0xU`ZNnnMwnYWbY+D48XF@9j@vq8md` zD}FEYPJFBM%Fu05uzS5NZ9iSnxBieLex=E~NBFFxZh@7&hd%Gbift9ZJKi^VU@H1y zePZ8!7rjh(1Dc!NuC`j>q{4PXM&{D0s8XtV84(n0HJ6b=W#@zO zvm_GxQ(Ij2z#Lvbbhv(ac8fA{54U%hpO|}+O4cVrFI4x?sjaoJYSf;0U44b4?%FCt zvAhHZW?m1V^c%n-wfbr?#(F9DY>Xn1uW%(Gu~H7+4C|_7N_S0-*2pr#dkS<{sO(3$ zYU)rH1tv}Y%ew>U@gAXLMY6;l<5x5QozTyw7>P=L;vs=>bUer3&{{ml zeyx7*O8R(pHOfM30}JOr(jU0T9i!!6F+c73qGM-*T~q`BOaz>fHwwk0xMhb?`?_YMj$Do&Iyhzcv29%C{p-!}>wWtw;3>5F$yiYve<%PQsdd^Wq3g?# z=JJf;ILB|Vi!uM|FUCZU*G|G4p+$EU zfV^+~5Q$t8ZXF!{u!{9H(b?>nIX)2b8zEe`J9$&BBIn3oX`g%s-jkBXzC)Evp&5d% z+;0B<^mD%^`#Sp`yp@4zJOS6cu3!40PXgnpoe?XsTB$}nUZ48{Q{SZRZY1n`3~OTY zTEUf`J! zRkEfO2d*3p8^z|GA+F7Vtm}Fo44e_04QlSFoWdJkCFQT#AQ0BiiccPCIY9gTt;%wC zJ`9ENOS6nM)a97n6WP=>Gkfc^zgC#)P}@`Di_v^PZMbxbm31r|sy&n*JtH*Wt)8>B zSI1J`bxM;L&O%wJ-71}pUuQ@UU$NIVN>qX3@anVs^`&$I@@E7az7h{5=mNrSb@Wqa z`fZI%F-06;M@63yfT{y-r@M0RHrx*@^J@d#H&VeQ)5_+hzvq-;*K6%g>QRKcO{|pV zk_igr3U653F+cXr99Vj!>9;)4?5h^7HI4P&DDNOfLf2Pl`XDE6Q)DLu^b|~M#G;XG z>u{J?IU7RzoaRxS;8W+)uw|dvK0`;NXPy%>&&ul^EZ*K$Ii}V6Hew%B_b_k5N9-}_ z{Abn6B?;qvRU;pLb>$c-9x-rm{D9Dvm!NB4p9Takkz5j(F%fuUyy6vsJ@JRmtR!Dw zK3zWE{xm>z$x#hyw{Wp#BKBB7n(U?I2{l6bW~;ej$?1heek;QHXS`|(&`-&s;@Y+^ zu5R-SV^`yowq{8cBPHg3P%z;4lt?2fer#62G?zRBKzIlu$ha3wNEP$74!0S<@dBD; zGdJq;`wFq5$IDP&qlUJJ==HVr88%O~+i&XWYPWBuYv~A?D!mG^(3r=-Pua~CEF&W` zJ~1b6oUY>`y%%q&gSP zy!Fu!4KL(eJmH{b&};DFLA!HU?5>Wx@^9L$Y(1(Y>&0 zZxOYpPi4%_?}G4#SFclyjE!B0ExblSL6Ic*fa$I-mrWxFlozBKo*hccbef;-r=B!AYn|F|2*Ct$K_dZYHcPCzk_x zJ4HzP$?$M9F>VuINYJ(_#vI_tRGIsUe|axPy8kgR?SOFe+EXek8?@-a1j)_ul9aB> zO@nUag3ANLUr(|hCDe|V1z%R%`ccUhwZDCubblWzh{NjkP}}csto{k!2G6xh7s@B@ zUbpGak+M>`&ZnK^Ncy(p-Aha%Beshx4yXKV0Wm?8B+JJ+Fu~|6E#6utXcV{MB|R#@7Awb^%0 ztaC1*t-Pu}I-cCcVwg=&qP8s+N&`%#DAhp&fAJBG>o7sB$V1Ei` zjl-Xc8pFCOK7@+u{OGbFJ(;qn5FYP2>|r6+i~PKL->-}3&k$4bIOvMEH`oJSVPJG` zDcA8Pn6CJ!;bX2&Karp&tsOgR6Y5?WN}0BnHN95G$Gxo>yEP zJJcKav6t)p)TzJQ#QdnVTBf@#!gn6F;<@akyf9y7si>1J_N1o$BUydR!P2XTrSD~w zbsgt?9XFP|1c@QPd}`>N2l$!?{Dq$k`SS=E$+U3Eezn#!OYG3Du&e^bjpm^o4|l5jLfHVYf=d^vf-BtDvBuLwN+9kEvJw_&#fmF=<-%gMAr=w zpgZduVLJi|mo0}{omyLag8;%eNXtdzMfGi32cKu(uGXvGXK(6%(qL0Q6;Uf9l3g_; z;n(6}2?F1KmF|T(-p^`y1BJZAW?^qvcw)zRdTWIOO*!Rb3owtM8L^3&b{EeoUY9HOxCzXkR|* zvRX$Ewdt`De0~Hv_4I~azaK!QZXL6qJE~~BKqlR3`aA+lBfodpUhdf#ee$(J z?4VzSVX$dME^#SuICp1yx?p|(POqCQF7N1wgYO!F?u)#IHtm}2X_ro=RI130q@fiz zIX`=--L#cD&Qh)$PyeNT@HzXX^T4+~5^NFJ*?HOWK0};nI>)8+B)8aQ@1YA4PS=cA z;4zcJleTu-(-rjfl-~5q%hIhNxSOWj~qj#zT zhtH^&W@vG_-R17pMcI@5u4_GLl#c|GrXQ43UOrl}t_dO=++Z}=ZVPpEDnI6VtZ;nO zCZ#&7?h(z3;wXVp6P0-s+w>Bk-m9iM&1gJoT{G$VqgbYI>V&=1iL}$?)E@&!a-nBr zRFcJu$X!ME{>_({mm`mUOcGolE?x{=esw=LUrkZv8Ih*zc!~hKMg+>FqNI*iV*h3j zac}xbMnO^CR)@alqo^KCQ9Kol^gbEJ(|b8qsx)oCirnkCRWFybe+rIW!s2-mb&Jaqp#>eJo&i z&z{*|VCLe-p(Q8O@9#my zHQ{e5_TfurNT`fydwSwVu*}0!ikx_1_jfur>0rRQT5@!MoDzGsVM!+m?Q*$Phl5`( z{Z_~xSD^iIi_GZ(ftSk?NN(2M@`9Irs(H_ zsDv&Su<@hC@tri$iLoV=`7+<^sf*9_k`j*;0vB2tUT_bZt0gvNW9{IywsIlNC3!!q z>b+cz-CWGM`o^jZ3%^u7HL9Q=QC*07Ax{%73j)Dm*TLaF!@czhCebJb96SmPBHeG{ z9i?|SFSCRj==NT*l-s3?oZ24lSEn()&+t&E-OQp+uckYA;J1cy6n?*Gj4Zy|O z`w;}$4U#y7YQ$yFMY0=S2yh@Q>J+(P&spU$Pl7YDD>NPbiU!Id17Y9T%J(@nXWj ziPoYI)zrbVli%@9KkibXTP^){NUztPspRp@#b1U7A4pgizjnYlF>j*)MzCDF_ThS@ z^t}~p4xxp?V47>!&Nuict~o|9>yb5UKn)wn0=x~pZ<nNMdPp6iu0 z+-{_X{8|)f-w{(L^qf7_3k?mG_1HHvp*|k(oNwrGyL=Nw>%L72@4-tyxLdo zXyXE+-<8Xk@7}pieC`}hg0P?Mymg{W`+=JAV+Twqk@ZNXv5l&&AiLVwq$fdgH){%` z;jDV=wsD`(K*9 z>za}7`}M});|(c$txxs@N41&vI|8HJP|a|ANBj12^U;b!n3vc0VHgrY@h(Fx$9&K<_sF z#Qadj@q1Ek{;GOD;>AM{gzTysSDC~<#1g#%`_y0^Ccl3<<_a1rP+5#US_|^B-%&j3(gqQrx30<~+(wF9`J#;9KZLrQ0fzANUBDwqz%Pv-V?IX)yC+ipe2*z1zVt5Z zLIGI)rno=17P)K?B}5#dH6dO zHg?zg^p)Sy9Y^c>mlUvffY#g>%ZL3|dV#wD*^T4R?f-3%C9F{#x0q%&%IM>#6xv^7?2{x~f`u;Tkey-L25DI4o0t=F)jGGQG!{fFvdCNgf8j zXIqWePBFfuV@SZ6-jsq>l2DZzbW?+)nlGhiJtZeYpO;hiQMASSRyR*<&Tt@5J|6!m zc=?Q+;hjuVU9Nb^BGB|U)r*S@2(Wnv9DjV`URb$Ln|>oW{KvU*kGHCo+}R#HROl`= zsTu+U^1%fwjSYUGQ+ag?R7)9&!bsU;g94QhE~PF$r!Z8l6f1K~X+H*TMD(Vf=Al)9 zVZKvxfl7pX6w|)EOU$C**4ddo%*WRs(LZJIe6$D%yY1~gbgX=%^@2vn2X)@!rYRYpfZqjEn|z7)(%ht~_wP zIyya7CrDV=qbMRyC%*1)RTtRS5`)GsPiWZDQ9Oi<3jP4z8ED zaDL|HtP9Xanjqa6mZ^lq*GK7>y(WdM)KZf@lrXtX|VShKlp%;n{K>GsEDkH)SkT zn0bm*GM5USkeaiGbJjQvPlNRPcrccq^-3Pi2xz@sTbzRpr~{o&_Bh!_RANW*9TZGU z>2D<7UXAkvk3ZBX6QTbvw$ zgTf-oVWjJqxuvDMa`A+taW)3WOUO3_M#oF-9VkN+LKlmQ8WH=u0*u+92SSDDX6I4HZ?^G%5`wL)i#DgiVzxOMSA%r3&%39rJ`Z1 z+uP2QPP>8yf}p(l?(!`%(5(nTkpd(6Nc|K>Ll*QC@|#MTkdVtm*&&OMeKgG#dQXF| zpXKfBNS6<=^3Lb+%pJ~knF*8~;mcM4Q)a*VJs&z*itq}(KuX?<$wI-rzs}E_A#4F0 z9+QJlfYZY)p@6enx+ijSg+|1GAFj$;U10d3ClTTINq;{PMNHIOLjPgBdSb07|FC^ZV`XhWXd;Pb|W;>&ifw?9X7Ihhz`*$GQ>4 ze`}EAxOy29y48`A@R)6$fo5cc-=J3^&OZ?8c>r7=mwVCWtZj$i8Y{`zm74xImEbHW zi{8sDsG@$H?uiMhPTif(A26L<6-V?$#j7TEFD%4f^k;g*{M7bb@D}3JcCdw8P=bRHjonXDx2<0E*A}hn@ROe^~tmv z$@_n#-z9v0A`Es?y|w3^S5n{7al!DyYA!%qX#sK7s>bB&%pKsPUQSMz!JK5~lV4xj z#nM3+?tl=*q-11W)AawscE}(B@)V8|*j9Td6N`+fdXr5a_&7V;%gQZoUPRbFo@`LZ zTYYu-ASJ~e|G-8V-bU$04x{>J#_|RN!6`)&eT80m`bPE5faDR|X|vkRU%oVl+1Etw zvEF4S4t1>~5wZ!7RGY`+rMH+xNnJk0g@P17pXQkvvW|%OAFqn!%*~5O@-=X2Wma}} z?}7Ac-qFqW+T>rX2oc!eBerKICSq0~p7Jnb=L!3meB)+RR7^}(O)3xX$lk>Kn``g< ze;L(Zf^<6Aw$*p^&8hJ^ywu$GPpA_KUfS$4t%BZ_ZYuPG(h{}Tclbq3SvJlgjp{$K za;d8GlGaLkaPUPkQ^+vd+bfT}GRlvssHl4I&*%VR;iH{}umxe^Dzk3bx!H&S4?w!t z_e5O|U2AUvYE;Lb$*hUL3keS|jVk8<7jIgxmwf;Jy@!9zO}vpG0Sg{jV#)|ysVb4P z&?wImF#{9iVvzd!9{SQ!XgKjx6&3CM55L4eZEbJ=Ak>c$Lqwr3v*+D$0Mf8qX5_^F zO|fl#$vv#NTIOc8IW@-!gzy>#%R7HaK+`1_h;vCwDD`Z@&;t2mD7H$}q}^9jWf_?syczE#*75AM!hXLnOmSe6Id7IZqvxwPEZU{IU&bXvn-JgR$d_ zDg^}+B#sN&QNR}&iF4Gb0(XLfbanJhI|zD zg5&7hHWP&V262Pl5oG$_o6O;r46rr!D8AbPGifw>hfLuo>x8shoIT_SAoA^>tU|;x zCMG7&k{{*{uON^F&AexUa5((N61N%XuML^5J4`%MZwCWSy~G?MZe<5h#ihmUUX2k~ zclr3=#t3$Nx%09L%!JTU2Y!-gubAmeJQd{Y@fTs0&(=8D<$kcEpiIODsa}Pt(X%`x zZ3#ZPv;a1DQ#^o6JW3(AW9`gc`OryFrCW$LN_fOkHL&y&dY3D8he0a5Ds z5c!Ri$gH(<>);iBSm%#77AQnag|67K7729TlJFr6B959#wV$Ji^pef82WgXb+RYHf2c$F9URW^7uo)!EYL_vILR~`+ z7M!+oTW{J9>$sGXJ#s;Lc@3z(D^rVE-*N~Y|Cjo8e1C(o7a zj;gV_)U1fP=vm`1^f=OykW%}a|Nbw)pxx++Lm?cqhZ5Iac9=Ko0Q;z!T6e8%OF$dR zCZd)<2=mVTjNnsR4D`eY6pe9dXn3BNdl<~BPYr{3+hW&EY>$%))#l)^(xs*&xv1rd z#}p&C|EYBR_bYX~gb#&mDhXGo=YApXId@jEAZ(hY_-WhEu2oc`@WXn^;RmBIn3x7F?vyaZ1X z%?w{s`D_};bq{?!<`Y(p%HS<&oo2RRvyaMIownv{bRf*Oo?3Qx_byUXgHZLJ=9n91 z=H^msxA%kgo>`VSG=m{~ROJuZtbId0zYr^U%)t2%oT3^d=;-N{UDzJ9DSkRn6c9pT zuJQc&{MMhy&5-vW(ti&bDn3WvK@xX&cLiAui&QxbZS11}>-L;-24vF2)sv%h$Or_uF5gqs#T6`1|P`>gZP& zlJ-x8!R+F*XRvO65t9l=)6(g^-!a*$H24q=VSNr{wV1sS^D`yC8Umu*Gt;}y6$WEv zlF&I1E_yAj>#jD@3AXJ2;+~>BBoy+L6bgcB-XAqw(-diO`OCFeQgkEAji{e0m(Yvi zhx_C*DqVK|JeZvWbj}$FU{Udi@Dn|vP04XNzRk(og2ewwP~3_!5NYYxcEDh3?we|aJgr!!{;!~w!~Xl$uN+KmjfK=XD3E+F{x7wl zk;!q)o(=wwST|T@Fv1t`pA--%!-(1bC6%B!Y6YUp|1C8n_!JhkI>~9C=Dq-|%^-?$ Ms!z%uzkK^Y0MuOX$N&HU literal 85871 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

    %Q^QmtyMNu0+_u17YS)!gqi}h_t)*PUMc=x& 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 diff --git a/icons/mob/clothing/hands.dmi b/icons/mob/clothing/hands.dmi index d0e5093d459c50fd89aa23a291fe26ed60b92f95..a670c33b7dcf6d4139a06f28e913962674168a67 100644 GIT binary patch literal 17998 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 EKj$s_kN^Mx diff --git a/icons/mob/clothing/head/helmet.dmi b/icons/mob/clothing/head/helmet.dmi index 317edb56796bd9678dffed8fb2448b26d727a66a..74df620a5721ffcdc8b117cf7082a0fba05f0d30 100644 GIT binary patch literal 43316 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 literal 43611 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 Nx>}Dk%hc`O{TGzi8HE4< diff --git a/icons/mob/clothing/suits/armor.dmi b/icons/mob/clothing/suits/armor.dmi index 90be12b694abdf5fbf515bf4f39127ee2d00231c..3f51d089d9bb18c0828e18c0c059faf45d30ad7f 100644 GIT binary patch literal 104383 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%0DNy@BE zm_|tt=wxJX&*qJnmY%)}f{)i3!p8RYUjpXrkT&S$iQeAVYfUaKQJo5VV;z1cU%$28 z8$sM|?~g%G?|7;DHoG%zt)TYTu zU@Wf>y6QP>otR@oU#hSLP+))Pt{JF&XjJ~1hz+__Zw(X8<$b&#$SFEgq`H#5FOZMT z%ka;h{BZ;Q>-;h;2!%tm^O-_NV8dVM+_f77O%L(tbMb4Mp4x$P|H>Qa>eAhFANEr8 zOSnHcE;NgVM2#R=WbeUFoRX4~-@bkg=nBU-9ZFyUGt;r!75<4g-QB7epIRguSnm(< z{BV3~DG7-nqu9+(Fic>BG;G?bJA$TFnGjA)RNQ3&i>dPm>JZOGM zfeigat=m>=zAzN@i;fHDlGDSe685_VD<-0s1#LgT8V0Lek?*FlsR)(x{hB!WV`mc~ z{l!0>9~}Osc}gJOrrh|`ZSW?kfc@L$UZb4I_1k~mLL`4(CeXVhd(qkT@Wg#5I0D^W z(0fiLVo{@vO~3r5dNZ|MK`%E8t3ot73Upa$S&f6*QI z)omS3ooEXL-D<$@VNMVT_&^6YH!0Ake?{)*%uvbx9%YpG2LgHa+^~4SiXD-c!kplr zd*TjpGqAG^6)o2jVoOs)!`lfK$7VLOpSXPXRI-i+56lP>zqWp(2Ne)*eZ!V< z$FP@bnIaIm<(4@af7sSkC#DRmukPV4_y`e?<3)jr$aQgY$Kido@Fj0e(j-Yv#82S@ z+RJQoFf(7hCQ!f`Q;NSX>_7X%{a}Z#`GQdf>pf`J+ekOas6S0I=*fU62h;>bLC!&S z!;lPr?!BpB1(2W21hKIR^U+iyBUvK?=IVDN0|VlX18;4&hvex>7}LVT(SiG9h5YQn z?TiG8k2lk<88+jjprkM^XQyQ!cM@FP7>MiKZ?&olys+UyKMA*J22%l{0noZpV7ZqT zw=mrSG(pLBe0&08J z*_oT814#plqVBjny+eF7U)M}#I?=e{B|FVLuz|n)Tn~QO!NGwMPwKaf3_P&qP)YGh z>*g}j)@Q8Ln{BU8>vUBe+~^AT%7*vpN}h?Q_3{4Fki7DQF(}hE(ruQE+5&UvH?~H$ zv&`9SwAEy(;+ruWWfX?5h?{D2r;V47Ai6xZPYhB8ohZ-_W4abHYDJ}EtBb!!KO?7I zsA`!HeEt?h*hvlr+zc7`M*Mw&=aLUg6st)JIq-CRWk|szXq3C6cIJ!OF*AD!YUWv9W&t zCLV&`Zp;Y4@<A5~wq*FDlBpF;Zbh~Id} z{o;JN)P}8-)(a!-e6A1=^8K5e3!5E}_<+phki14MW zvx3%s9i$XdZ#roOKcHWQ8H&;9E&g!@9MW=lVBkxQ<->c^F31O=GZ)&?q)$emEO+_C z&<5d}Z@qfEa741|^Q6`r!qK4Tx10qMm2jeS-EZkkYHw2+!LIJ&M3%$H+=v*Sc0fvM zDOiB$&>`$8lp*)^HP5$FE+lzUSm@nt|MG)tA4~3$6FNlbsxgJeXzA(EL4XkwfT_v4 zj-W_2b&Yb6vmuO~V(D~D!|n`WN-Ses6&maM$g_CaP6132fN)K{`_M{3`Sqt`uygs- zXJot{g8VwIc0lIC%K(%_`7>r1VkV4k(4%w{A0ZJ~uSriZWO z!yN25JX4gT4xk%=Y9ajkp*6xa1br>9&qS@KKd61&)^Qat>>uqZ)u$&O@;~`gq4X_1 z>eZL9pDzSSI#i)nRd89rj&(VpiEv&kDx)_&O1H7;%EfGfJfipjuC{{)N<9#eKK{&I zBATm$njv(EE5ge}#2BCVTTMj;89>>tVd(Ap>w!bHnj%gkr~-a#9!t~9Bzdp$fG>xE zH$I2oMl)SrDBNchiItIrPf)OHv5Rufho$Wr9@T6otETpZnv^u+`}fB`fQw*Y0Q0aW zuh8XJy*6>%)0IeIv#%!j+S!%c5Z@FQGAzx{lLL%1hCT7?4QS?$+j-?vmWN!k&Q6Kh z<3|L(K%=C8dnbkuyTQCsl>LBgnL`0vH>E#o^Sfu5O4K?tv6R z_}xDSy$1E>+GKINYHPXj9lz2i^J+%DxFWCxc4OHgD$&9l-Mshr73istM%p*5tZqmY zU#S6|jki{Z^qSK_jC$4g_8%gG+Mgd2sBxdrf~UlWAy(vaqGK|Yjlr??*YM%Iy7D$VHcE9Ffq zOT*CUMa~p%>#&WDk7{aaH2nR|OIPuU@!C%7N3me@$k}zU@w^s2q5uvLLDJ?n;~b2U z3JDJ%DhFl#V;AP`m;Gz3P}|=y42~@+_d~(A!fz@HYYs{}0?wRd5&u$b5}WE(f><(f zT^U(QobhV@5>G5sd}I>n8R5v5~Oq z>S}hf`Hyd=1Q`wRaL`cXvc=sVqETcxGK===cQqUNm;&v5Het4nHd-D{QWVfs=hvMtAU|;)|czX)>dKS^L2o{FVoPaM@(hUFTJFD{rYv) zenDQ|PxZ3XR=2~HUyDmiZ3_3BM<_Pzq(+Rqof8vCunjWEC)cwtAH~WX1Bw>3tVe-= zVEP>J3x;8q#!r({4NcmN?3%0@eL!BX=4<4X{`1%-A;8E8SBmjin~*;8WLJ=c=~M5@ z>O+6J2?Ivq=HH54Zf6D72nPKNe)~q5*Zo61$#a<>PvRUoAl!2_`@h=|!k zCL|*2N}SSoh7_>Q2P*tL*ux;IECEvY;`8430HgND6{rUUkXR3yTw7ac8PKV*`H>M^ za$dV1Ww`6~vD-*PrI4PcwfVN?$v)McD^IpXY7Av%Wg(+yi)>4ZCK0)JlKinmW=LPp zd0gb=aPT3&;evd87>6%V+AVNHURKheH1ow)<0!;!PzTs#2A)6IX+;8FDw+n*^ zVHba+8&HQvQOYC^MTq}8j_7;kFsLeK8iMlc+SduU*HXrpW1X)1?0-oj5DXZ&`=2WB zy!q9t$fkhBR;myL5u2+sz7x<+{P_u3x#l+r?=7e@+I1+2!HP8>Hw9%n%VgH3L4`2U zK2ku_%`1$d^f_HS^joyLw~L-5%LA2M<2)l}#4IE< z)OaL?yJ{auuXEs#b8v8g^l9I>f+|T{!keB{>gwtaj*cDMnf?l|@Yz~UkdN2bX_N4Q z?)OvT0~*yt25LwW4Zw~WW3B*aRL8@X&44NR&(0HYiXzq# zmD&N-%F`%Ue^9aagTsz&SE)w+i+E}sUqtTLwurZ>IK#7dm#o?&`2TmB-?T#>@~-|L z+TJ=U%J$tK9XcgMKxsihX{0+OL`p>IMnSqmi9t$`QV~Q!MjE6Wsi8x~+>T3v`}&is!kn`@Z6HRqE}9o3onY(+NbJ*6cR~Bo6h*Ylxik3WPBM zIJp&zrxP3`ud<_iJ)1)*j)$aA#(#!t%O=c2VwhyUbAAW!fk|(i##rCa+X1`?!f^6d z7cqkjrhj8eC{(Giqv7vJf6M$LimNzoW2QBoh{K;q5)G`pa0 zZESuZ-$$;=nH_KD0BkJ-8Q*+=6W|o1^>FvFw6)DKK<)1A;Lgq&8VV$D_BYC1 zR!;a%NT>6s!)MN2_~J1SW)nxAbvMv&%TRTXz&TM`}AdD(b@E{*>9it zip%+55`)z&f>Xc$*U7{yjBJcr64O^(LgL$2FZpSjUjC<)l;|&CZhbr({Du1P1{5S> zM_4rq^>iA^* zleyTan-Od#ol})WBeP`?DgVL!zM@rp-uZ$F=j+GGoc8x!RD2eq%;~SFvNQBUz7^!D znOnY;idR_dG_PygeCdUi#k}m^SZc?uVb6X)zC^8JXN4zy5OS8C|tivXOao z_sbAM`okUS98Viv~f0*V7+}0@(;> z@N{o!34uC70z4*k*WVd15*Xwi+m!$A=QS^jsn<&W@PQbF#Idrl{Ompk&kF%uC5@j8 zGwXRfqGKo%A?(#N0ACJU74M9WxisFU0>~a)3KE#xrlbLOw@-}+G4QkCNtWdWm@$i6 z*&TbuK9-kTB0T7Se_~n|ol&{9Ee{!=ySfS(RoaKm2VULKY+jC&iv<$}BvW$#+Fn{> z)euomo#&4ru+^!@4h79@zu(Ny>+0>T_)h;FLlArn1RfrDyE|TiV63ft?+-GA+%oDpD`UE!RNK+*tF8&iNXg1Z@%tV5l+xv57JNsJ* z?dTBJ9UX+%*KLTEdjd9&q#^-=K%;waF8{M+{>kR_2W0~#ZlL|8L(!;F5sW?pB)Zup ze4CE~Xcz|v2lDxPg@eCdaDyBQ0^r&B`Q|2r@N0_wt*sBT0SLlckZ+^sQT|8M#DoC= z`vVz1`*VcA`K0sdRb?JPyql2_c@PcJ($X?m=i`FG{v)EI;@Qc-d#wNrHU^yH>+9PD zwCB0G@t(W!PT+o^qMtJGQ{{bUfpm3sfvTIbfKk?Z@BZ>dfzUAG7?ltt(*NblmnFz@ zq^`_De~PH#Z41^y(T|%EOnc+hz?e+Dekp&_y|QmfSy*639`zazsK5kd3_sKPSBpn% z1pq*AIriYlBr={QvK^z^f_Dcn9^RY&e^$c4(fsW_;J2(nc&_!{xgYb{l7b&&bGpB=5do0P{BKxY>9`dZ7~!3>!VCcbRh*&6nqgnv zgGM|xtq1^nv;kTF63)my#u;K6A^XPc<5%wbI1VeuGWe5?C)Nr~0C~k=+?XF1;h0ps zfBK(dd|Mah9kF3S|8(U9-$(`i^~wIf-gJY}FCg@;p4vaC$9Rg~$04nxb13 zKdI_+KHaQxoUKi8>Gh@qU4}39jKF{O&k&h6R)$6|;jrlz;J}00rurYLrAiwlqt1UX zCoDuXzpXLW=K(AU1`K@8z!*mY$f1KfolLrU-Oi7XJ8&%+mQ#S>%l3HG_0>dV*znpp z5EB?gyFJachQvtd0SCx+S&w=wvLW* z%(d0Pi(*ji%qaC)@HXi$OxnJ`jSUCnr^|e!FUS=7eLfF`$$4&2Kv;x@ZwkqJJOho_m*4RBv{3!dBv#Wd4+DZ~t&pi5{> zoU2|dbs$CbPG>AS61>Exu~5;aYq{Kg zb)$o-F@_Pfz8xJhfN$SJ|Gdj2W37jFI#r|Z+W$JL15A_P5noU#jap{YA7u5^$D4~m znnJ>TEv5RdnWdcXx!hk~TV5g8uE9uQvPN$IP$%%K^*YpecMN>1KD*AFpL)AfZ()+ejH1N7uf}m#s zcN5`qIdf>K9$FYD;6jR_gvVi9S4G` zo56?O6*%(i@xYJrAeSKtVsfv|Al+{KMn8wjpKe@JO>(1IIQ>6jTF5+^Ha_I0S=+89KL%}QWpxX9Sbv4xQ{iVKScjLj%*HNxq07!-MS$8~lt4m5#KBqs@@NP!#%-++GDF&B`moHqLhc(!P85 zj*yVBsq9scW7Rv3sx#=>&Qw=V&m#bMd?b|aB79*1$@GhG#MmygwO)!@LNYRp zpkT?yY+dz1>e7-`GwJ7FnUfz;{M+hxBt3I2Y9otsa&iXsrok0=!MT9IdZjG1xN@iq zHtN}Rqs_&^EF2@*LCX1^8LXcnt}K#1qF9f@<8pOlGPBTs`TejeZl08vJv+F7n`i!l z2TrI32DcfUMH}{+PJ4YO2)aWu*D}+-|5U6QL+}BE1DYc9y4U4Pe}!yBs=?WFdI?Cg zDJuATdRf*F%#thYUy{o|xy#UgXCXM*8Kk85cFr)mW*2vtS5qT0dlSG@4Dxbr(F6ko zUwoPy6rs7@yU3RA3n3&tP)gR*PMb-I`NU?vQ0;<_wI@}H^?wHqv~Z~rCtwp?WgtF^ zT6nqsxbFhH>1rQ7Ks6%fzVaB-6h=b(F*!L(>xU#!_){bbq%+0G8_NkCj7$8u?PgV< zwf|KY#v%%b6!2k3U}fF-O+mSBB>Nsqk)G=2&6i^pN!mgc(~c1NI9nL?udYd{&G&;7Yf%g9<~1Pw1XWizUR`I}UJlkH@PtJ$(f{MK9j{?wl_q_I_914RdERve z*9FvmWE(>Q^gPP{<}-WehKU^kmtuU3y~X*-wOW3;P^^1bJ6qW_8V3au$Dych_ZQM5 zBO{bFG~vK}BMDcxzmS%Z(J?WJ23Bo_^Q@78-MOSdzAOkHzm;qO+Dn2k7>o)6`YUqW zDmfwGfREe*D%b02<(bD??Z3;3T9#GZxc~tp!0z1H zVA^e}ksk>O!5+4}1b)+q>g8(lvvlQc!YxT&Bh^tei13ZEdPY=@E3qwAxkava z_)@STD>e?)Lhw+_0dwH@#|A#^Fk4NEFpdX_WDdD)y&LeQ!~})_GQ-oYzPJ`S{~AhcRsg;^f>P{o|m9HlQxNcO7`k zhTu@B$!}jXfdohis`5@v=)0Qi0Ygyj;?9+ zL?X%@&QLXs-u~L^Q)pg{l?qg-YX4I@3|qXdYaD+h%Ar^GU$GA{Q9a_ zH{xj>F^6aGDe=o!<=Jg>6}HxpsXv&!-JTlJ;bjeP-4Q3rwdPEf36{nkFG+)LQjtv@^iqW zA(X&kGhBYeH}U}wmttTl5#%GxR?$-D6KjJ0gMrFn<4QFmw!PieSC#)#OX9Y~5gsa! zlPS0%gDo0V2K#)x_}W%tFCRNtzKa2E%2NVHu}uN&~LE z^X=~mW`IJ{wd-6wd8p|vGx_Ozg@K<%hjXzfI*0MRL0-{UzNg+q1a7eT4^|#O-WQ$^ z4S%glOFN&f#Nwcy#3=Zh<*yt^=;CDNnO~tmWaC39RQk*xdi!q$&722NZ!xg|iJ+)v z8n(Y=J_9tVPxKTmknARzZ;}ha`B;f94L#F{O_~QmM)MDwKZ9CT;%mT(FACgj+B75D zTqS@3R2jP6(zkGW@yPFdk5?UU613@{wvae=y5nvY2$aj$S?Z*}pP90>Wy9KnEAjv@ z9JL94JtT>J_ikZ<2J_u}nF*|>5Fq-7{vbcYc$qhHeeo^=!}N^RKkR<`@=7Ttq@f+D z=g@q0kSp-5c{569QKOpG?qNb}V;NoAo`|?x9wgx`_MjqP@mn^Xx3@RI*q%v`PhD1n z0x24B`iSy!DnKlqWsA5Se>N`}E7|q{`*pq|1y4`UAK=C7FV~V&3jZFR8#yJMZ6@e} zoT3VA*6at|O{bNS9Cmp`UQADx7B?NTb{9AOCeZn2I3{2MTX&*w)iV9-!1AEI`SE*V z?5PVpF7zSQIQ&}n*~qZlUNAeMl#k>3WBpKYa{ab!o>c&t-v0IW?6ey;c164a5JJ!L z*3NuA_Z62t<$0R6*Gy6<&MrraVc)?Hy~E`zVI{sg87IHB4i*p7bi z<3~MLx6@LD+TS4T#LW&pp1{suS9os<43K18#9F!|WM@1D<-6}w-n+3$ybxH8jFcF) z{+N`+b{j?Cop*6}eNoCjpJ%Oy@&1E;<>WQ9*VKR53c|>V%X$_v-NS3YasGM24e}km zyl$`tzW|Qj@|kyeD+{m8V+eDIZzXPnLb~ZSSXCYsR7;Dit7@j8Gze9p;+qP)Jv=GZ z+86SN7F>t*<(W$liXeaA!csy?Gd&;^`dE$ezk^pJR6)qiAY&0A3t+l=BYZ|YP$-#? z5F3$9YCu*0vW?2k%B^Ap_;d5uz?9O>98(QBhG+xKDe6XEGAQ0FCW1iL5#W>6h%k;e zUdt_YnrpQf*vNltws_UD_lm0wanfBt68d~7n$UgguYDYF{dO%;tt`ni#Ocrb(z|QJ zImXc-2C2|WYkCj}A*2_A6etg`Ku1nz%12v^i+4$ptnjG5q|qd-rUng?@sEwX9$eMH zjRi>Yjz?CZ_qQ+;xBhT98h{pW?0VJcLA2x{0E}3HE+Cv^m3-A7`&L`vi3ZLYu=qyv zi%(4ItE|%7cqpE9822vZHUrK=D;b{e##W6T){cLHFhpe7y!fv3R_N=N1_fJZ+!Aby zGJGVm-Id7wJxJuJmKPZw?)j+mO8!z)rg83O@oP{sUUThl=-*`(XS}14@-%R3lx6d4 z%8k&r3i|@nN|jGx%x$_spHQHRQGTIa&7PO6QR%k?Ed>?ftbm}bk)Un~77aS`riWCx zk?#wiRL*>KzN_Q`%9TS{jC<*=6n8x5T1WJgoHg!i+)DnG_&w;e74JA&&d-*K_Qh}X z;Q)(N@6Vl|SkCu36eAse&$h4^_?7oMmOdP=wVT!8?%DeKJCkGf56xE|ClTF!5w)IY zB_;(_^%1HzD>nxIlq3}M`E+q>z{h;-~Vmh59k4@$Amc|hU@#&@-fP6PNFdUe$GEDufJ~f+N8>f4tBOiE1Mcx1TiGjhiuBxHH6Mn1 z-VDCjI`A+da!lEMYV|8LYK|#;8qVrg;t>>+`Diigp-HU?zLb=o_>>e2w;b)*n7*aM zh}yC2?~kUq^tMvSGlyRXJNyv;%T=f+x$Fgb-f%Nzdl-952si4Df`UR{*!x_GUAf~a zINhlPB?5FFKay?=3=C8}Q7%f(6^*PvaOvAhsJ$Zu`^tltl3otifL#yFQ)IAb(cYLN z{?^ytgDp*iEDfpv`5AFqP!qDIi`CJZ+xeBJZ_;ghzq|!vbRy$nfGw@Qgf1__yKBeU z6GXq-C6U*~>_Vpu?U#H$gpz?PCn0`AkU(7lYpr z%sSHG(}aF#WPDghKf5)S|H>)x^pz9Ui(mx`rB3BHh}maEp(wII zu7QC|W+RF-Xx7jOi;w|?Md1tDl*mD!CqMJwsd-G9EI=p}&Hi$WGb z4}qIJnLlJTNdb=sbhbi3w-h<65!o~89g{(ef$ zpwQoL)n80W-RNl20^@3}P8<0eu%~xz-N^+ZjZA?9*y95DU{>vhDlCu}hnVfYt)e^> z7?g4O9*Nhyo0V08s)tQ*eV>c-t=NNP)t);Gn3>n&!o&;rY1kCwg4pCtfwWOq03D0h zCCwiVfrV+?pYq8?uE3k(&sN~nxzTWSMaunpfB#htVQ#sIn3%Cl+@%H|y)7W6R^LG1 zegDR+R3s$T2U>P$Fi5y(_Q!Ba`s_sm3$Lr1Sx<`4$tgg6*V3!H0BHeAv48&}j|q9N z9n076IYwcNd~@U7S5l?G{gj;i*S?u$#M$XOc13}<_&dGUJ>(tRGfBVxIa=lMDPe}W z;|%5NR=+@{@u><9sBOlY&YRP$H??B(Mt4i4$_}w;{q}a2J`9XQSyvQGI=0HE?kbr_ zbWF@N3ZSV$HWOQkDu18oTYhG9N0fKG|6PWBH5%nzr^qZ|@pLycLpepg1;=~%;XL5# z@p1i@iJ7^;tKF6yx$;{<{Ki!pjTEtC_dperkz5UmP=QI)aiw{u!n@bwW>EEF2OYmF zP{8`nNVDB6?K$$AIq9(JW%&`#85%Po92%!dlOBd`8gse4w!3zV=eYU2zY5aiIF1+C zZ$?>BC2QRdpI7bpUGD1b)_#-~wMtr|XVTmEDP)dz4IbP#?`%cDr06x}NYYe^&=161 zHFuUf;EO!$T)p&#qAqPEa0;kFZC&?4zpLG9YtT7_=OBmjI}4#@Gwr622{TRO$%nBZ z4-D4{<8NSXIQ!GPZJ+E6f;=Gtr|$^Zy+3^`kK&&5v(4K3wx0UcKtf*4t<=BgCFapW zOuyt*I)f^+^1ehETOJ^A_&>9E7RL0=#~Ofge3P311T?hNdTo2|zJN8Gf62-E=j?LB z`-H(PgiCL8hG?4`F2{-U=7U_t>uOj570O8+E#l0;%PPaM7LQ1Yei1Ob6n8HhE^`-G>(wSAFxN?3@qPxqbe@2jr37*e`kXJCocjj>I0Ev4 zo~7PRYuG&QO_87ii=u1~0H?x3t5;S4R&_To*%4Eqz*V5&!f$eEtW^AdUOaV#XY=O{ zfx(>?u;P-y_g@4d8nCf?u5BkAzY|3}H9;`B!#21j{8#R;T{~3yPe`1ZM6o2DwlA`& zQc_cgMg5kr7*NJHf%zX1b;L1~uii4@A$%p4djUZD=j8at#^&9iPT2v_*SdUuSPxVZ z1{<31OjnW!+4d``sNhd}fWZl7p;OJU57K7RZX!807fkl~3MY)gYl9V{aREpFrQMx1 zYD?QH7;uKPa*nM}dF;zr)o8TAbrmdQmW2NBv=2<&#k0RIV*j}?6C@-()GIcN0o>xn zwhnj%H6Z+En6f)lql#Kr!DY_yYi|TQ8~DQ!9D|v37XLg0VQ|e{X&N8qalr3=2*itrqX_5qQW)`d-gbZBfWG5s^jojfEcpmY^%>3EaM+(o>uI!k zH9u?|7$Y;G2px(f?{z*m{`f3CvZ%80fY4je&q)EDBXSsIZoBI7N#hNQ=)p;;>*NXF zXY+j7*K4n%k}1ls3ohB*J8An7nrIaqzV$0rB>{1u<~ zRO%rR(IqFVUt!yHSG9!K2M5LiE_3l^;~%J*)rp9%(!xM|HB9yqcF>0p4c zplmr6#NrwuB6$Qux)5tNQq8oq=dVJ#Uh=ekcy(-i`rc*$EC_x~Wh_$*Q)9W%!fZ=e=^D0(RIk#T|zuM`13}L8>Jr zj&Etx5YhC+&z_Wwx+>+$W+2zE?m?2kLH$u`|8OOxcCyf;pYom*YfyEUHWkM948qoS z17jW$29V)4hbq(>eOr$D;cb)2a8b_UZ@nL2fr@zj$hG~}=0)+%HF~xc9Hux6+FO}l zx(2?|#ac8G{&DJ3l098qOl|Oh0|3=$tsOu7#pXKTX&s zmLKowm5vDtl2!Cd2xt~Iq&M(W!fRfEUY)?z?kt2w>8p#8(TA$j9)mdZuh)Y6?O8V= zeK?lce;ZVxlRn-Mi09!^8=wz6rNTjl5L+oF^IaPyalVdeR@-%p3oT#8KU0@1&Ssvs z&2;oBJa!)l zHEuHAHG#R^e_JIyl+QtMQ}0>iZxTHKkpUPE7WSuy+Qx}WaB}*DFL+*4yIWzPFNzE& zhyjT$l9TTAmbN?R)!2Bk>@o*@4XnwC7)dTU@GU%9)ss4XAb396OmtyQ`Muk5dTWxm z%{`Qfz-?MvsDf)-f!*H6zfHkWP&mC) zJ^izKZSv5{QIn$U;h|_l)Yg~C+_V9tZ5BD~?$8cDx^Ws2eFWQ&FN+HZ#bWdHLZpc- zTm?1}GJ+lVU};a|Y3HZdBz&b>oBv)KQPACd7io4gPIna_cDN7Vj~PUQ^`+Jc88 z)%eEYcv<#BKFwU4?*+-18h&>BszTWUZy&QrzB!36A9|l|OEQoChCgy`*&Bj6G)MA1 znz=(d7g1Yma9G-g@1JOg9aLz1{&=UEfB+)!deF51?7#O6hNtK+&!K33#~;v=RYU|Y zFYkdng`PoD+{cf}KplJF53`-pHcPJToSmgQUgu{;cS8m5EKHbv%QLR=tz6mMj003k ziVnM9n-T}sCm@!>cha{S>%;B-w@e#p4&J6`YuejF4YTtAlPf!<3=)7e@uSc2y!T{7 zwfO^ye{$S^@c6+yf|&*C7nw$S(G&cSAAB-L115?ESx&v=B(`!0K9p1E`-#Y2{Iw+% zi{@%ZC(gN-K*184>XZ#uJ$MYnLW@|4p7r|Pqn2x!Uk{J}+e2N6gF`|xv7RpMh8N_4 zU_w~RyD*lS$%bTwe@9=_NQW`c*J&d>6r2okRak+5^2L4MqmWB?+67ir6~DK@*;Hv< zFImvV`PlG!$oypop>ImwgNCVq`Irdg89$Fmn>C;!649=f{zvZ1E{3sF8oS-JjFRBvA5 zo}x$q6U~OCuT%#11d1Stxt_VLx0OD0A1zj6(!A9i*Q7ASH%`_ltaO8z}PXDvnREB*Gs)?akTdu7drRb)(Bic@j^+0SOJclm|Iq_STIrXIK^MoNQDv7?-P zT3s$pn?o5{A9Jt3O~_HVd;^^B0g8@cThQPFRTZ*9L%}0_WzUP#SE1RVczL&sG=n7z zH}G60Y|8~5thvuRb3UeVFW`I7U}wuJ$YWfWa~Uc3}MOLx(vs|5FJx}oy` zr_{2AvV^6C6dZt{7+tyy|W0jRP$SeCz z<0G_H0WX+X-t*_TSmAiC`0h~0TGJgAx~tzIz*#7rP;`NeEO>09&dBv9^~U>rJkHhi zgCe5GXdvxA)ISsVl}c`aI$gqvhHRU2+<~!vqcRFFwLq?x7e$0XOb~T2E5p+}fG>*35 z2CCk*-9}Kp+tD|uJ{+tEH@ia*P`=8hc5V-XpTX9F;xTu|$POc-NGl$-_QkDZ;qta{ z()6ShJ)3)<70xy(koLF+P0w-5GH)?rW_=>qoOZ0z;EX!=o87yCDz5Tk(kh0YmJfr) z#F#Vbd%k>Ru}ou>%4Y*v#DtEg2oEKvYfBr?*(ix%iT@yhw$d8$ozT+8$cOJ8+rbI z^df*=rxZtUZxTyGN~o;guljoak*^<`YcaLH0h-WWJ7Q<6Vg-aV&?$25&%R#25;A$Y zE5}9vJ&vKoaFI7Oq-%0$FyrtZu>1b?d9De)h+Qg!Z*3i8^txC(Za7*ebn(*<=awF3 z11YAd&2Uu*^-mX72iHGsntUo3?x7lNvi9a3^tOstvKH-|)l7KBBin}akI;@>Wzb^7 zJfR+%d`ef2PNUIv=K4To_W~|NVz7hkLBZo#WxFFv%;`)}|D0}R*GCf##oLFSJ~d#G zWOb`HjVHW<();}!Owlk=YzYL>Qz;B9DM%{W8SyV4OUx$|4m4mtw)ABE{jo#0j3o>E zr$474IRR^0Tv!M_mXK(vKbP>qCL_~wulfYT`k7YsYZp3GD&T*dA@%SkaTl~7U1M$8 zf*g2!|LH86#J80STNrVIMD`5xX%^%C2%TD|}n7(Pw2k z{I&QqU7WY`7&V&>uw4r<=?ObM?nz^dNvOX#M(AYb=E5q`q@o)4TY@N6S4oZ_qZ{=1 zq|1&;1=M7&C8g392|H#_v|lc>N!Q*ZjV$2sR?>uGR?Z6<_0isorx{*IeWJJ>pGT9Q z_bx~)M?PL7(td4AK_pp-kKUGUPE3BWUEa&j!-{RGWJ!9J7Dsc$yZy*;?+x| zgU5h5{`}QACK@x?O`tSpJ5y46F3SL8u{)zLu~ekQXDL0CFIbsIpx!z$KM$E(*J9;a zuR!|m1;6A{);i&W3*Ae$E#z? zd2>^uo$Io8gjbn-`zyjL2YLug=?Pc=javP{{S;L>%W{DOjK21R-jiQ)Om=@|h+GDB zp|!_ZIbrxM45MtTlB1%tY8d6YOg??UY=@b;P$UNEZW#}kp4A!wVe;p=@u>I^D^&**+MQ=^m{ zUk*gZU&fVBHLhIZt0lSDX+p1gH8fur|HSZWU|}d%z{JF}5Py=J ztC#1vE8Ehe-ZbDEn4c70J@VzcD3LoGxMQbpCP|t7ljpuY*Udh>-}13WNYnS4e;F)X zLi(YGsvG=WyKeQ2P5qqrD)}Il!o@swEPH$Ks=I(*dngC`s##w#hWZ~mMy|Z-M36^# z8)BmBzrq_o3&|j`*0rpFIkh$E13z26O9a`=y;1X?_$>AGlHA(UGb*kshC2^d_*=9R{G9ZYcw@b)#{Ds-Bw!Ow{3caSB-+p@4AnL6f{ zvb==J@~gWASN_=Efd*lf+9uomc-OG;N>7TaO!QTURv8ES{5T{dH}a=a zQqO}CVIYol+2nQP5;ue4wd`QY*8~QLRCxqy291yAJV5cSDcnZ)*O582_oEG40nMU7mYzLhx~7DMul{ zIL6*azQGkw-23O+S-I3K#nzSn?hcM+&FhL6Uc?;g-}s@{E-YsyQ!M7X1crWMqA_Kz z(Lf}O_d{IqQPoO>rqH!!Hmb&g2CC`DX<`8jA==&(BFS^g7#mcR+kuQvw9q6!YP#0s z=mQt_Gso4-k7LpoPq%CXzU!^)O`7S?_`C0 z;ok4U9`<5NFaBDRfC3w%dgZ4+bmGSQd+t9r8zgcZY|X=w$oJEiLB%wls;U{4e8E(L z+aV&8VPZSa%a0Tp9Ez)H1M+2`f3f@3vu!{U+yy;?mkK|?akR@06Uo=#I>GlTdH>p% zS3Qd?JzEh2?A#=gyp(uz8MPoCY$~vN$$3u)v2#|vBigmoY<3LKsul>4y}gX46+AV_ z5HoAnlv8>sHznQcn2i;vLM98jCXGBQjGUSsQrbACg&Ywm0COyCqufc_0sT$#x?!V@ zU^vB`iiK<2j2Wy;i~eFF8zIw@-A|?koDT=Br&MIO?@LlRZlsIq2(btNarkZab#Q`Q z1&2TV8lM4sWG!LrAqM_&_YmqUY69JJZ#_JHZah-`+_-zq>P5c_3vu8N-m&@*jdyS^ z=NpmwS-4A;`Zinrw%PJ+yb;E_QJui(usQBM%4xa`DoFcAXOupGZSK&_LK3WOGgo#7 zYxXeys?NjRozcGQnn1_1d^t0|dh=MxNz*&XgZIjzsMK!N$n^P+{1knl9!2Hpl*wSh z{J=q22Z;#-PX~4OBMs&sNGio&Ng%US*EIE|ADM{$baMQwL8Z^~Fxb z{y(_OmVmJ_Y_klV0~Al0i-p!_Hfwg}XRj$kOTGGgrFjRg?DJw)tYyGs$=Jd&|hsXSvTF*m#NXmf5kP^JHX=&Pzy#-`ES52Q3N!%!=F8p>q zX7wXS8XelEmFI_B2S|13`w~uXvDng5a4jNaRnI8>#4Pa7vG!wLBC-Sot+o1AffQWx z$k3wlq>l{s%-&fh<-)!1hQ-!4Iq$-i^yUa|DDP%$RB6@GyVt`xL`lJkr&u~-gcD^a zKT8jMa;Ri3Cd39m5H}ea!+-Bm=HdW;( z52Wi5-H1i8xDKFjI3(^`=IBptT2ST~C)0)I|L}4oq@<;*Y_BSb>ZSYReRM|+8pWDo)S6)a;DYs>WROECRv0r_mxB500sbR`#Q1`@D4_6c!O6I?W}B;m-6oA zDg=n^)ntJPS-g1~Y|T_)Y@A#yOKI{2S!1}BX`EbRzOMT)4Gw^Tr}_H$-aWn$B7+RJ z_fR4Foxh8j%un4gt(WebX1%GWpLAjuYVye=4yT2&}GA1|x<@d|eS=!W*B571Ru zzQTm71D_wHw4R*2N37HFnd%be+_?pl5}2ncNW zreckF)UzApk`v*5?br9j^pS3KXRa!4Dje*dxH@@q;`XbkhmLg3?=A@k?!*uHZg4|1z zr2mC?FTHIEuMPSa=>A_K-v3{mh7Ga!J4!AM7UnSMP*voxvu%I85JIjF3`vW*dd^pc z)ZDU(H*cOjA_;&b0YnuSlr4D$`T4CVs}TYrAmD^Ff%PuD2?dxnC$Q`P{XlO|K}|t2 zR0d6o9Q4zdI1-`lJ5mC__*~ee}*E-2JCb9`_dS(_5XMcG(OG(W(3+Vspo6G;@X(}RZCPbKo-{z z3(fi2S>3>hQGL2afINpPm0wSEQ2+FUEotj3!|i2ni+8k5HwYw9LE--3rQ+q8V2N+L^9hLg#m z@tFp`PL#!A9{11e0EX7D3GA^$^cn2HZ=vC0^E|NTu{3pOS;l3Ws|~H{!|_-& zS4>?UgDFO_O7u0l!~dk@lk47Vva0F#pV5wJ zxEMrcpF)=;rS`(k&dvTs@`2o4OE@z1=ybaqt)d-5LowLN!v){0valEwzjyk>hQ{r< zCol598Rc33G0OEu_=6vBN!!rQ`RX#rQC(e>zRnR~tH!N!2U(dc-#6v6fJTS#jS$;*LDIf)j-8I&AH zL*E5-WRlCmMEhP$k|OGO89mA6wv3K=;M4(qm3a2{6h1Walh?FXzB85&vQS^hW~J-5 zC?Csd;)V@jap$_3?ebukd^EF3dCT}oetCtI6!j9uoUMu#Ae_bulz0dsBa`b=4J^13 zW0!AqJ%Egpq6tqPDR=ejzl$`hBfZ=Y1y*eY-MtR9asO_!H$hI-B7FCTK(=?wuEZrI zdPVMd{tRDA|5vxh_csMRL+sLg8yyiX-ejyn;i^7fC0dS# z4Rk9Mc$hPkY~t%9uHmAn^_8YU&A|(oksD-AZBTWSIFy(j(*p3Dbp78JU6Zz}vgVDh zmLf62C{zL>(X*hTi01e2Z%6e|qyrLvW0@*w=Z$$Qg_!PRdK=!P*n#j_=c+|+v2fu0 zvTVPoN5inh&8}F`#h2)f`u9O9iPR#Os=m#77a!3pQ2GP-+W9N?weD5s6CV0jQ zc-pFfnOjlSC;|{7;jvY(f?eF*(*MC0K#_srYCHQ!jmRSpQ)lPwDQaIZjNfO;>qJg@ zvnCC7s*dcHbPl#1^VXD4>&K2_xygy`jUx3Rn>> zsfr{HHV0v3-JpgP(0r@JyZXP2sBewrke8L0m%i-2`QvdwNHZj3C?b=poN^i+0Mf7* z5sr*E@Npnb;2PjmFMBCWXUw}{v1_^AXGS%YTD6Amqm@2DZA2z9R^vdud0$hbtzpQ= z({@+-`3SkiKQS8~8NTQQ9CEpZ=vW5s%Nid_SqhmIsVBeaR!Io-ZObPD{QU)A{khf6 zCre ze0Bn-8jz?$K)_Kl1(JY|f81|TAdrca=(nLWIZ3E8E;E}-v^=PBk2u-X<;3X;#)KwD z-xkEiywp8KOt|R=7>J{zBajrivVh6Wz$Be*j^u=G2!XmCi9Cks#vp)Q827SU=2b4wnB2=_vDR3LaK1YBZ zlVz`>w(f{$4+J}cWb&2O)w`RqnB21vP)&&;C2G)C;WoNKJ&|XK_b3t%0#dOv>g!Dm z7P1^wL1kaiIUEZTF5Q5r6DF77%e1kf3cj#itTZWU^Y^O5l*=Oqu3sbI>MSoCR`5Z+&2M(ctRt z85*C#23hDk@Uw&q;-kgHZcaVZc+Un2Miw)8g|lLCbBIu0O2(* zXR^EtJjRjTIi=pMUkw`1bnhxq{G%@Jj-Wa4ng9a@4E!r|0g^@NxPk!}M&o z<^vNAV30U#lX(!(^g5#A?A;cylXeT zV7SFc9}7YQKMIy6Y@G2)pISIy3WD(XqVC{&ZF51jb{jXmpC|${fYDU(He)KAU~Zy{ zla6@d!mDIsPq)?}ZGM3@SpRih{ac=$!Rff7^kG*>ml+f?_2$iE4cVBIkFwwf7|$%2 z()wbMRA3l92R@K2b=r-|kOo@786X&U`w681=`3&peg(+DHx5X-=!@rHx@k8f3D3YF zy#q~!zc&P)?SQ&vf{O7$y@2h3dJkr?LbmH*&Cl$36^595|M{(7Z03bf#l1mP{R+n3!q}`uA@M!i_0L2QmLh zzic@oaLT0r0Ew?lTZZq9$8A6=!t;6C+TUo|k#2PCirg-Gw-c>G&~*2%SWh{xK?^V< zQmGa10Y$^r=ez>Z2*Q9A6`g6)O~Fu@L$6;1_Vd+a1!1TFHk>b~2CxOuLr>b5P1xEQtsl z2ug2Q*8`2#8!nGU7dY8p4s7jVUJ{Im^-R*xk)LU;XI{B9eb6Min|ir`1{$o$K4A#U zH4^Vj!q?W$kw^Vx-PeOY=^x)VRb+X9#i|l$GF3rb*q5N0-#h)K%CqR#l-xhu?r$+V zhAhaiuW;&Yr$+tOx6*4`cfg(t=j&dyZO!ZNA*68PZI_sao?w|;&-*R3`jI=aBS zWRG87Gb^`Q%l=}advEXJ;D>`DzO592|AkiHgF$CC>WIJB@%>;D$<|sYQCx!^kf5K= zrlmUafdXP{kLlyOPmuTZV%g7TfeUXyq?#B_VK-OK@2UB!R)VT3WnT zQ;}o1MGd!J_MS*S`UVL}Jh{@?%gzD66^-}T9k=VnmWCuldQ^QzQ)pi1%s-JejAfMD z*U^Np#IKe$f)m6gB$x7-$(CRPea*UZ48nfeP66!9In+yT1C|#qYJH^NllR{!bmgrh zEDV45osYh3Kp9&_b;`V7T&_?YtDG+TcbV;gWyX7MPD@KWu@T1GSKhORw-%zM<8gRY z+3=Mulqhm_jX4-N`-xKRaUAn2Ugy`{_c8E>00Hm zIwx|M^=1@arFDROT+x{2e*)0j9&}tk^J^H#^Lc)^MBTjwI|30WB?9TsA%PI%Tpvs(#9g->7a+gt18+ z?=AJnA#AmAVRiDs>ZmqDy_R;#Z_MAJ1cTX5usdZlHTudOrcQjnG!pDXiAv$ILh|_V zs#*cnv4QT+9LrZW@_=>m?Z>68$b{nW)VH=8J|jK#unG&?#36^abG-Z9>J+RW0bHuv zN(_Yx>^k|dkP+^)zLXxqOvj+ zWC?NeWnA)5NfE(5&a8Ro^(&uzP+&@Lk88U+b@-~tZg-}FVWGfJSLUQt@fYMU?a@N#zinblpW3TEpJ)*71u0j{JIr+0r z0at-rb|1^A?E31(9&%icn)L!{b)bqn#_CYznKl|}-0a9>F=su!$keU;5taA|ryJLK z`R@kTFH$^gw`VZih~9{9c^e%QQ}P}mBzz$tFHMNw9DQ!qijhO*(yQoFvnyYUv)ja7 z&!w5@+%rD?J`d*J>*~@RE zn{?D;ZE4bPIDO0-D;+t>of4Oeq?tbgzXieqP-(VCy9;GzdF#HLuHI)q6Ib=y;!(>a zT9S+uYyDUcH1B0`+K4VzVca;iCM?uQT0()WKPv2%s#F|^IJ|4~lYOjv%RpB?<5O0# z>1U;k@QVeC!@SE`wqAkn-S%X2e<>*K(O6Vgu83X!>a-BNWX8num8!tPiw=IZ0KFds ze@_*g%ctqY7~)y?Zo5vL87+HENvm!?{T#%gEKDLLaqM2_x$2hUFYL)wE<2=;1=g`) zJnfp}4o1bqIQ7l~C;zIn+8?CN!93^Fa&$q{1S>RtNM%-BWS@DlGvn7IDL7k52au|q z@)eo*^7M#Mz-2ll%B}L{>ZfrP&Zxtw&1x-AUxm9XGjph{pOulno+;_LCiXfzGziQ< zCbxpYTjlt*XL(be{N0nh%K>rbxD8!yKM_ot(jI5lq@YD#x43qUyTZX2j*+g@&-;)0 ziF$95_=Ge6RtoWg&hdS_Y%9~xVHzf3*UV@Zi>Le2^Af2|^$gXAwXLmrKly3fs`IW7 z55~n?M0WM>BP*(!?J2OoZL9WFndZ7F8~LVpi_$7}$7nei&FD4x^U`ENM&PHRHGTk? zuJ;77*ju9unG18;xb~Y*S`a~=gOKfPM)7FtY^-0sK;t*kO1>F|kEvakmjyw-WDle+2{`Vt#w``vkDx$4CR~n zz!~!Uux0SfcVxx7ctP{+frZD?NN$QpD*fSZitiWD}@ z*N}1Q6i$a7mv(Mn%ql7O|6sU|-r3NE@OeDk-0nvetWS&1@R9g84vV698+kdG=%76s zn0QIiYs}+qJH5|nv|>(=pXZhO#WCv_ba0H+W;NoM7<&ek0LPb#1D~l<%$n3Im)3Oz zHZ2=Dp6B*{NBJ*!zE`5wQ^Bc)LjG9};}n=BsG5=bw(2h314tv+Bm@M-QGD~Iq`zYx zb42j{%^j&KrlCUYv=uQ>@IuJwn!u&*R|VilH~=Ildi^`g$R**Tq6tLbM_zm&M*-v@n9KNB~$ zO8^28Z_Z_)o1Iuv6K&eQ zeyXY2*?2tLtmu@-#*#yZTQ(G7YAZT^NZsANc%neJ@SF?x>XAB;vfwo`svi!INlD-H z5-Zh4SS$j=yjj1wtT`@vNL3+~ReOClWtZ4w_hRO1xwWLmgE+j%UqCG$JGIIR-%Ux5 zU`VaJL~;V!VWQ6C?`xV%<;c@IIT z%Xm`yx2&Xb*SdYI)lSXG$<{jL=+UoDbS-tXN`7L^+L0P8e zo`*A=G@GDl-KyMBuvwjv z@A1gm4EVJ-q4O~~we9u!F1>{(3j(l(FKIED@87>m(kT`?e|V{hrk$TJLx`L2!Fp&v zEcK9~@kAd;$iZP@Q(0NrB-biHFWB!`)iY{eZFbBE1V7h0J$Aix4m(i+gX2|M?QS>i zCS}^}vgkGA#=MH?1h|;ESSK-O^>p^O#SzIWS0ID(B27*y>050wUv1yPXo722@#QLx z92{@X?4+x3r_|E>6TTu#*) z1S+wR=VJ_lE0V2z`rlrY^;r{xLMs#k0s@K&k*^&@BqtYJjvX^JGP(mZ{^HzF)f$wq zx=lfZqK}c}7z+!Fx1RGC6Ia)}R5r%=5@8d?$R%3LRYq0m)o0uoQA{n#f#6_j$f3N$ zjj_epIo__cSsrVR7*yXCD=UnP*5@Aj zDr=j!c!?zktT$k9oy1n>PT6(8*?~3&Oz_Gvb9s!RHX1iUeeP$LODyQ0^ITXGhV{@0 z6N6rx!PB{`!nXDuR^V$#09t`8G!*rzv6-v2r3uxGP@k_YCTI&@8!T&UP=LO{xZ65) z+JG)}6jrNbDYZlIaM($O5^Na!`a^9kE9ySN$)-&^OLlW}b3@>a%hc3VP*fD{lh?U4 zaU0g+0i!1kfp{pYe96}K8)1EMZhoFIMa898Qf{(|^pfF5!>@tH5*4>=-j9!udzLsE zzf;lhZrLCVWM6>t^r0|UF_o}A_~?~>Svd}2-nDo!Yf|v{U`{zopnx2g`_ zVI*>p3BoZ z#%5SVHY<_dGX}%|>Iz*H-f}Nz)>DM$)vJTW&)^rDv(Nmlm*(d$9-Zhk=-7Obwbs%Z zql6t^Ha?Kd`i5%zElFSLxdW=inrzmtsJ5S#%iK~5@&AqDWcB#}MsX6R=K7x$CzTEJ zVmqa3^$iRLSfCBO**p-Y-cVM7m=S%YZ2tI?Spg-V#}ozw<*;p_8K_BH1}nx&H^(9t zmJjrP&AT#Ypa`uOp$|~M=WvJ!eU0aqtBh;(GTP0<^1VmxqXPT+65JLY+R_80I?T|w z2Rq@S$M^VZSG^r}%6ZWhCv`6@Obfc;r06B?1O-`U*{it>dnV^@>*bHo0jPQ7{Mn%# zDlr8)HU*Cvjh1IhN3E;L$*HIs!*($9KL;J9``rxzI{|@Xq9;`LA0V%FDk!(>Q8}_H zq@G04e+c6a^>pr!T#Ag2Mynm#1>9v(+tp?jU;=O2(9G3fMJCnu}-R+6e>#=e?{k!%GGakbN-uXFYJmAzk7s4vKO zEp2SA4jvI+V|Q~B{EpQQ#3iNnYzj~I^z)?UC7f)QrjZ@SYOBMGkM&vId*XucbIo04 zV)AAY?>DR#25i2RrgFol#A)i*n{IlqBvDlPtl;E`GJ7%lPsKIaWpCai5WpMH#qSN$ zjyXbtIhAqP3KT_scaNB$>IdIXcLaVxWlB&NDKI942Ab=;2-orV?W$%Ul9A>Pt=sQv z&&nXk70Co&Nj(5squRv3A5yR-yyg7tLA3x$_#X$;=PnQ={R>{P(w&uDZzc4dcvUtxWs; zXLaV-vAbf|Yw2Nar@zEIHM5tccYUbsGw-DGhsiP(FUwfonHg^B-Em2M>BTY6GdZ;` z4i0bZu}Rn5Ybx$D=cO2nW^%~yhWhGt4Gq;W5stbJDkdZzC40ys!c8~ecaIRscAe2o1yezyihKxFAE5U3d8*`oGozD@+QzR8k zk16`u_TICX5H}znYJEhTAbX7zEsqH$I|&5B^F2B_FjHi&eJAJ2a%n4IW9w$yoA!of z-Ia?_?1psE!#-y!Oj)_&53AJYZ%)xaC@ar~y(M-$c+agp4)8kTmY&vogfX&^dwbt% zAlXavVDZRLr)QYPQqL^fV2Xe;s_70a%hFv2&}pc-zZfg;atKA}C@cRd^nH`?4ZUUO z?4?WT2`_>K0}6D|1)tEvl)1BPGIo;U5~6i#a{}vBBp7YI=}Lr-o)UA(&Z6?|(N}pF zm*qQ_n)7Kvg?>9K1_FhlbHykH>bxqoB?V7Mnxf(!XnfT&g#P}04El~iN`}P5S(-NOQSC?UHdf1W_WQX8)3jz1R5aij^jwl;XRvu$(PjDT{AC2E7 zEVaQy-F4(@}F{E6lO)vMb^#1 zu-mu24P+hx>JC~w>n?N2@nJu&ky}g39Zf+CFVSx18S(6Yj1x(C}i8(%Ulwb__osk@9%c`+qKvr!Ym76LkD<7}Rp7#E9wzG`N& zsYwa~@dG<{%wsq_IKGtR}%$abIH1lpNE$j&TTB6rS5dYw(W3%bh1cd zhFQ&xy2tzPDc_`i2covVzLwRc14g&+4uiRcs;N9cBHHRF9G>RDB`8EuIkKKy2p2kE$L+geuc7)ay3Va|3rZzxsUUJ1-$L_vT^GiiQH zL9aQ>S_lk03|1Jk{f4ZIcQ8mOFsJ^xTS>n>nL8poVR{ri`t4(>uFiIPo$ zL|6@|h;pvUXu?DLO(ahKbBgL7%en`RNk;MECfLrkvc`)|_?IVWAJR&<)E_4{FC)iJ|SSI`W<` z!}-mhtHrmBb@`i4ov4H&Y8euHX)*r5Fy}YFeRz9g)BWK_0Ta{QoBDQMU#F#P5v-Nz zI9$^t@(CHszLvv6%s-VTXTb)KkYS?dpWRq^-JiWVQ>tGSfHQY765W45qoS^!ota-p zRs96@=Pp0JtSNktnXh{|pT-y>2Bfyqo{=*ev?2kl9MUZVTWLbw4xg6;>eti z?fj@i)n&A0tgNvCrM}j3+&jZ40&4YNA2W>*Tc0^9>&JV6zO228GXMD<26aMrHB z(IHS?j} zp^$UIBRiSdJ<_fRJ=*qMe)egrY89Q3}mZxM}v2omGP+Hn6#(s9vNo7>VPUqn=r<|{m z{jKjGcbu>A=|Q(jR;=6*=_t{di#>WTL4vBP2tNR%RaYM?0Uhl}{0(~e!Rt1DI4tmW zvaCigs9@@O@|oFa<*t5b0S4^O1lz!Mag0;a8Rm+W=nMWSwwz)@JFI$r;_Hx)R1J}o5m%i7x7JpXRf7)5* zHP36;@=Qc(G?IW`>D;$(UY2$o%Hm@?|mE{-}LOuR5J6-aMa$|W)(TEy6*Yr zy3fLu@K7b}&4wcINu$1z(b3dfyUs$3ItURtcjs0)`<_{ui83*VD5PabQ>r+h$9R6d zFy@;+b}`BD6?xTZ=_j`G>!Z=ieBae&ZEsZ>a~Pj=-YK3nR8Ya76K{J>`TT-qG86T| zQKKd_G?8#BOOCF^F5rteMmQsJ;Q%@L zMqOcm1fJC5b}K_Y`imRO$Gp7cq0C;Mpa9k45ep4HJ^DMeY=MiTEjAPF=^~vi-Q}gB z%1OSufF@3mV2pp~Tl!{;arf@C6027%xEffGM5bEUm`;E*{IUY`A{ixY6VT7PUq-dL z@G4Yrh%A6^&KFB|IGI-7$q#b822=S`*Oj}@%0H(P61-CDPLqj>itfw3-q82ylja~x z;d4lwfKGobc!gbiso@Yhot4(0I!6XY2qKcMH`n%M)cj3LZ>8R?MO%#Hq|A!K`mM`F z{<@#|y?hk{kz!q!_5}uGKH=94&$@4l3=zgctxrtNgt8Ll&OD*xNi#QoorJSmekXV! zeTL-In-Z3bo!U7LT%H2_NzwKLm(xO;ZNUaWMT=`~x-#E@knR<~ME!kuc>d~XCc7Ua zJiw6T0N-vYR+al@jFm7gvkD~3+kNZn*Pwo{NJ{m>;^GIG z@wP4pp|ZOtR5oz~Elre^Wi9u8i*k8sqp500y%%Gy&hFQX^tjq=6 zh5FH>U}#zfi8DUFzR*Q56!_%F+S*qjCN78sb}dbGOtI}4#3H@}{$IYxZxl2%K(mi9 zXi~av?P_^u*UOZOgDf7iNAwq0mb)w)*{r3JTq7W`HtlJKaOudtVKC2VCzH4gt*~f* z7&}Edw)FILH?D8>^|6l=gr|<2*Gam)w?Uz5okV@vbna7&@Lb1O>*-T2JWS6L9(7rG z>#m6yT6#}QUGTgvKBKL7e5XOG(l?es-fjDejw$Q$Jt;{sK}qnl(?Xwp`rs3sn69Ly z%lU)zNWs*sW&P8*ex~(h8J0=nDOd)T4J-FL(G*(P9RhA$ddBbYALD~i-^F|1SW8_+x19m||!#%D4o>%HQ9e_(B-qW;NI@X}sSF7Fky z^52IM@4oIx{;YG!=J4S;xsv_@)+3m$jr8oCU|X+OPNSOiw6q_At_*LM&X79V+wDpu zaeve77=~`re57GD?a+gk3!PimEF7X0!#p~ncia-AiRm|xK+<;fR$2~VJF9Q#QmR$8 zITbChJVrSCkWLLY!d#A1)Se$?x=z!rZ$v>Dk=o(Ymw~{hp@I#3d&ji}pEAtIknv5< ztDy9wsWe>I@caEXr9Zmj@3_r&D3;*&^0lz+X99*GTh6h5z+i5C(rI`(4RLlF}b(4=1I$@xEDO4MhS^DH8dM1Cy;gqv$UOXePV~t2s?Vm9#3R;@D*@cS^k&6(3A3@p0)^{8E;Pl=lGmWZ zLfON0_1VgrE8gbZQ!8&@ZuslwCDYbu^ao_^kLBmy^+t)pOluBT&svqobC&I~1EUYA zzgEA8;9g%*zx5xiPyk=FPDkl(VC!l%ggtbZ*5j@BDJ_)}kaq`LoQmg@%ooZ&NvF9n z(`pCAgoQCca^M|USqbuPr|63Z+b6G0v>$4c^=A1&!&+TitF_GYXk2t=kTd6X@_tyC zQBhIbIYmb5q+s!W*lLam^^u~ThJmqo${yMQpSt)NdQ}GLrywv2v2r(3&d)X;@o7^} zO2SL^saw51_{oK5?n}wbii$lOiGZQdr_uOOF8@JH^X~*bh zUDqBe#>5L43n@u=Wp@^8A@Tb#t579bFV}pb{yIcmx`c&&pU$y)ldH@F4H6r~H z4YvGHert`m_vhm5ib;wlTqlDZ=HA2M+7Pz;)kO?lgA`e5X(uYEMFa&;RP>O0TkZyD z)2gPYfO_Z7h{+4SzP^BC!Jh_7;|Dl(547H;w+_e=g^IMKe0=dtNa4-@Tx_>n1@%{>TLuOX?3Z z3mx5Enyqm?mUohc#nwe-F?Os64h3CwUoOAwMb$y>pBlzh^DPPcar~8(8Y}i_?40V{ zD0lP5tD>Qzb?N&Lpzy^u^vEvqN2WmYq!6sLBMGZjEUz9%I>P#(t{IIi*v_uApzsZ;YaUTf(sLuohQB$Wq4cX80T$TkZ#0j+^OuJ6JwCZE!mdt!{A1-!BcaovB)>j9^JpzVJ3onODf;^0= zj4zU^_qc)&U85Hpie+DCS0ge{RHwXK$jx}Vkntph{;k>KdD3A0pidL7>+=1bvBXS~ zOIS8=`0GkzbLutyr(4k!yeWDoMKs1+(9{L1=q9SFW9pt-D$AC%D;M>w)u+C92vgzT znmzyC)FAVmN~THvSt^VV2jt{PI(!(a3JTy<*ahukz!s5VvMtIVaJZH+f+ew;tG+Gk zHW4}DVQEA7TCQ-l>q2bQWB&}}oCeg>%RQ{P5B5KpTD5R}<64^OpgCGmQFr20HQ2Fl zv$J8w>c{3Qj&G`6xpD-havwkkllB_8;8De6BE!)&p}gft#;~$#OxLNvv7EHh;bqsf zyO0Ze6`^u^eUj*L9zlJxnI0{!aFe-L8Xo&uDbAhqj472!?A>trq58b&=f2`#Bh#Uk z2^>(cPheD%0- zgV`)%7bmAkqMUc}&(072=L27S(!7khiuYYTi5ZcfqNu2dy|HirE&4sqlLyI+4k^b? zT`it$<=nlsqJPso@4MS%O9`6=oiv7Z(jfV8-Y_u<^N`4H1?duC8C!aeRpEWXyyD(RspA9cVEY-NV zaEZI8@70qB8={Fy=8FRY`Y-eIzkU~oqgMDLp+O3(ocszYBhOnM{kLaEPL{RjB=N`P zb4NvavZ~sule#=dGtFBy1j&9UpWhU8PNVt%Ts7?PJygMJ9)YEyo)A_T@vguTYc5_m zmh-TElrjC5Qc>zF=b#3c9H}i=A(#E|o!O#sJ_54ZYFg$y{WYlkZEX*FI<4c}I(vD| zuKZ=RK5chiUmjH28k!xw4?0Wm_+l^S(w1S#9W?4Rc4Xvxk=vwX4?W9qE$!3B z+@|r%B$yXlUswoe5DMIr11`2G^$v79GPec{hM9yvdFt+>29YHl!zknXGyE563V?dtl{<+ zCQ&gy%gEjOX5q(PafqtOt>v-o&Nw<(fVrxQSa^=##-0>aT!|&epnrcP4T9TlXngQx z)N*p5P2W$lFw?9mrzA!IB%@&+$Kp&5#GL8)0Q*i*@a#BBlZRr88v7d0th^{+Z|Rh{ zvMTcx1_O}l(n=Ww-u6RD2z>ER6$L>XUmnM~Z&V6DhDKS(j7F8DmUU|mU$WnA{h=YX zSyDRF$E@MAU|_w;K^=IU!GRqTuWHPv$g(IEi0e&h^AUpsColiX&v(TVW#q{SHIq3f zP+1FzfgM{NjQuX<=c3ZCeNb}oo-LLiuSB_{R{v?y2N>1gnxvyC56c?d8TpTm$s;4` z6BB2&;ze?fb9nj^MH@eocI7{7_|ZN^#zL6uu~VKyV-e>z%U?`iT`VrQ+wieF->hS0 zzG(R_G}_0o4@<0E@S5W`kYR3N@Pl>%hUAzpr3zJNO(><;=4UgW?zi4JbaH);LA>&; z$(=9vFzZ{d`JTcV`-KMX4H@X)Yaq|7YB}f1fH`sU{R+oxnQpb4l#jRxIyHyai{Lm$ zH7}hhrCPkBPZiBg_+6;%x7tedduA7;KlsV#vM&6UQI*r{>D`ejYK}cV-;rV0n5*{G z^0=-q@n+6J6N8t<$_$N)5DsmhI_n8%gZB66@lSAO|nHap% z2XiF8w>K>#o_74)60L7yie3-LP7Nduv5rw1mn#uS2cCO)h+H(m-ZybS^CsWY zjNS?Ph(juCRr+W7AJF+dihS)eM(0jVzpQaJ%|20i*ZskP@wn_NJ^B;f-j3M{zf!fk zP@E8^wldXn-)Yg<_M9-TpE5f;dWdSQA;Le}E?!%_Aoo_E1%!rN4;CBKtDh$& zpb^2f%?mVsFcWRyr3ltHscSc?ql@Z2%{x$?MXRZnq!gz2DL>C44CzxW_INVd9)d$( zF4RRyycFK-GPs(}A6;l#+WuN(gBvlAm{P&?U{ge^5mqj5ox}A_fljG@Pa<2oWl60=hFHGT%iu3_P2Z< zpK$wojG_0g5s4!NCpZe9C|kzks4E($PW$QB)S8^rGR|_JBid`MkYRNC znMh!C#d$Z~Jdq^X>l_bsqw4NWbB}Jr+w7u7X&LHoDz#MBnLlsANG$|)BrR0M zB+oiH{0!sthY(vOX#u*-+2lk%lh2um?-e9IkLnU)*(1TMFe9f<3{&z?#x_N7e)n3!wUW%CI(MG` zlNOD9HBX2wNz(YQv#Tm^){|bBnm{a|oNa2;%-djAvFT$f12mb(mSOh%c8L>U^Iv+j>9_xOM2 zzM4B^xt>5F1X`y%<|CETl)56zy~~=uE(V+5WfpKY8!eOxnKxf4=FUGIx_IUwA&B;R zXRS&d4}%7za(bJ6F{>w0q0ZN`QF+DhytP*GWn#A=e%8mly)$nFk+EUm;mhYf97b#t3KGBDA7L0-E@f5pI#r`z64UaX+)7NPQD z)=%Acw8$++w!OunK9-j$@Uxkmyy6C(gw^giRbp2*AD)%-6XIIK#e+C?h0i{m1mX%= zos?(&^sKVPRih_-H52@%0h-BN-y2$}xHIlfx@E(vmRCH_npw14x|9O(bsn;J`_i!5 zt;6Y9E$&Z9_hTW?lM5uF7P)PWZ~nPq+nbrB(N7(Kx^jzT5Yf0G@9q^&CoD|%B;mkdDV5M=d{77w>iz)h}2N?fG=K0rRM6 zR>x7ADKv>meh)idx|4e

    `|h%TZ4{krW@;q>OC%1&eeHIi%+-SH9Xe6y^KERzY}K zf#&q~MmPcFHhJa$Nta2>`b247d_{N-4QD*#3}|_fcc#m+f4BemqNxZ`T@VUfGgO+S z=(X$aFyW~=LRhab5My^qDN(s$aC}4OK;hn(@=+i$N}$ zZc^v3PD>UQwWOuDWyrEYfrdow2?lg`I6Q{oq# z;Sqi)M(%!+jZj?Ua3ZCiYRIt*yO8_PKhlG2xWL-c!r$iPjW>s_Ax#81siAf@iDF+T z)X%%sfwiGm-uqGlyKGBZBu~wUC_F>14dvRRx#J;rFy@sjglN=b$PWDcjv4YB12P9~?+}#&+cM3O?3Gt4N zy54W>eSJ>p^#bM|#f6uy0ZxbZCitwz$}fI-porl`6jG3ej7p9hZ(6=a4LgoM+|Yqd zATEdae&uf)OuEzz2>^rOF zu2W&e(raDnj4-c;qo~Y~uQxB5cz1ihTv}IsM8O3pCx>weVK)!~#^vFRa5RWt4krmuRX%;$Au&APvo^h2 ze7(4icL)7)p=@pXn7jt)nF2^(64JcWAF@{>B=oZA8Xw&MtWjQkCGqpYO71D?61Zp? z{LiP)bY;+Kdsmr+NJYbI61qpenX2iH!~K=oTme64P7qR zi}N0mK37abxBX2DcaZmQ-^!xCmm35<@*ToVr0Yb#(Dkrs8YSVjmRIGamU}P>5s{V> zREK2fnA_~g^367U6ol!D8&+~lkEZ)F(zmSw40Dm+^@_`q2s7LGdh;&p-%`dV*po$9=l8HjyMlI`U^w_4`W(P!zzoSIc!k*xCssQ48Itl^`&QuTQ* zV0$M{HfUWA6Q{7Om!3YG{;5CR!x&{NPF^l%H1W!|6A)Zp*Ly6ZeC3B`9MF1F%-f0S@Q6qT zpl#9??KNFr^y;LKgR8ka{xFGZhx>2C`@1X$Xk9MsPF}|^sjTN@405rBZ#|BPL<#b( zpdmxPgDp8edFfx9tl;DD1eKy+bZ2P&*oxZb35=|-#J%?ZVz_sKhkUYauep?|ZuFiJ zyd^1x#Jo45*=Ey2TlT~SKaZOTc!==*a9jT<2r`1Wjo@@`!Xy=o`K`W3QUo?xtsHnv=|@Na=fR@a%xj(iVTXQuv6{@abdReC}9G+c9^Y$^#2P$N9Y%3aP*o@fJVwAn;-zlm%G(JqABYptlD z3<$rI$f~o`m6@pD&!k2y2}D*A$%GYbFXBLO4M6BD$ZKCtfOph+oWM&}MKC0p49>i1 zlX#*mxlX8svm;l}iox%L1Y1UvyxMM}8f8DyHYe}|DYc0vc=Hv`}I3dS`h*?I1u#-upwJ`V9gKJ#HNu#q-_l^>l=UPG!drBtxuRC zV9k#idlH)Pf@+9;PjB1 zQ=3@8r?!9>M5u4xM12nb+D`HXOB?h@Rn4Xfqg5nINn*aan`{JEL&W9V^Ir_~XeH`z zs)QiTOZejbPmF74zLJQ=uY9m^Qcu+TmbdiO&Q0Cgv^nZd|EXML()`+!yoRZrnv7aj z&YXD94ds&`DZ676TU6@&yHwVUW}J$`$g|d4Lj7R(Lb&I~NqZlO70i0heu^j6 zKm0~F&76?Y*N?PJVgh1S#(WnnkIf(sZ~JGn#$gv2r#IrtFpMofxXW3y8xbyVs)*Gb zf+3O9%_8VL4AaQWBsX_(Vys9DNx}+Pm4 z>&tR$iyLNCT&IHmB2#@QilEXAZg|5LH^X!I)!i4c0O0Zm5UGjP2eH0Jn-{c^uH%G2 zfzbXt=$|4+++&1&*&8T!#+KeDJd`9+CWJCotzbzd>5fsH>$HRj+gMgsS<&dSZ*lUR zgD(-AB}1BGpQYr8iUrH-=okI^h7}yIU6SHjQ3~pHRKWwGvnFiEAO!MZ$`JL3v5Q+d ztH<}ErfRA&$}&Z!yWWi@dN5=5Ub-BIxs6dbljG}elTKmzESkFIcNFuA2OWz7ep&6` zwP$cjkTpb?n|vZJY(pfuvd7-cQNuUMHH}hZIt2f9)wEBxu=4cLx4n}(C^Y6o^${I8R--rx;ETu0$%VRTPcxtdw;P~jAF za&+hIvA<6Fb=j^0BxI+5l$!vpd%U78S^JTiVl$eHpQwwLCpRr@IW!#1H?C+;imLxv zH3z2z#V}~E9@Ano+qb9gjHO^go@&4Fmm{YRapN|SLVlm9mhe^vbdUc-##TD2e=L8E22LYTA%93wX z&TpI|%l{f;x1kg73aH%RXW%Z4Wv}eb=Uuwxl05G?@y~J7C!)5OqhOc0wf2pQr<@d* zcGr(zmO8Tl_yf+|)s8;CgNN|WWRLqkI%H(Ij-NO-J9D7quIK~STblf{0fSa|!Ab*; zG-%y^dGoJ_K{s{-mw5t701m-Sw(=E6Zxl$y+?l!2jE~lT=(Sgyqm1Q!Lr4Ukr|>KP zA7F-i2J=Vn>R;$R`2QDrn~7kap~#(;b&tgb#qjz#J>S{%blgJnU17&epYi=Cgy(J^-11N zAX6xwON0QlLrI7SR^mo#4-+5%G2tP~u)WiCBnn6o83qKAAFF^Tn94p&Y);$7AAni^ zlJF{B2`JQ`E%-d6C$=X#z=Z&nrHcc`Q$bf!sl%MHW>e=Q9a()6dPyDl1K!7&yNn$DHeX(ZAO7Uffr^rK5jG zT7~=X!Et3E%Dg8J412rY1yGFAH>3Bh-^Cqm#EnpWGV(PcPEW?D zqxD<{XW97FWr2f-EC(^&K}w^B!;!SOdDi&D&9o~tH;-M`z3rWW+7zy%H)W!kTz&cwn`p-sIe(e8~)q+%18#lWC6#IrDOGhol}! zkulBprtVrLOg%;cJ!X>^nA}_4Ok`z}zJX}3v-2*}N#2YKaijpdyrPZIJT#D56mD2o z*w=A39w8|5?*qL`^_QUr7#2q2mFVKG|A^93<+V10d#pPpQw{K|^N{nLZ8FCTneL}9 z1azF-b6@fN2#;mo0CH0BioKXQmns8itq_!+t0T2lv(d7lPP69M)r<9;i-+&W?0UO- z02K*kk@c#u<=ZTCTNYx6&YwZnhgJcSNie^8fqVjjc5OgEi-Q6FW#&H4g_Rv?U^r?c+kzHi)@9?NJDC7P$1ol^I$CHgC|Z?Z`l zZp`LMsYxK~=naKs?N}Hu0r}*yK8csJ?$}kL@y98NNt!HZEm97ElS0HwtoZwE_!6J5 z{$TQl6XBFv@>%g;rzr7zvi|377v#Epz6)z84-l9hGx!%F_za%P&@w|s2Z_`f>ong3 zv7nlCJxN+Q_SD^Y!fZpQpebAFN2ROD6tW@hv&|^Z6^)OfYNBe@>#GH7dBB@Cs@2G5 zIe$LVAnBUTx#61?^_Q-Ag=M#g2~s;KkXNxbG<;f@fJ08&zrz~?k1IqxrnZu5kQE7H zU*V-!R{V$P80i!izA5;DERfiHd~Wg`+-PW`#ZcGNqM*bS1HY6{T8c)}7mHiX6(*R9 z=AR%^=x79Oy${N@^vL}HxA78&vhUl{mDhdshm+v$!Xe<%#WRs zh$Tt}fAw)na=72x*;!suQL@q#t^UU+vE`fi*9ujpOa`4V)52F=)9C2-_+@lZT4<-g zLg8OJdhpCEl}t8Am!Oj1IKO`pe<~zClEla_uPEdgjqskJ441d(S8c4xMxCxkx>zMS zIG9gt`W%x|bzG(R7lzN{i{H^*4tXE5(aYOF{$o#Kh^cFlNA*T1Wl{IsKaJBi5J@}k zSn!}`tf<~8l10;6biS+Ril>?7Z8ZG;H|Ar@H}J19-52TZy*%p3`m$?vAX@%Ha7F%1 zaMcx$w0=y-m7oqY9wClIL54q}0o=M~sJUABlb>dMa&#{>o)#HfzI2`dRM8;-?xVPDemI4Aca?TQ>H>uIWyN7@P`N0WLCt&WHL z$g4LOg9eRi?_15TnCtPfF5$j^aub*gu6^f^31{W9xXJ!Tcss$idEU(zFE-CFmQb}< zQ~iw_07=MX2f{zFBlK74N(eUp?}lanZVlB;HuUbyY~;2@pYV1(>M@b{6+HF)v^;?P z;K{}5%TC7~ThXlDzkw2283I!F5#UhRUD|twb&S919(oaQj{loLBZY_#1mvuN6r>lq z?@aFeGs^g%tM)xag_pPdS&A6A2nhy4UMPrXDI!D^@z0blo{3lhtBD4JUNDj@Y=VpV z!ovggX~FovnG}-ogYXUp0L#)(-!+#Ev;TdxwDgm_Q+^@TFZf_Wq)%=}h3|JXnx=HEP^kU2l374#sm;~0Y?&VOF( z2{PRbMKt3+hq|L|h0b58`v#ZP=>i7hXAAeW`J6r5es|da!AEboH${bs z1!w|Xy`-@+IY(5vHX@Ds>x?})1Dh(>w1c0bc>fqFLjB}cYv@#0=U0eyon}+Y{4fP> zjmOkHu6)C_t(%YTU!f%z+9|>GgNcY!+qYvq;-T}~V8^Z;VK()95= zE{h)tqBYs5os#!$Wn4iZ6jqP)ZdvxQLimXtQCL}XZN|DA_$a}E88oN}4G8A!#U4PX z5B9NI=mrYt$JSaTWjI}@BgybPrdqpO(sr1uz{cur=N`{eD z;!sTiN4AOH3{0c%lUrSEclHVi$sMcwjG;p zRC&_hS$FH~#9i4cak#%D+EJ{qpSo~xE|OAcQ@zpMWWu93+_B@2l?XRB-NmV4yCin@ zI0K67U0Dd7UXa~5R+%nK65nfYcCoN1s$`|CqNRAZa#jnHvmAzLE9m5s`cwBa-WCAB zFE7jf-}AXuCJG`S*e5xpGcNm9ykOr|B;%)zw|5!-LaO~~$T8cn4X{qm)!n-RMUSDsAG^FeauR)mA0-XQWl9FFI!w@fbZaFvnHQo-0<1EKZ&+E+q0U{TGN2 z`HYdd8TsOqVSwWDZFTKQKBk8r`wj^|ab*;Y05E%aqyK*PvENn4ej8&~QDUE@=3dn4 znAmHT#bf@lq2wl8_`M3`tr7db?!O0$`C3)1nSw_(^@z9N70LRkx@z$?iud&`=JHhg za&jbjATpoQQn}s<#=ACXrF~pfdB>^L@d#}Cp1bkljheGaiR`68JKky18DDmgZbNWy?}N*&DJYI+j<>Hqi`)2*Y#vd#aQlzP0pA#(BBu_jche(w z(ITT%!6LikAu%u<>V0B>;1QsCX!@@7gCcCg@qbd%yLbFKU%;7nyLRoGuEniCv9t^g ze25qgUdoKHq@iCX#{m3T9~M4SPDiL=z<@h1H90jy4jy)QO$#o^jw99 skK=A#N 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

    #h1{YQ_=LBcRAYgU}N(r3NE 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%0APQ1RL7>ui%hMOE_1Yd>NY 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 diff --git a/icons/mob/clothing/under/costume.dmi b/icons/mob/clothing/under/costume.dmi index a3b6c7e50507dc9b5487ae678ddd21b577fabfa5..34703c070589d17a3558382ebc3ace5c008c7a47 100644 GIT binary patch literal 60960 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

  • 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

    luKH;@F_@D%` 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 z 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