From baaf5dd7b82e82c2ac4e6c80a82f5d7426a2b723 Mon Sep 17 00:00:00 2001 From: Fordoxia <143041327+Fordoxia@users.noreply.github.com> Date: Fri, 3 May 2024 01:26:30 +0100 Subject: [PATCH] Squashed commit of the following: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit f49219c0197cdaba877c1408a21216df794bd930 Merge: 4d7a67497c 5040dc286e Author: Fordoxia <143041327+Fordoxia@users.noreply.github.com> Date: Fri May 3 01:25:48 2024 +0100 Merge branch 'master' of https://github.com/Fordoxia/CRUNCHParadise commit 5040dc286e8803d1361de6207db2c49b50b82588 Author: DGamerL <108773801+DGamerL@users.noreply.github.com> Date: Fri May 3 01:49:04 2024 +0200 Makes mentor PMs show up as mentor PMs again (#25351) commit fe59ff5c3d73cf51b71f80630a40bc056e45a60f Author: Contrabang <91113370+Contrabang@users.noreply.github.com> Date: Thu May 2 19:33:24 2024 -0400 adds more hand keybinds (#25225) commit b14830c85af1f09df66432fd50648fcd5b580943 Author: GDN <96800819+GDNgit@users.noreply.github.com> Date: Thu May 2 18:17:19 2024 -0500 Timer log now includes the function called (#25308) commit 073ad533faeb86eb7e056b8afd71e38afaae1485 Author: CRUNCH <143041327+Fordoxia@users.noreply.github.com> Date: Thu May 2 18:38:45 2024 +0100 Autodocs robot_mob.dm. Removes an unused proc. (#25331) * Autodoc. Removes unused proc. * removes a space * Update code/modules/mob/living/silicon/robot/robot_mob.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com> * Update robot_mob.dm * Update robot_mob.dm --------- Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> commit 02a09a7c7f00b0466608df536282cb88b5415706 Author: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> Date: Thu May 2 13:17:12 2024 +0100 Upgrades TGS build script to actually build RUSTG (#25340) commit 2144a93627b3ffc77849e9d559acd8e898be7e8e Author: Henri215 <77684085+Henri215@users.noreply.github.com> Date: Thu May 2 08:52:00 2024 -0300 Mining charges, second try! (#24790) * mining charges * Apply suggestions from code review Co-authored-by: warriorstar-orion * span class * deconstruct comment update * Apply suggestions from code review Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/game/objects/items/weapons/explosives.dm Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> * ops * Update code/game/objects/items/weapons/explosives.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Update code/modules/mining/equipment/mining_charges.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: Henri215 <77684085+Henri215@users.noreply.github.com> --------- Signed-off-by: Henri215 <77684085+Henri215@users.noreply.github.com> Co-authored-by: warriorstar-orion Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> commit d587effe2c728dc028a8f15952a287ae0b983cc1 Author: Christasmurf <25437893+Christasmurf@users.noreply.github.com> Date: Thu May 2 12:37:44 2024 +0100 Beret + softcap .dmi split (#25314) * beret softcap dmi split * icon rename * dme crlf to lf * tsf cap fixes * Apply suggestions from code review Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> Signed-off-by: Christasmurf <25437893+Christasmurf@users.noreply.github.com> * vox cap icon name * remove beret subtype on fluff * Update code/modules/clothing/head/soft_caps.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> Signed-off-by: Christasmurf <25437893+Christasmurf@users.noreply.github.com> --------- Signed-off-by: Christasmurf <25437893+Christasmurf@users.noreply.github.com> Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> commit 15e7fcdb3fdd482bc1c48264eee2964110cbff63 Author: Divulf <134484326+Divulf@users.noreply.github.com> Date: Thu May 2 21:59:35 2024 +1200 Improves barsigns and makes them buildable. (#24685) * Improves barsigns and makes them buildable. * Requested fixes. * fingerprints and a parent call on attack_hand() (sure hope this doesn't break anything) * More fixes. (the change to barsigns.dmi is removing a bunch of almost-transparent pixels on the mead bay sign that shouldn't have been there) * Even more fixes. * Better code and sprite fixes. * early returns * better * more * switch * qwertyuiop * whoops * maps are stupid * mcramon sprites :o * i hope mapmerge works this time * i hope mapmerge works THIS time * zrsxdctfhghfcdszzsxdgcfhv --------- Co-authored-by: S34N <12197162+S34NW@users.noreply.github.com> commit fd30c120473a58c61e2e2741b9a090e885890441 Author: Charlie Nolan Date: Wed May 1 20:04:42 2024 -0700 Secondary goals will now refuse to generate if messaging is offline. (#25170) * Secondary goals will now refuse to generate if messaging is offline. * Apply suggestions from code review Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: Charlie Nolan --------- Signed-off-by: Charlie Nolan Co-authored-by: FunnyMan3595 (Charlie Nolan) Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> commit 13c583d2bf755f43701f0acf38eafaa545950033 Author: Mikhail Dzianishchyts Date: Thu May 2 04:57:26 2024 +0300 Sanitize empty values in `file2list()` (#25255) * Sanitize empty values in `file2list()` * seperator --------- Signed-off-by: Mikhail Dzianishchyts commit 87aef935869e4a3eaf5192c69ac3a8e0068afc5d Author: asciodev <81930475+asciodev@users.noreply.github.com> Date: Wed May 1 20:36:02 2024 -0400 Allow borgs to use holopads (#25094) * Allow borgs to use holopads * Revert kludge cyborg icon fix in favor of sane fix * Further remove cyborg hologram kludge For cyborgs, a false value was previously set for the safety argument when calling `/proc/getHologramIcon` (from commit 17c96bc24d). This was because the `icon/A` parameter was mistakenly set to `robot.icon`, which caused a runtime error to occur when `Height()` is called on it in line 1008, preventing cyborg holograms from appearing. Setting a false safety value made use of the so-conditional `new(A)` call on line 1003, which created a new icon from the `robot.icon` string. This kludge prevented a runtime and made cyborg holograms appear. The kludge was removed in commit dbb8851ae3, but the false safety value remained. This commit fixes that. * Update code/game/machinery/hologram.dm Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --------- Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> commit ba4994d8897746290cce87b6ae0ac1610f55747d Author: Mikhail Dzianishchyts Date: Thu May 2 03:35:39 2024 +0300 Tweak recipes of glasses (#25070) * Tweak recipes of glasses * Allow some sunglasses as ingredient * Revert time of recipes commit 5ca09c7fe7678f737aa333bf2c1653859401ba1f Author: Mikhail Dzianishchyts Date: Thu May 2 03:27:10 2024 +0300 Don't walk without gravity while being space drugged (#25248) * Don't walk without gravity while being space drugged * Update code/modules/reagents/chemistry/reagents/drugs.dm Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> Signed-off-by: Mikhail Dzianishchyts --------- Signed-off-by: Mikhail Dzianishchyts Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> commit 24726c60fec6104f24b9ee3db58980414d2f8a6d Author: Adrer Date: Thu May 2 02:20:07 2024 +0200 Moving pulled objects as a borg checks if the turf is adjacent to you. (#25253) * Move_Pulled now checks for adjacency of the turf you are moving something to. * Move comment to correct line. * Update code/modules/mob/mob_movement.dm Co-authored-by: GDN <96800819+GDNgit@users.noreply.github.com> Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --------- Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: adrermail@gmail.com Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: GDN <96800819+GDNgit@users.noreply.github.com> commit 31390ff2e1dd63f26a89b6d4944610f206ec4ae4 Author: Luc <89928798+lewcc@users.noreply.github.com> Date: Wed May 1 20:14:23 2024 -0400 Check against current mob for admin keybinds (#25341) commit 45b0f34d9566b01c2fb610a5f01f153ee189f1d4 Author: Mikhail Dzianishchyts Date: Thu May 2 03:06:23 2024 +0300 Don't check side pressure if filter isn't.. filtering (#25019) commit 50a986b8dea60b90106ce6ae7c0d3610e02ab921 Author: Charlie Nolan Date: Wed May 1 17:04:50 2024 -0700 Makes tesla movement pretty (#24786) * They hate how easy this is * No more deciseconds * Intermediate code * Made tesla movement pretty. * Lint. * Update code/modules/mob/mob_movement.dm Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> * Review comments. --------- Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> Co-authored-by: FunnyMan3595 (Charlie Nolan) commit e19559ad5480e5e870f8a487fcaef22c2335e980 Author: CRUNCH <143041327+Fordoxia@users.noreply.github.com> Date: Thu May 2 01:01:24 2024 +0100 The Gibber Now Drops 6 Meat Instead of 3 When Gibbing. (#25287) * Update gibber.dm * extra commit 1feb21eed13f592809fef6c2c550859cbf32225b Author: CRUNCH <143041327+Fordoxia@users.noreply.github.com> Date: Thu May 2 00:58:35 2024 +0100 [FIX] Cyborgs With Guns Can Now Perform Executions (With Guns!). (#25275) * borg execution time * Update gun.dm * Update gun.dm * Update gun.dm commit 41eff52fac1d647d7b59cdcd7c862552d4076976 Author: DGamerL <108773801+DGamerL@users.noreply.github.com> Date: Thu May 2 01:55:38 2024 +0200 Renames most processing SS' to the convention of `SS[SS name here]` (#25302) * Renames most processing SS' * Contra review commit 271d67d237338fbb396484d5c7350301e9b6a26c Author: Deniz <66401072+Oyu07@users.noreply.github.com> Date: Thu May 2 02:54:00 2024 +0300 Adds MARK: to some comments (#25184) * robot_upgrades * disability * airlock * mecha * Abcudtor * Forgot a space here * Some style changes + additions * removed a no comment * comment change * empty * empty again dont dare look insde * ault Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> --------- Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> commit 4a1f3967076c0f6bb973e511a406084e2f238fc2 Author: dearmochi <1496804+dearmochi@users.noreply.github.com> Date: Thu May 2 08:52:14 2024 +0900 Grant TRAIT_NOFIRE while cloning (#25327) * Grant TRAIT_NOFIRE while cloning * Update code/game/machinery/clonepod.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --------- Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> commit f8ebba6ed100f98d74f4404da6422b267f567688 Author: Burzah <116982774+Burzah@users.noreply.github.com> Date: Wed May 1 16:49:05 2024 -0700 Adds logging for thrall deconversions (#25305) * thrall deconversion logging inside water.dm * moves logging to vamp_thrall.dm instead commit f0209d975b070fc82ebdb92ea2bdc0e603c72a48 Author: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Date: Wed May 1 19:46:42 2024 -0400 ion scatter gets 2 more pellets and 5 degrees more spread (#25269) * ion scatter gets 2 more pellets and 5 degrees more spread * mech ion as well commit 96aa08823c50fe3b6b4cd9142544d9c000b74d6d Author: DGamerL <108773801+DGamerL@users.noreply.github.com> Date: Thu May 2 01:23:31 2024 +0200 Adds it (#25254) commit af7f35a0feab8879e5d98b7f81497a63c8502ba0 Author: Arthri <41360489+Arthri@users.noreply.github.com> Date: Thu May 2 07:23:26 2024 +0800 Remove tgui say error (#25273) * Remove the error * Build and update tgui * Restore precautionary if statement * Build and update tgui * trigger ci --------- Co-authored-by: Arthri <41360489+a@users.noreply.github.com> Co-authored-by: /tg/ui Builder <41898282+github-actions[bot]@users.noreply.github.com> commit a3a1be49b0b7a86048f26f9edc612f50858ffeec Author: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Date: Wed May 1 19:23:19 2024 -0400 modsuits have the same virus protection as space suits / biosuits (#25310) commit daf76d3aaa84b801419c9b0d72631b01495dc326 Author: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Date: Wed May 1 19:23:09 2024 -0400 gives lavaland plants 50 potency (#25322) commit 55ed33a253630622e507f4557ed635c7768b6927 Author: DGamerL <108773801+DGamerL@users.noreply.github.com> Date: Thu May 2 01:23:03 2024 +0200 Changes incorporeal_move to defines (#25319) * Changes incorporeal_mvoe to defines * Lets the switch use defines too commit f2dd4f6595fc086dbb9fe36f7f61b9539e7e3675 Author: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Date: Wed May 1 19:22:59 2024 -0400 fix shield generators on zlvl change (#25318) commit 3e5a3ea35cbc281beec7e0fd506b069e462753f2 Author: Luc <89928798+lewcc@users.noreply.github.com> Date: Wed May 1 16:37:44 2024 -0400 works (#25337) commit f97a9ee9346eeb758da8b444dc48bfee039e6c6e Author: paradisess13[bot] <165046124+paradisess13[bot]@users.noreply.github.com> Date: Wed May 1 19:05:54 2024 +0100 NanoMap Auto-Update (Wed May 1 01:16:06 UTC 2024) (#25329) Co-authored-by: NanoMap Generation commit 9d2c9d9ed1424c8d297e9a5f72feabb48113fa26 Author: DGamerL <108773801+DGamerL@users.noreply.github.com> Date: Wed May 1 13:27:37 2024 +0200 Removes a variable that is only set once (#25003) * One of the variables of all time * Oyu review commit 44fb00ca25010083a4de517da9c769063c1be1f0 Author: Сиротка <114731039+ErdGinalD@users.noreply.github.com> Date: Wed May 1 13:42:57 2024 +0300 Qol + fix for mecha (#25206) * Qol + fix for mecha * Update code/game/mecha/mecha.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Update code/game/mecha/mecha.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> --------- Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> commit 86530f4e3efa9ed82ccb1c57cb5aa3a26bc43318 Author: Сиротка <114731039+ErdGinalD@users.noreply.github.com> Date: Wed May 1 13:40:48 2024 +0300 BUFF: Mining Grenade launcher (#25204) * BUFF: Mining Grenade launcher * Update weapons.dm commit 14ce47830dc39157ead1355f18098bee658a87c7 Author: Charlie Nolan Date: Wed May 1 03:39:01 2024 -0700 Reduce the chance of getting no changes to a stat when mutating plants. (#25179) * Reduce the chance of getting no changes to a stat when mutating plants. * Update code/modules/hydroponics/seeds.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> --------- Co-authored-by: FunnyMan3595 (Charlie Nolan) Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> commit 7daf219ec0db1b4de86da6470f26ca68012c9e3f Author: larentoun <31931237+larentoun@users.noreply.github.com> Date: Wed May 1 13:37:08 2024 +0300 More Crowbar Acts (#24986) * crowbar acts part 1 * livings checked * convert istypes to tool behaviour * solars * use tool_volume * Update code/modules/research/server.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: larentoun <31931237+larentoun@users.noreply.github.com> * Update code/modules/power/generators/portable generators/pacman.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: larentoun <31931237+larentoun@users.noreply.github.com> * return * return returns * Update code/modules/mob/living/simple_animal/bot/mulebot.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> Signed-off-by: larentoun <31931237+larentoun@users.noreply.github.com> * Update code/game/objects/structures/janicart.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> Signed-off-by: larentoun <31931237+larentoun@users.noreply.github.com> --------- Signed-off-by: larentoun <31931237+larentoun@users.noreply.github.com> Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> commit 4d7a67497c4e6d1af5af761af0d3027ab57b37b1 Merge: afd185773a a2e7d95306 Author: Fordoxia <143041327+Fordoxia@users.noreply.github.com> Date: Wed May 1 04:00:48 2024 +0100 Merge branch 'master' of https://github.com/Fordoxia/CRUNCHParadise commit a2e7d95306fc3215e6b61271790e2573666112ae Author: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> Date: Tue Apr 30 22:41:03 2024 +0100 Moves a custom item to the right file (#25325) commit 6ea2f09570835e3db62ab7dee0ae3cd6fd829646 Author: DGamerL <108773801+DGamerL@users.noreply.github.com> Date: Tue Apr 30 20:41:45 2024 +0200 Removes a rogue # (#25313) commit 9271d9e106fa184c9ad7ff0991f469f5d3ca2528 Author: Charlie Nolan Date: Tue Apr 30 05:29:19 2024 -0700 Added tracking of when a secondary goal is handed out. (#25168) Co-authored-by: FunnyMan3595 (Charlie Nolan) commit 4ea0bbd6da7f606df6def1e3d715ed1afe447c05 Author: CRUNCH <143041327+Fordoxia@users.noreply.github.com> Date: Tue Apr 30 13:07:18 2024 +0100 Tweaks Farragus Robotics, Adds a Corpse Delivery Chute! (#25090) * Fixing some minor typos for cyborg upgrade flavour text Throws in some missing apostrophes, capitalisation, and the letter "s." * Briefcase Full of Cash buff Increases the amount of cash in the Syndicate Briefcase Full of Cash from 600 Cr to 1000 Cr * Reverts double-feature PR * Reverts a broken revert * Reverting again because Ebba told me to * And reverting yet again * Makes farragus less bad * Tweaks * Reconstruction * Tweaks * Merge Deconflict AGAIN * Update cerestation.dmm * More deconflictation * Update cerestation.dmm commit 107950f50ef0238e0a025c654cf5af72ae451dc6 Author: CRUNCH <143041327+Fordoxia@users.noreply.github.com> Date: Tue Apr 30 12:51:15 2024 +0100 Removes Advanced Reagent Scanner from Service & Medical Cyborgs, Transfers Functionality to Innate Reagent Vision. (#24457) * Update robot_modules.dm * Adds advanced reagent vision * rounding * Update code/datums/outfits/outfit_debug.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Update code/modules/clothing/clothing.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Update atoms.dm * This one hyphen will kill me if I don't fix it. * Update code/game/atoms.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Update code/game/atoms.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Update atoms.dm * Update code/game/atoms.dm Co-authored-by: GDN <96800819+GDNgit@users.noreply.github.com> * Update code/modules/clothing/clothing.dm Co-authored-by: GDN <96800819+GDNgit@users.noreply.github.com> Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com> --------- Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com> Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> Co-authored-by: GDN <96800819+GDNgit@users.noreply.github.com> commit 773ee4afedc6cdc771af65097db11c16432182ee Author: S34N <12197162+S34NW@users.noreply.github.com> Date: Tue Apr 30 12:45:41 2024 +0100 Update the TGUI conflict merge resolution to properly commit rebuilt bundles (#25246) * update the tgui conflict merge process * tidy this commit 94b5d2203457d739faeec2cbe6d2b95c1c75b29d Author: larentoun <31931237+larentoun@users.noreply.github.com> Date: Tue Apr 30 14:40:41 2024 +0300 Records Multiline (#24991) * pre-wrap for labeledlist * multiline for pdas * consoles fix * update tgui * update tgui bundle commit 54d563ada1b9e48e0fcca0591319f01813d98aef Author: Charlie Nolan Date: Tue Apr 30 04:23:16 2024 -0700 Reverse direction of requests console messages. (#25169) Also fixes a bad error message. Co-authored-by: FunnyMan3595 (Charlie Nolan) Co-authored-by: paradisess13[bot] <165046124+paradisess13[bot]@users.noreply.github.com> commit afd185773a3a82f850c3ea055ca01c5be17de5b3 Merge: 8b0ff64cc0 ec2c5638fc Author: Fordoxia <143041327+Fordoxia@users.noreply.github.com> Date: Tue Apr 30 03:45:45 2024 +0100 Merge branch 'master' of https://github.com/Fordoxia/CRUNCHParadise commit ec2c5638fc1dadf785450ad95bdd9c95ec44b83f Author: Zantox Date: Tue Apr 30 02:57:36 2024 +0200 Add ventcrawl unit-test (#24830) * Add ventcrawl unit-test * Fix linting * Solve chair-flipping without HANDS_BLOCKED * Remove unit_test_dummy variable * Use `isturf` helper in ventcrawl unit-test Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com> * Update code/modules/unit_tests/atmos/test_ventcrawl.dm --------- Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> commit 3e9c29258ecd78a7679d301e209290a4a958b924 Author: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Mon Apr 29 20:51:19 2024 -0400 Diverse Traders (#24883) * Diverse Traders Types * Trader Type control, announcements, species spawning * Trader Outfits * Posh Moth - Posh Cane * Landmarks, Trader ID Name Change * Trader Shuttle Adjustment - Landmarks for Item Pools * Outfit Survival Kit changes * Added another refill for the hand labeler due to more cargo * Trader Shuttle locker fix * Item Stocks, Item Stock Assignments, Box Kits, Love Bottle * Mech access, No double mechs, Small box fix * Removed Solgov Gunkit from General Pool * Spacing * Moved traders to not be event subtypes, added documentation to vars * Boxed spacing, removed improper * Moved postequip, used box variables * Lore team requested change - Bolt action instead of AK * Changed landmark * Moved soviet ammo to minor gear, increased soviet minor gear to 8. * Obfuscated Cybersun * Lootpool Adjustments * Readded Solgov Kit to general pool at low weight * Commas! * Spelling Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Comments Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Re-Nulled After_Equip_Job * Removed extraneous var spaces * Relocated space in trader introduction message * Robomoon is now once again Cybersun * Impropered Enforcer Kit * No more ERT box for non-NT boxes * Fixed turbine kit stock part amount * Subtyped skrell/unathi suit boxes * Replaced meson cyber eye (nodrop issue) with meson sunglasses/gar mesons * Reduced weight on arm/esword implant rare items * Also reduced arm laser weight * Added a couple items to skipjack large - more 'random', filled in reduced weights * Path typo fix Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Removed trailing / in path Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Removed Cheap Breacher suit from inventory * Apply suggestions from code review Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --------- Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> commit 417d6fe8cfe35c664ed04e78726a1fb18b7fa473 Author: Luc <89928798+lewcc@users.noreply.github.com> Date: Mon Apr 29 20:50:35 2024 -0400 Makes kudzu much more likely to entangle you (#25167) * lets kudzu entangle you * Increase buckle time * Apply suggestions from code review Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --------- Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> commit 48db11cd8454af49e9ced4afd3352f40fbfffee4 Author: Сиротка <114731039+ErdGinalD@users.noreply.github.com> Date: Tue Apr 30 03:14:26 2024 +0300 Ash Walkers now Ash Doctors (#25207) * Ash Walkers now Ash Doctors * Update other.dm commit 6848ee850252a01353071eeea0027a20fe462b7a Author: S34N <12197162+S34NW@users.noreply.github.com> Date: Tue Apr 30 01:12:49 2024 +0100 Updates readme, licence files (#25259) * test * more * more stuff * images * more! * sanity? * details * fix licences, update readme * remove GPL disclaimer * more docs * wiki link * spacing tweaks * text change * wording * DM language reference * Update README.md Signed-off-by: S34N <12197162+S34NW@users.noreply.github.com> --------- Signed-off-by: S34N <12197162+S34NW@users.noreply.github.com> commit 2e4089dc15b985ce0923cff2b68fe5cbce5f1cdd Author: S34N <12197162+S34NW@users.noreply.github.com> Date: Mon Apr 29 03:07:25 2024 +0100 Various TG Chat message sorting fixes (#25229) * Fixes unsorted emotes, announcements, votes, surgery, prayers, ahelp responses * Apply suggestions from code review Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> --------- Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> commit 4add53d6c1cce3e564305607d37383deb721628d Author: Сиротка <114731039+ErdGinalD@users.noreply.github.com> Date: Mon Apr 29 05:00:34 2024 +0300 Add alternative Spear recipe for Ash walkers (#25208) * Add alternative Spear recipe for Ash walkers * Update recipes.dm * Update code/modules/crafting/recipes.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * Update code/modules/crafting/recipes.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> Signed-off-by: Сиротка <114731039+ErdGinalD@users.noreply.github.com> --------- Signed-off-by: Сиротка <114731039+ErdGinalD@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> commit 7f37f93408a6016cf1ac4ec44caf0e37db65d3b3 Author: Сиротка <114731039+ErdGinalD@users.noreply.github.com> Date: Mon Apr 29 04:33:25 2024 +0300 fix avoiding powerfist antidrop (#25274) * fix avoiding powerfist antidrop * Update code/game/objects/items/weapons/powerfist.dm Co-authored-by: HMBGERDO <61080616+HMBGERDO@users.noreply.github.com> Signed-off-by: Сиротка <114731039+ErdGinalD@users.noreply.github.com> * Update code/game/objects/items/weapons/powerfist.dm Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com> Signed-off-by: Сиротка <114731039+ErdGinalD@users.noreply.github.com> --------- Signed-off-by: Сиротка <114731039+ErdGinalD@users.noreply.github.com> Co-authored-by: HMBGERDO <61080616+HMBGERDO@users.noreply.github.com> Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com> commit 83c9d8878a37aa06ab368b894f2642612ec61f9e Author: Rayforx <154929127+Rayforx@users.noreply.github.com> Date: Mon Apr 29 00:21:48 2024 +0200 Blood level QoL for vampires (#25075) commit a50683ef28d4a170754a9ddab36be53a755a223c Author: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Date: Sun Apr 28 18:03:14 2024 -0400 Adds the SPRK-12 Energy Pistol (#24869) * Adds the SPRK-12 Pistol * I Was improper and forgot to name it right Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * check it * Update gun.dm * less copypasta * Apply suggestions from code review Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> Co-authored-by: warriorstar-orion Signed-off-by: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> * early return --------- Signed-off-by: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> Co-authored-by: warriorstar-orion commit fb027f73ddfe697004627a48b6dec9ab2045e849 Author: DGamerL <108773801+DGamerL@users.noreply.github.com> Date: Sun Apr 28 22:57:26 2024 +0200 Changes the `is_changeling` and `is_mindslave` procs into proper defines (#25212) * Changes these procs into proper defines * Henri review commit fc7acc4597c2e69a425395f37d7cd4e24ed9ba82 Author: Burzah <116982774+Burzah@users.noreply.github.com> Date: Sun Apr 28 13:05:39 2024 -0700 adjusted logic for humanize_spider (#25286) commit a42bacb9fa33a805bc4c53be0f3b764274aa0664 Author: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> Date: Sun Apr 28 15:53:29 2024 -0400 fifty percent off deal (#25243) commit 057e9f16eb56606b2e3c6968fab165d89a04e05c Author: Code-Lyoko0 Date: Sun Apr 28 14:51:34 2024 -0500 Informs Deathsquad that the bomb has been armed during Epsilon Alert. (#25242) * informs the Death Squad that the bomb has been armed during Epsilon Alert * Contra review, properly qdel'ing the radio on destory commit 6fa7a48ba857c8324afb8809ec05a3191db49d2d Author: Contrabang <91113370+Contrabang@users.noreply.github.com> Date: Sun Apr 28 15:48:13 2024 -0400 ibheriewfofi0wnmfeionfm (#25294) commit daa368ca10e6bd9dc175d856bcbd061cf07dce97 Author: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Date: Sun Apr 28 15:48:00 2024 -0400 day 1 shadow tweaks (#25290) commit 36f7c43c9c0036a1b1ce1381ccffa5dbfb36fa54 Author: larentoun <31931237+larentoun@users.noreply.github.com> Date: Sun Apr 28 06:01:16 2024 +0300 Better Gas Scans (Chatbox and Colored!) (#24975) * feat: Better Gas Analyzer AND TGUI! https://github.com/ss220-space/Paradise/pull/2333 https://github.com/ss220-space/Paradise/pull/2461 https://github.com/ss220-space/Paradise/pull/2522 * rename atmos helpers * remove tgui * more fixes * better act self * now scanner finally works again * what if we want turf beneath the target? * fix chatbox * color code the gases * unnecessary stuff removal * ghosts can now scan portable atmospherics * better code * do we really need to know that? * change colors * add a space to separate gases from other info * update tgui bundle * update dark-theme CO2 color commit 1d4d95a10b4d3f8c52eb7a4aea1211dc65467693 Author: Contrabang <91113370+Contrabang@users.noreply.github.com> Date: Sat Apr 27 21:43:58 2024 -0400 yes (#25297) commit a3e43a3161008d1ae5ccb72ae17637703763c423 Author: warriorstar-orion Date: Sat Apr 27 20:06:39 2024 -0400 fix: null check during morph eat (#25291) commit d2d932d4d15ddb3426b4b284d06f5ea1c99eb6c9 Author: paradisess13[bot] <165046124+paradisess13[bot]@users.noreply.github.com> Date: Sat Apr 27 12:22:22 2024 +0100 NanoMap Auto-Update (Sat Apr 27 01:09:53 UTC 2024) (#25280) Co-authored-by: NanoMap Generation commit 572b79bce96fa164527e74f6842c94c5f8fd9700 Author: DGamerL <108773801+DGamerL@users.noreply.github.com> Date: Sat Apr 27 10:25:17 2024 +0200 Removes num2dir (#25261) commit dbc3bf1c8bc0981e84aa213b3ccc0518e5c92e46 Author: GDN <96800819+GDNgit@users.noreply.github.com> Date: Sat Apr 27 03:23:48 2024 -0500 Removes a lot of lists (#25272) * Removes a lot of lists * Update code/game/turfs/simulated/floor.dm Signed-off-by: GDN <96800819+GDNgit@users.noreply.github.com> * Update code/game/turfs/simulated/floor/misc_floor.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: GDN <96800819+GDNgit@users.noreply.github.com> * Update code/game/turfs/simulated/floor/mineral_floors.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: GDN <96800819+GDNgit@users.noreply.github.com> * Update code/game/turfs/simulated/floor/mineral_floors.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: GDN <96800819+GDNgit@users.noreply.github.com> --------- Signed-off-by: GDN <96800819+GDNgit@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> commit e810b3a9c76fb3bb42b381c4e6540efe4a14b5d9 Author: Adrer Date: Sat Apr 27 10:21:13 2024 +0200 Security level changes no longer force depowered lights on. (#25245) Co-authored-by: adrermail@gmail.com commit b1658390731745adf5cc9fb039bb0f17ad3c11a7 Author: Christasmurf <25437893+Christasmurf@users.noreply.github.com> Date: Sat Apr 27 01:17:59 2024 +0100 Biosuit resprite (#25004) * biosuits babeyyy * minor changes to comments * lil booties * suggested change commit e73dc13a29c34c5065462ea14653996e4ba40c68 Author: Luc <89928798+lewcc@users.noreply.github.com> Date: Fri Apr 26 20:00:51 2024 -0400 Improves interactions with display cases. (#25228) * better player info for display case * this too * improved messaging * finish out the docs * Update code/game/objects/structures/displaycase.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> Signed-off-by: Luc <89928798+lewcc@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> Signed-off-by: Luc <89928798+lewcc@users.noreply.github.com> --------- Signed-off-by: Luc <89928798+lewcc@users.noreply.github.com> Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> commit 7a45c712b898b7c9fe7db69bd6c919b6986a0264 Author: DGamerL <108773801+DGamerL@users.noreply.github.com> Date: Sat Apr 27 00:32:00 2024 +0200 Adds a stamina meter (#24782) * Finally done * Contra + Qwerty review * I don't think I broke anything :D * Lewc review commit 88af37bfcf564b9f433a74839ab0756dfcee780d Author: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Date: Fri Apr 26 18:31:09 2024 -0400 Adds the NTSS Shadow (#24778) * WIP * change this * the rest of the fucking owl * removes QWERTODO * let us fix the CC beacons too * makes it look better * makes CI work on everything but shadow, asking warriorstar * exclude ntss shadow from window spawner checks * final changes hopefully * moved around parts of the shuttle * Update code/modules/atmospherics/machinery/components/trinary_devices/filter.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * moves it moves it to it's own file * move it move it * bobby_drop_tables * oops * fuck --------- Co-authored-by: warriorstar-orion Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> commit 78e782dfcbf3390ea47120b90942f78419e5bec2 Author: S34N <12197162+S34NW@users.noreply.github.com> Date: Fri Apr 26 23:11:08 2024 +0100 skip nanomap when no changes needed (#25182) commit 8b0ff64cc03053f2b1ac726c15cf6fb5bffee7ad Merge: c75279f7c8 7ab24d6519 Author: Fordoxia Date: Fri Apr 26 22:42:06 2024 +0100 Merge branch 'master' of https://github.com/Fordoxia/CRUNCHParadise commit 7ab24d6519bb4871ee8c240c6dbf7a37a9392586 Author: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Date: Fri Apr 26 16:50:36 2024 -0400 fixes tarot card capitalization in uplink (#25278) commit c75279f7c8452ab02a0e41fe02d762fa7b278b07 Merge: 8c704101de 5b8ae44d03 Author: Fordoxia <143041327+Fordoxia@users.noreply.github.com> Date: Fri Apr 26 16:23:32 2024 +0100 Merge branch 'master' of https://github.com/Fordoxia/CRUNCHParadise commit 5b8ae44d032c2959e56cae07fb7230fd70e1432c Author: PopeDaveThe3th <80988376+PopeDaveThe3th@users.noreply.github.com> Date: Thu Apr 25 15:14:31 2024 -0400 whoops (#25268) commit 5adf1408d151a74200ae1d9bf577c8bb5b34a9a5 Author: Mikhail Dzianishchyts Date: Thu Apr 25 22:04:31 2024 +0300 Bring `respawn_enabled` back to config (#25264) commit 20701d905c2d86d11cc49b34151c5f94bcaa8e58 Author: Contrabang <91113370+Contrabang@users.noreply.github.com> Date: Thu Apr 25 14:20:50 2024 -0400 Shades now drop bodies when killed/destroyed (#24784) * this was a bit of a pain * yes * damger reviwe * funny review * Apply suggestions from code review Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --------- Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> commit e204ca66947d827dade7c034fb0a05d02f471705 Author: 1080pCat <96908085+1080pCat@users.noreply.github.com> Date: Fri Apr 26 04:20:35 2024 +1000 pens (#25159) commit ae7da539e3b3cc886927269a848507eabbc73f1d Author: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> Date: Thu Apr 25 19:20:14 2024 +0100 Fixes an SQL update file + null character save issue (#25149) * This is what I get for sending a PR * I DID SAY TESTING: None commit 1377fd11667a1b49af3bf101a04780268193d2d1 Author: Mikhail Dzianishchyts Date: Thu Apr 25 06:00:44 2024 +0300 [s] Disguise with plant trick (#25260) * Fix plant-disguise trick * Resolve name collision commit af5d187014386ee61ce11f7a63b893f5e4e66f2b Author: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Date: Wed Apr 24 19:10:46 2024 -0400 Adds magic tarot cards [SERIOUS DO NOT CLOSE AFTER AFD] (#24933) * starts it * Update magic_tarot.dm * MORE PROGRESS * So many thanks to Cloudbucket, for sprites * The Work, the Art, continues. * more changes * pushes the Work foward. All cards done. * and more thanks github * adds to BSH * tochat * Finishes QWERTYTODO. Magic key. World smoke * Isaac and his mother lived alone in a small house on a hill. Isaac kept to himself, drawing pictures and playing with his toys as his mom watched Christian broadcasts on the television. Life was simple, and they were both happy. That was, until the day Isaac’s mom heard a voice from above. “Your son has become corrupted by sin. He needs to be saved.” “I will do my best to save him, my Lord,” Isaac’s mother replied, rushing into Isaac’s room, removing all that was evil from his life. Again the voice called to her, "Isaac’s soul is still corrupt. He needs to be cut off from all that is evil in this world and confess his sins." “I will follow your instructions, Lord. I have faith in thee,” Isaac’s mother replied, as she locked Isaac in his room, away from the evils of the world. One last time, Isaac’s mom heard the voice of God calling to her. “You've done as I've asked, but I still question your devotion to me. To prove your faith, I will ask one more thing of you." "Yes Lord, anything!” Isaac’s mother begged. "To prove your love and devotion, I require a sacrifice. Your son, Isaac, will be this sacrifice. Go into his room and end his life, as an offering to me to prove you love me above all else." "Yes Lord", she replied, grabbing a butcher’s knife from the kitchen. Isaac, watching through a crack in his door, trembled in fear. Scrambling around his room to find a hiding place, he noticed a trap door to the basement hidden under his rug. Without hesitation, he flung open the hatch, just as his mother burst through his door, and threw himself down into the unknown depths below. * nanny bag it before I forget * Apply suggestions from code review Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * returns early * Apply suggestions from code review Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> * RE-RE-RE-REVIEW * Apply suggestions from code review Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: synthtee <127706731+SynthTwo@users.noreply.github.com> * requested changes and such * duh * Apply suggestions from code review Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * returns early * Update code/datums/status_effects/buffs.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * new hrefs here to troll CI :trollface: * Update code/game/gamemodes/wizard/magic_tarot.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> --------- Signed-off-by: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> Co-authored-by: synthtee <127706731+SynthTwo@users.noreply.github.com> commit 69d6a8df2110f1b7d7fdec9306f3e84ed8c36aa8 Author: GDN <96800819+GDNgit@users.noreply.github.com> Date: Wed Apr 24 16:21:11 2024 -0500 Overhauls player facing verb UI (#24060) * Preference verb overhaul * this too * Update code/__DEFINES/preferences_defines.dm * Update code/modules/client/preference/preferences.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * fixes + better html * removes unused define --------- Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> commit e615738e22d572b2d9cf2f7ece45b73991e20cc5 Author: S34N <12197162+S34NW@users.noreply.github.com> Date: Wed Apr 24 20:42:12 2024 +0100 All your TGUI belong to us (#25250) commit 0c5fdaa57be0b8c2fec282f71b40a44295b3adab Author: Luc <89928798+lewcc@users.noreply.github.com> Date: Wed Apr 24 15:40:45 2024 -0400 Updates contributing guide regarding signals, removes SIGNAL_HANDLER_DOES_SLEEP (#24824) * Updates contributing guide, removes DOES_SLEEP * Update .github/CONTRIBUTING.md Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --------- Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> commit 3333fd051ff6e6feb70690782215d936cbaa245d Author: larentoun <31931237+larentoun@users.noreply.github.com> Date: Wed Apr 24 22:38:47 2024 +0300 if you have PROCCALL rights, you can call it from VV (#25030) commit 20a0836d1a3ba8b8b12bcd4db29d89e4b549ea21 Author: Rayforx <154929127+Rayforx@users.noreply.github.com> Date: Wed Apr 24 07:45:43 2024 +0200 Update ghost_bar.dm (#25234) commit c3af4456e15172057b90ae4431269a6ed8cd51d4 Author: chuga-git <98280110+chuga-git@users.noreply.github.com> Date: Wed Apr 24 00:45:37 2024 -0500 Restricts rubbershot's guaranteed knockdown range (#25178) * restricts rubbershot knockdown range * actually commit the right version * Henri review commit a2de7f4533d36c8d2aa6697657e2cb58b2bc72f6 Author: GDN <96800819+GDNgit@users.noreply.github.com> Date: Wed Apr 24 00:45:25 2024 -0500 fixes a radial menu gc false positive (#25237) commit 6c756f98c02300a3a3d106eab89980cff6097880 Author: DGamerL <108773801+DGamerL@users.noreply.github.com> Date: Wed Apr 24 07:45:16 2024 +0200 Makes the walls from Desecrated Duel GC properly (#24990) * GC is a thing of all time * Spacing commit d233824add0b45bf2062dfe0cf9537fc2541ca1e Author: GDN <96800819+GDNgit@users.noreply.github.com> Date: Wed Apr 24 00:45:03 2024 -0500 nerfs machine overload (#25153) commit 752deb811984b2adaca140e5a7e7c82776be2ec1 Author: Mikhail Dzianishchyts Date: Tue Apr 23 22:09:44 2024 +0300 Make it possible to get out of abductors experimentation machine (#24842) * Make it possible to get out of abductors experimentation machine * Better roll of result * Better message of escape attempt * Apply suggestions from code review * Remove unnecessary check * Slightly tweak values commit 8c704101de2fb08d63002e49fe92ed8f4fd62ead Merge: 339ded7dd3 67cba07b99 Author: Fordoxia <143041327+Fordoxia@users.noreply.github.com> Date: Tue Apr 23 03:22:48 2024 +0100 Merge branch 'master' of https://github.com/Fordoxia/CRUNCHParadise commit 67cba07b9975b23cd7cc48fd7ea7d503ba9df19c Author: SchrodingersWolf <108938550+SchrodingersWolf@users.noreply.github.com> Date: Mon Apr 22 21:14:08 2024 -0400 Fixes Cerestation Medical Storage disposals bin, also simplifies disposals in Medbay Break Room (#24776) * Fixes Medbay Storage disposals bin * Life is pain * Rogue pipe be gone commit 853f108c89aa005e2ed1a391a54ed8fd0cb40736 Author: Contrabang <91113370+Contrabang@users.noreply.github.com> Date: Mon Apr 22 20:50:48 2024 -0400 [SERIOUS] Improves admin tooling for radiation (#24968) * lets clean some radiation * changes * lgtm commit de6a54fbde1a0ed80e5ad4209fa2c10ef9d43c7e Author: DGamerL <108773801+DGamerL@users.noreply.github.com> Date: Tue Apr 23 02:49:52 2024 +0200 Removes all mentions of `return .` where they would be unnecessary (#25142) * Removes all mentions of `return .` * I can do this all day * Arthri review * Update code/__HELPERS/sanitize_values.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/__HELPERS/sanitize_values.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> --------- Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> commit 6b442d3ed2ba46876c6d847d8fb87f8777325abd Author: warriorstar-orion Date: Mon Apr 22 20:48:08 2024 -0400 cere: increase maint loot spawns (#25152) commit a1ca632a191476324ff65e7d3c0e1c5ef3a4b8d1 Author: Aylong <69762909+AyIong@users.noreply.github.com> Date: Tue Apr 23 01:37:59 2024 +0300 [TGUI] Coin Mint (#24885) * Backend * Simplify * Almost ready * Done., i think * You can now craft a money bag * Autodoc * Fingerprints * Earlier return if no money bag * Update code/modules/mining/mint.dm * Update code/modules/mining/mint.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Update tgui.bundle.js * Rebuild * Fuckin hell * Rebuild * Update tgui.bundle.js * Update code/modules/mining/mint.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Update code/modules/mining/mint.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> --------- Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> commit 2cfa9d620fd5f5c1aeb9e2ab39d1473369ff1169 Author: Mikhail Dzianishchyts Date: Tue Apr 23 01:04:38 2024 +0300 Fixes exploit (#25101) commit 7fa44a31fb522fcb62ae4d5f4cca8707f1d99cf9 Author: Mikhail Dzianishchyts Date: Tue Apr 23 00:32:49 2024 +0300 Full Auto Gun Mode Component (#24998) * Full Auto Gun Mode Component * Apply some refactoring * spaces mhmm * Some signal movement * Apply DGamerL suggestions * Unknown SIGNAL_HANDLER no more * Fix runtime if uid is passed * Why the hell you even care * god you serious --------- Co-authored-by: Gottfrei commit 00be61a8116ad3dbc550853870cd8228977deccf Author: Mikhail Dzianishchyts Date: Mon Apr 22 23:53:14 2024 +0300 Better round start time handling after using delay (#25035) commit 2d1d7e283b0fd5617945c933e84f448ec3f49ced Author: GDN <96800819+GDNgit@users.noreply.github.com> Date: Mon Apr 22 15:46:21 2024 -0500 makes some uis no longer automatically update (#25121) * makes some uis no longer automatically update * fixes cloning sporadically not working * Revert "fixes cloning sporadically not working" This reverts commit 2d88887cf632cebf6993a9bea0bb2df64ec763d0. * Update code/modules/hydroponics/seed_extractor.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * Update code/modules/hydroponics/seed_extractor.dm * Update code/modules/hydroponics/seed_extractor.dm --------- Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> commit 80438de31641d0079cfc66c89e7eeafbaaad3222 Author: larentoun <31931237+larentoun@users.noreply.github.com> Date: Mon Apr 22 23:46:20 2024 +0300 Remove automatedannouncer mob (#24727) * remove automated announcer mob * remove list(z) from autosay * typo * remove more of unused role args * missed passing a value... * move comment * better check * better check * comment for say_understands * Update code/modules/mob/living/brain/living_brain.dm Co-authored-by: Charlie Nolan --------- Co-authored-by: Charlie Nolan commit 8b6fec06221500472daab165c42911b81affb341 Author: Charlie Nolan Date: Mon Apr 22 13:38:01 2024 -0700 Prevent duplicate messages when sending a PM to yourself. (#25124) * Prevent duplicate messages when replying to yourself. * Oops. --------- Co-authored-by: FunnyMan3595 (Charlie Nolan) commit 58c61475e650f0a2e147d256e7df800d65e92f7e Author: GDN <96800819+GDNgit@users.noreply.github.com> Date: Mon Apr 22 15:37:16 2024 -0500 fixes repair borg not working in some cases (#25151) commit 3449f5175dc21fa5b34a60c3067a5e8c7fbfa76c Author: warriorstar-orion Date: Mon Apr 22 16:33:14 2024 -0400 ci: add maplints/fix matching stacked disposals/pipes (#25120) commit 831776b40dc6505cc2cf740f5fa63ef0634629a0 Author: GDN <96800819+GDNgit@users.noreply.github.com> Date: Mon Apr 22 15:33:07 2024 -0500 fixes some action button issues (#25140) * fixes some action button issues * murder * thanks autocopy * morph and xenos * Update code/datums/action.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> --------- Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> commit 71bc06cd4eed17607a910854b0d697c8d44a770d Author: DGamerL <108773801+DGamerL@users.noreply.github.com> Date: Mon Apr 22 22:32:58 2024 +0200 Halves the damage dealt by PKAs to blobs (#25154) * Makes PKAs deal half damage to blobs * Update code/modules/events/blob/theblob.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> --------- Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> commit 15483d1b88885e807ffc538f3e0cab2484505c08 Author: S34N <12197162+S34NW@users.noreply.github.com> Date: Mon Apr 22 21:32:52 2024 +0100 Add modern equivalents of legacy IE-only CSS rules/properties (#25205) * alternatives to legacy -ms stuff from TGUI * tgui build * bundle * rebuild --------- Co-authored-by: paradisess13[bot] <165046124+paradisess13[bot]@users.noreply.github.com> commit fdea9d76692f7f384a9b5dc09dd50fcce8c55fb5 Author: 1080pCat <96908085+1080pCat@users.noreply.github.com> Date: Mon Apr 22 23:08:45 2024 +1000 Update cerestation.dmm (#25190) commit 5fe22f485c028615f76f9acbf666daa15ecabadf Author: chuga-git <98280110+chuga-git@users.noreply.github.com> Date: Mon Apr 22 08:00:03 2024 -0500 permits mobs with chunky fingers to fire blowgun (#25176) commit 4b0f774cdc5f0f8472081fb60b94ba6995e57843 Author: Code-Lyoko0 Date: Mon Apr 22 05:29:06 2024 -0500 make the station not go into delta alert when the Death Squad arms the nuke (#25163) commit 339ded7dd3745f78584cf4d16eb805479335b4a7 Merge: 8481f50f90 f12f75c652 Author: Fordoxia <143041327+Fordoxia@users.noreply.github.com> Date: Mon Apr 22 01:52:33 2024 +0100 Merge branch 'master' of https://github.com/Fordoxia/CRUNCHParadise commit f12f75c65284b86779086fbeba2a6778a23d8bb9 Author: Charlie Nolan Date: Sun Apr 21 16:47:32 2024 -0700 Update CONTRIBUTING.md (#25235) commit 6d3549c3ca35eb4dcecabb35968af1d4d81a9d35 Author: DGamerL <108773801+DGamerL@users.noreply.github.com> Date: Mon Apr 22 01:34:33 2024 +0200 LOOK IT'S COCAINE BEAR (1985) (#25086) commit ebbbf62cecb3deaba0ae9e484d2b5874a2cde604 Author: tristan1333 Date: Mon Apr 22 09:06:47 2024 +1000 Chicken meat/burger, Onigiri, Seaweed, updated boiled rice sprite (#24813) * Adds chicken meat, burger, onigiri, updates boiled rice sprite * Update code/modules/food_and_drinks/food/foods/side_dishes.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Update code/game/objects/items/stacks/seaweed.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * changed chickenburger pathname, deleted old boiled rice sprite * Transfers reagents from rice to onigiri * Update code/modules/research/designs/biogenerator_designs.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * All sushi now requires seaweed * new seaweed desc, attackverb oopsy daisy, seaweed attack_self doesn't show pointless list, Onigiri goes in hand * moved seaweed sprite to organic.dmi * Update code/modules/research/designs/biogenerator_designs.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Update organic.dmi * re * goal * oops * early return * Update code/modules/food_and_drinks/food/foods/side_dishes.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Update code/modules/food_and_drinks/food/foods/side_dishes.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * Update code/modules/food_and_drinks/food/foods/side_dishes.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * Update code/modules/food_and_drinks/food/foods/side_dishes.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --------- Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> commit 224c488c40191e4f30db7102350f14d5ac5bdec6 Author: Burzah <116982774+Burzah@users.noreply.github.com> Date: Sun Apr 21 15:54:06 2024 -0700 CA Gang (#25233) commit 0a38123ff8bf5e40da19e86090e088d6cc830a66 Author: DGamerL <108773801+DGamerL@users.noreply.github.com> Date: Mon Apr 22 00:39:59 2024 +0200 Adds me to `CONTRIBUTING.md` (#25232) * I WILL conflict burza and funny * Okaaaaaaaay fiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiine commit 8481f50f9015a6c0b91b36ad18b16b5c6e6e0219 Merge: 5b793c36ed 4f8d91a316 Author: Fordoxia <143041327+Fordoxia@users.noreply.github.com> Date: Sun Apr 21 21:54:14 2024 +0100 Merge branch 'master' of https://github.com/Fordoxia/CRUNCHParadise commit 4f8d91a316a915d3ab627b02f731a3ccd6beb718 Author: Charlie Nolan Date: Sun Apr 21 12:45:47 2024 -0700 oops (#25210) Co-authored-by: FunnyMan3595 (Charlie Nolan) commit 9e6dcf9c46d6e9d1d476f814a0e8f43b0d11a437 Author: GDN <96800819+GDNgit@users.noreply.github.com> Date: Sun Apr 21 13:26:35 2024 -0500 removes the remaining datum redeclares (#25220) * removes the remaining datum redeclares * the two fixes * finneee contra * OK CONTRA * readd * CURSED TO BE BROWN! * facking automerge commit f83ef617e97107c02d778bebdbbd28df02b9b07e Author: Luc <89928798+lewcc@users.noreply.github.com> Date: Sun Apr 21 11:59:23 2024 -0400 Expands "genderless" to all species, adds body-type option, removes some gender checks (#23910) * adds most body type support, removes some gender checks * remove gender from species, accessories * restore pick_list * re-adds limitations on accessories * Universal access to body hair * remove unused var * Update example config, some preference saving code * updates tgui bundle * oops * Remove formatting * hopefully undoes formatting changes * dammit * been meaning to fix this one for a while * dgamer reviews * move body_type into human_defines * sql file changes * update tgui * Update db code * bump versions --------- Co-authored-by: S34N <12197162+S34NW@users.noreply.github.com> Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> commit 9bc9b4b67ac460816db834e81a2d335eff6003e8 Author: DGamerL <108773801+DGamerL@users.noreply.github.com> Date: Sun Apr 21 17:24:50 2024 +0200 Removes duplicate definitions of `/datum/gamemode` on almost every gamemode file (#25219) * Why did every gamemode do this :( * Contra request commit 585a885b1f5c667f6e2a4da55571c7cde833a338 Author: DGamerL <108773801+DGamerL@users.noreply.github.com> Date: Sun Apr 21 16:53:25 2024 +0200 Easy fix (#25216) commit f6196809f2c6367ea41e34a7864b7a09292fd590 Author: paradisess13[bot] <165046124+paradisess13[bot]@users.noreply.github.com> Date: Sat Apr 20 10:08:45 2024 +0100 NanoMap Auto-Update (Sat Apr 20 01:09:53 UTC 2024) (#25211) Co-authored-by: NanoMap Generation --- .github/CODEOWNERS | 5 + .github/CONTRIBUTING.md | 33 +- .github/assets/book-dark.png | Bin 0 -> 6036 bytes .github/assets/book-light.png | Bin 0 -> 6386 bytes .github/assets/compiles-sometimes.svg | 1 + .github/assets/discord-dark.png | Bin 0 -> 5337 bytes .github/assets/discord-light.png | Bin 0 -> 9389 bytes .github/assets/light-dark template.psd | Bin 0 -> 152664 bytes .github/assets/made-in-byond.gif | Bin 0 -> 23370 bytes .github/assets/made-with-crayons.svg | 31 + .github/assets/paradise.png | Bin 0 -> 7445 bytes .github/assets/web-dark.png | Bin 0 -> 6268 bytes .github/assets/web-light.png | Bin 0 -> 12466 bytes .github/assets/wiki-dark.png | Bin 0 -> 7255 bytes .github/assets/wiki-light.png | Bin 0 -> 12802 bytes .github/workflows/merge_upstream_master.yml | 2 +- .github/workflows/render_nanomaps.yml | 5 +- .tgs.yml | 2 +- COPYING | 19 - LICENSE-AGPL3.txt => LICENSE-AGPLv3.txt | 0 LICENSE-CC-BY-NC-SA-3.0.txt | 361 ++++ LICENSE-CC-BY-NC-SA.txt | 60 - LICENSE-CC-BY-SA-3.0.txt | 359 ++++ LICENSE-GPL3.txt => LICENSE-GPLv3.txt | 4 - README.md | 171 +- SQL/paradise_schema.sql | 1 + SQL/updates/53-54.sql | 2 +- SQL/updates/54-55.sql | 9 + .../SpaceRuins/intactemptyship.dmm | 7 +- .../RandomRuins/SpaceRuins/listeningpost.dmm | 3 +- .../RandomRuins/SpaceRuins/mechtransport.dmm | 2 +- .../RandomRuins/SpaceRuins/moonoutpost19.dmm | 1 + .../RandomRuins/SpaceRuins/onehalf.dmm | 15 +- .../SpaceRuins/syndicatedruglab.dmm | 2 +- .../SpaceRuins/syndie_space_base.dmm | 8 +- .../SpaceRuins/syndiecakesfactory.dmm | 1 + .../RandomRuins/SpaceRuins/syndiedepot.dmm | 2 +- .../map_files/RandomRuins/SpaceRuins/ussp.dmm | 15 +- .../RandomRuins/SpaceRuins/wizardcrash.dmm | 1 + _maps/map_files/generic/centcomm.dmm | 148 +- _maps/map_files/shuttles/emergency_shadow.dmm | 1871 +++++++++++++++++ _maps/map_files/stations/boxstation.dmm | 141 +- _maps/map_files/stations/cerestation.dmm | 1520 ++++++++----- _maps/map_files/stations/deltastation.dmm | 108 +- _maps/map_files/stations/metastation.dmm | 38 +- _maps/map_files/templates/biodome_beach.dmm | 14 +- code/__DEFINES/antag_defines.dm | 9 +- code/__DEFINES/clothing_defines.dm | 4 + code/__DEFINES/combat_defines.dm | 7 + code/__DEFINES/dcs/dcs_helpers.dm | 4 - code/__DEFINES/dcs/signals.dm | 28 +- code/__DEFINES/dna.dm | 23 +- code/__DEFINES/genetics_defines.dm | 1 + code/__DEFINES/hud_locations.dm | 1 + code/__DEFINES/is_helpers.dm | 4 + code/__DEFINES/martial_arts.dm | 2 +- code/__DEFINES/misc_defines.dm | 2 +- code/__DEFINES/mob_defines.dm | 8 +- code/__DEFINES/preferences_defines.dm | 18 +- code/__DEFINES/status_effects.dm | 12 + code/__HELPERS/game.dm | 1 - code/__HELPERS/global_lists.dm | 5 + code/__HELPERS/mob_helpers.dm | 24 +- code/__HELPERS/sanitize_values.dm | 45 +- code/__HELPERS/tool_helpers.dm | 5 - code/__HELPERS/type2type.dm | 23 +- code/__HELPERS/unsorted.dm | 58 +- .../lists/preference_toggle_lists.dm | 8 + code/_onclick/drag_drop.dm | 69 +- code/_onclick/hud/human_hud.dm | 16 +- code/_onclick/hud/radial.dm | 3 +- code/_onclick/hud/screen_objects.dm | 8 +- code/_onclick/observer_onclick.dm | 16 +- .../sections/general_configuration.dm | 4 +- code/controllers/subsystem/SSradiation.dm | 2 + code/controllers/subsystem/SSticker.dm | 11 +- code/controllers/subsystem/SStimer.dm | 14 +- .../subsystem/non_firing/SSchangelog.dm | 2 +- .../subsystem/non_firing/SSmapping.dm | 1 + .../subsystem/processing/{dcs.dm => SSdcs.dm} | 0 .../{fastprocess.dm => SSfastprocess.dm} | 0 .../processing/{fields.dm => SSfields.dm} | 0 .../{instruments.dm => SSinstruments.dm} | 0 .../subsystem/processing/{obj.dm => SSobj.dm} | 0 .../{obj_tab_items.dm => SSobj_tab_items.dm} | 0 .../{processing.dm => SSprocessing.dm} | 0 .../{projectiles.dm => SSprojectiles.dm} | 0 .../{transittube.dm => SStransittubes.dm} | 0 ...{mentor_tickets.dm => SSmentor_tickets.dm} | 0 .../tickets/{tickets.dm => SStickets.dm} | 0 code/datums/action.dm | 7 +- code/datums/components/cult_held_body.dm | 76 + code/datums/components/fullauto.dm | 325 +++ code/datums/components/radioactive.dm | 27 +- code/datums/components/shielded.dm | 2 +- code/datums/components/squeak.dm | 2 +- code/datums/datumvars.dm | 5 +- code/datums/emote.dm | 10 +- code/datums/helper_datums/teleport.dm | 21 +- code/datums/keybindings/admin_keybinds.dm | 2 +- code/datums/keybindings/mob_keybinds.dm | 16 + code/datums/mind.dm | 4 +- code/datums/outfits/outfit_admin.dm | 84 +- code/datums/outfits/outfit_debug.dm | 3 +- code/datums/recipe.dm | 3 - code/datums/shuttles.dm | 6 + code/datums/spell.dm | 2 - code/datums/spell_cooldown/spell_charges.dm | 2 +- code/datums/spell_cooldown/spell_cooldown.dm | 2 +- .../alien_spells/basetype_alien_spell.dm | 3 + code/datums/spells/bloodcrawl.dm | 1 - code/datums/spells/mime.dm | 4 - code/datums/spells/mimic.dm | 2 +- code/datums/status_effects/buffs.dm | 105 +- code/datums/status_effects/debuffs.dm | 26 + code/datums/status_effects/magic_disguise.dm | 27 +- code/datums/uplink_items/uplink_traitor.dm | 23 +- code/defines/procs/admin_keyname_procs.dm | 6 +- code/defines/procs/announcer_datum.dm | 4 +- code/game/area/asteroid_areas.dm | 9 - code/game/area/away_content_areas.dm | 7 +- code/game/atoms.dm | 88 +- code/game/dna/dna2.dm | 6 + code/game/dna/dna2_helpers.dm | 6 + code/game/dna/mutations/disabilities.dm | 9 +- code/game/dna/mutations/mutation_powers.dm | 6 - code/game/gamemodes/changeling/changeling.dm | 4 - code/game/gamemodes/cult/blood_magic.dm | 2 +- code/game/gamemodes/cult/cult_items.dm | 2 +- code/game/gamemodes/cult/cult_mode.dm | 3 - code/game/gamemodes/cult/cult_structures.dm | 2 +- code/game/gamemodes/game_mode.dm | 45 + .../gamemodes/malfunction/Malf_Modules.dm | 11 +- .../abduction/abductee_objectives.dm | 2 +- .../miniantags/abduction/abduction.dm | 5 - .../miniantags/abduction/abduction_gear.dm | 3 +- .../abduction/machinery/experiment.dm | 32 + .../demons/shadow_demon/shadow_demon.dm | 2 - .../demons/slaughter_demon/slaughter.dm | 1 - .../gamemodes/miniantags/guardian/guardian.dm | 2 +- .../miniantags/guardian/types/ranged.dm | 4 +- code/game/gamemodes/miniantags/morph/morph.dm | 2 +- .../miniantags/morph/spells/morph_spell.dm | 3 + .../miniantags/pulsedemon/pulsedemon.dm | 4 +- .../pulsedemon/pulsedemon_abilities.dm | 5 +- .../gamemodes/miniantags/revenant/revenant.dm | 6 +- .../miniantags/revenant/revenant_abilities.dm | 7 +- code/game/gamemodes/nuclear/nuclear.dm | 3 - .../gamemodes/nuclear/nuclear_challenge.dm | 4 +- code/game/gamemodes/nuclear/nuclearbomb.dm | 11 +- code/game/gamemodes/objective.dm | 2 +- code/game/gamemodes/revolution/revolution.dm | 5 - code/game/gamemodes/traitor/traitor.dm | 6 - .../gamemodes/vampire/vampire_gamemode.dm | 4 - code/game/gamemodes/wizard/magic_tarot.dm | 885 ++++++++ code/game/gamemodes/wizard/rightandwrong.dm | 10 +- code/game/gamemodes/wizard/soulstone.dm | 61 +- code/game/gamemodes/wizard/spellbook.dm | 10 +- code/game/gamemodes/wizard/wizard.dm | 4 - code/game/jobs/job_exp.dm | 12 - code/game/machinery/camera/camera.dm | 4 + code/game/machinery/camera/motion.dm | 6 - code/game/machinery/clonepod.dm | 5 +- code/game/machinery/clonescanner.dm | 19 +- .../machinery/computer/HolodeckControl.dm | 4 +- code/game/machinery/computer/brigcells.dm | 2 +- code/game/machinery/computer/card.dm | 2 +- code/game/machinery/constructable_frame.dm | 2 +- code/game/machinery/cryopod.dm | 11 +- code/game/machinery/deployable.dm | 4 +- code/game/machinery/doors/airlock_types.dm | 22 +- code/game/machinery/doors/brigdoors.dm | 6 +- code/game/machinery/doors/firedoor.dm | 1 - code/game/machinery/doors/poddoor.dm | 5 - code/game/machinery/hologram.dm | 29 +- code/game/machinery/iv_drip.dm | 2 +- code/game/machinery/mass_driver.dm | 2 +- code/game/machinery/portable_turret.dm | 9 +- code/game/machinery/requests_console.dm | 13 +- code/game/machinery/shieldgen.dm | 10 +- code/game/machinery/suit_storage_unit.dm | 29 +- code/game/machinery/tcomms/tcomms_base.dm | 2 +- code/game/machinery/transformer.dm | 2 +- .../machinery/vendors/wardrobe_vendors.dm | 8 +- code/game/mecha/combat/gygax.dm | 3 + code/game/mecha/combat/marauder.dm | 5 +- .../mecha/equipment/tools/medical_tools.dm | 2 + code/game/mecha/equipment/weapons/weapons.dm | 11 +- code/game/mecha/mecha.dm | 42 +- code/game/mecha/mecha_actions.dm | 15 - code/game/mecha/working/ripley.dm | 1 + code/game/objects/effects/landmarks.dm | 12 +- .../game/objects/effects/spawners/lootdrop.dm | 325 ++- code/game/objects/effects/spiders.dm | 2 +- .../effects/temporary_visuals/cult_visuals.dm | 7 + .../objects/items/devices/geiger_counter.dm | 2 +- code/game/objects/items/devices/paicard.dm | 3 +- .../items/devices/radio/encryptionkey.dm | 11 - .../items/devices/radio/radio_objects.dm | 31 +- code/game/objects/items/devices/scanners.dm | 115 +- .../objects/items/devices/taperecorder.dm | 2 +- .../objects/items/devices/traitordevices.dm | 2 +- code/game/objects/items/his_grace.dm | 2 +- code/game/objects/items/robot/robot_items.dm | 1 + .../objects/items/robot/robot_upgrades.dm | 14 +- code/game/objects/items/sport.dm | 4 +- code/game/objects/items/stacks/seaweed.dm | 19 + .../items/stacks/sheets/sheet_types.dm | 6 +- .../objects/items/tools/tool_behaviour.dm | 6 +- .../items/weapons/bio_chips/bio_chip_pad.dm | 10 +- .../weapons/bio_chips/bio_chip_traitor.dm | 2 +- code/game/objects/items/weapons/cards_ids.dm | 15 + code/game/objects/items/weapons/caution.dm | 2 +- code/game/objects/items/weapons/disks.dm | 2 +- .../objects/items/weapons/dna_injector.dm | 23 - code/game/objects/items/weapons/explosives.dm | 6 +- .../objects/items/weapons/flamethrower.dm | 9 +- .../items/weapons/grenades/clusterbuster.dm | 15 +- .../objects/items/weapons/holy_weapons.dm | 4 +- .../weapons/melee/energy_melee_weapons.dm | 2 +- code/game/objects/items/weapons/powerfist.dm | 4 +- code/game/objects/items/weapons/shields.dm | 2 +- .../objects/items/weapons/storage/backpack.dm | 3 +- .../objects/items/weapons/storage/boxes.dm | 230 +- .../items/weapons/storage/briefcase.dm | 2 +- .../objects/items/weapons/storage/garment.dm | 10 +- .../game/objects/items/weapons/tanks/tanks.dm | 6 +- code/game/objects/items/weapons/twohanded.dm | 7 - code/game/objects/structures.dm | 2 + code/game/objects/structures/barsign.dm | 686 ++++-- .../crates_lockers/closets/job_closets.dm | 4 +- .../closets/secure/cargo_lockers.dm | 2 +- .../crates_lockers/closets/statue.dm | 14 + .../crates_lockers/closets/wardrobe.dm | 6 +- .../structures/crates_lockers/largecrate.dm | 80 +- code/game/objects/structures/displaycase.dm | 74 +- code/game/objects/structures/fence.dm | 2 +- code/game/objects/structures/girders.dm | 2 +- code/game/objects/structures/grille.dm | 2 +- code/game/objects/structures/janicart.dm | 50 +- code/game/objects/structures/kitchen_spike.dm | 21 +- code/game/objects/structures/railings.dm | 6 +- .../structures/stool_bed_chair_nest/chairs.dm | 2 +- code/game/objects/structures/tables_racks.dm | 6 +- code/game/turfs/simulated/floor.dm | 18 +- .../turfs/simulated/floor/asteroid_floors.dm | 4 +- .../game/turfs/simulated/floor/fancy_floor.dm | 32 +- .../game/turfs/simulated/floor/light_floor.dm | 4 +- .../turfs/simulated/floor/mineral_floors.dm | 13 +- code/game/turfs/simulated/floor/misc_floor.dm | 8 +- .../turfs/simulated/floor/plasteel_floor.dm | 5 +- code/game/turfs/simulated/floor/plating.dm | 5 +- .../game/turfs/simulated/floor/transparent.dm | 2 +- code/game/turfs/space/transit.dm | 6 +- code/game/verbs/ooc.dm | 57 +- code/game/verbs/suicide.dm | 2 +- code/modules/admin/IsBanned.dm | 3 +- code/modules/admin/admin_verbs.dm | 107 +- code/modules/admin/holder2.dm | 1 + code/modules/admin/misc_admin_procs.dm | 7 +- code/modules/admin/secrets.dm | 3 - code/modules/admin/verbs/adminpm.dm | 27 +- code/modules/admin/verbs/custom_event.dm | 14 +- code/modules/admin/verbs/debug.dm | 21 + code/modules/admin/verbs/freeze.dm | 4 +- code/modules/admin/verbs/pray.dm | 2 +- code/modules/admin/verbs/toggledebugverbs.dm | 1 + .../changeling/powers/mutations.dm | 2 +- .../antagonists/changeling/powers/shriek.dm | 2 +- .../changeling/powers/swap_form.dm | 2 +- .../changeling/powers/tiny_prick.dm | 4 +- code/modules/antagonists/cult/team_cult.dm | 27 +- .../contractor/datums/syndicate_contract.dm | 1 + .../modules/antagonists/vampire/vamp_datum.dm | 2 +- .../antagonists/vampire/vamp_thrall.dm | 1 + .../vampire_powers/dantalion_powers.dm | 2 +- .../vampire_powers/gargantua_powers.dm | 3 +- .../vampire_powers/hemomancer_powers.dm | 1 - .../vampire/vampire_powers/vampire_powers.dm | 1 - code/modules/arcade/prize_counter.dm | 25 +- .../environmental/LINDA_turf_tile.dm | 3 + .../components/trinary_devices/filter.dm | 8 +- .../components/unary_devices/passive_vent.dm | 1 - .../components/unary_devices/tank.dm | 10 +- .../atmospherics/machinery/datum_pipeline.dm | 6 +- .../atmospherics/machinery/pipes/pipe.dm | 11 +- .../machinery/portable/canister.dm | 2 + .../portable/portable_atmospherics.dm | 6 +- .../machinery/portable/portable_pump.dm | 2 + .../machinery/portable/scrubber.dm | 8 +- code/modules/awaymissions/maploader/writer.dm | 14 +- .../mission_code/ruins/wizardcrash.dm | 6 +- .../mission_code/shuttle_shadow.dm | 32 + .../buildmode/submodes/antirad_mode.dm | 55 + code/modules/client/client_defines.dm | 24 + .../login_processing/20-load_characters.dm | 3 +- code/modules/client/preference/character.dm | 51 +- .../client/preference/link_processing.dm | 79 +- .../client/preference/loadout/loadout_hat.dm | 12 +- code/modules/client/preference/preferences.dm | 48 +- .../client/preference/preferences_toggles.dm | 829 +++++--- .../preference/preferences_volume_mixer.dm | 2 +- code/modules/client/view.dm | 22 - code/modules/clothing/clothing.dm | 30 +- code/modules/clothing/glasses/glasses.dm | 10 +- code/modules/clothing/gloves/boxing_gloves.dm | 20 + code/modules/clothing/head/beret.dm | 175 ++ code/modules/clothing/head/collectable.dm | 16 +- code/modules/clothing/head/job_hats.dm | 132 -- code/modules/clothing/head/misc_hats.dm | 37 - code/modules/clothing/head/misc_special.dm | 2 +- code/modules/clothing/head/soft_caps.dm | 47 +- code/modules/clothing/shoes/colour.dm | 6 +- .../clothing/spacesuits/misc_spacesuits.dm | 8 +- code/modules/clothing/suits/armor_suits.dm | 2 +- code/modules/clothing/suits/bio.dm | 52 +- .../clothing/under/accessories/accessory.dm | 2 +- .../clothing/under/accessories/holster.dm | 2 +- code/modules/clothing/under/color.dm | 5 - code/modules/clothing/under/costumes.dm | 7 - code/modules/crafting/guncrafting.dm | 20 +- code/modules/crafting/recipes.dm | 24 + code/modules/crafting/tailoring.dm | 124 +- code/modules/customitems/item_defines.dm | 14 +- .../detective_work/footprints_and_rag.dm | 3 - code/modules/events/blob/theblob.dm | 5 + code/modules/events/spacevine.dm | 16 +- code/modules/events/traders.dm | 173 +- .../food_and_drinks/drinks/drinks/cans.dm | 2 +- .../food_and_drinks/food/foods/meat.dm | 17 +- .../food_and_drinks/food/foods/sandwiches.dm | 8 + .../food_and_drinks/food/foods/side_dishes.dm | 19 + .../kitchen_machinery/gibber.dm | 5 +- .../food_and_drinks/recipes/recipes_grill.dm | 18 + .../recipes/recipes_microwave.dm | 15 +- .../recipes/tablecraft/recipes_table.dm | 28 +- code/modules/hydroponics/gene_modder.dm | 1 + code/modules/hydroponics/seed_extractor.dm | 17 +- code/modules/hydroponics/seeds.dm | 7 + code/modules/mapping/access_helpers.dm | 2 - .../modules/mapping/windoor_access_helpers.dm | 3 - code/modules/martial_arts/martial.dm | 29 +- code/modules/martial_arts/mimejutsu.dm | 4 +- .../mining/equipment/mining_charges.dm | 215 ++ code/modules/mining/lavaland/ash_flora.dm | 2 +- .../mining/lavaland/loot/tendril_loot.dm | 2 +- .../mining/lavaland/necropolis_chests.dm | 14 +- code/modules/mining/machine_vending.dm | 25 +- code/modules/mining/mint.dm | 255 ++- code/modules/mining/money_bag.dm | 6 +- code/modules/mining/satchel_ore_boxdm.dm | 13 +- .../mob/dead/observer/observer_base.dm | 77 +- .../modules/mob/dead/observer/observer_say.dm | 17 +- code/modules/mob/hear_say.dm | 15 +- code/modules/mob/living/autohiss.dm | 41 - code/modules/mob/living/brain/living_brain.dm | 29 +- .../living/carbon/alien/humanoid/humanoid.dm | 4 + .../alien/humanoid/humanoid_update_icons.dm | 5 - code/modules/mob/living/carbon/carbon_life.dm | 6 + .../modules/mob/living/carbon/carbon_procs.dm | 37 +- .../mob/living/carbon/carbon_update_status.dm | 1 + .../mob/living/carbon/human/appearance.dm | 27 +- .../mob/living/carbon/human/human_damage.dm | 2 +- .../mob/living/carbon/human/human_death.dm | 1 + .../mob/living/carbon/human/human_defines.dm | 2 + .../mob/living/carbon/human/human_emote.dm | 2 +- .../mob/living/carbon/human/human_mob.dm | 44 +- .../mob/living/carbon/human/human_say.dm | 19 +- .../living/carbon/human/human_update_icons.dm | 12 +- .../living/carbon/human/species/_species.dm | 3 +- .../carbon/human/species/diona_species.dm | 5 +- .../mob/living/carbon/human/species/drask.dm | 9 +- .../mob/living/carbon/human/species/golem.dm | 12 +- .../mob/living/carbon/human/species/grey.dm | 1 - .../mob/living/carbon/human/species/kidan.dm | 8 + .../living/carbon/human/species/machine.dm | 1 - .../living/carbon/human/species/plasmaman.dm | 3 + .../living/carbon/human/species/tajaran.dm | 4 + .../mob/living/carbon/human/species/unathi.dm | 24 +- .../mob/living/carbon/human/species/vox.dm | 1 - code/modules/mob/living/carbon/superheroes.dm | 5 - code/modules/mob/living/damage_procs.dm | 4 +- code/modules/mob/living/death.dm | 1 + code/modules/mob/living/living.dm | 6 + code/modules/mob/living/living_defines.dm | 4 +- code/modules/mob/living/living_emote.dm | 1 - code/modules/mob/living/living_life.dm | 28 + code/modules/mob/living/login.dm | 2 - code/modules/mob/living/silicon/ai/ai_say.dm | 7 +- .../living/silicon/robot/drone/maint_drone.dm | 8 +- .../living/silicon/robot/misc_robot_items.dm | 2 - .../mob/living/silicon/robot/robot_life.dm | 11 - .../mob/living/silicon/robot/robot_mob.dm | 106 +- .../mob/living/silicon/robot/robot_modules.dm | 2 - .../modules/mob/living/silicon/silicon_say.dm | 12 +- .../mob/living/simple_animal/bot/mulebot.dm | 63 +- .../mob/living/simple_animal/constructs.dm | 28 +- .../mob/living/simple_animal/friendly/dog.dm | 4 - .../simple_animal/friendly/farm_animals.dm | 4 +- .../living/simple_animal/friendly/snake.dm | 1 - .../living/simple_animal/hostile/headslug.dm | 4 +- .../simple_animal/hostile/megafauna/drake.dm | 2 +- .../hostile/megafauna/hierophant.dm | 2 +- .../hostile/mining/elites/elite.dm | 3 + .../hostile/terror_spiders/actions.dm | 2 +- .../terror_ghost_interaction.dm | 8 +- .../modules/mob/living/simple_animal/shade.dm | 5 - .../mob/living/simple_animal/simple_animal.dm | 1 - .../living/simple_animal/slime/slime_life.dm | 6 +- .../living/simple_animal/slime/slime_mob.dm | 4 + code/modules/mob/mob.dm | 160 +- code/modules/mob/mob_holder.dm | 4 +- code/modules/mob/mob_misc_procs.dm | 2 +- code/modules/mob/mob_movement.dm | 13 +- code/modules/mob/mob_say_base.dm | 37 +- code/modules/mob/mob_update_status_base.dm | 3 + code/modules/mob/mob_vars.dm | 4 +- .../human/human_facial_hair.dm | 1 - .../sprite_accessories/human/human_hair.dm | 6 - .../kidan/kidan_head_accessories.dm | 4 - .../sprite_accessories/skrell/skrell_face.dm | 16 - .../sprite_accessories/sprite_accessories.dm | 44 +- .../unathi/unathi_facial_hair.dm | 1 - .../sprite_accessories/vox/vox_facial_hair.dm | 1 - .../vulpkanin/vulpkanin_facial_hair.dm | 1 - .../vulpkanin/vulpkanin_hair.dm | 1 - code/modules/mob/typing_indicator.dm | 16 - code/modules/mod/mod_clothes.dm | 4 + code/modules/paperwork/paper.dm | 37 - code/modules/pda/utilities.dm | 27 +- code/modules/power/cables/cable.dm | 2 - .../power/engines/singularity/collector.dm | 11 +- .../power/engines/singularity/singularity.dm | 2 +- .../power/engines/supermatter/supermatter.dm | 18 +- .../engines/supermatter/supermatter_event.dm | 4 +- .../power/engines/tesla/energy_ball.dm | 102 +- code/modules/power/engines/tesla/generator.dm | 10 - .../generators/portable generators/pacman.dm | 49 +- code/modules/power/generators/solar.dm | 48 +- code/modules/power/generators/turbine.dm | 2 +- code/modules/power/lights.dm | 2 +- .../projectiles/ammunition/ammo_casings.dm | 5 +- .../projectiles/ammunition/energy_lens.dm | 16 +- code/modules/projectiles/gun.dm | 41 +- .../projectiles/guns/energy/special_eguns.dm | 22 + code/modules/projectiles/guns/energy_guns.dm | 2 +- .../projectiles/guns/projectile_gun.dm | 4 +- code/modules/projectiles/guns/syringe_gun.dm | 1 + code/modules/projectiles/projectile/beams.dm | 11 + .../modules/projectiles/projectile/bullets.dm | 3 +- .../projectile/magic_projectiles.dm | 2 +- .../reagents/chemistry/reagents/drugs.dm | 10 +- .../reagents/chemistry/reagents/medicine.dm | 2 +- .../reagents/chemistry/reagents_holder.dm | 13 +- .../reagent_containers/chemical_bottle.dm | 6 + code/modules/recycling/disposal.dm | 2 +- code/modules/recycling/sortingmachinery.dm | 2 +- code/modules/research/circuitprinter.dm | 39 +- .../research/designs/autolathe_designs.dm | 8 + .../research/designs/biogenerator_designs.dm | 9 + .../research/designs/mining_designs.dm | 10 + .../research/designs/weapon_designs.dm | 16 +- code/modules/research/protolathe.dm | 28 +- code/modules/research/server.dm | 16 +- .../research/xenobiology/xenobiology.dm | 2 +- code/modules/response_team/ert.dm | 3 - code/modules/ruins/ghost_bar.dm | 2 +- .../ruins/lavalandruin_code/sin_ruins.dm | 2 +- code/modules/ruins/ruin_areas.dm | 10 - code/modules/shuttle/shuttle.dm | 6 - code/modules/shuttle/syndicate_shuttles.dm | 2 +- code/modules/station_goals/bluespace_tap.dm | 6 +- .../station_goals/secondary/secondary_goal.dm | 1 + .../supply/supply_packs/pack_organic.dm | 3 +- .../supply/supply_packs/pack_security.dm | 2 +- .../supply/supply_packs/pack_shuttle.dm | 5 + code/modules/surgery/bio_chip_removal.dm | 15 +- code/modules/surgery/bones.dm | 36 +- code/modules/surgery/cavity_implant.dm | 32 +- code/modules/surgery/core_removal.dm | 13 +- code/modules/surgery/dental_implant.dm | 7 +- code/modules/surgery/encased.dm | 36 +- code/modules/surgery/generic.dm | 52 +- code/modules/surgery/limb_augmentation.dm | 6 +- code/modules/surgery/limb_reattach.dm | 27 +- code/modules/surgery/organs/augments_arms.dm | 2 +- .../surgery/organs/augments_internal.dm | 4 +- code/modules/surgery/organs/brain.dm | 2 +- code/modules/surgery/organs/heart.dm | 13 +- code/modules/surgery/organs/organ_icon.dm | 13 +- code/modules/surgery/organs/organ_internal.dm | 9 - code/modules/surgery/organs_internal.dm | 94 +- code/modules/surgery/other.dm | 43 +- code/modules/surgery/plastic_surgery.dm | 21 +- .../modules/surgery/remove_embedded_object.dm | 6 +- code/modules/surgery/robotics.dm | 114 +- .../tgui/modules/appearance_changer.dm | 1 - .../tgui_input/say_modal/tgui_say_modal.dm | 3 - code/modules/unit_tests/_unit_tests.dm | 1 + .../unit_tests/atmos/test_ventcrawl.dm | 42 + .../unit_tests/atmos/test_ventcrawl.dmm | 30 + code/modules/vote/vote_datum.dm | 2 +- code/modules/world_topic/adminmsg.dm | 4 +- config/example/config.toml | 2 +- icons/_nanomaps/CereStation_nanomap_z1.png | Bin 921274 -> 923594 bytes icons/_nanomaps/Cyberiad_nanomap_z1.png | Bin 582937 -> 582828 bytes icons/_nanomaps/Delta_nanomap_z1.png | Bin 634964 -> 635923 bytes icons/effects/effects.dmi | Bin 495955 -> 489526 bytes .../effects/mouse_pointers/weapon_pointer.dmi | Bin 0 -> 234 bytes icons/hud/64x16_actions.dmi | Bin 3404 -> 3747 bytes icons/mecha/mecha_equipment.dmi | Bin 30574 -> 31551 bytes icons/misc/buildmode.dmi | Bin 1823 -> 1907 bytes icons/mob/clothing/head.dmi | Bin 286676 -> 264557 bytes icons/mob/clothing/head/beret.dmi | Bin 0 -> 3719 bytes icons/mob/clothing/head/bio.dmi | Bin 0 -> 1231 bytes icons/mob/clothing/head/softcap.dmi | Bin 0 -> 3372 bytes icons/mob/clothing/species/drask/head.dmi | Bin 25914 -> 22876 bytes .../mob/clothing/species/drask/head/beret.dmi | Bin 0 -> 1171 bytes icons/mob/clothing/species/drask/head/bio.dmi | Bin 0 -> 1326 bytes .../clothing/species/drask/head/softcap.dmi | Bin 0 -> 386 bytes .../mob/clothing/species/drask/suits/bio.dmi | Bin 0 -> 12057 bytes icons/mob/clothing/species/grey/head.dmi | Bin 53451 -> 50922 bytes icons/mob/clothing/species/grey/head/bio.dmi | Bin 0 -> 1288 bytes .../clothing/species/grey/head/softcap.dmi | Bin 0 -> 382 bytes icons/mob/clothing/species/grey/suits/bio.dmi | Bin 0 -> 11630 bytes icons/mob/clothing/species/kidan/head/bio.dmi | Bin 0 -> 1267 bytes .../mob/clothing/species/kidan/suits/bio.dmi | Bin 0 -> 11227 bytes icons/mob/clothing/species/tajaran/head.dmi | Bin 6461 -> 742 bytes .../mob/clothing/species/tajaran/head/bio.dmi | Bin 0 -> 1323 bytes icons/mob/clothing/species/tajaran/suit.dmi | Bin 96872 -> 77087 bytes .../clothing/species/tajaran/suits/bio.dmi | Bin 0 -> 13475 bytes icons/mob/clothing/species/unathi/head.dmi | Bin 6378 -> 709 bytes .../mob/clothing/species/unathi/head/bio.dmi | Bin 0 -> 1253 bytes icons/mob/clothing/species/unathi/suit.dmi | Bin 98504 -> 80083 bytes .../mob/clothing/species/unathi/suits/bio.dmi | Bin 0 -> 13460 bytes icons/mob/clothing/species/vox/head.dmi | Bin 100090 -> 83495 bytes icons/mob/clothing/species/vox/head/beret.dmi | Bin 0 -> 3747 bytes icons/mob/clothing/species/vox/head/bio.dmi | Bin 0 -> 1268 bytes .../mob/clothing/species/vox/head/softcap.dmi | Bin 0 -> 3552 bytes icons/mob/clothing/species/vox/helmet.dmi | Bin 80464 -> 76285 bytes icons/mob/clothing/species/vox/suit.dmi | Bin 349929 -> 341588 bytes icons/mob/clothing/species/vox/suits/bio.dmi | Bin 0 -> 14388 bytes icons/mob/clothing/species/vulpkanin/head.dmi | Bin 7389 -> 789 bytes .../clothing/species/vulpkanin/head/bio.dmi | Bin 0 -> 1506 bytes icons/mob/clothing/species/vulpkanin/suit.dmi | Bin 101863 -> 84146 bytes .../clothing/species/vulpkanin/suits/bio.dmi | Bin 0 -> 14495 bytes icons/mob/clothing/suit.dmi | Bin 580357 -> 554222 bytes icons/mob/clothing/suits/bio.dmi | Bin 0 -> 11602 bytes icons/mob/corgi_head.dmi | Bin 34560 -> 33432 bytes icons/mob/inhands/guns_lefthand.dmi | Bin 72775 -> 68910 bytes icons/mob/inhands/guns_righthand.dmi | Bin 83711 -> 78125 bytes icons/mob/inhands/items_lefthand.dmi | Bin 104717 -> 106789 bytes icons/mob/inhands/items_righthand.dmi | Bin 104134 -> 106723 bytes icons/mob/screen_gen.dmi | Bin 126238 -> 119053 bytes icons/obj/barsigns.dmi | Bin 170328 -> 171044 bytes icons/obj/card.dmi | Bin 15698 -> 15978 bytes icons/obj/clothing/hats.dmi | Bin 117857 -> 100473 bytes icons/obj/clothing/head/beret.dmi | Bin 0 -> 6796 bytes icons/obj/clothing/head/bio.dmi | Bin 0 -> 885 bytes icons/obj/clothing/head/softcap.dmi | Bin 0 -> 3980 bytes icons/obj/clothing/suits.dmi | Bin 168768 -> 162232 bytes icons/obj/clothing/suits/bio.dmi | Bin 0 -> 4138 bytes icons/obj/economy.dmi | Bin 21314 -> 19436 bytes icons/obj/food/burgerbread.dmi | Bin 46367 -> 46928 bytes icons/obj/food/food.dmi | Bin 33670 -> 34627 bytes icons/obj/food/meat.dmi | Bin 8943 -> 10086 bytes icons/obj/guns/energy.dmi | Bin 46858 -> 47067 bytes icons/obj/mining.dmi | Bin 9356 -> 11547 bytes icons/obj/playing_cards.dmi | Bin 8109 -> 37789 bytes icons/obj/stacks/organic.dmi | Bin 18720 -> 19190 bytes paradise.dme | 32 +- sound/items/detonator.ogg | Bin 0 -> 22157 bytes tgui/bin/tgui | 21 +- tgui/bin/tgui_.ps1 | 2 +- .../tgui-panel/styles/tgchat/chat-dark.scss | 28 +- .../tgui-panel/styles/tgchat/chat-light.scss | 34 +- tgui/packages/tgui-say/index.tsx | 5 +- tgui/packages/tgui/components/LabeledList.tsx | 3 + tgui/packages/tgui/components/NanoMap.js | 3 +- .../tgui/interfaces/AppearanceChanger.js | 5 +- .../tgui/interfaces/CloningConsole.js | 3 +- tgui/packages/tgui/interfaces/CoinMint.tsx | 128 ++ .../tgui/interfaces/MedicalRecords.js | 14 +- tgui/packages/tgui/interfaces/PdaPainter.js | 9 +- .../tgui/interfaces/RequestConsole.js | 3 +- .../tgui/interfaces/SecurityRecords.js | 13 +- tgui/packages/tgui/interfaces/StripMenu.tsx | 3 +- .../tgui/interfaces/common/SimpleRecords.js | 4 +- .../tgui/interfaces/pda/pda_mob_hunt.js | 3 +- .../tgui/styles/components/Button.scss | 2 +- .../packages/tgui/styles/components/Flex.scss | 2 +- .../tgui/styles/components/Input.scss | 15 + .../tgui/styles/components/TextArea.scss | 7 + .../tgui/styles/interfaces/Contractor.scss | 3 +- .../tgui/styles/interfaces/Newscaster.scss | 6 +- .../tgui/styles/layouts/TitleBar.scss | 2 +- tgui/packages/tgui/styles/themes/paper.scss | 7 + tgui/public/tgui-panel.bundle.css | 2 +- tgui/public/tgui-panel.bundle.js | 122 +- tgui/public/tgui-say.bundle.css | 2 +- tgui/public/tgui-say.bundle.js | 2 +- tgui/public/tgui.bundle.css | 2 +- tgui/public/tgui.bundle.js | 110 +- .../maplint/lints/grille_window_stacking.yml | 4 + .../lints/stacked_matching_disposals.yml | 4 + .../maplint/lints/stacked_matching_pipes.yml | 9 + tools/maplint/source/__main__.py | 3 + tools/maplint/source/lint.py | 5 + tools/tgs_scripts/PreCompile.sh | 19 +- 609 files changed, 11397 insertions(+), 4508 deletions(-) create mode 100644 .github/assets/book-dark.png create mode 100644 .github/assets/book-light.png create mode 100644 .github/assets/compiles-sometimes.svg create mode 100644 .github/assets/discord-dark.png create mode 100644 .github/assets/discord-light.png create mode 100644 .github/assets/light-dark template.psd create mode 100644 .github/assets/made-in-byond.gif create mode 100644 .github/assets/made-with-crayons.svg create mode 100644 .github/assets/paradise.png create mode 100644 .github/assets/web-dark.png create mode 100644 .github/assets/web-light.png create mode 100644 .github/assets/wiki-dark.png create mode 100644 .github/assets/wiki-light.png delete mode 100644 COPYING rename LICENSE-AGPL3.txt => LICENSE-AGPLv3.txt (100%) create mode 100644 LICENSE-CC-BY-NC-SA-3.0.txt delete mode 100644 LICENSE-CC-BY-NC-SA.txt create mode 100644 LICENSE-CC-BY-SA-3.0.txt rename LICENSE-GPL3.txt => LICENSE-GPLv3.txt (99%) create mode 100644 SQL/updates/54-55.sql create mode 100644 _maps/map_files/shuttles/emergency_shadow.dmm create mode 100644 code/_globalvars/lists/preference_toggle_lists.dm rename code/controllers/subsystem/processing/{dcs.dm => SSdcs.dm} (100%) rename code/controllers/subsystem/processing/{fastprocess.dm => SSfastprocess.dm} (100%) rename code/controllers/subsystem/processing/{fields.dm => SSfields.dm} (100%) rename code/controllers/subsystem/processing/{instruments.dm => SSinstruments.dm} (100%) rename code/controllers/subsystem/processing/{obj.dm => SSobj.dm} (100%) rename code/controllers/subsystem/processing/{obj_tab_items.dm => SSobj_tab_items.dm} (100%) rename code/controllers/subsystem/processing/{processing.dm => SSprocessing.dm} (100%) rename code/controllers/subsystem/processing/{projectiles.dm => SSprojectiles.dm} (100%) rename code/controllers/subsystem/processing/{transittube.dm => SStransittubes.dm} (100%) rename code/controllers/subsystem/tickets/{mentor_tickets.dm => SSmentor_tickets.dm} (100%) rename code/controllers/subsystem/tickets/{tickets.dm => SStickets.dm} (100%) create mode 100644 code/datums/components/cult_held_body.dm create mode 100644 code/datums/components/fullauto.dm create mode 100644 code/game/gamemodes/wizard/magic_tarot.dm create mode 100644 code/game/objects/items/stacks/seaweed.dm create mode 100644 code/modules/awaymissions/mission_code/shuttle_shadow.dm create mode 100644 code/modules/buildmode/submodes/antirad_mode.dm create mode 100644 code/modules/clothing/head/beret.dm create mode 100644 code/modules/mining/equipment/mining_charges.dm delete mode 100644 code/modules/power/engines/tesla/generator.dm create mode 100644 code/modules/unit_tests/atmos/test_ventcrawl.dm create mode 100644 code/modules/unit_tests/atmos/test_ventcrawl.dmm create mode 100644 icons/effects/mouse_pointers/weapon_pointer.dmi create mode 100644 icons/mob/clothing/head/beret.dmi create mode 100644 icons/mob/clothing/head/bio.dmi create mode 100644 icons/mob/clothing/head/softcap.dmi create mode 100644 icons/mob/clothing/species/drask/head/beret.dmi create mode 100644 icons/mob/clothing/species/drask/head/bio.dmi create mode 100644 icons/mob/clothing/species/drask/head/softcap.dmi create mode 100644 icons/mob/clothing/species/drask/suits/bio.dmi create mode 100644 icons/mob/clothing/species/grey/head/bio.dmi create mode 100644 icons/mob/clothing/species/grey/head/softcap.dmi create mode 100644 icons/mob/clothing/species/grey/suits/bio.dmi create mode 100644 icons/mob/clothing/species/kidan/head/bio.dmi create mode 100644 icons/mob/clothing/species/kidan/suits/bio.dmi create mode 100644 icons/mob/clothing/species/tajaran/head/bio.dmi create mode 100644 icons/mob/clothing/species/tajaran/suits/bio.dmi create mode 100644 icons/mob/clothing/species/unathi/head/bio.dmi create mode 100644 icons/mob/clothing/species/unathi/suits/bio.dmi create mode 100644 icons/mob/clothing/species/vox/head/beret.dmi create mode 100644 icons/mob/clothing/species/vox/head/bio.dmi create mode 100644 icons/mob/clothing/species/vox/head/softcap.dmi create mode 100644 icons/mob/clothing/species/vox/suits/bio.dmi create mode 100644 icons/mob/clothing/species/vulpkanin/head/bio.dmi create mode 100644 icons/mob/clothing/species/vulpkanin/suits/bio.dmi create mode 100644 icons/mob/clothing/suits/bio.dmi create mode 100644 icons/obj/clothing/head/beret.dmi create mode 100644 icons/obj/clothing/head/bio.dmi create mode 100644 icons/obj/clothing/head/softcap.dmi create mode 100644 icons/obj/clothing/suits/bio.dmi create mode 100644 sound/items/detonator.ogg create mode 100644 tgui/packages/tgui/interfaces/CoinMint.tsx create mode 100644 tools/maplint/lints/stacked_matching_disposals.yml create mode 100644 tools/maplint/lints/stacked_matching_pipes.yml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b5cac72b780..b60d02c79d2 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -26,3 +26,8 @@ _build_dependencies.sh @AffectedArc07 dreamchecker.exe @AffectedArc07 rust_g.dll @AffectedArc07 librust_g.so @AffectedArc07 + +### S34NW + +# TGUI stuff +/tgui/bin @S34NW diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index c3eb80df962..ae777746daf 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -157,7 +157,7 @@ if(thing == TRUE) return "bleh" var/other_thing = pick(TRUE, FALSE) if(other_thing == FALSE) - return "meh" + return "meh" // Good var/thing = pick(TRUE, FALSE) @@ -165,7 +165,7 @@ if(thing) return "bleh" var/other_thing = pick(TRUE, FALSE) if(!other_thing) - return "meh" + return "meh" ``` ### Use `pick(x, y, z)`, not `pick(list(x, y, z))` @@ -452,6 +452,32 @@ Look for code examples on how to properly use it. addtimer(CALLBACK(target, PROC_REF(dothing), arg1, arg2, arg3), 5 SECONDS) ``` +### Signals + +Signals are a slightly more advanced topic, but are often useful for attaching external behavior to objects that should be triggered when a specific event occurs. + +When defining procs that should be called by signals, you must include `SIGNAL_HANDLER` after the proc header. This ensures that no sleeping code can be called from within a signal handler, as that can cause problems with the signal system. + +Since callbacks can be connected to many signals with `RegisterSignal`, it can be difficult to pin down the source that a callback is invoked from. Any new `SIGNAL_HANDLER` should be followed by a comment listing the signals that the proc is expected to be invoked for. If there are multiple signals to be handled, separate them with a `+`. + +```dm +/atom/movable/proc/when_moved(atom/movable/A) + SIGNAL_HANDLER // COMSIG_MOVABLE_MOVED + do_something() + +/datum/component/foo/proc/on_enter(datum/source, atom/enterer) + SIGNAL_HANDLER // COMSIG_ATOM_ENTERED + COMSIG_ATOM_INITIALIZED_ON + do_something_else() +``` + +If your proc does have something that needs to sleep (such as a `do_after()`), do not simply omit the `SIGNAL_HANDLER`. Instead, call the sleeping code with `INVOKE_ASYNC` from within the signal handling function. + +```dm +/atom/movable/proc/when_moved(atom/movable/A) + SIGNAL_HANDLER // COMSIG_MOVABLE_MOVED + INVOKE_ASYNC(src, PROC_REF(thing_that_sleeps), arg1) +``` + ### Operators #### Spacing of operators @@ -834,8 +860,10 @@ Each role inherits the lower role's responsibilities (IE: Headcoders also have c `Commit Access` members have write access to the repository and can merge your PRs. People included in this role are: - [AffectedArc07](https://github.com/AffectedArc07) +- [Burzah](https://github.com/Burzah) - [Charliminator](https://github.com/hal9000PR) - [Contrabang](https://github.com/Contrabang) +- [DGamerL](https://github.com/DGamerL) - [lewcc](https://github.com/lewcc) --- @@ -846,6 +874,7 @@ Each role inherits the lower role's responsibilities (IE: Headcoders also have c - [Charliminator](https://github.com/hal9000PR) - [Contrabang](https://github.com/Contrabang) - [DGamerL](https://github.com/DGamerL) +- [FunnyMan3595](https://github.com/FunnyMan3595) - [Henri215](https://github.com/Henri215) - [lewcc](https://github.com/lewcc) - [Sirryan2002](https://github.com/Sirryan2002) diff --git a/.github/assets/book-dark.png b/.github/assets/book-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..983e35880f8b43c57f5d8904597b722a35ce348c GIT binary patch literal 6036 zcmcII2UL^i+9*|l$PkK=5us@XRFXi#NWzjOq5>+)ULgY_goGp*2m}-fxDXYUDl?@m ztxN|XBTz;`WyJ+3%LtVqN&tf(^M1i`@BL4E?>+bb|D2QWd*A1M-e<4m^Z{2VMFmX- z85tQx=RFRGfcLzN%$fkX^}woV^V&$@B~RPq&5)5%&60lC-0EHdHtSE34|_4aT=rw} zR0ZEJ zVGlX%{=^K}SwTaYOd1w}V6j+m779+KhaikG7!1M)i9jM@00xW^6T!qq!y*{pex~3+ zWZ>y!8k0EjY7`w$bUX%#`K?qN8rGgp#4)M#!&GYcXHOmYEV3@r6mF(#;7N`k zP+5%a|8RlmfMXJ^pn%s*U`8e|q{(5VF&2r$8XNC4GR7JieMEJk63C>OKSMP|VolKh zgbKtA0msDsTVw(rOQO;#I6z@C1s6g@&>}*hx?jwQwWo$t=>TIuI@GEZE-qN-2nG`u zfhRgUSU~}u;bbxai$a>9j7cUq7>R=NhJl&j33zj3A^~k|PW*h|fr^ik zdiL{u0&pL17K}m$Bk?eTsTm1oY-C~r!w^mJFk^ER-jqNh8JlB*Ki_wwlY!L2h5y%d zqzNYt3G5y+18`Q%r;KnXMt)j_lXX|40E@#*quUCKm%5cmfPMm#|HK0SnFb%pvOq8oyJFfMeCnkNi96>Y1$M6vz4Jhg5dJ-p-g0R^2BLv|6%4 zUd5SxNcyoqb~I~grM~9&ZPbdl1ydyO@odH?M3c}~Szx%5Sk62tv#D5kTR1rR6HUj^ z898LFX1%!tG@7iR!r4d8{{yE3$=MvB8jpzkPCN1H9DVNgWE{^;d9kn2TX<$NMlJbj ztiht=+*Y2B(xOunQ8?tHgcZFfoEJY63{R;Et%PBEvJh56^jMC9)zTY|eRUXKwajyo zg)V-_YaP}QmTpAH#+ffa%id_UwKXMBnYAUGQC!&d_dMl63#s9Hh7OTy^^iQcjA`v^_qNvK+Vy2P>{++AwF2$ns?EHY6#@L6YE1m1=>l$Zi7< z1d#$%u)2ST@XJz~JR4J*)P<}@t`K_lRb|t7qe0w`IDe5{=_6U;^yIl66Q*6f9TAHk zzNeAq@&w!fZfxV(-=B&^l}T_3azZ)e^siGq9koFylLt2a`cPP~_@~%FJ1`rrte5WO zP<&>|jt8d6g(n_9Kt9ov0w{hIO}l8_V&E?i;>S9Fs9>plCyv!&v~_a6c9l;k>(1_DgZN}w z)d+>2=2EL+RxSI>m~~TZ38wmRiE-v zU(k@Qn`n2A`>4+|d@TdHbidZGPo+VMP~UhnPiobil4+g{2hE zZZP|zSm3r9Fl$08z_|I!+M_NbZlGK+z;@0D?X)K~ZBeVKFIz)jf~->w(EFujcTPWX zrlT_o%sv9Hs5SnOm8^5e&MBCK7WSw~xcN!+N z?a2oM?Nihp7p##6qBQjW9*2J#nZPj+n7c&Bzr^bQKZ!Hd{vrX#Tpm&__Tkyj@?C*l zfdZuZtxZ#UlG1>gfmW4(_bdYB2F5b`5JxrvyQ)EtBO`Vxq~}Wda**mUZPyYcoo9c0 zF&_C9H7W5SlY zvPR6@`^g)V4<^4A`Zhg`+EC|d=jMvOYq)rzx3Wn8%B$0@=}isloxd;dO;|afygWAP z8wKgzC0bYOCwf|qwHzEF?G@?x3TxxIg2E|UbgHw9{m?^hz(vnYfgHb&N9E@44}DY3 zGM9{8ZdlSoY1plJ@+!?GC>KI)KFdPFN^ZS=Pl}j}R~-)WtF(9PWXE20KF5+oq%4!v zwrm&%3Q(9!5J1940^0xa?Rot-ISz(5RMV(G5h6W9=u5huMYUS6XYE%UGQ~!xft-DN zzb`06uz0C>N8 z%JQx`Yc&nAXeK%SsBDQ-{SM0(!fw$FcMzm(s{20B=vw5#eH@;R^&&&oE;mVR&YRNU z=LpgiGRz1k?)f&K7lg@Kan>#<`b=YDLRK8rw0NF6^V=0`ecMbuavMSUh(x2bSI9qQO z_h6Up_WO-+eN!`l#bd2oYZdQ2E7XJlg5aBPL?YlI5 z1VNEpk2L*i<;moHc@wMBNWK@;NtNsOA3|csL{@> z`zw{|N+XMv%1M!~zGJCtGj0}NvpE@KAi>JoAidx9Z)IhfpHc0@-r@(G2VX>1E<-{F z3V#XmP3tZBU?8c64jCF7>&FDURhn+E;xDTX_W?a+mOWAx?6$Vp=+q}bUtNv0`1Vv# zPs7dld5vR-2#I<%{h-17DPw0lFTSOa&>n)FDnmiZQ;E6M{6GupFMx&iAEM)u2alD;+3S2}T8xvTZmW$H|J1MF3#o8uI z1f2LX^Ias#U1Ue~73Cvyl?$3L)V3)z9In67D;-_T;XE&yDLX$$dUN6&Fi})+t?$Pk z4{M2-*xf);R9I|(e5_F4lsnipKMOS13P_S~;LD0LaVvvu^VB1o0=v@`fR5;HFCNA8 z9&V~ox-vJ5;eN?pF|d2m?e)%Su-)%hQO*KMh(oA2lT9M zczanW@2oAi&xbIu_%$2i^g@4|o20k%ZgDXjEt1a05xTg`t?t6M*=&bLsBWdh5>z!NCQAi+3pgvXI$# zV&5Td-3@ipbQZYo;I!k<_snAV^}j-Qf%eZ&@Ut0O7M&C@JKer3?!M?UtH$|$;e+{g z72c%S4anUAuV!CoX4p~bqHFlTvIqNNxXb4(8E@9j9#9xUY~^Jra=QH;T0nz0&Gyy} zL#ixI#vi$+JJw7wu7(eC#>Owcoq3F3lU`fc-W~(jAFF>hRGuA^@v1uWh9EP(Q#YPsCKU=xc^m9!~2SNwcmGmmEl7=gD;Jv;ww&9ZI|p$staO8qed+T z4O+V_+BJrD=j2B2Jr&b^K?m$*c-!+SBs|F##_PJ)pRawwHK-R@$+yW_y-U?>8(bzgv?e>Br@RM+Q}de#TYmFXllHZh zRBp{9hSDjB!6a(-)}n9BM5f0>#xkZuVJh+)C^r`FfulmhVlnUZl*fTSaSLy?Wm9BQP=7VOI{N$d5=EpiM-T# zZip%ofzL|1DAuoE=B6U?L9;-@DR3^#SdXEsJ;fuOjP{u24`uDFF_bGWo6z6saV6GK zj&lTDUNjohn#I`EZUmUVNMv^%*D~;Wf5yd5EX=&^tXFp$RF0#b@oQ)GImX0D4r3(7 z3p)KnM$35;Cm@%hG4Z5pju8w&L|c;rl)~Z_I2s@~AlXExrhaHcE@*VBjJsg=^4*7n z!NdN!#bA!2nZab@t@LH3nD|oOhwYM|;oD3*?{*Zc8wMVcgqL$$w<1dj=^5h>xr6rv zm5cySYrlrX%Nyu9cP=f=7KT!=AuaO!NS@o70BZI`3)o7(HjtJ%j+r%}uf%WjxEobc zBhXTx2Qu&c__oUWx*%S&Ps#N2@_~n!Db#`${-n5ad>!$U@g#2`iYLAT&K@jLKg8+_ xWqdW}l)QX-s8Gyie*BU6@rUBaYz10AXv{C%vh0xlCh7m?&W^4QC3ZoHe*>E5nC1Wg literal 0 HcmV?d00001 diff --git a/.github/assets/book-light.png b/.github/assets/book-light.png new file mode 100644 index 0000000000000000000000000000000000000000..2568426a80c40e86f16b9f671d9e2c44c37ccec5 GIT binary patch literal 6386 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 literal 0 HcmV?d00001 diff --git a/.github/assets/compiles-sometimes.svg b/.github/assets/compiles-sometimes.svg new file mode 100644 index 00000000000..8232884ef84 --- /dev/null +++ b/.github/assets/compiles-sometimes.svg @@ -0,0 +1 @@ +COMPILESSOMETIMES \ No newline at end of file diff --git a/.github/assets/discord-dark.png b/.github/assets/discord-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..ecddfb9d12ad399cf22203b3553c13775d41ba84 GIT binary patch literal 5337 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 literal 0 HcmV?d00001 diff --git a/.github/assets/discord-light.png b/.github/assets/discord-light.png new file mode 100644 index 0000000000000000000000000000000000000000..bf2353843885bc76bda09a7d95dc794b823613d3 GIT binary patch literal 9389 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 literal 0 HcmV?d00001 diff --git a/.github/assets/light-dark template.psd b/.github/assets/light-dark template.psd new file mode 100644 index 0000000000000000000000000000000000000000..b1c8eb0dfe80da5ed48a8d5c8c2d6e9789208a35 GIT binary patch literal 152664 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 + made-with-crayons + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.github/assets/paradise.png b/.github/assets/paradise.png new file mode 100644 index 0000000000000000000000000000000000000000..859a3f4f6359553d563a610e5918d9fa0644438e GIT binary patch literal 7445 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 KPxxbDSN|J}+0^_1 literal 0 HcmV?d00001 diff --git a/.github/assets/web-dark.png b/.github/assets/web-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..d304acdcc30917f7ba3d59a84c98050cd5395469 GIT binary patch literal 6268 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 literal 0 HcmV?d00001 diff --git a/.github/assets/wiki-dark.png b/.github/assets/wiki-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..26e0806faacd5f4e10d89113ecef886732c38e70 GIT binary patch literal 7255 zcmcIp3pkW%`ya_63TZp7FtMFz%*o7{VaBnfl9F_E7&Ai?W|$eL(IB*HJ8fIhK}NM! zrJ`DdhOLx7B~#icq|M4W#8(CxX6FCAGst$;w%7mrzOJiz-}kxi=RW-I-+ez%S9{m4 zai6C5tsV>po93~?%^N&rFqnqFt~PkPG;2~Mcua{{v6%~l8D~O&HLg8Vf)D*7rq3qc zCePI*8av#EN@oW#Y+}PBfHn-~;20Z0rG+wh@E}GAlSQ`ZEvvAAGwEcDjW|z~XM`(b zJ97n}!&uK><3rZYfDwa;gE`?)I7%UQvL87q;6pn<#lWd9b(LWZz z9fuxF@^)K3>I{65Ew=M`5hNrsCML!v25ZCSgdovGA`ywgATbyO&_HnGSUhShg2lBQ zv*5?j`D0)(p0Av|K-EQ>pe6F>|ZON~IHZBS57Dn&YNTrVPu z6Q*)bry&_(jBo~v#|66RaovdRY#y7to&5#VeNZ%kyS@#Pc6)2kPUSdCcH1?1dzMNs1B6{DLYZ z8CQ)UxpEj(9-HICW`~WDXYCk@a171{4_~~I$)dAkxJ#fMMmI3rs5}PQ0uad-fwDzl za6V`h31dgXqODPA5(=eO^<>kT!Ev8c#S%#v>|ay?jpMybddUSCU#JaGk(M1dz1^ysazoQD9zozg} zzJbLAAY&}x5M$K1t_RZ#0E@@ru(;9nwai#X*d{k7z=x{}1%m_CS8Y*=Hct>?fe6f( zkFfbLVtK2naSRT3bnLiLLq^}im=lVs(pf_d2fp3GFMK02lsU2JDmi3qq8#~OwSv4DhE`C2TDn{2bku?#FSo_@W;!HTv%%B7pwFP|*YgmWl}m-D^uk1flIfAJfr6C|h(8 z7KaCX{4zvX90`LPn?(N~h(>MGwo_Rl3~-Vo|AS;`bR2_#Mg<|T7%T>1OSi=!g6J3` zm`rFYhK>aj(k}RKlbJYH|HsMDzRG~F6dmHlI7z+?8lAymPT;^qo{fh9S26CtLx?9JA_Z*#GIl2u%?c3={62V@u#d3%!nCrNPJeWt_nR zeait?ZHvh23>eJF-NVhI+8$~stJ;VXm5#jmu#xuMnm!_#D!9G3H8PVp5wE3n}bnp{ggkamTbG?+i_L#=uS*ldEdzCjNXw_ zuK!5~LQCj%D`djGw}DN|&Fh3EA9{OvOvP}~P>cm_t(Vs7N0}ZwQLKHY#rTGHvx+)n zL;AwbNeg>wf3{_{`Z&|%{yIM^O-^ZfJ&jlFswY1p<-Cb|6WM5+nD?Mk2i>-F_kE>Y z)1>%XpcGL>C2Zc>XZvpMg=di_!|=HCBe0@9StEJxGcWFU+(=>N>Q!|b&y*2i(g%|_ z26}1SdmCCAX`dhDU$O2Q@`FVkNqoc4D%I>ts-w=y0$SGTHMj1CZ~bGNew43LFP+w( znGx6;eZ`1>++Sc~B)fZ~IlO7*B{RbGY~iFe4QR!UdzZ~5^Q#BJaOpvineG&u|rw#maYiHN3oa2O|PV1^Xn-*ss!CrB%h6w;5AW&%9iLl8|@wbo?W!-C` z%rhp5QaLwYya##rY6YKe2vaER&q6Sny1O7Bs zHKk)))$*mPf_^=4HFZY!zPbt!0IV8r=c9A$|y!0Na{xE^BBCJU(?k*bOOoh%E;@GJ;2d+sV=u0$ItBfZ(bFFwD>v z_zi82|E3{3rJN_h9Z(u}zkR9+xU?!Y!5>jpOL<5R1R^)dsbidZJaJxHxi;w6t~7t| zA%*5}ft8(;j^KjWFfUMm2jogE->ikK;vV{8I#*&IX2NSK(yD33HMmsn>9blZM7TY* zo0=rQev=nIXZK=zymi|Rqu;B(4Vxd--|<-19mO@`!e>yc2czIkX}>EgbmQ<^spky` z0+yt1f_FESO{tEVKT8~vn^~A~EohzY;dKXVWknn2SK1YL2fRDylCKfXfm&l-HZrF+>t~3wTh1U0YqRJqz^HIBA@4@MZ~1eG!{Ork zUG4ofRla~F_nweR(gPYA zkWU5emCc66ml=(b3DMR%?TVK&Bnz0X`LvbkS3a zRH!#3bA&xX^CZ-4z+*4qWD5UjW7t*@*<`^CDZ2<96)VK`hn4<7q{XkK2*7bN{fzlp z#pSbW8ZKk+_!;~tliG(_&WyXAoFI&>%dNe++ebR3%y-iFsb6W>mUV!yw%^x~6-m(*=ud6RtSKJz)4wf_`0?)BZ02bHbF;m!6@Pi%%<>e|-0 zuWl{s#wZH5L=Y*`498RFMfcv)n`Y@NemyxAff?tim8w!8({s(SDzCxb}7#-syxeDxCOW z8YQoI=RI`s&Wd+fAtDJ(Ctrz>wk^Ep_^cshZiN_F14!sShT2baEJY=ito0aw?7Dz z=X;M>=7#mcKto*LWyRqX`t5pjqg`odBwN+l{?e+^JvqVjhE)&PyRWSG#nEApw{BHI zCtIB)hD&I5zD1x#wo^bGvL#BX@Z6QM9=q#gx{Y_7L|@ca)at(DIT#Q)r$n>(W4={) zZ^<_~9?=lgZzwN5_7+@YNYZ+HXUBn#5^i47RLSMG_*Ksp4i?fg)~yaMQ~An$ku+EH zC+wJ=8G-yA>L9cJ22Erm^%715?gopeOf zw*0aZnKIot?n!R3@fpWoml~GG3C+P|4w%%aDN6{F2nA;rIY{eD#kv5KUF9ZyXVO!# z(u7y%&I`B%7{7CuL>El=n~Miil1N~j4pBHtA_qvFGm^=HC+>YCov}*L@PbS&dS-{^A<=~1vM6! zM~GK;{*FD<%Y885GV5W}$Z4lTqMWBbGkWq72OZNWJ6^Q}ZG#?X`2Uep1rxWAj7$d-;o2nT{lTwx*(F*U1#c^`R4fRqyMH_R4MFY29nj z5)YQ>ECjd4pv}rAm_nq-60>6 zu9B9K+EW|+(?$+f_!^f-%N=JZYKG^u=8w1x#mtzJ+tt5Jly$`P7I37>smU|C(xuy4=2-q*J$zGzzV%l)qP`%L}g_agzeDdgF;m#>N5 z;-9V$-aCStEv;+}DI?zVO{Of6%5{;Bv0aj(!MVDW7Y1GVl0q*w zad9_^($#uM*;`nZci27U<-3K)orfQTcDc}SL|iDnYB;61+iZB=wuQ-AGLC)-Pwcuh zP2hDSVlX}S0joaO@3=01O@g#}`fQ$f_Vs!AKU%tt^M9#WFmKaKz0{XOB0%-;+X`wg zFyc2_qkeW2&XM7$XC9h?f6w?ElzAZI|B;12U^TLC-oVS5exXuA+0jLMuVyP9*LWJ{L;zp|}BV3R3g zynOMZMpsVz%^5i~?J6jt)j($MlW0wRk)+?CpP1#pD()Jx|MfgTToy5`2fyyb%-ij5 zUGLL+P<`k>q4f+sdE7(Ob;en`UHql}7lzh24n2NCP!9KIEl*Y)FPNo>yadXMq!Pmh z$Zh-e{>Z7i`)dh4ZKsEb!?s=`&TBBm=L#P+ZS6VZBiSo2^$T>)2bY04Lz4o8Ro)@H zvp&RkgDXUOTfy^H&S^^#h^eym_tvwsQ&eXWpnA5+aLy1ebJl(me`sHfq Pzy3Uyt#P~J5}5pd)KV~6 literal 0 HcmV?d00001 diff --git a/.github/assets/wiki-light.png b/.github/assets/wiki-light.png new file mode 100644 index 0000000000000000000000000000000000000000..0b3217779574398bd657711376d83c535a447207 GIT binary patch literal 12802 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 LL#-DVoTC39nJy$3 literal 0 HcmV?d00001 diff --git a/.github/workflows/merge_upstream_master.yml b/.github/workflows/merge_upstream_master.yml index fc03ad8cc53..c5032c411a8 100644 --- a/.github/workflows/merge_upstream_master.yml +++ b/.github/workflows/merge_upstream_master.yml @@ -101,7 +101,7 @@ jobs: # Check if a workflow file would be modified by the merge (permissions prevent pushes if so) latest_workflow_commit=$(git log -n 1 --pretty=format:"%H" upstream/$BASE_BRANCH -- .github/workflows) if ! git branch --contains $latest_workflow_commit | grep -q "$(git rev-parse --abbrev-ref HEAD)"; then - gh pr comment ${{ github.event.issue.html_url }} --body "GitHub Actions can not push to this branch as workflow files have been changed since your branch was last updated. Please update your branch past https://github.com/ParadiseSS13/Paradise/commit/$latest_workflow_commit before using this command again."# + gh pr comment ${{ github.event.issue.html_url }} --body "GitHub Actions can not push to this branch as workflow files have been changed since your branch was last updated. Please update your branch past https://github.com/ParadiseSS13/Paradise/commit/$latest_workflow_commit before using this command again." echo "FAIL_NOTIFIED=true" >> "$GITHUB_ENV" exit 1 fi diff --git a/.github/workflows/render_nanomaps.yml b/.github/workflows/render_nanomaps.yml index 7ba495b3540..c9449cc382d 100644 --- a/.github/workflows/render_nanomaps.yml +++ b/.github/workflows/render_nanomaps.yml @@ -43,4 +43,7 @@ jobs: git pull origin master git commit -m "NanoMap Auto-Update (`date`)" -a || true git push -f -u origin nanomap-render - gh pr create -t "Automatic NanoMap Update" -b "This pull request updates the server NanoMaps. Please review the diff images before merging." -l "NanoMaps" -H "nanomap-render" -B "master" + result=$(gh pr create -t "Automatic NanoMap Update" -b "This pull request updates the server NanoMaps. Please review the diff images before merging." -l "NanoMaps" -H "nanomap-render" -B "master") + if echo "$result" | grep -q "No commits between master and nanomap-render" + echo "No NanoMaps update required, skipping." + exit 78 diff --git a/.tgs.yml b/.tgs.yml index 6970078ff70..43d320cca90 100644 --- a/.tgs.yml +++ b/.tgs.yml @@ -3,7 +3,7 @@ version: 1 # The BYOND version to use # Must be interpreted as a string, keep quoted -byond: "515.1620" +byond: '515.1633' # Folders to create in "/Configuration/GameStaticFiles/" static_files: # Config directory should be static diff --git a/COPYING b/COPYING deleted file mode 100644 index a4192d74542..00000000000 --- a/COPYING +++ /dev/null @@ -1,19 +0,0 @@ -Paradise -Copyright (C) 2010-2016 Paradise, Baystation12, Goonstation and tgstation13. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - - - -Any files located in the Paradise/goon, Paradise/icons/goonstation, or Paradise/sound/goonstation directories, or any subdirectories of mentioned directories are licensed under the Creative Commons 3.0 BY-NC-SA license (https://creativecommons.org/licenses/by-nc-sa/3.0) from Goonstation. diff --git a/LICENSE-AGPL3.txt b/LICENSE-AGPLv3.txt similarity index 100% rename from LICENSE-AGPL3.txt rename to LICENSE-AGPLv3.txt diff --git a/LICENSE-CC-BY-NC-SA-3.0.txt b/LICENSE-CC-BY-NC-SA-3.0.txt new file mode 100644 index 00000000000..46c8191674e --- /dev/null +++ b/LICENSE-CC-BY-NC-SA-3.0.txt @@ -0,0 +1,361 @@ +Creative Commons Legal Code + +Attribution-NonCommercial-ShareAlike 3.0 Unported + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR + DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE +COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY +COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS +AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE +TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY +BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS +CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND +CONDITIONS. + +1. Definitions + + a. "Adaptation" means a work based upon the Work, or upon the Work and + other pre-existing works, such as a translation, adaptation, + derivative work, arrangement of music or other alterations of a + literary or artistic work, or phonogram or performance and includes + cinematographic adaptations or any other form in which the Work may be + recast, transformed, or adapted including in any form recognizably + derived from the original, except that a work that constitutes a + Collection will not be considered an Adaptation for the purpose of + this License. For the avoidance of doubt, where the Work is a musical + work, performance or phonogram, the synchronization of the Work in + timed-relation with a moving image ("synching") will be considered an + Adaptation for the purpose of this License. + b. "Collection" means a collection of literary or artistic works, such as + encyclopedias and anthologies, or performances, phonograms or + broadcasts, or other works or subject matter other than works listed + in Section 1(g) below, which, by reason of the selection and + arrangement of their contents, constitute intellectual creations, in + which the Work is included in its entirety in unmodified form along + with one or more other contributions, each constituting separate and + independent works in themselves, which together are assembled into a + collective whole. A work that constitutes a Collection will not be + considered an Adaptation (as defined above) for the purposes of this + License. + c. "Distribute" means to make available to the public the original and + copies of the Work or Adaptation, as appropriate, through sale or + other transfer of ownership. + d. "License Elements" means the following high-level license attributes + as selected by Licensor and indicated in the title of this License: + Attribution, Noncommercial, ShareAlike. + e. "Licensor" means the individual, individuals, entity or entities that + offer(s) the Work under the terms of this License. + f. "Original Author" means, in the case of a literary or artistic work, + the individual, individuals, entity or entities who created the Work + or if no individual or entity can be identified, the publisher; and in + addition (i) in the case of a performance the actors, singers, + musicians, dancers, and other persons who act, sing, deliver, declaim, + play in, interpret or otherwise perform literary or artistic works or + expressions of folklore; (ii) in the case of a phonogram the producer + being the person or legal entity who first fixes the sounds of a + performance or other sounds; and, (iii) in the case of broadcasts, the + organization that transmits the broadcast. + g. "Work" means the literary and/or artistic work offered under the terms + of this License including without limitation any production in the + literary, scientific and artistic domain, whatever may be the mode or + form of its expression including digital form, such as a book, + pamphlet and other writing; a lecture, address, sermon or other work + of the same nature; a dramatic or dramatico-musical work; a + choreographic work or entertainment in dumb show; a musical + composition with or without words; a cinematographic work to which are + assimilated works expressed by a process analogous to cinematography; + a work of drawing, painting, architecture, sculpture, engraving or + lithography; a photographic work to which are assimilated works + expressed by a process analogous to photography; a work of applied + art; an illustration, map, plan, sketch or three-dimensional work + relative to geography, topography, architecture or science; a + performance; a broadcast; a phonogram; a compilation of data to the + extent it is protected as a copyrightable work; or a work performed by + a variety or circus performer to the extent it is not otherwise + considered a literary or artistic work. + h. "You" means an individual or entity exercising rights under this + License who has not previously violated the terms of this License with + respect to the Work, or who has received express permission from the + Licensor to exercise rights under this License despite a previous + violation. + i. "Publicly Perform" means to perform public recitations of the Work and + to communicate to the public those public recitations, by any means or + process, including by wire or wireless means or public digital + performances; to make available to the public Works in such a way that + members of the public may access these Works from a place and at a + place individually chosen by them; to perform the Work to the public + by any means or process and the communication to the public of the + performances of the Work, including by public digital performance; to + broadcast and rebroadcast the Work by any means including signs, + sounds or images. + j. "Reproduce" means to make copies of the Work by any means including + without limitation by sound or visual recordings and the right of + fixation and reproducing fixations of the Work, including storage of a + protected performance or phonogram in digital form or other electronic + medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, +limit, or restrict any uses free from copyright or rights arising from +limitations or exceptions that are provided for in connection with the +copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, +Licensor hereby grants You a worldwide, royalty-free, non-exclusive, +perpetual (for the duration of the applicable copyright) license to +exercise the rights in the Work as stated below: + + a. to Reproduce the Work, to incorporate the Work into one or more + Collections, and to Reproduce the Work as incorporated in the + Collections; + b. to create and Reproduce Adaptations provided that any such Adaptation, + including any translation in any medium, takes reasonable steps to + clearly label, demarcate or otherwise identify that changes were made + to the original Work. For example, a translation could be marked "The + original work was translated from English to Spanish," or a + modification could indicate "The original work has been modified."; + c. to Distribute and Publicly Perform the Work including as incorporated + in Collections; and, + d. to Distribute and Publicly Perform Adaptations. + +The above rights may be exercised in all media and formats whether now +known or hereafter devised. The above rights include the right to make +such modifications as are technically necessary to exercise the rights in +other media and formats. Subject to Section 8(f), all rights not expressly +granted by Licensor are hereby reserved, including but not limited to the +rights described in Section 4(e). + +4. Restrictions. The license granted in Section 3 above is expressly made +subject to and limited by the following restrictions: + + a. You may Distribute or Publicly Perform the Work only under the terms + of this License. You must include a copy of, or the Uniform Resource + Identifier (URI) for, this License with every copy of the Work You + Distribute or Publicly Perform. You may not offer or impose any terms + on the Work that restrict the terms of this License or the ability of + the recipient of the Work to exercise the rights granted to that + recipient under the terms of the License. You may not sublicense the + Work. You must keep intact all notices that refer to this License and + to the disclaimer of warranties with every copy of the Work You + Distribute or Publicly Perform. When You Distribute or Publicly + Perform the Work, You may not impose any effective technological + measures on the Work that restrict the ability of a recipient of the + Work from You to exercise the rights granted to that recipient under + the terms of the License. This Section 4(a) applies to the Work as + incorporated in a Collection, but this does not require the Collection + apart from the Work itself to be made subject to the terms of this + License. If You create a Collection, upon notice from any Licensor You + must, to the extent practicable, remove from the Collection any credit + as required by Section 4(d), as requested. If You create an + Adaptation, upon notice from any Licensor You must, to the extent + practicable, remove from the Adaptation any credit as required by + Section 4(d), as requested. + b. You may Distribute or Publicly Perform an Adaptation only under: (i) + the terms of this License; (ii) a later version of this License with + the same License Elements as this License; (iii) a Creative Commons + jurisdiction license (either this or a later license version) that + contains the same License Elements as this License (e.g., + Attribution-NonCommercial-ShareAlike 3.0 US) ("Applicable License"). + You must include a copy of, or the URI, for Applicable License with + every copy of each Adaptation You Distribute or Publicly Perform. You + may not offer or impose any terms on the Adaptation that restrict the + terms of the Applicable License or the ability of the recipient of the + Adaptation to exercise the rights granted to that recipient under the + terms of the Applicable License. You must keep intact all notices that + refer to the Applicable License and to the disclaimer of warranties + with every copy of the Work as included in the Adaptation You + Distribute or Publicly Perform. When You Distribute or Publicly + Perform the Adaptation, You may not impose any effective technological + measures on the Adaptation that restrict the ability of a recipient of + the Adaptation from You to exercise the rights granted to that + recipient under the terms of the Applicable License. This Section 4(b) + applies to the Adaptation as incorporated in a Collection, but this + does not require the Collection apart from the Adaptation itself to be + made subject to the terms of the Applicable License. + c. You may not exercise any of the rights granted to You in Section 3 + above in any manner that is primarily intended for or directed toward + commercial advantage or private monetary compensation. The exchange of + the Work for other copyrighted works by means of digital file-sharing + or otherwise shall not be considered to be intended for or directed + toward commercial advantage or private monetary compensation, provided + there is no payment of any monetary compensation in con-nection with + the exchange of copyrighted works. + d. If You Distribute, or Publicly Perform the Work or any Adaptations or + Collections, You must, unless a request has been made pursuant to + Section 4(a), keep intact all copyright notices for the Work and + provide, reasonable to the medium or means You are utilizing: (i) the + name of the Original Author (or pseudonym, if applicable) if supplied, + and/or if the Original Author and/or Licensor designate another party + or parties (e.g., a sponsor institute, publishing entity, journal) for + attribution ("Attribution Parties") in Licensor's copyright notice, + terms of service or by other reasonable means, the name of such party + or parties; (ii) the title of the Work if supplied; (iii) to the + extent reasonably practicable, the URI, if any, that Licensor + specifies to be associated with the Work, unless such URI does not + refer to the copyright notice or licensing information for the Work; + and, (iv) consistent with Section 3(b), in the case of an Adaptation, + a credit identifying the use of the Work in the Adaptation (e.g., + "French translation of the Work by Original Author," or "Screenplay + based on original Work by Original Author"). The credit required by + this Section 4(d) may be implemented in any reasonable manner; + provided, however, that in the case of a Adaptation or Collection, at + a minimum such credit will appear, if a credit for all contributing + authors of the Adaptation or Collection appears, then as part of these + credits and in a manner at least as prominent as the credits for the + other contributing authors. For the avoidance of doubt, You may only + use the credit required by this Section for the purpose of attribution + in the manner set out above and, by exercising Your rights under this + License, You may not implicitly or explicitly assert or imply any + connection with, sponsorship or endorsement by the Original Author, + Licensor and/or Attribution Parties, as appropriate, of You or Your + use of the Work, without the separate, express prior written + permission of the Original Author, Licensor and/or Attribution + Parties. + e. For the avoidance of doubt: + + i. Non-waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme cannot be waived, the Licensor + reserves the exclusive right to collect such royalties for any + exercise by You of the rights granted under this License; + ii. Waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme can be waived, the Licensor reserves + the exclusive right to collect such royalties for any exercise by + You of the rights granted under this License if Your exercise of + such rights is for a purpose or use which is otherwise than + noncommercial as permitted under Section 4(c) and otherwise waives + the right to collect royalties through any statutory or compulsory + licensing scheme; and, + iii. Voluntary License Schemes. The Licensor reserves the right to + collect royalties, whether individually or, in the event that the + Licensor is a member of a collecting society that administers + voluntary licensing schemes, via that society, from any exercise + by You of the rights granted under this License that is for a + purpose or use which is otherwise than noncommercial as permitted + under Section 4(c). + f. Except as otherwise agreed in writing by the Licensor or as may be + otherwise permitted by applicable law, if You Reproduce, Distribute or + Publicly Perform the Work either by itself or as part of any + Adaptations or Collections, You must not distort, mutilate, modify or + take other derogatory action in relation to the Work which would be + prejudicial to the Original Author's honor or reputation. Licensor + agrees that in those jurisdictions (e.g. Japan), in which any exercise + of the right granted in Section 3(b) of this License (the right to + make Adaptations) would be deemed to be a distortion, mutilation, + modification or other derogatory action prejudicial to the Original + Author's honor and reputation, the Licensor will waive or not assert, + as appropriate, this Section, to the fullest extent permitted by the + applicable national law, to enable You to reasonably exercise Your + right under Section 3(b) of this License (right to make Adaptations) + but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING AND TO THE +FULLEST EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR OFFERS THE WORK AS-IS +AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE +WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT +LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, +ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT +DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED +WARRANTIES, SO THIS EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE +LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR +ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES +ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + a. This License and the rights granted hereunder will terminate + automatically upon any breach by You of the terms of this License. + Individuals or entities who have received Adaptations or Collections + from You under this License, however, will not have their licenses + terminated provided such individuals or entities remain in full + compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will + survive any termination of this License. + b. Subject to the above terms and conditions, the license granted here is + perpetual (for the duration of the applicable copyright in the Work). + Notwithstanding the above, Licensor reserves the right to release the + Work under different license terms or to stop distributing the Work at + any time; provided, however that any such election will not serve to + withdraw this License (or any other license that has been, or is + required to be, granted under the terms of this License), and this + License will continue in full force and effect unless terminated as + stated above. + +8. Miscellaneous + + a. Each time You Distribute or Publicly Perform the Work or a Collection, + the Licensor offers to the recipient a license to the Work on the same + terms and conditions as the license granted to You under this License. + b. Each time You Distribute or Publicly Perform an Adaptation, Licensor + offers to the recipient a license to the original Work on the same + terms and conditions as the license granted to You under this License. + c. If any provision of this License is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this License, and without further action + by the parties to this agreement, such provision shall be reformed to + the minimum extent necessary to make such provision valid and + enforceable. + d. No term or provision of this License shall be deemed waived and no + breach consented to unless such waiver or consent shall be in writing + and signed by the party to be charged with such waiver or consent. + e. This License constitutes the entire agreement between the parties with + respect to the Work licensed here. There are no understandings, + agreements or representations with respect to the Work not specified + here. Licensor shall not be bound by any additional provisions that + may appear in any communication from You. This License may not be + modified without the mutual written agreement of the Licensor and You. + f. The rights granted under, and the subject matter referenced, in this + License were drafted utilizing the terminology of the Berne Convention + for the Protection of Literary and Artistic Works (as amended on + September 28, 1979), the Rome Convention of 1961, the WIPO Copyright + Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 + and the Universal Copyright Convention (as revised on July 24, 1971). + These rights and subject matter take effect in the relevant + jurisdiction in which the License terms are sought to be enforced + according to the corresponding provisions of the implementation of + those treaty provisions in the applicable national law. If the + standard suite of rights granted under applicable copyright law + includes additional rights not granted under this License, such + additional rights are deemed to be included in the License; this + License is not intended to restrict the license of any rights under + applicable law. + + +Creative Commons Notice + + Creative Commons is not a party to this License, and makes no warranty + whatsoever in connection with the Work. Creative Commons will not be + liable to You or any party on any legal theory for any damages + whatsoever, including without limitation any general, special, + incidental or consequential damages arising in connection to this + license. Notwithstanding the foregoing two (2) sentences, if Creative + Commons has expressly identified itself as the Licensor hereunder, it + shall have all rights and obligations of Licensor. + + Except for the limited purpose of indicating to the public that the + Work is licensed under the CCPL, Creative Commons does not authorize + the use by either party of the trademark "Creative Commons" or any + related trademark or logo of Creative Commons without the prior + written consent of Creative Commons. Any permitted use will be in + compliance with Creative Commons' then-current trademark usage + guidelines, as may be published on its website or otherwise made + available upon request from time to time. For the avoidance of doubt, + this trademark restriction does not form part of this License. + + Creative Commons may be contacted at https://creativecommons.org/. + diff --git a/LICENSE-CC-BY-NC-SA.txt b/LICENSE-CC-BY-NC-SA.txt deleted file mode 100644 index 860915c5c0e..00000000000 --- a/LICENSE-CC-BY-NC-SA.txt +++ /dev/null @@ -1,60 +0,0 @@ -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. - -1. Definitions - - "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. - "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(g) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. - "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. - "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, Noncommercial, ShareAlike. - "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. - "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. - "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. - "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. - "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. - "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. - -2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. - -3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: - - to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; - to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; - to Distribute and Publicly Perform the Work including as incorporated in Collections; and, - to Distribute and Publicly Perform Adaptations. - -The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights described in Section 4(e). - -4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: - - You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(d), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(d), as requested. - You may Distribute or Publicly Perform an Adaptation only under: (i) the terms of this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-NonCommercial-ShareAlike 3.0 US) ("Applicable License"). You must include a copy of, or the URI, for Applicable License with every copy of each Adaptation You Distribute or Publicly Perform. You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License. You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License. - You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in con-nection with the exchange of copyrighted works. - If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(d) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. - - For the avoidance of doubt: - Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; - Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, - Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c). - Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. - -5. Representations, Warranties and Disclaimer - -UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING AND TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THIS EXCLUSION MAY NOT APPLY TO YOU. - -6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. Termination - - This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. - Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. - -8. Miscellaneous - - Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. - Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. - If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. - No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. - This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. - The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. diff --git a/LICENSE-CC-BY-SA-3.0.txt b/LICENSE-CC-BY-SA-3.0.txt new file mode 100644 index 00000000000..604209a8046 --- /dev/null +++ b/LICENSE-CC-BY-SA-3.0.txt @@ -0,0 +1,359 @@ +Creative Commons Legal Code + +Attribution-ShareAlike 3.0 Unported + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR + DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE +COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY +COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS +AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE +TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY +BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS +CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND +CONDITIONS. + +1. Definitions + + a. "Adaptation" means a work based upon the Work, or upon the Work and + other pre-existing works, such as a translation, adaptation, + derivative work, arrangement of music or other alterations of a + literary or artistic work, or phonogram or performance and includes + cinematographic adaptations or any other form in which the Work may be + recast, transformed, or adapted including in any form recognizably + derived from the original, except that a work that constitutes a + Collection will not be considered an Adaptation for the purpose of + this License. For the avoidance of doubt, where the Work is a musical + work, performance or phonogram, the synchronization of the Work in + timed-relation with a moving image ("synching") will be considered an + Adaptation for the purpose of this License. + b. "Collection" means a collection of literary or artistic works, such as + encyclopedias and anthologies, or performances, phonograms or + broadcasts, or other works or subject matter other than works listed + in Section 1(f) below, which, by reason of the selection and + arrangement of their contents, constitute intellectual creations, in + which the Work is included in its entirety in unmodified form along + with one or more other contributions, each constituting separate and + independent works in themselves, which together are assembled into a + collective whole. A work that constitutes a Collection will not be + considered an Adaptation (as defined below) for the purposes of this + License. + c. "Creative Commons Compatible License" means a license that is listed + at https://creativecommons.org/compatiblelicenses that has been + approved by Creative Commons as being essentially equivalent to this + License, including, at a minimum, because that license: (i) contains + terms that have the same purpose, meaning and effect as the License + Elements of this License; and, (ii) explicitly permits the relicensing + of adaptations of works made available under that license under this + License or a Creative Commons jurisdiction license with the same + License Elements as this License. + d. "Distribute" means to make available to the public the original and + copies of the Work or Adaptation, as appropriate, through sale or + other transfer of ownership. + e. "License Elements" means the following high-level license attributes + as selected by Licensor and indicated in the title of this License: + Attribution, ShareAlike. + f. "Licensor" means the individual, individuals, entity or entities that + offer(s) the Work under the terms of this License. + g. "Original Author" means, in the case of a literary or artistic work, + the individual, individuals, entity or entities who created the Work + or if no individual or entity can be identified, the publisher; and in + addition (i) in the case of a performance the actors, singers, + musicians, dancers, and other persons who act, sing, deliver, declaim, + play in, interpret or otherwise perform literary or artistic works or + expressions of folklore; (ii) in the case of a phonogram the producer + being the person or legal entity who first fixes the sounds of a + performance or other sounds; and, (iii) in the case of broadcasts, the + organization that transmits the broadcast. + h. "Work" means the literary and/or artistic work offered under the terms + of this License including without limitation any production in the + literary, scientific and artistic domain, whatever may be the mode or + form of its expression including digital form, such as a book, + pamphlet and other writing; a lecture, address, sermon or other work + of the same nature; a dramatic or dramatico-musical work; a + choreographic work or entertainment in dumb show; a musical + composition with or without words; a cinematographic work to which are + assimilated works expressed by a process analogous to cinematography; + a work of drawing, painting, architecture, sculpture, engraving or + lithography; a photographic work to which are assimilated works + expressed by a process analogous to photography; a work of applied + art; an illustration, map, plan, sketch or three-dimensional work + relative to geography, topography, architecture or science; a + performance; a broadcast; a phonogram; a compilation of data to the + extent it is protected as a copyrightable work; or a work performed by + a variety or circus performer to the extent it is not otherwise + considered a literary or artistic work. + i. "You" means an individual or entity exercising rights under this + License who has not previously violated the terms of this License with + respect to the Work, or who has received express permission from the + Licensor to exercise rights under this License despite a previous + violation. + j. "Publicly Perform" means to perform public recitations of the Work and + to communicate to the public those public recitations, by any means or + process, including by wire or wireless means or public digital + performances; to make available to the public Works in such a way that + members of the public may access these Works from a place and at a + place individually chosen by them; to perform the Work to the public + by any means or process and the communication to the public of the + performances of the Work, including by public digital performance; to + broadcast and rebroadcast the Work by any means including signs, + sounds or images. + k. "Reproduce" means to make copies of the Work by any means including + without limitation by sound or visual recordings and the right of + fixation and reproducing fixations of the Work, including storage of a + protected performance or phonogram in digital form or other electronic + medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, +limit, or restrict any uses free from copyright or rights arising from +limitations or exceptions that are provided for in connection with the +copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, +Licensor hereby grants You a worldwide, royalty-free, non-exclusive, +perpetual (for the duration of the applicable copyright) license to +exercise the rights in the Work as stated below: + + a. to Reproduce the Work, to incorporate the Work into one or more + Collections, and to Reproduce the Work as incorporated in the + Collections; + b. to create and Reproduce Adaptations provided that any such Adaptation, + including any translation in any medium, takes reasonable steps to + clearly label, demarcate or otherwise identify that changes were made + to the original Work. For example, a translation could be marked "The + original work was translated from English to Spanish," or a + modification could indicate "The original work has been modified."; + c. to Distribute and Publicly Perform the Work including as incorporated + in Collections; and, + d. to Distribute and Publicly Perform Adaptations. + e. For the avoidance of doubt: + + i. Non-waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme cannot be waived, the Licensor + reserves the exclusive right to collect such royalties for any + exercise by You of the rights granted under this License; + ii. Waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme can be waived, the Licensor waives the + exclusive right to collect such royalties for any exercise by You + of the rights granted under this License; and, + iii. Voluntary License Schemes. The Licensor waives the right to + collect royalties, whether individually or, in the event that the + Licensor is a member of a collecting society that administers + voluntary licensing schemes, via that society, from any exercise + by You of the rights granted under this License. + +The above rights may be exercised in all media and formats whether now +known or hereafter devised. The above rights include the right to make +such modifications as are technically necessary to exercise the rights in +other media and formats. Subject to Section 8(f), all rights not expressly +granted by Licensor are hereby reserved. + +4. Restrictions. The license granted in Section 3 above is expressly made +subject to and limited by the following restrictions: + + a. You may Distribute or Publicly Perform the Work only under the terms + of this License. You must include a copy of, or the Uniform Resource + Identifier (URI) for, this License with every copy of the Work You + Distribute or Publicly Perform. You may not offer or impose any terms + on the Work that restrict the terms of this License or the ability of + the recipient of the Work to exercise the rights granted to that + recipient under the terms of the License. You may not sublicense the + Work. You must keep intact all notices that refer to this License and + to the disclaimer of warranties with every copy of the Work You + Distribute or Publicly Perform. When You Distribute or Publicly + Perform the Work, You may not impose any effective technological + measures on the Work that restrict the ability of a recipient of the + Work from You to exercise the rights granted to that recipient under + the terms of the License. This Section 4(a) applies to the Work as + incorporated in a Collection, but this does not require the Collection + apart from the Work itself to be made subject to the terms of this + License. If You create a Collection, upon notice from any Licensor You + must, to the extent practicable, remove from the Collection any credit + as required by Section 4(c), as requested. If You create an + Adaptation, upon notice from any Licensor You must, to the extent + practicable, remove from the Adaptation any credit as required by + Section 4(c), as requested. + b. You may Distribute or Publicly Perform an Adaptation only under the + terms of: (i) this License; (ii) a later version of this License with + the same License Elements as this License; (iii) a Creative Commons + jurisdiction license (either this or a later license version) that + contains the same License Elements as this License (e.g., + Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible + License. If you license the Adaptation under one of the licenses + mentioned in (iv), you must comply with the terms of that license. If + you license the Adaptation under the terms of any of the licenses + mentioned in (i), (ii) or (iii) (the "Applicable License"), you must + comply with the terms of the Applicable License generally and the + following provisions: (I) You must include a copy of, or the URI for, + the Applicable License with every copy of each Adaptation You + Distribute or Publicly Perform; (II) You may not offer or impose any + terms on the Adaptation that restrict the terms of the Applicable + License or the ability of the recipient of the Adaptation to exercise + the rights granted to that recipient under the terms of the Applicable + License; (III) You must keep intact all notices that refer to the + Applicable License and to the disclaimer of warranties with every copy + of the Work as included in the Adaptation You Distribute or Publicly + Perform; (IV) when You Distribute or Publicly Perform the Adaptation, + You may not impose any effective technological measures on the + Adaptation that restrict the ability of a recipient of the Adaptation + from You to exercise the rights granted to that recipient under the + terms of the Applicable License. This Section 4(b) applies to the + Adaptation as incorporated in a Collection, but this does not require + the Collection apart from the Adaptation itself to be made subject to + the terms of the Applicable License. + c. If You Distribute, or Publicly Perform the Work or any Adaptations or + Collections, You must, unless a request has been made pursuant to + Section 4(a), keep intact all copyright notices for the Work and + provide, reasonable to the medium or means You are utilizing: (i) the + name of the Original Author (or pseudonym, if applicable) if supplied, + and/or if the Original Author and/or Licensor designate another party + or parties (e.g., a sponsor institute, publishing entity, journal) for + attribution ("Attribution Parties") in Licensor's copyright notice, + terms of service or by other reasonable means, the name of such party + or parties; (ii) the title of the Work if supplied; (iii) to the + extent reasonably practicable, the URI, if any, that Licensor + specifies to be associated with the Work, unless such URI does not + refer to the copyright notice or licensing information for the Work; + and (iv) , consistent with Ssection 3(b), in the case of an + Adaptation, a credit identifying the use of the Work in the Adaptation + (e.g., "French translation of the Work by Original Author," or + "Screenplay based on original Work by Original Author"). The credit + required by this Section 4(c) may be implemented in any reasonable + manner; provided, however, that in the case of a Adaptation or + Collection, at a minimum such credit will appear, if a credit for all + contributing authors of the Adaptation or Collection appears, then as + part of these credits and in a manner at least as prominent as the + credits for the other contributing authors. For the avoidance of + doubt, You may only use the credit required by this Section for the + purpose of attribution in the manner set out above and, by exercising + Your rights under this License, You may not implicitly or explicitly + assert or imply any connection with, sponsorship or endorsement by the + Original Author, Licensor and/or Attribution Parties, as appropriate, + of You or Your use of the Work, without the separate, express prior + written permission of the Original Author, Licensor and/or Attribution + Parties. + d. Except as otherwise agreed in writing by the Licensor or as may be + otherwise permitted by applicable law, if You Reproduce, Distribute or + Publicly Perform the Work either by itself or as part of any + Adaptations or Collections, You must not distort, mutilate, modify or + take other derogatory action in relation to the Work which would be + prejudicial to the Original Author's honor or reputation. Licensor + agrees that in those jurisdictions (e.g. Japan), in which any exercise + of the right granted in Section 3(b) of this License (the right to + make Adaptations) would be deemed to be a distortion, mutilation, + modification or other derogatory action prejudicial to the Original + Author's honor and reputation, the Licensor will waive or not assert, + as appropriate, this Section, to the fullest extent permitted by the + applicable national law, to enable You to reasonably exercise Your + right under Section 3(b) of this License (right to make Adaptations) + but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR +OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY +KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, +INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, +FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF +LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, +WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION +OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE +LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR +ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES +ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + a. This License and the rights granted hereunder will terminate + automatically upon any breach by You of the terms of this License. + Individuals or entities who have received Adaptations or Collections + from You under this License, however, will not have their licenses + terminated provided such individuals or entities remain in full + compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will + survive any termination of this License. + b. Subject to the above terms and conditions, the license granted here is + perpetual (for the duration of the applicable copyright in the Work). + Notwithstanding the above, Licensor reserves the right to release the + Work under different license terms or to stop distributing the Work at + any time; provided, however that any such election will not serve to + withdraw this License (or any other license that has been, or is + required to be, granted under the terms of this License), and this + License will continue in full force and effect unless terminated as + stated above. + +8. Miscellaneous + + a. Each time You Distribute or Publicly Perform the Work or a Collection, + the Licensor offers to the recipient a license to the Work on the same + terms and conditions as the license granted to You under this License. + b. Each time You Distribute or Publicly Perform an Adaptation, Licensor + offers to the recipient a license to the original Work on the same + terms and conditions as the license granted to You under this License. + c. If any provision of this License is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this License, and without further action + by the parties to this agreement, such provision shall be reformed to + the minimum extent necessary to make such provision valid and + enforceable. + d. No term or provision of this License shall be deemed waived and no + breach consented to unless such waiver or consent shall be in writing + and signed by the party to be charged with such waiver or consent. + e. This License constitutes the entire agreement between the parties with + respect to the Work licensed here. There are no understandings, + agreements or representations with respect to the Work not specified + here. Licensor shall not be bound by any additional provisions that + may appear in any communication from You. This License may not be + modified without the mutual written agreement of the Licensor and You. + f. The rights granted under, and the subject matter referenced, in this + License were drafted utilizing the terminology of the Berne Convention + for the Protection of Literary and Artistic Works (as amended on + September 28, 1979), the Rome Convention of 1961, the WIPO Copyright + Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 + and the Universal Copyright Convention (as revised on July 24, 1971). + These rights and subject matter take effect in the relevant + jurisdiction in which the License terms are sought to be enforced + according to the corresponding provisions of the implementation of + those treaty provisions in the applicable national law. If the + standard suite of rights granted under applicable copyright law + includes additional rights not granted under this License, such + additional rights are deemed to be included in the License; this + License is not intended to restrict the license of any rights under + applicable law. + + +Creative Commons Notice + + Creative Commons is not a party to this License, and makes no warranty + whatsoever in connection with the Work. Creative Commons will not be + liable to You or any party on any legal theory for any damages + whatsoever, including without limitation any general, special, + incidental or consequential damages arising in connection to this + license. Notwithstanding the foregoing two (2) sentences, if Creative + Commons has expressly identified itself as the Licensor hereunder, it + shall have all rights and obligations of Licensor. + + Except for the limited purpose of indicating to the public that the + Work is licensed under the CCPL, Creative Commons does not authorize + the use by either party of the trademark "Creative Commons" or any + related trademark or logo of Creative Commons without the prior + written consent of Creative Commons. Any permitted use will be in + compliance with Creative Commons' then-current trademark usage + guidelines, as may be published on its website or otherwise made + available upon request from time to time. For the avoidance of doubt, + this trademark restriction does not form part of the License. + + Creative Commons may be contacted at https://creativecommons.org/. diff --git a/LICENSE-GPL3.txt b/LICENSE-GPLv3.txt similarity index 99% rename from LICENSE-GPL3.txt rename to LICENSE-GPLv3.txt index e4ca08d4b0d..94a9ed024d3 100644 --- a/LICENSE-GPL3.txt +++ b/LICENSE-GPLv3.txt @@ -1,7 +1,3 @@ -Note: New submissions as of 5th January 2015 now fall under AGPL v3, prior code is -still licensed GPL v3, see README.md for details. - - GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 diff --git a/README.md b/README.md index 196fb7376a2..4976414fc67 100644 --- a/README.md +++ b/README.md @@ -1,51 +1,146 @@ -# Paradise -[![CI](https://github.com/ParadiseSS13/Paradise/workflows/CI/badge.svg)](https://github.com/ParadiseSS13/Paradise/actions?query=workflow%3ACI) -[![Render Nanomaps](https://github.com/ParadiseSS13/Paradise/workflows/Render%20Nanomaps/badge.svg)](https://github.com/ParadiseSS13/Paradise/actions?query=workflow%3A%22Render+Nanomaps%22) -[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/paradisess13/paradise.svg)](http://isitmaintained.com/project/paradisess13/paradise "Average time to resolve an issue") -[![Percentage of issues still open](http://isitmaintained.com/badge/open/paradisess13/paradise.svg)](http://isitmaintained.com/project/paradisess13/paradise "Percentage of issues still open") +Paradise Station -[![forthebadge](http://forthebadge.com/images/badges/60-percent-of-the-time-works-every-time.svg)](http://forthebadge.com) -[![forthebadge](http://forthebadge.com/images/badges/contains-technical-debt.svg)](http://forthebadge.com) -[![forthebadge](http://forthebadge.com/images/badges/fuck-it-ship-it.svg)](http://forthebadge.com) +##

Welcome to the main repository for the Paradise Station version of [Space Station 13](https://spacestation13.com/).

-# Useful Links +

+ CI + Render Nanomaps + Average time to resolve an issue + Percentage of issues still open +

-- [Discord](https://discordapp.com/invite/YJDsXFE) -- [Documentation](https://codedocs.paradisestation.org) -- [Website](https://www.paradisestation.org/) -# Useful Documents +

+ Compiles sometimes + Made in BYOND + Made with crayons +

-- [Autodocumentation Guide](.github/AUTODOC_GUIDE.md) -- [Code of Conduct](./CODE_OF_CONDUCT.md) -- [Contribution Guide](.github/CONTRIBUTING.md) -- [Installation Guide](.github/DOWNLOADING.md) + + + +

+ + + + + Discord + + + + + + + Code docs + + + + + + + Website + + + + + + + Game Wiki + + +

+ + + + +> [!TIP] +> Want to contribute for the first time but unsure where to start?
+> Join our Discord and check out the [#coding_chat](https://discord.com/channels/145533722026967040/145700319819464704) channel for helpful links and advice!
+> Alternatively, have a look at our community maintained [Guide to Contributing](https://paradisestation.org/wiki/index.php?title=Guide_to_Contributing) + +# Useful Documents and Links + +- ### [Dream Maker (DM) Reference](https://www.byond.com/docs/ref/) + +This reference site by the creators of BYOND details information on the DM language, the syntax used, functionality of native procs, and a lot more. This is always useful to have on hand when contributing. + +- ### [Autodocumentation Guide](.github/AUTODOC_GUIDE.md) + +This guide shows you how to leave code comments that comply with "autodocumentation", a system designed to make everyone's lives easier when reading or reviewing code! + +- ### [Code of Conduct](./CODE_OF_CONDUCT.md) + +All contributors are expected to read our Code of Conduct before they take part in our community. + +- ### [Contribution Guide](.github/CONTRIBUTING.md) + +Not sure how to take part and contribute? This guide gives an overview of how to make comments, pull requests, and open issues. + +This guide also sets out our code standards that we expect all submitted code to adhere to. + +- ### [Community Maintained Guide to Contributing](https://paradisestation.org/wiki/index.php?title=Guide_to_Contributing) + +This community maintained guide covers how to set yourself up for success when attempting to contribute to Paracode. + +> [!IMPORTANT] +> Paradise does not provide precompiled binaries, requiring you to build from source to host a local server.
+> Building Paradise is quick and simple, all you need to install is [BYOND](https://www.byond.com/download/).
+> You can learn more in our [Installation Guide](.github/DOWNLOADING.md). + +- ### [Paradise Station Development Team Structure](https://www.paradisestation.org/dev/policy/) + +A detailed policy document that governs how the Paradise Station Development Team functions, from the various roles that help keep things running to the process each PR goes through depending on the content. + +- ### [TGUI Tutorial](tgui/docs/tutorial-and-examples.md) + +TGUI is a user interface framework, built on InfernoJS, for all new player-facing UIs. + +TGUI is very different to most other BYOND user interfaces as it is written entirely in JavaScript with some data passed to and from DreamMaker. If you are looking to get to grips with TGUI, this tutorial is a good starting point. Additional information can also be found [here.](tgui) + +- ### [Mapping Guide](https://hackmd.io/@tgstation/SyVma0dS5#san7890s-A-Z-Guide-to-Mapping) + +Mapping for Paradise station can be daunting to new contributors. Here's a comprehensive quick-start put together by a community member that takes you from A-Z. --- -### LICENSE +# LICENSES -Paradise is licensed under the GNU Affero General Public License version 3. -As of 5th January 2015 any new contributions are licensed under the AGPL as well, -if you wish to submit code under the GPL v3 then commits and files must be marked as such -in comments. If you wish to use our code in a closed source manner you may use anything -before commit 445615b8439bf606ff204a42c8e7b6b69d983255, -which is licensed under GPL v3. -The major change here is that if you host a server using any code licensed under AGPL you -are required to provide full source code for your servers users as well, -including addons and modifications you have made. +> [!CAUTION] +> If you wish to use our code in a closed source manner (i.e. not make it available to the public and/or those who connect to services you offer using this code) you must **only** use code prior to commit [1af3ddef2af85937251e24384c2173c4b6c3222b on 2015/01/05 22:04 GMT](https://github.com/ParadiseSS13/Paradise/commit/1af3ddef2af85937251e24384c2173c4b6c3222b), which is licenced under GPLv3. -See [this](https://www.gnu.org/licenses/why-affero-gpl.html) for more information. +### Click each banner for further information -Any files located in the -`Paradise/goon`, -`Paradise/icons/goonstation`, or -`Paradise/sound/goonstation` -directories, or any subdirectories of mentioned directories are licensed under the -Creative Commons 3.0 BY-NC-SA license -(https://creativecommons.org/licenses/by-nc-sa/3.0) +--- -All other assets including icons and sound files are licensed under the -Creative Commons 3.0 BY-SA license (https://creativecommons.org/licenses/by-sa/3.0/), -unless otherwise indicated. +
+AGPLv3 license + +>All code after and including commit [1af3ddef2af85937251e24384c2173c4b6c3222b on 2015/01/05 22:04 GMT](https://github.com/ParadiseSS13/Paradise/commit/1af3ddef2af85937251e24384c2173c4b6c3222b) is licensed under the [GNU Affero General Public License version 3](https://www.gnu.org/licenses/agpl-3.0.en.html) unless otherwise specified within the folder or file. +
+ +
+GPLv3 license + +>All code prior to commit [1af3ddef2af85937251e24384c2173c4b6c3222b on 2015/01/05 22:04 GMT](https://github.com/ParadiseSS13/Paradise/commit/1af3ddef2af85937251e24384c2173c4b6c3222b) is licensed under the [GPL General Public License version 3](https://www.gnu.org/licenses/gpl-3.0.en.html) +
+ +
+MIT license + +>Some files are licenced under the [MIT license](https://opensource.org/license/MIT), these files will clearly specify this licence at the head of each file. +
+ +
+Creative Commons 3.0 BY-NC-SA + +>Any files with the ancestor directories [`Paradise/icons/goonstation`](icons/goonstation) or [`Paradise/sound/goonstation`](sound/goonstation) are licensed under the [Creative Commons 3.0 BY-NC-SA license](https://creativecommons.org/licenses/by-nc-sa/3.0). +> +>Further files or folders may also fall under this licence, and any such instances will be specified within the folder or file. +
+ +
+Creative Commons 3.0 BY-SA + +>All other non-code assets, including icons and sound files, are licensed under the [Creative Commons 3.0 BY-SA license](https://creativecommons.org/licenses/by-sa/3.0/), unless otherwise specified within the folder or file. +
diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index 60c0dc25dc0..c472e55eb21 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -27,6 +27,7 @@ CREATE TABLE `characters` ( `real_name` varchar(55) COLLATE utf8mb4_unicode_ci NOT NULL, `name_is_always_random` tinyint(1) NOT NULL, `gender` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL, + `body_type` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL, `age` smallint(4) NOT NULL, `species` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL, `language` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL, diff --git a/SQL/updates/53-54.sql b/SQL/updates/53-54.sql index 303de0b32be..c2fb1988a29 100644 --- a/SQL/updates/53-54.sql +++ b/SQL/updates/53-54.sql @@ -2,4 +2,4 @@ #Add a choice for what type of brain borgs want to have ALTER TABLE `characters` - ADD COLUMN `cyborg_brain_type` VARCHAR(11) NOT NULL DEFAULT 'MMI' AFTER `height`; + ADD COLUMN `cyborg_brain_type` ENUM('MMI', 'Robobrain', 'Positronic') NOT NULL DEFAULT 'MMI' AFTER `height`; diff --git a/SQL/updates/54-55.sql b/SQL/updates/54-55.sql new file mode 100644 index 00000000000..8b388b65f0c --- /dev/null +++ b/SQL/updates/54-55.sql @@ -0,0 +1,9 @@ +# Updating DB from 54-55 - lewc +# Adds a new `body_type` (gender sprite) column to the `characters` table + +# Add the new column next to the existing `gender` one +ALTER TABLE `characters` + ADD COLUMN `body_type` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL AFTER `gender`; + +# Set the `body_type` column to whatever's already in `gender`, so that it doesn't change existing characters +UPDATE `characters` SET `body_type` = `gender` WHERE `gender` IS NOT NULL diff --git a/_maps/map_files/RandomRuins/SpaceRuins/intactemptyship.dmm b/_maps/map_files/RandomRuins/SpaceRuins/intactemptyship.dmm index a00c71b1e94..82378d884f4 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/intactemptyship.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/intactemptyship.dmm @@ -126,6 +126,11 @@ /obj/structure/bed, /turf/simulated/floor/mineral/titanium/purple, /area/ruin/space/powered) +"Z" = ( +/obj/structure/table/wood, +/obj/item/blank_tarot_card, +/turf/simulated/floor/mineral/titanium/purple, +/area/ruin/space/powered) (1,1,1) = {" a @@ -277,7 +282,7 @@ b j r w -n +Z j b a diff --git a/_maps/map_files/RandomRuins/SpaceRuins/listeningpost.dmm b/_maps/map_files/RandomRuins/SpaceRuins/listeningpost.dmm index cd0277ea77c..ce511619893 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/listeningpost.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/listeningpost.dmm @@ -551,7 +551,6 @@ info = "Nothing of interest to report."; name = "november report" }, -/obj/item/pen, /obj/item/tape, /obj/item/radio/intercom{ freerange = 1; @@ -559,7 +558,7 @@ name = "intercom" }, /obj/item/paper_bin, -/obj/item/pen, +/obj/item/pen/multi/syndicate, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel/dark, /area/ruin/space/syndicate_listening_station) diff --git a/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm b/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm index 52cb532a602..b38b995bef2 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm @@ -523,7 +523,7 @@ /obj/item/paper_bin{ pixel_x = -6 }, -/obj/item/pen, +/obj/item/pen/multi/syndicate, /turf/simulated/floor/mineral/plastitanium, /area/ruin/space/mech_transport) "MA" = ( diff --git a/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm b/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm index 7fcf54e36ba..349e4181c28 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm @@ -5200,6 +5200,7 @@ }, /obj/item/coin/antagtoken/syndicate, /obj/structure/table, +/obj/item/pen/multi/syndicate, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) "rk" = ( diff --git a/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm b/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm index 9cca10a3239..da0e0f1d570 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm @@ -259,7 +259,6 @@ /area/ruin/space/onehalf/hallway) "aM" = ( /obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment, /obj/machinery/door/poddoor{ id_tag = "bayint1"; name = "mining drone bay blast door" @@ -636,9 +635,6 @@ /area/ruin/space/onehalf/hallway) "bA" = ( /obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -653,15 +649,6 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/onehalf/drone_bay) -"bC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/space/onehalf/drone_bay) "bD" = ( /obj/structure/disposalpipe/junction{ dir = 8 @@ -1643,7 +1630,7 @@ aD aq aX bm -bC +bn bT aa cn diff --git a/_maps/map_files/RandomRuins/SpaceRuins/syndicatedruglab.dmm b/_maps/map_files/RandomRuins/SpaceRuins/syndicatedruglab.dmm index 83a335cc9b1..643d69228c3 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/syndicatedruglab.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/syndicatedruglab.dmm @@ -98,11 +98,11 @@ pixel_x = 4 }, /obj/item/paper/syndicate_druglab, -/obj/item/pen, /obj/item/flashlight/lamp/green/off{ pixel_y = 12; pixel_x = -6 }, +/obj/item/pen/multi/syndicate, /turf/simulated/floor/carpet/black, /area/ruin/space/syndicate_druglab) "qa" = ( diff --git a/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm b/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm index 9c2fcf54cdc..51db92f2ef4 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm @@ -2985,7 +2985,7 @@ dir = 8 }, /obj/item/hand_labeler, -/obj/item/pen, +/obj/item/pen/multi/syndicate, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "darkgreen" @@ -3423,7 +3423,7 @@ "th" = ( /obj/structure/table, /obj/item/paper_bin, -/obj/item/pen, +/obj/item/pen/multi/syndicate, /obj/structure/extinguisher_cabinet{ name = "north bump"; pixel_y = 30 @@ -3760,7 +3760,7 @@ /area/ruin/unpowered/syndicate_space_base/service) "vd" = ( /obj/structure/table, -/obj/item/pen, +/obj/item/pen/multi/syndicate, /obj/item/paper_bin, /obj/item/stamp/syndicate, /obj/machinery/light_switch{ @@ -8462,7 +8462,7 @@ dir = 8 }, /obj/item/hand_labeler, -/obj/item/pen, +/obj/item/pen/multi/syndicate, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "darkgreen" diff --git a/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm b/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm index eebd64133f9..c8c725c60a6 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm @@ -498,6 +498,7 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/item/pen/multi/syndicate, /turf/simulated/floor/engine, /area/ruin/space/unpowered) "tX" = ( diff --git a/_maps/map_files/RandomRuins/SpaceRuins/syndiedepot.dmm b/_maps/map_files/RandomRuins/SpaceRuins/syndiedepot.dmm index fc3e95325ab..5164e88c329 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/syndiedepot.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/syndiedepot.dmm @@ -665,7 +665,7 @@ "bV" = ( /obj/structure/table, /obj/item/folder/syndicate/yellow, -/obj/item/pen, +/obj/item/pen/multi/syndicate, /turf/simulated/floor/plasteel{ icon_state = "dark" }, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm b/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm index f6febf65964..5fd81140ae0 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm @@ -3133,10 +3133,6 @@ icon_state = "stage_stairs" }, /area/ruin/space/derelict/crew_quarters) -"hF" = ( -/obj/structure/sign/barsign, -/turf/simulated/wall/mineral/titanium/nodecon, -/area/ruin/space/derelict/crew_quarters) "hH" = ( /obj/machinery/door/airlock/public/glass{ name = "Eastern Annex" @@ -7572,6 +7568,13 @@ }, /turf/simulated/wall/mineral/titanium/nodecon/nodiagonal, /area/ruin/space/derelict/crew_quarters) +"Qq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/barsign{ + pixel_y = 32 + }, +/turf/simulated/floor/plasteel/dark, +/area/ruin/space/derelict/crew_quarters) "QN" = ( /turf/simulated/wall/mineral/titanium/nodecon/nosmooth, /area/ruin/space/derelict/arrival) @@ -13520,8 +13523,8 @@ gn gG gG gG -hF -hT +aV +Qq in iK je diff --git a/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm index d1f0175e1f4..8434558c253 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm @@ -167,6 +167,7 @@ /area/ruin/space/unpowered) "aF" = ( /obj/structure/table/wood, +/obj/item/blank_tarot_card, /turf/simulated/floor/wood{ icon_state = "wood-broken6" }, diff --git a/_maps/map_files/generic/centcomm.dmm b/_maps/map_files/generic/centcomm.dmm index 816b7af9022..0d929eee69c 100644 --- a/_maps/map_files/generic/centcomm.dmm +++ b/_maps/map_files/generic/centcomm.dmm @@ -234,6 +234,10 @@ icon_state = "red" }, /area/holodeck/source_emptycourt) +"aS" = ( +/obj/effect/landmark/spawner/tradergearmajor, +/turf/simulated/floor/mineral/titanium, +/area/shuttle/trade/sol) "aT" = ( /obj/structure/sign/poster/official/random, /turf/simulated/wall/indestructible/riveted, @@ -2878,12 +2882,12 @@ "kf" = ( /obj/docking_port/stationary{ area_type = /area/syndicate_mothership; - dwidth = 15; + dwidth = 16; height = 21; id = "emergency_syndicate"; name = "404 Not Found"; turf_type = /turf/simulated/floor/plating/asteroid/snow/airless; - width = 33 + width = 41 }, /turf/simulated/floor/plating/asteroid/snow/airless, /area/syndicate_mothership) @@ -3174,6 +3178,15 @@ }, /turf/simulated/floor/plasteel/dark, /area/syndicate_mothership) +"lc" = ( +/obj/machinery/barsign{ + pixel_y = 32 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "green" + }, +/area/centcom/evac) "le" = ( /obj/effect/landmark/spawner/syndieprisonwarp, /turf/simulated/floor/plasteel/dark, @@ -4489,11 +4502,11 @@ "pf" = ( /obj/docking_port/stationary/transit{ dir = 4; - dwidth = 15; + dwidth = 16; height = 21; id = "emergency_transit"; name = "emergency in transit"; - width = 33 + width = 41 }, /turf/space/transit, /area/space/centcomm) @@ -5371,10 +5384,6 @@ /obj/effect/landmark/spawner/syndie, /turf/simulated/floor/wood, /area/syndicate_mothership) -"sd" = ( -/obj/structure/sign/barsign, -/turf/simulated/wall/indestructible/riveted, -/area/ghost_bar) "se" = ( /obj/structure/chair/comfy/shuttle{ dir = 4 @@ -5804,6 +5813,12 @@ }, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/syndicate) +"tP" = ( +/obj/machinery/barsign/ghost_bar{ + pixel_y = 32 + }, +/turf/simulated/floor/wood, +/area/ghost_bar) "tQ" = ( /obj/machinery/mech_bay_recharge_port/upgraded/unsimulated{ dir = 8; @@ -6181,7 +6196,7 @@ /turf/simulated/floor/carpet/green, /area/ghost_bar) "vf" = ( -/obj/effect/landmark/spawner/soltrader, +/obj/effect/landmark/spawner/trader, /obj/structure/chair/comfy/brown, /turf/simulated/floor/wood, /area/trader_station/sol) @@ -6281,7 +6296,7 @@ /area/centcom/control) "vu" = ( /obj/structure/railing, -/obj/effect/landmark/spawner/soltrader, +/obj/effect/landmark/spawner/trader, /obj/structure/chair/comfy/brown{ dir = 4 }, @@ -6331,7 +6346,7 @@ /area/trader_station/sol) "vD" = ( /obj/structure/railing, -/obj/effect/landmark/spawner/soltrader, +/obj/effect/landmark/spawner/trader, /obj/structure/chair/comfy/brown{ dir = 8 }, @@ -7981,7 +7996,7 @@ /turf/simulated/wall/indestructible/syndicate, /area/admin) "Cv" = ( -/obj/structure/sign/barsign{ +/obj/machinery/barsign{ pixel_y = -32 }, /obj/machinery/icemachine, @@ -9234,7 +9249,7 @@ /area/centcom/specops) "GT" = ( /obj/structure/chair, -/obj/structure/sign/barsign{ +/obj/machinery/barsign{ pixel_y = 32 }, /obj/effect/landmark/spawner/tdomeobserve, @@ -11981,6 +11996,10 @@ /obj/item/lighter, /turf/simulated/floor/plasteel/dark, /area/centcom/specops) +"PT" = ( +/obj/effect/landmark/spawner/tradergearminor, +/turf/simulated/floor/mineral/titanium, +/area/shuttle/trade/sol) "PU" = ( /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel/dark, @@ -12184,11 +12203,11 @@ }, /obj/docking_port/stationary{ dir = 4; - dwidth = 15; + dwidth = 16; height = 21; id = "emergency_away"; name = "emergency centcom"; - width = 33 + width = 41 }, /turf/simulated/floor/plating, /area/shuttle/escape) @@ -12922,7 +12941,7 @@ pixel_y = 5 }, /obj/structure/table/wood, -/obj/structure/sign/barsign{ +/obj/machinery/barsign{ pixel_y = -32 }, /turf/simulated/floor/plasteel{ @@ -13923,11 +13942,6 @@ }, /turf/simulated/wall/indestructible/fakeglass, /area/centcom/specops) -"Xi" = ( -/obj/effect/spawner/window, -/obj/structure/sign/barsign, -/turf/simulated/floor/plating, -/area/centcom/evac) "Xj" = ( /turf/simulated/floor/transparent/glass, /area/centcom/specops) @@ -46015,8 +46029,8 @@ Ng Ng So Vs -Xi -Xx +Qe +lc YO ZZ gI @@ -48808,9 +48822,9 @@ vG of oI pc -rK +PT pc -uP +aS pc vY of @@ -49322,9 +49336,9 @@ vG of oS pc -pa +rK pc -pa +uP pc wa of @@ -49336,11 +49350,11 @@ aN aN aN aN -aN Db aN aN aN +aN Db aN aN @@ -49375,10 +49389,10 @@ Db aN aN aN +Db aN aN -aN -aN +Db aN aN aN @@ -50621,12 +50635,12 @@ aN aN aN aN -aN Db aN aN aN aN +aN od od vy @@ -50656,6 +50670,13 @@ XB od ux ux +aN +aN +aN +aN +aN +aN +aN Db aN aN @@ -50746,13 +50767,6 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN "} (141,1,1) = {" aN @@ -51906,12 +51920,12 @@ aN aN aN aN -aN Db aN aN aN aN +aN vy Ez Fq @@ -51941,6 +51955,13 @@ Pb vy Iv Zp +aN +aN +aN +aN +aN +aN +aN Db aN aN @@ -52031,13 +52052,6 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN "} (146,1,1) = {" aN @@ -52420,12 +52434,12 @@ aN aN aN aN -aN Db aN aN aN aN +aN vy EE Fo @@ -52455,6 +52469,13 @@ JC vy Iv Zp +aN +aN +aN +aN +aN +aN +aN Db aN aN @@ -52545,13 +52566,6 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN "} (148,1,1) = {" aN @@ -53705,7 +53719,6 @@ aN aN aN aN -aN Db aN aN @@ -53716,6 +53729,7 @@ aN aN aN aN +aN od JC Mc @@ -53740,6 +53754,13 @@ qF od Iv Zp +aN +aN +aN +aN +aN +aN +aN Db aN aN @@ -53830,13 +53851,6 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN "} (153,1,1) = {" aN @@ -54990,11 +55004,11 @@ aN aN aN aN -aN Db aN aN aN +aN Db aN aN @@ -55029,10 +55043,10 @@ Db aN aN aN +Db aN aN -aN -aN +Db aN aN aN @@ -73022,8 +73036,8 @@ vd Ml vd xy -sd -Jy +Me +tP Jy Jy Jy diff --git a/_maps/map_files/shuttles/emergency_shadow.dmm b/_maps/map_files/shuttles/emergency_shadow.dmm new file mode 100644 index 00000000000..3b4a0de97d8 --- /dev/null +++ b/_maps/map_files/shuttles/emergency_shadow.dmm @@ -0,0 +1,1871 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"af" = ( +/obj/structure/bed/dogbed, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"ao" = ( +/obj/effect/turf_decal/stripes/white/corner{ + dir = 1 + }, +/obj/effect/turf_decal/delivery/blue/partial{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"aK" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/electrical{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -1; + pixel_y = -3 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkyellow" + }, +/area/shuttle/escape) +"aZ" = ( +/obj/effect/turf_decal/stripes/red/corner, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"bh" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/structure/window/plasmareinforced, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"bD" = ( +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"bH" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/restraints/handcuffs, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"bT" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"cv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/table/glass/reinforced/plastitanium, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/hyper, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"cF" = ( +/obj/structure/chair/comfy/shuttle, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"cH" = ( +/turf/simulated/floor/plasteel{ + icon_state = "darkyellow" + }, +/area/shuttle/escape) +"cV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"cX" = ( +/obj/structure/window/full/plasmareinforced, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"dw" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"ee" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Escape Shuttle Infirmary" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/shuttle/escape) +"eJ" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"fb" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"fi" = ( +/obj/machinery/recharger, +/obj/structure/table/glass/reinforced/plastitanium, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"fE" = ( +/obj/structure/window/plasmareinforced{ + dir = 4 + }, +/obj/structure/shuttle/engine/heater{ + dir = 8 + }, +/obj/machinery/igniter/on, +/obj/machinery/atmospherics/unary/passive_vent/high_volume/shadow{ + dir = 4; + invisibility = 99 + }, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"fV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/floor/engine/plasma, +/area/shuttle/escape) +"ge" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/storage/fancy/donut_box, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"gs" = ( +/obj/structure/window/full/plasmareinforced, +/obj/machinery/atmospherics/trinary/filter/shadow{ + invisibility = 99 + }, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"gF" = ( +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"gG" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"gV" = ( +/obj/structure/marker_beacon/dock_marker/collision, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"hm" = ( +/obj/structure/window/plasmareinforced{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"hz" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/dispenser, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"ix" = ( +/obj/structure/closet/emcloset, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"jl" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"jB" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/catwalk, +/area/shuttle/escape) +"jR" = ( +/turf/simulated/floor/engine/o2, +/area/shuttle/escape) +"kx" = ( +/obj/structure/chair/comfy/shuttle, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"kU" = ( +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"kY" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/storage/surgical_tray, +/obj/item/stack/nanopaste, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"ll" = ( +/obj/machinery/computer/security, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"lo" = ( +/obj/effect/turf_decal/delivery/blue/partial{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"lw" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/storage/fancy/donut_box, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"lD" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"mp" = ( +/obj/effect/turf_decal/delivery/blue/partial{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"mw" = ( +/obj/machinery/sleeper, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"my" = ( +/obj/structure/window/plasmareinforced{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"nq" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"nL" = ( +/obj/machinery/computer/crew{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"nQ" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"ow" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/catwalk, +/area/shuttle/escape) +"oK" = ( +/mob/living/simple_animal/bot/medbot, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/shuttle/escape) +"oQ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/engine/plasma, +/area/shuttle/escape) +"pi" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/item/kirbyplants, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"qk" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"qo" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/flash, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"rg" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"rm" = ( +/obj/machinery/computer/emergency_shuttle{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"rS" = ( +/obj/structure/chair/comfy/shuttle, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"sh" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"sE" = ( +/obj/machinery/computer/secure_data{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"tb" = ( +/obj/structure/window/full/plasmareinforced, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"uu" = ( +/obj/structure/window/full/plasmareinforced, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"uA" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"uF" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"uL" = ( +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/airlock/command/glass{ + name = "Cockpit" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"uW" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/catwalk, +/area/shuttle/escape) +"vv" = ( +/obj/machinery/atmospherics/portable/canister/air, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"vw" = ( +/obj/structure/window/plasmareinforced{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"vx" = ( +/obj/item/defibrillator/loaded, +/obj/structure/table/glass/reinforced/plastitanium, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"vU" = ( +/turf/simulated/wall/mineral/plastitanium, +/area/shuttle/escape) +"wb" = ( +/obj/structure/window/full/plastitanium, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/grille, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"wj" = ( +/obj/machinery/space_heater, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plasteel{ + icon_state = "darkyellow" + }, +/area/shuttle/escape) +"wz" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"wF" = ( +/obj/structure/window/plasmareinforced{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"xy" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/item/kirbyplants, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"yg" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"yQ" = ( +/obj/effect/turf_decal/delivery/blue/partial{ + dir = 8 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"yU" = ( +/obj/machinery/computer/atmos_alert{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/shuttle/escape) +"zj" = ( +/turf/simulated/floor/engine/plasma, +/area/shuttle/escape) +"zs" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plasteel{ + icon_state = "darkyellow"; + dir = 1 + }, +/area/shuttle/escape) +"zu" = ( +/obj/structure/window/full/plasmareinforced, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"zI" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"Ah" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plasteel{ + icon_state = "darkyellow"; + dir = 1 + }, +/area/shuttle/escape) +"AA" = ( +/obj/effect/turf_decal/arrows, +/obj/effect/turf_decal/arrows{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"AS" = ( +/obj/effect/turf_decal/stripes/white/line, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Bm" = ( +/obj/machinery/sleeper, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"Bu" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/window/plasmareinforced, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"BB" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/machinery/recharger, +/obj/item/gun/energy/gun/mini, +/obj/machinery/firealarm{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"BJ" = ( +/mob/living/simple_animal/bot/secbot, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"Cw" = ( +/turf/template_noop, +/area/template_noop) +"CD" = ( +/obj/machinery/igniter/shadow, +/turf/simulated/floor/engine/plasma, +/area/shuttle/escape) +"CK" = ( +/obj/structure/shuttle/engine/propulsion/burst{ + dir = 8 + }, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"Dl" = ( +/obj/structure/window/full/plastitanium, +/obj/structure/grille, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"Dq" = ( +/obj/effect/turf_decal/stripes/white/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Dz" = ( +/obj/item/storage/box/cups, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/table/glass/reinforced/plastitanium, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"DN" = ( +/obj/structure/window/full/plastitanium, +/obj/machinery/door/firedoor/heavy, +/obj/structure/grille, +/turf/simulated/floor/plating, +/area/shuttle/escape) +"DY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/engine/plasma, +/area/shuttle/escape) +"DZ" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"EM" = ( +/obj/structure/window/plasmareinforced{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"Fn" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"Fu" = ( +/obj/machinery/door/firedoor/heavy, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Fz" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"FT" = ( +/obj/structure/closet/crate/freezer/iv_storage, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/shuttle/escape) +"FW" = ( +/obj/machinery/door/firedoor/heavy, +/obj/effect/turf_decal/delivery/red, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Gp" = ( +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Gs" = ( +/obj/machinery/atmospherics/unary/passive_vent/high_volume/shadow{ + dir = 4; + invisibility = 99 + }, +/turf/simulated/floor/engine/plasma, +/area/shuttle/escape) +"Gx" = ( +/obj/structure/extinguisher_cabinet{ + name = "south bump"; + pixel_y = -30 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/shuttle/escape) +"GB" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/storage/firstaid/doctor, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"GC" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + name = "south bump"; + pixel_y = -30 + }, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"GI" = ( +/obj/machinery/computer/station_alert{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"GK" = ( +/obj/structure/chair/comfy/shuttle, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"GR" = ( +/obj/machinery/recharge_station, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Hh" = ( +/obj/structure/rack, +/obj/item/soap/nanotrasen, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/machinery/alarm/directional/north, +/turf/simulated/floor/plasteel{ + icon_state = "darkyellow"; + dir = 1 + }, +/area/shuttle/escape) +"Hu" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/storage/fancy/donut_box, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"HB" = ( +/obj/effect/turf_decal/stripes/white/corner{ + dir = 8 + }, +/obj/effect/turf_decal/delivery/blue/partial{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"IG" = ( +/obj/structure/chair/comfy/shuttle, +/obj/structure/extinguisher_cabinet{ + name = "north bump"; + pixel_y = 30 + }, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"IR" = ( +/obj/effect/turf_decal/stripes/white/line, +/obj/structure/extinguisher_cabinet{ + name = "north bump"; + pixel_y = 30 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Jh" = ( +/obj/structure/extinguisher_cabinet{ + name = "north bump"; + pixel_y = 30 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"Jw" = ( +/obj/structure/chair/comfy/shuttle, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"JM" = ( +/obj/machinery/door/airlock/hatch, +/obj/docking_port/mobile/emergency{ + dir = 2; + name = "NTSS Shadow emergency shuttle"; + dwidth = 16; + width = 41; + timid = 1; + height = 13; + shuttle_speed_factor = 2 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"Kf" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/structure/decorative_structures/flammable/lava_land_display{ + pixel_x = 12 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Lv" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"LA" = ( +/obj/structure/window/plasmareinforced{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/machinery/atmospherics/meter, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"LI" = ( +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"LJ" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/megaphone, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"MP" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"MT" = ( +/obj/effect/turf_decal/stripes/red/corner, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"Nd" = ( +/obj/machinery/hologram/holopad, +/obj/effect/turf_decal/box/white, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"NI" = ( +/obj/structure/window/full/plasmareinforced, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"NO" = ( +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/door/airlock/security/glass{ + name = "Escape Shuttle Brig" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"Oe" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/item/kirbyplants, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"OL" = ( +/turf/simulated/floor/plasteel{ + icon_state = "darkyellow"; + dir = 1 + }, +/area/shuttle/escape) +"OU" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/plasteel{ + icon_state = "darkyellow" + }, +/area/shuttle/escape) +"OX" = ( +/obj/structure/closet/firecloset, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"PX" = ( +/obj/machinery/door/airlock/hatch, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"Qj" = ( +/obj/structure/closet/emcloset, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"Qz" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"QM" = ( +/obj/effect/turf_decal/stripes/white/corner, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Rk" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"RL" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"RS" = ( +/obj/structure/chair/comfy/shuttle, +/turf/simulated/floor/plasteel{ + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"RV" = ( +/obj/machinery/door/firedoor/heavy, +/obj/effect/turf_decal/caution/stand_clear, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Sb" = ( +/obj/item/clothing/suit/apron/surgical, +/obj/item/clothing/mask/surgical, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/reagent_containers/glass/bottle/reagent/hydrocodone, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"Sn" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/structure/window/plasmareinforced, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"So" = ( +/obj/item/lazarus_injector, +/obj/item/healthanalyzer, +/obj/machinery/light, +/obj/structure/table/glass/reinforced/plastitanium, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/shuttle/escape) +"Tl" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/reagent_containers/drinks/bottle/wine, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass{ + pixel_x = -5 + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"TW" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"Ux" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + name = "south bump"; + pixel_y = -30 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"US" = ( +/obj/structure/window/full/plastitanium, +/obj/structure/grille, +/turf/simulated/floor/plating, +/area/shuttle/escape) +"Vg" = ( +/obj/structure/rack, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/fire, +/obj/item/storage/firstaid/brute, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"VD" = ( +/obj/machinery/computer/communications{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"VR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + name = "west bump"; + pixel_x = -27 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Wv" = ( +/obj/structure/window/full/plasmareinforced, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"Wy" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engine Room" + }, +/obj/machinery/door/firedoor/heavy, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"WQ" = ( +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/shuttle/escape) +"WW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/meter, +/turf/simulated/floor/engine/plasma, +/area/shuttle/escape) +"Xp" = ( +/obj/structure/marker_beacon/dock_marker/collision, +/obj/machinery/atmospherics/unary/outlet_injector/on{ + dir = 1; + invisibility = 99 + }, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"XA" = ( +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/shuttle/escape) +"XW" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Yb" = ( +/obj/structure/window/full/plasmareinforced, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"Yc" = ( +/obj/machinery/light, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/shuttle/escape) +"Yq" = ( +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/airlock/command/glass{ + name = "Cockpit" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/shuttle/escape) +"YD" = ( +/obj/machinery/economy/vending/medical, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"YP" = ( +/obj/effect/turf_decal/delivery/blue/partial{ + dir = 4 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Zc" = ( +/obj/item/surgical_drapes, +/obj/machinery/optable, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"Zk" = ( +/obj/item/storage/box/handcuffs, +/obj/structure/table/glass/reinforced/plastitanium, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"Zq" = ( +/obj/structure/window/plasmareinforced{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"ZN" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) + +(1,1,1) = {" +Cw +Cw +Cw +CK +CK +CK +vU +CK +CK +CK +Cw +Cw +Cw +"} +(2,1,1) = {" +Cw +Cw +vU +fE +fE +fE +vU +fE +fE +fE +vU +Cw +Cw +"} +(3,1,1) = {" +Cw +Cw +vU +uW +uW +jB +vv +ow +uW +uW +vU +Cw +Cw +"} +(4,1,1) = {" +Cw +vU +XA +MT +vw +vw +LA +vw +vw +fb +XA +vU +Cw +"} +(5,1,1) = {" +gV +Dl +zs +Bu +NI +Yb +zu +cX +cX +Zq +wj +wb +Xp +"} +(6,1,1) = {" +Cw +vU +Ah +Sn +uu +fV +zj +Gs +cX +wF +OU +vU +Cw +"} +(7,1,1) = {" +vU +XA +Hh +bh +gs +oQ +DY +WW +cX +wF +aK +XA +vU +"} +(8,1,1) = {" +US +Lv +OL +Bu +tb +jR +CD +jR +cX +wF +cH +Lv +US +"} +(9,1,1) = {" +vU +hz +OL +Bu +Wv +Yb +Yb +Yb +Yb +my +cH +GR +vU +"} +(10,1,1) = {" +US +eJ +OL +wz +EM +EM +hm +EM +EM +nQ +cH +eJ +US +"} +(11,1,1) = {" +vU +vU +Wy +vU +DN +DN +vU +DN +DN +vU +Wy +vU +vU +"} +(12,1,1) = {" +US +xy +Dq +VR +cV +cV +cV +cV +cV +VR +QM +Oe +US +"} +(13,1,1) = {" +US +Jw +Rk +aZ +nq +nq +nq +nq +nq +DZ +AS +MP +US +"} +(14,1,1) = {" +vU +GK +Rk +XA +US +US +US +US +US +XA +AS +lD +vU +"} +(15,1,1) = {" +US +Jw +Rk +vU +kx +gF +Zk +gF +zI +vU +AS +MP +vU +"} +(16,1,1) = {" +US +Jw +Rk +vU +kx +gF +fi +gF +zI +vU +AS +MP +US +"} +(17,1,1) = {" +PX +AA +Rk +vU +cF +gF +BJ +gF +uF +vU +AS +MP +vU +"} +(18,1,1) = {" +vU +bD +Rk +vU +IG +gF +gF +gF +GC +vU +AS +MP +vU +"} +(19,1,1) = {" +PX +AA +Ux +vU +kx +gF +gF +gF +zI +vU +IR +MP +US +"} +(20,1,1) = {" +US +Qj +Rk +XA +US +US +NO +US +US +XA +AS +lD +vU +"} +(21,1,1) = {" +US +Hu +jl +RL +XW +XW +bT +XW +XW +yg +Gp +Dz +US +"} +(22,1,1) = {" +vU +FW +Fu +FW +Fu +FW +RV +FW +Fu +FW +Fu +FW +vU +"} +(23,1,1) = {" +US +ge +ZN +cV +yQ +yQ +lo +yQ +yQ +cV +LI +cv +US +"} +(24,1,1) = {" +US +OX +Rk +XA +US +US +ee +US +US +XA +AS +lD +vU +"} +(25,1,1) = {" +JM +AA +Rk +vU +vx +Fz +WQ +dw +Vg +vU +AS +MP +US +"} +(26,1,1) = {" +vU +bD +Rk +vU +qk +WQ +WQ +WQ +FT +vU +AS +MP +US +"} +(27,1,1) = {" +PX +AA +Rk +vU +Sb +WQ +oK +WQ +So +vU +AS +MP +vU +"} +(28,1,1) = {" +US +Jw +Rk +vU +Jh +WQ +WQ +WQ +Gx +vU +AS +MP +US +"} +(29,1,1) = {" +US +Jw +Ux +vU +Zc +kY +mw +YD +Bm +vU +IR +MP +US +"} +(30,1,1) = {" +vU +GK +Rk +XA +US +US +US +US +US +XA +AS +lD +vU +"} +(31,1,1) = {" +US +Jw +Rk +kU +YP +YP +YP +YP +YP +kU +AS +MP +US +"} +(32,1,1) = {" +US +pi +ao +mp +mp +mp +mp +mp +mp +mp +HB +pi +US +"} +(33,1,1) = {" +vU +vU +US +US +uL +vU +vU +vU +Yq +US +US +vU +vU +"} +(34,1,1) = {" +Cw +vU +lw +uA +kU +qo +BB +GB +kU +rS +bH +vU +Cw +"} +(35,1,1) = {" +Cw +vU +Tl +Qz +kU +sh +kU +sh +kU +RS +LJ +vU +Cw +"} +(36,1,1) = {" +Cw +vU +XA +TW +kU +kU +Nd +kU +kU +Yc +XA +vU +Cw +"} +(37,1,1) = {" +Cw +Cw +US +af +gG +kU +kU +kU +Fn +ix +US +Cw +Cw +"} +(38,1,1) = {" +Cw +Cw +US +US +sE +kU +Kf +kU +yU +US +US +Cw +Cw +"} +(39,1,1) = {" +Cw +Cw +Cw +US +ll +gG +rg +Fn +GI +US +Cw +Cw +Cw +"} +(40,1,1) = {" +Cw +Cw +Cw +US +US +VD +rm +nL +US +US +Cw +Cw +Cw +"} +(41,1,1) = {" +Cw +Cw +Cw +Cw +US +US +US +US +US +Cw +Cw +Cw +Cw +"} diff --git a/_maps/map_files/stations/boxstation.dmm b/_maps/map_files/stations/boxstation.dmm index 57c028ebbfc..5d9fe7bc8d1 100644 --- a/_maps/map_files/stations/boxstation.dmm +++ b/_maps/map_files/stations/boxstation.dmm @@ -22947,11 +22947,11 @@ "brK" = ( /obj/docking_port/stationary{ dir = 4; - dwidth = 15; + dwidth = 16; height = 21; id = "emergency_home"; name = "emergency evac bay"; - width = 33 + width = 41 }, /turf/space, /area/space) @@ -23086,7 +23086,7 @@ /area/station/maintenance/port) "bsg" = ( /obj/structure/table, -/obj/item/clothing/head/soft/grey{ +/obj/item/clothing/head/soft{ pixel_x = -2; pixel_y = 3 }, @@ -24963,10 +24963,6 @@ "bzd" = ( /turf/simulated/floor/plasteel/goonplaque/memorial, /area/station/hallway/secondary/exit) -"bze" = ( -/obj/structure/sign/barsign, -/turf/simulated/wall, -/area/station/service/bar) "bzf" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -40410,6 +40406,7 @@ d2 = 4; icon_state = "1-4" }, +/obj/structure/closet/emcloset, /turf/simulated/floor/plating/airless, /area/station/science/toxins/test) "cDL" = ( @@ -52972,7 +52969,6 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment, /obj/structure/sign/securearea{ pixel_x = -32 }, @@ -63680,6 +63676,12 @@ }, /turf/simulated/floor/engine, /area/station/science/xenobiology) +"iYj" = ( +/obj/machinery/barsign{ + pixel_y = 32 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/primary/starboard/west) "iYo" = ( /obj/item/taperecorder, /obj/structure/table, @@ -67423,13 +67425,6 @@ icon_state = "darkyellow" }, /area/station/science/robotics/chargebay) -"kOa" = ( -/obj/structure/closet/emcloset, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating/airless, -/area/station/science/toxins/test) "kOt" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, @@ -71305,9 +71300,9 @@ "mIA" = ( /obj/structure/table, /obj/item/stamp/granted, -/obj/item/clothing/head/soft, +/obj/item/clothing/head/soft/cargo, /obj/item/hand_labeler, -/obj/item/clothing/head/soft, +/obj/item/clothing/head/soft/cargo, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "brown" @@ -72200,6 +72195,15 @@ icon_state = "whitepurple" }, /area/station/science/toxins/mixing) +"nhM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel/airless, +/area/station/science/toxins/test) "nhZ" = ( /obj/structure/cable{ d2 = 4; @@ -74887,7 +74891,6 @@ /area/station/maintenance/apmaint) "owP" = ( /obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating/airless, /area/station/maintenance/asmaint) "oxe" = ( @@ -87545,6 +87548,11 @@ }, /turf/simulated/floor/wood, /area/station/security/permabrig) +"uGP" = ( +/obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance, +/turf/simulated/floor/plasteel/airless, +/area/station/science/toxins/test) "uHC" = ( /obj/machinery/computer/communications{ dir = 4 @@ -93748,6 +93756,13 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"xQI" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel/airless, +/area/station/science/toxins/test) "xQL" = ( /obj/structure/table, /obj/item/storage/toolbox/mechanical, @@ -130556,8 +130571,8 @@ bmq bmq bmq bzo -bze -bAk +aUS +iYj bHy bDb bEy @@ -152679,9 +152694,9 @@ aaa aaa aaa aaa -doE -doE -doE +aaa +aaa +aaa aaa aaa aab @@ -152934,15 +152949,15 @@ aaa aaa aaa aaa +aaa +aaa +aaa +aaa +aaa +aaa aab -gnU -ldS -clB -cnk -cid -cie -cie cie +cij cvs cie cie @@ -153191,18 +153206,18 @@ aaa aaa aaa aaa +aaa +aaa +aaa +aaa +aaa +aab aab -ldS -cjZ -cjZ -cjZ cie -cie -ckb -cdK +xQI cjZ -udq -ckb +nhM +cie cie cie clA @@ -153448,19 +153463,19 @@ aaa aaa aaa aaa +aaa +aaa +aaa +aaa aab -ldS -cjZ -cjZ -cjZ -clB -ckb -ckb +aab +cie +cie cdK cjZ udq ckb -ckb +cie cie jgm cjZ @@ -153705,13 +153720,13 @@ aaa aaa aaa aaa +aaa +aaa +aaa +aab aab -ldS -clA -kOa -jgm cie -ckb +cie ckb cdK cjZ @@ -153963,9 +153978,9 @@ aaa aaa aaa aaa -cid -cid -cie +aaa +aab +aab cie cie ckb @@ -154220,13 +154235,13 @@ aaa aaa aaa aaa -cid +aab +aab cie cie ckb ckb ckb -ckb cdK cjZ udq @@ -154476,10 +154491,10 @@ aaa aaa aaa aaa -aaa -cij +aab +aab +cie cie -ckb ckb ckb ckb @@ -154733,9 +154748,9 @@ aaa aaa aaa aaa -aaa +aab +cie cie -ckb ckb ckb ckb @@ -155249,7 +155264,7 @@ aaa aaa aab cie -ckb +uGP ckb ckb ckb diff --git a/_maps/map_files/stations/cerestation.dmm b/_maps/map_files/stations/cerestation.dmm index ccc69336a86..74cd9d342b9 100644 --- a/_maps/map_files/stations/cerestation.dmm +++ b/_maps/map_files/stations/cerestation.dmm @@ -159,6 +159,9 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "abd" = ( @@ -306,6 +309,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -779,6 +785,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "purplecorner" @@ -961,6 +970,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry/north) "afY" = ( @@ -2849,6 +2859,13 @@ /obj/effect/landmark/spawner/xeno, /turf/simulated/floor/plating, /area/station/maintenance/disposal/northeast) +"arP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "arS" = ( /obj/structure/disposalpipe/trunk{ dir = 2 @@ -3225,6 +3242,16 @@ icon_state = "darkredcorners" }, /area/station/security/brig) +"auo" = ( +/obj/machinery/optable, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkpurple" + }, +/area/station/science/robotics) "aup" = ( /obj/structure/cable/orange{ d1 = 4; @@ -3610,7 +3637,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 2; icon_state = "green" }, /area/station/public/quantum/service) @@ -4967,6 +4993,15 @@ /obj/effect/turf_decal/stripes/red, /turf/simulated/floor/engine, /area/station/engineering/control) +"aFQ" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Aft Asteroid Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/spawner/random_spawners/dirt_frequent, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/station/maintenance/asmaint) "aGc" = ( /obj/machinery/camera{ c_tag = "Arcade East"; @@ -6609,6 +6644,7 @@ /area/station/security/permabrig) "aQR" = ( /obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) "aQS" = ( @@ -8856,6 +8892,9 @@ /obj/item/stack/cable_coil{ amount = 5 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/hallway/primary/starboard/south) "bcQ" = ( @@ -9682,6 +9721,14 @@ }, /turf/simulated/floor/plasteel, /area/station/public/locker) +"bgJ" = ( +/obj/structure/table/reinforced, +/obj/item/storage/surgical_tray, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkpurple" + }, +/area/station/science/robotics) "bgM" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -12237,24 +12284,6 @@ /obj/effect/spawner/window/reinforced/plasma, /turf/simulated/floor/plating, /area/station/engineering/engine/supermatter) -"bty" = ( -/obj/structure/window/reinforced/polarized, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/mecha_parts/core, -/obj/item/stock_parts/cell/high/plus, -/obj/item/stock_parts/cell/high/plus, -/obj/item/stock_parts/cell/high/plus, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/science/robotics) "btz" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -14515,6 +14544,15 @@ icon_state = "whiteyellow" }, /area/station/medical/chemistry) +"bDk" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" + }, +/area/station/maintenance/starboard) "bDq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -14849,6 +14887,7 @@ dir = 8 }, /obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint2) "bEP" = ( @@ -16885,6 +16924,7 @@ /area/station/command/bridge) "bMX" = ( /obj/structure/closet/wardrobe/mixed, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/port) "bMY" = ( @@ -16893,6 +16933,17 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/port) +"bNc" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/asmaint) "bNf" = ( /obj/structure/chair/office/dark, /obj/effect/landmark/start/librarian, @@ -17059,6 +17110,9 @@ /turf/simulated/wall/r_wall, /area/station/engineering/smes) "bNE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/hallway/primary/starboard/south) "bNL" = ( @@ -17079,6 +17133,9 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/disposalpipe/segment/corner{ + dir = 4 + }, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, @@ -17189,6 +17246,7 @@ dir = 4 }, /obj/structure/closet/emcloset, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, @@ -18515,6 +18573,18 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) +"bTM" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/asmaint) "bTN" = ( /obj/machinery/light_switch{ pixel_y = 24; @@ -18732,6 +18802,9 @@ icon_state = "4-8" }, /obj/machinery/alarm/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/engine{ slowdown = -0.3 }, @@ -19083,7 +19156,6 @@ pixel_x = 24; name = "east bump" }, -/obj/structure/disposalpipe/segment, /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" @@ -19255,6 +19327,7 @@ }, /obj/effect/decal/cleanable/cobweb, /obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fore2) "bWl" = ( @@ -19526,6 +19599,7 @@ "bXu" = ( /obj/structure/rack, /obj/item/pickaxe/emergency, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fore2) "bXv" = ( @@ -21044,33 +21118,10 @@ /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plating, /area/station/maintenance/disposal/external/southeast) -"chX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "purplecorner" - }, -/area/station/hallway/primary/aft/east) "chY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/camera{ - c_tag = "Research Asteroid Hallway 4" - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -21079,6 +21130,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment/corner{ + dir = 1 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "purplecorner" @@ -21110,8 +21164,14 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + color = "#954535" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, /turf/simulated/floor/plasteel{ dir = 1; @@ -21976,10 +22036,10 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/disposalpipe/sortjunction{ - dir = 2; - name = "disposal pipe - Chemistry"; - sort_type_txt = "11" +/obj/structure/disposalpipe/sortjunction/reversed{ + name = "disposal pipe - Medbay"; + sort_type_txt = "9"; + dir = 8 }, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" @@ -22079,6 +22139,7 @@ /obj/structure/closet/emcloset, /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/port) "coO" = ( @@ -22304,6 +22365,12 @@ }, /turf/simulated/floor/plating, /area/station/turret_protected/aisat/interior) +"cpT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/science/robotics) "cpU" = ( /obj/structure/cable/orange{ d1 = 2; @@ -23110,7 +23177,7 @@ "cvm" = ( /obj/structure/table, /obj/item/clothing/gloves/fingerless, -/obj/item/clothing/head/soft, +/obj/item/clothing/head/soft/cargo, /turf/simulated/floor/plasteel{ icon_state = "darkbrown" }, @@ -23138,6 +23205,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -23749,6 +23817,7 @@ "czP" = ( /obj/structure/closet/crate, /obj/item/pickaxe, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/apmaint) "czQ" = ( @@ -23962,6 +24031,9 @@ d2 = 4; icon_state = "2-4" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "cAW" = ( @@ -24438,6 +24510,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment/corner{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -25683,6 +25758,7 @@ /obj/machinery/light{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -26106,10 +26182,6 @@ "cMz" = ( /turf/simulated/wall/r_wall, /area/station/maintenance/fore) -"cMA" = ( -/obj/structure/sign/barsign, -/turf/simulated/wall, -/area/station/maintenance/gambling_den) "cME" = ( /obj/structure/cable/orange{ d1 = 2; @@ -29080,6 +29152,11 @@ icon_state = "dark" }, /area/station/turret_protected/ai_upload) +"daz" = ( +/obj/structure/closet/emcloset, +/obj/effect/spawner/lootdrop/maintenance, +/turf/simulated/floor/plating/asteroid/ancient, +/area/station/maintenance/port) "daA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -30964,6 +31041,9 @@ /area/station/hallway/primary/fore/north) "dnc" = ( /obj/effect/spawner/random_spawners/dirt_often, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -31090,6 +31170,7 @@ /area/station/maintenance/disposal/west) "doo" = ( /obj/structure/closet/emcloset, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/fpmaint) "dos" = ( @@ -33698,6 +33779,11 @@ icon_state = "whitepurple" }, /area/station/science/hallway) +"dCm" = ( +/obj/effect/spawner/window/reinforced/polarized, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/station/science/robotics) "dCt" = ( /obj/structure/cable/orange{ d1 = 4; @@ -33825,6 +33911,7 @@ /area/station/maintenance/starboard) "dCU" = ( /obj/structure/closet/emcloset, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/starboard) "dCV" = ( @@ -34562,6 +34649,15 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/fore/west) +"dOh" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "dOk" = ( /obj/machinery/atmospherics/meter, /obj/machinery/atmospherics/pipe/simple/visible/green, @@ -34773,6 +34869,9 @@ icon_state = "4-8" }, /obj/effect/spawner/random_spawners/dirt_frequent, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "dQT" = ( @@ -35010,6 +35109,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "purplecorner" @@ -35156,6 +35258,13 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/aft/west) +"dWR" = ( +/obj/machinery/computer/operating, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkpurple" + }, +/area/station/science/robotics) "dXo" = ( /obj/machinery/light/small{ dir = 4 @@ -35376,6 +35485,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -35470,6 +35582,7 @@ "eeZ" = ( /obj/structure/closet/crate, /obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fore2) "efa" = ( @@ -35699,7 +35812,8 @@ dir = 4 }, /obj/machinery/disposal/deliveryChute{ - dir = 8 + dir = 8; + name = "cadaver delivery chute" }, /turf/simulated/floor/plating/airless, /area/station/maintenance/disposal/west) @@ -35983,6 +36097,7 @@ /area/station/hallway/primary/central/west) "eot" = ( /obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) "eoz" = ( @@ -36240,6 +36355,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating, /area/station/maintenance/storage) "etG" = ( @@ -36307,6 +36423,7 @@ /area/station/service/clown) "eux" = ( /obj/structure/closet/emcloset, +/obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/maintcentral) "euL" = ( @@ -36395,6 +36512,9 @@ icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "evL" = ( @@ -36637,6 +36757,7 @@ /obj/structure/closet/crate{ name = "top secret mime supplies" }, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, @@ -36716,6 +36837,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -36809,16 +36933,6 @@ icon_state = "asteroidplating" }, /area/station/maintenance/port) -"eDf" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/station/science/robotics) "eDi" = ( /obj/structure/cable/orange{ d1 = 2; @@ -36852,6 +36966,9 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/structure/disposalpipe/segment/corner{ + dir = 8 + }, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry/north) "eEd" = ( @@ -37539,6 +37656,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/engine{ slowdown = -0.3 }, @@ -37621,7 +37741,8 @@ dir = 4 }, /obj/machinery/disposal/deliveryChute{ - dir = 8 + dir = 8; + name = "cadaver delivery chute" }, /turf/simulated/floor/plating/airless, /area/station/maintenance/disposal/south) @@ -37646,6 +37767,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "eTc" = ( @@ -38029,6 +38153,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "purplecorner" @@ -38204,6 +38331,7 @@ /obj/structure/disposalpipe/segment/corner{ dir = 8 }, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, @@ -38492,6 +38620,7 @@ }, /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, +/obj/structure/disposalpipe/segment/corner, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "fkc" = ( @@ -39320,17 +39449,6 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/central/north) -"fyR" = ( -/obj/structure/closet/secure_closet/roboticist, -/obj/item/radio/intercom{ - pixel_x = 28; - name = "custom placement" - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "darkpurple" - }, -/area/station/science/robotics) "fyS" = ( /obj/structure/cable/orange{ d1 = 1; @@ -39811,6 +39929,7 @@ /area/station/service/library) "fIL" = ( /obj/effect/turf_decal/stripes/corner, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -39912,11 +40031,6 @@ }, /area/station/hallway/primary/aft/west) "fLp" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 2; - name = "disposal pipe - CMO Office"; - sort_type_txt = "10" - }, /obj/effect/spawner/random_spawners/dirt_often, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -40732,10 +40846,6 @@ icon_state = "whitegreen" }, /area/station/public/sleep) -"fYD" = ( -/obj/structure/rack, -/turf/simulated/floor/plating/asteroid/ancient, -/area/station/maintenance/apmaint) "fYG" = ( /obj/machinery/door/airlock/public/glass{ name = "Walkway" @@ -41465,9 +41575,6 @@ name = "Port Asteroid Maintenance" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -41549,14 +41656,6 @@ icon_state = "wood-broken7" }, /area/station/maintenance/asmaint) -"gqG" = ( -/obj/structure/disposalpipe/segment/corner{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "cafeteria" - }, -/area/station/medical/break_room) "gqH" = ( /obj/structure/cable/orange{ d1 = 1; @@ -41725,6 +41824,13 @@ }, /turf/simulated/floor/engine, /area/station/engineering/control) +"gus" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/corner, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" + }, +/area/station/maintenance/starboard) "gux" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'KEEP CLEAR OF PAD WHEN IN USE'."; @@ -42570,14 +42676,6 @@ icon_state = "purplefull" }, /area/station/hallway/primary/aft/west) -"gIk" = ( -/obj/structure/disposalpipe/segment{ - color = "#954535" - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/hallway/primary/aft/east) "gIm" = ( /obj/effect/spawner/window/reinforced, /obj/structure/sign/chemistry, @@ -43133,6 +43231,9 @@ d2 = 4; icon_state = "1-4" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, @@ -43227,6 +43328,9 @@ /obj/effect/turf_decal/caution/red{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "purplecorner" @@ -43282,6 +43386,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -43786,6 +43893,7 @@ "hcK" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/closet/wardrobe/black, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/port) "hcT" = ( @@ -44108,6 +44216,7 @@ "hjb" = ( /obj/structure/girder, /obj/structure/grille, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/asmaint) "hjp" = ( @@ -44526,6 +44635,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/engine{ slowdown = -0.3 }, @@ -44628,6 +44740,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment/corner, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "hsS" = ( @@ -44813,6 +44926,7 @@ /area/mine/unexplored/cere/cargo) "huF" = ( /obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/disposal/west) "huM" = ( @@ -44923,6 +45037,7 @@ /area/station/maintenance/disposal/west) "hxc" = ( /obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, @@ -45896,10 +46011,10 @@ /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /turf/simulated/floor/plasteel/white, @@ -45931,6 +46046,12 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/disposal/westalt) +"hNt" = ( +/obj/structure/disposalpipe/segment/corner{ + dir = 1 + }, +/turf/simulated/floor/plating/asteroid/ancient, +/area/station/maintenance/starboard) "hOa" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -46035,6 +46156,11 @@ /obj/item/roller, /turf/simulated/floor/plating, /area/station/maintenance/starboard) +"hPI" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance/two, +/turf/simulated/floor/plating/asteroid/ancient, +/area/station/maintenance/fore2) "hPX" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -46240,6 +46366,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/engine{ slowdown = -0.3 }, @@ -46388,6 +46517,18 @@ }, /turf/simulated/floor/wood, /area/station/command/office/blueshield) +"hUh" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/asmaint) "hUs" = ( /turf/space, /area/station/security/armory/secure) @@ -46588,7 +46729,6 @@ /obj/structure/chair/sofa/corp/right{ dir = 8 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -46778,6 +46918,7 @@ /area/station/command/office/ntrep) "ibf" = ( /obj/structure/closet/emcloset, +/obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) "ibH" = ( @@ -47120,6 +47261,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "purplecorner" @@ -47540,16 +47684,6 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/disposal/west) -"imU" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating{ - icon_state = "asteroidplating" - }, -/area/station/maintenance/starboard) "inn" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -47627,6 +47761,11 @@ icon_state = "dark" }, /area/station/security/checkpoint/secondary) +"ioH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "ioJ" = ( /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall, @@ -48016,10 +48155,10 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/disposalpipe/segment/corner{ - dir = 1 - }, /obj/effect/spawner/random_spawners/dirt_frequent, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -48088,6 +48227,20 @@ /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/station/maintenance/disposal/external/north) +"iun" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" + }, +/area/station/maintenance/starboard) "iuy" = ( /obj/machinery/light/small{ dir = 4 @@ -48179,6 +48332,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry/north) "ivK" = ( @@ -48227,10 +48381,6 @@ }, /turf/simulated/floor/plating, /area/station/hallway/spacebridge/serveng) -"iwJ" = ( -/obj/structure/sign/barsign, -/turf/simulated/wall, -/area/station/service/bar) "iwU" = ( /obj/structure/sign/directions/evac{ dir = 4; @@ -48248,6 +48398,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "purplecorner" @@ -48389,6 +48542,9 @@ dir = 8 }, /obj/machinery/economy/vending/tool, +/obj/structure/disposalpipe/segment/corner{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/hallway/primary/starboard/south) "iyP" = ( @@ -48867,6 +49023,10 @@ icon_state = "dark" }, /area/station/medical/morgue) +"iIc" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating/asteroid/ancient, +/area/station/maintenance/starboard) "iIj" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -49289,6 +49449,7 @@ /area/station/maintenance/fore) "iOU" = ( /obj/structure/table/wood, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/wood, /area/station/maintenance/starboard) "iPa" = ( @@ -49628,6 +49789,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/engine{ slowdown = -0.3 }, @@ -49913,6 +50077,7 @@ /area/station/science/xenobiology) "iXm" = ( /obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/fsmaint) "iXt" = ( @@ -50016,6 +50181,7 @@ /area/mine/unexplored/cere/orbiting) "iZd" = ( /obj/structure/closet/emcloset, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/hallway/primary/fore/west) "iZr" = ( @@ -50454,6 +50620,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "jgF" = ( @@ -50488,7 +50657,6 @@ dir = 4; pixel_x = 11 }, -/obj/structure/disposalpipe/segment/corner, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -50504,18 +50672,6 @@ /obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/apmaint) -"jhA" = ( -/obj/structure/window/reinforced/polarized{ - dir = 8 - }, -/obj/structure/sink{ - dir = 8; - pixel_x = -6 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/science/robotics) "jhX" = ( /obj/machinery/ai_status_display, /turf/simulated/wall, @@ -50616,21 +50772,12 @@ /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/plating, /area/station/maintenance/disposal/southwest) -"jkh" = ( -/obj/machinery/camera{ - c_tag = "Robotics Surgery"; - dir = 8; - network = list("SS13","RD") - }, -/obj/machinery/optable, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "darkpurple" - }, -/area/station/science/robotics) "jkk" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -50790,6 +50937,7 @@ pixel_x = 24; name = "custom placement" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -50927,6 +51075,7 @@ /obj/structure/disposalpipe/segment/corner{ dir = 4 }, +/obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating, /area/station/maintenance/disposal/east) "jpP" = ( @@ -50989,6 +51138,26 @@ icon_state = "whitepurple" }, /area/station/science/xenobiology) +"jqN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "purplecorner" + }, +/area/station/hallway/primary/aft/east) "jqP" = ( /obj/structure/table, /obj/item/storage/box/lights/mixed, @@ -51012,6 +51181,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -51025,6 +51197,17 @@ icon_state = "neutralfull" }, /area/station/hallway/secondary/exit) +"jrk" = ( +/obj/machinery/button/windowtint{ + dir = 8; + id = "surg1"; + pixel_x = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkpurple" + }, +/area/station/science/robotics) "jrw" = ( /obj/structure/cable{ d1 = 1; @@ -51872,6 +52055,7 @@ /obj/structure/railing{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/space, /area/station/hallway/spacebridge/dockmed) "jCN" = ( @@ -52121,6 +52305,11 @@ icon_state = "purple" }, /area/station/hallway/primary/aft/west) +"jGE" = ( +/obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance, +/turf/simulated/floor/plating/asteroid/ancient, +/area/station/maintenance/port) "jGH" = ( /obj/machinery/computer/crew{ dir = 1 @@ -52644,16 +52833,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) -"jOU" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 2; - name = "disposal pipe - Genetics"; - sort_type_txt = "23" - }, -/turf/simulated/floor/plasteel{ - icon_state = "cafeteria" - }, -/area/station/medical/break_room) "jPa" = ( /obj/structure/grille, /turf/simulated/floor/plating{ @@ -53662,6 +53841,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -53705,6 +53885,7 @@ /area/shuttle/arrival/station) "kis" = ( /obj/machinery/alarm/directional/east, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -54508,7 +54689,6 @@ icon_state = "0-8" }, /turf/simulated/floor/plasteel{ - dir = 2; icon_state = "green" }, /area/station/public/quantum/service) @@ -54701,6 +54881,9 @@ "kwQ" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, +/obj/structure/disposalpipe/segment/corner{ + dir = 4 + }, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/asmaint) "kwS" = ( @@ -55139,7 +55322,7 @@ /turf/simulated/floor/plating, /area/station/turret_protected/ai) "kDJ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel/white, /area/station/science/robotics/chargebay) "kDN" = ( @@ -55307,6 +55490,7 @@ "kIn" = ( /obj/structure/table, /obj/item/storage/fancy/cigarettes, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/disposal/south) "kIo" = ( @@ -55590,19 +55774,6 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/port/south) -"kMa" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/item/storage/firstaid/machine, -/obj/item/storage/firstaid/machine, -/obj/item/robotanalyzer, -/turf/simulated/floor/plasteel{ - dir = 6; - icon_state = "darkpurple" - }, -/area/station/science/robotics) "kMh" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -55622,7 +55793,7 @@ }, /area/station/security/lobby) "kMq" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, /turf/simulated/floor/plasteel/white, @@ -56432,10 +56603,6 @@ icon_state = "redcorner" }, /area/station/hallway/secondary/entry/north) -"kYJ" = ( -/obj/structure/closet/crate, -/turf/simulated/floor/plating, -/area/station/maintenance/storage) "kYN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -56546,6 +56713,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/spawner/random_spawners/dirt_often, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry/north) "lbg" = ( @@ -56755,6 +56923,10 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"ldB" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating/asteroid/ancient, +/area/station/maintenance/asmaint) "ldH" = ( /obj/structure/cable{ d1 = 2; @@ -57464,6 +57636,9 @@ name = "External Airlock Access" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry/north) "lmO" = ( @@ -58617,6 +58792,19 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/disposal/east) +"lDd" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" + }, +/area/station/maintenance/asmaint) "lDm" = ( /obj/structure/disposalpipe/segment{ color = "#954535" @@ -59046,6 +59234,7 @@ /obj/structure/railing{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/space, /area/station/hallway/spacebridge/dockmed) "lLO" = ( @@ -59321,16 +59510,6 @@ icon_state = "cafeteria" }, /area/station/service/kitchen) -"lQy" = ( -/obj/structure/disposalpipe/junction{ - dir = 8; - color = "#954535" - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "purplecorner" - }, -/area/station/hallway/primary/aft/east) "lQB" = ( /obj/machinery/light{ dir = 8 @@ -59393,6 +59572,7 @@ icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/hallway/primary/starboard/south) "lRb" = ( @@ -60288,14 +60468,23 @@ /obj/structure/dispenser/oxygen, /turf/simulated/floor/plating, /area/station/hallway/primary/starboard/north) +"mfZ" = ( +/obj/structure/disposalpipe/segment/corner{ + dir = 4 + }, +/obj/effect/turf_decal/delivery/red, +/turf/simulated/floor/plasteel{ + icon_state = "darkpurple" + }, +/area/station/science/robotics) "mgu" = ( /obj/docking_port/stationary{ dir = 4; - dwidth = 15; + dwidth = 16; height = 21; id = "emergency_home"; name = "emergency evac bay"; - width = 33 + width = 41 }, /turf/space, /area/space) @@ -60579,6 +60768,7 @@ dir = 4 }, /obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/disposal/east) "mlM" = ( @@ -60599,13 +60789,12 @@ }, /area/station/service/barber) "mml" = ( -/obj/structure/window/reinforced/polarized, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -61878,6 +62067,9 @@ /obj/structure/chair/sofa/corp{ dir = 1 }, +/obj/machinery/barsign{ + pixel_y = -32 + }, /turf/simulated/floor/carpet, /area/station/hallway/primary/port/east) "mJX" = ( @@ -62113,6 +62305,9 @@ /area/station/hallway/spacebridge/cargocom) "mOb" = ( /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/hallway/primary/starboard/south) "mOf" = ( @@ -62181,6 +62376,10 @@ /area/station/maintenance/electrical_shop) "mPu" = ( /obj/structure/table/wood/poker, +/obj/effect/spawner/lootdrop/maintenance, +/obj/machinery/barsign{ + pixel_y = 32 + }, /turf/simulated/floor/wood{ icon_state = "wood-broken" }, @@ -62335,6 +62534,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/hallway/primary/starboard/south) "mSq" = ( @@ -62518,6 +62718,7 @@ pixel_x = -32 }, /obj/effect/spawner/random_spawners/dirt_often, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry/north) "mUe" = ( @@ -62942,6 +63143,14 @@ icon_state = "redyellowfull" }, /area/station/service/bar) +"nbj" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/science/robotics) "nbn" = ( /obj/machinery/alarm/directional/east, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -63160,10 +63369,6 @@ }, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry/north) -"neV" = ( -/obj/structure/closet/crate, -/turf/simulated/floor/plating/asteroid/ancient, -/area/station/maintenance/port) "nfb" = ( /obj/structure/table/glass, /obj/item/storage/box/syringes, @@ -63465,6 +63670,9 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "purplecorner" @@ -63484,6 +63692,9 @@ icon_state = "0-2" }, /obj/effect/turf_decal/stripes/end, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/medical/chemistry) "nkv" = ( @@ -63932,6 +64143,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/simulated/floor/plating, /area/station/engineering/tech_storage) "nta" = ( @@ -64104,6 +64316,15 @@ icon_state = "whiteblue" }, /area/station/medical/storage/secondary) +"nvu" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/science/robotics) "nvv" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -64244,6 +64465,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "purplecorner" @@ -64948,6 +65172,9 @@ }, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "nKC" = ( @@ -65198,10 +65425,12 @@ /area/station/hallway/primary/central/east) "nOM" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plasteel/white, /area/station/science/robotics) "nON" = ( @@ -65217,7 +65446,6 @@ /turf/simulated/wall, /area/station/hallway/primary/aft/west) "nOU" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance/external{ name = "External Airlock Access" }, @@ -65237,6 +65465,14 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/port2) +"nOX" = ( +/obj/structure/disposalpipe/segment/corner{ + dir = 1 + }, +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance/two, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "nPo" = ( /turf/simulated/floor/plasteel{ dir = 5; @@ -65464,21 +65700,16 @@ /area/station/maintenance/port2) "nTV" = ( /obj/structure/table, -/obj/item/storage/toolbox/mechanical, -/obj/item/storage/toolbox/electrical{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/item/multitool, -/obj/item/multitool, -/obj/item/flash/synthetic, -/obj/item/flash/synthetic, -/obj/item/flash/synthetic, -/obj/item/flash/synthetic, -/obj/item/flash/synthetic, -/obj/item/flash/synthetic, -/obj/item/flash/synthetic, /obj/machinery/light, +/obj/item/radio/intercom{ + name = "custom placement"; + pixel_y = -28 + }, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high/plus, +/obj/item/stock_parts/cell/high/plus, +/obj/item/stock_parts/cell/high/plus, +/obj/item/mecha_parts/core, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "darkpurple" @@ -66457,6 +66688,9 @@ icon_state = "4-8" }, /obj/machinery/camera/autoname, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/engine{ slowdown = -0.3 }, @@ -67098,13 +67332,6 @@ slowdown = -0.3 }, /area/station/hallway/spacebridge/engmed) -"ouB" = ( -/obj/structure/chair/office/dark, -/obj/effect/landmark/start/roboticist, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/science/robotics) "ouF" = ( /obj/structure/chair/office/dark{ dir = 1 @@ -67489,6 +67716,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/hallway/primary/starboard/south) "oBr" = ( @@ -67548,6 +67776,12 @@ slowdown = -0.3 }, /area/station/hallway/spacebridge/sercom) +"oCL" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" + }, +/area/station/maintenance/asmaint) "oCT" = ( /obj/structure/mineral_door/wood, /turf/simulated/floor/plating{ @@ -69383,12 +69617,19 @@ /turf/simulated/floor/grass, /area/station/service/hydroponics) "phx" = ( -/obj/machinery/computer/operating{ +/obj/effect/mapping_helpers/airlock/polarized, +/obj/effect/mapping_helpers/airlock/access/all/science/robotics, +/obj/machinery/door/airlock/research/glass{ + name = "Robotics Surgery" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "darkpurple" + icon_state = "dark" }, /area/station/science/robotics) "phM" = ( @@ -69918,16 +70159,6 @@ icon_state = "white" }, /area/station/science/misc_lab) -"pqq" = ( -/obj/machinery/door/airlock/multi_tile/glass{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/public/quantum/security) "pqr" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 @@ -70135,6 +70366,14 @@ }, /turf/simulated/floor/plasteel, /area/station/hallway/primary/fore/east) +"ptL" = ( +/obj/structure/disposalpipe/junction/reversed{ + dir = 8 + }, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" + }, +/area/station/maintenance/starboard) "ptP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -70426,6 +70665,7 @@ }, /obj/structure/rack, /obj/item/stack/rods, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/starboard) "pxV" = ( @@ -70512,6 +70752,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -71427,6 +71670,7 @@ /area/station/command/office/hos) "pOf" = ( /obj/structure/closet/firecloset/full, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/fsmaint2) "pOk" = ( @@ -71655,8 +71899,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) "pRd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; +/obj/structure/disposalpipe/junction{ + dir = 8; color = "#954535" }, /obj/effect/spawner/random_spawners/dirt_often, @@ -72006,6 +72250,9 @@ d2 = 4; icon_state = "1-4" }, +/obj/structure/disposalpipe/segment/corner{ + dir = 1 + }, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "pXh" = ( @@ -72551,7 +72798,10 @@ }, /area/station/hallway/primary/central/north) "qeq" = ( -/turf/simulated/mineral/ancient/outer, +/obj/item/kirbyplants/plant21, +/turf/simulated/floor/plasteel{ + icon_state = "darkpurple" + }, /area/station/science/robotics) "qet" = ( /obj/structure/plasticflaps{ @@ -72693,6 +72943,9 @@ d2 = 4; icon_state = "2-4" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/engine{ slowdown = -0.3 }, @@ -73357,6 +73610,27 @@ icon_state = "darkred" }, /area/station/security/permabrig) +"qpt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/newscaster{ + pixel_y = 28; + name = "north bump" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "purplecorner" + }, +/area/station/hallway/primary/aft/east) "qpu" = ( /obj/structure/cable/orange{ d1 = 1; @@ -74660,6 +74934,17 @@ }, /turf/simulated/floor/carpet/green, /area/station/service/library) +"qKH" = ( +/obj/machinery/camera{ + c_tag = "Robotics Surgery"; + dir = 8; + network = list("SS13","RD") + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkpurple" + }, +/area/station/science/robotics) "qKK" = ( /obj/machinery/door/airlock/maintenance{ name = "Fore Asteroid Maintenance Access" @@ -75135,6 +75420,18 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) +"qSB" = ( +/obj/structure/table/reinforced, +/obj/item/tank/internals/anesthetic, +/obj/item/clothing/mask/breath/medical, +/obj/item/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/science/robotics) "qSK" = ( /turf/simulated/floor/plasteel, /area/station/public/locker) @@ -75194,6 +75491,7 @@ /obj/machinery/light/small{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry/north) "qUt" = ( @@ -75402,6 +75700,15 @@ icon_state = "redcorner" }, /area/station/security/main) +"qYo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" + }, +/area/station/maintenance/starboard) "qYD" = ( /obj/item/pen, /obj/item/storage/firstaid/regular, @@ -75672,6 +75979,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 6 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/hallway/primary/starboard/south) "rez" = ( @@ -75704,6 +76012,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry/north) "rfv" = ( @@ -75903,6 +76212,9 @@ dir = 4; pixel_y = 40 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "purplecorner" @@ -76374,6 +76686,9 @@ pixel_y = 28; name = "custom placement" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "purplecorner" @@ -76558,6 +76873,7 @@ /area/station/public/quantum/cargo) "rxg" = ( /obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/apmaint) "rxi" = ( @@ -76740,16 +77056,7 @@ /turf/simulated/floor/carpet/black, /area/station/command/office/captain) "rAM" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/bodybags{ - pixel_x = -4; - pixel_y = -4 - }, -/obj/item/storage/box/masks, -/obj/item/storage/box/gloves{ - pixel_x = 4; - pixel_y = 4 - }, +/obj/structure/closet/secure_closet/roboticist, /turf/simulated/floor/plasteel{ icon_state = "darkpurple" }, @@ -77488,6 +77795,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "purplecorner" @@ -78367,6 +78677,9 @@ "sde" = ( /obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "sdo" = ( @@ -78478,6 +78791,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "purplecorner" @@ -78498,6 +78814,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/engine{ slowdown = -0.3 }, @@ -78645,20 +78964,31 @@ }, /area/station/turret_protected/aisat/interior) "shk" = ( -/obj/item/clothing/mask/breath/medical, -/obj/item/tank/internals/anesthetic, -/obj/item/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; - name = "Surgery Cleaner" +/obj/structure/table, +/obj/item/storage/firstaid{ + name = "first-aid kit (empty)" }, -/obj/machinery/button/windowtint{ +/obj/item/storage/firstaid{ + name = "first-aid kit (empty)" + }, +/obj/item/storage/firstaid{ + name = "first-aid kit (empty)" + }, +/obj/item/healthanalyzer, +/obj/item/healthanalyzer, +/obj/item/reagent_containers/glass/bucket, +/obj/item/reagent_containers/glass/bucket, +/obj/item/assembly/prox_sensor, +/obj/item/assembly/prox_sensor, +/obj/item/assembly/prox_sensor, +/obj/item/assembly/prox_sensor, +/obj/item/assembly/prox_sensor, +/obj/item/assembly/prox_sensor, +/obj/machinery/firealarm{ dir = 1; - pixel_y = -24 + pixel_y = -24; + name = "south bump" }, -/obj/structure/window/reinforced/polarized{ - dir = 8 - }, -/obj/structure/table/reinforced, /turf/simulated/floor/plasteel{ icon_state = "darkpurple" }, @@ -78779,6 +79109,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "siJ" = ( @@ -79146,6 +79479,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/power/apc/directional/west, /obj/structure/cable, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry/north) "sqX" = ( @@ -80425,13 +80759,6 @@ slowdown = -0.3 }, /area/station/hallway/spacebridge/sercom) -"sLj" = ( -/obj/structure/table/reinforced, -/obj/item/storage/surgical_tray, -/turf/simulated/floor/plasteel{ - icon_state = "darkpurple" - }, -/area/station/science/robotics) "sLD" = ( /obj/structure/cable/orange{ d1 = 1; @@ -80441,6 +80768,18 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"sLE" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "sLH" = ( /obj/machinery/mech_bay_recharge_port{ dir = 2 @@ -80622,11 +80961,11 @@ /area/station/service/kitchen) "sOk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/spawner/random_spawners/dirt_frequent, /obj/structure/disposalpipe/segment{ dir = 4; color = "#954535" }, -/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "purplecorner" @@ -81492,6 +81831,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -81712,6 +82054,9 @@ d2 = 4; icon_state = "2-4" }, +/obj/structure/disposalpipe/segment/corner{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -81817,15 +82162,6 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/port/east) -"tiG" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "darkpurple" - }, -/area/station/science/robotics) "tiI" = ( /obj/structure/disposalpipe/segment/corner, /turf/simulated/floor/plasteel{ @@ -82142,6 +82478,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/engine{ slowdown = -0.3 }, @@ -82995,6 +83334,18 @@ /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/station/engineering/break_room/secondary) +"tBO" = ( +/obj/effect/landmark/start/roboticist, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/science/robotics) "tBR" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -83059,6 +83410,13 @@ /obj/machinery/atmospherics/portable/canister/air, /turf/simulated/floor/plating, /area/station/maintenance/port2) +"tCF" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/secondary/entry/north) "tCV" = ( /obj/item/kirbyplants/plant22, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -83246,6 +83604,7 @@ /obj/structure/railing{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/space, /area/station/hallway/spacebridge/dockmed) "tFK" = ( @@ -83648,6 +84007,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "purplecorner" @@ -84118,38 +84480,6 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/fore/north) -"tXf" = ( -/obj/structure/window/reinforced/polarized, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24; - name = "east bump" - }, -/obj/structure/table, -/obj/item/storage/firstaid{ - name = "first-aid kit (empty)" - }, -/obj/item/reagent_containers/glass/bucket, -/obj/item/reagent_containers/glass/bucket, -/obj/item/healthanalyzer, -/obj/item/healthanalyzer, -/obj/item/storage/firstaid{ - name = "first-aid kit (empty)" - }, -/obj/item/storage/firstaid{ - name = "first-aid kit (empty)" - }, -/obj/item/assembly/prox_sensor, -/obj/item/assembly/prox_sensor, -/obj/item/assembly/prox_sensor, -/obj/item/assembly/prox_sensor, -/obj/item/assembly/prox_sensor, -/obj/item/assembly/prox_sensor, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "darkpurple" - }, -/area/station/science/robotics) "tXA" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, @@ -84331,6 +84661,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment/corner{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -85326,8 +85659,8 @@ }, /area/station/hallway/spacebridge/dockmed) "upM" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 +/obj/structure/disposalpipe/segment{ + color = "#954535" }, /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ @@ -85427,9 +85760,6 @@ name = "Engine Room" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -85505,9 +85835,7 @@ }, /area/station/maintenance/port) "uso" = ( -/obj/structure/disposalpipe/junction{ - dir = 1 - }, +/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" @@ -85719,6 +86047,9 @@ d2 = 8; icon_state = "1-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "uwc" = ( @@ -86224,7 +86555,8 @@ /area/station/engineering/control) "uCU" = ( /obj/machinery/disposal/deliveryChute{ - dir = 8 + dir = 8; + name = "cadaver delivery chute" }, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -86516,7 +86848,10 @@ dir = 4 }, /obj/structure/disposalpipe/segment{ - color = "#954535" + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Research Asteroid Hallway 4" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -86574,6 +86909,16 @@ /obj/structure/falsewall/rock_ancient, /turf/simulated/floor/plasteel, /area/station/public/locker) +"uJJ" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkpurple" + }, +/area/station/science/robotics) "uJT" = ( /turf/simulated/wall, /area/station/maintenance/gambling_den) @@ -87203,10 +87548,8 @@ /turf/simulated/floor/plating, /area/station/command/bridge) "uSc" = ( +/obj/structure/disposalpipe/segment, /obj/structure/chair/stool, -/obj/structure/disposalpipe/junction{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -87878,10 +88221,6 @@ /obj/structure/disposalpipe/junction/reversed, /turf/simulated/floor/plating, /area/station/maintenance/starboard) -"vbu" = ( -/obj/structure/closet, -/turf/simulated/floor/plating/asteroid/ancient, -/area/station/maintenance/fpmaint) "vbD" = ( /obj/machinery/atmospherics/pipe/manifold/hidden, /turf/simulated/floor/plasteel{ @@ -88115,6 +88454,14 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/port) +"veR" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/aft/east) "vfc" = ( /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance"; @@ -88227,6 +88574,7 @@ }, /obj/effect/turf_decal/stripes/line, /obj/effect/spawner/random_spawners/dirt_often, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -88796,6 +89144,11 @@ icon_state = "whitegreenfull" }, /area/station/public/quantum/docking) +"vqM" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/grille, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "vqN" = ( /obj/machinery/door/airlock/glass{ id_tag = "magistrateofficedoor" @@ -89228,10 +89581,21 @@ /turf/simulated/floor/plating, /area/station/maintenance/fore2) "vwo" = ( -/obj/item/kirbyplants/plant21, -/obj/machinery/light{ - dir = 1 +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 5 }, +/obj/item/multitool, +/obj/item/multitool, +/obj/item/flash/synthetic, +/obj/item/flash/synthetic, +/obj/item/flash/synthetic, +/obj/item/flash/synthetic, +/obj/item/flash/synthetic, +/obj/item/flash/synthetic, +/obj/item/flash/synthetic, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkpurple" @@ -89319,13 +89683,6 @@ }, /turf/simulated/floor/plating, /area/station/hallway/primary/aft/west) -"vxS" = ( -/obj/structure/closet/secure_closet/roboticist, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "darkpurple" - }, -/area/station/science/robotics) "vxY" = ( /obj/structure/chair/barber{ dir = 8 @@ -90906,6 +91263,9 @@ /obj/effect/turf_decal/caution/red{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -91123,6 +91483,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, @@ -91510,6 +91873,15 @@ }, /turf/simulated/floor/plasteel, /area/station/science/storage) +"whZ" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/machine, +/obj/item/storage/firstaid/machine, +/obj/item/robotanalyzer, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/science/robotics) "wig" = ( /obj/structure/cable/orange{ d1 = 1; @@ -91846,6 +92218,9 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/spawner/random_spawners/dirt_frequent, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -92092,6 +92467,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/hallway/primary/starboard/south) "wpN" = ( @@ -92378,10 +92754,10 @@ /area/station/medical/reception) "wtx" = ( /obj/machinery/hologram/holopad, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /turf/simulated/floor/plasteel{ @@ -92488,11 +92864,11 @@ /turf/simulated/floor/engine, /area/station/science/xenobiology) "wuC" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/structure/chair/office/dark{ dir = 1 }, /obj/effect/landmark/start/roboticist, -/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -92555,6 +92931,26 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/station/security/brig) +"wvm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "purplecorner" + }, +/area/station/hallway/primary/aft/east) "wvp" = ( /turf/simulated/floor/plasteel{ icon_state = "white" @@ -92696,6 +93092,25 @@ /obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel, /area/station/security/permabrig) +"wwr" = ( +/obj/item/storage/box/bodybags{ + pixel_x = -4; + pixel_y = -4 + }, +/obj/structure/table/reinforced, +/obj/item/storage/box/masks, +/obj/item/storage/box/gloves{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkpurple" + }, +/area/station/science/robotics) "wwy" = ( /obj/structure/cable{ d1 = 4; @@ -93027,6 +93442,31 @@ icon_state = "redcorner" }, /area/station/hallway/primary/fore/west) +"wAm" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/deliveryChute{ + dir = 8; + name = "cadaver delivery chute" + }, +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/obj/effect/mapping_helpers/airlock/windoor/access/all/science/robotics{ + dir = 8 + }, +/obj/machinery/door/window/classic/normal{ + dir = 8; + name = "cadaver delivery chute" + }, +/obj/effect/turf_decal/delivery/red, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkpurple" + }, +/area/station/science/robotics) "wAo" = ( /obj/structure/disposalpipe/segment/corner{ dir = 4 @@ -93217,6 +93657,7 @@ /obj/machinery/light/small{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/hallway/primary/starboard/south) "wCU" = ( @@ -93450,7 +93891,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/port) "wGS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel/white, /area/station/science/robotics/chargebay) "wGW" = ( @@ -93603,6 +94044,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "wJe" = ( @@ -93746,6 +94190,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "purplecorner" @@ -94085,12 +94532,6 @@ temperature = 80 }, /area/station/science/xenobiology) -"wRa" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/science/robotics) "wRo" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -94519,6 +94960,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, @@ -95118,6 +95562,7 @@ "xiV" = ( /obj/structure/closet/emcloset, /obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/port) "xja" = ( @@ -95277,18 +95722,6 @@ "xla" = ( /turf/simulated/wall/r_wall, /area/station/security/prison/cell_block/A) -"xlF" = ( -/obj/structure/window/reinforced/polarized, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/science/robotics) "xlM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/light{ @@ -95847,10 +96280,6 @@ /obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/starboard) -"xxC" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plasteel/white, -/area/station/science/robotics) "xxK" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -96071,6 +96500,12 @@ icon_state = "dark" }, /area/station/security/warden) +"xzU" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/science/robotics) "xAk" = ( /obj/machinery/light{ dir = 1 @@ -96086,6 +96521,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/engine{ slowdown = -0.3 }, @@ -96109,10 +96547,10 @@ /turf/simulated/floor/engine, /area/station/science/misc_lab) "xAR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, /turf/simulated/floor/plasteel/white, @@ -96918,22 +97356,6 @@ }, /turf/simulated/floor/carpet/royalblack, /area/station/command/office/captain) -"xNF" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/polarized, -/obj/machinery/door/window/classic/normal{ - dir = 8; - name = "Robotics Surgery" - }, -/obj/effect/mapping_helpers/airlock/windoor/access/any/science/robotics{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/science/robotics) "xNT" = ( /obj/machinery/alarm/directional/north, /turf/simulated/floor/plasteel{ @@ -97140,6 +97562,17 @@ icon_state = "arrival" }, /area/station/hallway/secondary/entry/east) +"xRf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/science/robotics) "xRh" = ( /obj/machinery/economy/vending/cola, /turf/simulated/floor/plasteel{ @@ -98348,7 +98781,8 @@ /area/station/public/locker) "ylX" = ( /obj/machinery/disposal/deliveryChute{ - dir = 8 + dir = 8; + name = "cadaver delivery chute" }, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -108722,7 +109156,7 @@ xJa xJa rUo nxA -vbu +bzh xJa cRv rNK @@ -108820,7 +109254,7 @@ vtY uCK vtY uCK -uCK +jGE vtY ccW ccW @@ -110879,7 +111313,7 @@ uCK uCK uCK uCK -uCK +bWG vtY vtY ccW @@ -111574,7 +112008,7 @@ rNK rNK pXy pXy -ccx +daz eCI aue uaW @@ -111654,7 +112088,7 @@ vtY vtY uCK uCK -neV +taQ vtY ccW rWw @@ -116440,7 +116874,7 @@ xla sZf aWA iEe -pqq +bNX ibX jzf hPy @@ -118281,7 +118715,7 @@ pkc iqL rZl mJT -iwJ +aZZ iox bjr rRc @@ -119621,9 +120055,9 @@ ccW ccW vFW jIO -xxC +oUw nOM -tiG +qWS xFn oJz jRs @@ -119879,7 +120313,7 @@ ccW jJc sOt oUw -eDf +nOM qWS heU wOH @@ -120650,11 +121084,11 @@ ccW jJc uRn wuC -aZU -uCo +nvu +nbj fXR nTV -epr +npb bXp uuV iOG @@ -120907,9 +121341,9 @@ ccW jJc vgV uCo -xlF -xNF -jhA +aZU +uCo +uCo shk npb lnY @@ -121164,11 +121598,11 @@ ccW jJc vtz uCo -bty +xRf uCo uCo rAM -hVS +epr cia ciG gPL @@ -121420,13 +121854,13 @@ ccW ccW jJc vwo -wRa +uCo mml jkk -ouB -sLj -hVS -cia +uCo +rAM +npb +qpt sWc gPL pQN @@ -121653,7 +122087,7 @@ bhO hUU sbn sbn -cMA +uJT mPu mER oWa @@ -121676,13 +122110,13 @@ ccW ccW ccW jJc -vxS -fyR -tXf -phx -jkh -kMa hVS +hVS +hVS +phx +hVS +hVS +npb cia ciG vlI @@ -121932,19 +122366,19 @@ rWw ccW ccW ccW +jJc +bgJ +qSB +whZ +xRf +uCo qeq -qeq -qeq -qeq -qeq -qeq -qeq -npb -chX +hVS +cia ciG -gPL +iOG pQN -sKh +wQl nta cGd dzs @@ -122189,14 +122623,14 @@ rWw ccW ccW ccW -ccW -ccW -ccW -ccW -ccW -dXV -dXV -dXV +jJc +auo +xzU +cpT +tBO +nbj +mfZ +dCm chY ciG fIE @@ -122446,17 +122880,17 @@ rWw ccW ccW ccW -ccW -ccW -ccW -ccW -ccW -dXV -iky -dtv +jJc +dWR +uJJ +jrk +qKH +wwr +wAm +npb uIC -gIk -lQy +ciG +gPL pQN sKh nta @@ -122703,14 +123137,14 @@ rWw ccW ccW ccW -ccW -ccW -ccW -ccW -ccW -dXV -dXV -kJM +jJc +jJc +jJc +jJc +jJc +vFW +vFW +vFW nxX irU sOk @@ -122965,9 +123399,9 @@ ccW ccW ccW ccW -ccW -ccW -fpn +izC +iky +dtv cib upM pRd @@ -123222,11 +123656,11 @@ ful ful ful ful -ccW -ccW -fpn -cia -ciG +izC +izC +kJM +jqN +veR gPL dXD pQN @@ -124257,7 +124691,7 @@ njR ciG gPL pQN -fYD +tnj clq cGd xPU @@ -125148,7 +125582,7 @@ uEU abW abW wDs -bbc +hPI rVx qLN aJp @@ -125281,7 +125715,7 @@ ful ccW ccW izC -cia +wvm ciG nWY pQN @@ -126308,7 +126742,7 @@ ccW ccW ccW ccW -izC +fpn rMW ciG gPL @@ -126565,7 +126999,7 @@ ccW ccW ccW ccW -izC +fpn iwU sWc vlI @@ -126817,11 +127251,11 @@ eLb ftr ccW ccW -ccW -ccW -ccW -ccW -ccW +rWw +rWw +rWw +rWw +rWw pQN rjL ciG @@ -130134,7 +130568,7 @@ bWU bXA bYe bDR -kYJ +kyo oqB cRo kzf @@ -137871,9 +138305,9 @@ kOL fJd kwQ hjb -imG -vRX -oxO +ldB +oCL +aFQ tZs dbg sFj @@ -138640,7 +139074,7 @@ aXn aXn aXn aXn -yep +bNc imG gge vWF @@ -138897,7 +139331,7 @@ aXn aXn aXn aXn -yep +bNc jfo wLr vWF @@ -139154,7 +139588,7 @@ wLr mpB mpB ceK -oga +hUh cfH vWF vWF @@ -139411,7 +139845,7 @@ cdF wVD mpB foP -yep +bNc vWF tWC tWC @@ -139668,7 +140102,7 @@ wGZ xZK wLr imG -oga +hUh dYD tWC pSE @@ -140182,7 +140616,7 @@ ftG ldH olg jrw -lhz +bTM wcl tWC ghv @@ -140439,7 +140873,7 @@ mpB mCg mpB jsa -jrw +lDd fFx tWC jZQ @@ -143771,15 +144205,15 @@ dSV cEi jnH kis -dxM -dxM +tCF +tCF fIL khH khH cvq -dxM +tCF cJW -dxM +tCF vgU tgU vVP @@ -145536,7 +145970,7 @@ uKR xTL bIK bCg -vHH +mqf ifq aZN aZM @@ -146050,7 +146484,7 @@ xTL xTL adV bCg -wyL +arP bMA kps ukC @@ -146058,9 +146492,9 @@ nZf rKw rKw rkl -gjb -aZM -aZM +jeX +jeX +nOX aZM aZM fMl @@ -146307,19 +146741,19 @@ dBL fSH bIM bCg -vHH -wyL -vHH -utF -wyL -bwX -gSQ -gSQ +ovW +ioH +jeX +dOh +ioH +iIc +iIc +iIc +gjb +gFg xAV aZM aZM -aZM -aZM fMl fMl aZu @@ -146572,9 +147006,9 @@ gFg gFg gFg gSQ -ovW -jeX -fXv +xAV +gFg +gus fXv eQu aZM @@ -146830,9 +147264,9 @@ jVQ jVQ jVQ hsJ -gSQ -gSQ -gSQ +iIc +iIc +hNt xAV aZM aZM @@ -146851,7 +147285,7 @@ iJa imG imG imG -imG +gge aXn imG vRX @@ -147089,7 +147523,7 @@ yfZ yfZ yfZ yfZ -gSQ +xuJ xAV aZM aZM @@ -147346,7 +147780,7 @@ yfZ xNt cGL yfZ -gSQ +xuJ xAV aZM aZM @@ -147603,7 +148037,7 @@ yfZ vrs moY yfZ -wyL +arP xAV aZM aZM @@ -147860,7 +148294,7 @@ dRx eNa azO yfZ -gFg +xAV mqf aZM aZM @@ -148117,7 +148551,7 @@ xWf wvp rki yfZ -gSQ +xuJ tvJ aZN aZM @@ -148631,7 +149065,7 @@ rTQ wvp iIM yfZ -vHH +mqf xAV iSn aZM @@ -148876,8 +149310,8 @@ xeq cdI uhF owY -gqG -jOU +tKE +tKE fLp cnW gxB @@ -148888,7 +149322,7 @@ wKw oJu jrX yfZ -gSQ +xuJ xAV aZN aZM @@ -149145,7 +149579,7 @@ hoX qMZ yfZ yfZ -gSQ +xuJ vTI aZM aZM @@ -149402,7 +149836,7 @@ jDW jyU yfZ xIU -gSQ +xuJ tvJ aZM aZM @@ -149659,7 +150093,7 @@ qwe hUF yfZ gFg -gSQ +xuJ tzN iSn aZM @@ -150687,7 +151121,7 @@ jBh vHH kKp itf -ivK +sLE mqf aZN aZM @@ -151201,7 +151635,7 @@ vHH swV bbw itf -dCS +sWr xAV gFg gFg @@ -151458,10 +151892,10 @@ itf itf itf itf -dCS +sWr xAV ozK -gFg +aUU wyL jeB hpB @@ -151710,12 +152144,12 @@ mqf aFh jkT bNP -vFQ -vFQ -vFQ -vFQ -vFQ -imU +bJb +bJb +bJb +bJb +bJb +lWu xAV aLH aZM @@ -151966,7 +152400,7 @@ bNL tvJ xjx vbn -lux +bDk lux lux uAi @@ -152223,7 +152657,7 @@ itf mqf bPZ amG -gFg +xAV gSQ itf itf @@ -152480,8 +152914,8 @@ cQy tvJ trc iOw -itf -gFg +xAV +aUU itf gFg gSQ @@ -152737,7 +153171,7 @@ mOC frg lWu gSQ -gSQ +xuJ itf itf gSQ @@ -152987,14 +153421,14 @@ gGb biN ivK gFg -jOE +ptL lye bZq fXv iOw gSQ gFg -gSQ +xuJ itf gSQ gFg @@ -153244,14 +153678,14 @@ bkH biN bcV itf -itf -qIV -xAV -itf -gSQ -gSQ -gFg -gFg +jOE +iun +qYo +vqM +iIc +iIc +lux +egq gSQ rtW itf diff --git a/_maps/map_files/stations/deltastation.dmm b/_maps/map_files/stations/deltastation.dmm index e890932b2be..d03d95c5585 100644 --- a/_maps/map_files/stations/deltastation.dmm +++ b/_maps/map_files/stations/deltastation.dmm @@ -2819,7 +2819,7 @@ /area/station/maintenance/fore) "aqv" = ( /obj/structure/table/wood, -/obj/structure/sign/barsign{ +/obj/machinery/barsign{ pixel_y = 32 }, /obj/item/wrench, @@ -4880,7 +4880,7 @@ /turf/simulated/floor/engine, /area/station/engineering/controlroom) "avL" = ( -/obj/structure/sign/barsign{ +/obj/machinery/barsign{ pixel_y = 32 }, /turf/simulated/floor/plasteel{ @@ -9070,7 +9070,7 @@ /area/station/service/bar) "aGA" = ( /obj/structure/table/wood, -/obj/structure/sign/barsign{ +/obj/machinery/barsign{ pixel_y = 32 }, /obj/machinery/chem_dispenser/soda{ @@ -10845,7 +10845,6 @@ /area/station/maintenance/incinerator) "aLk" = ( /obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -11828,7 +11827,6 @@ }, /area/station/service/bar) "aOd" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 }, @@ -54205,7 +54203,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/sign/barsign{ +/obj/machinery/barsign{ pixel_y = 32 }, /turf/simulated/floor/plating, @@ -62697,17 +62695,6 @@ }, /turf/simulated/floor/carpet/blue, /area/station/command/office/blueshield) -"dNS" = ( -/obj/docking_port/stationary{ - dir = 4; - dwidth = 15; - height = 21; - id = "emergency_home"; - name = "emergency evac bay"; - width = 33 - }, -/turf/space, -/area/space) "dNZ" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -64687,12 +64674,6 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/central) -"dUY" = ( -/obj/machinery/light, -/obj/machinery/alarm/directional/south, -/obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel, -/area/station/hallway/secondary/exit) "dUZ" = ( /obj/machinery/light, /obj/machinery/status_display{ @@ -66935,6 +66916,17 @@ icon_state = "vault" }, /area/station/turret_protected/ai) +"eKm" = ( +/obj/docking_port/stationary{ + dir = 4; + dwidth = 16; + height = 21; + id = "emergency_home"; + name = "emergency evac bay"; + width = 41 + }, +/turf/space, +/area/space) "eKu" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -70042,9 +70034,6 @@ /area/station/command/office/hop) "gFa" = ( /obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/turf_decal/delivery, /obj/structure/disposalpipe/segment{ dir = 4 @@ -73775,10 +73764,6 @@ icon_state = "bar" }, /area/station/service/kitchen) -"iVe" = ( -/obj/effect/spawner/airlock, -/turf/simulated/wall, -/area/station/service/chapel/office) "iVg" = ( /obj/machinery/economy/atm/directional/west, /turf/simulated/floor/plasteel{ @@ -76873,6 +76858,10 @@ icon_state = "neutralfull" }, /area/station/engineering/atmos) +"kQP" = ( +/obj/effect/spawner/airlock, +/turf/simulated/wall, +/area/station/hallway/secondary/exit) "kRp" = ( /obj/structure/cable{ d1 = 1; @@ -82625,15 +82614,6 @@ }, /area/station/security/prison/cell_block) "ont" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -84289,6 +84269,12 @@ icon_state = "darkred" }, /area/station/security/main) +"pib" = ( +/obj/machinery/light, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/alarm/directional/south, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/exit) "pjk" = ( /turf/simulated/floor/engine, /area/station/science/test_chamber) @@ -136445,7 +136431,7 @@ dUQ dYU dIx abj -aaa +abj aaa aaa aaa @@ -136700,7 +136686,8 @@ dIx dIx dIx dIx -iVe +dIx +kQP abj aaa aaa @@ -136744,7 +136731,6 @@ aaa aaa aaa aaa -aaa "} (145,1,1) = {" aaa @@ -136945,6 +136931,7 @@ dLA dMo dKP dKP +dKP dOv dPb eBl @@ -137001,7 +136988,6 @@ aaa aaa aaa aaa -aaa "} (146,1,1) = {" aaa @@ -137203,6 +137189,7 @@ sZI dPM dPM dPM +dPM rCw dPM dPM @@ -137258,7 +137245,6 @@ aaa aaa aaa aaa -aaa "} (147,1,1) = {" aaa @@ -137460,6 +137446,7 @@ hVf dKo dKo dKo +dKo rvx dKo dKo @@ -137515,7 +137502,6 @@ aaa aaa aaa aaa -aaa "} (148,1,1) = {" aaa @@ -137714,6 +137700,7 @@ cYk cYk cYk dbR +cYk dbV ddw dNa @@ -137772,7 +137759,6 @@ aaa aaa aaa aaa -aaa "} (149,1,1) = {" aaa @@ -137971,6 +137957,7 @@ dKo dKo dKo hVf +dKo dNb dNN dOw @@ -138029,7 +138016,6 @@ aaa aaa aaa aaa -aaa "} (150,1,1) = {" aaa @@ -138228,6 +138214,7 @@ dKo gkk dKo hVf +dKo dNc dNO dXF @@ -138286,7 +138273,6 @@ aaa aaa aaa aaa -aaa "} (151,1,1) = {" aaa @@ -138485,6 +138471,7 @@ dKo dKo dKo hVf +dKo dNb dNP dOw @@ -138543,7 +138530,6 @@ aaa aaa aaa aaa -aaa "} (152,1,1) = {" aaa @@ -138742,6 +138728,7 @@ dKp dKp dKp dIh +dKo dOu dNQ dOx @@ -138755,7 +138742,7 @@ joI dNc dNQ dOw -dUY +pib dIH abj aaa @@ -138800,7 +138787,6 @@ aaa aaa aaa aaa -aaa "} (153,1,1) = {" aaa @@ -138999,6 +138985,7 @@ wgY rIb rIb pJE +dKo dNb bGr dOw @@ -139057,7 +139044,6 @@ aaa aaa aaa aaa -aaa "} (154,1,1) = {" aaa @@ -139259,6 +139245,7 @@ iFB iqq iqq iqq +iqq uFa sbt sDb @@ -139282,7 +139269,6 @@ aaa aaa aaa aaa -aaa aaZ aaa aaa @@ -139515,6 +139501,7 @@ nIs ngE kuJ kuJ +kuJ tJT dXn dXn @@ -139571,7 +139558,6 @@ aaa aaa aaa aaa -aaa "} (156,1,1) = {" aaa @@ -139772,6 +139758,7 @@ dTJ dMs jac jac +jac vSW scA ajq @@ -139828,7 +139815,6 @@ aaa aaa aaa aaa -aaa "} (157,1,1) = {" aaa @@ -140030,6 +140016,7 @@ dVp dKp dKp dKp +dKp pGr rev vJu @@ -140085,7 +140072,6 @@ aaa aaa aaa aaa -aaa "} (158,1,1) = {" aaa @@ -140287,6 +140273,7 @@ ulH dTy dTy dTy +dTy rmq msT dKP @@ -140342,7 +140329,6 @@ aaa aaa aaa aaa -aaa "} (159,1,1) = {" aaa @@ -140543,6 +140529,7 @@ kpd dHO evE evE +evE tJT dKQ jpk @@ -140599,7 +140586,6 @@ aaa aaa aaa aaa -aaa "} (160,1,1) = {" aaa @@ -140800,6 +140786,7 @@ abj abj abj abj +abj pjC dKP pjC @@ -140856,7 +140843,6 @@ aaa aaa aaa aaa -aaa "} (161,1,1) = {" aaa @@ -141057,6 +141043,7 @@ aaa aaa aaa aaa +aaa pjC dKQ pjC @@ -141113,7 +141100,6 @@ aaa aaa aaa aaa -aaa "} (162,1,1) = {" aaa @@ -141317,8 +141303,8 @@ aaa aaa aaa aaa -dNS aaa +eKm aaa aaa aaa diff --git a/_maps/map_files/stations/metastation.dmm b/_maps/map_files/stations/metastation.dmm index e45238c442c..2297a0302b6 100644 --- a/_maps/map_files/stations/metastation.dmm +++ b/_maps/map_files/stations/metastation.dmm @@ -6218,10 +6218,6 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/control) -"aHe" = ( -/obj/structure/sign/barsign, -/turf/simulated/wall, -/area/station/service/bar) "aHg" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -10928,7 +10924,7 @@ /area/station/public/locker) "aVT" = ( /obj/structure/table, -/obj/item/clothing/head/soft/grey{ +/obj/item/clothing/head/soft{ pixel_x = -2; pixel_y = 3 }, @@ -42602,11 +42598,11 @@ "cZp" = ( /obj/docking_port/stationary{ dir = 2; - dwidth = 15; + dwidth = 16; height = 21; id = "emergency_home"; name = "emergency evac bay"; - width = 33 + width = 41 }, /turf/space, /area/space) @@ -71465,20 +71461,6 @@ /obj/effect/landmark/damageturf, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) -"oDZ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/port) "oEe" = ( /obj/machinery/atmospherics/trinary/filter{ dir = 4; @@ -86653,6 +86635,14 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/xenobio_south) +"uXN" = ( +/obj/machinery/barsign{ + pixel_y = -32 + }, +/turf/simulated/floor/plasteel{ + icon_state = "redcorner" + }, +/area/station/hallway/primary/starboard) "uYf" = ( /obj/machinery/light{ dir = 8 @@ -115249,7 +115239,7 @@ nBj cgt cdT wfa -oDZ +bqQ cCj cdT kNJ @@ -127048,8 +127038,8 @@ bjp bez vtx boY -bqA -aHe +uXN +bsp ded bEv bEv diff --git a/_maps/map_files/templates/biodome_beach.dmm b/_maps/map_files/templates/biodome_beach.dmm index 8fcff913987..51eea2b9413 100644 --- a/_maps/map_files/templates/biodome_beach.dmm +++ b/_maps/map_files/templates/biodome_beach.dmm @@ -491,10 +491,6 @@ }, /turf/simulated/floor/beach/sand, /area/ruin/powered/beach) -"Ds" = ( -/obj/structure/sign/barsign, -/turf/simulated/wall/mineral/sandstone, -/area/ruin/powered/beach) "Ec" = ( /obj/machinery/door/airlock/sandstone{ name = "Beach Access" @@ -566,6 +562,12 @@ }, /turf/simulated/floor/pod, /area/ruin/powered/beach) +"Yz" = ( +/obj/machinery/barsign{ + pixel_y = 32 + }, +/turf/simulated/floor/beach/sand, +/area/ruin/powered/beach) (1,1,1) = {" aa @@ -1087,8 +1089,8 @@ aC aC aC JF -Ds -bE +aj +Yz bE bE bE diff --git a/code/__DEFINES/antag_defines.dm b/code/__DEFINES/antag_defines.dm index fe136abd200..24cfb19d97e 100644 --- a/code/__DEFINES/antag_defines.dm +++ b/code/__DEFINES/antag_defines.dm @@ -47,7 +47,7 @@ GLOBAL_LIST(contractors) /// Denotes that this power can not be obtained normally. Primarily used for base types such as [/datum/action/changeling/weapon]. #define CHANGELING_UNOBTAINABLE_POWER 3 -#define CHANGELING_FAKEDEATH_TIME 50 SECONDS +#define CHANGELING_FAKEDEATH_TIME 50 SECONDS #define CHANGELING_ABSORB_RECENT_SPEECH 8 //The amount of recent spoken lines to gain on absorbing a mob /** @@ -62,9 +62,6 @@ GLOBAL_LIST(contractors) */ #define PULSEDEMON_SOURCE_DRAIN_INVALID (-1) -/proc/ischangeling(mob/M) // TODO: Someone please convert these to proper defines some day. - return M.mind?.has_antag_datum(/datum/antagonist/changeling) +#define IS_CHANGELING(mob) (isliving(mob) && mob?:mind?:has_antag_datum(/datum/antagonist/changeling)) -// Helper proc that determines if a mob is a mindslave. -/proc/ismindslave(mob/living/carbon/human/H) - return istype(H) && H.mind.has_antag_datum(/datum/antagonist/mindslave, FALSE) +#define IS_MINDSLAVE(mob) (ishuman(mob) && mob?:mind?:has_antag_datum(/datum/antagonist/mindslave, FALSE)) diff --git a/code/__DEFINES/clothing_defines.dm b/code/__DEFINES/clothing_defines.dm index ed5a97ea16c..d0380ede710 100644 --- a/code/__DEFINES/clothing_defines.dm +++ b/code/__DEFINES/clothing_defines.dm @@ -37,6 +37,10 @@ #define SLOT_HUD_COLLAR 23 #define SLOT_HUD_AMOUNT 23 +// Boolean defines for hands +#define HAND_BOOL_RIGHT 0 +#define HAND_BOOL_LEFT 1 + // accessory slots #define ACCESSORY_SLOT_DECOR 1 #define ACCESSORY_SLOT_UTILITY 2 diff --git a/code/__DEFINES/combat_defines.dm b/code/__DEFINES/combat_defines.dm index ee2ec5345af..01e0c8990c7 100644 --- a/code/__DEFINES/combat_defines.dm +++ b/code/__DEFINES/combat_defines.dm @@ -157,3 +157,10 @@ #define STATUS_EFFECT_CONSTANT * 20 #define IS_HORIZONTAL(x) x.body_position + +/// Compatible firemode is in the gun. Wait until it's held in the user hands. +#define AUTOFIRE_STAT_IDLE (1<<0) +/// Gun is active and in the user hands. Wait until user does a valid click. +#define AUTOFIRE_STAT_ALERT (1<<1) +/// Gun is shooting. +#define AUTOFIRE_STAT_FIRING (1<<2) diff --git a/code/__DEFINES/dcs/dcs_helpers.dm b/code/__DEFINES/dcs/dcs_helpers.dm index ba2b9a704a3..c5c7e3c42dd 100644 --- a/code/__DEFINES/dcs/dcs_helpers.dm +++ b/code/__DEFINES/dcs/dcs_helpers.dm @@ -10,10 +10,6 @@ /// Every proc you pass to RegisterSignal must have this. #define SIGNAL_HANDLER SHOULD_NOT_SLEEP(TRUE) -/// Signifies that this proc is used to handle signals, but also sleeps. -/// Do not use this for new work. -#define SIGNAL_HANDLER_DOES_SLEEP - /// A wrapper for _AddElement that allows us to pretend we're using normal named arguments #define AddElement(arguments...) _AddElement(list(##arguments)) /// A wrapper for _RemoveElement that allows us to pretend we're using normal named arguments diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 05150f92552..1d4d33ac264 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -219,8 +219,17 @@ ///////////////// -///from base of client/Click(): (atom/target, atom/location, control, params, mob/user) +// /client signals + +/// from base of client/Click(): (atom/target, atom/location, control, params, mob/user) #define COMSIG_CLIENT_CLICK "atom_client_click" +/// from base of client/MouseDown(): (/client, object, location, control, params) +#define COMSIG_CLIENT_MOUSEDOWN "client_mousedown" +/// from base of client/MouseUp(): (/client, object, location, control, params) +#define COMSIG_CLIENT_MOUSEUP "client_mouseup" + #define COMPONENT_CLIENT_MOUSEUP_INTERCEPT (1<<0) +/// from base of client/MouseUp(): (/client, object, location, control, params) +#define COMSIG_CLIENT_MOUSEDRAG "client_mousedrag" ///from base of area/Entered(): (/area) #define COMSIG_ENTER_AREA "enter_area" @@ -708,11 +717,16 @@ // /obj/item/gun signals -///called in /obj/item/gun/process_fire (user, target, params, zone_override) +/// called in /obj/item/gun/process_fire (user, target, params, zone_override) #define COMSIG_MOB_FIRED_GUN "mob_fired_gun" - -///called in /obj/item/gun/process_fire (user, target) +/// called in /obj/item/gun/process_fire (user, target) #define COMSIG_GUN_FIRED "gun_fired" +/// called in /datum/component/automatic_fire/proc/on_mouse_down: (client/clicker, atom/target, turf/location, control, params) +#define COMSIG_AUTOFIRE_ONMOUSEDOWN "autofire_onmousedown" + #define COMPONENT_AUTOFIRE_ONMOUSEDOWN_BYPASS (1<<0) +/// called in /datum/component/automatic_fire/proc/process_shot(): (atom/target, mob/living/shooter, allow_akimbo, params) +#define COMSIG_AUTOFIRE_SHOT "autofire_shot" + #define COMPONENT_AUTOFIRE_SHOT_SUCCESS (1<<0) // /obj/item/grenade signals @@ -1044,3 +1058,9 @@ // Sent when a mob spawner is attacked directly or via projectile. #define COMSIG_SPAWNER_SET_TARGET "spawner_set_target" + +/// Used by admin-tooling to remove radiation +#define COMSIG_ADMIN_DECONTAMINATE "admin_decontaminate" + +/// Sent when bodies transfer between shades/shards and constructs +#define COMSIG_SHADE_TO_CONSTRUCT_TRANSFER "shade_to_construct_transfer" diff --git a/code/__DEFINES/dna.dm b/code/__DEFINES/dna.dm index c3cdf346f92..6f6b03b29ad 100644 --- a/code/__DEFINES/dna.dm +++ b/code/__DEFINES/dna.dm @@ -50,17 +50,18 @@ #define DNA_UI_EYES_G 35 #define DNA_UI_EYES_B 36 #define DNA_UI_GENDER 37 -#define DNA_UI_BEARD_STYLE 38 -#define DNA_UI_HAIR_STYLE 39 -#define DNA_UI_HACC_STYLE 40 -#define DNA_UI_BACC_STYLE 41 -#define DNA_UI_HAIR_GRADIENT_STYLE 42 -#define DNA_UI_HEAD_MARK_STYLE 43 -#define DNA_UI_BODY_MARK_STYLE 44 -#define DNA_UI_TAIL_MARK_STYLE 45 -#define DNA_UI_PHYSIQUE 46 -#define DNA_UI_HEIGHT 47 -#define DNA_UI_LENGTH 48 // Update this when you add something, or you WILL break shit. +#define DNA_UI_BODY_TYPE 38 +#define DNA_UI_BEARD_STYLE 39 +#define DNA_UI_HAIR_STYLE 40 +#define DNA_UI_HACC_STYLE 41 +#define DNA_UI_BACC_STYLE 42 +#define DNA_UI_HAIR_GRADIENT_STYLE 43 +#define DNA_UI_HEAD_MARK_STYLE 44 +#define DNA_UI_BODY_MARK_STYLE 45 +#define DNA_UI_TAIL_MARK_STYLE 46 +#define DNA_UI_PHYSIQUE 47 +#define DNA_UI_HEIGHT 48 +#define DNA_UI_LENGTH 49 // Update this when you add something, or you WILL break shit. #define DNA_SE_LENGTH 55 // Was STRUCDNASIZE, size 27. 15 new blocks added = 42, plus room to grow. diff --git a/code/__DEFINES/genetics_defines.dm b/code/__DEFINES/genetics_defines.dm index f03a2fcdfb1..d437121dbbb 100644 --- a/code/__DEFINES/genetics_defines.dm +++ b/code/__DEFINES/genetics_defines.dm @@ -42,6 +42,7 @@ #define BLOOD_VOLUME_MAXIMUM 2000 #define BLOOD_VOLUME_NORMAL 560 #define BLOOD_VOLUME_SAFE 501 +#define BLOOD_VOLUME_STABLE 357 #define BLOOD_VOLUME_OKAY 336 #define BLOOD_VOLUME_BAD 224 #define BLOOD_VOLUME_SURVIVE 122 diff --git a/code/__DEFINES/hud_locations.dm b/code/__DEFINES/hud_locations.dm index d14a51d3593..3c907ddf9b5 100644 --- a/code/__DEFINES/hud_locations.dm +++ b/code/__DEFINES/hud_locations.dm @@ -107,6 +107,7 @@ #define ui_healthdoll "EAST-1:28,CENTER-1:15" #define ui_health "EAST-1:28,CENTER:17" #define ui_internal "EAST-1:28,CENTER+1:19" +#define ui_stamina "EAST-1:28,CENTER-2:15" //borgs #define ui_borg_health "EAST-1:28,CENTER-1:15" //borgs have the health display where humans have the pressure damage indicator. diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 4f808a9ad0a..62d3df6514e 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -58,6 +58,10 @@ #define isclothing(A) (istype(A, /obj/item/clothing)) +#define isprojectile(A) (istype(A, /obj/item/projectile)) + +#define isgun(A) (istype(A, /obj/item/gun)) + #define is_pen(W) (istype(W, /obj/item/pen) || istype(W, /obj/item/flashlight/pen)) #define is_pda(W) (istype(W, /obj/item/pda)) diff --git a/code/__DEFINES/martial_arts.dm b/code/__DEFINES/martial_arts.dm index 4e8111e0573..566c7a7a714 100644 --- a/code/__DEFINES/martial_arts.dm +++ b/code/__DEFINES/martial_arts.dm @@ -14,4 +14,4 @@ #define MARTIAL_COMBO_STEP_HELP "Help" // A check used for all act types. Such as disarm_act -#define MARTIAL_ARTS_ACT_CHECK if((. = ..()) != FALSE) return . +#define MARTIAL_ARTS_ACT_CHECK if((. = ..()) != FALSE) return diff --git a/code/__DEFINES/misc_defines.dm b/code/__DEFINES/misc_defines.dm index c1ab48c1f79..17beb518b37 100644 --- a/code/__DEFINES/misc_defines.dm +++ b/code/__DEFINES/misc_defines.dm @@ -398,7 +398,7 @@ #define INVESTIGATE_BOMB "bombs" // The SQL version required by this version of the code -#define SQL_VERSION 54 +#define SQL_VERSION 55 // Vending machine stuff #define CAT_NORMAL (1<<0) diff --git a/code/__DEFINES/mob_defines.dm b/code/__DEFINES/mob_defines.dm index 1d66a0504ff..5d57157cfb4 100644 --- a/code/__DEFINES/mob_defines.dm +++ b/code/__DEFINES/mob_defines.dm @@ -263,8 +263,6 @@ #define ispathsilicon(A) (ispath(A, /mob/living/silicon)) #define ispathanimal(A) (ispath(A, /mob/living/simple_animal)) -#define isAutoAnnouncer(A) (istype((A), /mob/living/automatedannouncer)) - #define iscameramob(A) (istype((A), /mob/camera)) #define isAIEye(A) (istype((A), /mob/camera/aiEye)) #define isovermind(A) (istype((A), /mob/camera/blob)) @@ -359,3 +357,9 @@ #define TS_TIER_3 3 #define TS_TIER_4 4 #define TS_TIER_5 5 + +/* Defines used for `incorporeal_move` */ +#define NO_INCORPOREAL_MOVE 0 +#define INCORPOREAL_MOVE_NORMAL 1 +#define INCORPOREAL_MOVE_NINJA 2 +#define INCORPOREAL_MOVE_HOLY_BLOCK 3 diff --git a/code/__DEFINES/preferences_defines.dm b/code/__DEFINES/preferences_defines.dm index 61d0ef1652d..162df1bb973 100644 --- a/code/__DEFINES/preferences_defines.dm +++ b/code/__DEFINES/preferences_defines.dm @@ -17,7 +17,7 @@ #define PREFTOGGLE_CHAT_DEAD (1<<1) #define PREFTOGGLE_CHAT_GHOSTEARS (1<<2) #define PREFTOGGLE_CHAT_GHOSTSIGHT (1<<3) -#define PREFTOGGLE_CHAT_PRAYER (1<<4) +#define PREFTOGGLE_CHAT_PRAYER (1<<4) // Defunct #define PREFTOGGLE_CHAT_RADIO (1<<5) // #define PREFTOGGLE_AZERTY (1<<6) // obsolete #define PREFTOGGLE_CHAT_DEBUGLOGS (1<<7) @@ -81,6 +81,21 @@ #error toggles_2 bitflag over 16777215. Please make an issue report and postpone the feature you are working on. #endif +// This is a list index. Required to start at 1 instead of 0 so it's properly placed in the list +#define PREFTOGGLE_CATEGORY_GENERAL 1 +#define PREFTOGGLE_CATEGORY_LIVING 2 +#define PREFTOGGLE_CATEGORY_GHOST 3 +#define PREFTOGGLE_CATEGORY_ADMIN 4 + +// Preftoggle type defines +/// Special toggles, stuff that just overrides set_toggles entirely +#define PREFTOGGLE_SPECIAL 0 +/// Interacts with the sound bitflag +#define PREFTOGGLE_SOUND 1 +/// Interacts with the toggles bitflag +#define PREFTOGGLE_TOGGLE1 2 +/// Interacts with the toggles2 bitflag +#define PREFTOGGLE_TOGGLE2 3 // Admin attack logs filter system, see /proc/add_attack_logs and /proc/msg_admin_attack @@ -133,6 +148,7 @@ #define TAB_ANTAG 2 #define TAB_GEAR 3 #define TAB_KEYS 4 +#define TAB_TOGGLES 5 // Colourblind modes #define COLOURBLIND_MODE_NONE "None" diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 4f185e0f70a..d34fb486829 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -18,6 +18,8 @@ #define STATUS_EFFECT_SHADOW_MEND /datum/status_effect/shadow_mend //Quick, powerful heal that deals damage afterwards. Heals 15 brute/burn every second for 3 seconds. #define STATUS_EFFECT_VOID_PRICE /datum/status_effect/void_price //The price of healing yourself with void energy. Deals 3 brute damage every 3 seconds for 30 seconds. +#define STATUS_EFFECT_SHADOW_MEND_DEVIL /datum/status_effect/shadow_mend/devil //Tarot version, hurts others over self + #define STATUS_EFFECT_HIPPOCRATIC_OATH /datum/status_effect/hippocraticOath //Gives you an aura of healing as well as regrowing the Rod of Asclepius if lost #define STATUS_EFFECT_REGENERATIVE_CORE /datum/status_effect/regenerative_core @@ -37,6 +39,8 @@ #define STATUS_EFFECT_BLOODDRUNK /datum/status_effect/blooddrunk //Stun immunity and greatly reduced damage taken +#define STATUS_EFFECT_BLOODDRUNK_CHARIOT /datum/status_effect/blooddrunk/chariot //adds pacifism + #define STATUS_EFFECT_DASH /datum/status_effect/dash // Grants the ability to dash, expiring after a few secodns /// Rapid burn/brute/oxy/blood healing from the cling ability @@ -62,6 +66,12 @@ #define STATUS_EFFECT_BEARSERKER_RAGE /datum/status_effect/bearserker_rage +#define STATUS_EFFECT_XRAY /datum/status_effect/xray // Xray vision for 2 minutes + +#define STATUS_EFFECT_BADASS /datum/status_effect/badass // Badass trait for 2 minutes. + +#define STATUS_EFFECT_REVERSED_SUN /datum/status_effect/reversed_sun // Weaker eternal darkness, nightvision, but nearsight + ///////////// // DEBUFFS // ///////////// @@ -114,6 +124,8 @@ #define STATUS_EFFECT_PEPPERSPRAYED /datum/status_effect/pepper_spray +#define STATUS_EFFECT_REVERSED_HIGH_PRIESTESS /datum/status_effect/reversed_high_priestess //Bubblegum will chase the person hit by the effect, grabbing people at random. This can and WILL include the caster. + //#define STATUS_EFFECT_NECROPOLIS_CURSE /datum/status_effect/necropolis_curse //#define CURSE_BLINDING 1 //makes the edges of the target's screen obscured //#define CURSE_SPAWNING 2 //spawns creatures that attack the target only diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index c30ca477cae..59da6920026 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -242,7 +242,6 @@ continue if(is_same_root_atom(M, speaker_coverage[ear])) . |= M - return . /proc/inLineOfSight(X1,Y1,X2,Y2,Z=1,PX1=16.5,PY1=16.5,PX2=16.5,PY2=16.5) var/turf/T diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 97c9fe44971..174ecddda53 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -139,6 +139,11 @@ if(initial(D.name)) GLOB.keybindings += new path() + for(var/path in subtypesof(/datum/preference_toggle)) + var/datum/preference_toggle/pref_toggle = path + if(initial(pref_toggle.name)) + GLOB.preference_toggles += new path() + for(var/path in subtypesof(/datum/objective)) var/datum/objective/O = path if(isnull(initial(O.name))) diff --git a/code/__HELPERS/mob_helpers.dm b/code/__HELPERS/mob_helpers.dm index bebb8213919..d4e50baa361 100644 --- a/code/__HELPERS/mob_helpers.dm +++ b/code/__HELPERS/mob_helpers.dm @@ -43,8 +43,6 @@ if(hairstyle == "Bald") //Just in case. valid_hairstyles += hairstyle continue - if((gender == MALE && S.gender == FEMALE) || (gender == FEMALE && S.gender == MALE)) - continue if(species == "Machine") //If the user is a species who can have a robotic head... if(!robohead) robohead = GLOB.all_robolimbs["Morpheus Cyberkinetics"] @@ -72,8 +70,6 @@ if(facialhairstyle == "Shaved") //Just in case. valid_facial_hairstyles += facialhairstyle continue - if((gender == MALE && S.gender == FEMALE) || (gender == FEMALE && S.gender == MALE)) - continue if(species == "Machine") //If the user is a species who can have a robotic head... if(!robohead) robohead = GLOB.all_robolimbs["Morpheus Cyberkinetics"] @@ -171,10 +167,13 @@ current_species = GLOB.all_species[species] if(!current_species || current_species.name == "Human") - if(gender==FEMALE) - return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) - else - return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) + switch(gender) + if(FEMALE) + return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) + if(MALE) + return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) + else + return capitalize(pick(GLOB.first_names_male + GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) else return current_species.get_random_name(gender) @@ -190,7 +189,6 @@ return min(max(. + rand(-25, 25), -185), 34) else if(species == "Vox") . = rand(1, 6) - return . /proc/skintone2racedescription(tone, species = "Human") if(species == "Human") @@ -610,7 +608,7 @@ GLOBAL_LIST_EMPTY(do_after_once_tracker) var/viewX var/viewY if(isnum(view)) - var/totalviewrange = 1 + 2 * view + var/totalviewrange = (view < 0 ? -1 : 1) + 2 * view viewX = totalviewrange viewY = totalviewrange else if(istext(view)) @@ -626,6 +624,12 @@ GLOBAL_LIST_EMPTY(do_after_once_tracker) return list(viewX, viewY) +/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[2], source.y + view_range[2]) + //Used in chemical_mob_spawn. Generates a random mob based on a given gold_core_spawnable value. /proc/create_random_mob(spawn_location, mob_class = HOSTILE_SPAWN) var/static/list/mob_spawn_meancritters = list() // list of possible hostile mobs diff --git a/code/__HELPERS/sanitize_values.dm b/code/__HELPERS/sanitize_values.dm index 2ba09743571..ed3c6627575 100644 --- a/code/__HELPERS/sanitize_values.dm +++ b/code/__HELPERS/sanitize_values.dm @@ -12,9 +12,12 @@ return default /proc/sanitize_inlist(value, list/List, default) - if(value in List) return value - if(default) return default - if(length(List)) return pick(List) + if(value in List) + return value + if(default) + return default + if(length(List)) + return pick(List) /proc/sanitize_json(json_input) if(length(json_input) && istext(json_input)) @@ -23,31 +26,37 @@ //more specialised stuff -/proc/sanitize_gender(gender,neuter=0,plural=0, default="male") +/proc/sanitize_gender(gender, neuter = FALSE, default = "male") switch(gender) - if(MALE, FEMALE)return gender + if(MALE, FEMALE, PLURAL) + return gender if(NEUTER) - if(neuter) return gender - else return default - if(PLURAL) - if(plural) return gender - else return default + if(neuter) + return gender + else + return default return default /proc/sanitize_hexcolor(color, default="#000000") - if(!istext(color)) return default + if(!istext(color)) + return default var/len = length(color) - if(len != 7 && len !=4) return default - if(text2ascii(color,1) != 35) return default //35 is the ascii code for "#" + if(len != 7 && len !=4) + return default + if(text2ascii(color, 1) != 35) + return default //35 is the ascii code for "#" . = "#" for(var/i=2,i<=len,i++) var/ascii = text2ascii(color,i) switch(ascii) - if(48 to 57) . += ascii2text(ascii) //numbers 0 to 9 - if(97 to 102) . += ascii2text(ascii) //letters a to f - if(65 to 70) . += ascii2text(ascii+32) //letters A to F - translates to lowercase - else return default - return . + if(48 to 57) + . += ascii2text(ascii) //numbers 0 to 9 + if(97 to 102) + . += ascii2text(ascii) //letters a to f + if(65 to 70) + . += ascii2text(ascii + 32) //letters A to F - translates to lowercase + else + return default /proc/sanitize_ooccolor(color) var/list/HSL = rgb2hsl(hex2num(copytext(color,2,4)),hex2num(copytext(color,4,6)),hex2num(copytext(color,6,8))) diff --git a/code/__HELPERS/tool_helpers.dm b/code/__HELPERS/tool_helpers.dm index 03e14b56141..c88ee7c6046 100644 --- a/code/__HELPERS/tool_helpers.dm +++ b/code/__HELPERS/tool_helpers.dm @@ -26,11 +26,6 @@ return TRUE return FALSE -/proc/iscrowbar(O) - if(istype(O, /obj/item/crowbar)) - return TRUE - return FALSE - /proc/iscoil(O) if(istype(O, /obj/item/stack/cable_coil)) return TRUE diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index f118fab395f..f883f0cec77 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -70,20 +70,14 @@ return num_list //Splits the text of a file at seperator and returns them in a list. -/proc/file2list(filename, seperator="\n") - return splittext(return_file_text(filename),seperator) - - -//Turns a direction into text - -/proc/num2dir(direction) - switch(direction) - if(1.0) return NORTH - if(2.0) return SOUTH - if(4.0) return EAST - if(8.0) return WEST - else - stack_trace("UNKNOWN DIRECTION: [direction]") +/proc/file2list(filename, separator = "\n", no_empty = TRUE) + var/list/result = list() + for(var/line in splittext(return_file_text(filename), separator)) + var/text = trim(line) + if(no_empty && !text) + continue + result += text + return result /proc/dir2text(direction) switch(direction) @@ -193,7 +187,6 @@ if(rights & R_MENTOR) . += "[seperator]+MENTOR" if(rights & R_VIEWRUNTIMES) . += "[seperator]+VIEWRUNTIMES" if(rights & R_MAINTAINER) . += "[seperator]+MAINTAINER" - return . /proc/ui_style2icon(ui_style) switch(ui_style) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 579be0eb83a..79d3208719c 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -262,40 +262,6 @@ /proc/format_frequency(f) return "[round(f / 10)].[f % 10]" -/obj/proc/atmosanalyzer_scan(datum/gas_mixture/air_contents, mob/user, obj/target = src) - var/obj/icon = target - if(isliving(user)) - user.visible_message("[user] uses the analyzer on [target].", "You use the analyzer on [target].") - var/pressure = air_contents.return_pressure() - var/total_moles = air_contents.total_moles() - var/volume = air_contents.return_volume() - - user.show_message("Results of analysis of [bicon(icon)] [target].", 1) - if(total_moles>0) - var/o2_concentration = air_contents.oxygen/total_moles - var/n2_concentration = air_contents.nitrogen/total_moles - var/co2_concentration = air_contents.carbon_dioxide/total_moles - var/plasma_concentration = air_contents.toxins/total_moles - var/n2o_concentration = air_contents.sleeping_agent/total_moles - - var/unknown_concentration = 1-(o2_concentration+n2_concentration+co2_concentration+plasma_concentration+n2o_concentration) - - user.show_message("Pressure: [round(pressure,0.1)] kPa", 1) - user.show_message("Nitrogen: [round(n2_concentration*100)] % ([round(air_contents.nitrogen,0.01)] moles)", 1) - user.show_message("Oxygen: [round(o2_concentration*100)] % ([round(air_contents.oxygen,0.01)] moles)", 1) - user.show_message("CO2: [round(co2_concentration*100)] % ([round(air_contents.carbon_dioxide,0.01)] moles)", 1) - user.show_message("Plasma: [round(plasma_concentration*100)] % ([round(air_contents.toxins,0.01)] moles)", 1) - user.show_message("Nitrous Oxide: [round(n2o_concentration*100)] % ([round(air_contents.sleeping_agent,0.01)] moles)", 1) - if(unknown_concentration>0.01) - user.show_message("Unknown: [round(unknown_concentration*100)] % ([round(unknown_concentration*total_moles,0.01)] moles)", 1) - user.show_message("Total: [round(total_moles,0.01)] moles", 1) - user.show_message("Temperature: [round(air_contents.temperature-T0C)] °C", 1) - user.show_message("Volume: [round(volume)] Liters", 1) - else - user.show_message("[target] is empty!", 1) - user.show_message("Volume: [round(volume)] Liters", 1) - return - //Picks a string of symbols to display as the law number for hacked or ion laws /proc/ionnum() return "[pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")]" @@ -323,7 +289,6 @@ if(A.control_disabled) continue . += A - return . //Find an active ai with the least borgs. VERBOSE PROCNAME HUH! /proc/select_active_ai_with_fewest_borgs() @@ -1207,7 +1172,7 @@ GLOBAL_LIST_INIT(wall_items, typecacheof(list(/obj/machinery/power/apc, /obj/mac /obj/machinery/computer/security/telescreen, /obj/machinery/airlock_controller, /obj/item/storage/secure/safe, /obj/machinery/door_timer, /obj/machinery/flasher, /obj/machinery/keycard_auth, /obj/structure/mirror, /obj/structure/closet/fireaxecabinet, /obj/machinery/computer/security/telescreen/entertainment, - /obj/structure/sign))) + /obj/structure/sign, /obj/machinery/barsign))) /proc/gotwallitem(loc, dir) for(var/obj/O in loc) @@ -1951,6 +1916,27 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) pixel_x = initialpixelx pixel_y = initialpixely +/// Returns a turf based on text inputs, original turf and viewing client +/proc/parse_caught_click_modifiers(list/modifiers, turf/origin, client/viewing_client) + if(!modifiers) + return + + var/screen_loc = splittext(modifiers["screen-loc"], ",") + var/list/actual_view = getviewsize(viewing_client ? viewing_client.view : world.view) + var/click_turf_x = splittext(screen_loc[1], ":") + var/click_turf_y = splittext(screen_loc[2], ":") + var/click_turf_z = origin.z + + var/click_turf_px = text2num(click_turf_x[2]) + var/click_turf_py = text2num(click_turf_y[2]) + click_turf_x = origin.x + text2num(click_turf_x[1]) - round(actual_view[1] / 2) - 1 + click_turf_y = origin.y + text2num(click_turf_y[1]) - round(actual_view[2] / 2) - 1 + + var/turf/click_turf = locate(clamp(click_turf_x, 1, world.maxx), clamp(click_turf_y, 1, world.maxy), click_turf_z) + LAZYSET(modifiers, "icon-x", "[(click_turf_px - click_turf.pixel_x) + ((click_turf_x - click_turf.x) * world.icon_size)]") + LAZYSET(modifiers, "icon-y", "[(click_turf_py - click_turf.pixel_y) + ((click_turf_y - click_turf.y) * world.icon_size)]") + return click_turf + /proc/params2turf(scr_loc, turf/origin, client/C) if(!scr_loc) return null diff --git a/code/_globalvars/lists/preference_toggle_lists.dm b/code/_globalvars/lists/preference_toggle_lists.dm new file mode 100644 index 00000000000..bc708159501 --- /dev/null +++ b/code/_globalvars/lists/preference_toggle_lists.dm @@ -0,0 +1,8 @@ +GLOBAL_LIST_EMPTY(preference_toggles) + +GLOBAL_LIST_INIT(preference_toggle_groups, list( + "General Preferences" = PREFTOGGLE_CATEGORY_GENERAL, + "In-Round Preferences" = PREFTOGGLE_CATEGORY_LIVING, + "Ghost Preferences" = PREFTOGGLE_CATEGORY_GHOST, + "Admin Preferences" = PREFTOGGLE_CATEGORY_ADMIN, +)) diff --git a/code/_onclick/drag_drop.dm b/code/_onclick/drag_drop.dm index 84f87e5bfd5..9f40c657b95 100644 --- a/code/_onclick/drag_drop.dm +++ b/code/_onclick/drag_drop.dm @@ -47,4 +47,71 @@ actually if you do something in that proc like changing user location or whateve to inform the game this action was expected and its fine */ /atom/proc/MouseDrop_T(atom/dropping, mob/user, params) // return TRUE if you want to prevent us click the object after it - return + return FALSE + +/client/MouseDown(datum/object, location, control, params) + if(QDELETED(object)) // Yep, you can click on qdeleted things before they have time to nullspace. Fun. + return + SEND_SIGNAL(src, COMSIG_CLIENT_MOUSEDOWN, object, location, control, params) + if(mouse_down_icon) + mouse_pointer_icon = mouse_down_icon + var/delay = mob.CanMobAutoclick(object, location, params) + if(delay) + selected_target[1] = object + selected_target[2] = params + while(selected_target[1]) + Click(selected_target[1], location, control, selected_target[2]) + sleep(delay) + +/client/MouseUp(object, location, control, params) + if(SEND_SIGNAL(src, COMSIG_CLIENT_MOUSEUP, object, location, control, params) & COMPONENT_CLIENT_MOUSEUP_INTERCEPT) + click_intercept_time = world.time + if(mouse_up_icon) + mouse_pointer_icon = mouse_up_icon + selected_target[1] = null + +/mob/proc/CanMobAutoclick(object, location, params) + return FALSE + +/mob/living/carbon/CanMobAutoclick(atom/object, location, params) + if(!object.IsAutoclickable()) + return FALSE + var/obj/item/active_item = get_active_hand() + return active_item?.CanItemAutoclick(object, location, params) + +/obj/item/proc/CanItemAutoclick(object, location, params) + return FALSE + +/atom/proc/IsAutoclickable() + return TRUE + +/obj/screen/IsAutoclickable() + return FALSE + +/obj/screen/click_catcher/IsAutoclickable() + return TRUE + +// The actual arguments of this: +// MouseDrag(src_object as null|atom in usr.client, +// over_object as null|atom in usr.client, +// src_location as null|turf|text in usr.client, +// over_location as null|turf|text in usr.client, +// src_control as text, over_control as text, params as text) +/client/MouseDrag(src_object, atom/over_object, src_location, turf/over_location, src_control, over_control, params) + var/list/modifiers = params2list(params) + if(!drag_start) // If we're just starting to drag + drag_start = world.time + drag_details = modifiers.Copy() + mouseParams = params + mouse_location_UID = isturf(over_location) ? over_location.UID() : over_location + mouse_object_UID = over_object?.UID() + if(selected_target[1] && over_object?.IsAutoclickable()) + selected_target[1] = over_object + selected_target[2] = params + SEND_SIGNAL(src, COMSIG_CLIENT_MOUSEDRAG, src_object, over_object, src_location, over_location, src_control, over_control, params) + return ..() + +/client/MouseDrop(atom/src_object, atom/over_object, atom/src_location, atom/over_location, src_control, over_control, params) + ..() + drag_start = 0 + drag_details = null diff --git a/code/_onclick/hud/human_hud.dm b/code/_onclick/hud/human_hud.dm index 4a036cf6e85..848fd46b2b9 100644 --- a/code/_onclick/hud/human_hud.dm +++ b/code/_onclick/hud/human_hud.dm @@ -329,6 +329,9 @@ mymob.healths = new /atom/movable/screen/healths() infodisplay += mymob.healths + mymob.staminas = new /atom/movable/screen/healths/stamina() + infodisplay += mymob.staminas + mymob.healthdoll = new() infodisplay += mymob.healthdoll @@ -483,16 +486,3 @@ H.r_hand.screen_loc = null if(H.l_hand) H.l_hand.screen_loc = null - - -/mob/living/carbon/human/verb/toggle_hotkey_verbs() - set category = "OOC" - set name = "Toggle Hotkey Buttons" - set desc = "This disables or enables the user interface buttons which can be used with hotkeys." - - if(hud_used.hotkey_ui_hidden) - client.screen += hud_used.hotkeybuttons - hud_used.hotkey_ui_hidden = FALSE - else - client.screen -= hud_used.hotkeybuttons - hud_used.hotkey_ui_hidden = TRUE diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index 501de75891e..36082679a21 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -10,6 +10,7 @@ GLOBAL_LIST_EMPTY(radial_menus) var/datum/radial_menu/parent /atom/movable/screen/radial/Destroy() + parent.current_user.screen -= src parent = null return ..() @@ -245,7 +246,7 @@ GLOBAL_LIST_EMPTY(radial_menus) QDEL_LIST_CONTENTS(elements) QDEL_NULL(close_button) anchor = null - . = ..() + return ..() /* Presents radial menu to user anchored to anchor (or user if the anchor is currently in users screen) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index bb041323527..b4897cd5df7 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -486,9 +486,9 @@ var/mob/M = usr switch(name) if("right hand", "r_hand") - M.activate_hand("r") + M.activate_hand(HAND_BOOL_RIGHT) if("left hand", "l_hand") - M.activate_hand("l") + M.activate_hand(HAND_BOOL_LEFT) return TRUE /atom/movable/screen/swap_hand @@ -562,3 +562,7 @@ /atom/movable/screen/component_button/Click(params) if(parent) parent.component_click(src, params) + +/atom/movable/screen/healths/stamina + icon_state = "stamina_0" + screen_loc = ui_stamina diff --git a/code/_onclick/observer_onclick.dm b/code/_onclick/observer_onclick.dm index d0a20b1519e..b0632715a47 100644 --- a/code/_onclick/observer_onclick.dm +++ b/code/_onclick/observer_onclick.dm @@ -77,9 +77,12 @@ /mob/dead/observer/MiddleShiftControlClickOn(atom/A) return -/atom/proc/attack_ghost(mob/user) +/atom/proc/attack_ghost(mob/dead/observer/user) if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_GHOST, user) & COMPONENT_CANCEL_ATTACK_CHAIN) return TRUE + if(user.client) + if(user.gas_scan && atmos_scan(user=user, target=src, silent=TRUE)) + return TRUE // health + machine analyzer for ghosts /mob/living/attack_ghost(mob/dead/observer/user) @@ -106,14 +109,3 @@ /obj/effect/portal/attack_ghost(mob/user as mob) if(target) user.forceMove(get_turf(target)) - -/obj/machinery/atmospherics/attack_ghost(mob/dead/observer/user) - if(!istype(user)) // Make sure user is actually an observer. Revenents also use attack_ghost, but do not have the toggle gas analyzer var. - return - if(user.gas_analyzer) - if(istype(src, /obj/machinery/atmospherics/pipe)) - var/obj/machinery/atmospherics/pipe/T = src - atmosanalyzer_scan(T.parent.air, user, T) - else if(istype(src, /obj/machinery/atmospherics/unary)) - var/obj/machinery/atmospherics/unary/T = src - atmosanalyzer_scan(T.air_contents, user, T) diff --git a/code/controllers/configuration/sections/general_configuration.dm b/code/controllers/configuration/sections/general_configuration.dm index 35477712f33..40b1729b760 100644 --- a/code/controllers/configuration/sections/general_configuration.dm +++ b/code/controllers/configuration/sections/general_configuration.dm @@ -18,7 +18,7 @@ var/allow_antag_hud = TRUE /// Forbid players from rejoining if they use AntagHUD? var/restrict_antag_hud_rejoin = TRUE - /// Enable respanws by default? + /// Enable respawns by default? var/respawn_enabled = FALSE /// Enable CID randomiser buster? var/enabled_cid_randomiser_buster = FALSE @@ -93,8 +93,8 @@ CONFIG_LOAD_BOOL(guest_ban, data["guest_ban"]) CONFIG_LOAD_BOOL(allow_antag_hud, data["allow_antag_hud"]) CONFIG_LOAD_BOOL(restrict_antag_hud_rejoin, data["restrict_antag_hud_rejoin"]) - CONFIG_LOAD_BOOL(respawn_enabled, data["respawn_enabled"]) CONFIG_LOAD_BOOL(enabled_cid_randomiser_buster, data["enable_cid_randomiser_buster"]) + CONFIG_LOAD_BOOL(respawn_enabled, data["respawn_enabled"]) CONFIG_LOAD_BOOL(forbid_singulo_possession, data["prevent_admin_singlo_possession"]) CONFIG_LOAD_BOOL(popup_admin_pm, data["popup_admin_pm"]) CONFIG_LOAD_BOOL(allow_holidays, data["allow_holidays"]) diff --git a/code/controllers/subsystem/SSradiation.dm b/code/controllers/subsystem/SSradiation.dm index 540e56ce19a..c30f40a1363 100644 --- a/code/controllers/subsystem/SSradiation.dm +++ b/code/controllers/subsystem/SSradiation.dm @@ -13,6 +13,8 @@ PROCESSING_SUBSYSTEM_DEF(radiation) var/rad_cache_update_interval = 5 SECONDS var/list/turf_rad_cache = list() var/list/prev_rad_cache = list() + /// Lazy list of all radioactive components + var/list/all_radiations /datum/controller/subsystem/processing/radiation/proc/warn(datum/component/radioactive/contamination) diff --git a/code/controllers/subsystem/SSticker.dm b/code/controllers/subsystem/SSticker.dm index 6a9bd55d688..c08699c48ee 100644 --- a/code/controllers/subsystem/SSticker.dm +++ b/code/controllers/subsystem/SSticker.dm @@ -81,9 +81,9 @@ SUBSYSTEM_DEF(ticker) switch(current_state) if(GAME_STATE_STARTUP) // This is ran as soon as the MC starts firing, and should only run ONCE, unless startup fails - round_start_time = world.time + (GLOB.configuration.general.lobby_time SECONDS) pregame_timeleft = GLOB.configuration.general.lobby_time SECONDS - to_chat(world, "Welcome to the pre-game lobby!") + round_start_time = world.time + pregame_timeleft + to_chat(world, "Welcome to the pre-game lobby!") to_chat(world, "Please, setup your character and select ready. Game will start in [GLOB.configuration.general.lobby_time] seconds") current_state = GAME_STATE_PREGAME fire() // TG says this is a good idea @@ -95,12 +95,9 @@ SUBSYSTEM_DEF(ticker) return // This is so we dont have sleeps in controllers, because that is a bad, bad thing - if(!delay_end) - pregame_timeleft = max(0, round_start_time - world.time) // Normal lobby countdown when roundstart was not delayed - else - pregame_timeleft = max(0, pregame_timeleft - wait) // If roundstart was delayed, we should resume the countdown where it left off + pregame_timeleft = max(0, round_start_time - world.time) - if(pregame_timeleft <= 600 && !tipped) // 60 seconds + if(pregame_timeleft <= 1 MINUTES && !tipped) send_tip_of_the_round() tipped = TRUE diff --git a/code/controllers/subsystem/SStimer.dm b/code/controllers/subsystem/SStimer.dm index 7e80a9c06e7..9c9bbeed24a 100644 --- a/code/controllers/subsystem/SStimer.dm +++ b/code/controllers/subsystem/SStimer.dm @@ -341,7 +341,7 @@ SUBSYSTEM_DEF(timer) return // Sort it first - var/list/sorted = sortTim(GLOB.timers_by_type, GLOBAL_PROC_REF(cmp_numeric_dsc), TRUE) + var/list/sorted = sortTim(GLOB.timers_by_proc, GLOBAL_PROC_REF(cmp_numeric_dsc), TRUE) // DOOMP EET var/timer_json_file = file("[GLOB.log_directory]/timers.json") @@ -571,14 +571,14 @@ SUBSYSTEM_DEF(timer) CRASH("this timer is attached to no object, the attempted proc to call was [callBack.delegate]") . = "[callBack.object.type]" -GLOBAL_LIST_EMPTY(timers_by_type) +GLOBAL_LIST_EMPTY(timers_by_proc) // Allows us to track what types generate the most timers. Just invokes the global addtimer /datum/proc/addtimer(datum/callback/callback, wait = 0, flags = 0) - var/tt = "[type]" - if(tt in GLOB.timers_by_type) - GLOB.timers_by_type[tt]++ + var/timer_function = "[type][callback.delegate]" + if(timer_function in GLOB.timers_by_proc) + GLOB.timers_by_proc[timer_function]++ else - GLOB.timers_by_type[tt] = 1 + GLOB.timers_by_proc[timer_function] = 1 return global.addtimer(callback, wait, flags) /** @@ -594,7 +594,7 @@ GLOBAL_LIST_EMPTY(timers_by_type) if(!check_rights(R_DEBUG | R_VIEWRUNTIMES)) return - var/list/sorted = sortTim(GLOB.timers_by_type, GLOBAL_PROC_REF(cmp_numeric_dsc), TRUE) + var/list/sorted = sortTim(GLOB.timers_by_proc, GLOBAL_PROC_REF(cmp_numeric_dsc), TRUE) var/list/text = list("

Timer Log

", "